@eloquentai/chat-sdk 0.33.9-dev → 0.33.11-dev
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/components/chat/chat.hook.d.ts +17 -1
- package/dist/components/chat/index.d.ts +8 -3
- package/dist/components/chat/validations.d.ts +61 -61
- package/dist/components/chat-interface/index.d.ts +14 -5
- package/dist/components/chat-interface/shared.d.ts +9 -0
- package/dist/components/chat-interface/skeleton.d.ts +3 -1
- package/dist/components/chat-interface/suggested-messages.d.ts +6 -5
- package/dist/embed-loader.d.ts +35 -0
- package/dist/embed-loader.entry.d.ts +1 -0
- package/dist/hooks/use-debounce.d.ts +6 -0
- package/dist/hooks/use-latest-ref.d.ts +9 -0
- package/dist/hooks/use-typed-text.d.ts +1 -1
- package/dist/index-hFbiYJI3.js +4165 -0
- package/dist/index-hFbiYJI3.js.map +1 -0
- package/dist/index.css +1 -1
- package/dist/index.mjs +1493 -6609
- package/dist/index.mjs.map +1 -1
- package/dist/lib/appsync-events-client.d.ts +71 -0
- package/dist/lib/config.d.ts +0 -15
- package/dist/{index-IRBMUmPg.js → skeleton-BWoqEWdI.js} +2403 -2635
- package/dist/skeleton-BWoqEWdI.js.map +1 -0
- package/dist/ui.mjs +7 -7
- package/package.json +6 -11
- package/dist/components/logo-animated.d.ts +0 -6
- package/dist/config-CFAxzluW.js +0 -36
- package/dist/config-CFAxzluW.js.map +0 -1
- package/dist/hooks/useTypewriter.d.ts +0 -1
- package/dist/index-IRBMUmPg.js.map +0 -1
- package/dist/index-oyJIfzwW.js +0 -18793
- package/dist/index-oyJIfzwW.js.map +0 -1
- package/dist/logo-animated-CI8oFAlZ.js +0 -7413
- package/dist/logo-animated-CI8oFAlZ.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skeleton-BWoqEWdI.js","sources":["../node_modules/clsx/dist/clsx.mjs","../node_modules/tailwind-merge/dist/bundle-mjs.mjs","../src/lib/utils.ts","../src/components/logo.tsx","../src/components/ui/card.tsx","../src/contexts/theme.context.tsx","../node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.js","../node_modules/lucide-react/dist/esm/shared/src/utils/toKebabCase.js","../node_modules/lucide-react/dist/esm/shared/src/utils/toCamelCase.js","../node_modules/lucide-react/dist/esm/shared/src/utils/toPascalCase.js","../node_modules/lucide-react/dist/esm/defaultAttributes.js","../node_modules/lucide-react/dist/esm/shared/src/utils/hasA11yProp.js","../node_modules/lucide-react/dist/esm/Icon.js","../node_modules/lucide-react/dist/esm/createLucideIcon.js","../node_modules/lucide-react/dist/esm/icons/arrow-up.js","../node_modules/lucide-react/dist/esm/icons/chevron-down.js","../node_modules/lucide-react/dist/esm/icons/circle-alert.js","../node_modules/lucide-react/dist/esm/icons/circle-check-big.js","../node_modules/lucide-react/dist/esm/icons/circle-x.js","../node_modules/lucide-react/dist/esm/icons/copy.js","../node_modules/lucide-react/dist/esm/icons/info.js","../node_modules/lucide-react/dist/esm/icons/message-circle.js","../node_modules/lucide-react/dist/esm/icons/refresh-ccw.js","../node_modules/lucide-react/dist/esm/icons/star.js","../node_modules/lucide-react/dist/esm/icons/thumbs-down.js","../node_modules/lucide-react/dist/esm/icons/thumbs-up.js","../node_modules/lucide-react/dist/esm/icons/triangle-alert.js","../node_modules/lucide-react/dist/esm/icons/x.js","../node_modules/@radix-ui/react-compose-refs/dist/index.mjs","../node_modules/@radix-ui/react-slot/dist/index.mjs","../node_modules/@radix-ui/react-primitive/dist/index.mjs","../node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs","../node_modules/@radix-ui/react-presence/dist/index.mjs","../node_modules/@radix-ui/react-context/dist/index.mjs","../node_modules/@radix-ui/react-use-callback-ref/dist/index.mjs","../node_modules/@radix-ui/react-direction/dist/index.mjs","../node_modules/@radix-ui/number/dist/index.mjs","../node_modules/@radix-ui/primitive/dist/index.mjs","../node_modules/@radix-ui/react-scroll-area/dist/index.mjs","../src/components/ui/scroll-area.tsx","../src/lib/color-contrast.ts","../node_modules/@radix-ui/react-id/dist/index.mjs","../node_modules/@radix-ui/react-use-effect-event/dist/index.mjs","../node_modules/@radix-ui/react-use-controllable-state/dist/index.mjs","../node_modules/@radix-ui/react-dismissable-layer/dist/index.mjs","../node_modules/@radix-ui/react-focus-scope/dist/index.mjs","../node_modules/@radix-ui/react-portal/dist/index.mjs","../node_modules/@radix-ui/react-focus-guards/dist/index.mjs","../node_modules/tslib/tslib.es6.mjs","../node_modules/react-remove-scroll-bar/dist/es2015/constants.js","../node_modules/use-callback-ref/dist/es2015/assignRef.js","../node_modules/use-callback-ref/dist/es2015/useRef.js","../node_modules/use-callback-ref/dist/es2015/useMergeRef.js","../node_modules/use-sidecar/dist/es2015/medium.js","../node_modules/use-sidecar/dist/es2015/exports.js","../node_modules/react-remove-scroll/dist/es2015/medium.js","../node_modules/react-remove-scroll/dist/es2015/UI.js","../node_modules/get-nonce/dist/es2015/index.js","../node_modules/react-style-singleton/dist/es2015/singleton.js","../node_modules/react-style-singleton/dist/es2015/hook.js","../node_modules/react-style-singleton/dist/es2015/component.js","../node_modules/react-remove-scroll-bar/dist/es2015/utils.js","../node_modules/react-remove-scroll-bar/dist/es2015/component.js","../node_modules/react-remove-scroll/dist/es2015/aggresiveCapture.js","../node_modules/react-remove-scroll/dist/es2015/handleScroll.js","../node_modules/react-remove-scroll/dist/es2015/SideEffect.js","../node_modules/react-remove-scroll/dist/es2015/sidecar.js","../node_modules/react-remove-scroll/dist/es2015/Combination.js","../node_modules/aria-hidden/dist/es2015/index.js","../node_modules/@radix-ui/react-dialog/dist/index.mjs","../src/components/ui/dialog.tsx","../src/components/chat-interface/context.tsx","../src/components/chat-interface/shared.ts","../src/hooks/use-typed-text.ts","../node_modules/comma-separated-tokens/index.js","../node_modules/estree-util-is-identifier-name/lib/index.js","../node_modules/hast-util-whitespace/lib/index.js","../node_modules/property-information/lib/util/schema.js","../node_modules/property-information/lib/util/merge.js","../node_modules/property-information/lib/normalize.js","../node_modules/property-information/lib/util/info.js","../node_modules/property-information/lib/util/types.js","../node_modules/property-information/lib/util/defined-info.js","../node_modules/property-information/lib/util/create.js","../node_modules/property-information/lib/aria.js","../node_modules/property-information/lib/util/case-sensitive-transform.js","../node_modules/property-information/lib/util/case-insensitive-transform.js","../node_modules/property-information/lib/html.js","../node_modules/property-information/lib/svg.js","../node_modules/property-information/lib/xlink.js","../node_modules/property-information/lib/xmlns.js","../node_modules/property-information/lib/xml.js","../node_modules/property-information/lib/hast-to-react.js","../node_modules/property-information/lib/find.js","../node_modules/property-information/index.js","../node_modules/space-separated-tokens/index.js","../node_modules/inline-style-parser/cjs/index.js","../node_modules/style-to-object/cjs/index.js","../node_modules/style-to-js/cjs/utilities.js","../node_modules/style-to-js/cjs/index.js","../node_modules/unist-util-position/lib/index.js","../node_modules/unist-util-stringify-position/lib/index.js","../node_modules/vfile-message/lib/index.js","../node_modules/hast-util-to-jsx-runtime/lib/index.js","../node_modules/html-url-attributes/lib/index.js","../node_modules/mdast-util-to-string/lib/index.js","../node_modules/character-entities/index.js","../node_modules/decode-named-character-reference/index.js","../node_modules/micromark-util-chunked/index.js","../node_modules/micromark-util-combine-extensions/index.js","../node_modules/micromark-util-decode-numeric-character-reference/index.js","../node_modules/micromark-util-normalize-identifier/index.js","../node_modules/micromark-util-character/index.js","../node_modules/micromark-util-sanitize-uri/index.js","../node_modules/micromark-factory-space/index.js","../node_modules/micromark/lib/initialize/content.js","../node_modules/micromark/lib/initialize/document.js","../node_modules/micromark-util-classify-character/index.js","../node_modules/micromark-util-resolve-all/index.js","../node_modules/micromark-core-commonmark/lib/attention.js","../node_modules/micromark-core-commonmark/lib/autolink.js","../node_modules/micromark-core-commonmark/lib/blank-line.js","../node_modules/micromark-core-commonmark/lib/block-quote.js","../node_modules/micromark-core-commonmark/lib/character-escape.js","../node_modules/micromark-core-commonmark/lib/character-reference.js","../node_modules/micromark-core-commonmark/lib/code-fenced.js","../node_modules/micromark-core-commonmark/lib/code-indented.js","../node_modules/micromark-core-commonmark/lib/code-text.js","../node_modules/micromark-util-subtokenize/lib/splice-buffer.js","../node_modules/micromark-util-subtokenize/index.js","../node_modules/micromark-core-commonmark/lib/content.js","../node_modules/micromark-factory-destination/index.js","../node_modules/micromark-factory-label/index.js","../node_modules/micromark-factory-title/index.js","../node_modules/micromark-factory-whitespace/index.js","../node_modules/micromark-core-commonmark/lib/definition.js","../node_modules/micromark-core-commonmark/lib/hard-break-escape.js","../node_modules/micromark-core-commonmark/lib/heading-atx.js","../node_modules/micromark-util-html-tag-name/index.js","../node_modules/micromark-core-commonmark/lib/html-flow.js","../node_modules/micromark-core-commonmark/lib/html-text.js","../node_modules/micromark-core-commonmark/lib/label-end.js","../node_modules/micromark-core-commonmark/lib/label-start-image.js","../node_modules/micromark-core-commonmark/lib/label-start-link.js","../node_modules/micromark-core-commonmark/lib/line-ending.js","../node_modules/micromark-core-commonmark/lib/thematic-break.js","../node_modules/micromark-core-commonmark/lib/list.js","../node_modules/micromark-core-commonmark/lib/setext-underline.js","../node_modules/micromark/lib/initialize/flow.js","../node_modules/micromark/lib/initialize/text.js","../node_modules/micromark/lib/constructs.js","../node_modules/micromark/lib/create-tokenizer.js","../node_modules/micromark/lib/parse.js","../node_modules/micromark/lib/postprocess.js","../node_modules/micromark/lib/preprocess.js","../node_modules/micromark-util-decode-string/index.js","../node_modules/mdast-util-from-markdown/lib/index.js","../node_modules/remark-parse/lib/index.js","../node_modules/mdast-util-to-hast/lib/handlers/blockquote.js","../node_modules/mdast-util-to-hast/lib/handlers/break.js","../node_modules/mdast-util-to-hast/lib/handlers/code.js","../node_modules/mdast-util-to-hast/lib/handlers/delete.js","../node_modules/mdast-util-to-hast/lib/handlers/emphasis.js","../node_modules/mdast-util-to-hast/lib/handlers/footnote-reference.js","../node_modules/mdast-util-to-hast/lib/handlers/heading.js","../node_modules/mdast-util-to-hast/lib/handlers/html.js","../node_modules/mdast-util-to-hast/lib/revert.js","../node_modules/mdast-util-to-hast/lib/handlers/image-reference.js","../node_modules/mdast-util-to-hast/lib/handlers/image.js","../node_modules/mdast-util-to-hast/lib/handlers/inline-code.js","../node_modules/mdast-util-to-hast/lib/handlers/link-reference.js","../node_modules/mdast-util-to-hast/lib/handlers/link.js","../node_modules/mdast-util-to-hast/lib/handlers/list-item.js","../node_modules/mdast-util-to-hast/lib/handlers/list.js","../node_modules/mdast-util-to-hast/lib/handlers/paragraph.js","../node_modules/mdast-util-to-hast/lib/handlers/root.js","../node_modules/mdast-util-to-hast/lib/handlers/strong.js","../node_modules/mdast-util-to-hast/lib/handlers/table.js","../node_modules/mdast-util-to-hast/lib/handlers/table-row.js","../node_modules/mdast-util-to-hast/lib/handlers/table-cell.js","../node_modules/trim-lines/index.js","../node_modules/mdast-util-to-hast/lib/handlers/text.js","../node_modules/mdast-util-to-hast/lib/handlers/thematic-break.js","../node_modules/mdast-util-to-hast/lib/handlers/index.js","../node_modules/@ungap/structured-clone/esm/types.js","../node_modules/@ungap/structured-clone/esm/deserialize.js","../node_modules/@ungap/structured-clone/esm/serialize.js","../node_modules/@ungap/structured-clone/esm/index.js","../node_modules/mdast-util-to-hast/lib/footer.js","../node_modules/unist-util-is/lib/index.js","../node_modules/unist-util-visit-parents/lib/index.js","../node_modules/unist-util-visit/lib/index.js","../node_modules/mdast-util-to-hast/lib/state.js","../node_modules/mdast-util-to-hast/lib/index.js","../node_modules/remark-rehype/lib/index.js","../node_modules/bail/index.js","../node_modules/extend/index.js","../node_modules/is-plain-obj/index.js","../node_modules/trough/lib/index.js","../node_modules/vfile/lib/minpath.browser.js","../node_modules/vfile/lib/minproc.browser.js","../node_modules/vfile/lib/minurl.shared.js","../node_modules/vfile/lib/minurl.browser.js","../node_modules/vfile/lib/index.js","../node_modules/unified/lib/callable-instance.js","../node_modules/unified/lib/index.js","../node_modules/react-markdown/lib/index.js","../node_modules/hast-util-sanitize/lib/schema.js","../node_modules/hast-util-sanitize/lib/index.js","../node_modules/rehype-sanitize/lib/index.js","../node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp/index.js","../node_modules/mdast-util-find-and-replace/lib/index.js","../node_modules/mdast-util-newline-to-break/lib/index.js","../node_modules/remark-breaks/lib/index.js","../node_modules/ccount/index.js","../node_modules/mdast-util-gfm-autolink-literal/lib/index.js","../node_modules/mdast-util-gfm-footnote/lib/index.js","../node_modules/mdast-util-gfm-strikethrough/lib/index.js","../node_modules/markdown-table/index.js","../node_modules/mdast-util-to-markdown/lib/handle/blockquote.js","../node_modules/mdast-util-to-markdown/lib/util/pattern-in-scope.js","../node_modules/mdast-util-to-markdown/lib/handle/break.js","../node_modules/longest-streak/index.js","../node_modules/mdast-util-to-markdown/lib/util/format-code-as-indented.js","../node_modules/mdast-util-to-markdown/lib/util/check-fence.js","../node_modules/mdast-util-to-markdown/lib/handle/code.js","../node_modules/mdast-util-to-markdown/lib/util/check-quote.js","../node_modules/mdast-util-to-markdown/lib/handle/definition.js","../node_modules/mdast-util-to-markdown/lib/util/check-emphasis.js","../node_modules/mdast-util-to-markdown/lib/util/encode-character-reference.js","../node_modules/mdast-util-to-markdown/lib/util/encode-info.js","../node_modules/mdast-util-to-markdown/lib/handle/emphasis.js","../node_modules/mdast-util-to-markdown/lib/util/format-heading-as-setext.js","../node_modules/mdast-util-to-markdown/lib/handle/heading.js","../node_modules/mdast-util-to-markdown/lib/handle/html.js","../node_modules/mdast-util-to-markdown/lib/handle/image.js","../node_modules/mdast-util-to-markdown/lib/handle/image-reference.js","../node_modules/mdast-util-to-markdown/lib/handle/inline-code.js","../node_modules/mdast-util-to-markdown/lib/util/format-link-as-autolink.js","../node_modules/mdast-util-to-markdown/lib/handle/link.js","../node_modules/mdast-util-to-markdown/lib/handle/link-reference.js","../node_modules/mdast-util-to-markdown/lib/util/check-bullet.js","../node_modules/mdast-util-to-markdown/lib/util/check-bullet-other.js","../node_modules/mdast-util-to-markdown/lib/util/check-bullet-ordered.js","../node_modules/mdast-util-to-markdown/lib/util/check-rule.js","../node_modules/mdast-util-to-markdown/lib/handle/list.js","../node_modules/mdast-util-to-markdown/lib/util/check-list-item-indent.js","../node_modules/mdast-util-to-markdown/lib/handle/list-item.js","../node_modules/mdast-util-to-markdown/lib/handle/paragraph.js","../node_modules/mdast-util-phrasing/lib/index.js","../node_modules/mdast-util-to-markdown/lib/handle/root.js","../node_modules/mdast-util-to-markdown/lib/util/check-strong.js","../node_modules/mdast-util-to-markdown/lib/handle/strong.js","../node_modules/mdast-util-to-markdown/lib/handle/text.js","../node_modules/mdast-util-to-markdown/lib/util/check-rule-repetition.js","../node_modules/mdast-util-to-markdown/lib/handle/thematic-break.js","../node_modules/mdast-util-to-markdown/lib/handle/index.js","../node_modules/mdast-util-gfm-table/lib/index.js","../node_modules/mdast-util-gfm-task-list-item/lib/index.js","../node_modules/mdast-util-gfm/lib/index.js","../node_modules/micromark-extension-gfm-autolink-literal/lib/syntax.js","../node_modules/micromark-extension-gfm-footnote/lib/syntax.js","../node_modules/micromark-extension-gfm-strikethrough/lib/syntax.js","../node_modules/micromark-extension-gfm-table/lib/edit-map.js","../node_modules/micromark-extension-gfm-table/lib/infer.js","../node_modules/micromark-extension-gfm-table/lib/syntax.js","../node_modules/micromark-extension-gfm-task-list-item/lib/syntax.js","../node_modules/micromark-extension-gfm/index.js","../node_modules/remark-gfm/lib/index.js","../src/components/ui/markdown-viewer.tsx","../src/components/chat-message-bubble.tsx","../src/components/ui/star-rating.tsx","../src/components/chat-rating-bubble.tsx","../src/contexts/agent-cognition-context-definition.ts","../src/hooks/use-agent-cognition-context.ts","../src/components/chat-interface/content.tsx","../node_modules/dompurify/dist/purify.es.mjs","../src/components/ui/textarea.tsx","../src/lib/color-aura.ts","../src/hooks/use-drag-scroll.ts","../src/components/chat-interface/suggested-messages.tsx","../src/contexts/constants.ts","../src/contexts/utils.ts","../src/contexts/error-handling.utils.tsx","../src/components/banner.tsx","../src/components/chat-interface/footer.tsx","../node_modules/@radix-ui/react-avatar/dist/index.mjs","../src/components/ui/avatar.tsx","../src/components/chat-interface/header.tsx","../src/components/chat-interface/index.tsx","../src/components/ui/skeleton.tsx","../src/hooks/use-debounce.ts","../src/components/chat-interface/skeleton.tsx"],"sourcesContent":["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 */\nconst concatArrays = (array1, array2) => {\n // Pre-allocate for better V8 optimization\n const combinedArray = 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\n// Factory function ensures consistent object shapes\nconst createClassValidatorObject = (classGroupId, validator) => ({\n classGroupId,\n validator\n});\n// Factory ensures consistent ClassPartObject shape\nconst createClassPartObject = (nextPart = new Map(), validators = null, classGroupId) => ({\n nextPart,\n validators,\n classGroupId\n});\nconst CLASS_PART_SEPARATOR = '-';\nconst EMPTY_CONFLICTS = [];\n// I use two dots here because one dot is used as prefix for class groups in plugins\nconst ARBITRARY_PROPERTY_PREFIX = 'arbitrary..';\nconst createClassGroupUtils = config => {\n const classMap = createClassMap(config);\n const {\n conflictingClassGroups,\n conflictingClassGroupModifiers\n } = config;\n const getClassGroupId = className => {\n if (className.startsWith('[') && className.endsWith(']')) {\n return getGroupIdForArbitraryProperty(className);\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 const getConflictingClassGroupIds = (classGroupId, hasPostfixModifier) => {\n if (hasPostfixModifier) {\n const modifierConflicts = conflictingClassGroupModifiers[classGroupId];\n const baseConflicts = conflictingClassGroups[classGroupId];\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 return conflictingClassGroups[classGroupId] || EMPTY_CONFLICTS;\n };\n return {\n getClassGroupId,\n getConflictingClassGroupIds\n };\n};\nconst getGroupRecursive = (classParts, startIndex, classPartObject) => {\n const classPathsLength = classParts.length - startIndex;\n if (classPathsLength === 0) {\n return classPartObject.classGroupId;\n }\n const currentClassPart = classParts[startIndex];\n const nextClassPartObject = classPartObject.nextPart.get(currentClassPart);\n if (nextClassPartObject) {\n const result = getGroupRecursive(classParts, startIndex + 1, nextClassPartObject);\n if (result) return result;\n }\n const validators = classPartObject.validators;\n if (validators === null) {\n return undefined;\n }\n // Build classRest string efficiently by joining from startIndex onwards\n const classRest = startIndex === 0 ? classParts.join(CLASS_PART_SEPARATOR) : classParts.slice(startIndex).join(CLASS_PART_SEPARATOR);\n const validatorsLength = validators.length;\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 return undefined;\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 => className.slice(1, -1).indexOf(':') === -1 ? undefined : (() => {\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 * Exported for testing only\n */\nconst createClassMap = config => {\n const {\n theme,\n classGroups\n } = config;\n return processClassGroups(classGroups, theme);\n};\n// Split into separate functions to maintain monomorphic call sites\nconst processClassGroups = (classGroups, theme) => {\n const classMap = createClassPartObject();\n for (const classGroupId in classGroups) {\n const group = classGroups[classGroupId];\n processClassesRecursively(group, classMap, classGroupId, theme);\n }\n return classMap;\n};\nconst processClassesRecursively = (classGroup, classPartObject, classGroupId, theme) => {\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// Split into separate functions for each type to maintain monomorphic call sites\nconst processClassDefinition = (classDefinition, classPartObject, classGroupId, theme) => {\n if (typeof classDefinition === 'string') {\n processStringDefinition(classDefinition, classPartObject, classGroupId);\n return;\n }\n if (typeof classDefinition === 'function') {\n processFunctionDefinition(classDefinition, classPartObject, classGroupId, theme);\n return;\n }\n processObjectDefinition(classDefinition, classPartObject, classGroupId, theme);\n};\nconst processStringDefinition = (classDefinition, classPartObject, classGroupId) => {\n const classPartObjectToEdit = classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition);\n classPartObjectToEdit.classGroupId = classGroupId;\n};\nconst processFunctionDefinition = (classDefinition, classPartObject, classGroupId, theme) => {\n if (isThemeGetter(classDefinition)) {\n processClassesRecursively(classDefinition(theme), classPartObject, classGroupId, theme);\n return;\n }\n if (classPartObject.validators === null) {\n classPartObject.validators = [];\n }\n classPartObject.validators.push(createClassValidatorObject(classGroupId, classDefinition));\n};\nconst processObjectDefinition = (classDefinition, classPartObject, classGroupId, theme) => {\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};\nconst getPart = (classPartObject, path) => {\n let current = classPartObject;\n const parts = path.split(CLASS_PART_SEPARATOR);\n const len = parts.length;\n for (let i = 0; i < len; i++) {\n const part = parts[i];\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 return current;\n};\n// Type guard maintains monomorphic check\nconst isThemeGetter = func => 'isThemeGetter' in func && func.isThemeGetter === true;\n\n// LRU cache implementation using plain objects for simplicity\nconst createLruCache = maxCacheSize => {\n if (maxCacheSize < 1) {\n return {\n get: () => undefined,\n set: () => {}\n };\n }\n let cacheSize = 0;\n let cache = Object.create(null);\n let previousCache = Object.create(null);\n const update = (key, value) => {\n cache[key] = value;\n cacheSize++;\n if (cacheSize > maxCacheSize) {\n cacheSize = 0;\n previousCache = cache;\n cache = Object.create(null);\n }\n };\n return {\n get(key) {\n let value = cache[key];\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};\nconst IMPORTANT_MODIFIER = '!';\nconst MODIFIER_SEPARATOR = ':';\nconst EMPTY_MODIFIERS = [];\n// Pre-allocated result object shape for consistency\nconst createResultObject = (modifiers, hasImportantModifier, baseClassName, maybePostfixModifierPosition, isExternal) => ({\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition,\n isExternal\n});\nconst createParseClassName = config => {\n const {\n prefix,\n experimentalParseClassName\n } = config;\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 => {\n // Use simple array with push for better performance\n const modifiers = [];\n let bracketDepth = 0;\n let parenDepth = 0;\n let modifierStart = 0;\n let postfixModifierPosition;\n const len = className.length;\n for (let index = 0; index < len; index++) {\n const currentCharacter = className[index];\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 if (currentCharacter === '/') {\n postfixModifierPosition = index;\n continue;\n }\n }\n if (currentCharacter === '[') bracketDepth++;else if (currentCharacter === ']') bracketDepth--;else if (currentCharacter === '(') parenDepth++;else if (currentCharacter === ')') parenDepth--;\n }\n const baseClassNameWithImportantModifier = modifiers.length === 0 ? className : className.slice(modifierStart);\n // Inline important modifier check\n let baseClassName = baseClassNameWithImportantModifier;\n let hasImportantModifier = false;\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 baseClassName = baseClassNameWithImportantModifier.slice(1);\n hasImportantModifier = true;\n }\n const maybePostfixModifierPosition = postfixModifierPosition && postfixModifierPosition > modifierStart ? postfixModifierPosition - modifierStart : undefined;\n return createResultObject(modifiers, hasImportantModifier, baseClassName, maybePostfixModifierPosition);\n };\n if (prefix) {\n const fullPrefix = prefix + MODIFIER_SEPARATOR;\n const parseClassNameOriginal = parseClassName;\n parseClassName = className => className.startsWith(fullPrefix) ? parseClassNameOriginal(className.slice(fullPrefix.length)) : createResultObject(EMPTY_MODIFIERS, false, className, undefined, true);\n }\n if (experimentalParseClassName) {\n const parseClassNameOriginal = parseClassName;\n parseClassName = className => experimentalParseClassName({\n className,\n parseClassName: parseClassNameOriginal\n });\n }\n return parseClassName;\n};\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 */\nconst createSortModifiers = config => {\n // Pre-compute weights for all known modifiers for O(1) comparison\n const modifierWeights = new Map();\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 return modifiers => {\n const result = [];\n let currentSegment = [];\n // Process modifiers in one pass\n for (let i = 0; i < modifiers.length; i++) {\n const modifier = modifiers[i];\n // Check if modifier is sensitive (starts with '[' or in orderSensitiveModifiers)\n const isArbitrary = modifier[0] === '[';\n const isOrderSensitive = modifierWeights.has(modifier);\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 // Sort and add any remaining segment items\n if (currentSegment.length > 0) {\n currentSegment.sort();\n result.push(...currentSegment);\n }\n return result;\n };\n};\nconst createConfigUtils = config => ({\n cache: createLruCache(config.cacheSize),\n parseClassName: createParseClassName(config),\n sortModifiers: createSortModifiers(config),\n postfixLookupClassGroupIds: createPostfixLookupClassGroupIds(config),\n ...createClassGroupUtils(config)\n});\nconst createPostfixLookupClassGroupIds = config => {\n const lookup = Object.create(null);\n const classGroupIds = config.postfixLookupClassGroups;\n if (classGroupIds) {\n for (let i = 0; i < classGroupIds.length; i++) {\n lookup[classGroupIds[i]] = true;\n }\n }\n return lookup;\n};\nconst SPLIT_CLASSES_REGEX = /\\s+/;\nconst mergeClassList = (classList, configUtils) => {\n const {\n parseClassName,\n getClassGroupId,\n getConflictingClassGroupIds,\n sortModifiers,\n postfixLookupClassGroupIds\n } = configUtils;\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 = [];\n const classNames = classList.trim().split(SPLIT_CLASSES_REGEX);\n let result = '';\n for (let index = classNames.length - 1; index >= 0; index -= 1) {\n const originalClassName = classNames[index];\n const {\n isExternal,\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition\n } = parseClassName(originalClassName);\n if (isExternal) {\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n let hasPostfixModifier = !!maybePostfixModifierPosition;\n let classGroupId;\n if (hasPostfixModifier) {\n const baseClassNameWithoutPostfix = baseClassName.substring(0, maybePostfixModifierPosition);\n classGroupId = getClassGroupId(baseClassNameWithoutPostfix);\n const classGroupIdWithPostfix = classGroupId && postfixLookupClassGroupIds[classGroupId] ? getClassGroupId(baseClassName) : undefined;\n if (classGroupIdWithPostfix && classGroupIdWithPostfix !== classGroupId) {\n classGroupId = classGroupIdWithPostfix;\n hasPostfixModifier = false;\n }\n } else {\n classGroupId = getClassGroupId(baseClassName);\n }\n if (!classGroupId) {\n if (!hasPostfixModifier) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n classGroupId = getClassGroupId(baseClassName);\n if (!classGroupId) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n hasPostfixModifier = false;\n }\n // Fast path: skip sorting for empty or single modifier\n const variantModifier = modifiers.length === 0 ? '' : modifiers.length === 1 ? modifiers[0] : sortModifiers(modifiers).join(':');\n const modifierId = hasImportantModifier ? variantModifier + IMPORTANT_MODIFIER : variantModifier;\n const classId = modifierId + classGroupId;\n if (classGroupsInConflict.indexOf(classId) > -1) {\n // Tailwind class omitted due to conflict\n continue;\n }\n classGroupsInConflict.push(classId);\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 // Tailwind class not in conflict\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n }\n return result;\n};\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 */\nconst twJoin = (...classLists) => {\n let index = 0;\n let argument;\n let resolvedValue;\n let string = '';\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};\nconst toValue = mix => {\n // Fast path for strings\n if (typeof mix === 'string') {\n return mix;\n }\n let resolvedValue;\n let string = '';\n for (let k = 0; k < mix.length; k++) {\n if (mix[k]) {\n if (resolvedValue = toValue(mix[k])) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n};\nconst createTailwindMerge = (createConfigFirst, ...createConfigRest) => {\n let configUtils;\n let cacheGet;\n let cacheSet;\n let functionToCall;\n const initTailwindMerge = classList => {\n const config = createConfigRest.reduce((previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig), createConfigFirst());\n configUtils = createConfigUtils(config);\n cacheGet = configUtils.cache.get;\n cacheSet = configUtils.cache.set;\n functionToCall = tailwindMerge;\n return tailwindMerge(classList);\n };\n const tailwindMerge = classList => {\n const cachedResult = cacheGet(classList);\n if (cachedResult) {\n return cachedResult;\n }\n const result = mergeClassList(classList, configUtils);\n cacheSet(classList, result);\n return result;\n };\n functionToCall = initTailwindMerge;\n return (...args) => functionToCall(twJoin(...args));\n};\nconst fallbackThemeArr = [];\nconst fromTheme = key => {\n const themeGetter = theme => theme[key] || fallbackThemeArr;\n themeGetter.isThemeGetter = true;\n return themeGetter;\n};\nconst 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 = /\\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 = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\(.+\\)$/;\nconst isFraction = value => fractionRegex.test(value);\nconst isNumber = value => !!value && !Number.isNaN(Number(value));\nconst isInteger = value => !!value && Number.isInteger(Number(value));\nconst isPercent = value => value.endsWith('%') && isNumber(value.slice(0, -1));\nconst isTshirtSize = value => tshirtUnitRegex.test(value);\nconst isAny = () => true;\nconst isLengthOnly = value =>\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.\nlengthUnitRegex.test(value) && !colorFunctionRegex.test(value);\nconst isNever = () => false;\nconst isShadow = value => shadowRegex.test(value);\nconst isImage = value => imageRegex.test(value);\nconst isAnyNonArbitrary = value => !isArbitraryValue(value) && !isArbitraryVariable(value);\nconst isNamedContainerQuery = value => value.startsWith('@container') && (value[10] === '/' && value[11] !== undefined || value[11] === 's' && value[16] !== undefined && value.startsWith('-size/', 10) || value[11] === 'n' && value[18] !== undefined && value.startsWith('-normal/', 10));\nconst isArbitrarySize = value => getIsArbitraryValue(value, isLabelSize, isNever);\nconst isArbitraryValue = value => arbitraryValueRegex.test(value);\nconst isArbitraryLength = value => getIsArbitraryValue(value, isLabelLength, isLengthOnly);\nconst isArbitraryNumber = value => getIsArbitraryValue(value, isLabelNumber, isNumber);\nconst isArbitraryWeight = value => getIsArbitraryValue(value, isLabelWeight, isAny);\nconst isArbitraryFamilyName = value => getIsArbitraryValue(value, isLabelFamilyName, isNever);\nconst isArbitraryPosition = value => getIsArbitraryValue(value, isLabelPosition, isNever);\nconst isArbitraryImage = value => getIsArbitraryValue(value, isLabelImage, isImage);\nconst isArbitraryShadow = value => getIsArbitraryValue(value, isLabelShadow, isShadow);\nconst isArbitraryVariable = value => arbitraryVariableRegex.test(value);\nconst isArbitraryVariableLength = value => getIsArbitraryVariable(value, isLabelLength);\nconst isArbitraryVariableFamilyName = value => getIsArbitraryVariable(value, isLabelFamilyName);\nconst isArbitraryVariablePosition = value => getIsArbitraryVariable(value, isLabelPosition);\nconst isArbitraryVariableSize = value => getIsArbitraryVariable(value, isLabelSize);\nconst isArbitraryVariableImage = value => getIsArbitraryVariable(value, isLabelImage);\nconst isArbitraryVariableShadow = value => getIsArbitraryVariable(value, isLabelShadow, true);\nconst isArbitraryVariableWeight = value => getIsArbitraryVariable(value, isLabelWeight, true);\n// Helpers\nconst getIsArbitraryValue = (value, testLabel, testValue) => {\n const result = arbitraryValueRegex.exec(value);\n if (result) {\n if (result[1]) {\n return testLabel(result[1]);\n }\n return testValue(result[2]);\n }\n return false;\n};\nconst getIsArbitraryVariable = (value, testLabel, shouldMatchNoLabel = false) => {\n const result = arbitraryVariableRegex.exec(value);\n if (result) {\n if (result[1]) {\n return testLabel(result[1]);\n }\n return shouldMatchNoLabel;\n }\n return false;\n};\n// Labels\nconst isLabelPosition = label => label === 'position' || label === 'percentage';\nconst isLabelImage = label => label === 'image' || label === 'url';\nconst isLabelSize = label => label === 'length' || label === 'size' || label === 'bg-size';\nconst isLabelLength = label => label === 'length';\nconst isLabelNumber = label => label === 'number';\nconst isLabelFamilyName = label => label === 'family-name';\nconst isLabelWeight = label => label === 'number' || label === 'weight';\nconst isLabelShadow = label => label === 'shadow';\nconst validators = /*#__PURE__*/Object.defineProperty({\n __proto__: null,\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}, Symbol.toStringTag, {\n value: 'Module'\n});\nconst getDefaultConfig = () => {\n /**\n * Theme getters for theme variable namespaces\n * @see https://tailwindcss.com/docs/theme#theme-variable-namespaces\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 * 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 const scaleBreak = () => ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'];\n const scalePosition = () => ['center', 'top', 'bottom', 'left', 'right', 'top-left',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'left-top', 'top-right',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'right-top', 'bottom-right',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'right-bottom', 'bottom-left',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'left-bottom'];\n const scalePositionWithArbitrary = () => [...scalePosition(), isArbitraryVariable, isArbitraryValue];\n const scaleOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll'];\n const scaleOverscroll = () => ['auto', 'contain', 'none'];\n const scaleUnambiguousSpacing = () => [isArbitraryVariable, isArbitraryValue, themeSpacing];\n const scaleInset = () => [isFraction, 'full', 'auto', ...scaleUnambiguousSpacing()];\n const scaleGridTemplateColsRows = () => [isInteger, 'none', 'subgrid', isArbitraryVariable, isArbitraryValue];\n const scaleGridColRowStartAndEnd = () => ['auto', {\n span: ['full', isInteger, isArbitraryVariable, isArbitraryValue]\n }, isInteger, isArbitraryVariable, isArbitraryValue];\n const scaleGridColRowStartOrEnd = () => [isInteger, 'auto', isArbitraryVariable, isArbitraryValue];\n const scaleGridAutoColsRows = () => ['auto', 'min', 'max', 'fr', isArbitraryVariable, isArbitraryValue];\n const scaleAlignPrimaryAxis = () => ['start', 'end', 'center', 'between', 'around', 'evenly', 'stretch', 'baseline', 'center-safe', 'end-safe'];\n const scaleAlignSecondaryAxis = () => ['start', 'end', 'center', 'stretch', 'center-safe', 'end-safe'];\n const scaleMargin = () => ['auto', ...scaleUnambiguousSpacing()];\n const scaleSizing = () => [isFraction, 'auto', 'full', 'dvw', 'dvh', 'lvw', 'lvh', 'svw', 'svh', 'min', 'max', 'fit', ...scaleUnambiguousSpacing()];\n const scaleSizingInline = () => [isFraction, 'screen', 'full', 'dvw', 'lvw', 'svw', 'min', 'max', 'fit', ...scaleUnambiguousSpacing()];\n const scaleSizingBlock = () => [isFraction, 'screen', 'full', 'lh', 'dvh', 'lvh', 'svh', 'min', 'max', 'fit', ...scaleUnambiguousSpacing()];\n const scaleColor = () => [themeColor, isArbitraryVariable, isArbitraryValue];\n const scaleBgPosition = () => [...scalePosition(), isArbitraryVariablePosition, isArbitraryPosition, {\n position: [isArbitraryVariable, isArbitraryValue]\n }];\n const scaleBgRepeat = () => ['no-repeat', {\n repeat: ['', 'x', 'y', 'space', 'round']\n }];\n const scaleBgSize = () => ['auto', 'cover', 'contain', isArbitraryVariableSize, isArbitrarySize, {\n size: [isArbitraryVariable, isArbitraryValue]\n }];\n const scaleGradientStopPosition = () => [isPercent, isArbitraryVariableLength, isArbitraryLength];\n const scaleRadius = () => [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', 'full', themeRadius, isArbitraryVariable, isArbitraryValue];\n const scaleBorderWidth = () => ['', isNumber, isArbitraryVariableLength, isArbitraryLength];\n const scaleLineStyle = () => ['solid', 'dashed', 'dotted', 'double'];\n const scaleBlendMode = () => ['normal', 'multiply', 'screen', 'overlay', 'darken', 'lighten', 'color-dodge', 'color-burn', 'hard-light', 'soft-light', 'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity'];\n const scaleMaskImagePosition = () => [isNumber, isPercent, isArbitraryVariablePosition, isArbitraryPosition];\n const scaleBlur = () => [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeBlur, isArbitraryVariable, isArbitraryValue];\n const scaleRotate = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleScale = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleSkew = () => [isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleTranslate = () => [isFraction, 'full', ...scaleUnambiguousSpacing()];\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': ['thin', 'extralight', 'light', 'normal', 'medium', 'semibold', 'bold', 'extrabold', 'black'],\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 * Aspect Ratio\n * @see https://tailwindcss.com/docs/aspect-ratio\n */\n aspect: [{\n aspect: ['auto', 'square', isFraction, isArbitraryValue, isArbitraryVariable, themeAspect]\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': [{\n 'break-after': scaleBreak()\n }],\n /**\n * Break Before\n * @see https://tailwindcss.com/docs/break-before\n */\n 'break-before': [{\n 'break-before': scaleBreak()\n }],\n /**\n * Break Inside\n * @see https://tailwindcss.com/docs/break-inside\n */\n 'break-inside': [{\n 'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column']\n }],\n /**\n * Box Decoration Break\n * @see https://tailwindcss.com/docs/box-decoration-break\n */\n 'box-decoration': [{\n 'box-decoration': ['slice', 'clone']\n }],\n /**\n * Box Sizing\n * @see https://tailwindcss.com/docs/box-sizing\n */\n box: [{\n box: ['border', 'content']\n }],\n /**\n * Display\n * @see https://tailwindcss.com/docs/display\n */\n display: ['block', 'inline-block', 'inline', 'flex', 'inline-flex', 'table', 'inline-table', 'table-caption', 'table-cell', 'table-column', 'table-column-group', 'table-footer-group', 'table-header-group', 'table-row-group', 'table-row', 'flow-root', 'grid', 'inline-grid', 'contents', 'list-item', 'hidden'],\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: [{\n float: ['right', 'left', 'none', 'start', 'end']\n }],\n /**\n * Clear\n * @see https://tailwindcss.com/docs/clear\n */\n clear: [{\n clear: ['left', 'right', 'both', 'none', 'start', 'end']\n }],\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': [{\n object: ['contain', 'cover', 'fill', 'none', 'scale-down']\n }],\n /**\n * Object Position\n * @see https://tailwindcss.com/docs/object-position\n */\n 'object-position': [{\n object: scalePositionWithArbitrary()\n }],\n /**\n * Overflow\n * @see https://tailwindcss.com/docs/overflow\n */\n overflow: [{\n overflow: scaleOverflow()\n }],\n /**\n * Overflow X\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-x': [{\n 'overflow-x': scaleOverflow()\n }],\n /**\n * Overflow Y\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-y': [{\n 'overflow-y': scaleOverflow()\n }],\n /**\n * Overscroll Behavior\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n overscroll: [{\n overscroll: scaleOverscroll()\n }],\n /**\n * Overscroll Behavior X\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-x': [{\n 'overscroll-x': scaleOverscroll()\n }],\n /**\n * Overscroll Behavior Y\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-y': [{\n 'overscroll-y': scaleOverscroll()\n }],\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: [{\n inset: scaleInset()\n }],\n /**\n * Inset Inline\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-x': [{\n 'inset-x': scaleInset()\n }],\n /**\n * Inset Block\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-y': [{\n 'inset-y': scaleInset()\n }],\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 '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 * 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 '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 * Inset Block Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-bs': [{\n 'inset-bs': scaleInset()\n }],\n /**\n * Inset Block End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-be': [{\n 'inset-be': scaleInset()\n }],\n /**\n * Top\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n top: [{\n top: scaleInset()\n }],\n /**\n * Right\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n right: [{\n right: scaleInset()\n }],\n /**\n * Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n bottom: [{\n bottom: scaleInset()\n }],\n /**\n * Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n left: [{\n left: scaleInset()\n }],\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: [{\n z: [isInteger, 'auto', isArbitraryVariable, isArbitraryValue]\n }],\n // ------------------------\n // --- Flexbox and Grid ---\n // ------------------------\n /**\n * Flex Basis\n * @see https://tailwindcss.com/docs/flex-basis\n */\n basis: [{\n basis: [isFraction, 'full', 'auto', themeContainer, ...scaleUnambiguousSpacing()]\n }],\n /**\n * Flex Direction\n * @see https://tailwindcss.com/docs/flex-direction\n */\n 'flex-direction': [{\n flex: ['row', 'row-reverse', 'col', 'col-reverse']\n }],\n /**\n * Flex Wrap\n * @see https://tailwindcss.com/docs/flex-wrap\n */\n 'flex-wrap': [{\n flex: ['nowrap', 'wrap', 'wrap-reverse']\n }],\n /**\n * Flex\n * @see https://tailwindcss.com/docs/flex\n */\n flex: [{\n flex: [isNumber, isFraction, 'auto', 'initial', 'none', isArbitraryValue]\n }],\n /**\n * Flex Grow\n * @see https://tailwindcss.com/docs/flex-grow\n */\n grow: [{\n grow: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Flex Shrink\n * @see https://tailwindcss.com/docs/flex-shrink\n */\n shrink: [{\n shrink: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Order\n * @see https://tailwindcss.com/docs/order\n */\n order: [{\n order: [isInteger, 'first', 'last', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Grid Template Columns\n * @see https://tailwindcss.com/docs/grid-template-columns\n */\n 'grid-cols': [{\n 'grid-cols': scaleGridTemplateColsRows()\n }],\n /**\n * Grid Column Start / End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start-end': [{\n col: scaleGridColRowStartAndEnd()\n }],\n /**\n * Grid Column Start\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start': [{\n 'col-start': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Column End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-end': [{\n 'col-end': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Template Rows\n * @see https://tailwindcss.com/docs/grid-template-rows\n */\n 'grid-rows': [{\n 'grid-rows': scaleGridTemplateColsRows()\n }],\n /**\n * Grid Row Start / End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start-end': [{\n row: scaleGridColRowStartAndEnd()\n }],\n /**\n * Grid Row Start\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start': [{\n 'row-start': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Row End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-end': [{\n 'row-end': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Auto Flow\n * @see https://tailwindcss.com/docs/grid-auto-flow\n */\n 'grid-flow': [{\n 'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense']\n }],\n /**\n * Grid Auto Columns\n * @see https://tailwindcss.com/docs/grid-auto-columns\n */\n 'auto-cols': [{\n 'auto-cols': scaleGridAutoColsRows()\n }],\n /**\n * Grid Auto Rows\n * @see https://tailwindcss.com/docs/grid-auto-rows\n */\n 'auto-rows': [{\n 'auto-rows': scaleGridAutoColsRows()\n }],\n /**\n * Gap\n * @see https://tailwindcss.com/docs/gap\n */\n gap: [{\n gap: scaleUnambiguousSpacing()\n }],\n /**\n * Gap X\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-x': [{\n 'gap-x': scaleUnambiguousSpacing()\n }],\n /**\n * Gap Y\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-y': [{\n 'gap-y': scaleUnambiguousSpacing()\n }],\n /**\n * Justify Content\n * @see https://tailwindcss.com/docs/justify-content\n */\n 'justify-content': [{\n justify: [...scaleAlignPrimaryAxis(), 'normal']\n }],\n /**\n * Justify Items\n * @see https://tailwindcss.com/docs/justify-items\n */\n 'justify-items': [{\n 'justify-items': [...scaleAlignSecondaryAxis(), 'normal']\n }],\n /**\n * Justify Self\n * @see https://tailwindcss.com/docs/justify-self\n */\n 'justify-self': [{\n 'justify-self': ['auto', ...scaleAlignSecondaryAxis()]\n }],\n /**\n * Align Content\n * @see https://tailwindcss.com/docs/align-content\n */\n 'align-content': [{\n content: ['normal', ...scaleAlignPrimaryAxis()]\n }],\n /**\n * Align Items\n * @see https://tailwindcss.com/docs/align-items\n */\n 'align-items': [{\n items: [...scaleAlignSecondaryAxis(), {\n baseline: ['', 'last']\n }]\n }],\n /**\n * Align Self\n * @see https://tailwindcss.com/docs/align-self\n */\n 'align-self': [{\n self: ['auto', ...scaleAlignSecondaryAxis(), {\n baseline: ['', 'last']\n }]\n }],\n /**\n * Place Content\n * @see https://tailwindcss.com/docs/place-content\n */\n 'place-content': [{\n 'place-content': scaleAlignPrimaryAxis()\n }],\n /**\n * Place Items\n * @see https://tailwindcss.com/docs/place-items\n */\n 'place-items': [{\n 'place-items': [...scaleAlignSecondaryAxis(), 'baseline']\n }],\n /**\n * Place Self\n * @see https://tailwindcss.com/docs/place-self\n */\n 'place-self': [{\n 'place-self': ['auto', ...scaleAlignSecondaryAxis()]\n }],\n // Spacing\n /**\n * Padding\n * @see https://tailwindcss.com/docs/padding\n */\n p: [{\n p: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Inline\n * @see https://tailwindcss.com/docs/padding\n */\n px: [{\n px: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Block\n * @see https://tailwindcss.com/docs/padding\n */\n py: [{\n py: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Inline Start\n * @see https://tailwindcss.com/docs/padding\n */\n ps: [{\n ps: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Inline End\n * @see https://tailwindcss.com/docs/padding\n */\n pe: [{\n pe: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Block Start\n * @see https://tailwindcss.com/docs/padding\n */\n pbs: [{\n pbs: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Block End\n * @see https://tailwindcss.com/docs/padding\n */\n pbe: [{\n pbe: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Top\n * @see https://tailwindcss.com/docs/padding\n */\n pt: [{\n pt: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Right\n * @see https://tailwindcss.com/docs/padding\n */\n pr: [{\n pr: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Bottom\n * @see https://tailwindcss.com/docs/padding\n */\n pb: [{\n pb: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Left\n * @see https://tailwindcss.com/docs/padding\n */\n pl: [{\n pl: scaleUnambiguousSpacing()\n }],\n /**\n * Margin\n * @see https://tailwindcss.com/docs/margin\n */\n m: [{\n m: scaleMargin()\n }],\n /**\n * Margin Inline\n * @see https://tailwindcss.com/docs/margin\n */\n mx: [{\n mx: scaleMargin()\n }],\n /**\n * Margin Block\n * @see https://tailwindcss.com/docs/margin\n */\n my: [{\n my: scaleMargin()\n }],\n /**\n * Margin Inline Start\n * @see https://tailwindcss.com/docs/margin\n */\n ms: [{\n ms: scaleMargin()\n }],\n /**\n * Margin Inline End\n * @see https://tailwindcss.com/docs/margin\n */\n me: [{\n me: scaleMargin()\n }],\n /**\n * Margin Block Start\n * @see https://tailwindcss.com/docs/margin\n */\n mbs: [{\n mbs: scaleMargin()\n }],\n /**\n * Margin Block End\n * @see https://tailwindcss.com/docs/margin\n */\n mbe: [{\n mbe: scaleMargin()\n }],\n /**\n * Margin Top\n * @see https://tailwindcss.com/docs/margin\n */\n mt: [{\n mt: scaleMargin()\n }],\n /**\n * Margin Right\n * @see https://tailwindcss.com/docs/margin\n */\n mr: [{\n mr: scaleMargin()\n }],\n /**\n * Margin Bottom\n * @see https://tailwindcss.com/docs/margin\n */\n mb: [{\n mb: scaleMargin()\n }],\n /**\n * Margin Left\n * @see https://tailwindcss.com/docs/margin\n */\n ml: [{\n ml: scaleMargin()\n }],\n /**\n * Space Between X\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-x': [{\n 'space-x': scaleUnambiguousSpacing()\n }],\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': [{\n 'space-y': scaleUnambiguousSpacing()\n }],\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 // --- Sizing ---\n // --------------\n /**\n * Size\n * @see https://tailwindcss.com/docs/width#setting-both-width-and-height\n */\n size: [{\n size: scaleSizing()\n }],\n /**\n * Inline Size\n * @see https://tailwindcss.com/docs/width\n */\n 'inline-size': [{\n inline: ['auto', ...scaleSizingInline()]\n }],\n /**\n * Min-Inline Size\n * @see https://tailwindcss.com/docs/min-width\n */\n 'min-inline-size': [{\n 'min-inline': ['auto', ...scaleSizingInline()]\n }],\n /**\n * Max-Inline Size\n * @see https://tailwindcss.com/docs/max-width\n */\n 'max-inline-size': [{\n 'max-inline': ['none', ...scaleSizingInline()]\n }],\n /**\n * Block Size\n * @see https://tailwindcss.com/docs/height\n */\n 'block-size': [{\n block: ['auto', ...scaleSizingBlock()]\n }],\n /**\n * Min-Block Size\n * @see https://tailwindcss.com/docs/min-height\n */\n 'min-block-size': [{\n 'min-block': ['auto', ...scaleSizingBlock()]\n }],\n /**\n * Max-Block Size\n * @see https://tailwindcss.com/docs/max-height\n */\n 'max-block-size': [{\n 'max-block': ['none', ...scaleSizingBlock()]\n }],\n /**\n * Width\n * @see https://tailwindcss.com/docs/width\n */\n w: [{\n w: [themeContainer, 'screen', ...scaleSizing()]\n }],\n /**\n * Min-Width\n * @see https://tailwindcss.com/docs/min-width\n */\n 'min-w': [{\n 'min-w': [themeContainer, 'screen', /** Deprecated. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n 'none', ...scaleSizing()]\n }],\n /**\n * Max-Width\n * @see https://tailwindcss.com/docs/max-width\n */\n 'max-w': [{\n 'max-w': [themeContainer, 'screen', 'none', /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n 'prose', /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n {\n screen: [themeBreakpoint]\n }, ...scaleSizing()]\n }],\n /**\n * Height\n * @see https://tailwindcss.com/docs/height\n */\n h: [{\n h: ['screen', 'lh', ...scaleSizing()]\n }],\n /**\n * Min-Height\n * @see https://tailwindcss.com/docs/min-height\n */\n 'min-h': [{\n 'min-h': ['screen', 'lh', 'none', ...scaleSizing()]\n }],\n /**\n * Max-Height\n * @see https://tailwindcss.com/docs/max-height\n */\n 'max-h': [{\n 'max-h': ['screen', 'lh', ...scaleSizing()]\n }],\n // ------------------\n // --- Typography ---\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 font: [themeFontWeight, isArbitraryVariableWeight, isArbitraryWeight]\n }],\n /**\n * Font Stretch\n * @see https://tailwindcss.com/docs/font-stretch\n */\n 'font-stretch': [{\n 'font-stretch': ['ultra-condensed', 'extra-condensed', 'condensed', 'semi-condensed', 'normal', 'semi-expanded', 'expanded', 'extra-expanded', 'ultra-expanded', isPercent, isArbitraryValue]\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': [{\n 'font-features': [isArbitraryValue]\n }],\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: [{\n tracking: [themeTracking, isArbitraryVariable, isArbitraryValue]\n }],\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 leading: [/** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n themeLeading, ...scaleUnambiguousSpacing()]\n }],\n /**\n * List Style Image\n * @see https://tailwindcss.com/docs/list-style-image\n */\n 'list-image': [{\n 'list-image': ['none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * List Style Position\n * @see https://tailwindcss.com/docs/list-style-position\n */\n 'list-style-position': [{\n list: ['inside', 'outside']\n }],\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': [{\n text: ['left', 'center', 'right', 'justify', 'start', 'end']\n }],\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': [{\n placeholder: scaleColor()\n }],\n /**\n * Text Color\n * @see https://tailwindcss.com/docs/text-color\n */\n 'text-color': [{\n text: scaleColor()\n }],\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': [{\n decoration: [...scaleLineStyle(), 'wavy']\n }],\n /**\n * Text Decoration Thickness\n * @see https://tailwindcss.com/docs/text-decoration-thickness\n */\n 'text-decoration-thickness': [{\n decoration: [isNumber, 'from-font', 'auto', isArbitraryVariable, isArbitraryLength]\n }],\n /**\n * Text Decoration Color\n * @see https://tailwindcss.com/docs/text-decoration-color\n */\n 'text-decoration-color': [{\n decoration: scaleColor()\n }],\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': [{\n text: ['wrap', 'nowrap', 'balance', 'pretty']\n }],\n /**\n * Text Indent\n * @see https://tailwindcss.com/docs/text-indent\n */\n indent: [{\n indent: scaleUnambiguousSpacing()\n }],\n /**\n * Tab Size\n * @see https://tailwindcss.com/docs/tab-size\n */\n 'tab-size': [{\n tab: [isInteger, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Vertical Alignment\n * @see https://tailwindcss.com/docs/vertical-align\n */\n 'vertical-align': [{\n align: ['baseline', 'top', 'middle', 'bottom', 'text-top', 'text-bottom', 'sub', 'super', isArbitraryVariable, isArbitraryValue]\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: [{\n break: ['normal', 'words', 'all', 'keep']\n }],\n /**\n * Overflow Wrap\n * @see https://tailwindcss.com/docs/overflow-wrap\n */\n wrap: [{\n wrap: ['break-word', 'anywhere', 'normal']\n }],\n /**\n * Hyphens\n * @see https://tailwindcss.com/docs/hyphens\n */\n hyphens: [{\n hyphens: ['none', 'manual', 'auto']\n }],\n /**\n * Content\n * @see https://tailwindcss.com/docs/content\n */\n content: [{\n content: ['none', isArbitraryVariable, isArbitraryValue]\n }],\n // -------------------\n // --- Backgrounds ---\n // -------------------\n /**\n * Background Attachment\n * @see https://tailwindcss.com/docs/background-attachment\n */\n 'bg-attachment': [{\n bg: ['fixed', 'local', 'scroll']\n }],\n /**\n * Background Clip\n * @see https://tailwindcss.com/docs/background-clip\n */\n 'bg-clip': [{\n 'bg-clip': ['border', 'padding', 'content', 'text']\n }],\n /**\n * Background Origin\n * @see https://tailwindcss.com/docs/background-origin\n */\n 'bg-origin': [{\n 'bg-origin': ['border', 'padding', 'content']\n }],\n /**\n * Background Position\n * @see https://tailwindcss.com/docs/background-position\n */\n 'bg-position': [{\n bg: scaleBgPosition()\n }],\n /**\n * Background Repeat\n * @see https://tailwindcss.com/docs/background-repeat\n */\n 'bg-repeat': [{\n bg: scaleBgRepeat()\n }],\n /**\n * Background Size\n * @see https://tailwindcss.com/docs/background-size\n */\n 'bg-size': [{\n bg: scaleBgSize()\n }],\n /**\n * Background Image\n * @see https://tailwindcss.com/docs/background-image\n */\n 'bg-image': [{\n bg: ['none', {\n linear: [{\n to: ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl']\n }, isInteger, isArbitraryVariable, isArbitraryValue],\n radial: ['', isArbitraryVariable, isArbitraryValue],\n conic: [isInteger, isArbitraryVariable, isArbitraryValue]\n }, isArbitraryVariableImage, isArbitraryImage]\n }],\n /**\n * Background Color\n * @see https://tailwindcss.com/docs/background-color\n */\n 'bg-color': [{\n bg: scaleColor()\n }],\n /**\n * Gradient Color Stops From Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from-pos': [{\n from: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops Via Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via-pos': [{\n via: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops To Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to-pos': [{\n to: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops From\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from': [{\n from: scaleColor()\n }],\n /**\n * Gradient Color Stops Via\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via': [{\n via: scaleColor()\n }],\n /**\n * Gradient Color Stops To\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to': [{\n to: scaleColor()\n }],\n // ---------------\n // --- Borders ---\n // ---------------\n /**\n * Border Radius\n * @see https://tailwindcss.com/docs/border-radius\n */\n rounded: [{\n rounded: scaleRadius()\n }],\n /**\n * Border Radius Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-s': [{\n 'rounded-s': scaleRadius()\n }],\n /**\n * Border Radius End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-e': [{\n 'rounded-e': scaleRadius()\n }],\n /**\n * Border Radius Top\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-t': [{\n 'rounded-t': scaleRadius()\n }],\n /**\n * Border Radius Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-r': [{\n 'rounded-r': scaleRadius()\n }],\n /**\n * Border Radius Bottom\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-b': [{\n 'rounded-b': scaleRadius()\n }],\n /**\n * Border Radius Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-l': [{\n 'rounded-l': scaleRadius()\n }],\n /**\n * Border Radius Start Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ss': [{\n 'rounded-ss': scaleRadius()\n }],\n /**\n * Border Radius Start End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-se': [{\n 'rounded-se': scaleRadius()\n }],\n /**\n * Border Radius End End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ee': [{\n 'rounded-ee': scaleRadius()\n }],\n /**\n * Border Radius End Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-es': [{\n 'rounded-es': scaleRadius()\n }],\n /**\n * Border Radius Top Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tl': [{\n 'rounded-tl': scaleRadius()\n }],\n /**\n * Border Radius Top Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tr': [{\n 'rounded-tr': scaleRadius()\n }],\n /**\n * Border Radius Bottom Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-br': [{\n 'rounded-br': scaleRadius()\n }],\n /**\n * Border Radius Bottom Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-bl': [{\n 'rounded-bl': scaleRadius()\n }],\n /**\n * Border Width\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w': [{\n border: scaleBorderWidth()\n }],\n /**\n * Border Width Inline\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-x': [{\n 'border-x': scaleBorderWidth()\n }],\n /**\n * Border Width Block\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-y': [{\n 'border-y': scaleBorderWidth()\n }],\n /**\n * Border Width Inline Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-s': [{\n 'border-s': scaleBorderWidth()\n }],\n /**\n * Border Width Inline End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-e': [{\n 'border-e': scaleBorderWidth()\n }],\n /**\n * Border Width Block Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-bs': [{\n 'border-bs': scaleBorderWidth()\n }],\n /**\n * Border Width Block End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-be': [{\n 'border-be': scaleBorderWidth()\n }],\n /**\n * Border Width Top\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-t': [{\n 'border-t': scaleBorderWidth()\n }],\n /**\n * Border Width Right\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-r': [{\n 'border-r': scaleBorderWidth()\n }],\n /**\n * Border Width Bottom\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-b': [{\n 'border-b': scaleBorderWidth()\n }],\n /**\n * Border Width Left\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-l': [{\n 'border-l': scaleBorderWidth()\n }],\n /**\n * Divide Width X\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-x': [{\n 'divide-x': scaleBorderWidth()\n }],\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': [{\n 'divide-y': scaleBorderWidth()\n }],\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': [{\n border: [...scaleLineStyle(), 'hidden', 'none']\n }],\n /**\n * Divide Style\n * @see https://tailwindcss.com/docs/border-style#setting-the-divider-style\n */\n 'divide-style': [{\n divide: [...scaleLineStyle(), 'hidden', 'none']\n }],\n /**\n * Border Color\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color': [{\n border: scaleColor()\n }],\n /**\n * Border Color Inline\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-x': [{\n 'border-x': scaleColor()\n }],\n /**\n * Border Color Block\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-y': [{\n 'border-y': scaleColor()\n }],\n /**\n * Border Color Inline Start\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-s': [{\n 'border-s': scaleColor()\n }],\n /**\n * Border Color Inline End\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-e': [{\n 'border-e': scaleColor()\n }],\n /**\n * Border Color Block Start\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-bs': [{\n 'border-bs': scaleColor()\n }],\n /**\n * Border Color Block End\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-be': [{\n 'border-be': scaleColor()\n }],\n /**\n * Border Color Top\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-t': [{\n 'border-t': scaleColor()\n }],\n /**\n * Border Color Right\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-r': [{\n 'border-r': scaleColor()\n }],\n /**\n * Border Color Bottom\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-b': [{\n 'border-b': scaleColor()\n }],\n /**\n * Border Color Left\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-l': [{\n 'border-l': scaleColor()\n }],\n /**\n * Divide Color\n * @see https://tailwindcss.com/docs/divide-color\n */\n 'divide-color': [{\n divide: scaleColor()\n }],\n /**\n * Outline Style\n * @see https://tailwindcss.com/docs/outline-style\n */\n 'outline-style': [{\n outline: [...scaleLineStyle(), 'none', 'hidden']\n }],\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': [{\n outline: scaleColor()\n }],\n // ---------------\n // --- Effects ---\n // ---------------\n /**\n * Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow\n */\n shadow: [{\n shadow: [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-shadow-color\n */\n 'shadow-color': [{\n shadow: scaleColor()\n }],\n /**\n * Inset Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-shadow\n */\n 'inset-shadow': [{\n 'inset-shadow': ['none', themeInsetShadow, isArbitraryVariableShadow, isArbitraryShadow]\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': [{\n 'inset-shadow': scaleColor()\n }],\n /**\n * Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-a-ring\n */\n 'ring-w': [{\n ring: scaleBorderWidth()\n }],\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': [{\n ring: scaleColor()\n }],\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': [{\n 'ring-offset': [isNumber, isArbitraryLength]\n }],\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': [{\n 'ring-offset': scaleColor()\n }],\n /**\n * Inset Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-ring\n */\n 'inset-ring-w': [{\n 'inset-ring': scaleBorderWidth()\n }],\n /**\n * Inset Ring Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-ring-color\n */\n 'inset-ring-color': [{\n 'inset-ring': scaleColor()\n }],\n /**\n * Text Shadow\n * @see https://tailwindcss.com/docs/text-shadow\n */\n 'text-shadow': [{\n 'text-shadow': ['none', themeTextShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Text Shadow Color\n * @see https://tailwindcss.com/docs/text-shadow#setting-the-shadow-color\n */\n 'text-shadow-color': [{\n 'text-shadow': scaleColor()\n }],\n /**\n * Opacity\n * @see https://tailwindcss.com/docs/opacity\n */\n opacity: [{\n opacity: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Mix Blend Mode\n * @see https://tailwindcss.com/docs/mix-blend-mode\n */\n 'mix-blend': [{\n 'mix-blend': [...scaleBlendMode(), 'plus-darker', 'plus-lighter']\n }],\n /**\n * Background Blend Mode\n * @see https://tailwindcss.com/docs/background-blend-mode\n */\n 'bg-blend': [{\n 'bg-blend': scaleBlendMode()\n }],\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 * Mask Composite\n * @see https://tailwindcss.com/docs/mask-composite\n */\n 'mask-composite': [{\n mask: ['add', 'subtract', 'intersect', 'exclude']\n }],\n /**\n * Mask Image\n * @see https://tailwindcss.com/docs/mask-image\n */\n 'mask-image-linear-pos': [{\n 'mask-linear': [isNumber]\n }],\n 'mask-image-linear-from-pos': [{\n 'mask-linear-from': scaleMaskImagePosition()\n }],\n 'mask-image-linear-to-pos': [{\n 'mask-linear-to': scaleMaskImagePosition()\n }],\n 'mask-image-linear-from-color': [{\n 'mask-linear-from': scaleColor()\n }],\n 'mask-image-linear-to-color': [{\n 'mask-linear-to': scaleColor()\n }],\n 'mask-image-t-from-pos': [{\n 'mask-t-from': scaleMaskImagePosition()\n }],\n 'mask-image-t-to-pos': [{\n 'mask-t-to': scaleMaskImagePosition()\n }],\n 'mask-image-t-from-color': [{\n 'mask-t-from': scaleColor()\n }],\n 'mask-image-t-to-color': [{\n 'mask-t-to': scaleColor()\n }],\n 'mask-image-r-from-pos': [{\n 'mask-r-from': scaleMaskImagePosition()\n }],\n 'mask-image-r-to-pos': [{\n 'mask-r-to': scaleMaskImagePosition()\n }],\n 'mask-image-r-from-color': [{\n 'mask-r-from': scaleColor()\n }],\n 'mask-image-r-to-color': [{\n 'mask-r-to': scaleColor()\n }],\n 'mask-image-b-from-pos': [{\n 'mask-b-from': scaleMaskImagePosition()\n }],\n 'mask-image-b-to-pos': [{\n 'mask-b-to': scaleMaskImagePosition()\n }],\n 'mask-image-b-from-color': [{\n 'mask-b-from': scaleColor()\n }],\n 'mask-image-b-to-color': [{\n 'mask-b-to': scaleColor()\n }],\n 'mask-image-l-from-pos': [{\n 'mask-l-from': scaleMaskImagePosition()\n }],\n 'mask-image-l-to-pos': [{\n 'mask-l-to': scaleMaskImagePosition()\n }],\n 'mask-image-l-from-color': [{\n 'mask-l-from': scaleColor()\n }],\n 'mask-image-l-to-color': [{\n 'mask-l-to': scaleColor()\n }],\n 'mask-image-x-from-pos': [{\n 'mask-x-from': scaleMaskImagePosition()\n }],\n 'mask-image-x-to-pos': [{\n 'mask-x-to': scaleMaskImagePosition()\n }],\n 'mask-image-x-from-color': [{\n 'mask-x-from': scaleColor()\n }],\n 'mask-image-x-to-color': [{\n 'mask-x-to': scaleColor()\n }],\n 'mask-image-y-from-pos': [{\n 'mask-y-from': scaleMaskImagePosition()\n }],\n 'mask-image-y-to-pos': [{\n 'mask-y-to': scaleMaskImagePosition()\n }],\n 'mask-image-y-from-color': [{\n 'mask-y-from': scaleColor()\n }],\n 'mask-image-y-to-color': [{\n 'mask-y-to': scaleColor()\n }],\n 'mask-image-radial': [{\n 'mask-radial': [isArbitraryVariable, isArbitraryValue]\n }],\n 'mask-image-radial-from-pos': [{\n 'mask-radial-from': scaleMaskImagePosition()\n }],\n 'mask-image-radial-to-pos': [{\n 'mask-radial-to': scaleMaskImagePosition()\n }],\n 'mask-image-radial-from-color': [{\n 'mask-radial-from': scaleColor()\n }],\n 'mask-image-radial-to-color': [{\n 'mask-radial-to': scaleColor()\n }],\n 'mask-image-radial-shape': [{\n 'mask-radial': ['circle', 'ellipse']\n }],\n 'mask-image-radial-size': [{\n 'mask-radial': [{\n closest: ['side', 'corner'],\n farthest: ['side', 'corner']\n }]\n }],\n 'mask-image-radial-pos': [{\n 'mask-radial-at': scalePosition()\n }],\n 'mask-image-conic-pos': [{\n 'mask-conic': [isNumber]\n }],\n 'mask-image-conic-from-pos': [{\n 'mask-conic-from': scaleMaskImagePosition()\n }],\n 'mask-image-conic-to-pos': [{\n 'mask-conic-to': scaleMaskImagePosition()\n }],\n 'mask-image-conic-from-color': [{\n 'mask-conic-from': scaleColor()\n }],\n 'mask-image-conic-to-color': [{\n 'mask-conic-to': scaleColor()\n }],\n /**\n * Mask Mode\n * @see https://tailwindcss.com/docs/mask-mode\n */\n 'mask-mode': [{\n mask: ['alpha', 'luminance', 'match']\n }],\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': [{\n mask: scaleBgPosition()\n }],\n /**\n * Mask Repeat\n * @see https://tailwindcss.com/docs/mask-repeat\n */\n 'mask-repeat': [{\n mask: scaleBgRepeat()\n }],\n /**\n * Mask Size\n * @see https://tailwindcss.com/docs/mask-size\n */\n 'mask-size': [{\n mask: scaleBgSize()\n }],\n /**\n * Mask Type\n * @see https://tailwindcss.com/docs/mask-type\n */\n 'mask-type': [{\n 'mask-type': ['alpha', 'luminance']\n }],\n /**\n * Mask Image\n * @see https://tailwindcss.com/docs/mask-image\n */\n 'mask-image': [{\n mask: ['none', isArbitraryVariable, isArbitraryValue]\n }],\n // ---------------\n // --- Filters ---\n // ---------------\n /**\n * Filter\n * @see https://tailwindcss.com/docs/filter\n */\n filter: [{\n filter: [\n // Deprecated since Tailwind CSS v3.0.0\n '', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Blur\n * @see https://tailwindcss.com/docs/blur\n */\n blur: [{\n blur: scaleBlur()\n }],\n /**\n * Brightness\n * @see https://tailwindcss.com/docs/brightness\n */\n brightness: [{\n brightness: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Contrast\n * @see https://tailwindcss.com/docs/contrast\n */\n contrast: [{\n contrast: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Drop Shadow\n * @see https://tailwindcss.com/docs/drop-shadow\n */\n 'drop-shadow': [{\n 'drop-shadow': [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeDropShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Drop Shadow Color\n * @see https://tailwindcss.com/docs/filter-drop-shadow#setting-the-shadow-color\n */\n 'drop-shadow-color': [{\n 'drop-shadow': scaleColor()\n }],\n /**\n * Grayscale\n * @see https://tailwindcss.com/docs/grayscale\n */\n grayscale: [{\n grayscale: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Hue Rotate\n * @see https://tailwindcss.com/docs/hue-rotate\n */\n 'hue-rotate': [{\n 'hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Invert\n * @see https://tailwindcss.com/docs/invert\n */\n invert: [{\n invert: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Saturate\n * @see https://tailwindcss.com/docs/saturate\n */\n saturate: [{\n saturate: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Sepia\n * @see https://tailwindcss.com/docs/sepia\n */\n sepia: [{\n sepia: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Filter\n * @see https://tailwindcss.com/docs/backdrop-filter\n */\n 'backdrop-filter': [{\n 'backdrop-filter': [\n // Deprecated since Tailwind CSS v3.0.0\n '', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Blur\n * @see https://tailwindcss.com/docs/backdrop-blur\n */\n 'backdrop-blur': [{\n 'backdrop-blur': scaleBlur()\n }],\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 // --- Tables ---\n // --------------\n /**\n * Border Collapse\n * @see https://tailwindcss.com/docs/border-collapse\n */\n 'border-collapse': [{\n border: ['collapse', 'separate']\n }],\n /**\n * Border Spacing\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing': [{\n 'border-spacing': scaleUnambiguousSpacing()\n }],\n /**\n * Border Spacing X\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-x': [{\n 'border-spacing-x': scaleUnambiguousSpacing()\n }],\n /**\n * Border Spacing Y\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-y': [{\n 'border-spacing-y': scaleUnambiguousSpacing()\n }],\n /**\n * Table Layout\n * @see https://tailwindcss.com/docs/table-layout\n */\n 'table-layout': [{\n table: ['auto', 'fixed']\n }],\n /**\n * Caption Side\n * @see https://tailwindcss.com/docs/caption-side\n */\n caption: [{\n caption: ['top', 'bottom']\n }],\n // ---------------------------------\n // --- Transitions and Animation ---\n // ---------------------------------\n /**\n * Transition Property\n * @see https://tailwindcss.com/docs/transition-property\n */\n transition: [{\n transition: ['', 'all', 'colors', 'opacity', 'shadow', 'transform', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Behavior\n * @see https://tailwindcss.com/docs/transition-behavior\n */\n 'transition-behavior': [{\n transition: ['normal', 'discrete']\n }],\n /**\n * Transition Duration\n * @see https://tailwindcss.com/docs/transition-duration\n */\n duration: [{\n duration: [isNumber, 'initial', isArbitraryVariable, isArbitraryValue]\n }],\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: [{\n delay: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Animation\n * @see https://tailwindcss.com/docs/animation\n */\n animate: [{\n animate: ['none', themeAnimate, isArbitraryVariable, isArbitraryValue]\n }],\n // ------------------\n // --- Transforms ---\n // ------------------\n /**\n * Backface Visibility\n * @see https://tailwindcss.com/docs/backface-visibility\n */\n backface: [{\n backface: ['hidden', 'visible']\n }],\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': [{\n 'perspective-origin': scalePositionWithArbitrary()\n }],\n /**\n * Rotate\n * @see https://tailwindcss.com/docs/rotate\n */\n rotate: [{\n rotate: scaleRotate()\n }],\n /**\n * Rotate X\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-x': [{\n 'rotate-x': scaleRotate()\n }],\n /**\n * Rotate Y\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-y': [{\n 'rotate-y': scaleRotate()\n }],\n /**\n * Rotate Z\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-z': [{\n 'rotate-z': scaleRotate()\n }],\n /**\n * Scale\n * @see https://tailwindcss.com/docs/scale\n */\n scale: [{\n scale: scaleScale()\n }],\n /**\n * Scale X\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-x': [{\n 'scale-x': scaleScale()\n }],\n /**\n * Scale Y\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-y': [{\n 'scale-y': scaleScale()\n }],\n /**\n * Scale Z\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-z': [{\n 'scale-z': scaleScale()\n }],\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: [{\n skew: scaleSkew()\n }],\n /**\n * Skew X\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-x': [{\n 'skew-x': scaleSkew()\n }],\n /**\n * Skew Y\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-y': [{\n 'skew-y': scaleSkew()\n }],\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': [{\n origin: scalePositionWithArbitrary()\n }],\n /**\n * Transform Style\n * @see https://tailwindcss.com/docs/transform-style\n */\n 'transform-style': [{\n transform: ['3d', 'flat']\n }],\n /**\n * Translate\n * @see https://tailwindcss.com/docs/translate\n */\n translate: [{\n translate: scaleTranslate()\n }],\n /**\n * Translate X\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-x': [{\n 'translate-x': scaleTranslate()\n }],\n /**\n * Translate Y\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-y': [{\n 'translate-y': scaleTranslate()\n }],\n /**\n * Translate Z\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-z': [{\n 'translate-z': scaleTranslate()\n }],\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: [{\n zoom: [isInteger, isArbitraryVariable, isArbitraryValue]\n }],\n // ---------------------\n // --- Interactivity ---\n // ---------------------\n /**\n * Accent Color\n * @see https://tailwindcss.com/docs/accent-color\n */\n accent: [{\n accent: scaleColor()\n }],\n /**\n * Appearance\n * @see https://tailwindcss.com/docs/appearance\n */\n appearance: [{\n appearance: ['none', 'auto']\n }],\n /**\n * Caret Color\n * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities\n */\n 'caret-color': [{\n caret: scaleColor()\n }],\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 cursor: ['auto', 'default', 'pointer', 'wait', 'text', 'move', 'help', 'not-allowed', 'none', 'context-menu', 'progress', 'cell', 'crosshair', 'vertical-text', 'alias', 'copy', 'no-drop', 'grab', 'grabbing', 'all-scroll', 'col-resize', 'row-resize', 'n-resize', 'e-resize', 's-resize', 'w-resize', 'ne-resize', 'nw-resize', 'se-resize', 'sw-resize', 'ew-resize', 'ns-resize', 'nesw-resize', 'nwse-resize', 'zoom-in', 'zoom-out', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Field Sizing\n * @see https://tailwindcss.com/docs/field-sizing\n */\n 'field-sizing': [{\n 'field-sizing': ['fixed', 'content']\n }],\n /**\n * Pointer Events\n * @see https://tailwindcss.com/docs/pointer-events\n */\n 'pointer-events': [{\n 'pointer-events': ['auto', 'none']\n }],\n /**\n * Resize\n * @see https://tailwindcss.com/docs/resize\n */\n resize: [{\n resize: ['none', '', 'y', 'x']\n }],\n /**\n * Scroll Behavior\n * @see https://tailwindcss.com/docs/scroll-behavior\n */\n 'scroll-behavior': [{\n scroll: ['auto', 'smooth']\n }],\n /**\n * Scrollbar Thumb Color\n * @see https://tailwindcss.com/docs/scrollbar-color\n */\n 'scrollbar-thumb-color': [{\n 'scrollbar-thumb': scaleColor()\n }],\n /**\n * Scrollbar Track Color\n * @see https://tailwindcss.com/docs/scrollbar-color\n */\n 'scrollbar-track-color': [{\n 'scrollbar-track': scaleColor()\n }],\n /**\n * Scrollbar Gutter\n * @see https://tailwindcss.com/docs/scrollbar-gutter\n */\n 'scrollbar-gutter': [{\n 'scrollbar-gutter': ['auto', 'stable', 'both']\n }],\n /**\n * Scrollbar Width\n * @see https://tailwindcss.com/docs/scrollbar-width\n */\n 'scrollbar-w': [{\n scrollbar: ['auto', 'thin', 'none']\n }],\n /**\n * Scroll Margin\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-m': [{\n 'scroll-m': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Inline\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mx': [{\n 'scroll-mx': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Block\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-my': [{\n 'scroll-my': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Inline Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ms': [{\n 'scroll-ms': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Inline End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-me': [{\n 'scroll-me': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Block Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mbs': [{\n 'scroll-mbs': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Block End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mbe': [{\n 'scroll-mbe': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Top\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mt': [{\n 'scroll-mt': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Right\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mr': [{\n 'scroll-mr': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Bottom\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mb': [{\n 'scroll-mb': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Left\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ml': [{\n 'scroll-ml': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-p': [{\n 'scroll-p': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Inline\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-px': [{\n 'scroll-px': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Block\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-py': [{\n 'scroll-py': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Inline Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-ps': [{\n 'scroll-ps': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Inline End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pe': [{\n 'scroll-pe': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Block Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pbs': [{\n 'scroll-pbs': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Block End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pbe': [{\n 'scroll-pbe': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Top\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pt': [{\n 'scroll-pt': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Right\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pr': [{\n 'scroll-pr': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Bottom\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pb': [{\n 'scroll-pb': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Left\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pl': [{\n 'scroll-pl': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Snap Align\n * @see https://tailwindcss.com/docs/scroll-snap-align\n */\n 'snap-align': [{\n snap: ['start', 'end', 'center', 'align-none']\n }],\n /**\n * Scroll Snap Stop\n * @see https://tailwindcss.com/docs/scroll-snap-stop\n */\n 'snap-stop': [{\n snap: ['normal', 'always']\n }],\n /**\n * Scroll Snap Type\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-type': [{\n snap: ['none', 'x', 'y', 'both']\n }],\n /**\n * Scroll Snap Type Strictness\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-strictness': [{\n snap: ['mandatory', 'proximity']\n }],\n /**\n * Touch Action\n * @see https://tailwindcss.com/docs/touch-action\n */\n touch: [{\n touch: ['auto', 'none', 'manipulation']\n }],\n /**\n * Touch Action X\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-x': [{\n 'touch-pan': ['x', 'left', 'right']\n }],\n /**\n * Touch Action Y\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-y': [{\n 'touch-pan': ['y', 'up', 'down']\n }],\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: [{\n select: ['none', 'text', 'all', 'auto']\n }],\n /**\n * Will Change\n * @see https://tailwindcss.com/docs/will-change\n */\n 'will-change': [{\n 'will-change': ['auto', 'scroll', 'contents', 'transform', isArbitraryVariable, isArbitraryValue]\n }],\n // -----------\n // --- SVG ---\n // -----------\n /**\n * Fill\n * @see https://tailwindcss.com/docs/fill\n */\n fill: [{\n fill: ['none', ...scaleColor()]\n }],\n /**\n * Stroke Width\n * @see https://tailwindcss.com/docs/stroke-width\n */\n 'stroke-w': [{\n stroke: [isNumber, isArbitraryVariableLength, isArbitraryLength, isArbitraryNumber]\n }],\n /**\n * Stroke\n * @see https://tailwindcss.com/docs/stroke\n */\n stroke: [{\n stroke: ['none', ...scaleColor()]\n }],\n // ---------------------\n // --- Accessibility ---\n // ---------------------\n /**\n * Forced Color Adjust\n * @see https://tailwindcss.com/docs/forced-color-adjust\n */\n 'forced-color-adjust': [{\n 'forced-color-adjust': ['auto', 'none']\n }]\n },\n conflictingClassGroups: {\n 'container-named': ['container-type'],\n overflow: ['overflow-x', 'overflow-y'],\n overscroll: ['overscroll-x', 'overscroll-y'],\n inset: ['inset-x', 'inset-y', 'inset-bs', 'inset-be', 'start', 'end', 'top', 'right', 'bottom', 'left'],\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': ['fvn-ordinal', 'fvn-slashed-zero', 'fvn-figure', 'fvn-spacing', 'fvn-fraction'],\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: ['rounded-s', 'rounded-e', 'rounded-t', 'rounded-r', 'rounded-b', 'rounded-l', 'rounded-ss', 'rounded-se', 'rounded-ee', 'rounded-es', 'rounded-tl', 'rounded-tr', 'rounded-br', 'rounded-bl'],\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': ['border-w-x', 'border-w-y', 'border-w-s', 'border-w-e', 'border-w-bs', 'border-w-be', 'border-w-t', 'border-w-r', 'border-w-b', 'border-w-l'],\n 'border-w-x': ['border-w-r', 'border-w-l'],\n 'border-w-y': ['border-w-t', 'border-w-b'],\n 'border-color': ['border-color-x', 'border-color-y', 'border-color-s', 'border-color-e', 'border-color-bs', 'border-color-be', 'border-color-t', 'border-color-r', 'border-color-b', 'border-color-l'],\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': ['scroll-mx', 'scroll-my', 'scroll-ms', 'scroll-me', 'scroll-mbs', 'scroll-mbe', 'scroll-mt', 'scroll-mr', 'scroll-mb', 'scroll-ml'],\n 'scroll-mx': ['scroll-mr', 'scroll-ml'],\n 'scroll-my': ['scroll-mt', 'scroll-mb'],\n 'scroll-p': ['scroll-px', 'scroll-py', 'scroll-ps', 'scroll-pe', 'scroll-pbs', 'scroll-pbe', 'scroll-pt', 'scroll-pr', 'scroll-pb', 'scroll-pl'],\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: ['*', '**', 'after', 'backdrop', 'before', 'details-content', 'file', 'first-letter', 'first-line', 'marker', 'placeholder', 'selection']\n };\n};\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 */\nconst mergeConfigs = (baseConfig, {\n cacheSize,\n prefix,\n experimentalParseClassName,\n extend = {},\n override = {}\n}) => {\n overrideProperty(baseConfig, 'cacheSize', cacheSize);\n overrideProperty(baseConfig, 'prefix', prefix);\n overrideProperty(baseConfig, 'experimentalParseClassName', experimentalParseClassName);\n overrideConfigProperties(baseConfig.theme, override.theme);\n overrideConfigProperties(baseConfig.classGroups, override.classGroups);\n overrideConfigProperties(baseConfig.conflictingClassGroups, override.conflictingClassGroups);\n overrideConfigProperties(baseConfig.conflictingClassGroupModifiers, override.conflictingClassGroupModifiers);\n overrideProperty(baseConfig, 'postfixLookupClassGroups', override.postfixLookupClassGroups);\n overrideProperty(baseConfig, 'orderSensitiveModifiers', override.orderSensitiveModifiers);\n mergeConfigProperties(baseConfig.theme, extend.theme);\n mergeConfigProperties(baseConfig.classGroups, extend.classGroups);\n mergeConfigProperties(baseConfig.conflictingClassGroups, extend.conflictingClassGroups);\n mergeConfigProperties(baseConfig.conflictingClassGroupModifiers, extend.conflictingClassGroupModifiers);\n mergeArrayProperties(baseConfig, extend, 'postfixLookupClassGroups');\n mergeArrayProperties(baseConfig, extend, 'orderSensitiveModifiers');\n return baseConfig;\n};\nconst overrideProperty = (baseObject, overrideKey, overrideValue) => {\n if (overrideValue !== undefined) {\n baseObject[overrideKey] = overrideValue;\n }\n};\nconst overrideConfigProperties = (baseObject, overrideObject) => {\n if (overrideObject) {\n for (const key in overrideObject) {\n overrideProperty(baseObject, key, overrideObject[key]);\n }\n }\n};\nconst mergeConfigProperties = (baseObject, mergeObject) => {\n if (mergeObject) {\n for (const key in mergeObject) {\n mergeArrayProperties(baseObject, mergeObject, key);\n }\n }\n};\nconst mergeArrayProperties = (baseObject, mergeObject, key) => {\n const mergeValue = mergeObject[key];\n if (mergeValue !== undefined) {\n baseObject[key] = baseObject[key] ? baseObject[key].concat(mergeValue) : mergeValue;\n }\n};\nconst extendTailwindMerge = (configExtension, ...createConfig) => typeof configExtension === 'function' ? createTailwindMerge(getDefaultConfig, configExtension, ...createConfig) : createTailwindMerge(() => mergeConfigs(getDefaultConfig(), configExtension), ...createConfig);\nconst twMerge = /*#__PURE__*/createTailwindMerge(getDefaultConfig);\nexport { createTailwindMerge, extendTailwindMerge, fromTheme, getDefaultConfig, mergeConfigs, twJoin, twMerge, validators };\n//# sourceMappingURL=bundle-mjs.mjs.map\n","import { clsx, type ClassValue } from \"clsx\";\nimport { extendTailwindMerge } from \"tailwind-merge\";\nimport { ServerError } from \"./http\";\n\nconst twMerge = extendTailwindMerge({ prefix: \"eloq\" });\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\n/**\n * Wraps a Promise and returns a tuple containing the result or error\n * @param promise Promise to wrap\n * @returns [result, error] - result is null if error occurred, error is null if no error occurred\n */\nexport async function wrapPromise<T, E = ServerError>(\n promise: Promise<T>,\n): Promise<[T, null] | [null, E]> {\n try {\n return [await promise, null] as const;\n } catch (error) {\n return [null, error as E] as const;\n }\n}\n\n/**\n * Read a cookie value by name.\n * @returns The decoded cookie value, or null if it doesn't exist or there's no document.\n */\nexport function getCookie(name: string): string | null {\n if (typeof document === \"undefined\") return null;\n const match = document.cookie.match(new RegExp(`(?:^|; )${name}=([^;]*)`));\n return match ? decodeURIComponent(match[1]) : null;\n}\n\n/**\n * Set a cookie with a given name, value, and TTL in hours.\n */\nexport function setCookie(name: string, value: string, hours: number) {\n if (typeof document === \"undefined\") return;\n const expires = new Date(Date.now() + hours * 60 * 60 * 1000).toUTCString();\n document.cookie = `${name}=${encodeURIComponent(value)}; expires=${expires}; path=/; SameSite=Lax`;\n}\n\n/**\n * Delete a cookie by name.\n */\nexport function deleteCookie(name: string) {\n if (typeof document === \"undefined\") return;\n document.cookie = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/`;\n}\n","import { cn } from \"@/lib/utils\";\nimport { useState } from \"react\";\n\nexport interface LogoProps {\n className?: string;\n bgColor?: string;\n fgColor?: string;\n src?: string;\n}\n\nexport function Logo(props: LogoProps) {\n const { className, bgColor, fgColor, src, ...rest } = props;\n const [imageError, setImageError] = useState(false);\n\n // Reset error state when src changes — setState during render (React's\n // documented alternative to an effect): the re-render restarts immediately,\n // before the stale fallback could ever paint.\n const [previousSrc, setPreviousSrc] = useState(src);\n if (previousSrc !== src) {\n setPreviousSrc(src);\n setImageError(false);\n }\n\n const showFallback = !src || imageError;\n return (\n <div\n className={cn(\n \"eloq:relative eloq:flex eloq:items-center eloq:justify-center eloq:w-full eloq:h-full\",\n className,\n )}\n {...rest}\n >\n {showFallback ? (\n <svg\n viewBox=\"0 0 80 80\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"eloq:absolute\"\n >\n <circle cx=\"40\" cy=\"40\" r=\"40\" fill={bgColor || \"#6F33B7\"} />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M41.0869 25.8696C33.7902 25.8696 28.0434 31.7499 28.0434 38.913C28.0434 47.3813 34.7925 54.1304 43.2608 54.1304V62.8261C29.99 62.8261 19.3478 52.1837 19.3478 38.913C19.3478 27.0122 28.9233 17.1739 41.0869 17.1739C52.2099 17.1739 60.6521 25.6826 60.6521 36.7391C60.6521 46.4864 52.9974 54.1304 43.2608 54.1304V45.4348C48.1982 45.4348 51.9565 41.6807 51.9565 36.7391C51.9565 30.4669 47.3892 25.8696 41.0869 25.8696Z\"\n fill={fgColor || \"#000000\"}\n />\n </svg>\n ) : (\n // Absolutely positioned (rather than sized via flex + w-full/h-full) to\n // avoid a WebKit/iOS Safari bug where an <img> pointing at an SVG with no\n // intrinsic width/height can collapse to 0x0 inside a centered flex parent.\n <img\n src={src}\n alt=\"Assistant Logo\"\n className=\"eloq:absolute eloq:inset-0 eloq:shrink-0 eloq:w-full eloq:h-full eloq:object-contain eloq:rounded-full\"\n onError={() => setImageError(true)}\n />\n )}\n </div>\n );\n}\n","import { forwardRef, type HTMLAttributes } from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst Card = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"eloq:rounded-lg eloq:border eloq:bg-card eloq:text-card-foreground eloq:shadow-sm\",\n className,\n )}\n {...props}\n />\n ),\n);\nCard.displayName = \"Card\";\n\nconst CardHeader = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"eloq:flex eloq:flex-col eloq:space-y-1.5 eloq:p-6\",\n className,\n )}\n {...props}\n />\n ),\n);\nCardHeader.displayName = \"CardHeader\";\n\nconst CardTitle = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"eloq:text-2xl eloq:font-semibold eloq:leading-none eloq:tracking-tight\",\n className,\n )}\n {...props}\n />\n ),\n);\nCardTitle.displayName = \"CardTitle\";\n\nconst CardDescription = forwardRef<\n HTMLDivElement,\n HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"eloq:text-sm eloq:text-muted-foreground\", className)}\n {...props}\n />\n));\nCardDescription.displayName = \"CardDescription\";\n\nconst CardContent = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"eloq:p-6 eloq:pt-0\", className)} {...props} />\n ),\n);\nCardContent.displayName = \"CardContent\";\n\nconst CardFooter = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"eloq:flex eloq:items-center eloq:p-6 eloq:pt-0\",\n className,\n )}\n {...props}\n />\n ),\n);\nCardFooter.displayName = \"CardFooter\";\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardDescription,\n CardContent,\n};\n","import { createContext, useContext, type PropsWithChildren } from \"react\";\n\nexport interface ThemeContextType {\n mode: string;\n botBubbleColor: string;\n userBubbleColor: string;\n /** Background of the suggested-message quick-reply pills. Empty string falls back to the default muted style. */\n suggestedMessageBubbleColor: string;\n /** Explicit text color for user bubbles. Empty string = auto (black/white by contrast). */\n userBubbleTextColor: string;\n /** Explicit text color for bot bubbles. Empty string = auto (black/white by contrast). */\n botBubbleTextColor: string;\n /** Explicit text color for the suggested-message pills. Empty string = auto (black/white by contrast). */\n suggestedMessageBubbleTextColor: string;\n legalText: string;\n}\n\nconst ThemeContext = createContext<ThemeContextType | undefined>(undefined);\n\nexport function ThemeProvider(\n props: PropsWithChildren<{\n mode?: string;\n botBubbleColor?: string | undefined;\n userBubbleColor?: string | undefined;\n suggestedMessageBubbleColor?: string | undefined;\n userBubbleTextColor?: string | undefined;\n botBubbleTextColor?: string | undefined;\n suggestedMessageBubbleTextColor?: string | undefined;\n legalText?: string;\n }>,\n) {\n const mode = props.mode || \"light\";\n return (\n <ThemeContext.Provider\n value={{\n mode,\n // The default assistant-bubble gray is mode-aware: a light bubble on\n // the dark background would be the brightest surface on screen.\n // Customer-configured colors are used as-is in both modes.\n botBubbleColor:\n props.botBubbleColor || (mode === \"dark\" ? \"#2c2440\" : \"#f5f5f5\"),\n userBubbleColor: props.userBubbleColor || \"#6f34b7\",\n suggestedMessageBubbleColor: props.suggestedMessageBubbleColor || \"\",\n userBubbleTextColor: props.userBubbleTextColor || \"\",\n botBubbleTextColor: props.botBubbleTextColor || \"\",\n suggestedMessageBubbleTextColor:\n props.suggestedMessageBubbleTextColor || \"\",\n legalText: props.legalText || \"\",\n }}\n >\n {props.children}\n </ThemeContext.Provider>\n );\n}\n\nexport const useTheme = () => {\n const context = useContext(ThemeContext);\n if (!context) {\n throw new Error(\"useTheme must be used within a ThemeProvider\");\n }\n return context;\n};\n","/**\n * @license lucide-react v0.577.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst mergeClasses = (...classes) => classes.filter((className, index, array) => {\n return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\n\nexport { mergeClasses };\n//# sourceMappingURL=mergeClasses.js.map\n","/**\n * @license lucide-react v0.577.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\n\nexport { toKebabCase };\n//# sourceMappingURL=toKebabCase.js.map\n","/**\n * @license lucide-react v0.577.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toCamelCase = (string) => string.replace(\n /^([A-Z])|[\\s-_]+(\\w)/g,\n (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()\n);\n\nexport { toCamelCase };\n//# sourceMappingURL=toCamelCase.js.map\n","/**\n * @license lucide-react v0.577.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { toCamelCase } from './toCamelCase.js';\n\nconst toPascalCase = (string) => {\n const camelCase = toCamelCase(string);\n return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n};\n\nexport { toPascalCase };\n//# sourceMappingURL=toPascalCase.js.map\n","/**\n * @license lucide-react v0.577.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.js.map\n","/**\n * @license lucide-react v0.577.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst hasA11yProp = (props) => {\n for (const prop in props) {\n if (prop.startsWith(\"aria-\") || prop === \"role\" || prop === \"title\") {\n return true;\n }\n }\n return false;\n};\n\nexport { hasA11yProp };\n//# sourceMappingURL=hasA11yProp.js.map\n","/**\n * @license lucide-react v0.577.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport defaultAttributes from './defaultAttributes.js';\nimport { hasA11yProp } from './shared/src/utils/hasA11yProp.js';\nimport { mergeClasses } from './shared/src/utils/mergeClasses.js';\n\nconst Icon = forwardRef(\n ({\n color = \"currentColor\",\n size = 24,\n strokeWidth = 2,\n absoluteStrokeWidth,\n className = \"\",\n children,\n iconNode,\n ...rest\n }, ref) => createElement(\n \"svg\",\n {\n ref,\n ...defaultAttributes,\n width: size,\n height: size,\n stroke: color,\n strokeWidth: absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size) : strokeWidth,\n className: mergeClasses(\"lucide\", className),\n ...!children && !hasA11yProp(rest) && { \"aria-hidden\": \"true\" },\n ...rest\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...Array.isArray(children) ? children : [children]\n ]\n )\n);\n\nexport { Icon as default };\n//# sourceMappingURL=Icon.js.map\n","/**\n * @license lucide-react v0.577.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport { mergeClasses } from './shared/src/utils/mergeClasses.js';\nimport { toKebabCase } from './shared/src/utils/toKebabCase.js';\nimport { toPascalCase } from './shared/src/utils/toPascalCase.js';\nimport Icon from './Icon.js';\n\nconst createLucideIcon = (iconName, iconNode) => {\n const Component = forwardRef(\n ({ className, ...props }, ref) => createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className\n ),\n ...props\n })\n );\n Component.displayName = toPascalCase(iconName);\n return Component;\n};\n\nexport { createLucideIcon as default };\n//# sourceMappingURL=createLucideIcon.js.map\n","/**\n * @license lucide-react v0.577.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"m5 12 7-7 7 7\", key: \"hav0vg\" }],\n [\"path\", { d: \"M12 19V5\", key: \"x0mq9r\" }]\n];\nconst ArrowUp = createLucideIcon(\"arrow-up\", __iconNode);\n\nexport { __iconNode, ArrowUp as default };\n//# sourceMappingURL=arrow-up.js.map\n","/**\n * @license lucide-react v0.577.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"m6 9 6 6 6-6\", key: \"qrunsl\" }]];\nconst ChevronDown = createLucideIcon(\"chevron-down\", __iconNode);\n\nexport { __iconNode, ChevronDown as default };\n//# sourceMappingURL=chevron-down.js.map\n","/**\n * @license lucide-react v0.577.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"line\", { x1: \"12\", x2: \"12\", y1: \"8\", y2: \"12\", key: \"1pkeuh\" }],\n [\"line\", { x1: \"12\", x2: \"12.01\", y1: \"16\", y2: \"16\", key: \"4dfq90\" }]\n];\nconst CircleAlert = createLucideIcon(\"circle-alert\", __iconNode);\n\nexport { __iconNode, CircleAlert as default };\n//# sourceMappingURL=circle-alert.js.map\n","/**\n * @license lucide-react v0.577.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M21.801 10A10 10 0 1 1 17 3.335\", key: \"yps3ct\" }],\n [\"path\", { d: \"m9 11 3 3L22 4\", key: \"1pflzl\" }]\n];\nconst CircleCheckBig = createLucideIcon(\"circle-check-big\", __iconNode);\n\nexport { __iconNode, CircleCheckBig as default };\n//# sourceMappingURL=circle-check-big.js.map\n","/**\n * @license lucide-react v0.577.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"m15 9-6 6\", key: \"1uzhvr\" }],\n [\"path\", { d: \"m9 9 6 6\", key: \"z0biqf\" }]\n];\nconst CircleX = createLucideIcon(\"circle-x\", __iconNode);\n\nexport { __iconNode, CircleX as default };\n//# sourceMappingURL=circle-x.js.map\n","/**\n * @license lucide-react v0.577.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"rect\", { width: \"14\", height: \"14\", x: \"8\", y: \"8\", rx: \"2\", ry: \"2\", key: \"17jyea\" }],\n [\"path\", { d: \"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\", key: \"zix9uf\" }]\n];\nconst Copy = createLucideIcon(\"copy\", __iconNode);\n\nexport { __iconNode, Copy as default };\n//# sourceMappingURL=copy.js.map\n","/**\n * @license lucide-react v0.577.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"M12 16v-4\", key: \"1dtifu\" }],\n [\"path\", { d: \"M12 8h.01\", key: \"e9boi3\" }]\n];\nconst Info = createLucideIcon(\"info\", __iconNode);\n\nexport { __iconNode, Info as default };\n//# sourceMappingURL=info.js.map\n","/**\n * @license lucide-react v0.577.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719\",\n key: \"1sd12s\"\n }\n ]\n];\nconst MessageCircle = createLucideIcon(\"message-circle\", __iconNode);\n\nexport { __iconNode, MessageCircle as default };\n//# sourceMappingURL=message-circle.js.map\n","/**\n * @license lucide-react v0.577.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M21 12a9 9 0 0 0-9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\", key: \"14sxne\" }],\n [\"path\", { d: \"M3 3v5h5\", key: \"1xhq8a\" }],\n [\"path\", { d: \"M3 12a9 9 0 0 0 9 9 9.75 9.75 0 0 0 6.74-2.74L21 16\", key: \"1hlbsb\" }],\n [\"path\", { d: \"M16 16h5v5\", key: \"ccwih5\" }]\n];\nconst RefreshCcw = createLucideIcon(\"refresh-ccw\", __iconNode);\n\nexport { __iconNode, RefreshCcw as default };\n//# sourceMappingURL=refresh-ccw.js.map\n","/**\n * @license lucide-react v0.577.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z\",\n key: \"r04s7s\"\n }\n ]\n];\nconst Star = createLucideIcon(\"star\", __iconNode);\n\nexport { __iconNode, Star as default };\n//# sourceMappingURL=star.js.map\n","/**\n * @license lucide-react v0.577.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M9 18.12 10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22a3.13 3.13 0 0 1-3-3.88Z\",\n key: \"m61m77\"\n }\n ],\n [\"path\", { d: \"M17 14V2\", key: \"8ymqnk\" }]\n];\nconst ThumbsDown = createLucideIcon(\"thumbs-down\", __iconNode);\n\nexport { __iconNode, ThumbsDown as default };\n//# sourceMappingURL=thumbs-down.js.map\n","/**\n * @license lucide-react v0.577.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88Z\",\n key: \"emmmcr\"\n }\n ],\n [\"path\", { d: \"M7 10v12\", key: \"1qc93n\" }]\n];\nconst ThumbsUp = createLucideIcon(\"thumbs-up\", __iconNode);\n\nexport { __iconNode, ThumbsUp as default };\n//# sourceMappingURL=thumbs-up.js.map\n","/**\n * @license lucide-react v0.577.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\",\n key: \"wmoenq\"\n }\n ],\n [\"path\", { d: \"M12 9v4\", key: \"juzpu7\" }],\n [\"path\", { d: \"M12 17h.01\", key: \"p32p05\" }]\n];\nconst TriangleAlert = createLucideIcon(\"triangle-alert\", __iconNode);\n\nexport { __iconNode, TriangleAlert as default };\n//# sourceMappingURL=triangle-alert.js.map\n","/**\n * @license lucide-react v0.577.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M18 6 6 18\", key: \"1bl5f8\" }],\n [\"path\", { d: \"m6 6 12 12\", key: \"d8bk6v\" }]\n];\nconst X = createLucideIcon(\"x\", __iconNode);\n\nexport { __iconNode, X as default };\n//# sourceMappingURL=x.js.map\n","var __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/compose-refs.tsx\nimport * as React from \"react\";\nfunction setRef(ref, value) {\n if (typeof ref === \"function\") {\n return ref(value);\n } else if (ref !== null && ref !== void 0) {\n ref.current = value;\n }\n}\n__name(setRef, \"setRef\");\nfunction composeRefs(...refs) {\n return (node) => {\n let hasCleanup = false;\n const cleanups = refs.map((ref) => {\n const cleanup = setRef(ref, node);\n if (!hasCleanup && typeof cleanup == \"function\") {\n hasCleanup = true;\n }\n return cleanup;\n });\n if (hasCleanup) {\n return () => {\n for (let i = 0; i < cleanups.length; i++) {\n const cleanup = cleanups[i];\n if (typeof cleanup == \"function\") {\n cleanup();\n } else {\n setRef(refs[i], null);\n }\n }\n };\n }\n };\n}\n__name(composeRefs, \"composeRefs\");\nfunction useComposedRefs(...refs) {\n return React.useCallback(composeRefs(...refs), refs);\n}\n__name(useComposedRefs, \"useComposedRefs\");\nexport {\n composeRefs,\n useComposedRefs\n};\n//# sourceMappingURL=index.mjs.map\n","var __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/slot.tsx\nimport * as React from \"react\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\n// @__NO_SIDE_EFFECTS__\nfunction createSlot(ownerName) {\n const Slot2 = React.forwardRef((props, forwardedRef) => {\n let { children, ...slotProps } = props;\n let slottableElement = null;\n let hasSlottable = false;\n const newChildren = [];\n if (isLazyComponent(children) && typeof use === \"function\") {\n children = use(children._payload);\n }\n React.Children.forEach(children, (maybeSlottable) => {\n if (isSlottable(maybeSlottable)) {\n hasSlottable = true;\n const slottable = maybeSlottable;\n let child = \"child\" in slottable.props ? slottable.props.child : slottable.props.children;\n if (isLazyComponent(child) && typeof use === \"function\") {\n child = use(child._payload);\n }\n slottableElement = getSlottableElementFromSlottable(slottable, child);\n newChildren.push(slottableElement?.props?.children);\n } else {\n newChildren.push(maybeSlottable);\n }\n });\n if (slottableElement) {\n slottableElement = React.cloneElement(slottableElement, void 0, newChildren);\n } else if (\n // A `Slottable` was found but it didn't resolve to a single element (e.g.\n // it wrapped multiple elements, text, or a render-prop `child` that\n // wasn't an element). Don't fall back to treating the `Slottable` wrapper\n // itself as the slot target — throw a descriptive error below instead.\n !hasSlottable && React.Children.count(children) === 1 && React.isValidElement(children)\n ) {\n slottableElement = children;\n }\n const slottableElementRef = slottableElement ? getElementRef(slottableElement) : void 0;\n const composedRef = useComposedRefs(forwardedRef, slottableElementRef);\n if (!slottableElement) {\n if (children || children === 0) {\n throw new Error(\n hasSlottable ? createSlottableError(ownerName) : createSlotError(ownerName)\n );\n }\n return children;\n }\n const mergedProps = mergeProps(slotProps, slottableElement.props ?? {});\n if (slottableElement.type !== React.Fragment) {\n mergedProps.ref = forwardedRef ? composedRef : slottableElementRef;\n }\n return React.cloneElement(slottableElement, mergedProps);\n });\n Slot2.displayName = `${ownerName}.Slot`;\n return Slot2;\n}\n__name(createSlot, \"createSlot\");\nvar Slot = /* @__PURE__ */ createSlot(\"Slot\");\nvar SLOTTABLE_IDENTIFIER = Symbol.for(\"radix.slottable\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlottable(ownerName) {\n const Slottable2 = /* @__PURE__ */ __name((props) => \"child\" in props ? props.children(props.child) : props.children, \"Slottable\");\n Slottable2.displayName = `${ownerName}.Slottable`;\n Slottable2.__radixId = SLOTTABLE_IDENTIFIER;\n return Slottable2;\n}\n__name(createSlottable, \"createSlottable\");\nvar Slottable = /* @__PURE__ */ createSlottable(\"Slottable\");\nvar getSlottableElementFromSlottable = /* @__PURE__ */ __name((slottable, child) => {\n if (\"child\" in slottable.props) {\n const child2 = slottable.props.child;\n if (!React.isValidElement(child2)) return null;\n return React.cloneElement(child2, void 0, slottable.props.children(child2.props.children));\n }\n return React.isValidElement(child) ? child : null;\n}, \"getSlottableElementFromSlottable\");\nfunction mergeProps(slotProps, childProps) {\n const overrideProps = { ...childProps };\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args) => {\n const result = childPropValue(...args);\n slotPropValue(...args);\n return result;\n };\n } else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n } else if (propName === \"style\") {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === \"className\") {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(\" \");\n }\n }\n return { ...slotProps, ...overrideProps };\n}\n__name(mergeProps, \"mergeProps\");\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\n__name(getElementRef, \"getElementRef\");\nfunction isSlottable(child) {\n return React.isValidElement(child) && typeof child.type === \"function\" && \"__radixId\" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;\n}\n__name(isSlottable, \"isSlottable\");\nvar REACT_LAZY_TYPE = Symbol.for(\"react.lazy\");\nfunction isLazyComponent(element) {\n return element != null && typeof element === \"object\" && \"$$typeof\" in element && element.$$typeof === REACT_LAZY_TYPE && \"_payload\" in element && isPromiseLike(element._payload);\n}\n__name(isLazyComponent, \"isLazyComponent\");\nfunction isPromiseLike(value) {\n return typeof value === \"object\" && value !== null && \"then\" in value;\n}\n__name(isPromiseLike, \"isPromiseLike\");\nvar createSlotError = /* @__PURE__ */ __name((ownerName) => {\n return `${ownerName} failed to slot onto its children. Expected a single React element child or \\`Slottable\\`.`;\n}, \"createSlotError\");\nvar createSlottableError = /* @__PURE__ */ __name((ownerName) => {\n return `${ownerName} failed to slot onto its \\`Slottable\\`. Expected \\`Slottable\\` to receive a single React element child.`;\n}, \"createSlottableError\");\nvar use = React[\" use \".trim().toString()];\nexport {\n Slot as Root,\n Slot,\n Slottable,\n createSlot,\n createSlottable\n};\n//# sourceMappingURL=index.mjs.map\n","var __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/primitive.tsx\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NODES = [\n \"a\",\n \"button\",\n \"div\",\n \"form\",\n \"h2\",\n \"h3\",\n \"img\",\n \"input\",\n \"label\",\n \"li\",\n \"nav\",\n \"ol\",\n \"p\",\n \"select\",\n \"span\",\n \"svg\",\n \"ul\"\n];\nvar Primitive = NODES.reduce((primitive, node) => {\n const Slot = createSlot(`Primitive.${node}`);\n const Node = React.forwardRef((props, forwardedRef) => {\n const { asChild, ...primitiveProps } = props;\n const Comp = asChild ? Slot : node;\n if (typeof window !== \"undefined\") {\n window[Symbol.for(\"radix-ui\")] = true;\n }\n return /* @__PURE__ */ jsx(Comp, { ...primitiveProps, ref: forwardedRef });\n });\n Node.displayName = `Primitive.${node}`;\n return { ...primitive, [node]: Node };\n}, {});\nfunction dispatchDiscreteCustomEvent(target, event) {\n if (target) ReactDOM.flushSync(() => target.dispatchEvent(event));\n}\n__name(dispatchDiscreteCustomEvent, \"dispatchDiscreteCustomEvent\");\nvar Root = Primitive;\nexport {\n Primitive,\n Root,\n dispatchDiscreteCustomEvent\n};\n//# sourceMappingURL=index.mjs.map\n","// src/use-layout-effect.tsx\nimport * as React from \"react\";\nvar useLayoutEffect2 = globalThis?.document ? React.useLayoutEffect : () => {\n};\nexport {\n useLayoutEffect2 as useLayoutEffect\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\nvar __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/presence.tsx\nimport * as React2 from \"react\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\n\n// src/use-state-machine.tsx\nimport * as React from \"react\";\nfunction useStateMachine(initialState, machine) {\n return React.useReducer((state, event) => {\n const nextState = machine[state][event];\n return nextState ?? state;\n }, initialState);\n}\n__name(useStateMachine, \"useStateMachine\");\n\n// src/presence.tsx\nvar Presence = /* @__PURE__ */ __name((props) => {\n const { present, children } = props;\n const presence = usePresence(present);\n const child = typeof children === \"function\" ? children({ present: presence.isPresent }) : React2.Children.only(children);\n const ref = useStableComposedRefs(presence.ref, getElementRef(child));\n const forceMount = typeof children === \"function\";\n return forceMount || presence.isPresent ? React2.cloneElement(child, { ref }) : null;\n}, \"Presence\");\nfunction usePresence(present) {\n const [node, setNode] = React2.useState();\n const stylesRef = React2.useRef(null);\n const prevPresentRef = React2.useRef(present);\n const prevAnimationNameRef = React2.useRef(\"none\");\n const mountAnimationNameRef = React2.useRef(void 0);\n const initialState = present ? \"mounted\" : \"unmounted\";\n const [state, send] = useStateMachine(initialState, {\n mounted: {\n UNMOUNT: \"unmounted\",\n ANIMATION_OUT: \"unmountSuspended\"\n },\n unmountSuspended: {\n MOUNT: \"mounted\",\n ANIMATION_END: \"unmounted\"\n },\n unmounted: {\n MOUNT: \"mounted\"\n }\n });\n React2.useEffect(() => {\n if (state === \"mounted\") {\n prevAnimationNameRef.current = mountAnimationNameRef.current ?? getAnimationName(stylesRef.current);\n mountAnimationNameRef.current = void 0;\n } else {\n prevAnimationNameRef.current = \"none\";\n }\n }, [state]);\n useLayoutEffect(() => {\n const styles = stylesRef.current;\n const wasPresent = prevPresentRef.current;\n const hasPresentChanged = wasPresent !== present;\n if (hasPresentChanged) {\n const prevAnimationName = prevAnimationNameRef.current;\n const currentAnimationName = getAnimationName(styles);\n if (present) {\n mountAnimationNameRef.current = currentAnimationName;\n send(\"MOUNT\");\n } else if (currentAnimationName === \"none\" || styles?.display === \"none\") {\n send(\"UNMOUNT\");\n } else {\n const isAnimating = prevAnimationName !== currentAnimationName;\n if (wasPresent && isAnimating) {\n send(\"ANIMATION_OUT\");\n } else {\n send(\"UNMOUNT\");\n }\n }\n prevPresentRef.current = present;\n }\n }, [present, send]);\n useLayoutEffect(() => {\n if (node) {\n let timeoutId;\n const ownerWindow = node.ownerDocument.defaultView ?? window;\n const handleAnimationEnd = /* @__PURE__ */ __name((event) => {\n const currentAnimationName = getAnimationName(stylesRef.current);\n const isCurrentAnimation = currentAnimationName.includes(CSS.escape(event.animationName));\n if (event.target === node && isCurrentAnimation) {\n send(\"ANIMATION_END\");\n if (!prevPresentRef.current) {\n const currentFillMode = node.style.animationFillMode;\n node.style.animationFillMode = \"forwards\";\n timeoutId = ownerWindow.setTimeout(() => {\n if (node.style.animationFillMode === \"forwards\") {\n node.style.animationFillMode = currentFillMode;\n }\n });\n }\n }\n }, \"handleAnimationEnd\");\n const handleAnimationStart = /* @__PURE__ */ __name((event) => {\n if (event.target === node) {\n prevAnimationNameRef.current = getAnimationName(stylesRef.current);\n }\n }, \"handleAnimationStart\");\n node.addEventListener(\"animationstart\", handleAnimationStart);\n node.addEventListener(\"animationcancel\", handleAnimationEnd);\n node.addEventListener(\"animationend\", handleAnimationEnd);\n return () => {\n ownerWindow.clearTimeout(timeoutId);\n node.removeEventListener(\"animationstart\", handleAnimationStart);\n node.removeEventListener(\"animationcancel\", handleAnimationEnd);\n node.removeEventListener(\"animationend\", handleAnimationEnd);\n };\n } else {\n send(\"ANIMATION_END\");\n }\n }, [node, send]);\n return {\n isPresent: [\"mounted\", \"unmountSuspended\"].includes(state),\n ref: React2.useCallback((node2) => {\n if (node2) {\n const styles = getComputedStyle(node2);\n stylesRef.current = styles;\n mountAnimationNameRef.current = getAnimationName(styles);\n } else {\n stylesRef.current = null;\n }\n setNode(node2);\n }, [])\n };\n}\n__name(usePresence, \"usePresence\");\nfunction setRef(ref, value) {\n if (typeof ref === \"function\") {\n return ref(value);\n } else if (ref !== null && ref !== void 0) {\n ref.current = value;\n }\n}\n__name(setRef, \"setRef\");\nfunction useStableComposedRefs(...refs) {\n const refsRef = React2.useRef(refs);\n refsRef.current = refs;\n return React2.useCallback((node) => {\n const currentRefs = refsRef.current;\n let hasCleanup = false;\n const cleanups = currentRefs.map((ref) => {\n const cleanup = setRef(ref, node);\n if (!hasCleanup && typeof cleanup === \"function\") {\n hasCleanup = true;\n }\n return cleanup;\n });\n if (hasCleanup) {\n return () => {\n for (let i = 0; i < cleanups.length; i++) {\n const cleanup = cleanups[i];\n if (typeof cleanup === \"function\") {\n cleanup();\n } else {\n setRef(currentRefs[i], null);\n }\n }\n };\n }\n }, []);\n}\n__name(useStableComposedRefs, \"useStableComposedRefs\");\nfunction getAnimationName(styles) {\n return styles?.animationName || \"none\";\n}\n__name(getAnimationName, \"getAnimationName\");\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\n__name(getElementRef, \"getElementRef\");\nvar Root = Presence;\nexport {\n Presence,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","var __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/create-context.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\n// @__NO_SIDE_EFFECTS__\nfunction createContext2(rootComponentName, defaultContext) {\n const Context = React.createContext(defaultContext);\n Context.displayName = rootComponentName + \"Context\";\n const Provider = /* @__PURE__ */ __name((props) => {\n const { children, ...context } = props;\n const value = React.useMemo(() => context, Object.values(context));\n return /* @__PURE__ */ jsx(Context.Provider, { value, children });\n }, \"Provider\");\n Provider.displayName = rootComponentName + \"Provider\";\n function useContext2(consumerName, options = {}) {\n const { optional = false } = options;\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== void 0) return defaultContext;\n if (optional) return void 0;\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n __name(useContext2, \"useContext\");\n return [Provider, useContext2];\n}\n__name(createContext2, \"createContext\");\n// @__NO_SIDE_EFFECTS__\nfunction createContextScope(scopeName, createContextScopeDeps = []) {\n let defaultContexts = [];\n function createContext3(rootComponentName, defaultContext) {\n const BaseContext = React.createContext(defaultContext);\n BaseContext.displayName = rootComponentName + \"Context\";\n const index = defaultContexts.length;\n defaultContexts = [...defaultContexts, defaultContext];\n const Provider = /* @__PURE__ */ __name((props) => {\n const { scope, children, ...context } = props;\n const Context = scope?.[scopeName]?.[index] || BaseContext;\n const value = React.useMemo(() => context, Object.values(context));\n return /* @__PURE__ */ jsx(Context.Provider, { value, children });\n }, \"Provider\");\n Provider.displayName = rootComponentName + \"Provider\";\n function useContext2(consumerName, scope, options = {}) {\n const { optional = false } = options;\n const Context = scope?.[scopeName]?.[index] || BaseContext;\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== void 0) return defaultContext;\n if (optional) return void 0;\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n __name(useContext2, \"useContext\");\n return [Provider, useContext2];\n }\n __name(createContext3, \"createContext\");\n const createScope = /* @__PURE__ */ __name(() => {\n const scopeContexts = defaultContexts.map((defaultContext) => {\n return React.createContext(defaultContext);\n });\n return /* @__PURE__ */ __name(function useScope(scope) {\n const contexts = scope?.[scopeName] || scopeContexts;\n return React.useMemo(\n () => ({ [`__scope${scopeName}`]: { ...scope, [scopeName]: contexts } }),\n [scope, contexts]\n );\n }, \"useScope\");\n }, \"createScope\");\n createScope.scopeName = scopeName;\n return [createContext3, composeContextScopes(createScope, ...createContextScopeDeps)];\n}\n__name(createContextScope, \"createContextScope\");\nfunction composeContextScopes(...scopes) {\n const baseScope = scopes[0];\n if (scopes.length === 1) return baseScope;\n const createScope = /* @__PURE__ */ __name(() => {\n const scopeHooks = scopes.map((createScope2) => ({\n useScope: createScope2(),\n scopeName: createScope2.scopeName\n }));\n return /* @__PURE__ */ __name(function useComposedScopes(overrideScopes) {\n const nextScopes = scopeHooks.reduce((nextScopes2, { useScope, scopeName }) => {\n const scopeProps = useScope(overrideScopes);\n const currentScope = scopeProps[`__scope${scopeName}`];\n return { ...nextScopes2, ...currentScope };\n }, {});\n return React.useMemo(() => ({ [`__scope${baseScope.scopeName}`]: nextScopes }), [nextScopes]);\n }, \"useComposedScopes\");\n }, \"createScope\");\n createScope.scopeName = baseScope.scopeName;\n return createScope;\n}\n__name(composeContextScopes, \"composeContextScopes\");\nexport {\n createContext2 as createContext,\n createContextScope\n};\n//# sourceMappingURL=index.mjs.map\n","var __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/use-callback-ref.tsx\nimport * as React from \"react\";\nfunction useCallbackRef(callback) {\n const callbackRef = React.useRef(callback);\n React.useEffect(() => {\n callbackRef.current = callback;\n });\n return React.useMemo(() => ((...args) => callbackRef.current?.(...args)), []);\n}\n__name(useCallbackRef, \"useCallbackRef\");\nexport {\n useCallbackRef\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\nvar __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/direction.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nvar DirectionContext = React.createContext(void 0);\nvar DirectionProvider = /* @__PURE__ */ __name((props) => {\n const { dir, children } = props;\n return /* @__PURE__ */ jsx(DirectionContext.Provider, { value: dir, children });\n}, \"DirectionProvider\");\nfunction useDirection(localDir) {\n const globalDir = React.useContext(DirectionContext);\n return localDir || globalDir || \"ltr\";\n}\n__name(useDirection, \"useDirection\");\nvar Provider = DirectionProvider;\nexport {\n DirectionProvider,\n Provider,\n useDirection\n};\n//# sourceMappingURL=index.mjs.map\n","var __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/number.ts\nfunction clamp(value, [min, max]) {\n return Math.min(max, Math.max(min, value));\n}\n__name(clamp, \"clamp\");\nexport {\n clamp\n};\n//# sourceMappingURL=index.mjs.map\n","var __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/primitive.tsx\nvar canUseDOM = !!(typeof window !== \"undefined\" && window.document && window.document.createElement);\nfunction composeEventHandlers(originalEventHandler, ourEventHandler, { checkForDefaultPrevented = true } = {}) {\n return /* @__PURE__ */ __name(function handleEvent(event) {\n originalEventHandler?.(event);\n if (checkForDefaultPrevented === false || !event || !event.defaultPrevented) {\n return ourEventHandler?.(event);\n }\n }, \"handleEvent\");\n}\n__name(composeEventHandlers, \"composeEventHandlers\");\nfunction getOwnerWindow(element) {\n if (!canUseDOM) {\n throw new Error(\"Cannot access window outside of the DOM\");\n }\n return element?.ownerDocument?.defaultView ?? window;\n}\n__name(getOwnerWindow, \"getOwnerWindow\");\nfunction getOwnerDocument(element) {\n if (!canUseDOM) {\n throw new Error(\"Cannot access document outside of the DOM\");\n }\n return element?.ownerDocument ?? document;\n}\n__name(getOwnerDocument, \"getOwnerDocument\");\nfunction getActiveElement(node, activeDescendant = false) {\n const { activeElement } = getOwnerDocument(node);\n if (!activeElement?.nodeName) {\n return null;\n }\n if (isFrame(activeElement) && activeElement.contentDocument) {\n return getActiveElement(activeElement.contentDocument.body, activeDescendant);\n }\n if (activeDescendant) {\n const id = activeElement.getAttribute(\"aria-activedescendant\");\n if (id) {\n const element = getOwnerDocument(activeElement).getElementById(id);\n if (element) {\n return element;\n }\n }\n }\n return activeElement;\n}\n__name(getActiveElement, \"getActiveElement\");\nfunction isFrame(element) {\n return element.tagName === \"IFRAME\";\n}\n__name(isFrame, \"isFrame\");\nexport {\n canUseDOM,\n composeEventHandlers,\n getActiveElement,\n getOwnerDocument,\n getOwnerWindow,\n isFrame\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\nvar __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/scroll-area.tsx\nimport * as React2 from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { clamp } from \"@radix-ui/number\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\n\n// src/use-state-machine.ts\nimport * as React from \"react\";\nfunction useStateMachine(initialState, machine) {\n return React.useReducer((state, event) => {\n const nextState = machine[state][event];\n return nextState ?? state;\n }, initialState);\n}\n__name(useStateMachine, \"useStateMachine\");\n\n// src/scroll-area.tsx\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar SCROLL_AREA_NAME = \"ScrollArea\";\nvar [createScrollAreaContext, createScrollAreaScope] = createContextScope(SCROLL_AREA_NAME);\nvar [ScrollAreaProvider, useScrollAreaContext] = createScrollAreaContext(SCROLL_AREA_NAME);\nvar ScrollArea = /* @__PURE__ */ React2.forwardRef(\n /* @__PURE__ */ __name(function ScrollArea2(props, forwardedRef) {\n const {\n __scopeScrollArea,\n type = \"hover\",\n dir,\n scrollHideDelay = 600,\n ...scrollAreaProps\n } = props;\n const [scrollArea, setScrollArea] = React2.useState(null);\n const [viewport, setViewport] = React2.useState(null);\n const [content, setContent] = React2.useState(null);\n const [scrollbarX, setScrollbarX] = React2.useState(null);\n const [scrollbarY, setScrollbarY] = React2.useState(null);\n const [cornerWidth, setCornerWidth] = React2.useState(0);\n const [cornerHeight, setCornerHeight] = React2.useState(0);\n const [scrollbarXEnabled, setScrollbarXEnabled] = React2.useState(false);\n const [scrollbarYEnabled, setScrollbarYEnabled] = React2.useState(false);\n const composedRefs = useComposedRefs(forwardedRef, setScrollArea);\n const direction = useDirection(dir);\n return /* @__PURE__ */ jsx(\n ScrollAreaProvider,\n {\n scope: __scopeScrollArea,\n type,\n dir: direction,\n scrollHideDelay,\n scrollArea,\n viewport,\n onViewportChange: setViewport,\n content,\n onContentChange: setContent,\n scrollbarX,\n onScrollbarXChange: setScrollbarX,\n scrollbarXEnabled,\n onScrollbarXEnabledChange: setScrollbarXEnabled,\n scrollbarY,\n onScrollbarYChange: setScrollbarY,\n scrollbarYEnabled,\n onScrollbarYEnabledChange: setScrollbarYEnabled,\n onCornerWidthChange: setCornerWidth,\n onCornerHeightChange: setCornerHeight,\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n dir: direction,\n ...scrollAreaProps,\n ref: composedRefs,\n style: {\n position: \"relative\",\n // Pass corner sizes as CSS vars to reduce re-renders of context consumers\n \"--radix-scroll-area-corner-width\": cornerWidth + \"px\",\n \"--radix-scroll-area-corner-height\": cornerHeight + \"px\",\n ...props.style\n }\n }\n )\n }\n );\n }, \"ScrollArea\")\n);\nvar VIEWPORT_NAME = \"ScrollAreaViewport\";\nvar ScrollAreaViewport = /* @__PURE__ */ React2.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function ScrollAreaViewport2(props, forwardedRef) {\n const { __scopeScrollArea, children, nonce, ...viewportProps } = props;\n const context = useScrollAreaContext(VIEWPORT_NAME, __scopeScrollArea);\n const ref = React2.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref, context.onViewportChange);\n return /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(ScrollAreaViewportStyle, { nonce }),\n /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-radix-scroll-area-viewport\": \"\",\n ...viewportProps,\n ref: composedRefs,\n style: {\n /**\n * We don't support `visible` because the intention is to have at least one scrollbar\n * if this component is used and `visible` will behave like `auto` in that case\n * https://developer.mozilla.org/en-US/docs/Web/CSS/overflow#description\n *\n * We don't handle `auto` because the intention is for the native implementation\n * to be hidden if using this component. We just want to ensure the node is scrollable\n * so could have used either `scroll` or `auto` here. We picked `scroll` to prevent\n * the browser from having to work out whether to render native scrollbars or not,\n * we tell it to with the intention of hiding them in CSS.\n */\n overflowX: context.scrollbarXEnabled ? \"scroll\" : \"hidden\",\n overflowY: context.scrollbarYEnabled ? \"scroll\" : \"hidden\",\n ...props.style\n },\n children: /* @__PURE__ */ jsx(\"div\", { ref: context.onContentChange, style: { minWidth: \"100%\", display: \"table\" }, children })\n }\n )\n ] });\n }, \"ScrollAreaViewport\")\n);\nvar ScrollAreaViewportStyle = /* @__PURE__ */ React2.memo(\n /* @__PURE__ */ __name(function ScrollAreaViewportStyle2({ nonce }) {\n return /* @__PURE__ */ jsx(\n \"style\",\n {\n dangerouslySetInnerHTML: {\n __html: `[data-radix-scroll-area-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-scroll-area-viewport]::-webkit-scrollbar{display:none}`\n },\n nonce\n }\n );\n }, \"ScrollAreaViewportStyle\"),\n (prevProps, nextProps) => prevProps.nonce === nextProps.nonce\n);\nvar SCROLLBAR_NAME = \"ScrollAreaScrollbar\";\nvar ScrollAreaScrollbar = /* @__PURE__ */ React2.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function ScrollAreaScrollbar2(props, forwardedRef) {\n const { forceMount, ...scrollbarProps } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const { onScrollbarXEnabledChange, onScrollbarYEnabledChange } = context;\n const isHorizontal = props.orientation === \"horizontal\";\n React2.useEffect(() => {\n isHorizontal ? onScrollbarXEnabledChange(true) : onScrollbarYEnabledChange(true);\n return () => {\n isHorizontal ? onScrollbarXEnabledChange(false) : onScrollbarYEnabledChange(false);\n };\n }, [isHorizontal, onScrollbarXEnabledChange, onScrollbarYEnabledChange]);\n return context.type === \"hover\" ? /* @__PURE__ */ jsx(ScrollAreaScrollbarHover, { ...scrollbarProps, ref: forwardedRef, forceMount }) : context.type === \"scroll\" ? /* @__PURE__ */ jsx(ScrollAreaScrollbarScroll, { ...scrollbarProps, ref: forwardedRef, forceMount }) : context.type === \"auto\" ? /* @__PURE__ */ jsx(ScrollAreaScrollbarAuto, { ...scrollbarProps, ref: forwardedRef, forceMount }) : context.type === \"always\" ? /* @__PURE__ */ jsx(ScrollAreaScrollbarVisible, { ...scrollbarProps, ref: forwardedRef, \"data-state\": \"visible\" }) : null;\n }, \"ScrollAreaScrollbar\")\n);\nvar ScrollAreaScrollbarHover = /* @__PURE__ */ React2.forwardRef(/* @__PURE__ */ __name(function ScrollAreaScrollbarHover2(props, forwardedRef) {\n const { forceMount, ...scrollbarProps } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const [visible, setVisible] = React2.useState(false);\n React2.useEffect(() => {\n const scrollArea = context.scrollArea;\n let hideTimer = 0;\n if (scrollArea) {\n const handlePointerEnter = /* @__PURE__ */ __name(() => {\n window.clearTimeout(hideTimer);\n setVisible(true);\n }, \"handlePointerEnter\");\n const handlePointerLeave = /* @__PURE__ */ __name(() => {\n hideTimer = window.setTimeout(() => setVisible(false), context.scrollHideDelay);\n }, \"handlePointerLeave\");\n scrollArea.addEventListener(\"pointerenter\", handlePointerEnter);\n scrollArea.addEventListener(\"pointerleave\", handlePointerLeave);\n return () => {\n window.clearTimeout(hideTimer);\n scrollArea.removeEventListener(\"pointerenter\", handlePointerEnter);\n scrollArea.removeEventListener(\"pointerleave\", handlePointerLeave);\n };\n }\n }, [context.scrollArea, context.scrollHideDelay]);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || visible, children: /* @__PURE__ */ jsx(\n ScrollAreaScrollbarAuto,\n {\n \"data-state\": visible ? \"visible\" : \"hidden\",\n ...scrollbarProps,\n ref: forwardedRef\n }\n ) });\n}, \"ScrollAreaScrollbarHover\"));\nvar ScrollAreaScrollbarScroll = /* @__PURE__ */ React2.forwardRef(/* @__PURE__ */ __name(function ScrollAreaScrollbarScroll2(props, forwardedRef) {\n const { forceMount, ...scrollbarProps } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const isHorizontal = props.orientation === \"horizontal\";\n const debounceScrollEnd = useDebounceCallback(() => send(\"SCROLL_END\"), 100);\n const [state, send] = useStateMachine(\"hidden\", {\n hidden: {\n SCROLL: \"scrolling\"\n },\n scrolling: {\n SCROLL_END: \"idle\",\n POINTER_ENTER: \"interacting\"\n },\n interacting: {\n SCROLL: \"interacting\",\n POINTER_LEAVE: \"idle\"\n },\n idle: {\n HIDE: \"hidden\",\n SCROLL: \"scrolling\",\n POINTER_ENTER: \"interacting\"\n }\n });\n React2.useEffect(() => {\n if (state === \"idle\") {\n const hideTimer = window.setTimeout(() => send(\"HIDE\"), context.scrollHideDelay);\n return () => window.clearTimeout(hideTimer);\n }\n }, [state, context.scrollHideDelay, send]);\n React2.useEffect(() => {\n const viewport = context.viewport;\n const scrollDirection = isHorizontal ? \"scrollLeft\" : \"scrollTop\";\n if (viewport) {\n let prevScrollPos = viewport[scrollDirection];\n const handleScroll = /* @__PURE__ */ __name(() => {\n const scrollPos = viewport[scrollDirection];\n const hasScrollInDirectionChanged = prevScrollPos !== scrollPos;\n if (hasScrollInDirectionChanged) {\n send(\"SCROLL\");\n debounceScrollEnd();\n }\n prevScrollPos = scrollPos;\n }, \"handleScroll\");\n viewport.addEventListener(\"scroll\", handleScroll);\n return () => viewport.removeEventListener(\"scroll\", handleScroll);\n }\n }, [context.viewport, isHorizontal, send, debounceScrollEnd]);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || state !== \"hidden\", children: /* @__PURE__ */ jsx(\n ScrollAreaScrollbarVisible,\n {\n \"data-state\": state === \"hidden\" ? \"hidden\" : \"visible\",\n ...scrollbarProps,\n ref: forwardedRef,\n onPointerEnter: composeEventHandlers(props.onPointerEnter, () => send(\"POINTER_ENTER\")),\n onPointerLeave: composeEventHandlers(props.onPointerLeave, () => send(\"POINTER_LEAVE\"))\n }\n ) });\n}, \"ScrollAreaScrollbarScroll\"));\nvar ScrollAreaScrollbarAuto = /* @__PURE__ */ React2.forwardRef(/* @__PURE__ */ __name(function ScrollAreaScrollbarAuto2(props, forwardedRef) {\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const { forceMount, ...scrollbarProps } = props;\n const [visible, setVisible] = React2.useState(false);\n const isHorizontal = props.orientation === \"horizontal\";\n const handleResize = useDebounceCallback(() => {\n if (context.viewport) {\n const isOverflowX = context.viewport.offsetWidth < context.viewport.scrollWidth;\n const isOverflowY = context.viewport.offsetHeight < context.viewport.scrollHeight;\n setVisible(isHorizontal ? isOverflowX : isOverflowY);\n }\n }, 10);\n useResizeObserver(context.viewport, handleResize);\n useResizeObserver(context.content, handleResize);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || visible, children: /* @__PURE__ */ jsx(\n ScrollAreaScrollbarVisible,\n {\n \"data-state\": visible ? \"visible\" : \"hidden\",\n ...scrollbarProps,\n ref: forwardedRef\n }\n ) });\n}, \"ScrollAreaScrollbarAuto\"));\nvar ScrollAreaScrollbarVisible = /* @__PURE__ */ React2.forwardRef(/* @__PURE__ */ __name(function ScrollAreaScrollbarVisible2(props, forwardedRef) {\n const { orientation = \"vertical\", ...scrollbarProps } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const thumbRef = React2.useRef(null);\n const pointerOffsetRef = React2.useRef(0);\n const [sizes, setSizes] = React2.useState({\n content: 0,\n viewport: 0,\n scrollbar: { size: 0, paddingStart: 0, paddingEnd: 0 }\n });\n const thumbRatio = getThumbRatio(sizes.viewport, sizes.content);\n const commonProps = {\n ...scrollbarProps,\n sizes,\n onSizesChange: setSizes,\n hasThumb: Boolean(thumbRatio > 0 && thumbRatio < 1),\n onThumbChange: /* @__PURE__ */ __name((thumb) => thumbRef.current = thumb, \"onThumbChange\"),\n onThumbPointerUp: /* @__PURE__ */ __name(() => pointerOffsetRef.current = 0, \"onThumbPointerUp\"),\n onThumbPointerDown: /* @__PURE__ */ __name((pointerPos) => pointerOffsetRef.current = pointerPos, \"onThumbPointerDown\")\n };\n function getScrollPosition(pointerPos, dir) {\n return getScrollPositionFromPointer(pointerPos, pointerOffsetRef.current, sizes, dir);\n }\n __name(getScrollPosition, \"getScrollPosition\");\n if (orientation === \"horizontal\") {\n return /* @__PURE__ */ jsx(\n ScrollAreaScrollbarX,\n {\n ...commonProps,\n ref: forwardedRef,\n onThumbPositionChange: () => {\n if (context.viewport && thumbRef.current) {\n const scrollPos = context.viewport.scrollLeft;\n const offset = getThumbOffsetFromScroll(scrollPos, sizes, context.dir);\n thumbRef.current.style.transform = `translate3d(${offset}px, 0, 0)`;\n }\n },\n onWheelScroll: (scrollPos) => {\n if (context.viewport) context.viewport.scrollLeft = scrollPos;\n },\n onDragScroll: (pointerPos) => {\n if (context.viewport) {\n context.viewport.scrollLeft = getScrollPosition(pointerPos, context.dir);\n }\n }\n }\n );\n }\n if (orientation === \"vertical\") {\n return /* @__PURE__ */ jsx(\n ScrollAreaScrollbarY,\n {\n ...commonProps,\n ref: forwardedRef,\n onThumbPositionChange: () => {\n if (context.viewport && thumbRef.current) {\n const scrollPos = context.viewport.scrollTop;\n const offset = getThumbOffsetFromScroll(scrollPos, sizes);\n thumbRef.current.style.transform = `translate3d(0, ${offset}px, 0)`;\n }\n },\n onWheelScroll: (scrollPos) => {\n if (context.viewport) context.viewport.scrollTop = scrollPos;\n },\n onDragScroll: (pointerPos) => {\n if (context.viewport) context.viewport.scrollTop = getScrollPosition(pointerPos);\n }\n }\n );\n }\n return null;\n}, \"ScrollAreaScrollbarVisible\"));\nvar ScrollAreaScrollbarX = /* @__PURE__ */ React2.forwardRef(/* @__PURE__ */ __name(function ScrollAreaScrollbarX2(props, forwardedRef) {\n const { sizes, onSizesChange, ...scrollbarProps } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const [computedStyle, setComputedStyle] = React2.useState();\n const ref = React2.useRef(null);\n const composeRefs = useComposedRefs(forwardedRef, ref, context.onScrollbarXChange);\n React2.useEffect(() => {\n if (ref.current) setComputedStyle(getComputedStyle(ref.current));\n }, [ref]);\n return /* @__PURE__ */ jsx(\n ScrollAreaScrollbarImpl,\n {\n \"data-orientation\": \"horizontal\",\n ...scrollbarProps,\n ref: composeRefs,\n sizes,\n style: {\n bottom: 0,\n left: context.dir === \"rtl\" ? \"var(--radix-scroll-area-corner-width)\" : 0,\n right: context.dir === \"ltr\" ? \"var(--radix-scroll-area-corner-width)\" : 0,\n \"--radix-scroll-area-thumb-width\": getThumbSize(sizes) + \"px\",\n ...props.style\n },\n onThumbPointerDown: (pointerPos) => props.onThumbPointerDown(pointerPos.x),\n onDragScroll: (pointerPos) => props.onDragScroll(pointerPos.x),\n onWheelScroll: (event, maxScrollPos) => {\n if (context.viewport) {\n const scrollPos = context.viewport.scrollLeft + event.deltaX;\n props.onWheelScroll(scrollPos);\n if (isScrollingWithinScrollbarBounds(scrollPos, maxScrollPos)) {\n event.preventDefault();\n }\n }\n },\n onResize: () => {\n if (ref.current && context.viewport && computedStyle) {\n onSizesChange({\n content: context.viewport.scrollWidth,\n viewport: context.viewport.offsetWidth,\n scrollbar: {\n size: ref.current.clientWidth,\n paddingStart: toInt(computedStyle.paddingLeft),\n paddingEnd: toInt(computedStyle.paddingRight)\n }\n });\n }\n }\n }\n );\n}, \"ScrollAreaScrollbarX\"));\nvar ScrollAreaScrollbarY = /* @__PURE__ */ React2.forwardRef(/* @__PURE__ */ __name(function ScrollAreaScrollbarY2(props, forwardedRef) {\n const { sizes, onSizesChange, ...scrollbarProps } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const [computedStyle, setComputedStyle] = React2.useState();\n const ref = React2.useRef(null);\n const composeRefs = useComposedRefs(forwardedRef, ref, context.onScrollbarYChange);\n React2.useEffect(() => {\n if (ref.current) setComputedStyle(getComputedStyle(ref.current));\n }, [ref]);\n return /* @__PURE__ */ jsx(\n ScrollAreaScrollbarImpl,\n {\n \"data-orientation\": \"vertical\",\n ...scrollbarProps,\n ref: composeRefs,\n sizes,\n style: {\n top: 0,\n right: context.dir === \"ltr\" ? 0 : void 0,\n left: context.dir === \"rtl\" ? 0 : void 0,\n bottom: \"var(--radix-scroll-area-corner-height)\",\n \"--radix-scroll-area-thumb-height\": getThumbSize(sizes) + \"px\",\n ...props.style\n },\n onThumbPointerDown: (pointerPos) => props.onThumbPointerDown(pointerPos.y),\n onDragScroll: (pointerPos) => props.onDragScroll(pointerPos.y),\n onWheelScroll: (event, maxScrollPos) => {\n if (context.viewport) {\n const scrollPos = context.viewport.scrollTop + event.deltaY;\n props.onWheelScroll(scrollPos);\n if (isScrollingWithinScrollbarBounds(scrollPos, maxScrollPos)) {\n event.preventDefault();\n }\n }\n },\n onResize: () => {\n if (ref.current && context.viewport && computedStyle) {\n onSizesChange({\n content: context.viewport.scrollHeight,\n viewport: context.viewport.offsetHeight,\n scrollbar: {\n size: ref.current.clientHeight,\n paddingStart: toInt(computedStyle.paddingTop),\n paddingEnd: toInt(computedStyle.paddingBottom)\n }\n });\n }\n }\n }\n );\n}, \"ScrollAreaScrollbarY\"));\nvar [ScrollbarProvider, useScrollbarContext] = createScrollAreaContext(SCROLLBAR_NAME);\nvar ScrollAreaScrollbarImpl = /* @__PURE__ */ React2.forwardRef(/* @__PURE__ */ __name(function ScrollAreaScrollbarImpl2(props, forwardedRef) {\n const {\n __scopeScrollArea,\n sizes,\n hasThumb,\n onThumbChange,\n onThumbPointerUp,\n onThumbPointerDown,\n onThumbPositionChange,\n onDragScroll,\n onWheelScroll,\n onResize,\n ...scrollbarProps\n } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, __scopeScrollArea);\n const [scrollbar, setScrollbar] = React2.useState(null);\n const composeRefs = useComposedRefs(forwardedRef, setScrollbar);\n const rectRef = React2.useRef(null);\n const prevWebkitUserSelectRef = React2.useRef(\"\");\n const viewport = context.viewport;\n const maxScrollPos = sizes.content - sizes.viewport;\n const handleWheelScroll = useCallbackRef(onWheelScroll);\n const handleThumbPositionChange = useCallbackRef(onThumbPositionChange);\n const handleResize = useDebounceCallback(onResize, 10);\n function handleDragScroll(event) {\n if (rectRef.current) {\n const x = event.clientX - rectRef.current.left;\n const y = event.clientY - rectRef.current.top;\n onDragScroll({ x, y });\n }\n }\n __name(handleDragScroll, \"handleDragScroll\");\n React2.useEffect(() => {\n const handleWheel = /* @__PURE__ */ __name((event) => {\n const element = event.target;\n const isScrollbarWheel = scrollbar?.contains(element);\n if (isScrollbarWheel) handleWheelScroll(event, maxScrollPos);\n }, \"handleWheel\");\n document.addEventListener(\"wheel\", handleWheel, { passive: false });\n return () => document.removeEventListener(\"wheel\", handleWheel, { passive: false });\n }, [viewport, scrollbar, maxScrollPos, handleWheelScroll]);\n React2.useEffect(handleThumbPositionChange, [sizes, handleThumbPositionChange]);\n useResizeObserver(scrollbar, handleResize);\n useResizeObserver(context.content, handleResize);\n return /* @__PURE__ */ jsx(\n ScrollbarProvider,\n {\n scope: __scopeScrollArea,\n scrollbar,\n hasThumb,\n onThumbChange: useCallbackRef(onThumbChange),\n onThumbPointerUp: useCallbackRef(onThumbPointerUp),\n onThumbPositionChange: handleThumbPositionChange,\n onThumbPointerDown: useCallbackRef(onThumbPointerDown),\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n ...scrollbarProps,\n ref: composeRefs,\n style: { position: \"absolute\", ...scrollbarProps.style },\n onPointerDown: composeEventHandlers(props.onPointerDown, (event) => {\n const mainPointer = 0;\n if (event.button === mainPointer) {\n const element = event.target;\n element.setPointerCapture(event.pointerId);\n rectRef.current = scrollbar.getBoundingClientRect();\n prevWebkitUserSelectRef.current = document.body.style.webkitUserSelect;\n document.body.style.webkitUserSelect = \"none\";\n if (context.viewport) context.viewport.style.scrollBehavior = \"auto\";\n handleDragScroll(event);\n }\n }),\n onPointerMove: composeEventHandlers(props.onPointerMove, handleDragScroll),\n onPointerUp: composeEventHandlers(props.onPointerUp, (event) => {\n const element = event.target;\n if (element.hasPointerCapture(event.pointerId)) {\n element.releasePointerCapture(event.pointerId);\n }\n document.body.style.webkitUserSelect = prevWebkitUserSelectRef.current;\n if (context.viewport) context.viewport.style.scrollBehavior = \"\";\n rectRef.current = null;\n })\n }\n )\n }\n );\n}, \"ScrollAreaScrollbarImpl\"));\nvar THUMB_NAME = \"ScrollAreaThumb\";\nvar ScrollAreaThumb = /* @__PURE__ */ React2.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function ScrollAreaThumb2(props, forwardedRef) {\n const { forceMount, ...thumbProps } = props;\n const scrollbarContext = useScrollbarContext(THUMB_NAME, props.__scopeScrollArea);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || scrollbarContext.hasThumb, children: /* @__PURE__ */ jsx(ScrollAreaThumbImpl, { ref: forwardedRef, ...thumbProps }) });\n }, \"ScrollAreaThumb\")\n);\nvar ScrollAreaThumbImpl = /* @__PURE__ */ React2.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function ScrollAreaThumbImpl2(props, forwardedRef) {\n const { __scopeScrollArea, style, ...thumbProps } = props;\n const scrollAreaContext = useScrollAreaContext(THUMB_NAME, __scopeScrollArea);\n const scrollbarContext = useScrollbarContext(THUMB_NAME, __scopeScrollArea);\n const { onThumbPositionChange } = scrollbarContext;\n const composedRef = useComposedRefs(forwardedRef, scrollbarContext.onThumbChange);\n const removeUnlinkedScrollListenerRef = React2.useRef(void 0);\n const debounceScrollEnd = useDebounceCallback(() => {\n if (removeUnlinkedScrollListenerRef.current) {\n removeUnlinkedScrollListenerRef.current();\n removeUnlinkedScrollListenerRef.current = void 0;\n }\n }, 100);\n React2.useEffect(() => {\n const viewport = scrollAreaContext.viewport;\n if (viewport) {\n const handleScroll = /* @__PURE__ */ __name(() => {\n debounceScrollEnd();\n if (!removeUnlinkedScrollListenerRef.current) {\n const listener = addUnlinkedScrollListener(viewport, onThumbPositionChange);\n removeUnlinkedScrollListenerRef.current = listener;\n onThumbPositionChange();\n }\n }, \"handleScroll\");\n onThumbPositionChange();\n viewport.addEventListener(\"scroll\", handleScroll);\n return () => viewport.removeEventListener(\"scroll\", handleScroll);\n }\n }, [scrollAreaContext.viewport, debounceScrollEnd, onThumbPositionChange]);\n return /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-state\": scrollbarContext.hasThumb ? \"visible\" : \"hidden\",\n ...thumbProps,\n ref: composedRef,\n style: {\n width: \"var(--radix-scroll-area-thumb-width)\",\n height: \"var(--radix-scroll-area-thumb-height)\",\n ...style\n },\n onPointerDownCapture: composeEventHandlers(props.onPointerDownCapture, (event) => {\n const thumb = event.target;\n const thumbRect = thumb.getBoundingClientRect();\n const x = event.clientX - thumbRect.left;\n const y = event.clientY - thumbRect.top;\n scrollbarContext.onThumbPointerDown({ x, y });\n }),\n onPointerUp: composeEventHandlers(props.onPointerUp, scrollbarContext.onThumbPointerUp)\n }\n );\n }, \"ScrollAreaThumbImpl\")\n);\nvar CORNER_NAME = \"ScrollAreaCorner\";\nvar ScrollAreaCorner = /* @__PURE__ */ React2.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function ScrollAreaCorner2(props, forwardedRef) {\n const context = useScrollAreaContext(CORNER_NAME, props.__scopeScrollArea);\n const hasBothScrollbarsVisible = Boolean(context.scrollbarX && context.scrollbarY);\n const hasCorner = context.type !== \"scroll\" && hasBothScrollbarsVisible;\n return hasCorner ? /* @__PURE__ */ jsx(ScrollAreaCornerImpl, { ...props, ref: forwardedRef }) : null;\n }, \"ScrollAreaCorner\")\n);\nvar ScrollAreaCornerImpl = /* @__PURE__ */ React2.forwardRef(/* @__PURE__ */ __name(function ScrollAreaCornerImpl2(props, forwardedRef) {\n const { __scopeScrollArea, ...cornerProps } = props;\n const context = useScrollAreaContext(CORNER_NAME, __scopeScrollArea);\n const [width, setWidth] = React2.useState(0);\n const [height, setHeight] = React2.useState(0);\n const hasSize = Boolean(width && height);\n const { onCornerWidthChange, onCornerHeightChange } = context;\n useResizeObserver(context.scrollbarX, () => {\n const height2 = context.scrollbarX?.offsetHeight || 0;\n context.onCornerHeightChange(height2);\n setHeight(height2);\n });\n useResizeObserver(context.scrollbarY, () => {\n const width2 = context.scrollbarY?.offsetWidth || 0;\n context.onCornerWidthChange(width2);\n setWidth(width2);\n });\n React2.useEffect(() => {\n return () => {\n onCornerWidthChange(0);\n onCornerHeightChange(0);\n };\n }, [onCornerWidthChange, onCornerHeightChange]);\n return hasSize ? /* @__PURE__ */ jsx(\n Primitive.div,\n {\n ...cornerProps,\n ref: forwardedRef,\n style: {\n width,\n height,\n position: \"absolute\",\n right: context.dir === \"ltr\" ? 0 : void 0,\n left: context.dir === \"rtl\" ? 0 : void 0,\n bottom: 0,\n ...props.style\n }\n }\n ) : null;\n}, \"ScrollAreaCornerImpl\"));\nfunction toInt(value) {\n return value ? parseInt(value, 10) : 0;\n}\n__name(toInt, \"toInt\");\nfunction getThumbRatio(viewportSize, contentSize) {\n const ratio = viewportSize / contentSize;\n return isNaN(ratio) ? 0 : ratio;\n}\n__name(getThumbRatio, \"getThumbRatio\");\nfunction getThumbSize(sizes) {\n const ratio = getThumbRatio(sizes.viewport, sizes.content);\n const scrollbarPadding = sizes.scrollbar.paddingStart + sizes.scrollbar.paddingEnd;\n const thumbSize = (sizes.scrollbar.size - scrollbarPadding) * ratio;\n return Math.max(thumbSize, 18);\n}\n__name(getThumbSize, \"getThumbSize\");\nfunction getScrollPositionFromPointer(pointerPos, pointerOffset, sizes, dir = \"ltr\") {\n const thumbSizePx = getThumbSize(sizes);\n const thumbCenter = thumbSizePx / 2;\n const offset = pointerOffset || thumbCenter;\n const thumbOffsetFromEnd = thumbSizePx - offset;\n const minPointerPos = sizes.scrollbar.paddingStart + offset;\n const maxPointerPos = sizes.scrollbar.size - sizes.scrollbar.paddingEnd - thumbOffsetFromEnd;\n const maxScrollPos = sizes.content - sizes.viewport;\n const scrollRange = dir === \"ltr\" ? [0, maxScrollPos] : [maxScrollPos * -1, 0];\n const interpolate = linearScale([minPointerPos, maxPointerPos], scrollRange);\n return interpolate(pointerPos);\n}\n__name(getScrollPositionFromPointer, \"getScrollPositionFromPointer\");\nfunction getThumbOffsetFromScroll(scrollPos, sizes, dir = \"ltr\") {\n const thumbSizePx = getThumbSize(sizes);\n const scrollbarPadding = sizes.scrollbar.paddingStart + sizes.scrollbar.paddingEnd;\n const scrollbar = sizes.scrollbar.size - scrollbarPadding;\n const maxScrollPos = sizes.content - sizes.viewport;\n const maxThumbPos = scrollbar - thumbSizePx;\n const scrollClampRange = dir === \"ltr\" ? [0, maxScrollPos] : [maxScrollPos * -1, 0];\n const scrollWithoutMomentum = clamp(scrollPos, scrollClampRange);\n const interpolate = linearScale([0, maxScrollPos], [0, maxThumbPos]);\n return interpolate(scrollWithoutMomentum);\n}\n__name(getThumbOffsetFromScroll, \"getThumbOffsetFromScroll\");\nfunction linearScale(input, output) {\n return (value) => {\n if (input[0] === input[1] || output[0] === output[1]) return output[0];\n const ratio = (output[1] - output[0]) / (input[1] - input[0]);\n return output[0] + ratio * (value - input[0]);\n };\n}\n__name(linearScale, \"linearScale\");\nfunction isScrollingWithinScrollbarBounds(scrollPos, maxScrollPos) {\n return scrollPos > 0 && scrollPos < maxScrollPos;\n}\n__name(isScrollingWithinScrollbarBounds, \"isScrollingWithinScrollbarBounds\");\nvar addUnlinkedScrollListener = /* @__PURE__ */ __name((node, handler = () => {\n}) => {\n let prevPosition = { left: node.scrollLeft, top: node.scrollTop };\n let rAF = 0;\n (/* @__PURE__ */ __name((function loop() {\n const position = { left: node.scrollLeft, top: node.scrollTop };\n const isHorizontalScroll = prevPosition.left !== position.left;\n const isVerticalScroll = prevPosition.top !== position.top;\n if (isHorizontalScroll || isVerticalScroll) handler();\n prevPosition = position;\n rAF = window.requestAnimationFrame(loop);\n }), \"loop\"))();\n return () => window.cancelAnimationFrame(rAF);\n}, \"addUnlinkedScrollListener\");\nfunction useDebounceCallback(callback, delay) {\n const handleCallback = useCallbackRef(callback);\n const debounceTimerRef = React2.useRef(0);\n React2.useEffect(() => () => window.clearTimeout(debounceTimerRef.current), []);\n return React2.useCallback(() => {\n window.clearTimeout(debounceTimerRef.current);\n debounceTimerRef.current = window.setTimeout(handleCallback, delay);\n }, [handleCallback, delay]);\n}\n__name(useDebounceCallback, \"useDebounceCallback\");\nfunction useResizeObserver(element, onResize) {\n const handleResize = useCallbackRef(onResize);\n useLayoutEffect(() => {\n let rAF = 0;\n if (element) {\n const resizeObserver = new ResizeObserver(() => {\n cancelAnimationFrame(rAF);\n rAF = window.requestAnimationFrame(handleResize);\n });\n resizeObserver.observe(element);\n return () => {\n window.cancelAnimationFrame(rAF);\n resizeObserver.unobserve(element);\n };\n }\n }, [element, handleResize]);\n}\n__name(useResizeObserver, \"useResizeObserver\");\nvar Root = ScrollArea;\nvar Viewport = ScrollAreaViewport;\nvar Scrollbar = ScrollAreaScrollbar;\nvar Thumb = ScrollAreaThumb;\nvar Corner = ScrollAreaCorner;\nexport {\n Corner,\n Root,\n ScrollArea,\n ScrollAreaCorner,\n ScrollAreaScrollbar,\n ScrollAreaThumb,\n ScrollAreaViewport,\n Scrollbar,\n Thumb,\n Viewport,\n createScrollAreaScope\n};\n//# sourceMappingURL=index.mjs.map\n","import {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type UIEvent,\n} from \"react\";\nimport * as ScrollAreaPrimitive from \"@radix-ui/react-scroll-area\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst ScrollArea = forwardRef<\n ElementRef<typeof ScrollAreaPrimitive.Root>,\n ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root> & {\n onViewportScroll?: (event: UIEvent<HTMLDivElement>) => void;\n }\n>(({ className, children, onViewportScroll, ...props }, ref) => (\n <ScrollAreaPrimitive.Root\n ref={ref}\n className={cn(\"eloq:relative eloq:overflow-hidden\", className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport\n className=\"eloq:h-full eloq:w-full eloq:rounded-[inherit]\"\n onScroll={onViewportScroll}\n >\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n));\nScrollArea.displayName = ScrollAreaPrimitive.Root.displayName;\n\nconst ScrollBar = forwardRef<\n ElementRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>,\n ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>\n>(({ className, orientation = \"vertical\", ...props }, ref) => (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n ref={ref}\n orientation={orientation}\n className={cn(\n \"eloq:flex eloq:touch-none eloq:select-none eloq:transition-colors\",\n orientation === \"vertical\" &&\n \"eloq:h-full eloq:w-2.5 eloq:border-l eloq:border-l-transparent eloq:p-[1px]\",\n orientation === \"horizontal\" &&\n \"eloq:h-2.5 eloq:flex-col eloq:border-t eloq:border-t-transparent eloq:p-[1px]\",\n className,\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb className=\"eloq:relative eloq:flex-1 eloq:rounded-full eloq:bg-border\" />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n));\nScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName;\n\nexport { ScrollArea, ScrollBar };\n","/**\n * WCAG-based text color selection: given a background color, returns black or\n * white, whichever has the higher contrast ratio (WCAG 2.x relative\n * luminance, https://www.w3.org/TR/WCAG21/#dfn-relative-luminance).\n */\n\nconst HEX_PATTERN = /^#?([0-9a-f]{3}|[0-9a-f]{6})$/i;\nconst RGB_PATTERN = /^rgba?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})/i;\n\nfunction parseColorChannels(\n color: string,\n): [red: number, green: number, blue: number] | null {\n const trimmed = color.trim();\n\n const hexMatch = HEX_PATTERN.exec(trimmed);\n if (hexMatch) {\n let hex = hexMatch[1];\n if (hex.length === 3) {\n hex = hex\n .split(\"\")\n .map((character) => character + character)\n .join(\"\");\n }\n return [\n Number.parseInt(hex.slice(0, 2), 16),\n Number.parseInt(hex.slice(2, 4), 16),\n Number.parseInt(hex.slice(4, 6), 16),\n ];\n }\n\n const rgbMatch = RGB_PATTERN.exec(trimmed);\n if (rgbMatch) {\n const channels = [rgbMatch[1], rgbMatch[2], rgbMatch[3]].map(Number);\n if (channels.every((channel) => channel <= 255)) {\n return channels as [number, number, number];\n }\n }\n\n return null;\n}\n\nfunction getRelativeLuminance([red, green, blue]: [\n number,\n number,\n number,\n]): number {\n const toLinear = (channel: number) => {\n const normalized = channel / 255;\n return normalized <= 0.03928\n ? normalized / 12.92\n : ((normalized + 0.055) / 1.055) ** 2.4;\n };\n return (\n 0.2126 * toLinear(red) + 0.7152 * toLinear(green) + 0.0722 * toLinear(blue)\n );\n}\n\n/**\n * WCAG 2.x contrast slightly overrates dark text on saturated mid-tone\n * backgrounds (e.g. #e3008c scores black 4.65 vs white 4.52, yet white is\n * perceptually far more readable — APCA agrees). The standard practical\n * correction is to bias toward white: black is only chosen when its contrast\n * beats white's by this factor.\n */\nconst BLACK_PREFERENCE_THRESHOLD = 1.2;\n\n/**\n * Returns \"#000000\" or \"#ffffff\", whichever contrasts more with the given\n * background color (WCAG 2.x relative luminance, biased toward white for\n * saturated mid-tones — see BLACK_PREFERENCE_THRESHOLD). Supports #rgb,\n * #rrggbb and rgb()/rgba() strings; falls back to black (the safer choice on\n * light UI defaults) when unparseable.\n */\nexport function getContrastingTextColor(\n backgroundColor: string | undefined | null,\n): \"#000000\" | \"#ffffff\" {\n if (!backgroundColor) return \"#000000\";\n\n const channels = parseColorChannels(backgroundColor);\n if (!channels) return \"#000000\";\n\n const luminance = getRelativeLuminance(channels);\n const contrastWithWhite = 1.05 / (luminance + 0.05);\n const contrastWithBlack = (luminance + 0.05) / 0.05;\n\n return contrastWithBlack >= contrastWithWhite * BLACK_PREFERENCE_THRESHOLD\n ? \"#000000\"\n : \"#ffffff\";\n}\n","var __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/id.tsx\nimport * as React from \"react\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nvar useReactId = React[\" useId \".trim().toString()] || (() => void 0);\nvar count = 0;\nfunction useId(deterministicId) {\n const [id, setId] = React.useState(useReactId());\n useLayoutEffect(() => {\n if (!deterministicId) setId((reactId) => reactId ?? String(count++));\n }, [deterministicId]);\n return deterministicId || (id ? `radix-${id}` : \"\");\n}\n__name(useId, \"useId\");\nexport {\n useId\n};\n//# sourceMappingURL=index.mjs.map\n","var __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/use-effect-event.tsx\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport * as React from \"react\";\nvar useReactEffectEvent = React[\" useEffectEvent \".trim().toString()];\nvar useReactInsertionEffect = React[\" useInsertionEffect \".trim().toString()];\nfunction useEffectEvent(callback) {\n if (typeof useReactEffectEvent === \"function\") {\n return useReactEffectEvent(callback);\n }\n const ref = React.useRef(() => {\n throw new Error(\"Cannot call an event handler while rendering.\");\n });\n if (typeof useReactInsertionEffect === \"function\") {\n useReactInsertionEffect(() => {\n ref.current = callback;\n });\n } else {\n useLayoutEffect(() => {\n ref.current = callback;\n });\n }\n return React.useMemo(() => ((...args) => ref.current?.(...args)), []);\n}\n__name(useEffectEvent, \"useEffectEvent\");\nexport {\n useEffectEvent\n};\n//# sourceMappingURL=index.mjs.map\n","var __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/use-controllable-state.tsx\nimport * as React from \"react\";\nimport { IS_DEVELOPMENT } from \"@radix-ui/primitive/is-development\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nvar useInsertionEffect = React[\" useInsertionEffect \".trim().toString()] || useLayoutEffect;\nfunction useControllableState({\n prop,\n defaultProp,\n onChange = /* @__PURE__ */ __name(() => {\n }, \"onChange\"),\n caller\n}) {\n const [uncontrolledProp, setUncontrolledProp, onChangeRef] = useUncontrolledState({\n defaultProp,\n onChange\n });\n const isControlled = prop !== void 0;\n const value = isControlled ? prop : uncontrolledProp;\n if (IS_DEVELOPMENT) {\n const isControlledRef = React.useRef(prop !== void 0);\n React.useEffect(() => {\n const wasControlled = isControlledRef.current;\n if (wasControlled !== isControlled) {\n const from = wasControlled ? \"controlled\" : \"uncontrolled\";\n const to = isControlled ? \"controlled\" : \"uncontrolled\";\n console.warn(\n `${caller} is changing from ${from} to ${to}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`\n );\n }\n isControlledRef.current = isControlled;\n }, [isControlled, caller]);\n }\n const setValue = React.useCallback(\n (nextValue) => {\n if (isControlled) {\n const value2 = isFunction(nextValue) ? nextValue(prop) : nextValue;\n if (value2 !== prop) {\n onChangeRef.current?.(value2);\n }\n } else {\n setUncontrolledProp(nextValue);\n }\n },\n [isControlled, prop, setUncontrolledProp, onChangeRef]\n );\n return [value, setValue];\n}\n__name(useControllableState, \"useControllableState\");\nfunction useUncontrolledState({\n defaultProp,\n onChange\n}) {\n const [value, setValue] = React.useState(defaultProp);\n const prevValueRef = React.useRef(value);\n const onChangeRef = React.useRef(onChange);\n useInsertionEffect(() => {\n onChangeRef.current = onChange;\n }, [onChange]);\n React.useEffect(() => {\n if (prevValueRef.current !== value) {\n onChangeRef.current?.(value);\n prevValueRef.current = value;\n }\n }, [value, prevValueRef]);\n return [value, setValue, onChangeRef];\n}\n__name(useUncontrolledState, \"useUncontrolledState\");\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\n__name(isFunction, \"isFunction\");\n\n// src/use-controllable-state-reducer.tsx\nimport * as React2 from \"react\";\nimport { IS_DEVELOPMENT as IS_DEVELOPMENT2 } from \"@radix-ui/primitive/is-development\";\nimport { useEffectEvent } from \"@radix-ui/react-use-effect-event\";\nvar SYNC_STATE = Symbol(\"RADIX:SYNC_STATE\");\nfunction useControllableStateReducer(reducer, userArgs, initialArg, init) {\n const { prop: controlledState, defaultProp, onChange: onChangeProp, caller } = userArgs;\n const isControlled = controlledState !== void 0;\n const onChange = useEffectEvent(onChangeProp);\n if (IS_DEVELOPMENT2) {\n const isControlledRef = React2.useRef(controlledState !== void 0);\n React2.useEffect(() => {\n const wasControlled = isControlledRef.current;\n if (wasControlled !== isControlled) {\n const from = wasControlled ? \"controlled\" : \"uncontrolled\";\n const to = isControlled ? \"controlled\" : \"uncontrolled\";\n console.warn(\n `${caller} is changing from ${from} to ${to}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`\n );\n }\n isControlledRef.current = isControlled;\n }, [isControlled, caller]);\n }\n const args = [{ ...initialArg, state: defaultProp }];\n if (init) {\n args.push(init);\n }\n const [internalState, dispatch] = React2.useReducer(\n (state2, action) => {\n if (action.type === SYNC_STATE) {\n return { ...state2, state: action.state };\n }\n const next = reducer(state2, action);\n if (isControlled && !Object.is(next.state, state2.state)) {\n onChange(next.state);\n }\n return next;\n },\n ...args\n );\n const uncontrolledState = internalState.state;\n const prevValueRef = React2.useRef(uncontrolledState);\n React2.useEffect(() => {\n if (prevValueRef.current !== uncontrolledState) {\n prevValueRef.current = uncontrolledState;\n if (!isControlled) {\n onChange(uncontrolledState);\n }\n }\n }, [uncontrolledState, prevValueRef, isControlled]);\n const state = React2.useMemo(() => {\n const isControlled2 = controlledState !== void 0;\n if (isControlled2) {\n return { ...internalState, state: controlledState };\n }\n return internalState;\n }, [internalState, controlledState]);\n React2.useEffect(() => {\n if (isControlled && !Object.is(controlledState, internalState.state)) {\n dispatch({ type: SYNC_STATE, state: controlledState });\n }\n }, [controlledState, internalState.state, isControlled]);\n return [state, dispatch];\n}\n__name(useControllableStateReducer, \"useControllableStateReducer\");\nexport {\n useControllableState,\n useControllableStateReducer\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\nvar __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/dismissable-layer.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { Primitive, dispatchDiscreteCustomEvent } from \"@radix-ui/react-primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { jsx } from \"react/jsx-runtime\";\nvar CONTEXT_UPDATE = \"dismissableLayer.update\";\nvar POINTER_DOWN_OUTSIDE = \"dismissableLayer.pointerDownOutside\";\nvar FOCUS_OUTSIDE = \"dismissableLayer.focusOutside\";\nvar originalBodyPointerEvents;\nvar DismissableLayerContext = React.createContext({\n layers: /* @__PURE__ */ new Set(),\n layersWithOutsidePointerEventsDisabled: /* @__PURE__ */ new Set(),\n branches: /* @__PURE__ */ new Set(),\n // Outside elements that belong to a layer's own dismiss affordance (eg, a\n // dialog overlay). Pressing them should dismiss the layer regardless of\n // whether or not they stop propagation.\n //\n // See https://github.com/radix-ui/primitives/issues/3346\n dismissableSurfaces: /* @__PURE__ */ new Set()\n});\nvar DismissableLayer = /* @__PURE__ */ React.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function DismissableLayer2(props, forwardedRef) {\n const {\n disableOutsidePointerEvents = false,\n deferPointerDownOutside = false,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onInteractOutside,\n onDismiss,\n ...layerProps\n } = props;\n const context = React.useContext(DismissableLayerContext);\n const [node, setNode] = React.useState(null);\n const ownerDocument = node?.ownerDocument ?? globalThis?.document;\n const [, force] = React.useState({});\n const composedRefs = useComposedRefs(forwardedRef, setNode);\n const layers = Array.from(context.layers);\n const [highestLayerWithOutsidePointerEventsDisabled] = [\n ...context.layersWithOutsidePointerEventsDisabled\n ].slice(-1);\n const highestLayerWithOutsidePointerEventsDisabledIndex = highestLayerWithOutsidePointerEventsDisabled ? layers.indexOf(highestLayerWithOutsidePointerEventsDisabled) : -1;\n const index = node ? layers.indexOf(node) : -1;\n const isBodyPointerEventsDisabled = context.layersWithOutsidePointerEventsDisabled.size > 0;\n const isPointerEventsEnabled = index >= highestLayerWithOutsidePointerEventsDisabledIndex;\n const isDeferredPointerDownOutsideRef = React.useRef(false);\n const pointerDownOutside = usePointerDownOutside(\n (event) => {\n onPointerDownOutside?.(event);\n onInteractOutside?.(event);\n if (!event.defaultPrevented) onDismiss?.();\n },\n {\n ownerDocument,\n deferPointerDownOutside,\n isDeferredPointerDownOutsideRef,\n dismissableSurfaces: context.dismissableSurfaces,\n shouldHandlePointerDownOutside: React.useCallback(\n (target) => {\n if (!(target instanceof Node)) {\n return false;\n }\n const isPointerDownOnBranch = [...context.branches].some(\n (branch) => branch.contains(target)\n );\n return isPointerEventsEnabled && !isPointerDownOnBranch;\n },\n [context.branches, isPointerEventsEnabled]\n )\n }\n );\n const focusOutside = useFocusOutside((event) => {\n if (deferPointerDownOutside && isDeferredPointerDownOutsideRef.current) {\n return;\n }\n const target = event.target;\n const isFocusInBranch = [...context.branches].some((branch) => branch.contains(target));\n if (isFocusInBranch) return;\n onFocusOutside?.(event);\n onInteractOutside?.(event);\n if (!event.defaultPrevented) onDismiss?.();\n }, ownerDocument);\n const isHighestLayer = node ? index === layers.length - 1 : false;\n const handleKeyDown = useCallbackRef((event) => {\n if (event.key !== \"Escape\") {\n return;\n }\n onEscapeKeyDown?.(event);\n if (!event.defaultPrevented && onDismiss) {\n event.preventDefault();\n onDismiss();\n }\n });\n React.useEffect(() => {\n if (!isHighestLayer) {\n return;\n }\n ownerDocument.addEventListener(\"keydown\", handleKeyDown, { capture: true });\n return () => ownerDocument.removeEventListener(\"keydown\", handleKeyDown, { capture: true });\n }, [ownerDocument, isHighestLayer, handleKeyDown]);\n React.useEffect(() => {\n if (!node) return;\n if (disableOutsidePointerEvents) {\n if (context.layersWithOutsidePointerEventsDisabled.size === 0) {\n originalBodyPointerEvents = ownerDocument.body.style.pointerEvents;\n ownerDocument.body.style.pointerEvents = \"none\";\n }\n context.layersWithOutsidePointerEventsDisabled.add(node);\n }\n context.layers.add(node);\n dispatchUpdate();\n return () => {\n if (disableOutsidePointerEvents) {\n context.layersWithOutsidePointerEventsDisabled.delete(node);\n if (context.layersWithOutsidePointerEventsDisabled.size === 0) {\n ownerDocument.body.style.pointerEvents = originalBodyPointerEvents;\n }\n }\n };\n }, [node, ownerDocument, disableOutsidePointerEvents, context]);\n React.useEffect(() => {\n return () => {\n if (!node) return;\n context.layers.delete(node);\n context.layersWithOutsidePointerEventsDisabled.delete(node);\n dispatchUpdate();\n };\n }, [node, context]);\n React.useEffect(() => {\n const handleUpdate = /* @__PURE__ */ __name(() => force({}), \"handleUpdate\");\n document.addEventListener(CONTEXT_UPDATE, handleUpdate);\n return () => document.removeEventListener(CONTEXT_UPDATE, handleUpdate);\n }, []);\n return /* @__PURE__ */ jsx(\n Primitive.div,\n {\n ...layerProps,\n ref: composedRefs,\n style: {\n pointerEvents: isBodyPointerEventsDisabled ? isPointerEventsEnabled ? \"auto\" : \"none\" : void 0,\n ...props.style\n },\n onFocusCapture: composeEventHandlers(props.onFocusCapture, focusOutside.onFocusCapture),\n onBlurCapture: composeEventHandlers(props.onBlurCapture, focusOutside.onBlurCapture),\n onPointerDownCapture: composeEventHandlers(\n props.onPointerDownCapture,\n pointerDownOutside.onPointerDownCapture\n )\n }\n );\n }, \"DismissableLayer\")\n);\nvar DismissableLayerBranch = /* @__PURE__ */ React.forwardRef(/* @__PURE__ */ __name(function DismissableLayerBranch2(props, forwardedRef) {\n const context = React.useContext(DismissableLayerContext);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n React.useEffect(() => {\n const node = ref.current;\n if (node) {\n context.branches.add(node);\n return () => {\n context.branches.delete(node);\n };\n }\n }, [context.branches]);\n return /* @__PURE__ */ jsx(Primitive.div, { ...props, ref: composedRefs });\n}, \"DismissableLayerBranch\"));\nfunction useDismissableLayerSurface() {\n const context = React.useContext(DismissableLayerContext);\n const [node, setNode] = React.useState(null);\n React.useEffect(() => {\n if (!node) {\n return;\n }\n context.dismissableSurfaces.add(node);\n return () => {\n context.dismissableSurfaces.delete(node);\n };\n }, [node, context.dismissableSurfaces]);\n return setNode;\n}\n__name(useDismissableLayerSurface, \"useDismissableLayerSurface\");\nvar IS_TRUE = /* @__PURE__ */ __name(() => true, \"IS_TRUE\");\nfunction usePointerDownOutside(onPointerDownOutside, args) {\n const {\n ownerDocument = globalThis?.document,\n deferPointerDownOutside = false,\n isDeferredPointerDownOutsideRef,\n dismissableSurfaces,\n shouldHandlePointerDownOutside = IS_TRUE\n } = args;\n const handlePointerDownOutside = useCallbackRef(onPointerDownOutside);\n const isPointerInsideReactTreeRef = React.useRef(false);\n const isPointerDownOutsideRef = React.useRef(false);\n const interceptedOutsideInteractionEventsRef = React.useRef(/* @__PURE__ */ new Map());\n const handleClickRef = React.useRef(() => {\n });\n React.useEffect(() => {\n function resetOutsideInteraction() {\n isPointerDownOutsideRef.current = false;\n isDeferredPointerDownOutsideRef.current = false;\n interceptedOutsideInteractionEventsRef.current.clear();\n }\n __name(resetOutsideInteraction, \"resetOutsideInteraction\");\n function isOutsideInteractionIntercepted() {\n return Array.from(interceptedOutsideInteractionEventsRef.current.values()).some(Boolean);\n }\n __name(isOutsideInteractionIntercepted, \"isOutsideInteractionIntercepted\");\n function handleInteractionCapture(event) {\n if (!isPointerDownOutsideRef.current) {\n return;\n }\n const target = event.target;\n const isDismissableSurface = target instanceof Node && [...dismissableSurfaces].some((surface) => surface.contains(target));\n if (!isDismissableSurface) {\n interceptedOutsideInteractionEventsRef.current.set(event.type, true);\n }\n if (event.type === \"click\") {\n window.setTimeout(() => {\n if (isPointerDownOutsideRef.current) {\n handleClickRef.current();\n }\n }, 0);\n }\n }\n __name(handleInteractionCapture, \"handleInteractionCapture\");\n function handleInteractionBubble(event) {\n if (isPointerDownOutsideRef.current) {\n interceptedOutsideInteractionEventsRef.current.set(event.type, false);\n }\n }\n __name(handleInteractionBubble, \"handleInteractionBubble\");\n const handlePointerDown = /* @__PURE__ */ __name((event) => {\n if (event.target && !isPointerInsideReactTreeRef.current) {\n let handleAndDispatchPointerDownOutsideEvent2 = function() {\n ownerDocument.removeEventListener(\"click\", handleClickRef.current);\n const wasOutsideInteractionIntercepted = isOutsideInteractionIntercepted();\n resetOutsideInteraction();\n if (!wasOutsideInteractionIntercepted) {\n handleAndDispatchCustomEvent(\n POINTER_DOWN_OUTSIDE,\n handlePointerDownOutside,\n eventDetail,\n { discrete: true }\n );\n }\n };\n var handleAndDispatchPointerDownOutsideEvent = handleAndDispatchPointerDownOutsideEvent2;\n __name(handleAndDispatchPointerDownOutsideEvent2, \"handleAndDispatchPointerDownOutsideEvent\");\n if (!shouldHandlePointerDownOutside(event.target)) {\n ownerDocument.removeEventListener(\"click\", handleClickRef.current);\n resetOutsideInteraction();\n isPointerInsideReactTreeRef.current = false;\n return;\n }\n const eventDetail = { originalEvent: event };\n isPointerDownOutsideRef.current = true;\n isDeferredPointerDownOutsideRef.current = deferPointerDownOutside && event.button === 0;\n interceptedOutsideInteractionEventsRef.current.clear();\n if (!deferPointerDownOutside || event.button !== 0) {\n handleAndDispatchPointerDownOutsideEvent2();\n } else {\n ownerDocument.removeEventListener(\"click\", handleClickRef.current);\n handleClickRef.current = handleAndDispatchPointerDownOutsideEvent2;\n ownerDocument.addEventListener(\"click\", handleClickRef.current, { once: true });\n }\n } else {\n ownerDocument.removeEventListener(\"click\", handleClickRef.current);\n resetOutsideInteraction();\n }\n isPointerInsideReactTreeRef.current = false;\n }, \"handlePointerDown\");\n const outsideInteractionEvents = [\n \"pointerup\",\n \"mousedown\",\n \"mouseup\",\n \"touchstart\",\n \"touchend\",\n \"click\"\n ];\n for (const eventName of outsideInteractionEvents) {\n ownerDocument.addEventListener(eventName, handleInteractionCapture, true);\n ownerDocument.addEventListener(eventName, handleInteractionBubble);\n }\n const timerId = window.setTimeout(() => {\n ownerDocument.addEventListener(\"pointerdown\", handlePointerDown);\n }, 0);\n return () => {\n window.clearTimeout(timerId);\n ownerDocument.removeEventListener(\"pointerdown\", handlePointerDown);\n ownerDocument.removeEventListener(\"click\", handleClickRef.current);\n for (const eventName of outsideInteractionEvents) {\n ownerDocument.removeEventListener(eventName, handleInteractionCapture, true);\n ownerDocument.removeEventListener(eventName, handleInteractionBubble);\n }\n };\n }, [\n ownerDocument,\n handlePointerDownOutside,\n deferPointerDownOutside,\n isDeferredPointerDownOutsideRef,\n dismissableSurfaces,\n shouldHandlePointerDownOutside\n ]);\n return {\n // ensures we check React component tree (not just DOM tree)\n onPointerDownCapture: /* @__PURE__ */ __name(() => isPointerInsideReactTreeRef.current = true, \"onPointerDownCapture\")\n };\n}\n__name(usePointerDownOutside, \"usePointerDownOutside\");\nfunction useFocusOutside(onFocusOutside, ownerDocument = globalThis?.document) {\n const handleFocusOutside = useCallbackRef(onFocusOutside);\n const isFocusInsideReactTreeRef = React.useRef(false);\n React.useEffect(() => {\n const handleFocus = /* @__PURE__ */ __name((event) => {\n if (event.target && !isFocusInsideReactTreeRef.current) {\n const eventDetail = { originalEvent: event };\n handleAndDispatchCustomEvent(FOCUS_OUTSIDE, handleFocusOutside, eventDetail, {\n discrete: false\n });\n }\n }, \"handleFocus\");\n ownerDocument.addEventListener(\"focusin\", handleFocus);\n return () => ownerDocument.removeEventListener(\"focusin\", handleFocus);\n }, [ownerDocument, handleFocusOutside]);\n return {\n onFocusCapture: /* @__PURE__ */ __name(() => isFocusInsideReactTreeRef.current = true, \"onFocusCapture\"),\n onBlurCapture: /* @__PURE__ */ __name(() => isFocusInsideReactTreeRef.current = false, \"onBlurCapture\")\n };\n}\n__name(useFocusOutside, \"useFocusOutside\");\nfunction dispatchUpdate() {\n const event = new CustomEvent(CONTEXT_UPDATE);\n document.dispatchEvent(event);\n}\n__name(dispatchUpdate, \"dispatchUpdate\");\nfunction handleAndDispatchCustomEvent(name, handler, detail, { discrete }) {\n const target = detail.originalEvent.target;\n const event = new CustomEvent(name, { bubbles: false, cancelable: true, detail });\n if (handler) target.addEventListener(name, handler, { once: true });\n if (discrete) {\n dispatchDiscreteCustomEvent(target, event);\n } else {\n target.dispatchEvent(event);\n }\n}\n__name(handleAndDispatchCustomEvent, \"handleAndDispatchCustomEvent\");\nvar Root = DismissableLayer;\nvar Branch = DismissableLayerBranch;\nexport {\n Branch,\n DismissableLayer,\n DismissableLayerBranch,\n Root,\n useDismissableLayerSurface\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\nvar __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/focus-scope.tsx\nimport * as React from \"react\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { jsx } from \"react/jsx-runtime\";\nvar AUTOFOCUS_ON_MOUNT = \"focusScope.autoFocusOnMount\";\nvar AUTOFOCUS_ON_UNMOUNT = \"focusScope.autoFocusOnUnmount\";\nvar EVENT_OPTIONS = { bubbles: false, cancelable: true };\nvar FocusScope = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function FocusScope2(props, forwardedRef) {\n const {\n loop = false,\n trapped = false,\n onMountAutoFocus: onMountAutoFocusProp,\n onUnmountAutoFocus: onUnmountAutoFocusProp,\n ...scopeProps\n } = props;\n const [container, setContainer] = React.useState(null);\n const onMountAutoFocus = useCallbackRef(onMountAutoFocusProp);\n const onUnmountAutoFocus = useCallbackRef(onUnmountAutoFocusProp);\n const lastFocusedElementRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, setContainer);\n const focusScope = React.useRef({\n paused: false,\n pause() {\n this.paused = true;\n },\n resume() {\n this.paused = false;\n }\n }).current;\n React.useEffect(() => {\n if (trapped) {\n let handleFocusIn2 = function(event) {\n if (focusScope.paused || !container) return;\n const target = event.target;\n if (container.contains(target)) {\n lastFocusedElementRef.current = target;\n } else {\n focus(lastFocusedElementRef.current, { select: true });\n }\n }, handleFocusOut2 = function(event) {\n if (focusScope.paused || !container) return;\n const relatedTarget = event.relatedTarget;\n if (relatedTarget === null) return;\n if (!container.contains(relatedTarget)) {\n focus(lastFocusedElementRef.current, { select: true });\n }\n }, handleMutations2 = function(mutations) {\n const focusedElement = document.activeElement;\n if (focusedElement !== document.body) return;\n for (const mutation of mutations) {\n if (mutation.removedNodes.length > 0) focus(container);\n }\n };\n var handleFocusIn = handleFocusIn2, handleFocusOut = handleFocusOut2, handleMutations = handleMutations2;\n __name(handleFocusIn2, \"handleFocusIn\");\n __name(handleFocusOut2, \"handleFocusOut\");\n __name(handleMutations2, \"handleMutations\");\n document.addEventListener(\"focusin\", handleFocusIn2);\n document.addEventListener(\"focusout\", handleFocusOut2);\n const mutationObserver = new MutationObserver(handleMutations2);\n if (container) mutationObserver.observe(container, { childList: true, subtree: true });\n return () => {\n document.removeEventListener(\"focusin\", handleFocusIn2);\n document.removeEventListener(\"focusout\", handleFocusOut2);\n mutationObserver.disconnect();\n };\n }\n }, [trapped, container, focusScope.paused]);\n React.useEffect(() => {\n if (container) {\n focusScopesStack.add(focusScope);\n const previouslyFocusedElement = document.activeElement;\n const hasFocusedCandidate = container.contains(previouslyFocusedElement);\n if (!hasFocusedCandidate) {\n const mountEvent = new CustomEvent(AUTOFOCUS_ON_MOUNT, EVENT_OPTIONS);\n container.addEventListener(AUTOFOCUS_ON_MOUNT, onMountAutoFocus);\n container.dispatchEvent(mountEvent);\n if (!mountEvent.defaultPrevented) {\n focusFirst(removeLinks(getTabbableCandidates(container)), { select: true });\n if (document.activeElement === previouslyFocusedElement) {\n focus(container);\n }\n }\n }\n return () => {\n container.removeEventListener(AUTOFOCUS_ON_MOUNT, onMountAutoFocus);\n setTimeout(() => {\n const unmountEvent = new CustomEvent(AUTOFOCUS_ON_UNMOUNT, EVENT_OPTIONS);\n container.addEventListener(AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus);\n container.dispatchEvent(unmountEvent);\n if (!unmountEvent.defaultPrevented) {\n focus(previouslyFocusedElement ?? document.body, { select: true });\n }\n container.removeEventListener(AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus);\n focusScopesStack.remove(focusScope);\n }, 0);\n };\n }\n }, [container, onMountAutoFocus, onUnmountAutoFocus, focusScope]);\n const handleKeyDown = React.useCallback(\n (event) => {\n if (!loop && !trapped) return;\n if (focusScope.paused) return;\n const isTabKey = event.key === \"Tab\" && !event.altKey && !event.ctrlKey && !event.metaKey;\n const focusedElement = document.activeElement;\n if (isTabKey && focusedElement) {\n const container2 = event.currentTarget;\n const [first, last] = getTabbableEdges(container2);\n const hasTabbableElementsInside = first && last;\n if (!hasTabbableElementsInside) {\n if (focusedElement === container2) event.preventDefault();\n } else {\n if (!event.shiftKey && focusedElement === last) {\n event.preventDefault();\n if (loop) focus(first, { select: true });\n } else if (event.shiftKey && focusedElement === first) {\n event.preventDefault();\n if (loop) focus(last, { select: true });\n }\n }\n }\n },\n [loop, trapped, focusScope.paused]\n );\n return /* @__PURE__ */ jsx(Primitive.div, { tabIndex: -1, ...scopeProps, ref: composedRefs, onKeyDown: handleKeyDown });\n }, \"FocusScope\")\n);\nfunction focusFirst(candidates, { select = false } = {}) {\n const previouslyFocusedElement = document.activeElement;\n for (const candidate of candidates) {\n focus(candidate, { select });\n if (document.activeElement !== previouslyFocusedElement) return;\n }\n}\n__name(focusFirst, \"focusFirst\");\nfunction getTabbableEdges(container) {\n const candidates = getTabbableCandidates(container);\n const first = findVisible(candidates, container);\n const last = findVisible(candidates.reverse(), container);\n return [first, last];\n}\n__name(getTabbableEdges, \"getTabbableEdges\");\nfunction getTabbableCandidates(container) {\n const nodes = [];\n const walker = document.createTreeWalker(container, NodeFilter.SHOW_ELEMENT, {\n acceptNode: /* @__PURE__ */ __name((node) => {\n const isHiddenInput = node.tagName === \"INPUT\" && node.type === \"hidden\";\n if (node.disabled || node.hidden || isHiddenInput) return NodeFilter.FILTER_SKIP;\n return node.tabIndex >= 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;\n }, \"acceptNode\")\n });\n while (walker.nextNode()) nodes.push(walker.currentNode);\n return nodes;\n}\n__name(getTabbableCandidates, \"getTabbableCandidates\");\nfunction findVisible(elements, container) {\n const canUseCheckVisibility = typeof container.checkVisibility === \"function\" && container.checkVisibility({ checkVisibilityCSS: true });\n for (const element of elements) {\n const hidden = canUseCheckVisibility ? !element.checkVisibility({ checkVisibilityCSS: true }) : isHidden(element, { upTo: container });\n if (!hidden) {\n return element;\n }\n }\n}\n__name(findVisible, \"findVisible\");\nfunction isHidden(node, { upTo }) {\n if (getComputedStyle(node).visibility === \"hidden\") return true;\n while (node) {\n if (upTo !== void 0 && node === upTo) return false;\n if (getComputedStyle(node).display === \"none\") return true;\n node = node.parentElement;\n }\n return false;\n}\n__name(isHidden, \"isHidden\");\nfunction isSelectableInput(element) {\n return element instanceof HTMLInputElement && \"select\" in element;\n}\n__name(isSelectableInput, \"isSelectableInput\");\nfunction focus(element, { select = false } = {}) {\n if (element && element.focus) {\n const previouslyFocusedElement = document.activeElement;\n element.focus({ preventScroll: true });\n if (element !== previouslyFocusedElement && isSelectableInput(element) && select)\n element.select();\n }\n}\n__name(focus, \"focus\");\nvar focusScopesStack = createFocusScopesStack();\nfunction createFocusScopesStack() {\n let stack = [];\n return {\n add(focusScope) {\n const activeFocusScope = stack[0];\n if (focusScope !== activeFocusScope) {\n activeFocusScope?.pause();\n }\n stack = arrayRemove(stack, focusScope);\n stack.unshift(focusScope);\n },\n remove(focusScope) {\n stack = arrayRemove(stack, focusScope);\n stack[0]?.resume();\n }\n };\n}\n__name(createFocusScopesStack, \"createFocusScopesStack\");\nfunction arrayRemove(array, item) {\n const updatedArray = [...array];\n const index = updatedArray.indexOf(item);\n if (index !== -1) {\n updatedArray.splice(index, 1);\n }\n return updatedArray;\n}\n__name(arrayRemove, \"arrayRemove\");\nfunction removeLinks(items) {\n return items.filter((item) => item.tagName !== \"A\");\n}\n__name(removeLinks, \"removeLinks\");\nvar Root = FocusScope;\nexport {\n FocusScope,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\nvar __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/portal.tsx\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { jsx } from \"react/jsx-runtime\";\nvar Portal = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function Portal2(props, forwardedRef) {\n const { container: containerProp, ...portalProps } = props;\n const [mounted, setMounted] = React.useState(false);\n useLayoutEffect(() => setMounted(true), []);\n const container = containerProp || mounted && globalThis?.document?.body;\n return container ? ReactDOM.createPortal(/* @__PURE__ */ jsx(Primitive.div, { ...portalProps, ref: forwardedRef }), container) : null;\n }, \"Portal\")\n);\nvar Root = Portal;\nexport {\n Portal,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\nvar __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/focus-guards.tsx\nimport * as React from \"react\";\nvar count = 0;\nvar guards = null;\nfunction FocusGuards(props) {\n useFocusGuards();\n return props.children;\n}\n__name(FocusGuards, \"FocusGuards\");\nfunction useFocusGuards() {\n React.useEffect(() => {\n if (!guards) {\n guards = { start: createFocusGuard(), end: createFocusGuard() };\n }\n const { start, end } = guards;\n if (document.body.firstElementChild !== start) {\n document.body.insertAdjacentElement(\"afterbegin\", start);\n }\n if (document.body.lastElementChild !== end) {\n document.body.insertAdjacentElement(\"beforeend\", end);\n }\n count++;\n return () => {\n if (count === 1) {\n guards?.start.remove();\n guards?.end.remove();\n guards = null;\n }\n count = Math.max(0, count - 1);\n };\n }, []);\n}\n__name(useFocusGuards, \"useFocusGuards\");\nfunction createFocusGuard() {\n const element = document.createElement(\"span\");\n element.setAttribute(\"data-radix-focus-guard\", \"\");\n element.tabIndex = 0;\n element.style.outline = \"none\";\n element.style.opacity = \"0\";\n element.style.position = \"fixed\";\n element.style.pointerEvents = \"none\";\n return element;\n}\n__name(createFocusGuard, \"createFocusGuard\");\nexport {\n FocusGuards,\n FocusGuards as Root,\n useFocusGuards\n};\n//# sourceMappingURL=index.mjs.map\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(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}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n","export var zeroRightClassName = 'right-scroll-bar-position';\nexport var fullWidthClassName = 'width-before-scroll-bar';\nexport var noScrollbarsClassName = 'with-scroll-bars-hidden';\n/**\n * Name of a CSS variable containing the amount of \"hidden\" scrollbar\n * ! might be undefined ! use will fallback!\n */\nexport var removedBarSizeVariable = '--removed-body-scroll-bar-size';\n","/**\n * Assigns a value for a given ref, no matter of the ref format\n * @param {RefObject} ref - a callback function or ref object\n * @param value - a new value\n *\n * @see https://github.com/theKashey/use-callback-ref#assignref\n * @example\n * const refObject = useRef();\n * const refFn = (ref) => {....}\n *\n * assignRef(refObject, \"refValue\");\n * assignRef(refFn, \"refValue\");\n */\nexport function assignRef(ref, value) {\n if (typeof ref === 'function') {\n ref(value);\n }\n else if (ref) {\n ref.current = value;\n }\n return ref;\n}\n","import { useState } from 'react';\n/**\n * creates a MutableRef with ref change callback\n * @param initialValue - initial ref value\n * @param {Function} callback - a callback to run when value changes\n *\n * @example\n * const ref = useCallbackRef(0, (newValue, oldValue) => console.log(oldValue, '->', newValue);\n * ref.current = 1;\n * // prints 0 -> 1\n *\n * @see https://reactjs.org/docs/hooks-reference.html#useref\n * @see https://github.com/theKashey/use-callback-ref#usecallbackref---to-replace-reactuseref\n * @returns {MutableRefObject}\n */\nexport function useCallbackRef(initialValue, callback) {\n var ref = useState(function () { return ({\n // value\n value: initialValue,\n // last callback\n callback: callback,\n // \"memoized\" public interface\n facade: {\n get current() {\n return ref.value;\n },\n set current(value) {\n var last = ref.value;\n if (last !== value) {\n ref.value = value;\n ref.callback(value, last);\n }\n },\n },\n }); })[0];\n // update callback\n ref.callback = callback;\n return ref.facade;\n}\n","import * as React from 'react';\nimport { assignRef } from './assignRef';\nimport { useCallbackRef } from './useRef';\nvar useIsomorphicLayoutEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\nvar currentValues = new WeakMap();\n/**\n * Merges two or more refs together providing a single interface to set their value\n * @param {RefObject|Ref} refs\n * @returns {MutableRefObject} - a new ref, which translates all changes to {refs}\n *\n * @see {@link mergeRefs} a version without buit-in memoization\n * @see https://github.com/theKashey/use-callback-ref#usemergerefs\n * @example\n * const Component = React.forwardRef((props, ref) => {\n * const ownRef = useRef();\n * const domRef = useMergeRefs([ref, ownRef]); // 👈 merge together\n * return <div ref={domRef}>...</div>\n * }\n */\nexport function useMergeRefs(refs, defaultValue) {\n var callbackRef = useCallbackRef(defaultValue || null, function (newValue) {\n return refs.forEach(function (ref) { return assignRef(ref, newValue); });\n });\n // handle refs changes - added or removed\n useIsomorphicLayoutEffect(function () {\n var oldValue = currentValues.get(callbackRef);\n if (oldValue) {\n var prevRefs_1 = new Set(oldValue);\n var nextRefs_1 = new Set(refs);\n var current_1 = callbackRef.current;\n prevRefs_1.forEach(function (ref) {\n if (!nextRefs_1.has(ref)) {\n assignRef(ref, null);\n }\n });\n nextRefs_1.forEach(function (ref) {\n if (!prevRefs_1.has(ref)) {\n assignRef(ref, current_1);\n }\n });\n }\n currentValues.set(callbackRef, refs);\n }, [refs]);\n return callbackRef;\n}\n","import { __assign } from \"tslib\";\nfunction ItoI(a) {\n return a;\n}\nfunction innerCreateMedium(defaults, middleware) {\n if (middleware === void 0) { middleware = ItoI; }\n var buffer = [];\n var assigned = false;\n var medium = {\n read: function () {\n if (assigned) {\n throw new Error('Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.');\n }\n if (buffer.length) {\n return buffer[buffer.length - 1];\n }\n return defaults;\n },\n useMedium: function (data) {\n var item = middleware(data, assigned);\n buffer.push(item);\n return function () {\n buffer = buffer.filter(function (x) { return x !== item; });\n };\n },\n assignSyncMedium: function (cb) {\n assigned = true;\n while (buffer.length) {\n var cbs = buffer;\n buffer = [];\n cbs.forEach(cb);\n }\n buffer = {\n push: function (x) { return cb(x); },\n filter: function () { return buffer; },\n };\n },\n assignMedium: function (cb) {\n assigned = true;\n var pendingQueue = [];\n if (buffer.length) {\n var cbs = buffer;\n buffer = [];\n cbs.forEach(cb);\n pendingQueue = buffer;\n }\n var executeQueue = function () {\n var cbs = pendingQueue;\n pendingQueue = [];\n cbs.forEach(cb);\n };\n var cycle = function () { return Promise.resolve().then(executeQueue); };\n cycle();\n buffer = {\n push: function (x) {\n pendingQueue.push(x);\n cycle();\n },\n filter: function (filter) {\n pendingQueue = pendingQueue.filter(filter);\n return buffer;\n },\n };\n },\n };\n return medium;\n}\nexport function createMedium(defaults, middleware) {\n if (middleware === void 0) { middleware = ItoI; }\n return innerCreateMedium(defaults, middleware);\n}\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function createSidecarMedium(options) {\n if (options === void 0) { options = {}; }\n var medium = innerCreateMedium(null);\n medium.options = __assign({ async: true, ssr: false }, options);\n return medium;\n}\n","import { __assign, __rest } from \"tslib\";\nimport * as React from 'react';\nvar SideCar = function (_a) {\n var sideCar = _a.sideCar, rest = __rest(_a, [\"sideCar\"]);\n if (!sideCar) {\n throw new Error('Sidecar: please provide `sideCar` property to import the right car');\n }\n var Target = sideCar.read();\n if (!Target) {\n throw new Error('Sidecar medium not found');\n }\n return React.createElement(Target, __assign({}, rest));\n};\nSideCar.isSideCarExport = true;\nexport function exportSidecar(medium, exported) {\n medium.useMedium(exported);\n return SideCar;\n}\n","import { createSidecarMedium } from 'use-sidecar';\nexport var effectCar = createSidecarMedium();\n","import { __assign, __rest } from \"tslib\";\nimport * as React from 'react';\nimport { fullWidthClassName, zeroRightClassName } from 'react-remove-scroll-bar/constants';\nimport { useMergeRefs } from 'use-callback-ref';\nimport { effectCar } from './medium';\nvar nothing = function () {\n return;\n};\n/**\n * Removes scrollbar from the page and contain the scroll within the Lock\n */\nvar RemoveScroll = React.forwardRef(function (props, parentRef) {\n var ref = React.useRef(null);\n var _a = React.useState({\n onScrollCapture: nothing,\n onWheelCapture: nothing,\n onTouchMoveCapture: nothing,\n }), callbacks = _a[0], setCallbacks = _a[1];\n var forwardProps = props.forwardProps, children = props.children, className = props.className, removeScrollBar = props.removeScrollBar, enabled = props.enabled, shards = props.shards, sideCar = props.sideCar, noRelative = props.noRelative, noIsolation = props.noIsolation, inert = props.inert, allowPinchZoom = props.allowPinchZoom, _b = props.as, Container = _b === void 0 ? 'div' : _b, gapMode = props.gapMode, rest = __rest(props, [\"forwardProps\", \"children\", \"className\", \"removeScrollBar\", \"enabled\", \"shards\", \"sideCar\", \"noRelative\", \"noIsolation\", \"inert\", \"allowPinchZoom\", \"as\", \"gapMode\"]);\n var SideCar = sideCar;\n var containerRef = useMergeRefs([ref, parentRef]);\n var containerProps = __assign(__assign({}, rest), callbacks);\n return (React.createElement(React.Fragment, null,\n enabled && (React.createElement(SideCar, { sideCar: effectCar, removeScrollBar: removeScrollBar, shards: shards, noRelative: noRelative, noIsolation: noIsolation, inert: inert, setCallbacks: setCallbacks, allowPinchZoom: !!allowPinchZoom, lockRef: ref, gapMode: gapMode })),\n forwardProps ? (React.cloneElement(React.Children.only(children), __assign(__assign({}, containerProps), { ref: containerRef }))) : (React.createElement(Container, __assign({}, containerProps, { className: className, ref: containerRef }), children))));\n});\nRemoveScroll.defaultProps = {\n enabled: true,\n removeScrollBar: true,\n inert: false,\n};\nRemoveScroll.classNames = {\n fullWidth: fullWidthClassName,\n zeroRight: zeroRightClassName,\n};\nexport { RemoveScroll };\n","var currentNonce;\nexport var setNonce = function (nonce) {\n currentNonce = nonce;\n};\nexport var getNonce = function () {\n if (currentNonce) {\n return currentNonce;\n }\n if (typeof __webpack_nonce__ !== 'undefined') {\n return __webpack_nonce__;\n }\n return undefined;\n};\n","import { getNonce } from 'get-nonce';\nfunction makeStyleTag() {\n if (!document)\n return null;\n var tag = document.createElement('style');\n tag.type = 'text/css';\n var nonce = getNonce();\n if (nonce) {\n tag.setAttribute('nonce', nonce);\n }\n return tag;\n}\nfunction injectStyles(tag, css) {\n // @ts-ignore\n if (tag.styleSheet) {\n // @ts-ignore\n tag.styleSheet.cssText = css;\n }\n else {\n tag.appendChild(document.createTextNode(css));\n }\n}\nfunction insertStyleTag(tag) {\n var head = document.head || document.getElementsByTagName('head')[0];\n head.appendChild(tag);\n}\nexport var stylesheetSingleton = function () {\n var counter = 0;\n var stylesheet = null;\n return {\n add: function (style) {\n if (counter == 0) {\n if ((stylesheet = makeStyleTag())) {\n injectStyles(stylesheet, style);\n insertStyleTag(stylesheet);\n }\n }\n counter++;\n },\n remove: function () {\n counter--;\n if (!counter && stylesheet) {\n stylesheet.parentNode && stylesheet.parentNode.removeChild(stylesheet);\n stylesheet = null;\n }\n },\n };\n};\n","import * as React from 'react';\nimport { stylesheetSingleton } from './singleton';\n/**\n * creates a hook to control style singleton\n * @see {@link styleSingleton} for a safer component version\n * @example\n * ```tsx\n * const useStyle = styleHookSingleton();\n * ///\n * useStyle('body { overflow: hidden}');\n */\nexport var styleHookSingleton = function () {\n var sheet = stylesheetSingleton();\n return function (styles, isDynamic) {\n React.useEffect(function () {\n sheet.add(styles);\n return function () {\n sheet.remove();\n };\n }, [styles && isDynamic]);\n };\n};\n","import { styleHookSingleton } from './hook';\n/**\n * create a Component to add styles on demand\n * - styles are added when first instance is mounted\n * - styles are removed when the last instance is unmounted\n * - changing styles in runtime does nothing unless dynamic is set. But with multiple components that can lead to the undefined behavior\n */\nexport var styleSingleton = function () {\n var useStyle = styleHookSingleton();\n var Sheet = function (_a) {\n var styles = _a.styles, dynamic = _a.dynamic;\n useStyle(styles, dynamic);\n return null;\n };\n return Sheet;\n};\n","export var zeroGap = {\n left: 0,\n top: 0,\n right: 0,\n gap: 0,\n};\nvar parse = function (x) { return parseInt(x || '', 10) || 0; };\nvar getOffset = function (gapMode) {\n var cs = window.getComputedStyle(document.body);\n var left = cs[gapMode === 'padding' ? 'paddingLeft' : 'marginLeft'];\n var top = cs[gapMode === 'padding' ? 'paddingTop' : 'marginTop'];\n var right = cs[gapMode === 'padding' ? 'paddingRight' : 'marginRight'];\n return [parse(left), parse(top), parse(right)];\n};\nexport var getGapWidth = function (gapMode) {\n if (gapMode === void 0) { gapMode = 'margin'; }\n if (typeof window === 'undefined') {\n return zeroGap;\n }\n var offsets = getOffset(gapMode);\n var documentWidth = document.documentElement.clientWidth;\n var windowWidth = window.innerWidth;\n return {\n left: offsets[0],\n top: offsets[1],\n right: offsets[2],\n gap: Math.max(0, windowWidth - documentWidth + offsets[2] - offsets[0]),\n };\n};\n","import * as React from 'react';\nimport { styleSingleton } from 'react-style-singleton';\nimport { fullWidthClassName, zeroRightClassName, noScrollbarsClassName, removedBarSizeVariable } from './constants';\nimport { getGapWidth } from './utils';\nvar Style = styleSingleton();\nexport var lockAttribute = 'data-scroll-locked';\n// important tip - once we measure scrollBar width and remove them\n// we could not repeat this operation\n// thus we are using style-singleton - only the first \"yet correct\" style will be applied.\nvar getStyles = function (_a, allowRelative, gapMode, important) {\n var left = _a.left, top = _a.top, right = _a.right, gap = _a.gap;\n if (gapMode === void 0) { gapMode = 'margin'; }\n return \"\\n .\".concat(noScrollbarsClassName, \" {\\n overflow: hidden \").concat(important, \";\\n padding-right: \").concat(gap, \"px \").concat(important, \";\\n }\\n body[\").concat(lockAttribute, \"] {\\n overflow: hidden \").concat(important, \";\\n overscroll-behavior: contain;\\n \").concat([\n allowRelative && \"position: relative \".concat(important, \";\"),\n gapMode === 'margin' &&\n \"\\n padding-left: \".concat(left, \"px;\\n padding-top: \").concat(top, \"px;\\n padding-right: \").concat(right, \"px;\\n margin-left:0;\\n margin-top:0;\\n margin-right: \").concat(gap, \"px \").concat(important, \";\\n \"),\n gapMode === 'padding' && \"padding-right: \".concat(gap, \"px \").concat(important, \";\"),\n ]\n .filter(Boolean)\n .join(''), \"\\n }\\n \\n .\").concat(zeroRightClassName, \" {\\n right: \").concat(gap, \"px \").concat(important, \";\\n }\\n \\n .\").concat(fullWidthClassName, \" {\\n margin-right: \").concat(gap, \"px \").concat(important, \";\\n }\\n \\n .\").concat(zeroRightClassName, \" .\").concat(zeroRightClassName, \" {\\n right: 0 \").concat(important, \";\\n }\\n \\n .\").concat(fullWidthClassName, \" .\").concat(fullWidthClassName, \" {\\n margin-right: 0 \").concat(important, \";\\n }\\n \\n body[\").concat(lockAttribute, \"] {\\n \").concat(removedBarSizeVariable, \": \").concat(gap, \"px;\\n }\\n\");\n};\nvar getCurrentUseCounter = function () {\n var counter = parseInt(document.body.getAttribute(lockAttribute) || '0', 10);\n return isFinite(counter) ? counter : 0;\n};\nexport var useLockAttribute = function () {\n React.useEffect(function () {\n document.body.setAttribute(lockAttribute, (getCurrentUseCounter() + 1).toString());\n return function () {\n var newCounter = getCurrentUseCounter() - 1;\n if (newCounter <= 0) {\n document.body.removeAttribute(lockAttribute);\n }\n else {\n document.body.setAttribute(lockAttribute, newCounter.toString());\n }\n };\n }, []);\n};\n/**\n * Removes page scrollbar and blocks page scroll when mounted\n */\nexport var RemoveScrollBar = function (_a) {\n var noRelative = _a.noRelative, noImportant = _a.noImportant, _b = _a.gapMode, gapMode = _b === void 0 ? 'margin' : _b;\n useLockAttribute();\n /*\n gap will be measured on every component mount\n however it will be used only by the \"first\" invocation\n due to singleton nature of <Style\n */\n var gap = React.useMemo(function () { return getGapWidth(gapMode); }, [gapMode]);\n return React.createElement(Style, { styles: getStyles(gap, !noRelative, gapMode, !noImportant ? '!important' : '') });\n};\n","var passiveSupported = false;\nif (typeof window !== 'undefined') {\n try {\n var options = Object.defineProperty({}, 'passive', {\n get: function () {\n passiveSupported = true;\n return true;\n },\n });\n // @ts-ignore\n window.addEventListener('test', options, options);\n // @ts-ignore\n window.removeEventListener('test', options, options);\n }\n catch (err) {\n passiveSupported = false;\n }\n}\nexport var nonPassive = passiveSupported ? { passive: false } : false;\n","var alwaysContainsScroll = function (node) {\n // textarea will always _contain_ scroll inside self. It only can be hidden\n return node.tagName === 'TEXTAREA';\n};\nvar elementCanBeScrolled = function (node, overflow) {\n if (!(node instanceof Element)) {\n return false;\n }\n var styles = window.getComputedStyle(node);\n return (\n // not-not-scrollable\n styles[overflow] !== 'hidden' &&\n // contains scroll inside self\n !(styles.overflowY === styles.overflowX && !alwaysContainsScroll(node) && styles[overflow] === 'visible'));\n};\nvar elementCouldBeVScrolled = function (node) { return elementCanBeScrolled(node, 'overflowY'); };\nvar elementCouldBeHScrolled = function (node) { return elementCanBeScrolled(node, 'overflowX'); };\nexport var locationCouldBeScrolled = function (axis, node) {\n var ownerDocument = node.ownerDocument;\n var current = node;\n do {\n // Skip over shadow root\n if (typeof ShadowRoot !== 'undefined' && current instanceof ShadowRoot) {\n current = current.host;\n }\n var isScrollable = elementCouldBeScrolled(axis, current);\n if (isScrollable) {\n var _a = getScrollVariables(axis, current), scrollHeight = _a[1], clientHeight = _a[2];\n if (scrollHeight > clientHeight) {\n return true;\n }\n }\n current = current.parentNode;\n } while (current && current !== ownerDocument.body);\n return false;\n};\nvar getVScrollVariables = function (_a) {\n var scrollTop = _a.scrollTop, scrollHeight = _a.scrollHeight, clientHeight = _a.clientHeight;\n return [\n scrollTop,\n scrollHeight,\n clientHeight,\n ];\n};\nvar getHScrollVariables = function (_a) {\n var scrollLeft = _a.scrollLeft, scrollWidth = _a.scrollWidth, clientWidth = _a.clientWidth;\n return [\n scrollLeft,\n scrollWidth,\n clientWidth,\n ];\n};\nvar elementCouldBeScrolled = function (axis, node) {\n return axis === 'v' ? elementCouldBeVScrolled(node) : elementCouldBeHScrolled(node);\n};\nvar getScrollVariables = function (axis, node) {\n return axis === 'v' ? getVScrollVariables(node) : getHScrollVariables(node);\n};\nvar getDirectionFactor = function (axis, direction) {\n /**\n * If the element's direction is rtl (right-to-left), then scrollLeft is 0 when the scrollbar is at its rightmost position,\n * and then increasingly negative as you scroll towards the end of the content.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollLeft\n */\n return axis === 'h' && direction === 'rtl' ? -1 : 1;\n};\nexport var handleScroll = function (axis, endTarget, event, sourceDelta, noOverscroll) {\n var directionFactor = getDirectionFactor(axis, window.getComputedStyle(endTarget).direction);\n var delta = directionFactor * sourceDelta;\n // find scrollable target\n var target = event.target;\n var targetInLock = endTarget.contains(target);\n var shouldCancelScroll = false;\n var isDeltaPositive = delta > 0;\n var availableScroll = 0;\n var availableScrollTop = 0;\n do {\n if (!target) {\n break;\n }\n var _a = getScrollVariables(axis, target), position = _a[0], scroll_1 = _a[1], capacity = _a[2];\n var elementScroll = scroll_1 - capacity - directionFactor * position;\n if (position || elementScroll) {\n if (elementCouldBeScrolled(axis, target)) {\n availableScroll += elementScroll;\n availableScrollTop += position;\n }\n }\n var parent_1 = target.parentNode;\n // we will \"bubble\" from ShadowDom in case we are, or just to the parent in normal case\n // this is the same logic used in focus-lock\n target = (parent_1 && parent_1.nodeType === Node.DOCUMENT_FRAGMENT_NODE ? parent_1.host : parent_1);\n } while (\n // portaled content\n (!targetInLock && target !== document.body) ||\n // self content\n (targetInLock && (endTarget.contains(target) || endTarget === target)));\n // handle epsilon around 0 (non standard zoom levels)\n if (isDeltaPositive &&\n ((noOverscroll && Math.abs(availableScroll) < 1) || (!noOverscroll && delta > availableScroll))) {\n shouldCancelScroll = true;\n }\n else if (!isDeltaPositive &&\n ((noOverscroll && Math.abs(availableScrollTop) < 1) || (!noOverscroll && -delta > availableScrollTop))) {\n shouldCancelScroll = true;\n }\n return shouldCancelScroll;\n};\n","import { __spreadArray } from \"tslib\";\nimport * as React from 'react';\nimport { RemoveScrollBar } from 'react-remove-scroll-bar';\nimport { styleSingleton } from 'react-style-singleton';\nimport { nonPassive } from './aggresiveCapture';\nimport { handleScroll, locationCouldBeScrolled } from './handleScroll';\nexport var getTouchXY = function (event) {\n return 'changedTouches' in event ? [event.changedTouches[0].clientX, event.changedTouches[0].clientY] : [0, 0];\n};\nexport var getDeltaXY = function (event) { return [event.deltaX, event.deltaY]; };\nvar extractRef = function (ref) {\n return ref && 'current' in ref ? ref.current : ref;\n};\nvar deltaCompare = function (x, y) { return x[0] === y[0] && x[1] === y[1]; };\nvar generateStyle = function (id) { return \"\\n .block-interactivity-\".concat(id, \" {pointer-events: none;}\\n .allow-interactivity-\").concat(id, \" {pointer-events: all;}\\n\"); };\nvar idCounter = 0;\nvar lockStack = [];\nexport function RemoveScrollSideCar(props) {\n var shouldPreventQueue = React.useRef([]);\n var touchStartRef = React.useRef([0, 0]);\n var activeAxis = React.useRef();\n var id = React.useState(idCounter++)[0];\n var Style = React.useState(styleSingleton)[0];\n var lastProps = React.useRef(props);\n React.useEffect(function () {\n lastProps.current = props;\n }, [props]);\n React.useEffect(function () {\n if (props.inert) {\n document.body.classList.add(\"block-interactivity-\".concat(id));\n var allow_1 = __spreadArray([props.lockRef.current], (props.shards || []).map(extractRef), true).filter(Boolean);\n allow_1.forEach(function (el) { return el.classList.add(\"allow-interactivity-\".concat(id)); });\n return function () {\n document.body.classList.remove(\"block-interactivity-\".concat(id));\n allow_1.forEach(function (el) { return el.classList.remove(\"allow-interactivity-\".concat(id)); });\n };\n }\n return;\n }, [props.inert, props.lockRef.current, props.shards]);\n var shouldCancelEvent = React.useCallback(function (event, parent) {\n if (('touches' in event && event.touches.length === 2) || (event.type === 'wheel' && event.ctrlKey)) {\n return !lastProps.current.allowPinchZoom;\n }\n var touch = getTouchXY(event);\n var touchStart = touchStartRef.current;\n var deltaX = 'deltaX' in event ? event.deltaX : touchStart[0] - touch[0];\n var deltaY = 'deltaY' in event ? event.deltaY : touchStart[1] - touch[1];\n var currentAxis;\n var target = event.target;\n var moveDirection = Math.abs(deltaX) > Math.abs(deltaY) ? 'h' : 'v';\n // allow horizontal touch move on Range inputs. They will not cause any scroll\n if ('touches' in event && moveDirection === 'h' && target.type === 'range') {\n return false;\n }\n // allow drag selection (iOS); check if selection's anchorNode is the same as target or contains target\n var selection = window.getSelection();\n var anchorNode = selection && selection.anchorNode;\n var isTouchingSelection = anchorNode ? anchorNode === target || anchorNode.contains(target) : false;\n if (isTouchingSelection) {\n return false;\n }\n var canBeScrolledInMainDirection = locationCouldBeScrolled(moveDirection, target);\n if (!canBeScrolledInMainDirection) {\n return true;\n }\n if (canBeScrolledInMainDirection) {\n currentAxis = moveDirection;\n }\n else {\n currentAxis = moveDirection === 'v' ? 'h' : 'v';\n canBeScrolledInMainDirection = locationCouldBeScrolled(moveDirection, target);\n // other axis might be not scrollable\n }\n if (!canBeScrolledInMainDirection) {\n return false;\n }\n if (!activeAxis.current && 'changedTouches' in event && (deltaX || deltaY)) {\n activeAxis.current = currentAxis;\n }\n if (!currentAxis) {\n return true;\n }\n var cancelingAxis = activeAxis.current || currentAxis;\n return handleScroll(cancelingAxis, parent, event, cancelingAxis === 'h' ? deltaX : deltaY, true);\n }, []);\n var shouldPrevent = React.useCallback(function (_event) {\n var event = _event;\n if (!lockStack.length || lockStack[lockStack.length - 1] !== Style) {\n // not the last active\n return;\n }\n var delta = 'deltaY' in event ? getDeltaXY(event) : getTouchXY(event);\n var sourceEvent = shouldPreventQueue.current.filter(function (e) { return e.name === event.type && (e.target === event.target || event.target === e.shadowParent) && deltaCompare(e.delta, delta); })[0];\n // self event, and should be canceled\n if (sourceEvent && sourceEvent.should) {\n if (event.cancelable) {\n event.preventDefault();\n }\n return;\n }\n // outside or shard event\n if (!sourceEvent) {\n var shardNodes = (lastProps.current.shards || [])\n .map(extractRef)\n .filter(Boolean)\n .filter(function (node) { return node.contains(event.target); });\n var shouldStop = shardNodes.length > 0 ? shouldCancelEvent(event, shardNodes[0]) : !lastProps.current.noIsolation;\n if (shouldStop) {\n if (event.cancelable) {\n event.preventDefault();\n }\n }\n }\n }, []);\n var shouldCancel = React.useCallback(function (name, delta, target, should) {\n var event = { name: name, delta: delta, target: target, should: should, shadowParent: getOutermostShadowParent(target) };\n shouldPreventQueue.current.push(event);\n setTimeout(function () {\n shouldPreventQueue.current = shouldPreventQueue.current.filter(function (e) { return e !== event; });\n }, 1);\n }, []);\n var scrollTouchStart = React.useCallback(function (event) {\n touchStartRef.current = getTouchXY(event);\n activeAxis.current = undefined;\n }, []);\n var scrollWheel = React.useCallback(function (event) {\n shouldCancel(event.type, getDeltaXY(event), event.target, shouldCancelEvent(event, props.lockRef.current));\n }, []);\n var scrollTouchMove = React.useCallback(function (event) {\n shouldCancel(event.type, getTouchXY(event), event.target, shouldCancelEvent(event, props.lockRef.current));\n }, []);\n React.useEffect(function () {\n lockStack.push(Style);\n props.setCallbacks({\n onScrollCapture: scrollWheel,\n onWheelCapture: scrollWheel,\n onTouchMoveCapture: scrollTouchMove,\n });\n document.addEventListener('wheel', shouldPrevent, nonPassive);\n document.addEventListener('touchmove', shouldPrevent, nonPassive);\n document.addEventListener('touchstart', scrollTouchStart, nonPassive);\n return function () {\n lockStack = lockStack.filter(function (inst) { return inst !== Style; });\n document.removeEventListener('wheel', shouldPrevent, nonPassive);\n document.removeEventListener('touchmove', shouldPrevent, nonPassive);\n document.removeEventListener('touchstart', scrollTouchStart, nonPassive);\n };\n }, []);\n var removeScrollBar = props.removeScrollBar, inert = props.inert;\n return (React.createElement(React.Fragment, null,\n inert ? React.createElement(Style, { styles: generateStyle(id) }) : null,\n removeScrollBar ? React.createElement(RemoveScrollBar, { noRelative: props.noRelative, gapMode: props.gapMode }) : null));\n}\nfunction getOutermostShadowParent(node) {\n var shadowParent = null;\n while (node !== null) {\n if (node instanceof ShadowRoot) {\n shadowParent = node.host;\n node = node.host;\n }\n node = node.parentNode;\n }\n return shadowParent;\n}\n","import { exportSidecar } from 'use-sidecar';\nimport { RemoveScrollSideCar } from './SideEffect';\nimport { effectCar } from './medium';\nexport default exportSidecar(effectCar, RemoveScrollSideCar);\n","import { __assign } from \"tslib\";\nimport * as React from 'react';\nimport { RemoveScroll } from './UI';\nimport SideCar from './sidecar';\nvar ReactRemoveScroll = React.forwardRef(function (props, ref) { return (React.createElement(RemoveScroll, __assign({}, props, { ref: ref, sideCar: SideCar }))); });\nReactRemoveScroll.classNames = RemoveScroll.classNames;\nexport default ReactRemoveScroll;\n","var getDefaultParent = function (originalTarget) {\n if (typeof document === 'undefined') {\n return null;\n }\n var sampleTarget = Array.isArray(originalTarget) ? originalTarget[0] : originalTarget;\n return sampleTarget.ownerDocument.body;\n};\nvar counterMap = new WeakMap();\nvar uncontrolledNodes = new WeakMap();\nvar markerMap = {};\nvar lockCount = 0;\nvar unwrapHost = function (node) {\n return node && (node.host || unwrapHost(node.parentNode));\n};\nvar correctTargets = function (parent, targets) {\n return targets\n .map(function (target) {\n if (parent.contains(target)) {\n return target;\n }\n var correctedTarget = unwrapHost(target);\n if (correctedTarget && parent.contains(correctedTarget)) {\n return correctedTarget;\n }\n console.error('aria-hidden', target, 'in not contained inside', parent, '. Doing nothing');\n return null;\n })\n .filter(function (x) { return Boolean(x); });\n};\n/**\n * Marks everything except given node(or nodes) as aria-hidden\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @param {String} [controlAttribute] - html Attribute to control\n * @return {Undo} undo command\n */\nvar applyAttributeToOthers = function (originalTarget, parentNode, markerName, controlAttribute) {\n var targets = correctTargets(parentNode, Array.isArray(originalTarget) ? originalTarget : [originalTarget]);\n if (!markerMap[markerName]) {\n markerMap[markerName] = new WeakMap();\n }\n var markerCounter = markerMap[markerName];\n var hiddenNodes = [];\n var elementsToKeep = new Set();\n var elementsToStop = new Set(targets);\n var keep = function (el) {\n if (!el || elementsToKeep.has(el)) {\n return;\n }\n elementsToKeep.add(el);\n keep(el.parentNode);\n };\n targets.forEach(keep);\n var deep = function (parent) {\n if (!parent || elementsToStop.has(parent)) {\n return;\n }\n Array.prototype.forEach.call(parent.children, function (node) {\n if (elementsToKeep.has(node)) {\n deep(node);\n }\n else {\n try {\n var attr = node.getAttribute(controlAttribute);\n var alreadyHidden = attr !== null && attr !== 'false';\n var counterValue = (counterMap.get(node) || 0) + 1;\n var markerValue = (markerCounter.get(node) || 0) + 1;\n counterMap.set(node, counterValue);\n markerCounter.set(node, markerValue);\n hiddenNodes.push(node);\n if (counterValue === 1 && alreadyHidden) {\n uncontrolledNodes.set(node, true);\n }\n if (markerValue === 1) {\n node.setAttribute(markerName, 'true');\n }\n if (!alreadyHidden) {\n node.setAttribute(controlAttribute, 'true');\n }\n }\n catch (e) {\n console.error('aria-hidden: cannot operate on ', node, e);\n }\n }\n });\n };\n deep(parentNode);\n elementsToKeep.clear();\n lockCount++;\n return function () {\n hiddenNodes.forEach(function (node) {\n var counterValue = counterMap.get(node) - 1;\n var markerValue = markerCounter.get(node) - 1;\n counterMap.set(node, counterValue);\n markerCounter.set(node, markerValue);\n if (!counterValue) {\n if (!uncontrolledNodes.has(node)) {\n node.removeAttribute(controlAttribute);\n }\n uncontrolledNodes.delete(node);\n }\n if (!markerValue) {\n node.removeAttribute(markerName);\n }\n });\n lockCount--;\n if (!lockCount) {\n // clear\n counterMap = new WeakMap();\n counterMap = new WeakMap();\n uncontrolledNodes = new WeakMap();\n markerMap = {};\n }\n };\n};\n/**\n * Marks everything except given node(or nodes) as aria-hidden\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var hideOthers = function (originalTarget, parentNode, markerName) {\n if (markerName === void 0) { markerName = 'data-aria-hidden'; }\n var targets = Array.from(Array.isArray(originalTarget) ? originalTarget : [originalTarget]);\n var activeParentNode = parentNode || getDefaultParent(originalTarget);\n if (!activeParentNode) {\n return function () { return null; };\n }\n // we should not hide aria-live elements - https://github.com/theKashey/aria-hidden/issues/10\n // and script elements, as they have no impact on accessibility.\n targets.push.apply(targets, Array.from(activeParentNode.querySelectorAll('[aria-live], script')));\n return applyAttributeToOthers(targets, activeParentNode, markerName, 'aria-hidden');\n};\n/**\n * Marks everything except given node(or nodes) as inert\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var inertOthers = function (originalTarget, parentNode, markerName) {\n if (markerName === void 0) { markerName = 'data-inert-ed'; }\n var activeParentNode = parentNode || getDefaultParent(originalTarget);\n if (!activeParentNode) {\n return function () { return null; };\n }\n return applyAttributeToOthers(originalTarget, activeParentNode, markerName, 'inert');\n};\n/**\n * @returns if current browser supports inert\n */\nexport var supportsInert = function () {\n return typeof HTMLElement !== 'undefined' && HTMLElement.prototype.hasOwnProperty('inert');\n};\n/**\n * Automatic function to \"suppress\" DOM elements - _hide_ or _inert_ in the best possible way\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var suppressOthers = function (originalTarget, parentNode, markerName) {\n if (markerName === void 0) { markerName = 'data-suppressed'; }\n return (supportsInert() ? inertOthers : hideOthers)(originalTarget, parentNode, markerName);\n};\n","\"use client\";\nvar __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/dialog.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { DismissableLayer, useDismissableLayerSurface } from \"@radix-ui/react-dismissable-layer\";\nimport { FocusScope } from \"@radix-ui/react-focus-scope\";\nimport { Portal as PortalPrimitive } from \"@radix-ui/react-portal\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useFocusGuards } from \"@radix-ui/react-focus-guards\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { RemoveScroll } from \"react-remove-scroll\";\nimport { hideOthers } from \"aria-hidden\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { Fragment, jsx } from \"react/jsx-runtime\";\nvar DIALOG_NAME = \"Dialog\";\nvar [createDialogContext, createDialogScope] = createContextScope(DIALOG_NAME);\nvar [DialogProvider, useDialogContext] = createDialogContext(DIALOG_NAME);\nvar Dialog = /* @__PURE__ */ __name((props) => {\n const {\n __scopeDialog,\n children,\n open: openProp,\n defaultOpen,\n onOpenChange,\n modal = true\n } = props;\n const triggerRef = React.useRef(null);\n const contentRef = React.useRef(null);\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: onOpenChange,\n caller: DIALOG_NAME\n });\n const [titleCount, setTitleCount] = React.useState(0);\n const [descriptionCount, setDescriptionCount] = React.useState(0);\n return /* @__PURE__ */ jsx(\n DialogProvider,\n {\n scope: __scopeDialog,\n triggerRef,\n contentRef,\n contentId: useId(),\n titleId: useId(),\n descriptionId: useId(),\n titlePresent: titleCount > 0,\n descriptionPresent: descriptionCount > 0,\n setTitleCount,\n setDescriptionCount,\n open,\n onOpenChange: setOpen,\n onOpenToggle: React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]),\n modal,\n children\n }\n );\n}, \"Dialog\");\nvar TRIGGER_NAME = \"DialogTrigger\";\nvar DialogTrigger = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function DialogTrigger2(props, forwardedRef) {\n const { __scopeDialog, ...triggerProps } = props;\n const context = useDialogContext(TRIGGER_NAME, __scopeDialog);\n const composedTriggerRef = useComposedRefs(forwardedRef, context.triggerRef);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n \"aria-haspopup\": \"dialog\",\n \"aria-expanded\": context.open,\n \"aria-controls\": context.open ? context.contentId : void 0,\n \"data-state\": getState(context.open),\n ...triggerProps,\n ref: composedTriggerRef,\n onClick: composeEventHandlers(props.onClick, context.onOpenToggle)\n }\n );\n }, \"DialogTrigger\")\n);\nvar PORTAL_NAME = \"DialogPortal\";\nvar [PortalProvider, usePortalContext] = createDialogContext(PORTAL_NAME, {\n forceMount: void 0\n});\nvar DialogPortal = /* @__PURE__ */ __name((props) => {\n const { __scopeDialog, forceMount, children, container } = props;\n const context = useDialogContext(PORTAL_NAME, __scopeDialog);\n return /* @__PURE__ */ jsx(PortalProvider, { scope: __scopeDialog, forceMount, children: React.Children.map(children, (child) => /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, container, children: child }) })) });\n}, \"DialogPortal\");\nvar OVERLAY_NAME = \"DialogOverlay\";\nvar DialogOverlay = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function DialogOverlay2(props, forwardedRef) {\n const portalContext = usePortalContext(OVERLAY_NAME, props.__scopeDialog);\n const { forceMount = portalContext.forceMount, ...overlayProps } = props;\n const context = useDialogContext(OVERLAY_NAME, props.__scopeDialog);\n return context.modal ? /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(DialogOverlayImpl, { ...overlayProps, ref: forwardedRef }) }) : null;\n }, \"DialogOverlay\")\n);\nvar Slot = createSlot(\"DialogOverlay.RemoveScroll\");\nvar DialogOverlayImpl = /* @__PURE__ */ React.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function DialogOverlayImpl2(props, forwardedRef) {\n const { __scopeDialog, ...overlayProps } = props;\n const context = useDialogContext(OVERLAY_NAME, __scopeDialog);\n const registerDismissableSurface = useDismissableLayerSurface();\n const composedRefs = useComposedRefs(forwardedRef, registerDismissableSurface);\n return (\n // Make sure `Content` is scrollable even when it doesn't live inside `RemoveScroll`\n // ie. when `Overlay` and `Content` are siblings\n /* @__PURE__ */ jsx(RemoveScroll, { as: Slot, allowPinchZoom: true, shards: [context.contentRef], children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-state\": getState(context.open),\n ...overlayProps,\n ref: composedRefs,\n style: { pointerEvents: \"auto\", ...overlayProps.style }\n }\n ) })\n );\n }, \"DialogOverlayImpl\")\n);\nvar CONTENT_NAME = \"DialogContent\";\nvar DialogContent = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function DialogContent2(props, forwardedRef) {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeDialog);\n const { forceMount = portalContext.forceMount, ...contentProps } = props;\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: context.modal ? /* @__PURE__ */ jsx(DialogContentModal, { ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(DialogContentNonModal, { ...contentProps, ref: forwardedRef }) });\n }, \"DialogContent\")\n);\nvar DialogContentModal = /* @__PURE__ */ React.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function DialogContentModal2(props, forwardedRef) {\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, context.contentRef, contentRef);\n React.useEffect(() => {\n const content = contentRef.current;\n if (content) return hideOthers(content);\n }, []);\n return /* @__PURE__ */ jsx(\n DialogContentImpl,\n {\n ...props,\n ref: composedRefs,\n trapFocus: context.open,\n disableOutsidePointerEvents: context.open,\n onCloseAutoFocus: composeEventHandlers(props.onCloseAutoFocus, (event) => {\n event.preventDefault();\n context.triggerRef.current?.focus();\n }),\n onPointerDownOutside: composeEventHandlers(props.onPointerDownOutside, (event) => {\n const originalEvent = event.detail.originalEvent;\n const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;\n const isRightClick = originalEvent.button === 2 || ctrlLeftClick;\n if (isRightClick) event.preventDefault();\n }),\n onFocusOutside: composeEventHandlers(\n props.onFocusOutside,\n (event) => event.preventDefault()\n )\n }\n );\n }, \"DialogContentModal\")\n);\nvar DialogContentNonModal = /* @__PURE__ */ React.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function DialogContentNonModal2(props, forwardedRef) {\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n const hasInteractedOutsideRef = React.useRef(false);\n const hasPointerDownOutsideRef = React.useRef(false);\n return /* @__PURE__ */ jsx(\n DialogContentImpl,\n {\n ...props,\n ref: forwardedRef,\n trapFocus: false,\n disableOutsidePointerEvents: false,\n onCloseAutoFocus: (event) => {\n props.onCloseAutoFocus?.(event);\n if (!event.defaultPrevented) {\n if (!hasInteractedOutsideRef.current) context.triggerRef.current?.focus();\n event.preventDefault();\n }\n hasInteractedOutsideRef.current = false;\n hasPointerDownOutsideRef.current = false;\n },\n onInteractOutside: (event) => {\n props.onInteractOutside?.(event);\n if (!event.defaultPrevented) {\n hasInteractedOutsideRef.current = true;\n if (event.detail.originalEvent.type === \"pointerdown\") {\n hasPointerDownOutsideRef.current = true;\n }\n }\n const target = event.target;\n const targetIsTrigger = context.triggerRef.current?.contains(target);\n if (targetIsTrigger) event.preventDefault();\n if (event.detail.originalEvent.type === \"focusin\" && hasPointerDownOutsideRef.current) {\n event.preventDefault();\n }\n }\n }\n );\n }, \"DialogContentNonModal\")\n);\nvar DialogContentImpl = /* @__PURE__ */ React.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function DialogContentImpl2(props, forwardedRef) {\n const { __scopeDialog, trapFocus, onOpenAutoFocus, onCloseAutoFocus, ...contentProps } = props;\n const context = useDialogContext(CONTENT_NAME, __scopeDialog);\n useFocusGuards();\n return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx(\n FocusScope,\n {\n asChild: true,\n loop: true,\n trapped: trapFocus,\n onMountAutoFocus: onOpenAutoFocus,\n onUnmountAutoFocus: onCloseAutoFocus,\n children: /* @__PURE__ */ jsx(\n DismissableLayer,\n {\n role: \"dialog\",\n id: context.contentId,\n \"aria-describedby\": context.descriptionPresent ? context.descriptionId : void 0,\n \"aria-labelledby\": context.titlePresent ? context.titleId : void 0,\n \"data-state\": getState(context.open),\n ...contentProps,\n ref: forwardedRef,\n deferPointerDownOutside: true,\n onDismiss: () => context.onOpenChange(false)\n }\n )\n }\n ) });\n }, \"DialogContentImpl\")\n);\nvar TITLE_NAME = \"DialogTitle\";\nvar DialogTitle = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function DialogTitle2(props, forwardedRef) {\n const { __scopeDialog, ...titleProps } = props;\n const context = useDialogContext(TITLE_NAME, __scopeDialog);\n const { setTitleCount } = context;\n useLayoutEffect(() => {\n setTitleCount((count) => count + 1);\n return () => setTitleCount((count) => count - 1);\n }, [setTitleCount]);\n return /* @__PURE__ */ jsx(Primitive.h2, { id: context.titleId, ...titleProps, ref: forwardedRef });\n }, \"DialogTitle\")\n);\nvar DESCRIPTION_NAME = \"DialogDescription\";\nvar DialogDescription = /* @__PURE__ */ React.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function DialogDescription2(props, forwardedRef) {\n const { __scopeDialog, ...descriptionProps } = props;\n const context = useDialogContext(DESCRIPTION_NAME, __scopeDialog);\n const { setDescriptionCount } = context;\n useLayoutEffect(() => {\n setDescriptionCount((count) => count + 1);\n return () => setDescriptionCount((count) => count - 1);\n }, [setDescriptionCount]);\n return /* @__PURE__ */ jsx(Primitive.p, { id: context.descriptionId, ...descriptionProps, ref: forwardedRef });\n }, \"DialogDescription\")\n);\nvar CLOSE_NAME = \"DialogClose\";\nvar DialogClose = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function DialogClose2(props, forwardedRef) {\n const { __scopeDialog, ...closeProps } = props;\n const context = useDialogContext(CLOSE_NAME, __scopeDialog);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n ...closeProps,\n ref: forwardedRef,\n onClick: composeEventHandlers(props.onClick, () => context.onOpenChange(false))\n }\n );\n }, \"DialogClose\")\n);\nvar WarningProvider = /* @__PURE__ */ __name((props) => {\n return props.children;\n}, \"WarningProvider\");\nfunction getState(open) {\n return open ? \"open\" : \"closed\";\n}\n__name(getState, \"getState\");\nexport {\n DialogClose as Close,\n DialogContent as Content,\n DialogDescription as Description,\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n DialogOverlay as Overlay,\n DialogPortal as Portal,\n Dialog as Root,\n DialogTitle as Title,\n DialogTrigger as Trigger,\n WarningProvider,\n createDialogScope\n};\n//# sourceMappingURL=index.mjs.map\n","import {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type HTMLAttributes,\n} from \"react\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { X } from \"lucide-react\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst Dialog = DialogPrimitive.Root;\n\nconst DialogTrigger = DialogPrimitive.Trigger;\n\nconst DialogPortal = DialogPrimitive.Portal;\n\nconst DialogOverlay = forwardRef<\n ElementRef<typeof DialogPrimitive.Overlay>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n \"eloq:fixed eloq:inset-0 eloq:z-50 eloq:bg-black/80 eloq:data-[state=open]:animate-dialog-overlay-in eloq:data-[state=closed]:animate-dialog-overlay-out\",\n className,\n )}\n {...props}\n />\n));\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName;\n\nconst DialogContent = forwardRef<\n ElementRef<typeof DialogPrimitive.Content>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n \"eloq:fixed eloq:left-[50%] eloq:top-[50%] eloq:z-50 eloq:grid eloq:w-full eloq:max-w-lg eloq:translate-x-[-50%] eloq:translate-y-[-50%] eloq:gap-4 eloq:border eloq:bg-background eloq:p-6 eloq:shadow-lg eloq:data-[state=open]:animate-dialog-content-in eloq:data-[state=closed]:animate-dialog-content-out eloq:sm:rounded-lg\",\n className,\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close\n className={cn(\n // Placement + surface\n \"eloq:absolute eloq:right-4 eloq:top-4 eloq:rounded-sm eloq:bg-white/90 eloq:dark:bg-card/90 eloq:dark:text-foreground\",\n // Hover / disabled affordances\n \"eloq:opacity-70 eloq:transition-opacity eloq:hover:opacity-100 eloq:disabled:pointer-events-none\",\n // Focus ring\n \"eloq:ring-offset-background eloq:focus:outline-none eloq:focus:ring-2 eloq:focus:ring-ring eloq:focus:ring-offset-2\",\n // Radix open state\n \"eloq:data-[state=open]:bg-accent eloq:data-[state=open]:text-muted-foreground\",\n )}\n >\n <X className=\"eloq:h-4 eloq:w-4\" />\n <span className=\"eloq:sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPortal>\n));\nDialogContent.displayName = DialogPrimitive.Content.displayName;\n\nconst DialogHeader = ({\n className,\n ...props\n}: HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"eloq:flex eloq:flex-col eloq:space-y-1.5 eloq:text-center eloq:sm:text-left\",\n className,\n )}\n {...props}\n />\n);\nDialogHeader.displayName = \"DialogHeader\";\n\nconst DialogFooter = ({\n className,\n ...props\n}: HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"eloq:flex eloq:flex-col-reverse eloq:sm:flex-row eloq:sm:justify-end eloq:sm:space-x-2\",\n className,\n )}\n {...props}\n />\n);\nDialogFooter.displayName = \"DialogFooter\";\n\nconst DialogTitle = forwardRef<\n ElementRef<typeof DialogPrimitive.Title>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\n \"eloq:text-lg eloq:font-semibold eloq:leading-none eloq:tracking-tight\",\n className,\n )}\n {...props}\n />\n));\nDialogTitle.displayName = DialogPrimitive.Title.displayName;\n\nconst DialogDescription = forwardRef<\n ElementRef<typeof DialogPrimitive.Description>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn(\"eloq:text-sm eloq:text-muted-foreground\", className)}\n {...props}\n />\n));\nDialogDescription.displayName = DialogPrimitive.Description.displayName;\n\nexport {\n Dialog,\n DialogPortal,\n DialogOverlay,\n DialogTrigger,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n};\n","\"use client\";\n\nimport { PropsWithChildren, createContext, useContext } from \"react\";\n\nimport { ChatInterfaceProps } from \"@/components/chat-interface\";\n\nconst ChatContext = createContext<ChatInterfaceProps | undefined>(undefined);\n\nexport function ChatInterfaceProvider({\n children,\n ...props\n}: PropsWithChildren<ChatInterfaceProps>) {\n return <ChatContext.Provider value={props}>{children}</ChatContext.Provider>;\n}\n\n// eslint-disable-next-line react-refresh/only-export-components\nexport function useChatInterfaceContext() {\n const context = useContext(ChatContext);\n if (!context) {\n throw new Error(\n \"useChatInterfaceContext must be used within a ChatInterfaceProvider\",\n );\n }\n return context;\n}\n\nexport { ChatContext, type ChatInterfaceProps };\n","import { cn } from \"@/lib/utils\";\n\n/**\n * Header row layout, shared between the real header and its loading skeleton\n * so the skeleton cannot drift out of alignment with what it mimics.\n */\nexport const headerRowClassName =\n \"eloq:p-4 eloq:flex eloq:flex-row eloq:items-center eloq:justify-between eloq:space-y-0\";\n\n/** Avatar + title cluster on the left side of the header row. */\nexport const headerTitleGroupClassName =\n \"eloq:flex eloq:flex-row eloq:items-center eloq:space-x-3\";\n\n/** Secondary text beside a title (header subtitle, bubble assistant name). */\nexport const subtitleTextClassName =\n \"eloq:text-xs eloq:text-gray-500 eloq:dark:text-muted-foreground\";\n\nexport const cardContainerClassName = ({\n isOpen,\n isMobile,\n skipAnimation = false,\n}: {\n isOpen: boolean;\n isMobile: boolean | undefined;\n skipAnimation?: boolean;\n}) => {\n return cn(\n \"eloq:w-full eloq:h-full eloq:flex eloq:flex-col eloq:overflow-hidden eloq:origin-bottom-right\",\n {\n \"eloq:animate-panel-in\": isOpen && !skipAnimation,\n \"eloq:animate-panel-out\": !isOpen && !skipAnimation,\n \"eloq:scale-100 eloq:opacity-100\": isOpen && skipAnimation,\n \"eloq:scale-[0.05] eloq:opacity-0\": !isOpen && skipAnimation,\n \"eloq:rounded-none eloq:border-0\": isMobile,\n \"eloq:rounded-2xl eloq:border\": !isMobile,\n },\n );\n};\n","import { useEffect, useRef, useState } from \"react\";\n\nconst CHARACTER_INTERVAL_MILLISECONDS = 18;\n\n/** Matches the media query once, without subscribing — the label is short-lived. */\nfunction prefersReducedMotion() {\n return (\n typeof window !== \"undefined\" &&\n typeof window.matchMedia === \"function\" &&\n window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches\n );\n}\n\n/**\n * Reveals `text` one character at a time, restarting whenever the text changes.\n *\n * Distinct from message rendering, which reveals whole messages at once: cognition\n * labels are a few words that replace each other, so typing them in is what\n * makes the swap read as the agent moving on to the next step rather than the\n * text glitching.\n *\n * Returns the full text immediately when the reader prefers reduced motion.\n */\nexport function useTypedText(text: string, isEnabled = true): string {\n const [visibleCharacterCount, setVisibleCharacterCount] = useState(0);\n const isInstant = useRef(prefersReducedMotion());\n\n useEffect(() => {\n if (!isEnabled || isInstant.current) {\n setVisibleCharacterCount(text.length);\n return;\n }\n\n setVisibleCharacterCount(0);\n const intervalId = setInterval(() => {\n setVisibleCharacterCount((count) => {\n if (count >= text.length) {\n clearInterval(intervalId);\n return count;\n }\n return count + 1;\n });\n }, CHARACTER_INTERVAL_MILLISECONDS);\n\n return () => clearInterval(intervalId);\n }, [text, isEnabled]);\n\n return text.slice(0, visibleCharacterCount);\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","/**\n * @typedef Options\n * Configuration.\n * @property {boolean | null | undefined} [jsx=false]\n * Support JSX identifiers (default: `false`).\n */\n\nconst startRe = /[$_\\p{ID_Start}]/u\nconst contRe = /[$_\\u{200C}\\u{200D}\\p{ID_Continue}]/u\nconst contReJsx = /[-$_\\u{200C}\\u{200D}\\p{ID_Continue}]/u\nconst nameRe = /^[$_\\p{ID_Start}][$_\\u{200C}\\u{200D}\\p{ID_Continue}]*$/u\nconst nameReJsx = /^[$_\\p{ID_Start}][-$_\\u{200C}\\u{200D}\\p{ID_Continue}]*$/u\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Checks if the given code point can start an identifier.\n *\n * @param {number | undefined} code\n * Code point to check.\n * @returns {boolean}\n * Whether `code` can start an identifier.\n */\n// Note: `undefined` is supported so you can pass the result from `''.codePointAt`.\nexport function start(code) {\n return code ? startRe.test(String.fromCodePoint(code)) : false\n}\n\n/**\n * Checks if the given code point can continue an identifier.\n *\n * @param {number | undefined} code\n * Code point to check.\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {boolean}\n * Whether `code` can continue an identifier.\n */\n// Note: `undefined` is supported so you can pass the result from `''.codePointAt`.\nexport function cont(code, options) {\n const settings = options || emptyOptions\n const re = settings.jsx ? contReJsx : contRe\n return code ? re.test(String.fromCodePoint(code)) : false\n}\n\n/**\n * Checks if the given value is a valid identifier name.\n *\n * @param {string} name\n * Identifier to check.\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {boolean}\n * Whether `name` can be an identifier.\n */\nexport function name(name, options) {\n const settings = options || emptyOptions\n const re = settings.jsx ? nameReJsx : nameRe\n return re.test(name)\n}\n","/**\n * @typedef {import('hast').Nodes} Nodes\n */\n\n// HTML whitespace expression.\n// See <https://infra.spec.whatwg.org/#ascii-whitespace>.\nconst re = /[ \\t\\n\\f\\r]/g\n\n/**\n * Check if the given value is *inter-element whitespace*.\n *\n * @param {Nodes | string} thing\n * Thing to check (`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`); if a node is passed it must be a `Text` node,\n * whose `value` field is checked.\n */\nexport function whitespace(thing) {\n return typeof thing === 'object'\n ? thing.type === 'text'\n ? empty(thing.value)\n : false\n : empty(thing)\n}\n\n/**\n * @param {string} value\n * @returns {boolean}\n */\nfunction empty(value) {\n return value.replace(re, '') === ''\n}\n","/**\n * @import {Schema as SchemaType, Space} from 'property-information'\n */\n\n/** @type {SchemaType} */\nexport class Schema {\n /**\n * @param {SchemaType['property']} property\n * Property.\n * @param {SchemaType['normal']} normal\n * Normal.\n * @param {Space | undefined} [space]\n * Space.\n * @returns\n * Schema.\n */\n constructor(property, normal, space) {\n this.normal = normal\n this.property = property\n\n if (space) {\n this.space = space\n }\n }\n}\n\nSchema.prototype.normal = {}\nSchema.prototype.property = {}\nSchema.prototype.space = undefined\n","/**\n * @import {Info, Space} from 'property-information'\n */\n\nimport {Schema} from './schema.js'\n\n/**\n * @param {ReadonlyArray<Schema>} definitions\n * Definitions.\n * @param {Space | undefined} [space]\n * Space.\n * @returns {Schema}\n * Schema.\n */\nexport function merge(definitions, space) {\n /** @type {Record<string, Info>} */\n const property = {}\n /** @type {Record<string, string>} */\n const normal = {}\n\n for (const definition of definitions) {\n Object.assign(property, definition.property)\n Object.assign(normal, definition.normal)\n }\n\n return new Schema(property, normal, space)\n}\n","/**\n * Get the cleaned case insensitive form of an attribute or property.\n *\n * @param {string} value\n * An attribute-like or property-like name.\n * @returns {string}\n * Value that can be used to look up the properly cased property on a\n * `Schema`.\n */\nexport function normalize(value) {\n return value.toLowerCase()\n}\n","/**\n * @import {Info as InfoType} from 'property-information'\n */\n\n/** @type {InfoType} */\nexport class Info {\n /**\n * @param {string} property\n * Property.\n * @param {string} attribute\n * Attribute.\n * @returns\n * Info.\n */\n constructor(property, attribute) {\n this.attribute = attribute\n this.property = property\n }\n}\n\nInfo.prototype.attribute = ''\nInfo.prototype.booleanish = false\nInfo.prototype.boolean = false\nInfo.prototype.commaOrSpaceSeparated = false\nInfo.prototype.commaSeparated = false\nInfo.prototype.defined = false\nInfo.prototype.mustUseProperty = false\nInfo.prototype.number = false\nInfo.prototype.overloadedBoolean = false\nInfo.prototype.property = ''\nInfo.prototype.spaceSeparated = false\nInfo.prototype.space = undefined\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","/**\n * @import {Space} from 'property-information'\n */\n\nimport {Info} from './info.js'\nimport * as types from './types.js'\n\nconst checks = /** @type {ReadonlyArray<keyof typeof types>} */ (\n Object.keys(types)\n)\n\nexport class DefinedInfo extends Info {\n /**\n * @constructor\n * @param {string} property\n * Property.\n * @param {string} attribute\n * Attribute.\n * @param {number | null | undefined} [mask]\n * Mask.\n * @param {Space | undefined} [space]\n * Space.\n * @returns\n * Info.\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 * @template {keyof DefinedInfo} Key\n * Key type.\n * @param {DefinedInfo} values\n * Info.\n * @param {Key} key\n * Key.\n * @param {DefinedInfo[Key]} value\n * Value.\n * @returns {undefined}\n * Nothing.\n */\nfunction mark(values, key, value) {\n if (value) {\n values[key] = value\n }\n}\n","/**\n * @import {Info, Space} from 'property-information'\n */\n\n/**\n * @typedef Definition\n * Definition of a schema.\n * @property {Record<string, string> | undefined} [attributes]\n * Normalzed names to special attribute case.\n * @property {ReadonlyArray<string> | undefined} [mustUseProperty]\n * Normalized names that must be set as properties.\n * @property {Record<string, number | null>} properties\n * Property names to their types.\n * @property {Space | undefined} [space]\n * Space.\n * @property {Transform} transform\n * Transform a property name.\n */\n\n/**\n * @callback Transform\n * Transform.\n * @param {Record<string, string>} attributes\n * Attributes.\n * @param {string} property\n * Property.\n * @returns {string}\n * Attribute.\n */\n\nimport {normalize} from '../normalize.js'\nimport {DefinedInfo} from './defined-info.js'\nimport {Schema} from './schema.js'\n\n/**\n * @param {Definition} definition\n * Definition.\n * @returns {Schema}\n * Schema.\n */\nexport function create(definition) {\n /** @type {Record<string, Info>} */\n const properties = {}\n /** @type {Record<string, string>} */\n const normals = {}\n\n for (const [property, value] of Object.entries(definition.properties)) {\n const info = new DefinedInfo(\n property,\n definition.transform(definition.attributes || {}, property),\n value,\n definition.space\n )\n\n if (\n definition.mustUseProperty &&\n definition.mustUseProperty.includes(property)\n ) {\n info.mustUseProperty = true\n }\n\n properties[property] = info\n\n normals[normalize(property)] = property\n normals[normalize(info.attribute)] = property\n }\n\n return new Schema(properties, normals, definition.space)\n}\n","import {create} from './util/create.js'\nimport {booleanish, number, spaceSeparated} from './util/types.js'\n\nexport const aria = create({\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 transform(_, property) {\n return property === 'role'\n ? property\n : 'aria-' + property.slice(4).toLowerCase()\n }\n})\n","/**\n * @param {Record<string, string>} attributes\n * Attributes.\n * @param {string} attribute\n * Attribute.\n * @returns {string}\n * Transformed attribute.\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 * Attributes.\n * @param {string} property\n * Property.\n * @returns {string}\n * Transformed property.\n */\nexport function caseInsensitiveTransform(attributes, property) {\n return caseSensitiveTransform(attributes, property.toLowerCase())\n}\n","import {caseInsensitiveTransform} from './util/case-insensitive-transform.js'\nimport {create} from './util/create.js'\nimport {\n booleanish,\n boolean,\n commaSeparated,\n number,\n overloadedBoolean,\n spaceSeparated\n} from './util/types.js'\n\nexport const html = create({\n attributes: {\n acceptcharset: 'accept-charset',\n classname: 'class',\n htmlfor: 'for',\n httpequiv: 'http-equiv'\n },\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 alpha: 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 closedBy: null,\n colorSpace: null,\n cols: number,\n colSpan: number,\n command: null,\n commandFor: 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: overloadedBoolean,\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 shadowRootCustomElementRegistry: boolean,\n shadowRootDelegatesFocus: boolean,\n shadowRootMode: null,\n shadowRootSerializable: boolean,\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 credentialless: boolean,\n disablePictureInPicture: boolean,\n disableRemotePlayback: boolean,\n exportParts: commaSeparated,\n part: spaceSeparated,\n prefix: null,\n property: null,\n results: number,\n security: null,\n unselectable: null\n },\n space: 'html',\n transform: caseInsensitiveTransform\n})\n","import {caseSensitiveTransform} from './util/case-sensitive-transform.js'\nimport {create} from './util/create.js'\nimport {\n boolean,\n commaOrSpaceSeparated,\n commaSeparated,\n number,\n spaceSeparated\n} from './util/types.js'\n\nexport const svg = create({\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 maskType: 'mask-type',\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 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 maskType: 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 space: 'svg',\n transform: caseSensitiveTransform\n})\n","import {create} from './util/create.js'\n\nexport const xlink = create({\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 space: 'xlink',\n transform(_, property) {\n return 'xlink:' + property.slice(5).toLowerCase()\n }\n})\n","import {create} from './util/create.js'\nimport {caseInsensitiveTransform} from './util/case-insensitive-transform.js'\n\nexport const xmlns = create({\n attributes: {xmlnsxlink: 'xmlns:xlink'},\n properties: {xmlnsXLink: null, xmlns: null},\n space: 'xmlns',\n transform: caseInsensitiveTransform\n})\n","import {create} from './util/create.js'\n\nexport const xml = create({\n properties: {xmlBase: null, xmlLang: null, xmlSpace: null},\n space: 'xml',\n transform(_, property) {\n return 'xml:' + property.slice(3).toLowerCase()\n }\n})\n","/**\n * Special cases for React (`Record<string, string>`).\n *\n * `hast` is close to `React` but differs in a couple of cases.\n * To get a React property from a hast property,\n * check if it is in `hastToReact`.\n * If it is, 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 * @import {Schema} from 'property-information'\n */\n\nimport {DefinedInfo} from './util/defined-info.js'\nimport {Info} from './util/info.js'\nimport {normalize} from './normalize.js'\n\nconst cap = /[A-Z]/g\nconst dash = /-[a-z]/g\nconst valid = /^data[-\\w.:]+$/i\n\n/**\n * Look up info on a property.\n *\n * In most cases the given `schema` contains info on the property.\n * All standard,\n * most legacy,\n * and some non-standard properties are supported.\n * For these cases,\n * the returned `Info` has hints about the value of the property.\n *\n * `name` can also be a valid data attribute or property,\n * in which case an `Info` object with the correctly cased `attribute` and\n * `property` is returned.\n *\n * `name` can be an unknown attribute,\n * in which case an `Info` object with `attribute` and `property` set to the\n * given name is returned.\n * It is not recommended to provide unsupported legacy or recently specced\n * properties.\n *\n *\n * @param {Schema} schema\n * Schema;\n * either the `html` or `svg` export.\n * @param {string} value\n * An attribute-like or property-like name;\n * it will be passed through `normalize` to hopefully find the correct info.\n * @returns {Info}\n * Info.\n */\nexport function find(schema, value) {\n const normal = normalize(value)\n let property = 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 property = '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(property, value)\n}\n\n/**\n * @param {string} $0\n * Value.\n * @returns {string}\n * Kebab.\n */\nfunction kebab($0) {\n return '-' + $0.toLowerCase()\n}\n\n/**\n * @param {string} $0\n * Value.\n * @returns {string}\n * Camel.\n */\nfunction camelcase($0) {\n return $0.charAt(1).toUpperCase()\n}\n","// Note: types exposed from `index.d.ts`.\nimport {merge} from './lib/util/merge.js'\nimport {aria} from './lib/aria.js'\nimport {html as htmlBase} from './lib/html.js'\nimport {svg as svgBase} from './lib/svg.js'\nimport {xlink} from './lib/xlink.js'\nimport {xmlns} from './lib/xmlns.js'\nimport {xml} from './lib/xml.js'\n\nexport {hastToReact} from './lib/hast-to-react.js'\n\nexport const html = merge([aria, htmlBase, xlink, xmlns, xml], 'html')\n\nexport {find} from './lib/find.js'\nexport {normalize} from './lib/normalize.js'\n\nexport const svg = merge([aria, svgBase, xlink, xmlns, xml], 'svg')\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","'use strict';\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 */\nfunction index (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 /**\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) ; 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\nmodule.exports = index;\n//# sourceMappingURL=index.js.map\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = StyleToObject;\nconst inline_style_parser_1 = __importDefault(require(\"inline-style-parser\"));\n/**\n * Parses inline style to object.\n *\n * @param style - Inline style.\n * @param iterator - Iterator.\n * @returns - Style object or null.\n *\n * @example Parsing inline style to object:\n *\n * ```js\n * import parse from 'style-to-object';\n * parse('line-height: 42;'); // { 'line-height': '42' }\n * ```\n */\nfunction StyleToObject(style, iterator) {\n let styleObject = null;\n if (!style || typeof style !== 'string') {\n return styleObject;\n }\n const declarations = (0, inline_style_parser_1.default)(style);\n const hasIterator = typeof iterator === 'function';\n declarations.forEach((declaration) => {\n if (declaration.type !== 'declaration') {\n return;\n }\n const { property, value } = declaration;\n if (hasIterator) {\n iterator(property, value, declaration);\n }\n else if (value) {\n styleObject = styleObject || {};\n styleObject[property] = value;\n }\n });\n return styleObject;\n}\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.camelCase = void 0;\nvar CUSTOM_PROPERTY_REGEX = /^--[a-zA-Z0-9_-]+$/;\nvar HYPHEN_REGEX = /-([a-z])/g;\nvar NO_HYPHEN_REGEX = /^[^-]+$/;\nvar VENDOR_PREFIX_REGEX = /^-(webkit|moz|ms|o|khtml)-/;\nvar MS_VENDOR_PREFIX_REGEX = /^-(ms)-/;\n/**\n * Checks whether to skip camelCase.\n */\nvar skipCamelCase = function (property) {\n return !property ||\n NO_HYPHEN_REGEX.test(property) ||\n CUSTOM_PROPERTY_REGEX.test(property);\n};\n/**\n * Replacer that capitalizes first character.\n */\nvar capitalize = function (match, character) {\n return character.toUpperCase();\n};\n/**\n * Replacer that removes beginning hyphen of vendor prefix property.\n */\nvar trimHyphen = function (match, prefix) { return \"\".concat(prefix, \"-\"); };\n/**\n * CamelCases a CSS property.\n */\nvar camelCase = function (property, options) {\n if (options === void 0) { options = {}; }\n if (skipCamelCase(property)) {\n return property;\n }\n property = property.toLowerCase();\n if (options.reactCompat) {\n // `-ms` vendor prefix should not be capitalized\n property = property.replace(MS_VENDOR_PREFIX_REGEX, trimHyphen);\n }\n else {\n // for non-React, remove first hyphen so vendor prefix is not capitalized\n property = property.replace(VENDOR_PREFIX_REGEX, trimHyphen);\n }\n return property.replace(HYPHEN_REGEX, capitalize);\n};\nexports.camelCase = camelCase;\n//# sourceMappingURL=utilities.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nvar style_to_object_1 = __importDefault(require(\"style-to-object\"));\nvar utilities_1 = require(\"./utilities\");\n/**\n * Parses CSS inline style to JavaScript object (camelCased).\n */\nfunction StyleToJS(style, options) {\n var output = {};\n if (!style || typeof style !== 'string') {\n return output;\n }\n (0, style_to_object_1.default)(style, function (property, value) {\n // skip CSS comment\n if (property && value) {\n output[(0, utilities_1.camelCase)(property, options)] = value;\n }\n });\n return output;\n}\nStyleToJS.default = StyleToJS;\nmodule.exports = StyleToJS;\n//# sourceMappingURL=index.js.map","/**\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 * 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 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 positional info of `node`.\n *\n * @param {'end' | 'start'} 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 {Node | NodeLike | null | undefined} [node]\n * @returns {Point | undefined}\n */\n function point(node) {\n const point = (node && node.position && node.position[type]) || {}\n\n if (\n typeof point.line === 'number' &&\n point.line > 0 &&\n typeof point.column === 'number' &&\n point.column > 0\n ) {\n return {\n line: point.line,\n column: point.column,\n offset:\n typeof point.offset === 'number' && point.offset > -1\n ? point.offset\n : undefined\n }\n }\n }\n}\n\n/**\n * Get the positional info of `node`.\n *\n * @param {Node | NodeLike | null | undefined} [node]\n * Node.\n * @returns {Position | undefined}\n * Position.\n */\nexport function position(node) {\n const start = pointStart(node)\n const end = pointEnd(node)\n\n if (start && end) {\n return {start, end}\n }\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 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\n/**\n * Serialize the positional info of a point, position (start and end points),\n * or node.\n *\n * @param {Node | NodeLike | Point | PointLike | Position | PositionLike | 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 * @import {Node, Point, Position} from 'unist'\n */\n\n/**\n * @typedef {object & {type: string, position?: Position | undefined}} NodeLike\n *\n * @typedef Options\n * Configuration.\n * @property {Array<Node> | null | undefined} [ancestors]\n * Stack of (inclusive) ancestor nodes surrounding the message (optional).\n * @property {Error | null | undefined} [cause]\n * Original error cause of the message (optional).\n * @property {Point | Position | null | undefined} [place]\n * Place of message (optional).\n * @property {string | null | undefined} [ruleId]\n * Category of message (optional, example: `'my-rule'`).\n * @property {string | null | undefined} [source]\n * Namespace of who sent the message (optional, example: `'my-package'`).\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`.\n *\n * > 🪦 **Note**: also has obsolete signatures.\n *\n * @overload\n * @param {string} reason\n * @param {Options | null | undefined} [options]\n * @returns\n *\n * @overload\n * @param {string} reason\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns\n *\n * @overload\n * @param {string} reason\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns\n *\n * @overload\n * @param {string} reason\n * @param {string | null | undefined} [origin]\n * @returns\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {string | null | undefined} [origin]\n * @returns\n *\n * @param {Error | VFileMessage | string} causeOrReason\n * Reason for message, should use markdown.\n * @param {Node | NodeLike | Options | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n * Configuration (optional).\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 // eslint-disable-next-line complexity\n constructor(causeOrReason, optionsOrParentOrPlace, origin) {\n super()\n\n if (typeof optionsOrParentOrPlace === 'string') {\n origin = optionsOrParentOrPlace\n optionsOrParentOrPlace = undefined\n }\n\n /** @type {string} */\n let reason = ''\n /** @type {Options} */\n let options = {}\n let legacyCause = false\n\n if (optionsOrParentOrPlace) {\n // Point.\n if (\n 'line' in optionsOrParentOrPlace &&\n 'column' in optionsOrParentOrPlace\n ) {\n options = {place: optionsOrParentOrPlace}\n }\n // Position.\n else if (\n 'start' in optionsOrParentOrPlace &&\n 'end' in optionsOrParentOrPlace\n ) {\n options = {place: optionsOrParentOrPlace}\n }\n // Node.\n else if ('type' in optionsOrParentOrPlace) {\n options = {\n ancestors: [optionsOrParentOrPlace],\n place: optionsOrParentOrPlace.position\n }\n }\n // Options.\n else {\n options = {...optionsOrParentOrPlace}\n }\n }\n\n if (typeof causeOrReason === 'string') {\n reason = causeOrReason\n }\n // Error.\n else if (!options.cause && causeOrReason) {\n legacyCause = true\n reason = causeOrReason.message\n options.cause = causeOrReason\n }\n\n if (!options.ruleId && !options.source && typeof origin === 'string') {\n const index = origin.indexOf(':')\n\n if (index === -1) {\n options.ruleId = origin\n } else {\n options.source = origin.slice(0, index)\n options.ruleId = origin.slice(index + 1)\n }\n }\n\n if (!options.place && options.ancestors && options.ancestors) {\n const parent = options.ancestors[options.ancestors.length - 1]\n\n if (parent) {\n options.place = parent.position\n }\n }\n\n const start =\n options.place && 'start' in options.place\n ? options.place.start\n : options.place\n\n /**\n * Stack of ancestor nodes surrounding the message.\n *\n * @type {Array<Node> | undefined}\n */\n this.ancestors = options.ancestors || undefined\n\n /**\n * Original error cause of the message.\n *\n * @type {Error | undefined}\n */\n this.cause = options.cause || undefined\n\n /**\n * Starting column of message.\n *\n * @type {number | undefined}\n */\n this.column = start ? start.column : undefined\n\n /**\n * State of problem.\n *\n * * `true` — error, file not usable\n * * `false` — warning, change may be needed\n * * `undefined` — change likely not needed\n *\n * @type {boolean | null | undefined}\n */\n this.fatal = undefined\n\n /**\n * Path of a file (used throughout the `VFile` ecosystem).\n *\n * @type {string | undefined}\n */\n this.file = ''\n\n // Field from `Error`.\n /**\n * Reason for message.\n *\n * @type {string}\n */\n this.message = reason\n\n /**\n * Starting line of error.\n *\n * @type {number | undefined}\n */\n this.line = start ? start.line : undefined\n\n // Field from `Error`.\n /**\n * Serialized positional info of message.\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(options.place) || '1:1'\n\n /**\n * Place of message.\n *\n * @type {Point | Position | undefined}\n */\n this.place = options.place || undefined\n\n /**\n * Reason for message, should use markdown.\n *\n * @type {string}\n */\n this.reason = this.message\n\n /**\n * Category of message (example: `'my-rule'`).\n *\n * @type {string | undefined}\n */\n this.ruleId = options.ruleId || undefined\n\n /**\n * Namespace of message (example: `'my-package'`).\n *\n * @type {string | undefined}\n */\n this.source = options.source || undefined\n\n // Field from `Error`.\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 legacyCause && options.cause && typeof options.cause.stack === 'string'\n ? options.cause.stack\n : ''\n\n // The following fields are “well known”.\n // Not standard.\n // Feel free to add other non-standard fields to your messages.\n\n /**\n * Specify the source value that’s being reported, which is deemed\n * incorrect.\n *\n * @type {string | undefined}\n */\n this.actual = undefined\n\n /**\n * Suggest acceptable values that can be used instead of `actual`.\n *\n * @type {Array<string> | undefined}\n */\n this.expected = undefined\n\n /**\n * Long form description of the message (you should use markdown).\n *\n * @type {string | undefined}\n */\n this.note = undefined\n\n /**\n * Link to docs for the message.\n *\n * > 👉 **Note**: this must be an absolute URL that can be passed as `x`\n * > to `new URL(x)`.\n *\n * @type {string | undefined}\n */\n this.url = undefined\n }\n}\n\nVFileMessage.prototype.file = ''\nVFileMessage.prototype.name = ''\nVFileMessage.prototype.reason = ''\nVFileMessage.prototype.message = ''\nVFileMessage.prototype.stack = ''\nVFileMessage.prototype.column = undefined\nVFileMessage.prototype.line = undefined\nVFileMessage.prototype.ancestors = undefined\nVFileMessage.prototype.cause = undefined\nVFileMessage.prototype.fatal = undefined\nVFileMessage.prototype.place = undefined\nVFileMessage.prototype.ruleId = undefined\nVFileMessage.prototype.source = undefined\n","/**\n * @import {Identifier, Literal, MemberExpression} from 'estree'\n * @import {Jsx, JsxDev, Options, Props} from 'hast-util-to-jsx-runtime'\n * @import {Element, Nodes, Parents, Root, Text} from 'hast'\n * @import {MdxFlowExpressionHast, MdxTextExpressionHast} from 'mdast-util-mdx-expression'\n * @import {MdxJsxFlowElementHast, MdxJsxTextElementHast} from 'mdast-util-mdx-jsx'\n * @import {MdxjsEsmHast} from 'mdast-util-mdxjs-esm'\n * @import {Position} from 'unist'\n * @import {Child, Create, Field, JsxElement, State, Style} from './types.js'\n */\n\nimport {stringify as commas} from 'comma-separated-tokens'\nimport {ok as assert} from 'devlop'\nimport {name as isIdentifierName} from 'estree-util-is-identifier-name'\nimport {whitespace} from 'hast-util-whitespace'\nimport {find, hastToReact, html, svg} from 'property-information'\nimport {stringify as spaces} from 'space-separated-tokens'\nimport styleToJs from 'style-to-js'\nimport {pointStart} from 'unist-util-position'\nimport {VFileMessage} from 'vfile-message'\n\n// To do: next major: `Object.hasOwn`.\nconst own = {}.hasOwnProperty\n\n/** @type {Map<string, number>} */\nconst emptyMap = new Map()\n\nconst cap = /[A-Z]/g\n\n// `react-dom` triggers a warning for *any* white space in tables.\n// To follow GFM, `mdast-util-to-hast` injects line endings between elements.\n// Other tools might do so too, but they don’t do here, so we remove all of\n// that.\n\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/rehypejs/rehype-react/pull/29>.\n// See: <https://github.com/rehypejs/rehype-react/pull/32>.\n// See: <https://github.com/rehypejs/rehype-react/pull/45>.\nconst tableElements = new Set(['table', 'tbody', 'thead', 'tfoot', 'tr'])\n\nconst tableCellElement = new Set(['td', 'th'])\n\nconst docs = 'https://github.com/syntax-tree/hast-util-to-jsx-runtime'\n\n/**\n * Transform a hast tree to preact, react, solid, svelte, vue, etc.,\n * with an automatic JSX runtime.\n *\n * @param {Nodes} tree\n * Tree to transform.\n * @param {Options} options\n * Configuration (required).\n * @returns {JsxElement}\n * JSX element.\n */\n\nexport function toJsxRuntime(tree, options) {\n if (!options || options.Fragment === undefined) {\n throw new TypeError('Expected `Fragment` in options')\n }\n\n const filePath = options.filePath || undefined\n /** @type {Create} */\n let create\n\n if (options.development) {\n if (typeof options.jsxDEV !== 'function') {\n throw new TypeError(\n 'Expected `jsxDEV` in options when `development: true`'\n )\n }\n\n create = developmentCreate(filePath, options.jsxDEV)\n } else {\n if (typeof options.jsx !== 'function') {\n throw new TypeError('Expected `jsx` in production options')\n }\n\n if (typeof options.jsxs !== 'function') {\n throw new TypeError('Expected `jsxs` in production options')\n }\n\n create = productionCreate(filePath, options.jsx, options.jsxs)\n }\n\n /** @type {State} */\n const state = {\n Fragment: options.Fragment,\n ancestors: [],\n components: options.components || {},\n create,\n elementAttributeNameCase: options.elementAttributeNameCase || 'react',\n evaluater: options.createEvaluater ? options.createEvaluater() : undefined,\n filePath,\n ignoreInvalidStyle: options.ignoreInvalidStyle || false,\n passKeys: options.passKeys !== false,\n passNode: options.passNode || false,\n schema: options.space === 'svg' ? svg : html,\n stylePropertyNameCase: options.stylePropertyNameCase || 'dom',\n tableCellAlignToStyle: options.tableCellAlignToStyle !== false\n }\n\n const result = one(state, tree, undefined)\n\n // JSX element.\n if (result && typeof result !== 'string') {\n return result\n }\n\n // Text node or something that turned into nothing.\n return state.create(\n tree,\n state.Fragment,\n {children: result || undefined},\n undefined\n )\n}\n\n/**\n * Transform a node.\n *\n * @param {State} state\n * Info passed around.\n * @param {Nodes} node\n * Current node.\n * @param {string | undefined} key\n * Key.\n * @returns {Child | undefined}\n * Child, optional.\n */\nfunction one(state, node, key) {\n if (node.type === 'element') {\n return element(state, node, key)\n }\n\n if (node.type === 'mdxFlowExpression' || node.type === 'mdxTextExpression') {\n return mdxExpression(state, node)\n }\n\n if (node.type === 'mdxJsxFlowElement' || node.type === 'mdxJsxTextElement') {\n return mdxJsxElement(state, node, key)\n }\n\n if (node.type === 'mdxjsEsm') {\n return mdxEsm(state, node)\n }\n\n if (node.type === 'root') {\n return root(state, node, key)\n }\n\n if (node.type === 'text') {\n return text(state, node)\n }\n}\n\n/**\n * Handle element.\n *\n * @param {State} state\n * Info passed around.\n * @param {Element} node\n * Current node.\n * @param {string | undefined} key\n * Key.\n * @returns {Child | undefined}\n * Child, optional.\n */\nfunction element(state, node, key) {\n const parentSchema = state.schema\n let schema = parentSchema\n\n if (node.tagName.toLowerCase() === 'svg' && parentSchema.space === 'html') {\n schema = svg\n state.schema = schema\n }\n\n state.ancestors.push(node)\n\n const type = findComponentFromName(state, node.tagName, false)\n const props = createElementProps(state, node)\n let children = createChildren(state, node)\n\n if (tableElements.has(node.tagName)) {\n children = children.filter(function (child) {\n return typeof child === 'string' ? !whitespace(child) : true\n })\n }\n\n addNode(state, props, type, node)\n addChildren(props, children)\n\n // Restore.\n state.ancestors.pop()\n state.schema = parentSchema\n\n return state.create(node, type, props, key)\n}\n\n/**\n * Handle MDX expression.\n *\n * @param {State} state\n * Info passed around.\n * @param {MdxFlowExpressionHast | MdxTextExpressionHast} node\n * Current node.\n * @returns {Child | undefined}\n * Child, optional.\n */\nfunction mdxExpression(state, node) {\n if (node.data && node.data.estree && state.evaluater) {\n const program = node.data.estree\n const expression = program.body[0]\n assert(expression.type === 'ExpressionStatement')\n\n // Assume result is a child.\n return /** @type {Child | undefined} */ (\n state.evaluater.evaluateExpression(expression.expression)\n )\n }\n\n crashEstree(state, node.position)\n}\n\n/**\n * Handle MDX ESM.\n *\n * @param {State} state\n * Info passed around.\n * @param {MdxjsEsmHast} node\n * Current node.\n * @returns {Child | undefined}\n * Child, optional.\n */\nfunction mdxEsm(state, node) {\n if (node.data && node.data.estree && state.evaluater) {\n // Assume result is a child.\n return /** @type {Child | undefined} */ (\n state.evaluater.evaluateProgram(node.data.estree)\n )\n }\n\n crashEstree(state, node.position)\n}\n\n/**\n * Handle MDX JSX.\n *\n * @param {State} state\n * Info passed around.\n * @param {MdxJsxFlowElementHast | MdxJsxTextElementHast} node\n * Current node.\n * @param {string | undefined} key\n * Key.\n * @returns {Child | undefined}\n * Child, optional.\n */\nfunction mdxJsxElement(state, node, key) {\n const parentSchema = state.schema\n let schema = parentSchema\n\n if (node.name === 'svg' && parentSchema.space === 'html') {\n schema = svg\n state.schema = schema\n }\n\n state.ancestors.push(node)\n\n const type =\n node.name === null\n ? state.Fragment\n : findComponentFromName(state, node.name, true)\n const props = createJsxElementProps(state, node)\n const children = createChildren(state, node)\n\n addNode(state, props, type, node)\n addChildren(props, children)\n\n // Restore.\n state.ancestors.pop()\n state.schema = parentSchema\n\n return state.create(node, type, props, key)\n}\n\n/**\n * Handle root.\n *\n * @param {State} state\n * Info passed around.\n * @param {Root} node\n * Current node.\n * @param {string | undefined} key\n * Key.\n * @returns {Child | undefined}\n * Child, optional.\n */\nfunction root(state, node, key) {\n /** @type {Props} */\n const props = {}\n\n addChildren(props, createChildren(state, node))\n\n return state.create(node, state.Fragment, props, key)\n}\n\n/**\n * Handle text.\n *\n * @param {State} _\n * Info passed around.\n * @param {Text} node\n * Current node.\n * @returns {Child | undefined}\n * Child, optional.\n */\nfunction text(_, node) {\n return node.value\n}\n\n/**\n * Add `node` to props.\n *\n * @param {State} state\n * Info passed around.\n * @param {Props} props\n * Props.\n * @param {unknown} type\n * Type.\n * @param {Element | MdxJsxFlowElementHast | MdxJsxTextElementHast} node\n * Node.\n * @returns {undefined}\n * Nothing.\n */\nfunction addNode(state, props, type, node) {\n // If this is swapped out for a component:\n if (typeof type !== 'string' && type !== state.Fragment && state.passNode) {\n props.node = node\n }\n}\n\n/**\n * Add children to props.\n *\n * @param {Props} props\n * Props.\n * @param {Array<Child>} children\n * Children.\n * @returns {undefined}\n * Nothing.\n */\nfunction addChildren(props, children) {\n if (children.length > 0) {\n const value = children.length > 1 ? children : children[0]\n\n if (value) {\n props.children = value\n }\n }\n}\n\n/**\n * @param {string | undefined} _\n * Path to file.\n * @param {Jsx} jsx\n * Dynamic.\n * @param {Jsx} jsxs\n * Static.\n * @returns {Create}\n * Create a production element.\n */\nfunction productionCreate(_, jsx, jsxs) {\n return create\n /** @type {Create} */\n function create(_, type, props, key) {\n // Only an array when there are 2 or more children.\n const isStaticChildren = Array.isArray(props.children)\n const fn = isStaticChildren ? jsxs : jsx\n return key ? fn(type, props, key) : fn(type, props)\n }\n}\n\n/**\n * @param {string | undefined} filePath\n * Path to file.\n * @param {JsxDev} jsxDEV\n * Development.\n * @returns {Create}\n * Create a development element.\n */\nfunction developmentCreate(filePath, jsxDEV) {\n return create\n /** @type {Create} */\n function create(node, type, props, key) {\n // Only an array when there are 2 or more children.\n const isStaticChildren = Array.isArray(props.children)\n const point = pointStart(node)\n return jsxDEV(\n type,\n props,\n key,\n isStaticChildren,\n {\n columnNumber: point ? point.column - 1 : undefined,\n fileName: filePath,\n lineNumber: point ? point.line : undefined\n },\n undefined\n )\n }\n}\n\n/**\n * Create props from an element.\n *\n * @param {State} state\n * Info passed around.\n * @param {Element} node\n * Current element.\n * @returns {Props}\n * Props.\n */\nfunction createElementProps(state, node) {\n /** @type {Props} */\n const props = {}\n /** @type {string | undefined} */\n let alignValue\n /** @type {string} */\n let prop\n\n for (prop in node.properties) {\n if (prop !== 'children' && own.call(node.properties, prop)) {\n const result = createProperty(state, prop, node.properties[prop])\n\n if (result) {\n const [key, value] = result\n\n if (\n state.tableCellAlignToStyle &&\n key === 'align' &&\n typeof value === 'string' &&\n tableCellElement.has(node.tagName)\n ) {\n alignValue = value\n } else {\n props[key] = value\n }\n }\n }\n }\n\n if (alignValue) {\n // Assume style is an object.\n const style = /** @type {Style} */ (props.style || (props.style = {}))\n style[state.stylePropertyNameCase === 'css' ? 'text-align' : 'textAlign'] =\n alignValue\n }\n\n return props\n}\n\n/**\n * Create props from a JSX element.\n *\n * @param {State} state\n * Info passed around.\n * @param {MdxJsxFlowElementHast | MdxJsxTextElementHast} node\n * Current JSX element.\n * @returns {Props}\n * Props.\n */\nfunction createJsxElementProps(state, node) {\n /** @type {Props} */\n const props = {}\n\n for (const attribute of node.attributes) {\n if (attribute.type === 'mdxJsxExpressionAttribute') {\n if (attribute.data && attribute.data.estree && state.evaluater) {\n const program = attribute.data.estree\n const expression = program.body[0]\n assert(expression.type === 'ExpressionStatement')\n const objectExpression = expression.expression\n assert(objectExpression.type === 'ObjectExpression')\n const property = objectExpression.properties[0]\n assert(property.type === 'SpreadElement')\n\n Object.assign(\n props,\n state.evaluater.evaluateExpression(property.argument)\n )\n } else {\n crashEstree(state, node.position)\n }\n } else {\n // For JSX, the author is responsible of passing in the correct values.\n const name = attribute.name\n /** @type {unknown} */\n let value\n\n if (attribute.value && typeof attribute.value === 'object') {\n if (\n attribute.value.data &&\n attribute.value.data.estree &&\n state.evaluater\n ) {\n const program = attribute.value.data.estree\n const expression = program.body[0]\n assert(expression.type === 'ExpressionStatement')\n value = state.evaluater.evaluateExpression(expression.expression)\n } else {\n crashEstree(state, node.position)\n }\n } else {\n value = attribute.value === null ? true : attribute.value\n }\n\n // Assume a prop.\n props[name] = /** @type {Props[keyof Props]} */ (value)\n }\n }\n\n return props\n}\n\n/**\n * Create children.\n *\n * @param {State} state\n * Info passed around.\n * @param {Parents} node\n * Current element.\n * @returns {Array<Child>}\n * Children.\n */\nfunction createChildren(state, node) {\n /** @type {Array<Child>} */\n const children = []\n let index = -1\n /** @type {Map<string, number>} */\n // Note: test this when Solid doesn’t want to merge my upcoming PR.\n /* c8 ignore next */\n const countsByName = state.passKeys ? new Map() : emptyMap\n\n while (++index < node.children.length) {\n const child = node.children[index]\n /** @type {string | undefined} */\n let key\n\n if (state.passKeys) {\n const name =\n child.type === 'element'\n ? child.tagName\n : child.type === 'mdxJsxFlowElement' ||\n child.type === 'mdxJsxTextElement'\n ? child.name\n : undefined\n\n if (name) {\n const count = countsByName.get(name) || 0\n key = name + '-' + count\n countsByName.set(name, count + 1)\n }\n }\n\n const result = one(state, child, key)\n if (result !== undefined) children.push(result)\n }\n\n return children\n}\n\n/**\n * Handle a property.\n *\n * @param {State} state\n * Info passed around.\n * @param {string} prop\n * Key.\n * @param {Array<number | string> | boolean | number | string | null | undefined} value\n * hast property value.\n * @returns {Field | undefined}\n * Field for runtime, optional.\n */\nfunction createProperty(state, prop, value) {\n const info = find(state.schema, prop)\n\n // Ignore nullish and `NaN` values.\n if (\n value === null ||\n value === undefined ||\n (typeof value === 'number' && Number.isNaN(value))\n ) {\n return\n }\n\n if (Array.isArray(value)) {\n // Accept `array`.\n // Most props are space-separated.\n value = info.commaSeparated ? commas(value) : spaces(value)\n }\n\n // React only accepts `style` as object.\n if (info.property === 'style') {\n let styleObject =\n typeof value === 'object' ? value : parseStyle(state, String(value))\n\n if (state.stylePropertyNameCase === 'css') {\n styleObject = transformStylesToCssCasing(styleObject)\n }\n\n return ['style', styleObject]\n }\n\n return [\n state.elementAttributeNameCase === 'react' && info.space\n ? hastToReact[info.property] || info.property\n : info.attribute,\n value\n ]\n}\n\n/**\n * Parse a CSS declaration to an object.\n *\n * @param {State} state\n * Info passed around.\n * @param {string} value\n * CSS declarations.\n * @returns {Style}\n * Properties.\n * @throws\n * Throws `VFileMessage` when CSS cannot be parsed.\n */\nfunction parseStyle(state, value) {\n try {\n return styleToJs(value, {reactCompat: true})\n } catch (error) {\n if (state.ignoreInvalidStyle) {\n return {}\n }\n\n const cause = /** @type {Error} */ (error)\n const message = new VFileMessage('Cannot parse `style` attribute', {\n ancestors: state.ancestors,\n cause,\n ruleId: 'style',\n source: 'hast-util-to-jsx-runtime'\n })\n message.file = state.filePath || undefined\n message.url = docs + '#cannot-parse-style-attribute'\n\n throw message\n }\n}\n\n/**\n * Create a JSX name from a string.\n *\n * @param {State} state\n * To do.\n * @param {string} name\n * Name.\n * @param {boolean} allowExpression\n * Allow member expressions and identifiers.\n * @returns {unknown}\n * To do.\n */\nfunction findComponentFromName(state, name, allowExpression) {\n /** @type {Identifier | Literal | MemberExpression} */\n let result\n\n if (!allowExpression) {\n result = {type: 'Literal', value: name}\n } else if (name.includes('.')) {\n const identifiers = name.split('.')\n let index = -1\n /** @type {Identifier | Literal | MemberExpression | undefined} */\n let node\n\n while (++index < identifiers.length) {\n /** @type {Identifier | Literal} */\n const prop = isIdentifierName(identifiers[index])\n ? {type: 'Identifier', name: identifiers[index]}\n : {type: 'Literal', value: identifiers[index]}\n node = node\n ? {\n type: 'MemberExpression',\n object: node,\n property: prop,\n computed: Boolean(index && prop.type === 'Literal'),\n optional: false\n }\n : prop\n }\n\n assert(node, 'always a result')\n result = node\n } else {\n result =\n isIdentifierName(name) && !/^[a-z]/.test(name)\n ? {type: 'Identifier', name}\n : {type: 'Literal', value: name}\n }\n\n // Only literals can be passed in `components` currently.\n // No identifiers / member expressions.\n if (result.type === 'Literal') {\n const name = /** @type {string | number} */ (result.value)\n return own.call(state.components, name) ? state.components[name] : name\n }\n\n // Assume component.\n if (state.evaluater) {\n return state.evaluater.evaluateExpression(result)\n }\n\n crashEstree(state)\n}\n\n/**\n * @param {State} state\n * @param {Position | undefined} [place]\n * @returns {never}\n */\nfunction crashEstree(state, place) {\n const message = new VFileMessage(\n 'Cannot handle MDX estrees without `createEvaluater`',\n {\n ancestors: state.ancestors,\n place,\n ruleId: 'mdx-estree',\n source: 'hast-util-to-jsx-runtime'\n }\n )\n message.file = state.filePath || undefined\n message.url = docs + '#cannot-handle-mdx-estrees-without-createevaluater'\n\n throw message\n}\n\n/**\n * Transform a DOM casing style object to a CSS casing style object.\n *\n * @param {Style} domCasing\n * @returns {Style}\n */\nfunction transformStylesToCssCasing(domCasing) {\n /** @type {Style} */\n const cssCasing = {}\n /** @type {string} */\n let from\n\n for (from in domCasing) {\n if (own.call(domCasing, from)) {\n cssCasing[transformStyleToCssCasing(from)] = domCasing[from]\n }\n }\n\n return cssCasing\n}\n\n/**\n * Transform a DOM casing style field to a CSS casing style field.\n *\n * @param {string} from\n * @returns {string}\n */\nfunction transformStyleToCssCasing(from) {\n let to = from.replace(cap, toDash)\n // Handle `ms-xxx` -> `-ms-xxx`.\n if (to.slice(0, 3) === 'ms-') to = '-' + to\n return to\n}\n\n/**\n * Make `$0` dash cased.\n *\n * @param {string} $0\n * Capitalized ASCII leter.\n * @returns {string}\n * Dash and lower letter.\n */\nfunction toDash($0) {\n return '-' + $0.toLowerCase()\n}\n","/**\n * HTML URL properties.\n *\n * Each key is a property name and each value is a list of tag names it applies\n * to or `null` if it applies to all elements.\n *\n * @type {Record<string, Array<string> | null>}\n */\nexport const urlAttributes = {\n action: ['form'],\n cite: ['blockquote', 'del', 'ins', 'q'],\n data: ['object'],\n formAction: ['button', 'input'],\n href: ['a', 'area', 'base', 'link'],\n icon: ['menuitem'],\n itemId: null,\n manifest: ['html'],\n ping: ['a', 'area'],\n poster: ['video'],\n src: [\n 'audio',\n 'embed',\n 'iframe',\n 'img',\n 'input',\n 'script',\n 'source',\n 'track',\n 'video'\n ]\n}\n","/**\n * @typedef {import('mdast').Nodes} Nodes\n *\n * @typedef Options\n * Configuration (optional).\n * @property {boolean | null | undefined} [includeImageAlt=true]\n * Whether to use `alt` for `image`s (default: `true`).\n * @property {boolean | null | undefined} [includeHtml=true]\n * Whether to use `value` of HTML (default: `true`).\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’s 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 Nodes}\n * Whether `value` is a node.\n */\nfunction node(value) {\n return Boolean(value && typeof value === 'object')\n}\n","/**\n * Map of named character references.\n *\n * @type {Record<string, string>}\n */\nexport const characterEntities = {\n AElig: 'Æ',\n AMP: '&',\n Aacute: 'Á',\n Abreve: 'Ă',\n Acirc: 'Â',\n Acy: 'А',\n Afr: '𝔄',\n Agrave: 'À',\n Alpha: 'Α',\n Amacr: 'Ā',\n And: '⩓',\n Aogon: 'Ą',\n Aopf: '𝔸',\n ApplyFunction: '',\n Aring: 'Å',\n Ascr: '𝒜',\n Assign: '≔',\n Atilde: 'Ã',\n Auml: 'Ä',\n Backslash: '∖',\n Barv: '⫧',\n Barwed: '⌆',\n Bcy: 'Б',\n Because: '∵',\n Bernoullis: 'ℬ',\n Beta: 'Β',\n Bfr: '𝔅',\n Bopf: '𝔹',\n Breve: '˘',\n Bscr: 'ℬ',\n Bumpeq: '≎',\n CHcy: 'Ч',\n COPY: '©',\n Cacute: 'Ć',\n Cap: '⋒',\n CapitalDifferentialD: 'ⅅ',\n Cayleys: 'ℭ',\n Ccaron: 'Č',\n Ccedil: 'Ç',\n Ccirc: 'Ĉ',\n Cconint: '∰',\n Cdot: 'Ċ',\n Cedilla: '¸',\n CenterDot: '·',\n Cfr: 'ℭ',\n Chi: 'Χ',\n CircleDot: '⊙',\n CircleMinus: '⊖',\n CirclePlus: '⊕',\n CircleTimes: '⊗',\n ClockwiseContourIntegral: '∲',\n CloseCurlyDoubleQuote: '”',\n CloseCurlyQuote: '’',\n Colon: '∷',\n Colone: '⩴',\n Congruent: '≡',\n Conint: '∯',\n ContourIntegral: '∮',\n Copf: 'ℂ',\n Coproduct: '∐',\n CounterClockwiseContourIntegral: '∳',\n Cross: '⨯',\n Cscr: '𝒞',\n Cup: '⋓',\n CupCap: '≍',\n DD: 'ⅅ',\n DDotrahd: '⤑',\n DJcy: 'Ђ',\n DScy: 'Ѕ',\n DZcy: 'Џ',\n Dagger: '‡',\n Darr: '↡',\n Dashv: '⫤',\n Dcaron: 'Ď',\n Dcy: 'Д',\n Del: '∇',\n Delta: 'Δ',\n Dfr: '𝔇',\n DiacriticalAcute: '´',\n DiacriticalDot: '˙',\n DiacriticalDoubleAcute: '˝',\n DiacriticalGrave: '`',\n DiacriticalTilde: '˜',\n Diamond: '⋄',\n DifferentialD: 'ⅆ',\n Dopf: '𝔻',\n Dot: '¨',\n DotDot: '⃜',\n DotEqual: '≐',\n DoubleContourIntegral: '∯',\n DoubleDot: '¨',\n DoubleDownArrow: '⇓',\n DoubleLeftArrow: '⇐',\n DoubleLeftRightArrow: '⇔',\n DoubleLeftTee: '⫤',\n DoubleLongLeftArrow: '⟸',\n DoubleLongLeftRightArrow: '⟺',\n DoubleLongRightArrow: '⟹',\n DoubleRightArrow: '⇒',\n DoubleRightTee: '⊨',\n DoubleUpArrow: '⇑',\n DoubleUpDownArrow: '⇕',\n DoubleVerticalBar: '∥',\n DownArrow: '↓',\n DownArrowBar: '⤓',\n DownArrowUpArrow: '⇵',\n DownBreve: '̑',\n DownLeftRightVector: '⥐',\n DownLeftTeeVector: '⥞',\n DownLeftVector: '↽',\n DownLeftVectorBar: '⥖',\n DownRightTeeVector: '⥟',\n DownRightVector: '⇁',\n DownRightVectorBar: '⥗',\n DownTee: '⊤',\n DownTeeArrow: '↧',\n Downarrow: '⇓',\n Dscr: '𝒟',\n Dstrok: 'Đ',\n ENG: 'Ŋ',\n ETH: 'Ð',\n Eacute: 'É',\n Ecaron: 'Ě',\n Ecirc: 'Ê',\n Ecy: 'Э',\n Edot: 'Ė',\n Efr: '𝔈',\n Egrave: 'È',\n Element: '∈',\n Emacr: 'Ē',\n EmptySmallSquare: '◻',\n EmptyVerySmallSquare: '▫',\n Eogon: 'Ę',\n Eopf: '𝔼',\n Epsilon: 'Ε',\n Equal: '⩵',\n EqualTilde: '≂',\n Equilibrium: '⇌',\n Escr: 'ℰ',\n Esim: '⩳',\n Eta: 'Η',\n Euml: 'Ë',\n Exists: '∃',\n ExponentialE: 'ⅇ',\n Fcy: 'Ф',\n Ffr: '𝔉',\n FilledSmallSquare: '◼',\n FilledVerySmallSquare: '▪',\n Fopf: '𝔽',\n ForAll: '∀',\n Fouriertrf: 'ℱ',\n Fscr: 'ℱ',\n GJcy: 'Ѓ',\n GT: '>',\n Gamma: 'Γ',\n Gammad: 'Ϝ',\n Gbreve: 'Ğ',\n Gcedil: 'Ģ',\n Gcirc: 'Ĝ',\n Gcy: 'Г',\n Gdot: 'Ġ',\n Gfr: '𝔊',\n Gg: '⋙',\n Gopf: '𝔾',\n GreaterEqual: '≥',\n GreaterEqualLess: '⋛',\n GreaterFullEqual: '≧',\n GreaterGreater: '⪢',\n GreaterLess: '≷',\n GreaterSlantEqual: '⩾',\n GreaterTilde: '≳',\n Gscr: '𝒢',\n Gt: '≫',\n HARDcy: 'Ъ',\n Hacek: 'ˇ',\n Hat: '^',\n Hcirc: 'Ĥ',\n Hfr: 'ℌ',\n HilbertSpace: 'ℋ',\n Hopf: 'ℍ',\n HorizontalLine: '─',\n Hscr: 'ℋ',\n Hstrok: 'Ħ',\n HumpDownHump: '≎',\n HumpEqual: '≏',\n IEcy: 'Е',\n IJlig: 'IJ',\n IOcy: 'Ё',\n Iacute: 'Í',\n Icirc: 'Î',\n Icy: 'И',\n Idot: 'İ',\n Ifr: 'ℑ',\n Igrave: 'Ì',\n Im: 'ℑ',\n Imacr: 'Ī',\n ImaginaryI: 'ⅈ',\n Implies: '⇒',\n Int: '∬',\n Integral: '∫',\n Intersection: '⋂',\n InvisibleComma: '',\n InvisibleTimes: '',\n Iogon: 'Į',\n Iopf: '𝕀',\n Iota: 'Ι',\n Iscr: 'ℐ',\n Itilde: 'Ĩ',\n Iukcy: 'І',\n Iuml: 'Ï',\n Jcirc: 'Ĵ',\n Jcy: 'Й',\n Jfr: '𝔍',\n Jopf: '𝕁',\n Jscr: '𝒥',\n Jsercy: 'Ј',\n Jukcy: 'Є',\n KHcy: 'Х',\n KJcy: 'Ќ',\n Kappa: 'Κ',\n Kcedil: 'Ķ',\n Kcy: 'К',\n Kfr: '𝔎',\n Kopf: '𝕂',\n Kscr: '𝒦',\n LJcy: 'Љ',\n LT: '<',\n Lacute: 'Ĺ',\n Lambda: 'Λ',\n Lang: '⟪',\n Laplacetrf: 'ℒ',\n Larr: '↞',\n Lcaron: 'Ľ',\n Lcedil: 'Ļ',\n Lcy: 'Л',\n LeftAngleBracket: '⟨',\n LeftArrow: '←',\n LeftArrowBar: '⇤',\n LeftArrowRightArrow: '⇆',\n LeftCeiling: '⌈',\n LeftDoubleBracket: '⟦',\n LeftDownTeeVector: '⥡',\n LeftDownVector: '⇃',\n LeftDownVectorBar: '⥙',\n LeftFloor: '⌊',\n LeftRightArrow: '↔',\n LeftRightVector: '⥎',\n LeftTee: '⊣',\n LeftTeeArrow: '↤',\n LeftTeeVector: '⥚',\n LeftTriangle: '⊲',\n LeftTriangleBar: '⧏',\n LeftTriangleEqual: '⊴',\n LeftUpDownVector: '⥑',\n LeftUpTeeVector: '⥠',\n LeftUpVector: '↿',\n LeftUpVectorBar: '⥘',\n LeftVector: '↼',\n LeftVectorBar: '⥒',\n Leftarrow: '⇐',\n Leftrightarrow: '⇔',\n LessEqualGreater: '⋚',\n LessFullEqual: '≦',\n LessGreater: '≶',\n LessLess: '⪡',\n LessSlantEqual: '⩽',\n LessTilde: '≲',\n Lfr: '𝔏',\n Ll: '⋘',\n Lleftarrow: '⇚',\n Lmidot: 'Ŀ',\n LongLeftArrow: '⟵',\n LongLeftRightArrow: '⟷',\n LongRightArrow: '⟶',\n Longleftarrow: '⟸',\n Longleftrightarrow: '⟺',\n Longrightarrow: '⟹',\n Lopf: '𝕃',\n LowerLeftArrow: '↙',\n LowerRightArrow: '↘',\n Lscr: 'ℒ',\n Lsh: '↰',\n Lstrok: 'Ł',\n Lt: '≪',\n Map: '⤅',\n Mcy: 'М',\n MediumSpace: ' ',\n Mellintrf: 'ℳ',\n Mfr: '𝔐',\n MinusPlus: '∓',\n Mopf: '𝕄',\n Mscr: 'ℳ',\n Mu: 'Μ',\n NJcy: 'Њ',\n Nacute: 'Ń',\n Ncaron: 'Ň',\n Ncedil: 'Ņ',\n Ncy: 'Н',\n NegativeMediumSpace: '',\n NegativeThickSpace: '',\n NegativeThinSpace: '',\n NegativeVeryThinSpace: '',\n NestedGreaterGreater: '≫',\n NestedLessLess: '≪',\n NewLine: '\\n',\n Nfr: '𝔑',\n NoBreak: '',\n NonBreakingSpace: ' ',\n Nopf: 'ℕ',\n Not: '⫬',\n NotCongruent: '≢',\n NotCupCap: '≭',\n NotDoubleVerticalBar: '∦',\n NotElement: '∉',\n NotEqual: '≠',\n NotEqualTilde: '≂̸',\n NotExists: '∄',\n NotGreater: '≯',\n NotGreaterEqual: '≱',\n NotGreaterFullEqual: '≧̸',\n NotGreaterGreater: '≫̸',\n NotGreaterLess: '≹',\n NotGreaterSlantEqual: '⩾̸',\n NotGreaterTilde: '≵',\n NotHumpDownHump: '≎̸',\n NotHumpEqual: '≏̸',\n NotLeftTriangle: '⋪',\n NotLeftTriangleBar: '⧏̸',\n NotLeftTriangleEqual: '⋬',\n NotLess: '≮',\n NotLessEqual: '≰',\n NotLessGreater: '≸',\n NotLessLess: '≪̸',\n NotLessSlantEqual: '⩽̸',\n NotLessTilde: '≴',\n NotNestedGreaterGreater: '⪢̸',\n NotNestedLessLess: '⪡̸',\n NotPrecedes: '⊀',\n NotPrecedesEqual: '⪯̸',\n NotPrecedesSlantEqual: '⋠',\n NotReverseElement: '∌',\n NotRightTriangle: '⋫',\n NotRightTriangleBar: '⧐̸',\n NotRightTriangleEqual: '⋭',\n NotSquareSubset: '⊏̸',\n NotSquareSubsetEqual: '⋢',\n NotSquareSuperset: '⊐̸',\n NotSquareSupersetEqual: '⋣',\n NotSubset: '⊂⃒',\n NotSubsetEqual: '⊈',\n NotSucceeds: '⊁',\n NotSucceedsEqual: '⪰̸',\n NotSucceedsSlantEqual: '⋡',\n NotSucceedsTilde: '≿̸',\n NotSuperset: '⊃⃒',\n NotSupersetEqual: '⊉',\n NotTilde: '≁',\n NotTildeEqual: '≄',\n NotTildeFullEqual: '≇',\n NotTildeTilde: '≉',\n NotVerticalBar: '∤',\n Nscr: '𝒩',\n Ntilde: 'Ñ',\n Nu: 'Ν',\n OElig: 'Œ',\n Oacute: 'Ó',\n Ocirc: 'Ô',\n Ocy: 'О',\n Odblac: 'Ő',\n Ofr: '𝔒',\n Ograve: 'Ò',\n Omacr: 'Ō',\n Omega: 'Ω',\n Omicron: 'Ο',\n Oopf: '𝕆',\n OpenCurlyDoubleQuote: '“',\n OpenCurlyQuote: '‘',\n Or: '⩔',\n Oscr: '𝒪',\n Oslash: 'Ø',\n Otilde: 'Õ',\n Otimes: '⨷',\n Ouml: 'Ö',\n OverBar: '‾',\n OverBrace: '⏞',\n OverBracket: '⎴',\n OverParenthesis: '⏜',\n PartialD: '∂',\n Pcy: 'П',\n Pfr: '𝔓',\n Phi: 'Φ',\n Pi: 'Π',\n PlusMinus: '±',\n Poincareplane: 'ℌ',\n Popf: 'ℙ',\n Pr: '⪻',\n Precedes: '≺',\n PrecedesEqual: '⪯',\n PrecedesSlantEqual: '≼',\n PrecedesTilde: '≾',\n Prime: '″',\n Product: '∏',\n Proportion: '∷',\n Proportional: '∝',\n Pscr: '𝒫',\n Psi: 'Ψ',\n QUOT: '\"',\n Qfr: '𝔔',\n Qopf: 'ℚ',\n Qscr: '𝒬',\n RBarr: '⤐',\n REG: '®',\n Racute: 'Ŕ',\n Rang: '⟫',\n Rarr: '↠',\n Rarrtl: '⤖',\n Rcaron: 'Ř',\n Rcedil: 'Ŗ',\n Rcy: 'Р',\n Re: 'ℜ',\n ReverseElement: '∋',\n ReverseEquilibrium: '⇋',\n ReverseUpEquilibrium: '⥯',\n Rfr: 'ℜ',\n Rho: 'Ρ',\n RightAngleBracket: '⟩',\n RightArrow: '→',\n RightArrowBar: '⇥',\n RightArrowLeftArrow: '⇄',\n RightCeiling: '⌉',\n RightDoubleBracket: '⟧',\n RightDownTeeVector: '⥝',\n RightDownVector: '⇂',\n RightDownVectorBar: '⥕',\n RightFloor: '⌋',\n RightTee: '⊢',\n RightTeeArrow: '↦',\n RightTeeVector: '⥛',\n RightTriangle: '⊳',\n RightTriangleBar: '⧐',\n RightTriangleEqual: '⊵',\n RightUpDownVector: '⥏',\n RightUpTeeVector: '⥜',\n RightUpVector: '↾',\n RightUpVectorBar: '⥔',\n RightVector: '⇀',\n RightVectorBar: '⥓',\n Rightarrow: '⇒',\n Ropf: 'ℝ',\n RoundImplies: '⥰',\n Rrightarrow: '⇛',\n Rscr: 'ℛ',\n Rsh: '↱',\n RuleDelayed: '⧴',\n SHCHcy: 'Щ',\n SHcy: 'Ш',\n SOFTcy: 'Ь',\n Sacute: 'Ś',\n Sc: '⪼',\n Scaron: 'Š',\n Scedil: 'Ş',\n Scirc: 'Ŝ',\n Scy: 'С',\n Sfr: '𝔖',\n ShortDownArrow: '↓',\n ShortLeftArrow: '←',\n ShortRightArrow: '→',\n ShortUpArrow: '↑',\n Sigma: 'Σ',\n SmallCircle: '∘',\n Sopf: '𝕊',\n Sqrt: '√',\n Square: '□',\n SquareIntersection: '⊓',\n SquareSubset: '⊏',\n SquareSubsetEqual: '⊑',\n SquareSuperset: '⊐',\n SquareSupersetEqual: '⊒',\n SquareUnion: '⊔',\n Sscr: '𝒮',\n Star: '⋆',\n Sub: '⋐',\n Subset: '⋐',\n SubsetEqual: '⊆',\n Succeeds: '≻',\n SucceedsEqual: '⪰',\n SucceedsSlantEqual: '≽',\n SucceedsTilde: '≿',\n SuchThat: '∋',\n Sum: '∑',\n Sup: '⋑',\n Superset: '⊃',\n SupersetEqual: '⊇',\n Supset: '⋑',\n THORN: 'Þ',\n TRADE: '™',\n TSHcy: 'Ћ',\n TScy: 'Ц',\n Tab: '\\t',\n Tau: 'Τ',\n Tcaron: 'Ť',\n Tcedil: 'Ţ',\n Tcy: 'Т',\n Tfr: '𝔗',\n Therefore: '∴',\n Theta: 'Θ',\n ThickSpace: ' ',\n ThinSpace: ' ',\n Tilde: '∼',\n TildeEqual: '≃',\n TildeFullEqual: '≅',\n TildeTilde: '≈',\n Topf: '𝕋',\n TripleDot: '⃛',\n Tscr: '𝒯',\n Tstrok: 'Ŧ',\n Uacute: 'Ú',\n Uarr: '↟',\n Uarrocir: '⥉',\n Ubrcy: 'Ў',\n Ubreve: 'Ŭ',\n Ucirc: 'Û',\n Ucy: 'У',\n Udblac: 'Ű',\n Ufr: '𝔘',\n Ugrave: 'Ù',\n Umacr: 'Ū',\n UnderBar: '_',\n UnderBrace: '⏟',\n UnderBracket: '⎵',\n UnderParenthesis: '⏝',\n Union: '⋃',\n UnionPlus: '⊎',\n Uogon: 'Ų',\n Uopf: '𝕌',\n UpArrow: '↑',\n UpArrowBar: '⤒',\n UpArrowDownArrow: '⇅',\n UpDownArrow: '↕',\n UpEquilibrium: '⥮',\n UpTee: '⊥',\n UpTeeArrow: '↥',\n Uparrow: '⇑',\n Updownarrow: '⇕',\n UpperLeftArrow: '↖',\n UpperRightArrow: '↗',\n Upsi: 'ϒ',\n Upsilon: 'Υ',\n Uring: 'Ů',\n Uscr: '𝒰',\n Utilde: 'Ũ',\n Uuml: 'Ü',\n VDash: '⊫',\n Vbar: '⫫',\n Vcy: 'В',\n Vdash: '⊩',\n Vdashl: '⫦',\n Vee: '⋁',\n Verbar: '‖',\n Vert: '‖',\n VerticalBar: '∣',\n VerticalLine: '|',\n VerticalSeparator: '❘',\n VerticalTilde: '≀',\n VeryThinSpace: ' ',\n Vfr: '𝔙',\n Vopf: '𝕍',\n Vscr: '𝒱',\n Vvdash: '⊪',\n Wcirc: 'Ŵ',\n Wedge: '⋀',\n Wfr: '𝔚',\n Wopf: '𝕎',\n Wscr: '𝒲',\n Xfr: '𝔛',\n Xi: 'Ξ',\n Xopf: '𝕏',\n Xscr: '𝒳',\n YAcy: 'Я',\n YIcy: 'Ї',\n YUcy: 'Ю',\n Yacute: 'Ý',\n Ycirc: 'Ŷ',\n Ycy: 'Ы',\n Yfr: '𝔜',\n Yopf: '𝕐',\n Yscr: '𝒴',\n Yuml: 'Ÿ',\n ZHcy: 'Ж',\n Zacute: 'Ź',\n Zcaron: 'Ž',\n Zcy: 'З',\n Zdot: 'Ż',\n ZeroWidthSpace: '',\n Zeta: 'Ζ',\n Zfr: 'ℨ',\n Zopf: 'ℤ',\n Zscr: '𝒵',\n aacute: 'á',\n abreve: 'ă',\n ac: '∾',\n acE: '∾̳',\n acd: '∿',\n acirc: 'â',\n acute: '´',\n acy: 'а',\n aelig: 'æ',\n af: '',\n afr: '𝔞',\n agrave: 'à',\n alefsym: 'ℵ',\n aleph: 'ℵ',\n alpha: 'α',\n amacr: 'ā',\n amalg: '⨿',\n amp: '&',\n and: '∧',\n andand: '⩕',\n andd: '⩜',\n andslope: '⩘',\n andv: '⩚',\n ang: '∠',\n ange: '⦤',\n angle: '∠',\n angmsd: '∡',\n angmsdaa: '⦨',\n angmsdab: '⦩',\n angmsdac: '⦪',\n angmsdad: '⦫',\n angmsdae: '⦬',\n angmsdaf: '⦭',\n angmsdag: '⦮',\n angmsdah: '⦯',\n angrt: '∟',\n angrtvb: '⊾',\n angrtvbd: '⦝',\n angsph: '∢',\n angst: 'Å',\n angzarr: '⍼',\n aogon: 'ą',\n aopf: '𝕒',\n ap: '≈',\n apE: '⩰',\n apacir: '⩯',\n ape: '≊',\n apid: '≋',\n apos: \"'\",\n approx: '≈',\n approxeq: '≊',\n aring: 'å',\n ascr: '𝒶',\n ast: '*',\n asymp: '≈',\n asympeq: '≍',\n atilde: 'ã',\n auml: 'ä',\n awconint: '∳',\n awint: '⨑',\n bNot: '⫭',\n backcong: '≌',\n backepsilon: '϶',\n backprime: '‵',\n backsim: '∽',\n backsimeq: '⋍',\n barvee: '⊽',\n barwed: '⌅',\n barwedge: '⌅',\n bbrk: '⎵',\n bbrktbrk: '⎶',\n bcong: '≌',\n bcy: 'б',\n bdquo: '„',\n becaus: '∵',\n because: '∵',\n bemptyv: '⦰',\n bepsi: '϶',\n bernou: 'ℬ',\n beta: 'β',\n beth: 'ℶ',\n between: '≬',\n bfr: '𝔟',\n bigcap: '⋂',\n bigcirc: '◯',\n bigcup: '⋃',\n bigodot: '⨀',\n bigoplus: '⨁',\n bigotimes: '⨂',\n bigsqcup: '⨆',\n bigstar: '★',\n bigtriangledown: '▽',\n bigtriangleup: '△',\n biguplus: '⨄',\n bigvee: '⋁',\n bigwedge: '⋀',\n bkarow: '⤍',\n blacklozenge: '⧫',\n blacksquare: '▪',\n blacktriangle: '▴',\n blacktriangledown: '▾',\n blacktriangleleft: '◂',\n blacktriangleright: '▸',\n blank: '␣',\n blk12: '▒',\n blk14: '░',\n blk34: '▓',\n block: '█',\n bne: '=⃥',\n bnequiv: '≡⃥',\n bnot: '⌐',\n bopf: '𝕓',\n bot: '⊥',\n bottom: '⊥',\n bowtie: '⋈',\n boxDL: '╗',\n boxDR: '╔',\n boxDl: '╖',\n boxDr: '╓',\n boxH: '═',\n boxHD: '╦',\n boxHU: '╩',\n boxHd: '╤',\n boxHu: '╧',\n boxUL: '╝',\n boxUR: '╚',\n boxUl: '╜',\n boxUr: '╙',\n boxV: '║',\n boxVH: '╬',\n boxVL: '╣',\n boxVR: '╠',\n boxVh: '╫',\n boxVl: '╢',\n boxVr: '╟',\n boxbox: '⧉',\n boxdL: '╕',\n boxdR: '╒',\n boxdl: '┐',\n boxdr: '┌',\n boxh: '─',\n boxhD: '╥',\n boxhU: '╨',\n boxhd: '┬',\n boxhu: '┴',\n boxminus: '⊟',\n boxplus: '⊞',\n boxtimes: '⊠',\n boxuL: '╛',\n boxuR: '╘',\n boxul: '┘',\n boxur: '└',\n boxv: '│',\n boxvH: '╪',\n boxvL: '╡',\n boxvR: '╞',\n boxvh: '┼',\n boxvl: '┤',\n boxvr: '├',\n bprime: '‵',\n breve: '˘',\n brvbar: '¦',\n bscr: '𝒷',\n bsemi: '⁏',\n bsim: '∽',\n bsime: '⋍',\n bsol: '\\\\',\n bsolb: '⧅',\n bsolhsub: '⟈',\n bull: '•',\n bullet: '•',\n bump: '≎',\n bumpE: '⪮',\n bumpe: '≏',\n bumpeq: '≏',\n cacute: 'ć',\n cap: '∩',\n capand: '⩄',\n capbrcup: '⩉',\n capcap: '⩋',\n capcup: '⩇',\n capdot: '⩀',\n caps: '∩︀',\n caret: '⁁',\n caron: 'ˇ',\n ccaps: '⩍',\n ccaron: 'č',\n ccedil: 'ç',\n ccirc: 'ĉ',\n ccups: '⩌',\n ccupssm: '⩐',\n cdot: 'ċ',\n cedil: '¸',\n cemptyv: '⦲',\n cent: '¢',\n centerdot: '·',\n cfr: '𝔠',\n chcy: 'ч',\n check: '✓',\n checkmark: '✓',\n chi: 'χ',\n cir: '○',\n cirE: '⧃',\n circ: 'ˆ',\n circeq: '≗',\n circlearrowleft: '↺',\n circlearrowright: '↻',\n circledR: '®',\n circledS: 'Ⓢ',\n circledast: '⊛',\n circledcirc: '⊚',\n circleddash: '⊝',\n cire: '≗',\n cirfnint: '⨐',\n cirmid: '⫯',\n cirscir: '⧂',\n clubs: '♣',\n clubsuit: '♣',\n colon: ':',\n colone: '≔',\n coloneq: '≔',\n comma: ',',\n commat: '@',\n comp: '∁',\n compfn: '∘',\n complement: '∁',\n complexes: 'ℂ',\n cong: '≅',\n congdot: '⩭',\n conint: '∮',\n copf: '𝕔',\n coprod: '∐',\n copy: '©',\n copysr: '℗',\n crarr: '↵',\n cross: '✗',\n cscr: '𝒸',\n csub: '⫏',\n csube: '⫑',\n csup: '⫐',\n csupe: '⫒',\n ctdot: '⋯',\n cudarrl: '⤸',\n cudarrr: '⤵',\n cuepr: '⋞',\n cuesc: '⋟',\n cularr: '↶',\n cularrp: '⤽',\n cup: '∪',\n cupbrcap: '⩈',\n cupcap: '⩆',\n cupcup: '⩊',\n cupdot: '⊍',\n cupor: '⩅',\n cups: '∪︀',\n curarr: '↷',\n curarrm: '⤼',\n curlyeqprec: '⋞',\n curlyeqsucc: '⋟',\n curlyvee: '⋎',\n curlywedge: '⋏',\n curren: '¤',\n curvearrowleft: '↶',\n curvearrowright: '↷',\n cuvee: '⋎',\n cuwed: '⋏',\n cwconint: '∲',\n cwint: '∱',\n cylcty: '⌭',\n dArr: '⇓',\n dHar: '⥥',\n dagger: '†',\n daleth: 'ℸ',\n darr: '↓',\n dash: '‐',\n dashv: '⊣',\n dbkarow: '⤏',\n dblac: '˝',\n dcaron: 'ď',\n dcy: 'д',\n dd: 'ⅆ',\n ddagger: '‡',\n ddarr: '⇊',\n ddotseq: '⩷',\n deg: '°',\n delta: 'δ',\n demptyv: '⦱',\n dfisht: '⥿',\n dfr: '𝔡',\n dharl: '⇃',\n dharr: '⇂',\n diam: '⋄',\n diamond: '⋄',\n diamondsuit: '♦',\n diams: '♦',\n die: '¨',\n digamma: 'ϝ',\n disin: '⋲',\n div: '÷',\n divide: '÷',\n divideontimes: '⋇',\n divonx: '⋇',\n djcy: 'ђ',\n dlcorn: '⌞',\n dlcrop: '⌍',\n dollar: '$',\n dopf: '𝕕',\n dot: '˙',\n doteq: '≐',\n doteqdot: '≑',\n dotminus: '∸',\n dotplus: '∔',\n dotsquare: '⊡',\n doublebarwedge: '⌆',\n downarrow: '↓',\n downdownarrows: '⇊',\n downharpoonleft: '⇃',\n downharpoonright: '⇂',\n drbkarow: '⤐',\n drcorn: '⌟',\n drcrop: '⌌',\n dscr: '𝒹',\n dscy: 'ѕ',\n dsol: '⧶',\n dstrok: 'đ',\n dtdot: '⋱',\n dtri: '▿',\n dtrif: '▾',\n duarr: '⇵',\n duhar: '⥯',\n dwangle: '⦦',\n dzcy: 'џ',\n dzigrarr: '⟿',\n eDDot: '⩷',\n eDot: '≑',\n eacute: 'é',\n easter: '⩮',\n ecaron: 'ě',\n ecir: '≖',\n ecirc: 'ê',\n ecolon: '≕',\n ecy: 'э',\n edot: 'ė',\n ee: 'ⅇ',\n efDot: '≒',\n efr: '𝔢',\n eg: '⪚',\n egrave: 'è',\n egs: '⪖',\n egsdot: '⪘',\n el: '⪙',\n elinters: '⏧',\n ell: 'ℓ',\n els: '⪕',\n elsdot: '⪗',\n emacr: 'ē',\n empty: '∅',\n emptyset: '∅',\n emptyv: '∅',\n emsp13: ' ',\n emsp14: ' ',\n emsp: ' ',\n eng: 'ŋ',\n ensp: ' ',\n eogon: 'ę',\n eopf: '𝕖',\n epar: '⋕',\n eparsl: '⧣',\n eplus: '⩱',\n epsi: 'ε',\n epsilon: 'ε',\n epsiv: 'ϵ',\n eqcirc: '≖',\n eqcolon: '≕',\n eqsim: '≂',\n eqslantgtr: '⪖',\n eqslantless: '⪕',\n equals: '=',\n equest: '≟',\n equiv: '≡',\n equivDD: '⩸',\n eqvparsl: '⧥',\n erDot: '≓',\n erarr: '⥱',\n escr: 'ℯ',\n esdot: '≐',\n esim: '≂',\n eta: 'η',\n eth: 'ð',\n euml: 'ë',\n euro: '€',\n excl: '!',\n exist: '∃',\n expectation: 'ℰ',\n exponentiale: 'ⅇ',\n fallingdotseq: '≒',\n fcy: 'ф',\n female: '♀',\n ffilig: 'ffi',\n fflig: 'ff',\n ffllig: 'ffl',\n ffr: '𝔣',\n filig: 'fi',\n fjlig: 'fj',\n flat: '♭',\n fllig: 'fl',\n fltns: '▱',\n fnof: 'ƒ',\n fopf: '𝕗',\n forall: '∀',\n fork: '⋔',\n forkv: '⫙',\n fpartint: '⨍',\n frac12: '½',\n frac13: '⅓',\n frac14: '¼',\n frac15: '⅕',\n frac16: '⅙',\n frac18: '⅛',\n frac23: '⅔',\n frac25: '⅖',\n frac34: '¾',\n frac35: '⅗',\n frac38: '⅜',\n frac45: '⅘',\n frac56: '⅚',\n frac58: '⅝',\n frac78: '⅞',\n frasl: '⁄',\n frown: '⌢',\n fscr: '𝒻',\n gE: '≧',\n gEl: '⪌',\n gacute: 'ǵ',\n gamma: 'γ',\n gammad: 'ϝ',\n gap: '⪆',\n gbreve: 'ğ',\n gcirc: 'ĝ',\n gcy: 'г',\n gdot: 'ġ',\n ge: '≥',\n gel: '⋛',\n geq: '≥',\n geqq: '≧',\n geqslant: '⩾',\n ges: '⩾',\n gescc: '⪩',\n gesdot: '⪀',\n gesdoto: '⪂',\n gesdotol: '⪄',\n gesl: '⋛︀',\n gesles: '⪔',\n gfr: '𝔤',\n gg: '≫',\n ggg: '⋙',\n gimel: 'ℷ',\n gjcy: 'ѓ',\n gl: '≷',\n glE: '⪒',\n gla: '⪥',\n glj: '⪤',\n gnE: '≩',\n gnap: '⪊',\n gnapprox: '⪊',\n gne: '⪈',\n gneq: '⪈',\n gneqq: '≩',\n gnsim: '⋧',\n gopf: '𝕘',\n grave: '`',\n gscr: 'ℊ',\n gsim: '≳',\n gsime: '⪎',\n gsiml: '⪐',\n gt: '>',\n gtcc: '⪧',\n gtcir: '⩺',\n gtdot: '⋗',\n gtlPar: '⦕',\n gtquest: '⩼',\n gtrapprox: '⪆',\n gtrarr: '⥸',\n gtrdot: '⋗',\n gtreqless: '⋛',\n gtreqqless: '⪌',\n gtrless: '≷',\n gtrsim: '≳',\n gvertneqq: '≩︀',\n gvnE: '≩︀',\n hArr: '⇔',\n hairsp: ' ',\n half: '½',\n hamilt: 'ℋ',\n hardcy: 'ъ',\n harr: '↔',\n harrcir: '⥈',\n harrw: '↭',\n hbar: 'ℏ',\n hcirc: 'ĥ',\n hearts: '♥',\n heartsuit: '♥',\n hellip: '…',\n hercon: '⊹',\n hfr: '𝔥',\n hksearow: '⤥',\n hkswarow: '⤦',\n hoarr: '⇿',\n homtht: '∻',\n hookleftarrow: '↩',\n hookrightarrow: '↪',\n hopf: '𝕙',\n horbar: '―',\n hscr: '𝒽',\n hslash: 'ℏ',\n hstrok: 'ħ',\n hybull: '⁃',\n hyphen: '‐',\n iacute: 'í',\n ic: '',\n icirc: 'î',\n icy: 'и',\n iecy: 'е',\n iexcl: '¡',\n iff: '⇔',\n ifr: '𝔦',\n igrave: 'ì',\n ii: 'ⅈ',\n iiiint: '⨌',\n iiint: '∭',\n iinfin: '⧜',\n iiota: '℩',\n ijlig: 'ij',\n imacr: 'ī',\n image: 'ℑ',\n imagline: 'ℐ',\n imagpart: 'ℑ',\n imath: 'ı',\n imof: '⊷',\n imped: 'Ƶ',\n in: '∈',\n incare: '℅',\n infin: '∞',\n infintie: '⧝',\n inodot: 'ı',\n int: '∫',\n intcal: '⊺',\n integers: 'ℤ',\n intercal: '⊺',\n intlarhk: '⨗',\n intprod: '⨼',\n iocy: 'ё',\n iogon: 'į',\n iopf: '𝕚',\n iota: 'ι',\n iprod: '⨼',\n iquest: '¿',\n iscr: '𝒾',\n isin: '∈',\n isinE: '⋹',\n isindot: '⋵',\n isins: '⋴',\n isinsv: '⋳',\n isinv: '∈',\n it: '',\n itilde: 'ĩ',\n iukcy: 'і',\n iuml: 'ï',\n jcirc: 'ĵ',\n jcy: 'й',\n jfr: '𝔧',\n jmath: 'ȷ',\n jopf: '𝕛',\n jscr: '𝒿',\n jsercy: 'ј',\n jukcy: 'є',\n kappa: 'κ',\n kappav: 'ϰ',\n kcedil: 'ķ',\n kcy: 'к',\n kfr: '𝔨',\n kgreen: 'ĸ',\n khcy: 'х',\n kjcy: 'ќ',\n kopf: '𝕜',\n kscr: '𝓀',\n lAarr: '⇚',\n lArr: '⇐',\n lAtail: '⤛',\n lBarr: '⤎',\n lE: '≦',\n lEg: '⪋',\n lHar: '⥢',\n lacute: 'ĺ',\n laemptyv: '⦴',\n lagran: 'ℒ',\n lambda: 'λ',\n lang: '⟨',\n langd: '⦑',\n langle: '⟨',\n lap: '⪅',\n laquo: '«',\n larr: '←',\n larrb: '⇤',\n larrbfs: '⤟',\n larrfs: '⤝',\n larrhk: '↩',\n larrlp: '↫',\n larrpl: '⤹',\n larrsim: '⥳',\n larrtl: '↢',\n lat: '⪫',\n latail: '⤙',\n late: '⪭',\n lates: '⪭︀',\n lbarr: '⤌',\n lbbrk: '❲',\n lbrace: '{',\n lbrack: '[',\n lbrke: '⦋',\n lbrksld: '⦏',\n lbrkslu: '⦍',\n lcaron: 'ľ',\n lcedil: 'ļ',\n lceil: '⌈',\n lcub: '{',\n lcy: 'л',\n ldca: '⤶',\n ldquo: '“',\n ldquor: '„',\n ldrdhar: '⥧',\n ldrushar: '⥋',\n ldsh: '↲',\n le: '≤',\n leftarrow: '←',\n leftarrowtail: '↢',\n leftharpoondown: '↽',\n leftharpoonup: '↼',\n leftleftarrows: '⇇',\n leftrightarrow: '↔',\n leftrightarrows: '⇆',\n leftrightharpoons: '⇋',\n leftrightsquigarrow: '↭',\n leftthreetimes: '⋋',\n leg: '⋚',\n leq: '≤',\n leqq: '≦',\n leqslant: '⩽',\n les: '⩽',\n lescc: '⪨',\n lesdot: '⩿',\n lesdoto: '⪁',\n lesdotor: '⪃',\n lesg: '⋚︀',\n lesges: '⪓',\n lessapprox: '⪅',\n lessdot: '⋖',\n lesseqgtr: '⋚',\n lesseqqgtr: '⪋',\n lessgtr: '≶',\n lesssim: '≲',\n lfisht: '⥼',\n lfloor: '⌊',\n lfr: '𝔩',\n lg: '≶',\n lgE: '⪑',\n lhard: '↽',\n lharu: '↼',\n lharul: '⥪',\n lhblk: '▄',\n ljcy: 'љ',\n ll: '≪',\n llarr: '⇇',\n llcorner: '⌞',\n llhard: '⥫',\n lltri: '◺',\n lmidot: 'ŀ',\n lmoust: '⎰',\n lmoustache: '⎰',\n lnE: '≨',\n lnap: '⪉',\n lnapprox: '⪉',\n lne: '⪇',\n lneq: '⪇',\n lneqq: '≨',\n lnsim: '⋦',\n loang: '⟬',\n loarr: '⇽',\n lobrk: '⟦',\n longleftarrow: '⟵',\n longleftrightarrow: '⟷',\n longmapsto: '⟼',\n longrightarrow: '⟶',\n looparrowleft: '↫',\n looparrowright: '↬',\n lopar: '⦅',\n lopf: '𝕝',\n loplus: '⨭',\n lotimes: '⨴',\n lowast: '∗',\n lowbar: '_',\n loz: '◊',\n lozenge: '◊',\n lozf: '⧫',\n lpar: '(',\n lparlt: '⦓',\n lrarr: '⇆',\n lrcorner: '⌟',\n lrhar: '⇋',\n lrhard: '⥭',\n lrm: '',\n lrtri: '⊿',\n lsaquo: '‹',\n lscr: '𝓁',\n lsh: '↰',\n lsim: '≲',\n lsime: '⪍',\n lsimg: '⪏',\n lsqb: '[',\n lsquo: '‘',\n lsquor: '‚',\n lstrok: 'ł',\n lt: '<',\n ltcc: '⪦',\n ltcir: '⩹',\n ltdot: '⋖',\n lthree: '⋋',\n ltimes: '⋉',\n ltlarr: '⥶',\n ltquest: '⩻',\n ltrPar: '⦖',\n ltri: '◃',\n ltrie: '⊴',\n ltrif: '◂',\n lurdshar: '⥊',\n luruhar: '⥦',\n lvertneqq: '≨︀',\n lvnE: '≨︀',\n mDDot: '∺',\n macr: '¯',\n male: '♂',\n malt: '✠',\n maltese: '✠',\n map: '↦',\n mapsto: '↦',\n mapstodown: '↧',\n mapstoleft: '↤',\n mapstoup: '↥',\n marker: '▮',\n mcomma: '⨩',\n mcy: 'м',\n mdash: '—',\n measuredangle: '∡',\n mfr: '𝔪',\n mho: '℧',\n micro: 'µ',\n mid: '∣',\n midast: '*',\n midcir: '⫰',\n middot: '·',\n minus: '−',\n minusb: '⊟',\n minusd: '∸',\n minusdu: '⨪',\n mlcp: '⫛',\n mldr: '…',\n mnplus: '∓',\n models: '⊧',\n mopf: '𝕞',\n mp: '∓',\n mscr: '𝓂',\n mstpos: '∾',\n mu: 'μ',\n multimap: '⊸',\n mumap: '⊸',\n nGg: '⋙̸',\n nGt: '≫⃒',\n nGtv: '≫̸',\n nLeftarrow: '⇍',\n nLeftrightarrow: '⇎',\n nLl: '⋘̸',\n nLt: '≪⃒',\n nLtv: '≪̸',\n nRightarrow: '⇏',\n nVDash: '⊯',\n nVdash: '⊮',\n nabla: '∇',\n nacute: 'ń',\n nang: '∠⃒',\n nap: '≉',\n napE: '⩰̸',\n napid: '≋̸',\n napos: 'ʼn',\n napprox: '≉',\n natur: '♮',\n natural: '♮',\n naturals: 'ℕ',\n nbsp: ' ',\n nbump: '≎̸',\n nbumpe: '≏̸',\n ncap: '⩃',\n ncaron: 'ň',\n ncedil: 'ņ',\n ncong: '≇',\n ncongdot: '⩭̸',\n ncup: '⩂',\n ncy: 'н',\n ndash: '–',\n ne: '≠',\n neArr: '⇗',\n nearhk: '⤤',\n nearr: '↗',\n nearrow: '↗',\n nedot: '≐̸',\n nequiv: '≢',\n nesear: '⤨',\n nesim: '≂̸',\n nexist: '∄',\n nexists: '∄',\n nfr: '𝔫',\n ngE: '≧̸',\n nge: '≱',\n ngeq: '≱',\n ngeqq: '≧̸',\n ngeqslant: '⩾̸',\n nges: '⩾̸',\n ngsim: '≵',\n ngt: '≯',\n ngtr: '≯',\n nhArr: '⇎',\n nharr: '↮',\n nhpar: '⫲',\n ni: '∋',\n nis: '⋼',\n nisd: '⋺',\n niv: '∋',\n njcy: 'њ',\n nlArr: '⇍',\n nlE: '≦̸',\n nlarr: '↚',\n nldr: '‥',\n nle: '≰',\n nleftarrow: '↚',\n nleftrightarrow: '↮',\n nleq: '≰',\n nleqq: '≦̸',\n nleqslant: '⩽̸',\n nles: '⩽̸',\n nless: '≮',\n nlsim: '≴',\n nlt: '≮',\n nltri: '⋪',\n nltrie: '⋬',\n nmid: '∤',\n nopf: '𝕟',\n not: '¬',\n notin: '∉',\n notinE: '⋹̸',\n notindot: '⋵̸',\n notinva: '∉',\n notinvb: '⋷',\n notinvc: '⋶',\n notni: '∌',\n notniva: '∌',\n notnivb: '⋾',\n notnivc: '⋽',\n npar: '∦',\n nparallel: '∦',\n nparsl: '⫽⃥',\n npart: '∂̸',\n npolint: '⨔',\n npr: '⊀',\n nprcue: '⋠',\n npre: '⪯̸',\n nprec: '⊀',\n npreceq: '⪯̸',\n nrArr: '⇏',\n nrarr: '↛',\n nrarrc: '⤳̸',\n nrarrw: '↝̸',\n nrightarrow: '↛',\n nrtri: '⋫',\n nrtrie: '⋭',\n nsc: '⊁',\n nsccue: '⋡',\n nsce: '⪰̸',\n nscr: '𝓃',\n nshortmid: '∤',\n nshortparallel: '∦',\n nsim: '≁',\n nsime: '≄',\n nsimeq: '≄',\n nsmid: '∤',\n nspar: '∦',\n nsqsube: '⋢',\n nsqsupe: '⋣',\n nsub: '⊄',\n nsubE: '⫅̸',\n nsube: '⊈',\n nsubset: '⊂⃒',\n nsubseteq: '⊈',\n nsubseteqq: '⫅̸',\n nsucc: '⊁',\n nsucceq: '⪰̸',\n nsup: '⊅',\n nsupE: '⫆̸',\n nsupe: '⊉',\n nsupset: '⊃⃒',\n nsupseteq: '⊉',\n nsupseteqq: '⫆̸',\n ntgl: '≹',\n ntilde: 'ñ',\n ntlg: '≸',\n ntriangleleft: '⋪',\n ntrianglelefteq: '⋬',\n ntriangleright: '⋫',\n ntrianglerighteq: '⋭',\n nu: 'ν',\n num: '#',\n numero: '№',\n numsp: ' ',\n nvDash: '⊭',\n nvHarr: '⤄',\n nvap: '≍⃒',\n nvdash: '⊬',\n nvge: '≥⃒',\n nvgt: '>⃒',\n nvinfin: '⧞',\n nvlArr: '⤂',\n nvle: '≤⃒',\n nvlt: '<⃒',\n nvltrie: '⊴⃒',\n nvrArr: '⤃',\n nvrtrie: '⊵⃒',\n nvsim: '∼⃒',\n nwArr: '⇖',\n nwarhk: '⤣',\n nwarr: '↖',\n nwarrow: '↖',\n nwnear: '⤧',\n oS: 'Ⓢ',\n oacute: 'ó',\n oast: '⊛',\n ocir: '⊚',\n ocirc: 'ô',\n ocy: 'о',\n odash: '⊝',\n odblac: 'ő',\n odiv: '⨸',\n odot: '⊙',\n odsold: '⦼',\n oelig: 'œ',\n ofcir: '⦿',\n ofr: '𝔬',\n ogon: '˛',\n ograve: 'ò',\n ogt: '⧁',\n ohbar: '⦵',\n ohm: 'Ω',\n oint: '∮',\n olarr: '↺',\n olcir: '⦾',\n olcross: '⦻',\n oline: '‾',\n olt: '⧀',\n omacr: 'ō',\n omega: 'ω',\n omicron: 'ο',\n omid: '⦶',\n ominus: '⊖',\n oopf: '𝕠',\n opar: '⦷',\n operp: '⦹',\n oplus: '⊕',\n or: '∨',\n orarr: '↻',\n ord: '⩝',\n order: 'ℴ',\n orderof: 'ℴ',\n ordf: 'ª',\n ordm: 'º',\n origof: '⊶',\n oror: '⩖',\n orslope: '⩗',\n orv: '⩛',\n oscr: 'ℴ',\n oslash: 'ø',\n osol: '⊘',\n otilde: 'õ',\n otimes: '⊗',\n otimesas: '⨶',\n ouml: 'ö',\n ovbar: '⌽',\n par: '∥',\n para: '¶',\n parallel: '∥',\n parsim: '⫳',\n parsl: '⫽',\n part: '∂',\n pcy: 'п',\n percnt: '%',\n period: '.',\n permil: '‰',\n perp: '⊥',\n pertenk: '‱',\n pfr: '𝔭',\n phi: 'φ',\n phiv: 'ϕ',\n phmmat: 'ℳ',\n phone: '☎',\n pi: 'π',\n pitchfork: '⋔',\n piv: 'ϖ',\n planck: 'ℏ',\n planckh: 'ℎ',\n plankv: 'ℏ',\n plus: '+',\n plusacir: '⨣',\n plusb: '⊞',\n pluscir: '⨢',\n plusdo: '∔',\n plusdu: '⨥',\n pluse: '⩲',\n plusmn: '±',\n plussim: '⨦',\n plustwo: '⨧',\n pm: '±',\n pointint: '⨕',\n popf: '𝕡',\n pound: '£',\n pr: '≺',\n prE: '⪳',\n prap: '⪷',\n prcue: '≼',\n pre: '⪯',\n prec: '≺',\n precapprox: '⪷',\n preccurlyeq: '≼',\n preceq: '⪯',\n precnapprox: '⪹',\n precneqq: '⪵',\n precnsim: '⋨',\n precsim: '≾',\n prime: '′',\n primes: 'ℙ',\n prnE: '⪵',\n prnap: '⪹',\n prnsim: '⋨',\n prod: '∏',\n profalar: '⌮',\n profline: '⌒',\n profsurf: '⌓',\n prop: '∝',\n propto: '∝',\n prsim: '≾',\n prurel: '⊰',\n pscr: '𝓅',\n psi: 'ψ',\n puncsp: ' ',\n qfr: '𝔮',\n qint: '⨌',\n qopf: '𝕢',\n qprime: '⁗',\n qscr: '𝓆',\n quaternions: 'ℍ',\n quatint: '⨖',\n quest: '?',\n questeq: '≟',\n quot: '\"',\n rAarr: '⇛',\n rArr: '⇒',\n rAtail: '⤜',\n rBarr: '⤏',\n rHar: '⥤',\n race: '∽̱',\n racute: 'ŕ',\n radic: '√',\n raemptyv: '⦳',\n rang: '⟩',\n rangd: '⦒',\n range: '⦥',\n rangle: '⟩',\n raquo: '»',\n rarr: '→',\n rarrap: '⥵',\n rarrb: '⇥',\n rarrbfs: '⤠',\n rarrc: '⤳',\n rarrfs: '⤞',\n rarrhk: '↪',\n rarrlp: '↬',\n rarrpl: '⥅',\n rarrsim: '⥴',\n rarrtl: '↣',\n rarrw: '↝',\n ratail: '⤚',\n ratio: '∶',\n rationals: 'ℚ',\n rbarr: '⤍',\n rbbrk: '❳',\n rbrace: '}',\n rbrack: ']',\n rbrke: '⦌',\n rbrksld: '⦎',\n rbrkslu: '⦐',\n rcaron: 'ř',\n rcedil: 'ŗ',\n rceil: '⌉',\n rcub: '}',\n rcy: 'р',\n rdca: '⤷',\n rdldhar: '⥩',\n rdquo: '”',\n rdquor: '”',\n rdsh: '↳',\n real: 'ℜ',\n realine: 'ℛ',\n realpart: 'ℜ',\n reals: 'ℝ',\n rect: '▭',\n reg: '®',\n rfisht: '⥽',\n rfloor: '⌋',\n rfr: '𝔯',\n rhard: '⇁',\n rharu: '⇀',\n rharul: '⥬',\n rho: 'ρ',\n rhov: 'ϱ',\n rightarrow: '→',\n rightarrowtail: '↣',\n rightharpoondown: '⇁',\n rightharpoonup: '⇀',\n rightleftarrows: '⇄',\n rightleftharpoons: '⇌',\n rightrightarrows: '⇉',\n rightsquigarrow: '↝',\n rightthreetimes: '⋌',\n ring: '˚',\n risingdotseq: '≓',\n rlarr: '⇄',\n rlhar: '⇌',\n rlm: '',\n rmoust: '⎱',\n rmoustache: '⎱',\n rnmid: '⫮',\n roang: '⟭',\n roarr: '⇾',\n robrk: '⟧',\n ropar: '⦆',\n ropf: '𝕣',\n roplus: '⨮',\n rotimes: '⨵',\n rpar: ')',\n rpargt: '⦔',\n rppolint: '⨒',\n rrarr: '⇉',\n rsaquo: '›',\n rscr: '𝓇',\n rsh: '↱',\n rsqb: ']',\n rsquo: '’',\n rsquor: '’',\n rthree: '⋌',\n rtimes: '⋊',\n rtri: '▹',\n rtrie: '⊵',\n rtrif: '▸',\n rtriltri: '⧎',\n ruluhar: '⥨',\n rx: '℞',\n sacute: 'ś',\n sbquo: '‚',\n sc: '≻',\n scE: '⪴',\n scap: '⪸',\n scaron: 'š',\n sccue: '≽',\n sce: '⪰',\n scedil: 'ş',\n scirc: 'ŝ',\n scnE: '⪶',\n scnap: '⪺',\n scnsim: '⋩',\n scpolint: '⨓',\n scsim: '≿',\n scy: 'с',\n sdot: '⋅',\n sdotb: '⊡',\n sdote: '⩦',\n seArr: '⇘',\n searhk: '⤥',\n searr: '↘',\n searrow: '↘',\n sect: '§',\n semi: ';',\n seswar: '⤩',\n setminus: '∖',\n setmn: '∖',\n sext: '✶',\n sfr: '𝔰',\n sfrown: '⌢',\n sharp: '♯',\n shchcy: 'щ',\n shcy: 'ш',\n shortmid: '∣',\n shortparallel: '∥',\n shy: '',\n sigma: 'σ',\n sigmaf: 'ς',\n sigmav: 'ς',\n sim: '∼',\n simdot: '⩪',\n sime: '≃',\n simeq: '≃',\n simg: '⪞',\n simgE: '⪠',\n siml: '⪝',\n simlE: '⪟',\n simne: '≆',\n simplus: '⨤',\n simrarr: '⥲',\n slarr: '←',\n smallsetminus: '∖',\n smashp: '⨳',\n smeparsl: '⧤',\n smid: '∣',\n smile: '⌣',\n smt: '⪪',\n smte: '⪬',\n smtes: '⪬︀',\n softcy: 'ь',\n sol: '/',\n solb: '⧄',\n solbar: '⌿',\n sopf: '𝕤',\n spades: '♠',\n spadesuit: '♠',\n spar: '∥',\n sqcap: '⊓',\n sqcaps: '⊓︀',\n sqcup: '⊔',\n sqcups: '⊔︀',\n sqsub: '⊏',\n sqsube: '⊑',\n sqsubset: '⊏',\n sqsubseteq: '⊑',\n sqsup: '⊐',\n sqsupe: '⊒',\n sqsupset: '⊐',\n sqsupseteq: '⊒',\n squ: '□',\n square: '□',\n squarf: '▪',\n squf: '▪',\n srarr: '→',\n sscr: '𝓈',\n ssetmn: '∖',\n ssmile: '⌣',\n sstarf: '⋆',\n star: '☆',\n starf: '★',\n straightepsilon: 'ϵ',\n straightphi: 'ϕ',\n strns: '¯',\n sub: '⊂',\n subE: '⫅',\n subdot: '⪽',\n sube: '⊆',\n subedot: '⫃',\n submult: '⫁',\n subnE: '⫋',\n subne: '⊊',\n subplus: '⪿',\n subrarr: '⥹',\n subset: '⊂',\n subseteq: '⊆',\n subseteqq: '⫅',\n subsetneq: '⊊',\n subsetneqq: '⫋',\n subsim: '⫇',\n subsub: '⫕',\n subsup: '⫓',\n succ: '≻',\n succapprox: '⪸',\n succcurlyeq: '≽',\n succeq: '⪰',\n succnapprox: '⪺',\n succneqq: '⪶',\n succnsim: '⋩',\n succsim: '≿',\n sum: '∑',\n sung: '♪',\n sup1: '¹',\n sup2: '²',\n sup3: '³',\n sup: '⊃',\n supE: '⫆',\n supdot: '⪾',\n supdsub: '⫘',\n supe: '⊇',\n supedot: '⫄',\n suphsol: '⟉',\n suphsub: '⫗',\n suplarr: '⥻',\n supmult: '⫂',\n supnE: '⫌',\n supne: '⊋',\n supplus: '⫀',\n supset: '⊃',\n supseteq: '⊇',\n supseteqq: '⫆',\n supsetneq: '⊋',\n supsetneqq: '⫌',\n supsim: '⫈',\n supsub: '⫔',\n supsup: '⫖',\n swArr: '⇙',\n swarhk: '⤦',\n swarr: '↙',\n swarrow: '↙',\n swnwar: '⤪',\n szlig: 'ß',\n target: '⌖',\n tau: 'τ',\n tbrk: '⎴',\n tcaron: 'ť',\n tcedil: 'ţ',\n tcy: 'т',\n tdot: '⃛',\n telrec: '⌕',\n tfr: '𝔱',\n there4: '∴',\n therefore: '∴',\n theta: 'θ',\n thetasym: 'ϑ',\n thetav: 'ϑ',\n thickapprox: '≈',\n thicksim: '∼',\n thinsp: ' ',\n thkap: '≈',\n thksim: '∼',\n thorn: 'þ',\n tilde: '˜',\n times: '×',\n timesb: '⊠',\n timesbar: '⨱',\n timesd: '⨰',\n tint: '∭',\n toea: '⤨',\n top: '⊤',\n topbot: '⌶',\n topcir: '⫱',\n topf: '𝕥',\n topfork: '⫚',\n tosa: '⤩',\n tprime: '‴',\n trade: '™',\n triangle: '▵',\n triangledown: '▿',\n triangleleft: '◃',\n trianglelefteq: '⊴',\n triangleq: '≜',\n triangleright: '▹',\n trianglerighteq: '⊵',\n tridot: '◬',\n trie: '≜',\n triminus: '⨺',\n triplus: '⨹',\n trisb: '⧍',\n tritime: '⨻',\n trpezium: '⏢',\n tscr: '𝓉',\n tscy: 'ц',\n tshcy: 'ћ',\n tstrok: 'ŧ',\n twixt: '≬',\n twoheadleftarrow: '↞',\n twoheadrightarrow: '↠',\n uArr: '⇑',\n uHar: '⥣',\n uacute: 'ú',\n uarr: '↑',\n ubrcy: 'ў',\n ubreve: 'ŭ',\n ucirc: 'û',\n ucy: 'у',\n udarr: '⇅',\n udblac: 'ű',\n udhar: '⥮',\n ufisht: '⥾',\n ufr: '𝔲',\n ugrave: 'ù',\n uharl: '↿',\n uharr: '↾',\n uhblk: '▀',\n ulcorn: '⌜',\n ulcorner: '⌜',\n ulcrop: '⌏',\n ultri: '◸',\n umacr: 'ū',\n uml: '¨',\n uogon: 'ų',\n uopf: '𝕦',\n uparrow: '↑',\n updownarrow: '↕',\n upharpoonleft: '↿',\n upharpoonright: '↾',\n uplus: '⊎',\n upsi: 'υ',\n upsih: 'ϒ',\n upsilon: 'υ',\n upuparrows: '⇈',\n urcorn: '⌝',\n urcorner: '⌝',\n urcrop: '⌎',\n uring: 'ů',\n urtri: '◹',\n uscr: '𝓊',\n utdot: '⋰',\n utilde: 'ũ',\n utri: '▵',\n utrif: '▴',\n uuarr: '⇈',\n uuml: 'ü',\n uwangle: '⦧',\n vArr: '⇕',\n vBar: '⫨',\n vBarv: '⫩',\n vDash: '⊨',\n vangrt: '⦜',\n varepsilon: 'ϵ',\n varkappa: 'ϰ',\n varnothing: '∅',\n varphi: 'ϕ',\n varpi: 'ϖ',\n varpropto: '∝',\n varr: '↕',\n varrho: 'ϱ',\n varsigma: 'ς',\n varsubsetneq: '⊊︀',\n varsubsetneqq: '⫋︀',\n varsupsetneq: '⊋︀',\n varsupsetneqq: '⫌︀',\n vartheta: 'ϑ',\n vartriangleleft: '⊲',\n vartriangleright: '⊳',\n vcy: 'в',\n vdash: '⊢',\n vee: '∨',\n veebar: '⊻',\n veeeq: '≚',\n vellip: '⋮',\n verbar: '|',\n vert: '|',\n vfr: '𝔳',\n vltri: '⊲',\n vnsub: '⊂⃒',\n vnsup: '⊃⃒',\n vopf: '𝕧',\n vprop: '∝',\n vrtri: '⊳',\n vscr: '𝓋',\n vsubnE: '⫋︀',\n vsubne: '⊊︀',\n vsupnE: '⫌︀',\n vsupne: '⊋︀',\n vzigzag: '⦚',\n wcirc: 'ŵ',\n wedbar: '⩟',\n wedge: '∧',\n wedgeq: '≙',\n weierp: '℘',\n wfr: '𝔴',\n wopf: '𝕨',\n wp: '℘',\n wr: '≀',\n wreath: '≀',\n wscr: '𝓌',\n xcap: '⋂',\n xcirc: '◯',\n xcup: '⋃',\n xdtri: '▽',\n xfr: '𝔵',\n xhArr: '⟺',\n xharr: '⟷',\n xi: 'ξ',\n xlArr: '⟸',\n xlarr: '⟵',\n xmap: '⟼',\n xnis: '⋻',\n xodot: '⨀',\n xopf: '𝕩',\n xoplus: '⨁',\n xotime: '⨂',\n xrArr: '⟹',\n xrarr: '⟶',\n xscr: '𝓍',\n xsqcup: '⨆',\n xuplus: '⨄',\n xutri: '△',\n xvee: '⋁',\n xwedge: '⋀',\n yacute: 'ý',\n yacy: 'я',\n ycirc: 'ŷ',\n ycy: 'ы',\n yen: '¥',\n yfr: '𝔶',\n yicy: 'ї',\n yopf: '𝕪',\n yscr: '𝓎',\n yucy: 'ю',\n yuml: 'ÿ',\n zacute: 'ź',\n zcaron: 'ž',\n zcy: 'з',\n zdot: 'ż',\n zeetrf: 'ℨ',\n zeta: 'ζ',\n zfr: '𝔷',\n zhcy: 'ж',\n zigrarr: '⇝',\n zopf: '𝕫',\n zscr: '𝓏',\n zwj: '',\n zwnj: ''\n}\n","import {characterEntities} from 'character-entities'\n\n// To do: next major: use `Object.hasOwn`.\nconst own = {}.hasOwnProperty\n\n/**\n * Decode a single character reference (without the `&` or `;`).\n * You probably only need this when you’re building parsers yourself that follow\n * different rules compared to HTML.\n * This is optimized to be tiny in browsers.\n *\n * @param {string} value\n * `notin` (named), `#123` (deci), `#x123` (hexa).\n * @returns {string|false}\n * Decoded reference.\n */\nexport function decodeNamedCharacterReference(value) {\n return own.call(characterEntities, value) ? characterEntities[value] : false\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 {undefined}\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’s 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’s 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’s 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 * @import {\n * Extension,\n * Handles,\n * HtmlExtension,\n * NormalizedExtension\n * } from 'micromark-util-types'\n */\n\nimport {splice} from 'micromark-util-chunked'\n\nconst hasOwnProperty = {}.hasOwnProperty\n\n/**\n * Combine multiple syntax extensions into one.\n *\n * @param {ReadonlyArray<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 {undefined}\n * Nothing.\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 * List of constructs to merge into.\n * @param {Array<unknown>} list\n * List of constructs to merge.\n * @returns {undefined}\n * Nothing.\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 {ReadonlyArray<HtmlExtension>} htmlExtensions\n * List of HTML extensions.\n * @returns {HtmlExtension}\n * 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 {undefined}\n * Nothing.\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","/**\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.fromCodePoint(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 || code === 11 || 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 > 55_295 && code < 57_344 ||\n // Noncharacters.\n code > 64_975 && code < 65_008 || /* eslint-disable no-bitwise */\n (code & 65_535) === 65_535 || (code & 65_535) === 65_534 || /* eslint-enable no-bitwise */\n // Out of range\n code > 1_114_111) {\n return \"\\uFFFD\";\n }\n return String.fromCodePoint(code);\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 “uppercase”, such as U+03F4 (`ϴ`), but if their\n * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different\n * uppercase character (U+0398 (`Θ`)).\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 value\n // Collapse markdown whitespace.\n .replace(/[\\t\\n\\r ]+/g, \" \")\n // Trim.\n .replace(/^ | $/g, '')\n // Some characters are considered “uppercase”, 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().toUpperCase();\n}","/**\n * @import {Code} from 'micromark-util-types'\n */\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 {boolean}\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 {boolean}\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 {boolean}\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 {boolean}\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 {boolean}\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 {boolean}\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(/\\p{P}|\\p{S}/u);\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 * Expression.\n * @returns {(code: Code) => boolean}\n * Check.\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 && code > -1 && regex.test(String.fromCharCode(code));\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 | null | 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’s relative.\n colon < 0 ||\n // If the first colon is after a `?`, `#`, or `/`, it’s not a protocol.\n slash > -1 && colon > slash || questionMark > -1 && colon > questionMark || numberSign > -1 && colon > numberSign ||\n // It is a protocol, it should be allowed.\n protocol.test(value.slice(0, colon))) {\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 (code === 37 && asciiAlphanumeric(value.charCodeAt(index + 1)) && asciiAlphanumeric(value.charCodeAt(index + 2))) {\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 > 55_295 && code < 57_344) {\n const next = value.charCodeAt(index + 1);\n\n // A correct surrogate pair.\n if (code < 56_320 && next > 56_319 && next < 57_344) {\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 * @import {Effects, State, TokenType} from 'micromark-util-types'\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 `␉` represents a tab (plus how much it expands) and `␠` represents a\n * single space.\n *\n * ```markdown\n * ␉\n * ␠␠␠␠\n * ␉␠\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 {State}\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 * @import {\n * InitialConstruct,\n * Initializer,\n * State,\n * TokenizeContext,\n * Token\n * } from 'micromark-util-types'\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 * Context.\n * @type {Initializer}\n * Content.\n */\nfunction initializeContent(effects) {\n const contentStart = effects.attempt(this.parser.constructs.contentInitial, afterContentStartConstruct, paragraphInitial);\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 * @import {\n * Construct,\n * ContainerState,\n * InitialConstruct,\n * Initializer,\n * Point,\n * State,\n * TokenizeContext,\n * Tokenizer,\n * Token\n * } from 'micromark-util-types'\n */\n\n/**\n * @typedef {[Construct, ContainerState]} StackItem\n * Construct and its state.\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 * Self.\n * @type {Initializer}\n * 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(item[0].continuation, documentContinue, checkNewContainers)(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’s 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 (self.events[indexBeforeFlow][0] === 'exit' && self.events[indexBeforeFlow][1].type === \"chunkFlow\") {\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 = {\n ...point\n };\n index++;\n }\n\n // Inject the exits earlier (they’re still also at the end).\n splice(self.events, indexBeforeFlow + 1, 0, self.events.slice(indexBeforeExits));\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’s 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’t have containers “pierce” 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’d be interrupting it w/ a new container if there’s 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(childFlow.currentConstruct && !childFlow._gfmTableDynamicInterruptHack);\n }\n\n // Check if there is a new container.\n self.containerState = {};\n return effects.check(containerConstruct, thereIsANewContainer, thereIsNoNewContainer)(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(containerConstruct, containerContinue, flowStart)(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 _tokenizer: childFlow,\n contentType: \"flow\",\n previous: childToken\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 * Token.\n * @param {boolean | undefined} [endOfFile]\n * Whether the token is at the end of the file (default: `false`).\n * @returns {undefined}\n * Nothing.\n */\n function writeToChild(token, endOfFile) {\n const stream = self.sliceStream(token);\n if (endOfFile) 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’t “unmake” 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 “unmakes” the first line\n // and turns the whole into one content block.\n //\n // We’ve 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…\n childFlow.events[index][1].start.offset < lineStartOffset && (\n // …and either is not ended yet…\n !childFlow.events[index][1].end ||\n // …or ends after it.\n childFlow.events[index][1].end.offset > lineStartOffset)) {\n // Exit: there’s still something open, which means it’s 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 (self.events[indexBeforeFlow][0] === 'exit' && self.events[indexBeforeFlow][1].type === \"chunkFlow\") {\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 = {\n ...point\n };\n index++;\n }\n\n // Inject the exits earlier (they’re still also at the end).\n splice(self.events, indexBeforeFlow + 1, 0, self.events.slice(indexBeforeExits));\n\n // Discard the duplicate exits.\n self.events.length = index;\n }\n }\n\n /**\n * @param {number} size\n * Size.\n * @returns {undefined}\n * Nothing.\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 * Context.\n * @type {Tokenizer}\n * Tokenizer.\n */\nfunction tokenizeContainer(effects, ok, nok) {\n // Always populated by defaults.\n\n return factorySpace(effects, effects.attempt(this.parser.constructs.document, ok, nok), \"linePrefix\", this.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4);\n}","/**\n * @import {Code} from 'micromark-util-types'\n */\n\nimport { markdownLineEndingOrSpace, unicodePunctuation, unicodeWhitespace } 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 * > 👉 **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 (code === null || markdownLineEndingOrSpace(code) || unicodeWhitespace(code)) {\n return 1;\n }\n if (unicodePunctuation(code)) {\n return 2;\n }\n}","/**\n * @import {Event, Resolver, TokenizeContext} from 'micromark-util-types'\n */\n\n/**\n * Call all `resolveAll`s.\n *\n * @param {ReadonlyArray<{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 * @import {\n * Code,\n * Construct,\n * Event,\n * Point,\n * Resolver,\n * State,\n * TokenizeContext,\n * Tokenizer,\n * Token\n * } from 'micromark-util-types'\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 resolveAll: resolveAllAttention,\n tokenize: tokenizeAttention\n};\n\n/**\n * Take all events and resolve attention to emphasis or strong.\n *\n * @type {Resolver}\n */\n// eslint-disable-next-line complexity\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’s\n // a bottleneck for malicious stuff.\n while (++index < events.length) {\n // Find a token that can close.\n if (events[index][0] === 'enter' && events[index][1].type === 'attentionSequence' && events[index][1]._close) {\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 (events[open][0] === 'exit' && events[open][1].type === 'attentionSequence' && events[open][1]._open &&\n // If the markers are the same:\n context.sliceSerialize(events[open][1]).charCodeAt(0) === context.sliceSerialize(events[index][1]).charCodeAt(0)) {\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’t match.\n if ((events[open][1]._close || events[index][1]._open) && (events[index][1].end.offset - events[index][1].start.offset) % 3 && !((events[open][1].end.offset - events[open][1].start.offset + events[index][1].end.offset - events[index][1].start.offset) % 3)) {\n continue;\n }\n\n // Number of markers to use from the sequence.\n use = events[open][1].end.offset - events[open][1].start.offset > 1 && events[index][1].end.offset - events[index][1].start.offset > 1 ? 2 : 1;\n const start = {\n ...events[open][1].end\n };\n const end = {\n ...events[index][1].start\n };\n movePoint(start, -use);\n movePoint(end, use);\n openingSequence = {\n type: use > 1 ? \"strongSequence\" : \"emphasisSequence\",\n start,\n end: {\n ...events[open][1].end\n }\n };\n closingSequence = {\n type: use > 1 ? \"strongSequence\" : \"emphasisSequence\",\n start: {\n ...events[index][1].start\n },\n end\n };\n text = {\n type: use > 1 ? \"strongText\" : \"emphasisText\",\n start: {\n ...events[open][1].end\n },\n end: {\n ...events[index][1].start\n }\n };\n group = {\n type: use > 1 ? \"strong\" : \"emphasis\",\n start: {\n ...openingSequence.start\n },\n end: {\n ...closingSequence.end\n }\n };\n events[open][1].end = {\n ...openingSequence.start\n };\n events[index][1].start = {\n ...closingSequence.end\n };\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, [['enter', events[open][1], context], ['exit', events[open][1], context]]);\n }\n\n // Opening.\n nextEvents = push(nextEvents, [['enter', group, context], ['enter', openingSequence, context], ['exit', openingSequence, context], ['enter', text, context]]);\n\n // Always populated by defaults.\n\n // Between.\n nextEvents = push(nextEvents, resolveAll(context.parser.constructs.insideSpan.null, events.slice(open + 1, index), context));\n\n // Closing.\n nextEvents = push(nextEvents, [['exit', text, context], ['enter', closingSequence, context], ['exit', closingSequence, context], ['exit', group, context]]);\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, [['enter', events[index][1], context], ['exit', events[index][1], context]]);\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 * Context.\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 = !after || after === 2 && before || attentionMarkers.includes(code);\n const close = !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’s not possible to move past other\n * chunks (replacement characters, tabs, or line endings).\n *\n * @param {Point} point\n * Point.\n * @param {number} offset\n * Amount to move.\n * @returns {undefined}\n * Nothing.\n */\nfunction movePoint(point, offset) {\n point.column += offset;\n point.offset += offset;\n point._bufferIndex += offset;\n}","/**\n * @import {\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { asciiAlphanumeric, asciiAlpha, asciiAtext, asciiControl } from 'micromark-util-character';\n/** @type {Construct} */\nexport const autolink = {\n name: 'autolink',\n tokenize: tokenizeAutolink\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\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 if (code === 64) {\n return nok(code);\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 ((code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) && size++ < 32) {\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 * @import {\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const blankLine = {\n partial: true,\n tokenize: tokenizeBlankLine\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeBlankLine(effects, ok, nok) {\n return start;\n\n /**\n * Start of blank line.\n *\n * > 👉 **Note**: `␠` represents a space character.\n *\n * ```markdown\n * > | ␠␠␊\n * ^\n * > | ␊\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n return markdownSpace(code) ? factorySpace(effects, after, \"linePrefix\")(code) : after(code);\n }\n\n /**\n * At eof/eol, after optional whitespace.\n *\n * > 👉 **Note**: `␠` represents a space character.\n *\n * ```markdown\n * > | ␠␠␊\n * ^\n * > | ␊\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n return code === null || markdownLineEnding(code) ? ok(code) : nok(code);\n }\n}","/**\n * @import {\n * Construct,\n * Exiter,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const blockQuote = {\n continuation: {\n tokenize: tokenizeBlockQuoteContinuation\n },\n exit,\n name: 'blockQuote',\n tokenize: tokenizeBlockQuoteStart\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\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 * Context.\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(effects, contBefore, \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(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 * @import {\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\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 * Context.\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 * @import {\n * Code,\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { decodeNamedCharacterReference } from 'decode-named-character-reference';\nimport { asciiAlphanumeric, asciiDigit, asciiHexDigit } from 'micromark-util-character';\n/** @type {Construct} */\nexport const characterReference = {\n name: 'characterReference',\n tokenize: tokenizeCharacterReference\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\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&b\n * ^\n * > | a{b\n * ^\n * > | a	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&b\n * ^\n * > | a{b\n * ^\n * > | a	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{b\n * ^\n * > | a	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&b\n * ^^^\n * > | a{b\n * ^^^\n * > | a	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 (test === asciiAlphanumeric && !decodeNamedCharacterReference(self.sliceSerialize(token))) {\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 * @import {\n * Code,\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nconst nonLazyContinuation = {\n partial: true,\n tokenize: tokenizeNonLazyContinuation\n};\n\n/** @type {Construct} */\nexport const codeFenced = {\n concrete: true,\n name: 'codeFenced',\n tokenize: tokenizeCodeFenced\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeCodeFenced(effects, ok, nok) {\n const self = this;\n /** @type {Construct} */\n const closeStart = {\n partial: true,\n tokenize: tokenizeCloseStart\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 = tail && tail[1].type === \"linePrefix\" ? tail[2].sliceSerialize(tail[1], true).length : 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) ? factorySpace(effects, infoBefore, \"whitespace\")(code) : 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 ? ok(code) : 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) ? factorySpace(effects, beforeContentChunk, \"linePrefix\", initialPrefix + 1)(code) : 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 * Context.\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) ? factorySpace(effects, beforeSequenceClose, \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code) : 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) ? factorySpace(effects, sequenceCloseAfter, \"whitespace\")(code) : 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 * Context.\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 * @import {\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\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 partial: true,\n tokenize: tokenizeFurtherStart\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\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 && tail[1].type === \"linePrefix\" && tail[2].sliceSerialize(tail[1], true).length >= 4 ? atBreak(code) : 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 * Context.\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’t 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’t 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 && tail[1].type === \"linePrefix\" && tail[2].sliceSerialize(tail[1], true).length >= 4 ? ok(code) : markdownLineEnding(code) ? furtherStart(code) : nok(code);\n }\n}","/**\n * @import {\n * Construct,\n * Previous,\n * Resolver,\n * State,\n * TokenizeContext,\n * Tokenizer,\n * Token\n * } from 'micromark-util-types'\n */\n\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {Construct} */\nexport const codeText = {\n name: 'codeText',\n previous,\n resolve: resolveCodeText,\n tokenize: tokenizeCodeText\n};\n\n// To do: next major: don’t 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 ((events[headEnterIndex][1].type === \"lineEnding\" || events[headEnterIndex][1].type === 'space') && (events[tailExitIndex][1].type === \"lineEnding\" || events[tailExitIndex][1].type === 'space')) {\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 (index === tailExitIndex || events[index][1].type === \"lineEnding\") {\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 * Context.\n * @type {Previous}\n */\nfunction previous(code) {\n // If there is a previous code, there will always be a tail.\n return code !== 96 || this.events[this.events.length - 1][1].type === \"characterEscape\";\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\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’t do spaces in resolve, but when compiling,\n // like `markdown-rs`.\n // Tabs don’t work, and virtual spaces don’t 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 (code === null || code === 32 || code === 96 || markdownLineEnding(code)) {\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 * Some of the internal operations of micromark do lots of editing\n * operations on very large arrays. This runs into problems with two\n * properties of most circa-2020 JavaScript interpreters:\n *\n * - Array-length modifications at the high end of an array (push/pop) are\n * expected to be common and are implemented in (amortized) time\n * proportional to the number of elements added or removed, whereas\n * other operations (shift/unshift and splice) are much less efficient.\n * - Function arguments are passed on the stack, so adding tens of thousands\n * of elements to an array with `arr.push(...newElements)` will frequently\n * cause stack overflows. (see <https://stackoverflow.com/questions/22123769/rangeerror-maximum-call-stack-size-exceeded-why>)\n *\n * SpliceBuffers are an implementation of gap buffers, which are a\n * generalization of the \"queue made of two stacks\" idea. The splice buffer\n * maintains a cursor, and moving the cursor has cost proportional to the\n * distance the cursor moves, but inserting, deleting, or splicing in\n * new information at the cursor is as efficient as the push/pop operation.\n * This allows for an efficient sequence of splices (or pushes, pops, shifts,\n * or unshifts) as long such edits happen at the same part of the array or\n * generally sweep through the array from the beginning to the end.\n *\n * The interface for splice buffers also supports large numbers of inputs by\n * passing a single array argument rather passing multiple arguments on the\n * function call stack.\n *\n * @template T\n * Item type.\n */\nexport class SpliceBuffer {\n /**\n * @param {ReadonlyArray<T> | null | undefined} [initial]\n * Initial items (optional).\n * @returns\n * Splice buffer.\n */\n constructor(initial) {\n /** @type {Array<T>} */\n this.left = initial ? [...initial] : [];\n /** @type {Array<T>} */\n this.right = [];\n }\n\n /**\n * Array access;\n * does not move the cursor.\n *\n * @param {number} index\n * Index.\n * @return {T}\n * Item.\n */\n get(index) {\n if (index < 0 || index >= this.left.length + this.right.length) {\n throw new RangeError('Cannot access index `' + index + '` in a splice buffer of size `' + (this.left.length + this.right.length) + '`');\n }\n if (index < this.left.length) return this.left[index];\n return this.right[this.right.length - index + this.left.length - 1];\n }\n\n /**\n * The length of the splice buffer, one greater than the largest index in the\n * array.\n */\n get length() {\n return this.left.length + this.right.length;\n }\n\n /**\n * Remove and return `list[0]`;\n * moves the cursor to `0`.\n *\n * @returns {T | undefined}\n * Item, optional.\n */\n shift() {\n this.setCursor(0);\n return this.right.pop();\n }\n\n /**\n * Slice the buffer to get an array;\n * does not move the cursor.\n *\n * @param {number} start\n * Start.\n * @param {number | null | undefined} [end]\n * End (optional).\n * @returns {Array<T>}\n * Array of items.\n */\n slice(start, end) {\n /** @type {number} */\n const stop = end === null || end === undefined ? Number.POSITIVE_INFINITY : end;\n if (stop < this.left.length) {\n return this.left.slice(start, stop);\n }\n if (start > this.left.length) {\n return this.right.slice(this.right.length - stop + this.left.length, this.right.length - start + this.left.length).reverse();\n }\n return this.left.slice(start).concat(this.right.slice(this.right.length - stop + this.left.length).reverse());\n }\n\n /**\n * Mimics the behavior of Array.prototype.splice() except for the change of\n * interface necessary to avoid segfaults when patching in very large arrays.\n *\n * This operation moves cursor is moved to `start` and results in the cursor\n * placed after any inserted items.\n *\n * @param {number} start\n * Start;\n * zero-based index at which to start changing the array;\n * negative numbers count backwards from the end of the array and values\n * that are out-of bounds are clamped to the appropriate end of the array.\n * @param {number | null | undefined} [deleteCount=0]\n * Delete count (default: `0`);\n * maximum number of elements to delete, starting from start.\n * @param {Array<T> | null | undefined} [items=[]]\n * Items to include in place of the deleted items (default: `[]`).\n * @return {Array<T>}\n * Any removed items.\n */\n splice(start, deleteCount, items) {\n /** @type {number} */\n const count = deleteCount || 0;\n this.setCursor(Math.trunc(start));\n const removed = this.right.splice(this.right.length - count, Number.POSITIVE_INFINITY);\n if (items) chunkedPush(this.left, items);\n return removed.reverse();\n }\n\n /**\n * Remove and return the highest-numbered item in the array, so\n * `list[list.length - 1]`;\n * Moves the cursor to `length`.\n *\n * @returns {T | undefined}\n * Item, optional.\n */\n pop() {\n this.setCursor(Number.POSITIVE_INFINITY);\n return this.left.pop();\n }\n\n /**\n * Inserts a single item to the high-numbered side of the array;\n * moves the cursor to `length`.\n *\n * @param {T} item\n * Item.\n * @returns {undefined}\n * Nothing.\n */\n push(item) {\n this.setCursor(Number.POSITIVE_INFINITY);\n this.left.push(item);\n }\n\n /**\n * Inserts many items to the high-numbered side of the array.\n * Moves the cursor to `length`.\n *\n * @param {Array<T>} items\n * Items.\n * @returns {undefined}\n * Nothing.\n */\n pushMany(items) {\n this.setCursor(Number.POSITIVE_INFINITY);\n chunkedPush(this.left, items);\n }\n\n /**\n * Inserts a single item to the low-numbered side of the array;\n * Moves the cursor to `0`.\n *\n * @param {T} item\n * Item.\n * @returns {undefined}\n * Nothing.\n */\n unshift(item) {\n this.setCursor(0);\n this.right.push(item);\n }\n\n /**\n * Inserts many items to the low-numbered side of the array;\n * moves the cursor to `0`.\n *\n * @param {Array<T>} items\n * Items.\n * @returns {undefined}\n * Nothing.\n */\n unshiftMany(items) {\n this.setCursor(0);\n chunkedPush(this.right, items.reverse());\n }\n\n /**\n * Move the cursor to a specific position in the array. Requires\n * time proportional to the distance moved.\n *\n * If `n < 0`, the cursor will end up at the beginning.\n * If `n > length`, the cursor will end up at the end.\n *\n * @param {number} n\n * Position.\n * @return {undefined}\n * Nothing.\n */\n setCursor(n) {\n if (n === this.left.length || n > this.left.length && this.right.length === 0 || n < 0 && this.left.length === 0) return;\n if (n < this.left.length) {\n // Move cursor to the this.left\n const removed = this.left.splice(n, Number.POSITIVE_INFINITY);\n chunkedPush(this.right, removed.reverse());\n } else {\n // Move cursor to the this.right\n const removed = this.right.splice(this.left.length + this.right.length - n, Number.POSITIVE_INFINITY);\n chunkedPush(this.left, removed.reverse());\n }\n }\n}\n\n/**\n * Avoid stack overflow by pushing items onto the stack in segments\n *\n * @template T\n * Item type.\n * @param {Array<T>} list\n * List to inject into.\n * @param {ReadonlyArray<T>} right\n * Items to inject.\n * @return {undefined}\n * Nothing.\n */\nfunction chunkedPush(list, right) {\n /** @type {number} */\n let chunkStart = 0;\n if (right.length < 10000) {\n list.push(...right);\n } else {\n while (chunkStart < right.length) {\n list.push(...right.slice(chunkStart, chunkStart + 10000));\n chunkStart += 10000;\n }\n }\n}","/**\n * @import {Chunk, Event, Token} from 'micromark-util-types'\n */\n\nimport { splice } from 'micromark-util-chunked';\nimport { SpliceBuffer } from './lib/splice-buffer.js';\n\n// Hidden API exposed for testing.\nexport { SpliceBuffer } from './lib/splice-buffer.js';\n\n/**\n * Tokenize subcontent.\n *\n * @param {Array<Event>} eventsArray\n * List of events.\n * @returns {boolean}\n * Whether subtokens were found.\n */\n// eslint-disable-next-line complexity\nexport function subtokenize(eventsArray) {\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 const events = new SpliceBuffer(eventsArray);\n while (++index < events.length) {\n while (index in jumps) {\n index = jumps[index];\n }\n event = events.get(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 (index && event[1].type === \"chunkFlow\" && events.get(index - 1)[1].type === \"listItemPrefix\") {\n subevents = event[1]._tokenizer.events;\n otherIndex = 0;\n if (otherIndex < subevents.length && subevents[otherIndex][1].type === \"lineEndingBlank\") {\n otherIndex += 2;\n }\n if (otherIndex < subevents.length && subevents[otherIndex][1].type === \"content\") {\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.get(otherIndex);\n if (otherEvent[1].type === \"lineEnding\" || otherEvent[1].type === \"lineEndingBlank\") {\n if (otherEvent[0] === 'enter') {\n if (lineIndex) {\n events.get(lineIndex)[1].type = \"lineEndingBlank\";\n }\n otherEvent[1].type = \"lineEnding\";\n lineIndex = otherIndex;\n }\n } else if (otherEvent[1].type === \"linePrefix\" || otherEvent[1].type === \"listItemIndent\") {\n // Move past.\n } else {\n break;\n }\n }\n if (lineIndex) {\n // Fix position.\n event[1].end = {\n ...events.get(lineIndex)[1].start\n };\n\n // Switch container exit w/ line endings.\n parameters = events.slice(lineIndex, index);\n parameters.unshift(event);\n events.splice(lineIndex, index - lineIndex + 1, parameters);\n }\n }\n }\n\n // The changes to the `events` buffer must be copied back into the eventsArray\n splice(eventsArray, 0, Number.POSITIVE_INFINITY, events.slice(0));\n return !more;\n}\n\n/**\n * Tokenize embedded tokens.\n *\n * @param {SpliceBuffer<Event>} events\n * Events.\n * @param {number} eventIndex\n * Index.\n * @returns {Record<string, number>}\n * Gaps.\n */\nfunction subcontent(events, eventIndex) {\n const token = events.get(eventIndex)[1];\n const context = events.get(eventIndex)[2];\n let startPosition = eventIndex - 1;\n /** @type {Array<number>} */\n const startPositions = [];\n let tokenizer = token._tokenizer;\n if (!tokenizer) {\n tokenizer = context.parser[token.contentType](token.start);\n if (token._contentTypeTextTrailing) {\n tokenizer._contentTypeTextTrailing = true;\n }\n }\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.get(++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' && childEvents[index - 1][0] === 'enter' && childEvents[index][1].type === childEvents[index - 1][1].type && childEvents[index][1].start.line !== childEvents[index][1].end.line) {\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’s one more token (which is the cases for lines that end in an\n // EOF), that’s perfect: the last point we found starts it.\n // If there isn’t 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’t 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.push([start, start + slice.length - 1]);\n events.splice(start, 2, slice);\n }\n jumps.reverse();\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 * @import {\n * Construct,\n * Resolver,\n * State,\n * TokenizeContext,\n * Tokenizer,\n * Token\n * } from 'micromark-util-types'\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 resolve: resolveContent,\n tokenize: tokenizeContent\n};\n\n/** @type {Construct} */\nconst continuationConstruct = {\n partial: true,\n tokenize: tokenizeContinuation\n};\n\n/**\n * Content is transparent: it’s 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 * Context.\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(continuationConstruct, contentContinue, contentEnd)(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 * Context.\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 (!self.parser.constructs.disable.null.includes('codeIndented') && tail && tail[1].type === \"linePrefix\" && tail[2].sliceSerialize(tail[1], true).length >= 4) {\n return ok(code);\n }\n return effects.interrupt(self.parser.constructs.flow, nok, ok)(code);\n }\n}","/**\n * @import {Effects, State, TokenType} from 'micromark-util-types'\n */\n\nimport { asciiControl, markdownLineEndingOrSpace, markdownLineEnding } 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 */\nexport function factoryDestination(effects, ok, nok, type, literalType, literalMarkerType, rawType, stringType, max) {\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 (!balance && (code === null || code === 41 || markdownLineEndingOrSpace(code))) {\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’t.\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 * @import {\n * Effects,\n * State,\n * TokenizeContext,\n * TokenType\n * } from 'micromark-util-types'\n */\n\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/**\n * Parse labels.\n *\n * > 👉 **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 */\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 (size > 999 || code === null || code === 91 || code === 93 && !seen ||\n // To do: remove in the future once we’ve switched from\n // `micromark-extension-footnote` to `micromark-extension-gfm-footnote`,\n // which doesn’t need this.\n // Hidden footnotes hook.\n /* c8 ignore next 3 */\n code === 94 && !size && '_hiddenFootnoteSupport' in self.parser.constructs) {\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 (code === null || code === 91 || code === 93 || markdownLineEnding(code) || size++ > 999) {\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 * @import {\n * Code,\n * Effects,\n * State,\n * TokenType\n * } from 'micromark-util-types'\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 */\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’t 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 * @import {Effects, State} from 'micromark-util-types'\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 {State}\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(effects, start, seen ? \"linePrefix\" : \"lineSuffix\")(code);\n }\n return ok(code);\n }\n}","/**\n * @import {\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\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 { markdownLineEndingOrSpace, markdownLineEnding, markdownSpace } 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 partial: true,\n tokenize: tokenizeTitleBefore\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\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(self, effects, labelAfter,\n // Note: we don’t need to reset the way `markdown-rs` does.\n nok, \"definitionLabel\", \"definitionLabelMarker\", \"definitionLabelString\")(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(self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1));\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) ? factoryWhitespace(effects, destinationBefore)(code) : 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(effects, destinationAfter,\n // Note: we don’t need to reset the way `markdown-rs` does.\n nok, \"definitionDestination\", \"definitionDestinationLiteral\", \"definitionDestinationLiteralMarker\", \"definitionDestinationRaw\", \"definitionDestinationString\")(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) ? factorySpace(effects, afterWhitespace, \"whitespace\")(code) : 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’t care about uniqueness.\n // It’s likely that that doesn’t 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’d be interrupting.\n // tokenizer.interrupt = true\n return ok(code);\n }\n return nok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\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) ? factoryWhitespace(effects, beforeMarker)(code) : 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(effects, titleAfter, nok, \"definitionTitle\", \"definitionTitleMarker\", \"definitionTitleString\")(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) ? factorySpace(effects, titleAfterOptionalWhitespace, \"whitespace\")(code) : 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 * @import {\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\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 * Context.\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 * @import {\n * Construct,\n * Resolver,\n * State,\n * TokenizeContext,\n * Tokenizer,\n * Token\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEndingOrSpace, markdownLineEnding, markdownSpace } from 'micromark-util-character';\nimport { splice } from 'micromark-util-chunked';\n/** @type {Construct} */\nexport const headingAtx = {\n name: 'headingAtx',\n resolve: resolveHeadingAtx,\n tokenize: tokenizeHeadingAtx\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 (contentEnd - 2 > contentStart && events[contentEnd][1].type === \"whitespace\") {\n contentEnd -= 2;\n }\n if (events[contentEnd][1].type === \"atxHeadingSequence\" && (contentStart === contentEnd - 1 || contentEnd - 4 > contentStart && events[contentEnd - 2][1].type === \"whitespace\")) {\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, [['enter', content, context], ['enter', text, context], ['exit', text, context], ['exit', content, context]]);\n }\n return events;\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\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 “visible” 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 * List of lowercase HTML “block” 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’t 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 * > 👉 **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 “raw” 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 * > 👉 **Note**: `textarea` was added in `CommonMark@0.30`.\n */\nexport const htmlRawNames = ['pre', 'script', 'style', 'textarea']\n","/**\n * @import {\n * Code,\n * Construct,\n * Resolver,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { asciiAlphanumeric, asciiAlpha, markdownLineEndingOrSpace, markdownLineEnding, markdownSpace } 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 concrete: true,\n name: 'htmlFlow',\n resolveTo: resolveToHtmlFlow,\n tokenize: tokenizeHtmlFlow\n};\n\n/** @type {Construct} */\nconst blankLineBefore = {\n partial: true,\n tokenize: tokenizeBlankLineBefore\n};\nconst nonLazyContinuationStart = {\n partial: true,\n tokenize: tokenizeNonLazyContinuationStart\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 * Context.\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’re in an instruction instead of a declaration, we’re 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 // Always the case.\n effects.consume(code);\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 // Always the case.\n effects.consume(code);\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 (code === null || code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\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] ? nok(code) : closingTag ? completeClosingTagAfter(code) : 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 (code === 45 || code === 46 || code === 58 || code === 95 || asciiAlphanumeric(code)) {\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 (code === null || code === 60 || code === 61 || code === 62 || code === 96) {\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 (code === null || code === 34 || code === 39 || code === 47 || code === 60 || code === 61 || code === 62 || code === 96 || markdownLineEndingOrSpace(code)) {\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(blankLineBefore, continuationAfter, continuationStart)(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(nonLazyContinuationStart, continuationStartNonLazy, continuationAfter)(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 // Always the case.\n effects.consume(code);\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 * Context.\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 * Context.\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 * @import {\n * Code,\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { asciiAlphanumeric, asciiAlpha, markdownLineEndingOrSpace, markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const htmlText = {\n name: 'htmlText',\n tokenize: tokenizeHtmlText\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\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 ? end(code) : code === 45 ? commentClose(code) : 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 (code === 45 || code === 46 || code === 58 || code === 95 || asciiAlphanumeric(code)) {\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 (code === null || code === 60 || code === 61 || code === 62 || code === 96) {\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 (code === null || code === 34 || code === 39 || code === 60 || code === 61 || code === 96) {\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 * > 👉 **Note**: we can’t 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 * > 👉 **Note**: we can’t 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) ? factorySpace(effects, lineEndingAfterPrefix, \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code) : lineEndingAfterPrefix(code);\n }\n\n /**\n * After eol, after optional whitespace.\n *\n * > 👉 **Note**: we can’t 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 * @import {\n * Construct,\n * Event,\n * Resolver,\n * State,\n * TokenizeContext,\n * Tokenizer,\n * Token\n * } from 'micromark-util-types'\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 resolveAll: resolveAllLabelEnd,\n resolveTo: resolveToLabelEnd,\n tokenize: tokenizeLabelEnd\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 /** @type {Array<Event>} */\n const newEvents = [];\n while (++index < events.length) {\n const token = events[index][1];\n newEvents.push(events[index]);\n if (token.type === \"labelImage\" || token.type === \"labelLink\" || token.type === \"labelEnd\") {\n // Remove the marker.\n const offset = token.type === \"labelImage\" ? 4 : 2;\n token.type = \"data\";\n index += offset;\n }\n }\n\n // If the events are equal, we don't have to copy newEvents to events\n if (events.length !== newEvents.length) {\n splice(events, 0, events.length, newEvents);\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’ve been here before.\n if (token.type === \"link\" || token.type === \"labelLink\" && token._inactive) {\n break;\n }\n\n // Mark other link openings as inactive, as we can’t 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 (events[index][0] === 'enter' && (token.type === \"labelImage\" || token.type === \"labelLink\") && !token._balanced) {\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: {\n ...events[open][1].start\n },\n end: {\n ...events[events.length - 1][1].end\n }\n };\n const label = {\n type: \"label\",\n start: {\n ...events[open][1].start\n },\n end: {\n ...events[close][1].end\n }\n };\n const text = {\n type: \"labelText\",\n start: {\n ...events[open + offset + 2][1].end\n },\n end: {\n ...events[close - 2][1].start\n }\n };\n media = [['enter', group, context], ['enter', label, context]];\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(media, resolveAll(context.parser.constructs.insideSpan.null, events.slice(open + offset + 4, close - 3), context));\n\n // Text close, marker close, label close.\n media = push(media, [['exit', text, context], events[close - 2], events[close - 1], ['exit', label, context]]);\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 * Context.\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 ((self.events[index][1].type === \"labelImage\" || self.events[index][1].type === \"labelLink\") && !self.events[index][1]._balanced) {\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’d be wrapping a link, like this:\n //\n // ```markdown\n // > | a [b [c](d) e](f) g.\n // ^\n // ```\n //\n // We can’t have that, so it’s just balanced brackets.\n if (labelStart._inactive) {\n return labelEndNok(code);\n }\n defined = self.parser.defined.includes(normalizeIdentifier(self.sliceSerialize({\n start: labelStart.end,\n end: self.now()\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(resourceConstruct, labelEndOk, defined ? labelEndOk : labelEndNok)(code);\n }\n\n // Full (`[asd][fgh]`) or collapsed (`[asd][]`) reference?\n if (code === 91) {\n return effects.attempt(referenceFullConstruct, labelEndOk, defined ? referenceNotFull : labelEndNok)(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 * > 👉 **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(referenceCollapsedConstruct, labelEndOk, labelEndNok)(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’s nothing.\n *\n * There was an okay opening, but we didn’t 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 * Context.\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) ? factoryWhitespace(effects, resourceOpen)(code) : 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(effects, resourceDestinationAfter, resourceDestinationMissing, \"resourceDestination\", \"resourceDestinationLiteral\", \"resourceDestinationLiteralMarker\", \"resourceDestinationRaw\", \"resourceDestinationString\", 32)(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) ? factoryWhitespace(effects, resourceBetween)(code) : 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(effects, resourceTitleAfter, nok, \"resourceTitle\", \"resourceTitleMarker\", \"resourceTitleString\")(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) ? factoryWhitespace(effects, resourceEnd)(code) : 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 * Context.\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(self, effects, referenceFullAfter, referenceFullMissing, \"reference\", \"referenceMarker\", \"referenceString\")(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(normalizeIdentifier(self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1))) ? ok(code) : 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 * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeReferenceCollapsed(effects, ok, nok) {\n return referenceCollapsedStart;\n\n /**\n * In reference (collapsed), at `[`.\n *\n * > 👉 **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’s 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 * > 👉 **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 * @import {\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { labelEnd } from './label-end.js';\n\n/** @type {Construct} */\nexport const labelStartImage = {\n name: 'labelStartImage',\n resolveAll: labelEnd.resolveAll,\n tokenize: tokenizeLabelStartImage\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\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 * \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’t.\n // Hidden footnotes hook.\n /* c8 ignore next 3 */\n return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs ? nok(code) : ok(code);\n }\n}","/**\n * @import {\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { labelEnd } from './label-end.js';\n\n/** @type {Construct} */\nexport const labelStartLink = {\n name: 'labelStartLink',\n resolveAll: labelEnd.resolveAll,\n tokenize: tokenizeLabelStartLink\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\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’t 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 ? nok(code) : ok(code);\n }\n}","/**\n * @import {\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\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 * Context.\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 * @import {\n * Code,\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\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 * Context.\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) ? factorySpace(effects, atBreak, \"whitespace\")(code) : atBreak(code);\n }\n}","/**\n * @import {\n * Code,\n * Construct,\n * Exiter,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\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 continuation: {\n tokenize: tokenizeListContinuation\n },\n exit: tokenizeListEnd,\n name: 'list',\n tokenize: tokenizeListStart\n};\n\n/** @type {Construct} */\nconst listItemPrefixWhitespaceConstruct = {\n partial: true,\n tokenize: tokenizeListItemPrefixWhitespace\n};\n\n/** @type {Construct} */\nconst indentConstruct = {\n partial: true,\n tokenize: tokenizeIndent\n};\n\n// To do: `markdown-rs` parses list items on their own and later stitches them\n// together.\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeListStart(effects, ok, nok) {\n const self = this;\n const tail = self.events[self.events.length - 1];\n let initialSize = tail && tail[1].type === \"linePrefix\" ? tail[2].sliceSerialize(tail[1], true).length : 0;\n let size = 0;\n return start;\n\n /** @type {State} */\n function start(code) {\n const kind = self.containerState.type || (code === 42 || code === 43 || code === 45 ? \"listUnordered\" : \"listOrdered\");\n if (kind === \"listUnordered\" ? !self.containerState.marker || code === self.containerState.marker : asciiDigit(code)) {\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 ? effects.check(thematicBreak, nok, atMarker)(code) : 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 ((!self.interrupt || size < 2) && (self.containerState.marker ? code === self.containerState.marker : code === 41 || code === 46)) {\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(blankLine,\n // Can’t be empty when interrupting.\n self.interrupt ? nok : onBlank, effects.attempt(listItemPrefixWhitespaceConstruct, endOfPrefix, otherPrefix));\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 = initialSize + self.sliceSerialize(effects.exit(\"listItemPrefix\"), true).length;\n return ok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\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 = self.containerState.furtherBlankLines || self.containerState.initialBlankLine;\n\n // We have a blank line.\n // Still, try to consume at most the items size.\n return factorySpace(effects, ok, \"listItemIndent\", self.containerState.size + 1)(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’re closing flow, we’re no longer interrupting.\n self.interrupt = undefined;\n // Always populated by defaults.\n\n return factorySpace(effects, effects.attempt(list, ok, nok), \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeIndent(effects, ok, nok) {\n const self = this;\n return factorySpace(effects, afterPrefix, \"listItemIndent\", self.containerState.size + 1);\n\n /** @type {State} */\n function afterPrefix(code) {\n const tail = self.events[self.events.length - 1];\n return tail && tail[1].type === \"listItemIndent\" && tail[2].sliceSerialize(tail[1], true).length === self.containerState.size ? ok(code) : nok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Exiter}\n */\nfunction tokenizeListEnd(effects) {\n effects.exit(this.containerState.type);\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeListItemPrefixWhitespace(effects, ok, nok) {\n const self = this;\n\n // Always populated by defaults.\n\n return factorySpace(effects, afterPrefix, \"listItemPrefixWhitespace\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4 + 1);\n\n /** @type {State} */\n function afterPrefix(code) {\n const tail = self.events[self.events.length - 1];\n return !markdownSpace(code) && tail && tail[1].type === \"listItemPrefixWhitespace\" ? ok(code) : nok(code);\n }\n}","/**\n * @import {\n * Code,\n * Construct,\n * Resolver,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\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 resolveTo: resolveToSetextUnderline,\n tokenize: tokenizeSetextUnderline\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’ll always exist: we don’t tokenize if it isn’t 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’ll 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: {\n ...events[content][1].start\n },\n end: {\n ...events[events.length - 1][1].end\n }\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’ll 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 = {\n ...events[definition][1].end\n };\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 * Context.\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 (self.events[index][1].type !== \"lineEnding\" && self.events[index][1].type !== \"linePrefix\" && self.events[index][1].type !== \"content\") {\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) ? factorySpace(effects, after, \"lineSuffix\")(code) : 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 * @import {\n * InitialConstruct,\n * Initializer,\n * State,\n * TokenizeContext\n * } from 'micromark-util-types'\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 * Self.\n * @type {Initializer}\n * Initializer.\n */\nfunction initializeFlow(effects) {\n const self = this;\n const initial = effects.attempt(\n // Try to parse a blank line.\n blankLine, atBlankEnding,\n // Try to parse initial flow (essentially, only code).\n effects.attempt(this.parser.constructs.flowInitial, afterConstruct, factorySpace(effects, effects.attempt(this.parser.constructs.flow, afterConstruct, effects.attempt(content, afterConstruct)), \"linePrefix\")));\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 * @import {\n * Code,\n * InitialConstruct,\n * Initializer,\n * Resolver,\n * State,\n * TokenizeContext\n * } from 'micromark-util-types'\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 * Field.\n * @returns {InitialConstruct}\n * Construct.\n */\nfunction initializeFactory(field) {\n return {\n resolveAll: createResolver(field === 'text' ? resolveAllLineSuffixes : undefined),\n tokenize: initializeText\n };\n\n /**\n * @this {TokenizeContext}\n * Context.\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 * Code.\n * @returns {boolean}\n * Whether the code is a break.\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 * Resolver.\n * @returns {Resolver}\n * 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’t 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’t 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 ((eventIndex === events.length || events[eventIndex][1].type === \"lineEnding\") && events[eventIndex - 1][1].type === \"data\") {\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\n // Allow final trailing whitespace.\n if (context._contentTypeTextTrailing && eventIndex === events.length) {\n size = 0;\n }\n if (size) {\n const token = {\n type: eventIndex === events.length || tabs || size < 2 ? \"lineSuffix\" : \"hardBreakTrailing\",\n start: {\n _bufferIndex: index ? bufferIndex : data.start._bufferIndex + bufferIndex,\n _index: data.start._index + index,\n line: data.end.line,\n column: data.end.column - size,\n offset: data.end.offset - size\n },\n end: {\n ...data.end\n }\n };\n data.end = {\n ...token.start\n };\n if (data.start.offset === data.end.offset) {\n Object.assign(data, token);\n } else {\n events.splice(eventIndex, 0, ['enter', token, context], ['exit', token, context]);\n eventIndex += 2;\n }\n }\n eventIndex++;\n }\n }\n return events;\n}","/**\n * @import {Extension} from 'micromark-util-types'\n */\n\nimport { attention, autolink, blockQuote, characterEscape, characterReference, codeFenced, codeIndented, codeText, definition, hardBreakEscape, headingAtx, htmlFlow, htmlText, labelEnd, labelStartImage, labelStartLink, lineEnding, list, setextUnderline, thematicBreak } 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 * @import {\n * Chunk,\n * Code,\n * ConstructRecord,\n * Construct,\n * Effects,\n * InitialConstruct,\n * ParseContext,\n * Point,\n * State,\n * TokenizeContext,\n * Token\n * } from 'micromark-util-types'\n */\n\n/**\n * @callback Restore\n * Restore the state.\n * @returns {undefined}\n * Nothing.\n *\n * @typedef Info\n * Info.\n * @property {Restore} restore\n * Restore.\n * @property {number} from\n * From.\n *\n * @callback ReturnHandle\n * Handle a successful run.\n * @param {Construct} construct\n * Construct.\n * @param {Info} info\n * Info.\n * @returns {undefined}\n * Nothing.\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’t 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 * Parser.\n * @param {InitialConstruct} initialize\n * Construct.\n * @param {Omit<Point, '_bufferIndex' | '_index'> | undefined} [from]\n * Point (optional).\n * @returns {TokenizeContext}\n * Context.\n */\nexport function createTokenizer(parser, initialize, from) {\n /** @type {Point} */\n let point = {\n _bufferIndex: -1,\n _index: 0,\n line: from && from.line || 1,\n column: from && from.column || 1,\n offset: from && from.offset || 0\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 attempt: constructFactory(onsuccessfulconstruct),\n check: constructFactory(onsuccessfulcheck),\n consume,\n enter,\n exit,\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 code: null,\n containerState: {},\n defineSkip,\n events: [],\n now,\n parser,\n previous: null,\n sliceSerialize,\n sliceStream,\n write\n };\n\n /**\n * The state function.\n *\n * @type {State | undefined}\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’re 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 {\n _bufferIndex,\n _index,\n line,\n column,\n offset\n } = point;\n return {\n _bufferIndex,\n _index,\n line,\n column,\n offset\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 {undefined}\n * Nothing.\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’re 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 (point._index === chunkIndex && point._bufferIndex < chunk.length) {\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 * Code.\n * @returns {undefined}\n * Nothing.\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 if (point._bufferIndex ===\n // Points w/ non-negative `_bufferIndex` reference\n // strings.\n /** @type {string} */\n 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 * Callback.\n * @param {{interrupt?: boolean | undefined} | undefined} [fields]\n * 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> | ConstructRecord | Construct} constructs\n * Constructs.\n * @param {State} returnState\n * State.\n * @param {State | undefined} [bogusState]\n * State.\n * @returns {State}\n * State.\n */\n function hook(constructs, returnState, bogusState) {\n /** @type {ReadonlyArray<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) : 'tokenize' in constructs ?\n // Looks like a construct.\n handleListOfConstructs([(/** @type {Construct} */constructs)]) : handleMapOfConstructs(constructs);\n\n /**\n * Handle a list of construct.\n *\n * @param {ConstructRecord} map\n * Constructs.\n * @returns {State}\n * State.\n */\n function handleMapOfConstructs(map) {\n return start;\n\n /** @type {State} */\n function start(code) {\n const left = 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(left) ? left : left ? [left] : []), ...(Array.isArray(all) ? all : all ? [all] : [])];\n return handleListOfConstructs(list)(code);\n }\n }\n\n /**\n * Handle a list of construct.\n *\n * @param {ReadonlyArray<Construct>} list\n * Constructs.\n * @returns {State}\n * 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 * Construct.\n * @returns {State}\n * 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’t work because `inspect` in document does a check\n // w/o a bogus, which doesn’t 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 (construct.name && context.parser.constructs.disable.null.includes(construct.name)) {\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 “live binding”, which is needed for `interrupt`.\n fields ? Object.assign(Object.create(context), fields) : context, effects, ok, nok)(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 * Construct.\n * @param {number} from\n * From.\n * @returns {undefined}\n * Nothing.\n */\n function addResult(construct, from) {\n if (construct.resolveAll && !resolveAllConstructs.includes(construct)) {\n resolveAllConstructs.push(construct);\n }\n if (construct.resolve) {\n splice(context.events, from, context.events.length - from, construct.resolve(context.events.slice(from), context));\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 * 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 from: startEventsIndex,\n restore\n };\n\n /**\n * Restore state.\n *\n * @returns {undefined}\n * Nothing.\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’s on a column\n * skip.\n *\n * @returns {undefined}\n * Nothing.\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 {ReadonlyArray<Chunk>} chunks\n * Chunks.\n * @param {Pick<Token, 'end' | 'start'>} token\n * Token.\n * @returns {Array<Chunk>}\n * Chunks.\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 /* c8 ignore next 4 -- used to be used, no longer */\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 {ReadonlyArray<Chunk>} chunks\n * Chunks.\n * @param {boolean | undefined} [expandTabs=false]\n * Whether to expand tabs (default: `false`).\n * @returns {string}\n * Result.\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 switch (chunk) {\n case -5:\n {\n value = \"\\r\";\n break;\n }\n case -4:\n {\n value = \"\\n\";\n break;\n }\n case -3:\n {\n value = \"\\r\" + \"\\n\";\n break;\n }\n case -2:\n {\n value = expandTabs ? \" \" : \"\\t\";\n break;\n }\n case -1:\n {\n if (!expandTabs && atTab) continue;\n value = \" \";\n break;\n }\n default:\n {\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 * @import {\n * Create,\n * FullNormalizedExtension,\n * InitialConstruct,\n * ParseContext,\n * ParseOptions\n * } from 'micromark-util-types'\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 { string, text } from './initialize/text.js';\nimport * as defaultConstructs from './constructs.js';\nimport { createTokenizer } from './create-tokenizer.js';\n\n/**\n * @param {ParseOptions | null | undefined} [options]\n * Configuration (optional).\n * @returns {ParseContext}\n * Parser.\n */\nexport function parse(options) {\n const settings = options || {};\n const constructs = /** @type {FullNormalizedExtension} */\n combineExtensions([defaultConstructs, ...(settings.extensions || [])]);\n\n /** @type {ParseContext} */\n const parser = {\n constructs,\n content: create(content),\n defined: [],\n document: create(document),\n flow: create(flow),\n lazy: {},\n string: create(string),\n text: create(text)\n };\n return parser;\n\n /**\n * @param {InitialConstruct} initial\n * Construct to start with.\n * @returns {Create}\n * Create a tokenizer.\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 * @import {Event} from 'micromark-util-types'\n */\n\nimport { subtokenize } from 'micromark-util-subtokenize';\n\n/**\n * @param {Array<Event>} events\n * Events.\n * @returns {Array<Event>}\n * Events.\n */\nexport function postprocess(events) {\n while (!subtokenize(events)) {\n // Empty\n }\n return events;\n}","/**\n * @import {Chunk, Code, Encoding, Value} from 'micromark-util-types'\n */\n\n/**\n * @callback Preprocessor\n * Preprocess a value.\n * @param {Value} value\n * Value.\n * @param {Encoding | null | undefined} [encoding]\n * Encoding when `value` is a typed array (optional).\n * @param {boolean | null | undefined} [end=false]\n * Whether this is the last chunk (default: `false`).\n * @returns {Array<Chunk>}\n * Chunks.\n */\n\nconst search = /[\\0\\t\\n\\r]/g;\n\n/**\n * @returns {Preprocessor}\n * Preprocess a value.\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 // eslint-disable-next-line complexity\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 value = buffer + (typeof value === 'string' ? value.toString() : new TextDecoder(encoding || undefined).decode(value));\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 = 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 {\n chunks.push(65533);\n column++;\n break;\n }\n case 9:\n {\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 {\n chunks.push(-4);\n column = 1;\n break;\n }\n default:\n {\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}","import { decodeNamedCharacterReference } from 'decode-named-character-reference';\nimport { decodeNumericCharacterReference } from 'micromark-util-decode-numeric-character-reference';\nconst characterEscapeOrReference = /\\\\([!-/:-@[-`{-~])|&(#(?:\\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 “string” 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 * Match.\n * @param {string} $1\n * Character escape.\n * @param {string} $2\n * Character reference.\n * @returns {string}\n * Decoded value\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 * @import {\n * Break,\n * Blockquote,\n * Code,\n * Definition,\n * Emphasis,\n * Heading,\n * Html,\n * Image,\n * InlineCode,\n * Link,\n * ListItem,\n * List,\n * Nodes,\n * Paragraph,\n * PhrasingContent,\n * ReferenceType,\n * Root,\n * Strong,\n * Text,\n * ThematicBreak\n * } from 'mdast'\n * @import {\n * Encoding,\n * Event,\n * Token,\n * Value\n * } from 'micromark-util-types'\n * @import {Point} from 'unist'\n * @import {\n * CompileContext,\n * CompileData,\n * Config,\n * Extension,\n * Handle,\n * OnEnterError,\n * Options\n * } from './types.js'\n */\n\nimport { toString } from 'mdast-util-to-string';\nimport { parse, postprocess, preprocess } from 'micromark';\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 * Turn markdown into a syntax tree.\n *\n * @overload\n * @param {Value} value\n * @param {Encoding | null | undefined} [encoding]\n * @param {Options | null | undefined} [options]\n * @returns {Root}\n *\n * @overload\n * @param {Value} value\n * @param {Options | null | undefined} [options]\n * @returns {Root}\n *\n * @param {Value} value\n * Markdown to parse.\n * @param {Encoding | Options | null | undefined} [encoding]\n * Character encoding for when `value` is `Buffer`.\n * @param {Options | null | undefined} [options]\n * Configuration.\n * @returns {Root}\n * mdast tree.\n */\nexport function fromMarkdown(value, encoding, options) {\n if (encoding && typeof encoding === 'object') {\n options = encoding;\n encoding = undefined;\n }\n return compiler(options)(postprocess(parse(options).document().write(preprocess()(value, encoding, true))));\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 characterReference: onexitcharacterreference,\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 data\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 (events[index][1].type === \"listOrdered\" || events[index][1].type === \"listUnordered\") {\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(Object.assign({\n sliceSerialize: events[index][2].sliceSerialize\n }, context), events[index][1]);\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(events.length > 0 ? events[0][1].start : {\n line: 1,\n column: 1,\n offset: 0\n }),\n end: point(events.length > 0 ? events[events.length - 2][1].end : {\n line: 1,\n column: 1,\n offset: 0\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 switch (event[1].type) {\n case \"listUnordered\":\n case \"listOrdered\":\n case \"blockQuote\":\n {\n if (event[0] === 'enter') {\n containerBalance++;\n } else {\n containerBalance--;\n }\n atMarker = undefined;\n break;\n }\n case \"lineEndingBlank\":\n {\n if (event[0] === 'enter') {\n if (listItem && !atMarker && !containerBalance && !firstBlankLineIndex) {\n firstBlankLineIndex = index;\n }\n atMarker = undefined;\n }\n break;\n }\n case \"linePrefix\":\n case \"listItemValue\":\n case \"listItemMarker\":\n case \"listItemPrefix\":\n case \"listItemPrefixWhitespace\":\n {\n // Empty.\n\n break;\n }\n default:\n {\n atMarker = undefined;\n }\n }\n if (!containerBalance && event[0] === 'enter' && event[1].type === \"listItemPrefix\" || containerBalance === -1 && event[0] === 'exit' && (event[1].type === \"listUnordered\" || event[1].type === \"listOrdered\")) {\n if (listItem) {\n let tailIndex = index;\n lineIndex = undefined;\n while (tailIndex--) {\n const tailEvent = events[tailIndex];\n if (tailEvent[1].type === \"lineEnding\" || tailEvent[1].type === \"lineEndingBlank\") {\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 (tailEvent[1].type === \"linePrefix\" || tailEvent[1].type === \"blockQuotePrefix\" || tailEvent[1].type === \"blockQuotePrefixWhitespace\" || tailEvent[1].type === \"blockQuoteMarker\" || tailEvent[1].type === \"listItemIndent\") {\n // Empty\n } else {\n break;\n }\n }\n if (firstBlankLineIndex && (!lineIndex || firstBlankLineIndex < lineIndex)) {\n listItem._spread = true;\n }\n\n // Fix position.\n listItem.end = Object.assign({}, lineIndex ? events[lineIndex][1].start : event[1].end);\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 /** @type {Token} */\n const item = {\n type: 'listItem',\n _spread: false,\n start: Object.assign({}, event[1].start),\n // @ts-expect-error: we’ll add `end` in a second.\n end: undefined\n };\n listItem = item;\n events.splice(index, 0, ['enter', item, 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 * Create an opener handle.\n *\n * @param {(token: Token) => Nodes} create\n * Create a node.\n * @param {Handle | undefined} [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 {undefined}\n */\n function open(token) {\n enter.call(this, create(token), token);\n if (and) and.call(this, token);\n }\n }\n\n /**\n * @type {CompileContext['buffer']}\n */\n function buffer() {\n this.stack.push({\n type: 'fragment',\n children: []\n });\n }\n\n /**\n * @type {CompileContext['enter']}\n */\n function enter(node, token, errorHandler) {\n const parent = this.stack[this.stack.length - 1];\n /** @type {Array<Nodes>} */\n const siblings = parent.children;\n siblings.push(node);\n this.stack.push(node);\n this.tokenStack.push([token, errorHandler || undefined]);\n node.position = {\n start: point(token.start),\n // @ts-expect-error: `end` will be patched later.\n end: undefined\n };\n }\n\n /**\n * Create a closer handle.\n *\n * @param {Handle | undefined} [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 {undefined}\n */\n function close(token) {\n if (and) and.call(this, token);\n exit.call(this, token);\n }\n }\n\n /**\n * @type {CompileContext['exit']}\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('Cannot close `' + token.type + '` (' + stringifyPosition({\n start: token.start,\n end: token.end\n }) + '): it’s not open');\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 }\n\n /**\n * @type {CompileContext['resume']}\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 this.data.expectingFirstListItemValue = true;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onenterlistitemvalue(token) {\n if (this.data.expectingFirstListItemValue) {\n const ancestor = this.stack[this.stack.length - 2];\n ancestor.start = Number.parseInt(this.sliceSerialize(token), 10);\n this.data.expectingFirstListItemValue = undefined;\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 (this.data.flowCodeInside) return;\n this.buffer();\n this.data.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 this.data.flowCodeInside = undefined;\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(this.sliceSerialize(token)).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 this.data.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).codePointAt(0) === 61 ? 1 : 2;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitsetextheading() {\n this.data.setextHeadingSlurpLineEnding = undefined;\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 /** @type {Array<Nodes>} */\n const siblings = node.children;\n let tail = siblings[siblings.length - 1];\n if (!tail || tail.type !== 'text') {\n // Add a new text node.\n tail = text();\n tail.position = {\n start: point(token.start),\n // @ts-expect-error: we’ll add `end` later.\n end: undefined\n };\n siblings.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’re at a hard break, include the line ending in there.\n if (this.data.atHardBreak) {\n const tail = context.children[context.children.length - 1];\n tail.position.end = point(token.end);\n this.data.atHardBreak = undefined;\n return;\n }\n if (!this.data.setextHeadingSlurpLineEnding && config.canContainEols.includes(context.type)) {\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 this.data.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\n // To do: clean.\n if (this.data.inReference) {\n /** @type {ReferenceType} */\n const referenceType = this.data.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 this.data.referenceType = undefined;\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\n // To do: clean.\n if (this.data.inReference) {\n /** @type {ReferenceType} */\n const referenceType = this.data.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 this.data.referenceType = undefined;\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 this.data.inReference = true;\n if (node.type === 'link') {\n /** @type {Array<PhrasingContent>} */\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 this.data.inReference = undefined;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onenterreference() {\n this.data.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(this.sliceSerialize(token)).toLowerCase();\n this.data.referenceType = 'full';\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitcharacterreferencemarker(token) {\n this.data.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 = this.data.characterReferenceType;\n /** @type {string} */\n let value;\n if (type) {\n value = decodeNumericCharacterReference(data, type === \"characterReferenceMarkerNumeric\" ? 10 : 16);\n this.data.characterReferenceType = undefined;\n } else {\n const result = decodeNamedCharacterReference(data);\n value = result;\n }\n const tail = this.stack[this.stack.length - 1];\n tail.value += value;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcharacterreference(token) {\n const tail = this.stack.pop();\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 return {\n type: 'heading',\n // @ts-expect-error `depth` will be set later.\n depth: 0,\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<Array<Extension> | Extension>} extensions\n * @returns {undefined}\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 {undefined}\n */\nfunction extension(combined, extension) {\n /** @type {keyof Extension} */\n let key;\n for (key in extension) {\n if (own.call(extension, key)) {\n switch (key) {\n case 'canContainEols':\n {\n const right = extension[key];\n if (right) {\n combined[key].push(...right);\n }\n break;\n }\n case 'transforms':\n {\n const right = extension[key];\n if (right) {\n combined[key].push(...right);\n }\n break;\n }\n case 'enter':\n case 'exit':\n {\n const right = extension[key];\n if (right) {\n Object.assign(combined[key], right);\n }\n break;\n }\n // No default\n }\n }\n }\n}\n\n/** @type {OnEnterError} */\nfunction defaultOnError(left, right) {\n if (left) {\n throw new Error('Cannot close `' + left.type + '` (' + stringifyPosition({\n start: left.start,\n end: left.end\n }) + '): a different token (`' + right.type + '`, ' + stringifyPosition({\n start: right.start,\n end: right.end\n }) + ') is open');\n } else {\n throw new Error('Cannot close document, a token (`' + right.type + '`, ' + stringifyPosition({\n start: right.start,\n end: right.end\n }) + ') is still open');\n }\n}","/**\n * @typedef {import('mdast').Root} Root\n * @typedef {import('mdast-util-from-markdown').Options} FromMarkdownOptions\n * @typedef {import('unified').Parser<Root>} Parser\n * @typedef {import('unified').Processor<Root>} Processor\n */\n\n/**\n * @typedef {Omit<FromMarkdownOptions, 'extensions' | 'mdastExtensions'>} Options\n */\n\nimport {fromMarkdown} from 'mdast-util-from-markdown'\n\n/**\n * Aadd support for parsing from markdown.\n *\n * @param {Readonly<Options> | null | undefined} [options]\n * Configuration (optional).\n * @returns {undefined}\n * Nothing.\n */\nexport default function remarkParse(options) {\n /** @type {Processor} */\n // @ts-expect-error: TS in JSDoc generates wrong types if `this` is typed regularly.\n const self = this\n\n self.parser = parser\n\n /**\n * @type {Parser}\n */\n function parser(doc) {\n return fromMarkdown(doc, {\n ...self.data('settings'),\n ...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: self.data('micromarkExtensions') || [],\n mdastExtensions: self.data('fromMarkdownExtensions') || []\n })\n }\n}\n","/**\n * @import {Element} from 'hast'\n * @import {Blockquote} from 'mdast'\n * @import {State} from '../state.js'\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 * @import {Element, Text} from 'hast'\n * @import {Break} from 'mdast'\n * @import {State} from '../state.js'\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 * @import {Element, Properties} from 'hast'\n * @import {Code} from 'mdast'\n * @import {State} from '../state.js'\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 /** @type {Properties} */\n const properties = {}\n // Someone can write `js python	ruby`.\n const language = node.lang ? node.lang.split(/\\s+/) : []\n\n // GH/CM still drop the non-first languages.\n if (language.length > 0) {\n properties.className = ['language-' + language[0]]\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 * @import {Element} from 'hast'\n * @import {Delete} from 'mdast'\n * @import {State} from '../state.js'\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 * @import {Element} from 'hast'\n * @import {Emphasis} from 'mdast'\n * @import {State} from '../state.js'\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","/**\n * @import {Element} from 'hast'\n * @import {FootnoteReference} from 'mdast'\n * @import {State} from '../state.js'\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 clobberPrefix =\n typeof state.options.clobberPrefix === 'string'\n ? state.options.clobberPrefix\n : 'user-content-'\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 let reuseCounter = state.footnoteCounts.get(id)\n\n if (reuseCounter === undefined) {\n reuseCounter = 0\n state.footnoteOrder.push(id)\n counter = state.footnoteOrder.length\n } else {\n counter = index + 1\n }\n\n reuseCounter += 1\n state.footnoteCounts.set(id, reuseCounter)\n\n /** @type {Element} */\n const link = {\n type: 'element',\n tagName: 'a',\n properties: {\n href: '#' + clobberPrefix + 'fn-' + safeId,\n id:\n 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 * @import {Element} from 'hast'\n * @import {Heading} from 'mdast'\n * @import {State} from '../state.js'\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 * @import {Element} from 'hast'\n * @import {Html} from 'mdast'\n * @import {State} from '../state.js'\n * @import {Raw} from '../../index.js'\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 {Element | Raw | undefined}\n * hast node.\n */\nexport function html(state, node) {\n if (state.options.allowDangerousHtml) {\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 return undefined\n}\n","/**\n * @import {ElementContent} from 'hast'\n * @import {Reference, Nodes} from 'mdast'\n * @import {State} from './state.js'\n */\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 {Extract<Nodes, Reference>} node\n * Reference node (image, link).\n * @returns {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 * @import {ElementContent, Element, Properties} from 'hast'\n * @import {ImageReference} from 'mdast'\n * @import {State} from '../state.js'\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 {Array<ElementContent> | ElementContent}\n * hast node.\n */\nexport function imageReference(state, node) {\n const id = String(node.identifier).toUpperCase()\n const definition = state.definitionById.get(id)\n\n if (!definition) {\n return revert(state, node)\n }\n\n /** @type {Properties} */\n const properties = {src: normalizeUri(definition.url || ''), alt: node.alt}\n\n if (definition.title !== null && definition.title !== undefined) {\n properties.title = definition.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 * @import {Element, Properties} from 'hast'\n * @import {Image} from 'mdast'\n * @import {State} from '../state.js'\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 * @import {Element, Text} from 'hast'\n * @import {InlineCode} from 'mdast'\n * @import {State} from '../state.js'\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 * @import {ElementContent, Element, Properties} from 'hast'\n * @import {LinkReference} from 'mdast'\n * @import {State} from '../state.js'\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 {Array<ElementContent> | ElementContent}\n * hast node.\n */\nexport function linkReference(state, node) {\n const id = String(node.identifier).toUpperCase()\n const definition = state.definitionById.get(id)\n\n if (!definition) {\n return revert(state, node)\n }\n\n /** @type {Properties} */\n const properties = {href: normalizeUri(definition.url || '')}\n\n if (definition.title !== null && definition.title !== undefined) {\n properties.title = definition.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 * @import {Element, Properties} from 'hast'\n * @import {Link} from 'mdast'\n * @import {State} from '../state.js'\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 * @import {ElementContent, Element, Properties} from 'hast'\n * @import {ListItem, Parents} from 'mdast'\n * @import {State} from '../state.js'\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 | 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 === null || spread === undefined\n ? node.children.length > 1\n : spread\n}\n","/**\n * @import {Element, Properties} from 'hast'\n * @import {List} from 'mdast'\n * @import {State} from '../state.js'\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 * @import {Element} from 'hast'\n * @import {Paragraph} from 'mdast'\n * @import {State} from '../state.js'\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 * @import {Parents as HastParents, Root as HastRoot} from 'hast'\n * @import {Root as MdastRoot} from 'mdast'\n * @import {State} from '../state.js'\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 {HastParents}\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 * @import {Element} from 'hast'\n * @import {Strong} from 'mdast'\n * @import {State} from '../state.js'\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 * @import {Table} from 'mdast'\n * @import {Element} from 'hast'\n * @import {State} from '../state.js'\n */\n\nimport {pointEnd, pointStart} 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 && end) 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 * @import {Element, ElementContent, Properties} from 'hast'\n * @import {Parents, TableRow} from 'mdast'\n * @import {State} from '../state.js'\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 | 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 // To do: option to use `style`?\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(cell, 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 * @import {Element} from 'hast'\n * @import {TableCell} from 'mdast'\n * @import {State} from '../state.js'\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 * @import {Element as HastElement, Text as HastText} from 'hast'\n * @import {Text as MdastText} from 'mdast'\n * @import {State} from '../state.js'\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 {HastElement | HastText}\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 * @import {Element} from 'hast'\n * @import {ThematicBreak} from 'mdast'\n * @import {State} from '../state.js'\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","/**\n * @import {Handlers} from '../state.js'\n */\n\nimport {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 {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 *\n * @satisfies {Handlers}\n */\nexport const handlers = {\n blockquote,\n break: hardBreak,\n code,\n delete: strikethrough,\n emphasis,\n footnoteReference,\n heading,\n html,\n imageReference,\n image,\n inlineCode,\n linkReference,\n link,\n listItem,\n list,\n paragraph,\n // @ts-expect-error: root is different, but hard to type.\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 return undefined\n}\n","export const VOID = -1;\nexport const PRIMITIVE = 0;\nexport const ARRAY = 1;\nexport const OBJECT = 2;\nexport const DATE = 3;\nexport const REGEXP = 4;\nexport const MAP = 5;\nexport const SET = 6;\nexport const ERROR = 7;\nexport const BIGINT = 8;\n// export const SYMBOL = 9;\n","import {\n VOID, PRIMITIVE,\n ARRAY, OBJECT,\n DATE, REGEXP, MAP, SET,\n ERROR, BIGINT\n} from './types.js';\n\nconst env = typeof self === 'object' ? self : globalThis;\n\nconst guard = (name, init) => {\n switch (name) {\n case 'Function':\n case 'SharedWorker':\n case 'Worker':\n case 'eval':\n case 'setInterval':\n case 'setTimeout':\n throw new TypeError('unable to deserialize ' + name);\n }\n return new env[name](init);\n};\n\nconst deserializer = ($, _) => {\n const as = (out, index) => {\n $.set(index, out);\n return out;\n };\n\n const unpair = index => {\n if ($.has(index))\n return $.get(index);\n\n const [type, value] = _[index];\n switch (type) {\n case PRIMITIVE:\n case VOID:\n return as(value, index);\n case ARRAY: {\n const arr = as([], index);\n for (const index of value)\n arr.push(unpair(index));\n return arr;\n }\n case OBJECT: {\n const object = as({}, index);\n for (const [key, index] of value)\n object[unpair(key)] = unpair(index);\n return object;\n }\n case DATE:\n return as(new Date(value), index);\n case REGEXP: {\n const {source, flags} = value;\n return as(new RegExp(source, flags), index);\n }\n case MAP: {\n const map = as(new Map, index);\n for (const [key, index] of value)\n map.set(unpair(key), unpair(index));\n return map;\n }\n case SET: {\n const set = as(new Set, index);\n for (const index of value)\n set.add(unpair(index));\n return set;\n }\n case ERROR: {\n const {name, message} = value;\n return as(\n typeof env[name] === 'function' ?\n guard(name, message) :\n new Error(message),\n index\n );\n }\n case BIGINT:\n return as(BigInt(value), index);\n case 'BigInt':\n return as(Object(BigInt(value)), index);\n case 'ArrayBuffer':\n return as(new Uint8Array(value).buffer, value);\n case 'DataView': {\n const { buffer } = new Uint8Array(value);\n return as(new DataView(buffer), value);\n }\n }\n return as(guard(type, value), index);\n };\n\n return unpair;\n};\n\n/**\n * @typedef {Array<string,any>} Record a type representation\n */\n\n/**\n * Returns a deserialized value from a serialized array of Records.\n * @param {Record[]} serialized a previously serialized value.\n * @returns {any}\n */\nexport const deserialize = serialized => deserializer(new Map, serialized)(0);\n","import {\n VOID, PRIMITIVE,\n ARRAY, OBJECT,\n DATE, REGEXP, MAP, SET,\n ERROR, BIGINT\n} from './types.js';\n\nconst EMPTY = '';\n\nconst {toString} = {};\nconst {keys} = Object;\n\nconst typeOf = value => {\n const type = typeof value;\n if (type !== 'object' || !value)\n return [PRIMITIVE, type];\n\n const asString = toString.call(value).slice(8, -1);\n switch (asString) {\n case 'Array':\n return [ARRAY, EMPTY];\n case 'Object':\n return [OBJECT, EMPTY];\n case 'Date':\n return [DATE, EMPTY];\n case 'RegExp':\n return [REGEXP, EMPTY];\n case 'Map':\n return [MAP, EMPTY];\n case 'Set':\n return [SET, EMPTY];\n case 'DataView':\n return [ARRAY, asString];\n }\n\n if (asString.includes('Array'))\n return [ARRAY, asString];\n\n if (value instanceof Error)\n return [ERROR, value.name || 'Error'];\n\n return [OBJECT, asString];\n};\n\nconst shouldSkip = ([TYPE, type]) => (\n TYPE === PRIMITIVE &&\n (type === 'function' || type === 'symbol')\n);\n\nconst serializer = (strict, json, $, _) => {\n\n const as = (out, value) => {\n const index = _.push(out) - 1;\n $.set(value, index);\n return index;\n };\n\n const pair = value => {\n if ($.has(value))\n return $.get(value);\n\n let [TYPE, type] = typeOf(value);\n switch (TYPE) {\n case PRIMITIVE: {\n let entry = value;\n switch (type) {\n case 'bigint':\n TYPE = BIGINT;\n entry = value.toString();\n break;\n case 'function':\n case 'symbol':\n if (strict)\n throw new TypeError('unable to serialize ' + type);\n entry = null;\n break;\n case 'undefined':\n return as([VOID], value);\n }\n return as([TYPE, entry], value);\n }\n case ARRAY: {\n if (type) {\n let spread = value;\n if (type === 'DataView') {\n spread = new Uint8Array(value.buffer);\n }\n else if (type === 'ArrayBuffer') {\n spread = new Uint8Array(value);\n }\n return as([type, [...spread]], value);\n }\n\n const arr = [];\n const index = as([TYPE, arr], value);\n for (const entry of value)\n arr.push(pair(entry));\n return index;\n }\n case OBJECT: {\n if (type) {\n switch (type) {\n case 'BigInt':\n return as([type, value.toString()], value);\n case 'Boolean':\n case 'Number':\n case 'String':\n return as([type, value.valueOf()], value);\n }\n }\n\n if (json && ('toJSON' in value))\n return pair(value.toJSON());\n\n const entries = [];\n const index = as([TYPE, entries], value);\n for (const key of keys(value)) {\n if (strict || !shouldSkip(typeOf(value[key])))\n entries.push([pair(key), pair(value[key])]);\n }\n return index;\n }\n case DATE:\n return as([TYPE, isNaN(value.getTime()) ? EMPTY : value.toISOString()], value);\n case REGEXP: {\n const {source, flags} = value;\n return as([TYPE, {source, flags}], value);\n }\n case MAP: {\n const entries = [];\n const index = as([TYPE, entries], value);\n for (const [key, entry] of value) {\n if (strict || !(shouldSkip(typeOf(key)) || shouldSkip(typeOf(entry))))\n entries.push([pair(key), pair(entry)]);\n }\n return index;\n }\n case SET: {\n const entries = [];\n const index = as([TYPE, entries], value);\n for (const entry of value) {\n if (strict || !shouldSkip(typeOf(entry)))\n entries.push(pair(entry));\n }\n return index;\n }\n }\n\n const {message} = value;\n return as([TYPE, {name: type, message}], value);\n };\n\n return pair;\n};\n\n/**\n * @typedef {Array<string,any>} Record a type representation\n */\n\n/**\n * Returns an array of serialized Records.\n * @param {any} value a serializable value.\n * @param {{json?: boolean, lossy?: boolean}?} options an object with a `lossy` or `json` property that,\n * if `true`, will not throw errors on incompatible types, and behave more\n * like JSON stringify would behave. Symbol and Function will be discarded.\n * @returns {Record[]}\n */\n export const serialize = (value, {json, lossy} = {}) => {\n const _ = [];\n return serializer(!(json || lossy), !!json, new Map, _)(value), _;\n};\n","import {deserialize} from './deserialize.js';\nimport {serialize} from './serialize.js';\n\n/**\n * @typedef {Array<string,any>} Record a type representation\n */\n\n/**\n * Returns an array of serialized Records.\n * @param {any} any a serializable value.\n * @param {{transfer?: any[], json?: boolean, lossy?: boolean}?} options an object with\n * a transfer option (ignored when polyfilled) and/or non standard fields that\n * fallback to the polyfill if present.\n * @returns {Record[]}\n */\nexport default typeof structuredClone === \"function\" ?\n /* c8 ignore start */\n (any, options) => (\n options && ('json' in options || 'lossy' in options) ?\n deserialize(serialize(any, options)) : structuredClone(any)\n ) :\n (any, options) => deserialize(serialize(any, options));\n /* c8 ignore stop */\n\nexport {deserialize, serialize};\n","/**\n * @import {ElementContent, Element} from 'hast'\n * @import {State} from './state.js'\n */\n\n/**\n * @callback FootnoteBackContentTemplate\n * Generate content for the backreference dynamically.\n *\n * For the following markdown:\n *\n * ```markdown\n * Alpha[^micromark], bravo[^micromark], and charlie[^remark].\n *\n * [^remark]: things about remark\n * [^micromark]: things about micromark\n * ```\n *\n * This function will be called with:\n *\n * * `0` and `0` for the backreference from `things about micromark` to\n * `alpha`, as it is the first used definition, and the first call to it\n * * `0` and `1` for the backreference from `things about micromark` to\n * `bravo`, as it is the first used definition, and the second call to it\n * * `1` and `0` for the backreference from `things about remark` to\n * `charlie`, as it is the second used definition\n * @param {number} referenceIndex\n * Index of the definition in the order that they are first referenced,\n * 0-indexed.\n * @param {number} rereferenceIndex\n * Index of calls to the same definition, 0-indexed.\n * @returns {Array<ElementContent> | ElementContent | string}\n * Content for the backreference when linking back from definitions to their\n * reference.\n *\n * @callback FootnoteBackLabelTemplate\n * Generate a back label dynamically.\n *\n * For the following markdown:\n *\n * ```markdown\n * Alpha[^micromark], bravo[^micromark], and charlie[^remark].\n *\n * [^remark]: things about remark\n * [^micromark]: things about micromark\n * ```\n *\n * This function will be called with:\n *\n * * `0` and `0` for the backreference from `things about micromark` to\n * `alpha`, as it is the first used definition, and the first call to it\n * * `0` and `1` for the backreference from `things about micromark` to\n * `bravo`, as it is the first used definition, and the second call to it\n * * `1` and `0` for the backreference from `things about remark` to\n * `charlie`, as it is the second used definition\n * @param {number} referenceIndex\n * Index of the definition in the order that they are first referenced,\n * 0-indexed.\n * @param {number} rereferenceIndex\n * Index of calls to the same definition, 0-indexed.\n * @returns {string}\n * Back label to use when linking back from definitions to their reference.\n */\n\nimport structuredClone from '@ungap/structured-clone'\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Generate the default content that GitHub uses on backreferences.\n *\n * @param {number} _\n * Index of the definition in the order that they are first referenced,\n * 0-indexed.\n * @param {number} rereferenceIndex\n * Index of calls to the same definition, 0-indexed.\n * @returns {Array<ElementContent>}\n * Content.\n */\nexport function defaultFootnoteBackContent(_, rereferenceIndex) {\n /** @type {Array<ElementContent>} */\n const result = [{type: 'text', value: '↩'}]\n\n if (rereferenceIndex > 1) {\n result.push({\n type: 'element',\n tagName: 'sup',\n properties: {},\n children: [{type: 'text', value: String(rereferenceIndex)}]\n })\n }\n\n return result\n}\n\n/**\n * Generate the default label that GitHub uses on backreferences.\n *\n * @param {number} referenceIndex\n * Index of the definition in the order that they are first referenced,\n * 0-indexed.\n * @param {number} rereferenceIndex\n * Index of calls to the same definition, 0-indexed.\n * @returns {string}\n * Label.\n */\nexport function defaultFootnoteBackLabel(referenceIndex, rereferenceIndex) {\n return (\n 'Back to reference ' +\n (referenceIndex + 1) +\n (rereferenceIndex > 1 ? '-' + rereferenceIndex : '')\n )\n}\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 */\n// eslint-disable-next-line complexity\nexport function footer(state) {\n const clobberPrefix =\n typeof state.options.clobberPrefix === 'string'\n ? state.options.clobberPrefix\n : 'user-content-'\n const footnoteBackContent =\n state.options.footnoteBackContent || defaultFootnoteBackContent\n const footnoteBackLabel =\n state.options.footnoteBackLabel || defaultFootnoteBackLabel\n const footnoteLabel = state.options.footnoteLabel || 'Footnotes'\n const footnoteLabelTagName = state.options.footnoteLabelTagName || 'h2'\n const footnoteLabelProperties = state.options.footnoteLabelProperties || {\n className: ['sr-only']\n }\n /** @type {Array<ElementContent>} */\n const listItems = []\n let referenceIndex = -1\n\n while (++referenceIndex < state.footnoteOrder.length) {\n const definition = state.footnoteById.get(\n state.footnoteOrder[referenceIndex]\n )\n\n if (!definition) {\n continue\n }\n\n const content = state.all(definition)\n const id = String(definition.identifier).toUpperCase()\n const safeId = normalizeUri(id.toLowerCase())\n let rereferenceIndex = 0\n /** @type {Array<ElementContent>} */\n const backReferences = []\n const counts = state.footnoteCounts.get(id)\n\n // eslint-disable-next-line no-unmodified-loop-condition\n while (counts !== undefined && ++rereferenceIndex <= counts) {\n if (backReferences.length > 0) {\n backReferences.push({type: 'text', value: ' '})\n }\n\n let children =\n typeof footnoteBackContent === 'string'\n ? footnoteBackContent\n : footnoteBackContent(referenceIndex, rereferenceIndex)\n\n if (typeof children === 'string') {\n children = {type: 'text', value: children}\n }\n\n backReferences.push({\n type: 'element',\n tagName: 'a',\n properties: {\n href:\n '#' +\n clobberPrefix +\n 'fnref-' +\n safeId +\n (rereferenceIndex > 1 ? '-' + rereferenceIndex : ''),\n dataFootnoteBackref: '',\n ariaLabel:\n typeof footnoteBackLabel === 'string'\n ? footnoteBackLabel\n : footnoteBackLabel(referenceIndex, rereferenceIndex),\n className: ['data-footnote-backref']\n },\n children: Array.isArray(children) ? children : [children]\n })\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: clobberPrefix + 'fn-' + safeId},\n children: state.wrap(content, true)\n }\n\n state.patch(definition, 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: footnoteLabelTagName,\n properties: {\n ...structuredClone(footnoteLabelProperties),\n id: 'footnote-label'\n },\n children: [{type: 'text', value: 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 * @import {Node, Parent} from 'unist'\n */\n\n/**\n * @template Fn\n * @template Fallback\n * @typedef {Fn extends (value: any) => value is infer Thing ? Thing : Fallback} Predicate\n */\n\n/**\n * @callback Check\n * Check that an arbitrary value is a node.\n * @param {unknown} this\n * The given context.\n * @param {unknown} [node]\n * Anything (typically a node).\n * @param {number | null | undefined} [index]\n * The node’s position in its parent.\n * @param {Parent | null | undefined} [parent]\n * The node’s parent.\n * @returns {boolean}\n * Whether this is a node and passes a test.\n *\n * @typedef {Record<string, unknown> | Node} Props\n * Object to check for equivalence.\n *\n * Note: `Node` is included as it is common but is not indexable.\n *\n * @typedef {Array<Props | TestFunction | string> | ReadonlyArray<Props | TestFunction | string> | Props | TestFunction | string | null | undefined} Test\n * Check for an arbitrary node.\n *\n * @callback TestFunction\n * Check if a node passes a test.\n * @param {unknown} this\n * The given context.\n * @param {Node} node\n * A node.\n * @param {number | undefined} [index]\n * The node’s position in its parent.\n * @param {Parent | undefined} [parent]\n * The node’s parent.\n * @returns {boolean | undefined | void}\n * Whether this node passes the test.\n *\n * Note: `void` is included until TS sees no return as `undefined`.\n */\n\n/**\n * Check if `node` is a `Node` and whether it passes the given test.\n *\n * @param {unknown} node\n * Thing to check, typically `Node`.\n * @param {Test} test\n * A check for a specific node.\n * @param {number | null | undefined} index\n * The node’s position in its parent.\n * @param {Parent | null | undefined} parent\n * The node’s parent.\n * @param {unknown} context\n * Context object (`this`) to pass to `test` functions.\n * @returns {boolean}\n * Whether `node` is a node and passes a test.\n */\nexport const is =\n // Note: overloads in JSDoc can’t yet use different `@template`s.\n /**\n * @type {(\n * (<Condition extends ReadonlyArray<string>>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition[number]}) &\n * (<Condition extends Array<string>>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition[number]}) &\n * (<Condition extends string>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) &\n * (<Condition extends Props>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) &\n * (<Condition extends TestFunction>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate<Condition, Node>) &\n * ((node?: null | undefined) => false) &\n * ((node: unknown, test?: null | undefined, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) &\n * ((node: unknown, test?: Test, index?: number | null | undefined, parent?: 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 (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 return looksLikeANode(node)\n ? check.call(context, node, index, parent)\n : false\n }\n )\n\n/**\n * Generate an assertion from a test.\n *\n * Useful if you’re 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} 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 {Check}\n * An assertion.\n */\nexport const convert =\n // Note: overloads in JSDoc can’t yet use different `@template`s.\n /**\n * @type {(\n * (<Condition extends string>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) &\n * (<Condition extends Props>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) &\n * (<Condition extends TestFunction>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate<Condition, Node>) &\n * ((test?: null | undefined) => (node?: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) &\n * ((test?: Test) => Check)\n * )}\n */\n (\n /**\n * @param {Test} [test]\n * @returns {Check}\n */\n function (test) {\n if (test === null || test === undefined) {\n return ok\n }\n\n if (typeof test === 'function') {\n return castFactory(test)\n }\n\n if (typeof test === 'object') {\n return Array.isArray(test)\n ? anyFactory(test)\n : // Cast because `ReadonlyArray` goes into the above but `isArray`\n // narrows to `Array`.\n propertiesFactory(/** @type {Props} */ (test))\n }\n\n if (typeof test === 'string') {\n return typeFactory(test)\n }\n\n throw new Error('Expected function, string, or object as test')\n }\n )\n\n/**\n * @param {Array<Props | TestFunction | string>} tests\n * @returns {Check}\n */\nfunction anyFactory(tests) {\n /** @type {Array<Check>} */\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 * @type {TestFunction}\n */\n function any(...parameters) {\n let index = -1\n\n while (++index < checks.length) {\n if (checks[index].apply(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 {Check}\n */\nfunction propertiesFactory(check) {\n const checkAsRecord = /** @type {Record<string, unknown>} */ (check)\n\n return castFactory(all)\n\n /**\n * @param {Node} node\n * @returns {boolean}\n */\n function all(node) {\n const nodeAsRecord = /** @type {Record<string, unknown>} */ (\n /** @type {unknown} */ (node)\n )\n\n /** @type {string} */\n let key\n\n for (key in check) {\n if (nodeAsRecord[key] !== checkAsRecord[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 {Check}\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 {TestFunction} testFunction\n * @returns {Check}\n */\nfunction castFactory(testFunction) {\n return check\n\n /**\n * @this {unknown}\n * @type {Check}\n */\n function check(value, index, parent) {\n return Boolean(\n looksLikeANode(value) &&\n testFunction.call(\n this,\n value,\n typeof index === 'number' ? index : undefined,\n parent || undefined\n )\n )\n }\n}\n\nfunction ok() {\n return true\n}\n\n/**\n * @param {unknown} value\n * @returns {value is Node}\n */\nfunction looksLikeANode(value) {\n return value !== null && typeof value === 'object' && 'type' in value\n}\n","/**\n * @import {Node as UnistNode, Parent as UnistParent} from 'unist'\n */\n\n/**\n * @typedef {Exclude<import('unist-util-is').Test, undefined> | undefined} Test\n * Test from `unist-util-is`.\n *\n * Note: we have remove and add `undefined`, because otherwise when generating\n * automatic `.d.ts` files, TS tries to flatten paths from a local perspective,\n * which doesn’t work when publishing on npm.\n */\n\n/**\n * @typedef {(\n * Fn extends (value: any) => value is infer Thing\n * ? Thing\n * : Fallback\n * )} Predicate\n * Get the value of a type guard `Fn`.\n * @template Fn\n * Value; typically function that is a type guard (such as `(x): x is Y`).\n * @template Fallback\n * Value to yield if `Fn` is not a type guard.\n */\n\n/**\n * @typedef {(\n * Check extends null | undefined // No test.\n * ? Value\n * : Value extends {type: Check} // String (type) test.\n * ? Value\n * : Value extends Check // Partial test.\n * ? Value\n * : Check extends Function // Function test.\n * ? Predicate<Check, Value> extends Value\n * ? Predicate<Check, Value>\n * : never\n * : never // Some other test?\n * )} MatchesOne\n * Check whether a node matches a primitive check in the type system.\n * @template Value\n * Value; typically unist `Node`.\n * @template Check\n * Value; typically `unist-util-is`-compatible test, but not arrays.\n */\n\n/**\n * @typedef {(\n * Check extends ReadonlyArray<infer T>\n * ? MatchesOne<Value, T>\n * : Check extends Array<infer T>\n * ? MatchesOne<Value, T>\n * : MatchesOne<Value, Check>\n * )} Matches\n * Check whether a node matches a check in the type system.\n * @template Value\n * Value; typically unist `Node`.\n * @template Check\n * Value; typically `unist-util-is`-compatible test.\n */\n\n/**\n * @typedef {0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10} Uint\n * Number; capped reasonably.\n */\n\n/**\n * @typedef {I extends 0 ? 1 : I extends 1 ? 2 : I extends 2 ? 3 : I extends 3 ? 4 : I extends 4 ? 5 : I extends 5 ? 6 : I extends 6 ? 7 : I extends 7 ? 8 : I extends 8 ? 9 : 10} Increment\n * Increment a number in the type system.\n * @template {Uint} [I=0]\n * Index.\n */\n\n/**\n * @typedef {(\n * Node extends UnistParent\n * ? Node extends {children: Array<infer Children>}\n * ? Child extends Children ? Node : never\n * : never\n * : never\n * )} InternalParent\n * Collect nodes that can be parents of `Child`.\n * @template {UnistNode} Node\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {InternalParent<InclusiveDescendant<Tree>, Child>} Parent\n * Collect nodes in `Tree` that can be parents of `Child`.\n * @template {UnistNode} Tree\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {(\n * Depth extends Max\n * ? never\n * :\n * | InternalParent<Node, Child>\n * | InternalAncestor<Node, InternalParent<Node, Child>, Max, Increment<Depth>>\n * )} InternalAncestor\n * Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Node\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n * @template {Uint} [Max=10]\n * Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n * Current depth.\n */\n\n/**\n * @typedef {InternalAncestor<InclusiveDescendant<Tree>, Child>} Ancestor\n * Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Tree\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {(\n * Tree extends UnistParent\n * ? Depth extends Max\n * ? Tree\n * : Tree | InclusiveDescendant<Tree['children'][number], Max, Increment<Depth>>\n * : Tree\n * )} InclusiveDescendant\n * Collect all (inclusive) descendants of `Tree`.\n *\n * > 👉 **Note**: for performance reasons, this seems to be the fastest way to\n * > recurse without actually running into an infinite loop, which the\n * > previous version did.\n * >\n * > Practically, a max of `2` is typically enough assuming a `Root` is\n * > passed, but it doesn’t improve performance.\n * > It gets higher with `List > ListItem > Table > TableRow > TableCell`.\n * > Using up to `10` doesn’t hurt or help either.\n * @template {UnistNode} Tree\n * Tree type.\n * @template {Uint} [Max=10]\n * Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n * Current depth.\n */\n\n/**\n * @typedef {'skip' | boolean} 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 * @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<VisitedParents>} 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 * @template {UnistNode} [Visited=UnistNode]\n * Visited node type.\n * @template {UnistParent} [VisitedParents=UnistParent]\n * Ancestor type.\n */\n\n/**\n * @typedef {Visitor<Matches<InclusiveDescendant<Tree>, Check>, Ancestor<Tree, Matches<InclusiveDescendant<Tree>, Check>>>} 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 * @template {UnistNode} [Tree=UnistNode]\n * Tree type.\n * @template {Test} [Check=Test]\n * Test type.\n */\n\nimport {convert} from 'unist-util-is'\nimport {color} from 'unist-util-visit-parents/do-not-use-color'\n\n/** @type {Readonly<ActionTuple>} */\nconst empty = []\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’s 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 * @overload\n * @param {Tree} tree\n * @param {Check} check\n * @param {BuildVisitor<Tree, Check>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @overload\n * @param {Tree} tree\n * @param {BuildVisitor<Tree>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @param {UnistNode} tree\n * Tree to traverse.\n * @param {Visitor | Test} test\n * `unist-util-is`-compatible test\n * @param {Visitor | boolean | null | undefined} [visitor]\n * Handle each node.\n * @param {boolean | null | undefined} [reverse]\n * Traverse in reverse preorder (NRL) instead of the default preorder (NLR).\n * @returns {undefined}\n * Nothing.\n *\n * @template {UnistNode} Tree\n * Node type.\n * @template {Test} Check\n * `unist-util-is`-compatible test.\n */\nexport function visitParents(tree, test, visitor, reverse) {\n /** @type {Test} */\n let check\n\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 } else {\n // @ts-expect-error visitor given, so `test` isn’t a visitor.\n check = test\n }\n\n const is = convert(check)\n const step = reverse ? -1 : 1\n\n factory(tree, undefined, [])()\n\n /**\n * @param {UnistNode} node\n * @param {number | undefined} index\n * @param {Array<UnistParent>} parents\n */\n function factory(node, index, parents) {\n const value = /** @type {Record<string, unknown>} */ (\n node && typeof node === 'object' ? node : {}\n )\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 {Readonly<ActionTuple>} */\n let result = empty\n /** @type {Readonly<ActionTuple>} */\n let subresult\n /** @type {number} */\n let offset\n /** @type {Array<UnistParent>} */\n let grandparents\n\n if (!test || is(node, index, parents[parents.length - 1] || undefined)) {\n // @ts-expect-error: `visitor` is now a visitor.\n result = toResult(visitor(node, parents))\n\n if (result[0] === EXIT) {\n return result\n }\n }\n\n if ('children' in node && node.children) {\n const nodeAsParent = /** @type {UnistParent} */ (node)\n\n if (nodeAsParent.children && result[0] !== SKIP) {\n offset = (reverse ? nodeAsParent.children.length : -1) + step\n grandparents = parents.concat(nodeAsParent)\n\n while (offset > -1 && offset < nodeAsParent.children.length) {\n const child = nodeAsParent.children[offset]\n\n subresult = factory(child, 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\n return result\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 {Readonly<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 === null || value === undefined ? empty : [value]\n}\n","/**\n * @import {Node as UnistNode, Parent as UnistParent} from 'unist'\n * @import {VisitorResult} from 'unist-util-visit-parents'\n */\n\n/**\n * @typedef {Exclude<import('unist-util-is').Test, undefined> | undefined} Test\n * Test from `unist-util-is`.\n *\n * Note: we have remove and add `undefined`, because otherwise when generating\n * automatic `.d.ts` files, TS tries to flatten paths from a local perspective,\n * which doesn’t work when publishing on npm.\n */\n\n// To do: use types from `unist-util-visit-parents` when it’s released.\n\n/**\n * @typedef {(\n * Fn extends (value: any) => value is infer Thing\n * ? Thing\n * : Fallback\n * )} Predicate\n * Get the value of a type guard `Fn`.\n * @template Fn\n * Value; typically function that is a type guard (such as `(x): x is Y`).\n * @template Fallback\n * Value to yield if `Fn` is not a type guard.\n */\n\n/**\n * @typedef {(\n * Check extends null | undefined // No test.\n * ? Value\n * : Value extends {type: Check} // String (type) test.\n * ? Value\n * : Value extends Check // Partial test.\n * ? Value\n * : Check extends Function // Function test.\n * ? Predicate<Check, Value> extends Value\n * ? Predicate<Check, Value>\n * : never\n * : never // Some other test?\n * )} MatchesOne\n * Check whether a node matches a primitive check in the type system.\n * @template Value\n * Value; typically unist `Node`.\n * @template Check\n * Value; typically `unist-util-is`-compatible test, but not arrays.\n */\n\n/**\n * @typedef {(\n * Check extends ReadonlyArray<any>\n * ? MatchesOne<Value, Check[number]>\n * : MatchesOne<Value, Check>\n * )} Matches\n * Check whether a node matches a check in the type system.\n * @template Value\n * Value; typically unist `Node`.\n * @template Check\n * Value; typically `unist-util-is`-compatible test.\n */\n\n/**\n * @typedef {0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10} Uint\n * Number; capped reasonably.\n */\n\n/**\n * @typedef {I extends 0 ? 1 : I extends 1 ? 2 : I extends 2 ? 3 : I extends 3 ? 4 : I extends 4 ? 5 : I extends 5 ? 6 : I extends 6 ? 7 : I extends 7 ? 8 : I extends 8 ? 9 : 10} Increment\n * Increment a number in the type system.\n * @template {Uint} [I=0]\n * Index.\n */\n\n/**\n * @typedef {(\n * Node extends UnistParent\n * ? Node extends {children: Array<infer Children>}\n * ? Child extends Children ? Node : never\n * : never\n * : never\n * )} InternalParent\n * Collect nodes that can be parents of `Child`.\n * @template {UnistNode} Node\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {InternalParent<InclusiveDescendant<Tree>, Child>} Parent\n * Collect nodes in `Tree` that can be parents of `Child`.\n * @template {UnistNode} Tree\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {(\n * Depth extends Max\n * ? never\n * :\n * | InternalParent<Node, Child>\n * | InternalAncestor<Node, InternalParent<Node, Child>, Max, Increment<Depth>>\n * )} InternalAncestor\n * Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Node\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n * @template {Uint} [Max=10]\n * Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n * Current depth.\n */\n\n/**\n * @typedef {(\n * Tree extends UnistParent\n * ? Depth extends Max\n * ? Tree\n * : Tree | InclusiveDescendant<Tree['children'][number], Max, Increment<Depth>>\n * : Tree\n * )} InclusiveDescendant\n * Collect all (inclusive) descendants of `Tree`.\n *\n * > 👉 **Note**: for performance reasons, this seems to be the fastest way to\n * > recurse without actually running into an infinite loop, which the\n * > previous version did.\n * >\n * > Practically, a max of `2` is typically enough assuming a `Root` is\n * > passed, but it doesn’t improve performance.\n * > It gets higher with `List > ListItem > Table > TableRow > TableCell`.\n * > Using up to `10` doesn’t hurt or help either.\n * @template {UnistNode} Tree\n * Tree type.\n * @template {Uint} [Max=10]\n * Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n * Current depth.\n */\n\n/**\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 UnistNode ? number | undefined : never} index\n * Index of `node` in `parent`.\n * @param {Ancestor extends UnistParent ? Ancestor | undefined : 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 * @template {UnistNode} [Visited=UnistNode]\n * Visited node type.\n * @template {UnistParent} [Ancestor=UnistParent]\n * Ancestor type.\n */\n\n/**\n * @typedef {Visitor<Visited, Parent<Ancestor, Visited>>} BuildVisitorFromMatch\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 * @template {UnistNode} Visited\n * Node type.\n * @template {UnistParent} Ancestor\n * Parent type.\n */\n\n/**\n * @typedef {(\n * BuildVisitorFromMatch<\n * Matches<Descendant, Check>,\n * Extract<Descendant, UnistParent>\n * >\n * )} BuildVisitorFromDescendants\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 * @template {UnistNode} Descendant\n * Node type.\n * @template {Test} Check\n * Test type.\n */\n\n/**\n * @typedef {(\n * BuildVisitorFromDescendants<\n * InclusiveDescendant<Tree>,\n * Check\n * >\n * )} 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 `parent`.\n * @template {UnistNode} [Tree=UnistNode]\n * Node type.\n * @template {Test} [Check=Test]\n * Test type.\n */\n\nimport {visitParents} from 'unist-util-visit-parents'\n\nexport {CONTINUE, EXIT, SKIP} 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 * @overload\n * @param {Tree} tree\n * @param {Check} check\n * @param {BuildVisitor<Tree, Check>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @overload\n * @param {Tree} tree\n * @param {BuildVisitor<Tree>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @param {UnistNode} tree\n * Tree to traverse.\n * @param {Visitor | Test} testOrVisitor\n * `unist-util-is`-compatible test (optional, omit to pass a visitor).\n * @param {Visitor | boolean | null | undefined} [visitorOrReverse]\n * Handle each node (when test is omitted, pass `reverse`).\n * @param {boolean | null | undefined} [maybeReverse=false]\n * Traverse in reverse preorder (NRL) instead of the default preorder (NLR).\n * @returns {undefined}\n * Nothing.\n *\n * @template {UnistNode} Tree\n * Node type.\n * @template {Test} Check\n * `unist-util-is`-compatible test.\n */\nexport function visit(tree, testOrVisitor, visitorOrReverse, maybeReverse) {\n /** @type {boolean | null | undefined} */\n let reverse\n /** @type {Test} */\n let test\n /** @type {Visitor} */\n let visitor\n\n if (\n typeof testOrVisitor === 'function' &&\n typeof visitorOrReverse !== 'function'\n ) {\n test = undefined\n visitor = testOrVisitor\n reverse = visitorOrReverse\n } else {\n // @ts-expect-error: assume the overload with test was given.\n test = testOrVisitor\n // @ts-expect-error: assume the overload with test was given.\n visitor = visitorOrReverse\n reverse = maybeReverse\n }\n\n visitParents(tree, test, overload, reverse)\n\n /**\n * @param {UnistNode} node\n * @param {Array<UnistParent>} parents\n */\n function overload(node, parents) {\n const parent = parents[parents.length - 1]\n const index = parent ? parent.children.indexOf(node) : undefined\n return visitor(node, index, parent)\n }\n}\n","/**\n * @import {\n * ElementContent as HastElementContent,\n * Element as HastElement,\n * Nodes as HastNodes,\n * Properties as HastProperties,\n * RootContent as HastRootContent,\n * Text as HastText\n * } from 'hast'\n * @import {\n * Definition as MdastDefinition,\n * FootnoteDefinition as MdastFootnoteDefinition,\n * Nodes as MdastNodes,\n * Parents as MdastParents\n * } from 'mdast'\n * @import {VFile} from 'vfile'\n * @import {\n * FootnoteBackContentTemplate,\n * FootnoteBackLabelTemplate\n * } from './footer.js'\n */\n\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 | undefined} parent\n * Parent of `node`.\n * @returns {Array<HastElementContent> | HastElementContent | undefined}\n * hast node.\n *\n * @typedef {Partial<Record<MdastNodes['type'], Handler>>} Handlers\n * Handle nodes.\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 (default:\n * `false`).\n * @property {string | null | undefined} [clobberPrefix='user-content-']\n * Prefix to use before the `id` property on footnotes to prevent them from\n * *clobbering* (default: `'user-content-'`).\n *\n * Pass `''` for trusted markdown and when you are careful with\n * polyfilling.\n * You could pass a different prefix.\n *\n * DOM clobbering is this:\n *\n * ```html\n * <p id=\"x\"></p>\n * <script>alert(x) // `x` now refers to the `p#x` DOM element</script>\n * ```\n *\n * The above example shows that elements are made available by browsers, by\n * their ID, on the `window` object.\n * This is a security risk because you might be expecting some other variable\n * at that place.\n * It can also break polyfills.\n * Using a prefix solves these problems.\n * @property {VFile | null | undefined} [file]\n * Corresponding virtual file representing the input document (optional).\n * @property {FootnoteBackContentTemplate | string | null | undefined} [footnoteBackContent]\n * Content of the backreference back to references (default: `defaultFootnoteBackContent`).\n *\n * The default value is:\n *\n * ```js\n * function defaultFootnoteBackContent(_, rereferenceIndex) {\n * const result = [{type: 'text', value: '↩'}]\n *\n * if (rereferenceIndex > 1) {\n * result.push({\n * type: 'element',\n * tagName: 'sup',\n * properties: {},\n * children: [{type: 'text', value: String(rereferenceIndex)}]\n * })\n * }\n *\n * return result\n * }\n * ```\n *\n * This content is used in the `a` element of each backreference (the `↩`\n * links).\n * @property {FootnoteBackLabelTemplate | string | null | undefined} [footnoteBackLabel]\n * Label to describe the backreference back to references (default:\n * `defaultFootnoteBackLabel`).\n *\n * The default value is:\n *\n * ```js\n * function defaultFootnoteBackLabel(referenceIndex, rereferenceIndex) {\n * return (\n * 'Back to reference ' +\n * (referenceIndex + 1) +\n * (rereferenceIndex > 1 ? '-' + rereferenceIndex : '')\n * )\n * }\n * ```\n *\n * Change it when the markdown is not in English.\n *\n * This label is used in the `ariaLabel` property on each backreference\n * (the `↩` links).\n * It affects users of assistive technology.\n * @property {string | null | undefined} [footnoteLabel='Footnotes']\n * Textual label to use for the footnotes section (default: `'Footnotes'`).\n *\n * Change it when the markdown is not in English.\n *\n * This label is typically hidden visually (assuming a `sr-only` CSS class\n * is defined that does that) and so affects screen readers only.\n * If you do have such a class, but want to show this section to everyone,\n * pass different properties with the `footnoteLabelProperties` option.\n * @property {HastProperties | null | undefined} [footnoteLabelProperties={className: ['sr-only']}]\n * Properties to use on the footnote label (default: `{className:\n * ['sr-only']}`).\n *\n * Change it to show the label and add other properties.\n *\n * This label is typically hidden visually (assuming an `sr-only` CSS class\n * is defined that does that) and so affects screen readers only.\n * If you do have such a class, but want to show this section to everyone,\n * pass an empty string.\n * You can also add different properties.\n *\n * > **Note**: `id: 'footnote-label'` is always added, because footnote\n * > calls use it with `aria-describedby` to provide an accessible label.\n * @property {string | null | undefined} [footnoteLabelTagName='h2']\n * HTML tag name to use for the footnote label element (default: `'h2'`).\n *\n * Change it to match your document structure.\n *\n * This label is typically hidden visually (assuming a `sr-only` CSS class\n * is defined that does that) and so affects screen readers only.\n * If you do have such a class, but want to show this section to everyone,\n * pass different properties with the `footnoteLabelProperties` option.\n * @property {Handlers | null | undefined} [handlers]\n * Extra handlers for nodes (optional).\n * @property {Array<MdastNodes['type']> | 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 * (optional).\n * @property {Handler | null | undefined} [unknownHandler]\n * Handler for all unknown nodes (optional).\n *\n * @typedef State\n * Info passed around.\n * @property {(node: MdastNodes) => Array<HastElementContent>} all\n * Transform the children of an mdast parent to hast.\n * @property {<Type extends HastNodes>(from: MdastNodes, to: Type) => HastElement | Type} applyData\n * Honor the `data` of `from`, and generate an element instead of `node`.\n * @property {Map<string, MdastDefinition>} definitionById\n * Definitions by their identifier.\n * @property {Map<string, MdastFootnoteDefinition>} footnoteById\n * Footnote definitions by their identifier.\n * @property {Map<string, number>} footnoteCounts\n * Counts for how often the same footnote was called.\n * @property {Array<string>} footnoteOrder\n * Identifiers of order when footnote calls first appear in tree order.\n * @property {Handlers} handlers\n * Applied handlers.\n * @property {(node: MdastNodes, parent: MdastParents | undefined) => Array<HastElementContent> | HastElementContent | undefined} one\n * Transform an mdast node to hast.\n * @property {Options} options\n * Configuration.\n * @property {(from: MdastNodes, node: HastNodes) => undefined} patch\n * Copy a node’s positional info.\n * @property {<Type extends HastRootContent>(nodes: Array<Type>, loose?: boolean | undefined) => Array<HastText | Type>} wrap\n * Wrap `nodes` with line endings between each node, adds initial/final line endings when `loose`.\n */\n\nimport structuredClone from '@ungap/structured-clone'\nimport {visit} from 'unist-util-visit'\nimport {position} from 'unist-util-position'\nimport {handlers as defaultHandlers} from './handlers/index.js'\n\nconst own = {}.hasOwnProperty\n\n/** @type {Options} */\nconst emptyOptions = {}\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 (optional).\n * @returns {State}\n * `state` function.\n */\nexport function createState(tree, options) {\n const settings = options || emptyOptions\n /** @type {Map<string, MdastDefinition>} */\n const definitionById = new Map()\n /** @type {Map<string, MdastFootnoteDefinition>} */\n const footnoteById = new Map()\n /** @type {Map<string, number>} */\n const footnoteCounts = new Map()\n /** @type {Handlers} */\n // @ts-expect-error: the root handler returns a root.\n // Hard to type.\n const handlers = {...defaultHandlers, ...settings.handlers}\n\n /** @type {State} */\n const state = {\n all,\n applyData,\n definitionById,\n footnoteById,\n footnoteCounts,\n footnoteOrder: [],\n handlers,\n one,\n options: settings,\n patch,\n wrap\n }\n\n visit(tree, function (node) {\n if (node.type === 'definition' || node.type === 'footnoteDefinition') {\n const map = node.type === 'definition' ? definitionById : footnoteById\n const id = String(node.identifier).toUpperCase()\n\n // Mimick CM behavior of link definitions.\n // See: <https://github.com/syntax-tree/mdast-util-definitions/blob/9032189/lib/index.js#L20-L21>.\n if (!map.has(id)) {\n // @ts-expect-error: node type matches map.\n map.set(id, node)\n }\n }\n })\n\n return state\n\n /**\n * Transform an mdast node into a hast node.\n *\n * @param {MdastNodes} node\n * mdast node.\n * @param {MdastParents | undefined} [parent]\n * Parent of `node`.\n * @returns {Array<HastElementContent> | HastElementContent | undefined}\n * Resulting hast node.\n */\n function one(node, parent) {\n const type = node.type\n const handle = state.handlers[type]\n\n if (own.call(state.handlers, type) && handle) {\n return handle(state, node, parent)\n }\n\n if (state.options.passThrough && state.options.passThrough.includes(type)) {\n if ('children' in node) {\n const {children, ...shallow} = node\n const result = structuredClone(shallow)\n // @ts-expect-error: TS doesn’t understand…\n result.children = state.all(node)\n // @ts-expect-error: TS doesn’t understand…\n return result\n }\n\n // @ts-expect-error: it’s custom.\n return structuredClone(node)\n }\n\n const unknown = state.options.unknownHandler || defaultUnknownHandler\n\n return unknown(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 all(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 = state.one(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 = trimMarkdownSpaceStart(result.value)\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 = trimMarkdownSpaceStart(head.value)\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/**\n * Copy a node’s 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 {undefined}\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 {HastElement | Type}\n * Nothing.\n */\nfunction applyData(from, to) {\n /** @type {HastElement | Type} */\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 of `hName` is to create an element, but likely also to keep\n // the content around (otherwise: pass `hChildren`).\n else {\n /** @type {Array<HastElementContent>} */\n // @ts-expect-error: assume no doctypes in `root`.\n const children = 'children' in result ? result.children : [result]\n result = {type: 'element', tagName: hName, properties: {}, children}\n }\n }\n\n if (result.type === 'element' && hProperties) {\n Object.assign(result.properties, structuredClone(hProperties))\n }\n\n if (\n 'children' in result &&\n result.children &&\n hChildren !== null &&\n hChildren !== undefined\n ) {\n result.children = hChildren\n }\n }\n\n return result\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 {HastElement | HastText}\n * Resulting hast node.\n */\nfunction defaultUnknownHandler(state, node) {\n const data = node.data || {}\n /** @type {HastElement | HastText} */\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: state.all(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 {HastRootContent} Type\n * Node type.\n * @param {Array<Type>} nodes\n * List of nodes to wrap.\n * @param {boolean | undefined} [loose=false]\n * Whether to add line endings at start and end (default: `false`).\n * @returns {Array<HastText | Type>}\n * Wrapped nodes.\n */\nexport function wrap(nodes, loose) {\n /** @type {Array<HastText | Type>} */\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/**\n * Trim spaces and tabs at the start of `value`.\n *\n * @param {string} value\n * Value to trim.\n * @returns {string}\n * Result.\n */\nfunction trimMarkdownSpaceStart(value) {\n let index = 0\n let code = value.charCodeAt(index)\n\n while (code === 9 || code === 32) {\n index++\n code = value.charCodeAt(index)\n }\n\n return value.slice(index)\n}\n","/**\n * @import {Nodes as HastNodes} from 'hast'\n * @import {Nodes as MdastNodes} from 'mdast'\n * @import {Options} from './state.js'\n */\n\nimport {ok as assert} from 'devlop'\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’t:\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’t in `handlers` or `passThrough`.\n * The default behavior for unknown nodes is:\n *\n * * when the node has a `value` (and doesn’t 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 (optional).\n * @returns {HastNodes}\n * hast tree.\n */\nexport function toHast(tree, options) {\n const state = createState(tree, options)\n const node = state.one(tree, undefined)\n const foot = footer(state)\n /** @type {HastNodes} */\n const result = Array.isArray(node)\n ? {type: 'root', children: node}\n : node || {type: 'root', children: []}\n\n if (foot) {\n // If there’s a footer, there were definitions, meaning block\n // content.\n // So `result` is a parent node.\n assert('children' in result)\n result.children.push({type: 'text', value: '\\n'}, foot)\n }\n\n return result\n}\n","/**\n * @import {Root as HastRoot} from 'hast'\n * @import {Root as MdastRoot} from 'mdast'\n * @import {Options as ToHastOptions} from 'mdast-util-to-hast'\n * @import {Processor} from 'unified'\n * @import {VFile} from 'vfile'\n */\n\n/**\n * @typedef {Omit<ToHastOptions, 'file'>} Options\n *\n * @callback TransformBridge\n * Bridge-mode.\n *\n * Runs the destination with the new hast tree.\n * Discards result.\n * @param {MdastRoot} tree\n * Tree.\n * @param {VFile} file\n * File.\n * @returns {Promise<undefined>}\n * Nothing.\n *\n * @callback TransformMutate\n * Mutate-mode.\n *\n * Further transformers run on the hast tree.\n * @param {MdastRoot} tree\n * Tree.\n * @param {VFile} file\n * File.\n * @returns {HastRoot}\n * Tree (hast).\n */\n\nimport {toHast} from 'mdast-util-to-hast'\n\n/**\n * Turn markdown into HTML.\n *\n * ##### Notes\n *\n * ###### Signature\n *\n * * if a processor is given,\n * runs the (rehype) plugins used on it with a hast tree,\n * then discards the result (*bridge mode*)\n * * otherwise,\n * returns a hast tree,\n * the plugins used after `remarkRehype` are rehype plugins (*mutate mode*)\n *\n * > 👉 **Note**:\n * > It’s highly unlikely that you want to pass a `processor`.\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 plugins ignore `raw` nodes but two notable ones don’t:\n *\n * * `rehype-stringify` 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 if\n * you completely trust authors\n * * `rehype-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,\n * but it is the only way to support untrusted content\n *\n * ###### Footnotes\n *\n * Many options supported here relate to footnotes.\n * Footnotes are not specified by CommonMark,\n * which we follow by default.\n * They are supported by GitHub,\n * so footnotes can be enabled in markdown with `remark-gfm`.\n *\n * The options `footnoteBackLabel` and `footnoteLabel` define natural language\n * that explains footnotes,\n * which is hidden for sighted users but shown to assistive technology.\n * When your page is not in English,\n * you must define translated values.\n *\n * Back references use ARIA attributes,\n * but the section label itself uses a heading that is hidden with an\n * `sr-only` class.\n * To show it to sighted users,\n * define different attributes in `footnoteLabelProperties`.\n *\n * ###### Clobbering\n *\n * Footnotes introduces a problem,\n * as it links footnote calls to footnote definitions on the page through `id`\n * 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’t in `handlers` or `passThrough`.\n * The default behavior for unknown nodes is:\n *\n * * when the node has a `value`\n * (and doesn’t have `data.hName`, `data.hProperties`, or `data.hChildren`,\n * see later),\n * create a hast `text` node\n * * otherwise,\n * create a `<div>` element (which could be changed with `data.hName`),\n * with its children mapped from mdast to hast as well\n *\n * This behavior can be changed by passing an `unknownHandler`.\n *\n * @overload\n * @param {Processor} processor\n * @param {Readonly<Options> | null | undefined} [options]\n * @returns {TransformBridge}\n *\n * @overload\n * @param {Readonly<Options> | null | undefined} [options]\n * @returns {TransformMutate}\n *\n * @overload\n * @param {Readonly<Options> | Processor | null | undefined} [destination]\n * @param {Readonly<Options> | null | undefined} [options]\n * @returns {TransformBridge | TransformMutate}\n *\n * @param {Readonly<Options> | Processor | null | undefined} [destination]\n * Processor or configuration (optional).\n * @param {Readonly<Options> | null | undefined} [options]\n * When a processor was given,\n * configuration (optional).\n * @returns {TransformBridge | TransformMutate}\n * Transform.\n */\nexport default function remarkRehype(destination, options) {\n if (destination && 'run' in destination) {\n /**\n * @type {TransformBridge}\n */\n return async function (tree, file) {\n // Cast because root in -> root out.\n const hastTree = /** @type {HastRoot} */ (\n toHast(tree, {file, ...options})\n )\n await destination.run(hastTree, file)\n }\n }\n\n /**\n * @type {TransformMutate}\n */\n return function (tree, file) {\n // Cast because root in -> root out.\n // To do: in the future, disallow ` || options` fallback.\n // With `unified-engine`, `destination` can be `undefined` but\n // `options` will be the file set.\n // We should not pass that as `options`.\n return /** @type {HastRoot} */ (\n toHast(tree, {file, ...(destination || options)})\n )\n }\n}\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","'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","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 * > 👉 **Note**: as the length of input defines whether async functions get a\n * > `next` function,\n * > it’s 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’re 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","// 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’s 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 minpath = {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 | null | undefined} [extname]\n * Extension to strip.\n * @returns {string}\n * Stem or basename.\n */\nfunction basename(path, extname) {\n if (extname !== undefined && typeof extname !== '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 (\n extname === undefined ||\n extname.length === 0 ||\n extname.length > path.length\n ) {\n while (index--) {\n if (path.codePointAt(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 (extname === path) {\n return ''\n }\n\n let firstNonSlashEnd = -1\n let extnameIndex = extname.length - 1\n\n while (index--) {\n if (path.codePointAt(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 (extnameIndex > -1) {\n // Try to match the explicit extension.\n if (path.codePointAt(index) === extname.codePointAt(extnameIndex--)) {\n if (extnameIndex < 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 extnameIndex = -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.codePointAt(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.codePointAt(0) === 47 /* `/` */\n ? '/'\n : '.'\n : end === 1 && path.codePointAt(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.codePointAt(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.codePointAt(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.codePointAt(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.codePointAt(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.codePointAt(result.length - 1) !== 46 /* `.` */ ||\n result.codePointAt(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’t think one tiny line of code can be copyrighted. 😅\nexport const minproc = {cwd}\n\nfunction cwd() {\n return '/'\n}\n","/**\n * Checks if a value has the shape of a WHATWG URL object.\n *\n * Using a symbol or instanceof would not be able to recognize URL objects\n * coming from other implementations (e.g. in Electron), so instead we are\n * checking some well known properties for a lack of a better test.\n *\n * We use `href` and `protocol` as they are the only properties that are\n * easy to retrieve and calculate due to the lazy nature of the getters.\n *\n * We check for auth attribute to distinguish legacy url instance with\n * WHATWG URL instance.\n *\n * @param {unknown} fileUrlOrPath\n * File path or URL.\n * @returns {fileUrlOrPath is URL}\n * Whether it’s a URL.\n */\n// From: <https://github.com/nodejs/node/blob/6a3403c/lib/internal/url.js#L720>\nexport function isUrl(fileUrlOrPath) {\n return Boolean(\n fileUrlOrPath !== null &&\n typeof fileUrlOrPath === 'object' &&\n 'href' in fileUrlOrPath &&\n fileUrlOrPath.href &&\n 'protocol' in fileUrlOrPath &&\n fileUrlOrPath.protocol &&\n // @ts-expect-error: indexing is fine.\n fileUrlOrPath.auth === undefined\n )\n}\n","import {isUrl} from './minurl.shared.js'\n\nexport {isUrl} from './minurl.shared.js'\n\n// See: <https://github.com/nodejs/node/blob/6a3403c/lib/internal/url.js>\n\n/**\n * @param {URL | string} 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.codePointAt(index) === 37 /* `%` */ &&\n pathname.codePointAt(index + 1) === 50 /* `2` */\n ) {\n const third = pathname.codePointAt(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","/**\n * @import {Node, Point, Position} from 'unist'\n * @import {Options as MessageOptions} from 'vfile-message'\n * @import {Compatible, Data, Map, Options, Value} from 'vfile'\n */\n\n/**\n * @typedef {object & {type: string, position?: Position | undefined}} NodeLike\n */\n\nimport {VFileMessage} from 'vfile-message'\nimport {minpath} from '#minpath'\nimport {minproc} from '#minproc'\nimport {urlToPath, isUrl} from '#minurl'\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 */\nconst order = /** @type {const} */ ([\n 'history',\n 'path',\n 'basename',\n 'stem',\n 'extname',\n 'dirname'\n])\n\nexport class VFile {\n /**\n * Create a new virtual file.\n *\n * `options` is treated as:\n *\n * * `string` or `Uint8Array` — `{value: options}`\n * * `URL` — `{path: options}`\n * * `VFile` — shallow copies its data over to the new file\n * * `object` — 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 (isUrl(value)) {\n options = {path: value}\n } else if (typeof value === 'string' || isUint8Array(value)) {\n options = {value}\n } else {\n options = value\n }\n\n /* eslint-disable no-unused-expressions */\n\n /**\n * Base of `path` (default: `process.cwd()` or `'/'` in browsers).\n *\n * @type {string}\n */\n // Prevent calling `cwd` (which could be expensive) if it’s not needed;\n // the empty string will be overridden in the next block.\n this.cwd = 'cwd' in options ? '' : minproc.cwd()\n\n /**\n * Place to store custom info (default: `{}`).\n *\n * It’s 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 file paths 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 * List of messages associated with the file.\n *\n * @type {Array<VFileMessage>}\n */\n this.messages = []\n\n /**\n * Raw value.\n *\n * @type {Value}\n */\n this.value\n\n // The below are non-standard, they are “well-known”.\n // As in, used in several tools.\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\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 * Whether a file was saved to disk.\n *\n * This is used by vfile reporters.\n *\n * @type {boolean}\n */\n this.stored\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 field = order[index]\n\n // Note: we specifically use `in` instead of `hasOwnProperty` to accept\n // `vfile`s too.\n if (\n field in options &&\n options[field] !== undefined &&\n options[field] !== null\n ) {\n // @ts-expect-error: TS doesn’t understand basic reality.\n this[field] = field === 'history' ? [...options[field]] : options[field]\n }\n }\n\n /** @type {string} */\n let field\n\n // Set non-path related properties.\n for (field in options) {\n // @ts-expect-error: fine to set other things.\n if (!order.includes(field)) {\n // @ts-expect-error: fine to set other things.\n this[field] = options[field]\n }\n }\n }\n\n /**\n * Get the basename (including extname) (example: `'index.min.js'`).\n *\n * @returns {string | undefined}\n * Basename.\n */\n get basename() {\n return typeof this.path === 'string'\n ? minpath.basename(this.path)\n : 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 * @param {string} basename\n * Basename.\n * @returns {undefined}\n * Nothing.\n */\n set basename(basename) {\n assertNonEmpty(basename, 'basename')\n assertPart(basename, 'basename')\n this.path = minpath.join(this.dirname || '', basename)\n }\n\n /**\n * Get the parent path (example: `'~'`).\n *\n * @returns {string | undefined}\n * Dirname.\n */\n get dirname() {\n return typeof this.path === 'string'\n ? minpath.dirname(this.path)\n : undefined\n }\n\n /**\n * Set the parent path (example: `'~'`).\n *\n * Cannot be set if there’s no `path` yet.\n *\n * @param {string | undefined} dirname\n * Dirname.\n * @returns {undefined}\n * Nothing.\n */\n set dirname(dirname) {\n assertPath(this.basename, 'dirname')\n this.path = minpath.join(dirname || '', this.basename)\n }\n\n /**\n * Get the extname (including dot) (example: `'.js'`).\n *\n * @returns {string | undefined}\n * Extname.\n */\n get extname() {\n return typeof this.path === 'string'\n ? minpath.extname(this.path)\n : 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’s no `path` yet.\n *\n * @param {string | undefined} extname\n * Extname.\n * @returns {undefined}\n * Nothing.\n */\n set extname(extname) {\n assertPart(extname, 'extname')\n assertPath(this.dirname, 'extname')\n\n if (extname) {\n if (extname.codePointAt(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 = minpath.join(this.dirname, this.stem + (extname || ''))\n }\n\n /**\n * Get the full path (example: `'~/index.min.js'`).\n *\n * @returns {string}\n * Path.\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 {URL | string} path\n * Path.\n * @returns {undefined}\n * Nothing.\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 stem (basename w/o extname) (example: `'index.min'`).\n *\n * @returns {string | undefined}\n * Stem.\n */\n get stem() {\n return typeof this.path === 'string'\n ? minpath.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 * @param {string} stem\n * Stem.\n * @returns {undefined}\n * Nothing.\n */\n set stem(stem) {\n assertNonEmpty(stem, 'stem')\n assertPart(stem, 'stem')\n this.path = minpath.join(this.dirname || '', stem + (this.extname || ''))\n }\n\n // Normal prototypal methods.\n /**\n * Create a fatal message for `reason` associated with the file.\n *\n * The `fatal` field of the message is set to `true` (error; file not usable)\n * and the `file` field is set to the current file path.\n * The message is added to the `messages` field on `file`.\n *\n * > 🪦 **Note**: also has obsolete signatures.\n *\n * @overload\n * @param {string} reason\n * @param {MessageOptions | null | undefined} [options]\n * @returns {never}\n *\n * @overload\n * @param {string} reason\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns {never}\n *\n * @overload\n * @param {string} reason\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns {never}\n *\n * @overload\n * @param {string} reason\n * @param {string | null | undefined} [origin]\n * @returns {never}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns {never}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns {never}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {string | null | undefined} [origin]\n * @returns {never}\n *\n * @param {Error | VFileMessage | string} causeOrReason\n * Reason for message, should use markdown.\n * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n * Configuration (optional).\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 * Never.\n * @throws {VFileMessage}\n * Message.\n */\n fail(causeOrReason, optionsOrParentOrPlace, origin) {\n // @ts-expect-error: the overloads are fine.\n const message = this.message(causeOrReason, optionsOrParentOrPlace, origin)\n\n message.fatal = true\n\n throw message\n }\n\n /**\n * Create an info message for `reason` associated with the file.\n *\n * The `fatal` field of the message is set to `undefined` (info; change\n * likely not needed) and the `file` field is set to the current file path.\n * The message is added to the `messages` field on `file`.\n *\n * > 🪦 **Note**: also has obsolete signatures.\n *\n * @overload\n * @param {string} reason\n * @param {MessageOptions | null | undefined} [options]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {string} reason\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {string} reason\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {string} reason\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @param {Error | VFileMessage | string} causeOrReason\n * Reason for message, should use markdown.\n * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n * Configuration (optional).\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(causeOrReason, optionsOrParentOrPlace, origin) {\n // @ts-expect-error: the overloads are fine.\n const message = this.message(causeOrReason, optionsOrParentOrPlace, origin)\n\n message.fatal = undefined\n\n return message\n }\n\n /**\n * Create a message for `reason` associated with the file.\n *\n * The `fatal` field of the message is set to `false` (warning; change may be\n * needed) and the `file` field is set to the current file path.\n * The message is added to the `messages` field on `file`.\n *\n * > 🪦 **Note**: also has obsolete signatures.\n *\n * @overload\n * @param {string} reason\n * @param {MessageOptions | null | undefined} [options]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {string} reason\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {string} reason\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {string} reason\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @param {Error | VFileMessage | string} causeOrReason\n * Reason for message, should use markdown.\n * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n * Configuration (optional).\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(causeOrReason, optionsOrParentOrPlace, origin) {\n const message = new VFileMessage(\n // @ts-expect-error: the overloads are fine.\n causeOrReason,\n optionsOrParentOrPlace,\n origin\n )\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 * Serialize the file.\n *\n * > **Note**: which encodings are supported depends on the engine.\n * > For info on Node.js, see:\n * > <https://nodejs.org/api/util.html#whatwg-supported-encodings>.\n *\n * @param {string | null | undefined} [encoding='utf8']\n * Character encoding to understand `value` as when it’s a `Uint8Array`\n * (default: `'utf-8'`).\n * @returns {string}\n * Serialized file.\n */\n toString(encoding) {\n if (this.value === undefined) {\n return ''\n }\n\n if (typeof this.value === 'string') {\n return this.value\n }\n\n const decoder = new TextDecoder(encoding || undefined)\n return decoder.decode(this.value)\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 {undefined}\n * Nothing.\n */\nfunction assertPart(part, name) {\n if (part && part.includes(minpath.sep)) {\n throw new Error(\n '`' + name + '` cannot be a path: did not expect `' + minpath.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 an `Uint8Array`.\n *\n * @param {unknown} value\n * thing.\n * @returns {value is Uint8Array}\n * Whether `value` is an `Uint8Array`.\n */\nfunction isUint8Array(value) {\n return Boolean(\n value &&\n typeof value === 'object' &&\n 'byteLength' in value &&\n 'byteOffset' in value\n )\n}\n","export const CallableInstance =\n /**\n * @type {new <Parameters extends Array<unknown>, Result>(property: string | symbol) => (...parameters: Parameters) => Result}\n */\n (\n /** @type {unknown} */\n (\n /**\n * @this {Function}\n * @param {string | symbol} property\n * @returns {(...parameters: Array<unknown>) => unknown}\n */\n function (property) {\n const self = this\n const constr = self.constructor\n const proto = /** @type {Record<string | symbol, Function>} */ (\n // Prototypes do exist.\n // type-coverage:ignore-next-line\n constr.prototype\n )\n const value = proto[property]\n /** @type {(...parameters: Array<unknown>) => unknown} */\n const apply = function () {\n return value.apply(apply, arguments)\n }\n\n Object.setPrototypeOf(apply, proto)\n\n // Not needed for us in `unified`: we only call this on the `copy`\n // function,\n // and we don't need to add its fields (`length`, `name`)\n // over.\n // See also: GH-246.\n // const names = Object.getOwnPropertyNames(value)\n //\n // for (const p of names) {\n // const descriptor = Object.getOwnPropertyDescriptor(value, p)\n // if (descriptor) Object.defineProperty(apply, p, descriptor)\n // }\n\n return apply\n }\n )\n )\n","/**\n * @typedef {import('trough').Pipeline} Pipeline\n *\n * @typedef {import('unist').Node} Node\n *\n * @typedef {import('vfile').Compatible} Compatible\n * @typedef {import('vfile').Value} Value\n *\n * @typedef {import('../index.js').CompileResultMap} CompileResultMap\n * @typedef {import('../index.js').Data} Data\n * @typedef {import('../index.js').Settings} Settings\n */\n\n/**\n * @typedef {CompileResultMap[keyof CompileResultMap]} CompileResults\n * Acceptable results from compilers.\n *\n * To register custom results, add them to\n * {@linkcode CompileResultMap}.\n */\n\n/**\n * @template {Node} [Tree=Node]\n * The node that the compiler receives (default: `Node`).\n * @template {CompileResults} [Result=CompileResults]\n * The thing that the compiler yields (default: `CompileResults`).\n * @callback Compiler\n * A **compiler** handles the compiling of a syntax tree to something else\n * (in most cases, text) (TypeScript type).\n *\n * It is used in the stringify phase and called with a {@linkcode Node}\n * and {@linkcode VFile} representation of the document to compile.\n * It should return the textual representation of the given tree (typically\n * `string`).\n *\n * > **Note**: unified typically compiles by serializing: most compilers\n * > return `string` (or `Uint8Array`).\n * > Some compilers, such as the one configured with\n * > [`rehype-react`][rehype-react], return other values (in this case, a\n * > React tree).\n * > If you’re using a compiler that doesn’t serialize, expect different\n * > result values.\n * >\n * > To register custom results in TypeScript, add them to\n * > {@linkcode CompileResultMap}.\n *\n * [rehype-react]: https://github.com/rehypejs/rehype-react\n * @param {Tree} tree\n * Tree to compile.\n * @param {VFile} file\n * File associated with `tree`.\n * @returns {Result}\n * New content: compiled text (`string` or `Uint8Array`, for `file.value`) or\n * something else (for `file.result`).\n */\n\n/**\n * @template {Node} [Tree=Node]\n * The node that the parser yields (default: `Node`)\n * @callback Parser\n * A **parser** handles the parsing of text to a syntax tree.\n *\n * It is used in the parse phase and is called with a `string` and\n * {@linkcode VFile} of the document to parse.\n * It must return the syntax tree representation of the given file\n * ({@linkcode Node}).\n * @param {string} document\n * Document to parse.\n * @param {VFile} file\n * File associated with `document`.\n * @returns {Tree}\n * Node representing the given file.\n */\n\n/**\n * @typedef {(\n * Plugin<Array<any>, any, any> |\n * PluginTuple<Array<any>, any, any> |\n * Preset\n * )} Pluggable\n * Union of the different ways to add plugins and settings.\n */\n\n/**\n * @typedef {Array<Pluggable>} PluggableList\n * List of plugins and presets.\n */\n\n// Note: we can’t use `callback` yet as it messes up `this`:\n// <https://github.com/microsoft/TypeScript/issues/55197>.\n/**\n * @template {Array<unknown>} [PluginParameters=[]]\n * Arguments passed to the plugin (default: `[]`, the empty tuple).\n * @template {Node | string | undefined} [Input=Node]\n * Value that is expected as input (default: `Node`).\n *\n * * If the plugin returns a {@linkcode Transformer}, this\n * should be the node it expects.\n * * If the plugin sets a {@linkcode Parser}, this should be\n * `string`.\n * * If the plugin sets a {@linkcode Compiler}, this should be the\n * node it expects.\n * @template [Output=Input]\n * Value that is yielded as output (default: `Input`).\n *\n * * If the plugin returns a {@linkcode Transformer}, this\n * should be the node that that yields.\n * * If the plugin sets a {@linkcode Parser}, this should be the\n * node that it yields.\n * * If the plugin sets a {@linkcode Compiler}, this should be\n * result it yields.\n * @typedef {(\n * (this: Processor, ...parameters: PluginParameters) =>\n * Input extends string ? // Parser.\n * Output extends Node | undefined ? undefined | void : never :\n * Output extends CompileResults ? // Compiler.\n * Input extends Node | undefined ? undefined | void : never :\n * Transformer<\n * Input extends Node ? Input : Node,\n * Output extends Node ? Output : Node\n * > | undefined | void\n * )} Plugin\n * Single plugin.\n *\n * Plugins configure the processors they are applied on in the following\n * ways:\n *\n * * they change the processor, such as the parser, the compiler, or by\n * configuring data\n * * they specify how to handle trees and files\n *\n * In practice, they are functions that can receive options and configure the\n * processor (`this`).\n *\n * > **Note**: plugins are called when the processor is *frozen*, not when\n * > they are applied.\n */\n\n/**\n * Tuple of a plugin and its configuration.\n *\n * The first item is a plugin, the rest are its parameters.\n *\n * @template {Array<unknown>} [TupleParameters=[]]\n * Arguments passed to the plugin (default: `[]`, the empty tuple).\n * @template {Node | string | undefined} [Input=undefined]\n * Value that is expected as input (optional).\n *\n * * If the plugin returns a {@linkcode Transformer}, this\n * should be the node it expects.\n * * If the plugin sets a {@linkcode Parser}, this should be\n * `string`.\n * * If the plugin sets a {@linkcode Compiler}, this should be the\n * node it expects.\n * @template [Output=undefined] (optional).\n * Value that is yielded as output.\n *\n * * If the plugin returns a {@linkcode Transformer}, this\n * should be the node that that yields.\n * * If the plugin sets a {@linkcode Parser}, this should be the\n * node that it yields.\n * * If the plugin sets a {@linkcode Compiler}, this should be\n * result it yields.\n * @typedef {(\n * [\n * plugin: Plugin<TupleParameters, Input, Output>,\n * ...parameters: TupleParameters\n * ]\n * )} PluginTuple\n */\n\n/**\n * @typedef Preset\n * Sharable configuration.\n *\n * They can contain plugins and settings.\n * @property {PluggableList | undefined} [plugins]\n * List of plugins and presets (optional).\n * @property {Settings | undefined} [settings]\n * Shared settings for parsers and compilers (optional).\n */\n\n/**\n * @template {VFile} [File=VFile]\n * The file that the callback receives (default: `VFile`).\n * @callback ProcessCallback\n * Callback called when the process is done.\n *\n * Called with either an error or a result.\n * @param {Error | undefined} [error]\n * Fatal error (optional).\n * @param {File | undefined} [file]\n * Processed file (optional).\n * @returns {undefined}\n * Nothing.\n */\n\n/**\n * @template {Node} [Tree=Node]\n * The tree that the callback receives (default: `Node`).\n * @callback RunCallback\n * Callback called when transformers are done.\n *\n * Called with either an error or results.\n * @param {Error | undefined} [error]\n * Fatal error (optional).\n * @param {Tree | undefined} [tree]\n * Transformed tree (optional).\n * @param {VFile | undefined} [file]\n * File (optional).\n * @returns {undefined}\n * Nothing.\n */\n\n/**\n * @template {Node} [Output=Node]\n * Node type that the transformer yields (default: `Node`).\n * @callback TransformCallback\n * Callback passed to transforms.\n *\n * If the signature of a `transformer` accepts a third argument, the\n * transformer may perform asynchronous operations, and must call it.\n * @param {Error | undefined} [error]\n * Fatal error to stop the process (optional).\n * @param {Output | undefined} [tree]\n * New, changed, tree (optional).\n * @param {VFile | undefined} [file]\n * New, changed, file (optional).\n * @returns {undefined}\n * Nothing.\n */\n\n/**\n * @template {Node} [Input=Node]\n * Node type that the transformer expects (default: `Node`).\n * @template {Node} [Output=Input]\n * Node type that the transformer yields (default: `Input`).\n * @callback Transformer\n * Transformers handle syntax trees and files.\n *\n * They are functions that are called each time a syntax tree and file are\n * passed through the run phase.\n * When an error occurs in them (either because it’s thrown, returned,\n * rejected, or passed to `next`), the process stops.\n *\n * The run phase is handled by [`trough`][trough], see its documentation for\n * the exact semantics of these functions.\n *\n * > **Note**: you should likely ignore `next`: don’t accept it.\n * > it supports callback-style async work.\n * > But promises are likely easier to reason about.\n *\n * [trough]: https://github.com/wooorm/trough#function-fninput-next\n * @param {Input} tree\n * Tree to handle.\n * @param {VFile} file\n * File to handle.\n * @param {TransformCallback<Output>} next\n * Callback.\n * @returns {(\n * Promise<Output | undefined | void> |\n * Promise<never> | // For some reason this is needed separately.\n * Output |\n * Error |\n * undefined |\n * void\n * )}\n * If you accept `next`, nothing.\n * Otherwise:\n *\n * * `Error` — fatal error to stop the process\n * * `Promise<undefined>` or `undefined` — the next transformer keeps using\n * same tree\n * * `Promise<Node>` or `Node` — new, changed, tree\n */\n\n/**\n * @template {Node | undefined} ParseTree\n * Output of `parse`.\n * @template {Node | undefined} HeadTree\n * Input for `run`.\n * @template {Node | undefined} TailTree\n * Output for `run`.\n * @template {Node | undefined} CompileTree\n * Input of `stringify`.\n * @template {CompileResults | undefined} CompileResult\n * Output of `stringify`.\n * @template {Node | string | undefined} Input\n * Input of plugin.\n * @template Output\n * Output of plugin (optional).\n * @typedef {(\n * Input extends string\n * ? Output extends Node | undefined\n * ? // Parser.\n * Processor<\n * Output extends undefined ? ParseTree : Output,\n * HeadTree,\n * TailTree,\n * CompileTree,\n * CompileResult\n * >\n * : // Unknown.\n * Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>\n * : Output extends CompileResults\n * ? Input extends Node | undefined\n * ? // Compiler.\n * Processor<\n * ParseTree,\n * HeadTree,\n * TailTree,\n * Input extends undefined ? CompileTree : Input,\n * Output extends undefined ? CompileResult : Output\n * >\n * : // Unknown.\n * Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>\n * : Input extends Node | undefined\n * ? Output extends Node | undefined\n * ? // Transform.\n * Processor<\n * ParseTree,\n * HeadTree extends undefined ? Input : HeadTree,\n * Output extends undefined ? TailTree : Output,\n * CompileTree,\n * CompileResult\n * >\n * : // Unknown.\n * Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>\n * : // Unknown.\n * Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>\n * )} UsePlugin\n * Create a processor based on the input/output of a {@link Plugin plugin}.\n */\n\n/**\n * @template {CompileResults | undefined} Result\n * Node type that the transformer yields.\n * @typedef {(\n * Result extends Value | undefined ?\n * VFile :\n * VFile & {result: Result}\n * )} VFileWithOutput\n * Type to generate a {@linkcode VFile} corresponding to a compiler result.\n *\n * If a result that is not acceptable on a `VFile` is used, that will\n * be stored on the `result` field of {@linkcode VFile}.\n */\n\nimport {bail} from 'bail'\nimport extend from 'extend'\nimport {ok as assert} from 'devlop'\nimport isPlainObj from 'is-plain-obj'\nimport {trough} from 'trough'\nimport {VFile} from 'vfile'\nimport {CallableInstance} from './callable-instance.js'\n\n// To do: next major: drop `Compiler`, `Parser`: prefer lowercase.\n\n// To do: we could start yielding `never` in TS when a parser is missing and\n// `parse` is called.\n// Currently, we allow directly setting `processor.parser`, which is untyped.\n\nconst own = {}.hasOwnProperty\n\n/**\n * @template {Node | undefined} [ParseTree=undefined]\n * Output of `parse` (optional).\n * @template {Node | undefined} [HeadTree=undefined]\n * Input for `run` (optional).\n * @template {Node | undefined} [TailTree=undefined]\n * Output for `run` (optional).\n * @template {Node | undefined} [CompileTree=undefined]\n * Input of `stringify` (optional).\n * @template {CompileResults | undefined} [CompileResult=undefined]\n * Output of `stringify` (optional).\n * @extends {CallableInstance<[], Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>>}\n */\nexport class Processor extends CallableInstance {\n /**\n * Create a processor.\n */\n constructor() {\n // If `Processor()` is called (w/o new), `copy` is called instead.\n super('copy')\n\n /**\n * Compiler to use (deprecated).\n *\n * @deprecated\n * Use `compiler` instead.\n * @type {(\n * Compiler<\n * CompileTree extends undefined ? Node : CompileTree,\n * CompileResult extends undefined ? CompileResults : CompileResult\n * > |\n * undefined\n * )}\n */\n this.Compiler = undefined\n\n /**\n * Parser to use (deprecated).\n *\n * @deprecated\n * Use `parser` instead.\n * @type {(\n * Parser<ParseTree extends undefined ? Node : ParseTree> |\n * undefined\n * )}\n */\n this.Parser = undefined\n\n // Note: the following fields are considered private.\n // However, they are needed for tests, and TSC generates an untyped\n // `private freezeIndex` field for, which trips `type-coverage` up.\n // Instead, we use `@deprecated` to visualize that they shouldn’t be used.\n /**\n * Internal list of configured plugins.\n *\n * @deprecated\n * This is a private internal property and should not be used.\n * @type {Array<PluginTuple<Array<unknown>>>}\n */\n this.attachers = []\n\n /**\n * Compiler to use.\n *\n * @type {(\n * Compiler<\n * CompileTree extends undefined ? Node : CompileTree,\n * CompileResult extends undefined ? CompileResults : CompileResult\n * > |\n * undefined\n * )}\n */\n this.compiler = undefined\n\n /**\n * Internal state to track where we are while freezing.\n *\n * @deprecated\n * This is a private internal property and should not be used.\n * @type {number}\n */\n this.freezeIndex = -1\n\n /**\n * Internal state to track whether we’re frozen.\n *\n * @deprecated\n * This is a private internal property and should not be used.\n * @type {boolean | undefined}\n */\n this.frozen = undefined\n\n /**\n * Internal state.\n *\n * @deprecated\n * This is a private internal property and should not be used.\n * @type {Data}\n */\n this.namespace = {}\n\n /**\n * Parser to use.\n *\n * @type {(\n * Parser<ParseTree extends undefined ? Node : ParseTree> |\n * undefined\n * )}\n */\n this.parser = undefined\n\n /**\n * Internal list of configured transformers.\n *\n * @deprecated\n * This is a private internal property and should not be used.\n * @type {Pipeline}\n */\n this.transformers = trough()\n }\n\n /**\n * Copy a processor.\n *\n * @deprecated\n * This is a private internal method and should not be used.\n * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n * New *unfrozen* processor ({@linkcode Processor}) that is\n * configured to work the same as its ancestor.\n * When the descendant processor is configured in the future it does not\n * affect the ancestral processor.\n */\n copy() {\n // Cast as the type parameters will be the same after attaching.\n const destination =\n /** @type {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>} */ (\n new Processor()\n )\n let index = -1\n\n while (++index < this.attachers.length) {\n const attacher = this.attachers[index]\n destination.use(...attacher)\n }\n\n destination.data(extend(true, {}, this.namespace))\n\n return destination\n }\n\n /**\n * Configure the processor with info available to all plugins.\n * Information is stored in an object.\n *\n * Typically, options can be given to a specific plugin, but sometimes it\n * makes sense to have information shared with several plugins.\n * For example, a list of HTML elements that are self-closing, which is\n * needed during all phases.\n *\n * > **Note**: setting information cannot occur on *frozen* processors.\n * > Call the processor first to create a new unfrozen processor.\n *\n * > **Note**: to register custom data in TypeScript, augment the\n * > {@linkcode Data} interface.\n *\n * @example\n * This example show how to get and set info:\n *\n * ```js\n * import {unified} from 'unified'\n *\n * const processor = unified().data('alpha', 'bravo')\n *\n * processor.data('alpha') // => 'bravo'\n *\n * processor.data() // => {alpha: 'bravo'}\n *\n * processor.data({charlie: 'delta'})\n *\n * processor.data() // => {charlie: 'delta'}\n * ```\n *\n * @template {keyof Data} Key\n *\n * @overload\n * @returns {Data}\n *\n * @overload\n * @param {Data} dataset\n * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n *\n * @overload\n * @param {Key} key\n * @returns {Data[Key]}\n *\n * @overload\n * @param {Key} key\n * @param {Data[Key]} value\n * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n *\n * @param {Data | Key} [key]\n * Key to get or set, or entire dataset to set, or nothing to get the\n * entire dataset (optional).\n * @param {Data[Key]} [value]\n * Value to set (optional).\n * @returns {unknown}\n * The current processor when setting, the value at `key` when getting, or\n * the entire dataset when getting without key.\n */\n data(key, value) {\n if (typeof key === 'string') {\n // Set `key`.\n if (arguments.length === 2) {\n assertUnfrozen('data', this.frozen)\n this.namespace[key] = value\n return this\n }\n\n // Get `key`.\n return (own.call(this.namespace, key) && this.namespace[key]) || undefined\n }\n\n // Set space.\n if (key) {\n assertUnfrozen('data', this.frozen)\n this.namespace = key\n return this\n }\n\n // Get space.\n return this.namespace\n }\n\n /**\n * Freeze a processor.\n *\n * Frozen processors are meant to be extended and not to be configured\n * directly.\n *\n * When a processor is frozen it cannot be unfrozen.\n * New processors working the same way can be created by calling the\n * processor.\n *\n * It’s possible to freeze processors explicitly by calling `.freeze()`.\n * Processors freeze automatically when `.parse()`, `.run()`, `.runSync()`,\n * `.stringify()`, `.process()`, or `.processSync()` are called.\n *\n * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n * The current processor.\n */\n freeze() {\n if (this.frozen) {\n return this\n }\n\n // Cast so that we can type plugins easier.\n // Plugins are supposed to be usable on different processors, not just on\n // this exact processor.\n const self = /** @type {Processor} */ (/** @type {unknown} */ (this))\n\n while (++this.freezeIndex < this.attachers.length) {\n const [attacher, ...options] = this.attachers[this.freezeIndex]\n\n if (options[0] === false) {\n continue\n }\n\n if (options[0] === true) {\n options[0] = undefined\n }\n\n const transformer = attacher.call(self, ...options)\n\n if (typeof transformer === 'function') {\n this.transformers.use(transformer)\n }\n }\n\n this.frozen = true\n this.freezeIndex = Number.POSITIVE_INFINITY\n\n return this\n }\n\n /**\n * Parse text to a syntax tree.\n *\n * > **Note**: `parse` freezes the processor if not already *frozen*.\n *\n * > **Note**: `parse` performs the parse phase, not the run phase or other\n * > phases.\n *\n * @param {Compatible | undefined} [file]\n * file to parse (optional); typically `string` or `VFile`; any value\n * accepted as `x` in `new VFile(x)`.\n * @returns {ParseTree extends undefined ? Node : ParseTree}\n * Syntax tree representing `file`.\n */\n parse(file) {\n this.freeze()\n const realFile = vfile(file)\n const parser = this.parser || this.Parser\n assertParser('parse', parser)\n return parser(String(realFile), realFile)\n }\n\n /**\n * Process the given file as configured on the processor.\n *\n * > **Note**: `process` freezes the processor if not already *frozen*.\n *\n * > **Note**: `process` performs the parse, run, and stringify phases.\n *\n * @overload\n * @param {Compatible | undefined} file\n * @param {ProcessCallback<VFileWithOutput<CompileResult>>} done\n * @returns {undefined}\n *\n * @overload\n * @param {Compatible | undefined} [file]\n * @returns {Promise<VFileWithOutput<CompileResult>>}\n *\n * @param {Compatible | undefined} [file]\n * File (optional); typically `string` or `VFile`]; any value accepted as\n * `x` in `new VFile(x)`.\n * @param {ProcessCallback<VFileWithOutput<CompileResult>> | undefined} [done]\n * Callback (optional).\n * @returns {Promise<VFile> | undefined}\n * Nothing if `done` is given.\n * Otherwise a promise, rejected with a fatal error or resolved with the\n * processed file.\n *\n * The parsed, transformed, and compiled value is available at\n * `file.value` (see note).\n *\n * > **Note**: unified typically compiles by serializing: most\n * > compilers return `string` (or `Uint8Array`).\n * > Some compilers, such as the one configured with\n * > [`rehype-react`][rehype-react], return other values (in this case, a\n * > React tree).\n * > If you’re using a compiler that doesn’t serialize, expect different\n * > result values.\n * >\n * > To register custom results in TypeScript, add them to\n * > {@linkcode CompileResultMap}.\n *\n * [rehype-react]: https://github.com/rehypejs/rehype-react\n */\n process(file, done) {\n const self = this\n\n this.freeze()\n assertParser('process', this.parser || this.Parser)\n assertCompiler('process', this.compiler || this.Compiler)\n\n return done ? executor(undefined, done) : new Promise(executor)\n\n // Note: `void`s needed for TS.\n /**\n * @param {((file: VFileWithOutput<CompileResult>) => undefined | void) | undefined} resolve\n * @param {(error: Error | undefined) => undefined | void} reject\n * @returns {undefined}\n */\n function executor(resolve, reject) {\n const realFile = vfile(file)\n // Assume `ParseTree` (the result of the parser) matches `HeadTree` (the\n // input of the first transform).\n const parseTree =\n /** @type {HeadTree extends undefined ? Node : HeadTree} */ (\n /** @type {unknown} */ (self.parse(realFile))\n )\n\n self.run(parseTree, realFile, function (error, tree, file) {\n if (error || !tree || !file) {\n return realDone(error)\n }\n\n // Assume `TailTree` (the output of the last transform) matches\n // `CompileTree` (the input of the compiler).\n const compileTree =\n /** @type {CompileTree extends undefined ? Node : CompileTree} */ (\n /** @type {unknown} */ (tree)\n )\n\n const compileResult = self.stringify(compileTree, file)\n\n if (looksLikeAValue(compileResult)) {\n file.value = compileResult\n } else {\n file.result = compileResult\n }\n\n realDone(error, /** @type {VFileWithOutput<CompileResult>} */ (file))\n })\n\n /**\n * @param {Error | undefined} error\n * @param {VFileWithOutput<CompileResult> | undefined} [file]\n * @returns {undefined}\n */\n function realDone(error, file) {\n if (error || !file) {\n reject(error)\n } else if (resolve) {\n resolve(file)\n } else {\n assert(done, '`done` is defined if `resolve` is not')\n done(undefined, file)\n }\n }\n }\n }\n\n /**\n * Process the given file as configured on the processor.\n *\n * An error is thrown if asynchronous transforms are configured.\n *\n * > **Note**: `processSync` freezes the processor if not already *frozen*.\n *\n * > **Note**: `processSync` performs the parse, run, and stringify phases.\n *\n * @param {Compatible | undefined} [file]\n * File (optional); typically `string` or `VFile`; any value accepted as\n * `x` in `new VFile(x)`.\n * @returns {VFileWithOutput<CompileResult>}\n * The processed file.\n *\n * The parsed, transformed, and compiled value is available at\n * `file.value` (see note).\n *\n * > **Note**: unified typically compiles by serializing: most\n * > compilers return `string` (or `Uint8Array`).\n * > Some compilers, such as the one configured with\n * > [`rehype-react`][rehype-react], return other values (in this case, a\n * > React tree).\n * > If you’re using a compiler that doesn’t serialize, expect different\n * > result values.\n * >\n * > To register custom results in TypeScript, add them to\n * > {@linkcode CompileResultMap}.\n *\n * [rehype-react]: https://github.com/rehypejs/rehype-react\n */\n processSync(file) {\n /** @type {boolean} */\n let complete = false\n /** @type {VFileWithOutput<CompileResult> | undefined} */\n let result\n\n this.freeze()\n assertParser('processSync', this.parser || this.Parser)\n assertCompiler('processSync', this.compiler || this.Compiler)\n\n this.process(file, realDone)\n assertDone('processSync', 'process', complete)\n assert(result, 'we either bailed on an error or have a tree')\n\n return result\n\n /**\n * @type {ProcessCallback<VFileWithOutput<CompileResult>>}\n */\n function realDone(error, file) {\n complete = true\n bail(error)\n result = file\n }\n }\n\n /**\n * Run *transformers* on a syntax tree.\n *\n * > **Note**: `run` freezes the processor if not already *frozen*.\n *\n * > **Note**: `run` performs the run phase, not other phases.\n *\n * @overload\n * @param {HeadTree extends undefined ? Node : HeadTree} tree\n * @param {RunCallback<TailTree extends undefined ? Node : TailTree>} done\n * @returns {undefined}\n *\n * @overload\n * @param {HeadTree extends undefined ? Node : HeadTree} tree\n * @param {Compatible | undefined} file\n * @param {RunCallback<TailTree extends undefined ? Node : TailTree>} done\n * @returns {undefined}\n *\n * @overload\n * @param {HeadTree extends undefined ? Node : HeadTree} tree\n * @param {Compatible | undefined} [file]\n * @returns {Promise<TailTree extends undefined ? Node : TailTree>}\n *\n * @param {HeadTree extends undefined ? Node : HeadTree} tree\n * Tree to transform and inspect.\n * @param {(\n * RunCallback<TailTree extends undefined ? Node : TailTree> |\n * Compatible\n * )} [file]\n * File associated with `node` (optional); any value accepted as `x` in\n * `new VFile(x)`.\n * @param {RunCallback<TailTree extends undefined ? Node : TailTree>} [done]\n * Callback (optional).\n * @returns {Promise<TailTree extends undefined ? Node : TailTree> | undefined}\n * Nothing if `done` is given.\n * Otherwise, a promise rejected with a fatal error or resolved with the\n * transformed tree.\n */\n run(tree, file, done) {\n assertNode(tree)\n this.freeze()\n\n const transformers = this.transformers\n\n if (!done && typeof file === 'function') {\n done = file\n file = undefined\n }\n\n return done ? executor(undefined, done) : new Promise(executor)\n\n // Note: `void`s needed for TS.\n /**\n * @param {(\n * ((tree: TailTree extends undefined ? Node : TailTree) => undefined | void) |\n * undefined\n * )} resolve\n * @param {(error: Error) => undefined | void} reject\n * @returns {undefined}\n */\n function executor(resolve, reject) {\n assert(\n typeof file !== 'function',\n '`file` can’t be a `done` anymore, we checked'\n )\n const realFile = vfile(file)\n transformers.run(tree, realFile, realDone)\n\n /**\n * @param {Error | undefined} error\n * @param {Node} outputTree\n * @param {VFile} file\n * @returns {undefined}\n */\n function realDone(error, outputTree, file) {\n const resultingTree =\n /** @type {TailTree extends undefined ? Node : TailTree} */ (\n outputTree || tree\n )\n\n if (error) {\n reject(error)\n } else if (resolve) {\n resolve(resultingTree)\n } else {\n assert(done, '`done` is defined if `resolve` is not')\n done(undefined, resultingTree, file)\n }\n }\n }\n }\n\n /**\n * Run *transformers* on a syntax tree.\n *\n * An error is thrown if asynchronous transforms are configured.\n *\n * > **Note**: `runSync` freezes the processor if not already *frozen*.\n *\n * > **Note**: `runSync` performs the run phase, not other phases.\n *\n * @param {HeadTree extends undefined ? Node : HeadTree} tree\n * Tree to transform and inspect.\n * @param {Compatible | undefined} [file]\n * File associated with `node` (optional); any value accepted as `x` in\n * `new VFile(x)`.\n * @returns {TailTree extends undefined ? Node : TailTree}\n * Transformed tree.\n */\n runSync(tree, file) {\n /** @type {boolean} */\n let complete = false\n /** @type {(TailTree extends undefined ? Node : TailTree) | undefined} */\n let result\n\n this.run(tree, file, realDone)\n\n assertDone('runSync', 'run', complete)\n assert(result, 'we either bailed on an error or have a tree')\n return result\n\n /**\n * @type {RunCallback<TailTree extends undefined ? Node : TailTree>}\n */\n function realDone(error, tree) {\n bail(error)\n result = tree\n complete = true\n }\n }\n\n /**\n * Compile a syntax tree.\n *\n * > **Note**: `stringify` freezes the processor if not already *frozen*.\n *\n * > **Note**: `stringify` performs the stringify phase, not the run phase\n * > or other phases.\n *\n * @param {CompileTree extends undefined ? Node : CompileTree} tree\n * Tree to compile.\n * @param {Compatible | undefined} [file]\n * File associated with `node` (optional); any value accepted as `x` in\n * `new VFile(x)`.\n * @returns {CompileResult extends undefined ? Value : CompileResult}\n * Textual representation of the tree (see note).\n *\n * > **Note**: unified typically compiles by serializing: most compilers\n * > return `string` (or `Uint8Array`).\n * > Some compilers, such as the one configured with\n * > [`rehype-react`][rehype-react], return other values (in this case, a\n * > React tree).\n * > If you’re using a compiler that doesn’t serialize, expect different\n * > result values.\n * >\n * > To register custom results in TypeScript, add them to\n * > {@linkcode CompileResultMap}.\n *\n * [rehype-react]: https://github.com/rehypejs/rehype-react\n */\n stringify(tree, file) {\n this.freeze()\n const realFile = vfile(file)\n const compiler = this.compiler || this.Compiler\n assertCompiler('stringify', compiler)\n assertNode(tree)\n\n return compiler(tree, realFile)\n }\n\n /**\n * Configure the processor to use a plugin, a list of usable values, or a\n * preset.\n *\n * If the processor is already using a plugin, the previous plugin\n * configuration is changed based on the options that are passed in.\n * In other words, the plugin is not added a second time.\n *\n * > **Note**: `use` cannot be called on *frozen* processors.\n * > Call the processor first to create a new unfrozen processor.\n *\n * @example\n * There are many ways to pass plugins to `.use()`.\n * This example gives an overview:\n *\n * ```js\n * import {unified} from 'unified'\n *\n * unified()\n * // Plugin with options:\n * .use(pluginA, {x: true, y: true})\n * // Passing the same plugin again merges configuration (to `{x: true, y: false, z: true}`):\n * .use(pluginA, {y: false, z: true})\n * // Plugins:\n * .use([pluginB, pluginC])\n * // Two plugins, the second with options:\n * .use([pluginD, [pluginE, {}]])\n * // Preset with plugins and settings:\n * .use({plugins: [pluginF, [pluginG, {}]], settings: {position: false}})\n * // Settings only:\n * .use({settings: {position: false}})\n * ```\n *\n * @template {Array<unknown>} [Parameters=[]]\n * @template {Node | string | undefined} [Input=undefined]\n * @template [Output=Input]\n *\n * @overload\n * @param {Preset | null | undefined} [preset]\n * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n *\n * @overload\n * @param {PluggableList} list\n * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n *\n * @overload\n * @param {Plugin<Parameters, Input, Output>} plugin\n * @param {...(Parameters | [boolean])} parameters\n * @returns {UsePlugin<ParseTree, HeadTree, TailTree, CompileTree, CompileResult, Input, Output>}\n *\n * @param {PluggableList | Plugin | Preset | null | undefined} value\n * Usable value.\n * @param {...unknown} parameters\n * Parameters, when a plugin is given as a usable value.\n * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n * Current processor.\n */\n use(value, ...parameters) {\n const attachers = this.attachers\n const namespace = this.namespace\n\n assertUnfrozen('use', this.frozen)\n\n if (value === null || value === undefined) {\n // Empty.\n } else if (typeof value === 'function') {\n addPlugin(value, parameters)\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 return this\n\n /**\n * @param {Pluggable} value\n * @returns {undefined}\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, ...parameters] =\n /** @type {PluginTuple<Array<unknown>>} */ (value)\n addPlugin(plugin, parameters)\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 {undefined}\n */\n function addPreset(result) {\n if (!('plugins' in result) && !('settings' in result)) {\n throw new Error(\n 'Expected usable value but received an empty preset, which is probably a mistake: presets typically come with `plugins` and sometimes with `settings`, but this has neither'\n )\n }\n\n addList(result.plugins)\n\n if (result.settings) {\n namespace.settings = extend(true, namespace.settings, result.settings)\n }\n }\n\n /**\n * @param {PluggableList | null | undefined} plugins\n * @returns {undefined}\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 {Array<unknown>} parameters\n * @returns {undefined}\n */\n function addPlugin(plugin, parameters) {\n let index = -1\n let entryIndex = -1\n\n while (++index < attachers.length) {\n if (attachers[index][0] === plugin) {\n entryIndex = index\n break\n }\n }\n\n if (entryIndex === -1) {\n attachers.push([plugin, ...parameters])\n }\n // Only set if there was at least a `primary` value, otherwise we’d change\n // `arguments.length`.\n else if (parameters.length > 0) {\n let [primary, ...rest] = parameters\n const currentPrimary = attachers[entryIndex][1]\n if (isPlainObj(currentPrimary) && isPlainObj(primary)) {\n primary = extend(true, currentPrimary, primary)\n }\n\n attachers[entryIndex] = [plugin, primary, ...rest]\n }\n }\n }\n}\n\n// Note: this returns a *callable* instance.\n// That’s why it’s documented as a function.\n/**\n * Create a new processor.\n *\n * @example\n * This example shows how a new processor can be created (from `remark`) and linked\n * to **stdin**(4) and **stdout**(4).\n *\n * ```js\n * import process from 'node:process'\n * import concatStream from 'concat-stream'\n * import {remark} from 'remark'\n *\n * process.stdin.pipe(\n * concatStream(function (buf) {\n * process.stdout.write(String(remark().processSync(buf)))\n * })\n * )\n * ```\n *\n * @returns\n * New *unfrozen* processor (`processor`).\n *\n * This processor is configured to work the same as its ancestor.\n * When the descendant processor is configured in the future it does not\n * affect the ancestral processor.\n */\nexport const unified = new Processor().freeze()\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 {Compatible | undefined} [value]\n * @returns {VFile}\n */\nfunction vfile(value) {\n return looksLikeAVFile(value) ? value : new VFile(value)\n}\n\n/**\n * @param {Compatible | undefined} [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 Value}\n */\nfunction looksLikeAValue(value) {\n return typeof value === 'string' || isUint8Array(value)\n}\n\n/**\n * Assert `value` is an `Uint8Array`.\n *\n * @param {unknown} value\n * thing.\n * @returns {value is Uint8Array}\n * Whether `value` is an `Uint8Array`.\n */\nfunction isUint8Array(value) {\n return Boolean(\n value &&\n typeof value === 'object' &&\n 'byteLength' in value &&\n 'byteOffset' in value\n )\n}\n","/**\n * @import {Element, Nodes, Parents, Root} from 'hast'\n * @import {Root as MdastRoot} from 'mdast'\n * @import {ComponentType, JSX, ReactElement, ReactNode} from 'react'\n * @import {Options as RemarkRehypeOptions} from 'remark-rehype'\n * @import {BuildVisitor} from 'unist-util-visit'\n * @import {PluggableList, Processor} from 'unified'\n */\n\n/**\n * @callback AllowElement\n * Filter elements.\n * @param {Readonly<Element>} element\n * Element to check.\n * @param {number} index\n * Index of `element` in `parent`.\n * @param {Readonly<Parents> | undefined} parent\n * Parent of `element`.\n * @returns {boolean | null | undefined}\n * Whether to allow `element` (default: `false`).\n */\n\n/**\n * @typedef ExtraProps\n * Extra fields we pass.\n * @property {Element | undefined} [node]\n * passed when `passNode` is on.\n */\n\n/**\n * @typedef {{\n * [Key in keyof JSX.IntrinsicElements]?: ComponentType<JSX.IntrinsicElements[Key] & ExtraProps> | keyof JSX.IntrinsicElements\n * }} Components\n * Map tag names to components.\n */\n\n/**\n * @typedef Deprecation\n * Deprecation.\n * @property {string} from\n * Old field.\n * @property {string} id\n * ID in readme.\n * @property {keyof Options} [to]\n * New field.\n */\n\n/**\n * @typedef Options\n * Configuration.\n * @property {AllowElement | null | undefined} [allowElement]\n * Filter elements (optional);\n * `allowedElements` / `disallowedElements` is used first.\n * @property {ReadonlyArray<string> | null | undefined} [allowedElements]\n * Tag names to allow (default: all tag names);\n * cannot combine w/ `disallowedElements`.\n * @property {string | null | undefined} [children]\n * Markdown.\n * @property {Components | null | undefined} [components]\n * Map tag names to components.\n * @property {ReadonlyArray<string> | null | undefined} [disallowedElements]\n * Tag names to disallow (default: `[]`);\n * cannot combine w/ `allowedElements`.\n * @property {PluggableList | null | undefined} [rehypePlugins]\n * List of rehype plugins to use.\n * @property {PluggableList | null | undefined} [remarkPlugins]\n * List of remark plugins to use.\n * @property {Readonly<RemarkRehypeOptions> | null | undefined} [remarkRehypeOptions]\n * Options to pass through to `remark-rehype`.\n * @property {boolean | null | undefined} [skipHtml=false]\n * Ignore HTML in markdown completely (default: `false`).\n * @property {boolean | null | undefined} [unwrapDisallowed=false]\n * Extract (unwrap) what’s in disallowed elements (default: `false`);\n * normally when say `strong` is not allowed, it and it’s children are dropped,\n * with `unwrapDisallowed` the element itself is replaced by its children.\n * @property {UrlTransform | null | undefined} [urlTransform]\n * Change URLs (default: `defaultUrlTransform`)\n */\n\n/**\n * @typedef HooksOptionsOnly\n * Configuration specifically for {@linkcode MarkdownHooks}.\n * @property {ReactNode | null | undefined} [fallback]\n * Content to render while the processor processing the markdown (optional).\n */\n\n/**\n * @typedef {Options & HooksOptionsOnly} HooksOptions\n * Configuration for {@linkcode MarkdownHooks};\n * extends the regular {@linkcode Options} with a `fallback` prop.\n */\n\n/**\n * @callback UrlTransform\n * Transform all URLs.\n * @param {string} url\n * URL.\n * @param {string} key\n * Property name (example: `'href'`).\n * @param {Readonly<Element>} node\n * Node.\n * @returns {string | null | undefined}\n * Transformed URL (optional).\n */\n\nimport {unreachable} from 'devlop'\nimport {toJsxRuntime} from 'hast-util-to-jsx-runtime'\nimport {urlAttributes} from 'html-url-attributes'\nimport {Fragment, jsx, jsxs} from 'react/jsx-runtime'\nimport {useEffect, useState} from 'react'\nimport remarkParse from 'remark-parse'\nimport remarkRehype from 'remark-rehype'\nimport {unified} from 'unified'\nimport {visit} from 'unist-util-visit'\nimport {VFile} from 'vfile'\n\nconst changelog =\n 'https://github.com/remarkjs/react-markdown/blob/main/changelog.md'\n\n/** @type {PluggableList} */\nconst emptyPlugins = []\n/** @type {Readonly<RemarkRehypeOptions>} */\nconst emptyRemarkRehypeOptions = {allowDangerousHtml: true}\nconst safeProtocol = /^(https?|ircs?|mailto|xmpp)$/i\n\n// Mutable because we `delete` any time it’s used and a message is sent.\n/** @type {ReadonlyArray<Readonly<Deprecation>>} */\nconst deprecations = [\n {from: 'astPlugins', id: 'remove-buggy-html-in-markdown-parser'},\n {from: 'allowDangerousHtml', id: 'remove-buggy-html-in-markdown-parser'},\n {\n from: 'allowNode',\n id: 'replace-allownode-allowedtypes-and-disallowedtypes',\n to: 'allowElement'\n },\n {\n from: 'allowedTypes',\n id: 'replace-allownode-allowedtypes-and-disallowedtypes',\n to: 'allowedElements'\n },\n {from: 'className', id: 'remove-classname'},\n {\n from: 'disallowedTypes',\n id: 'replace-allownode-allowedtypes-and-disallowedtypes',\n to: 'disallowedElements'\n },\n {from: 'escapeHtml', id: 'remove-buggy-html-in-markdown-parser'},\n {from: 'includeElementIndex', id: '#remove-includeelementindex'},\n {\n from: 'includeNodeIndex',\n id: 'change-includenodeindex-to-includeelementindex'\n },\n {from: 'linkTarget', id: 'remove-linktarget'},\n {from: 'plugins', id: 'change-plugins-to-remarkplugins', to: 'remarkPlugins'},\n {from: 'rawSourcePos', id: '#remove-rawsourcepos'},\n {from: 'renderers', id: 'change-renderers-to-components', to: 'components'},\n {from: 'source', id: 'change-source-to-children', to: 'children'},\n {from: 'sourcePos', id: '#remove-sourcepos'},\n {from: 'transformImageUri', id: '#add-urltransform', to: 'urlTransform'},\n {from: 'transformLinkUri', id: '#add-urltransform', to: 'urlTransform'}\n]\n\n/**\n * Component to render markdown.\n *\n * This is a synchronous component.\n * When using async plugins,\n * see {@linkcode MarkdownAsync} or {@linkcode MarkdownHooks}.\n *\n * @param {Readonly<Options>} options\n * Props.\n * @returns {ReactElement}\n * React element.\n */\nexport function Markdown(options) {\n const processor = createProcessor(options)\n const file = createFile(options)\n return post(processor.runSync(processor.parse(file), file), options)\n}\n\n/**\n * Component to render markdown with support for async plugins\n * through async/await.\n *\n * Components returning promises are supported on the server.\n * For async support on the client,\n * see {@linkcode MarkdownHooks}.\n *\n * @param {Readonly<Options>} options\n * Props.\n * @returns {Promise<ReactElement>}\n * Promise to a React element.\n */\nexport async function MarkdownAsync(options) {\n const processor = createProcessor(options)\n const file = createFile(options)\n const tree = await processor.run(processor.parse(file), file)\n return post(tree, options)\n}\n\n/**\n * Component to render markdown with support for async plugins through hooks.\n *\n * This uses `useEffect` and `useState` hooks.\n * Hooks run on the client and do not immediately render something.\n * For async support on the server,\n * see {@linkcode MarkdownAsync}.\n *\n * @param {Readonly<HooksOptions>} options\n * Props.\n * @returns {ReactNode}\n * React node.\n */\nexport function MarkdownHooks(options) {\n const processor = createProcessor(options)\n const [error, setError] = useState(\n /** @type {Error | undefined} */ (undefined)\n )\n const [tree, setTree] = useState(/** @type {Root | undefined} */ (undefined))\n\n useEffect(\n function () {\n let cancelled = false\n const file = createFile(options)\n\n processor.run(processor.parse(file), file, function (error, tree) {\n if (!cancelled) {\n setError(error)\n setTree(tree)\n }\n })\n\n /**\n * @returns {undefined}\n * Nothing.\n */\n return function () {\n cancelled = true\n }\n },\n [\n options.children,\n options.rehypePlugins,\n options.remarkPlugins,\n options.remarkRehypeOptions\n ]\n )\n\n if (error) throw error\n\n return tree ? post(tree, options) : options.fallback\n}\n\n/**\n * Set up the `unified` processor.\n *\n * @param {Readonly<Options>} options\n * Props.\n * @returns {Processor<MdastRoot, MdastRoot, Root, undefined, undefined>}\n * Result.\n */\nfunction createProcessor(options) {\n const rehypePlugins = options.rehypePlugins || emptyPlugins\n const remarkPlugins = options.remarkPlugins || emptyPlugins\n const remarkRehypeOptions = options.remarkRehypeOptions\n ? {...options.remarkRehypeOptions, ...emptyRemarkRehypeOptions}\n : emptyRemarkRehypeOptions\n\n const processor = unified()\n .use(remarkParse)\n .use(remarkPlugins)\n .use(remarkRehype, remarkRehypeOptions)\n .use(rehypePlugins)\n\n return processor\n}\n\n/**\n * Set up the virtual file.\n *\n * @param {Readonly<Options>} options\n * Props.\n * @returns {VFile}\n * Result.\n */\nfunction createFile(options) {\n const children = options.children || ''\n const file = new VFile()\n\n if (typeof children === 'string') {\n file.value = children\n } else {\n unreachable(\n 'Unexpected value `' +\n children +\n '` for `children` prop, expected `string`'\n )\n }\n\n return file\n}\n\n/**\n * Process the result from unified some more.\n *\n * @param {Nodes} tree\n * Tree.\n * @param {Readonly<Options>} options\n * Props.\n * @returns {ReactElement}\n * React element.\n */\nfunction post(tree, options) {\n const allowedElements = options.allowedElements\n const allowElement = options.allowElement\n const components = options.components\n const disallowedElements = options.disallowedElements\n const skipHtml = options.skipHtml\n const unwrapDisallowed = options.unwrapDisallowed\n const urlTransform = options.urlTransform || defaultUrlTransform\n\n for (const deprecation of deprecations) {\n if (Object.hasOwn(options, deprecation.from)) {\n unreachable(\n 'Unexpected `' +\n deprecation.from +\n '` prop, ' +\n (deprecation.to\n ? 'use `' + deprecation.to + '` instead'\n : 'remove it') +\n ' (see <' +\n changelog +\n '#' +\n deprecation.id +\n '> for more info)'\n )\n }\n }\n\n if (allowedElements && disallowedElements) {\n unreachable(\n 'Unexpected combined `allowedElements` and `disallowedElements`, expected one or the other'\n )\n }\n\n visit(tree, transform)\n\n return toJsxRuntime(tree, {\n Fragment,\n components,\n ignoreInvalidStyle: true,\n jsx,\n jsxs,\n passKeys: true,\n passNode: true\n })\n\n /** @type {BuildVisitor<Root>} */\n function transform(node, index, parent) {\n if (node.type === 'raw' && parent && typeof index === 'number') {\n if (skipHtml) {\n parent.children.splice(index, 1)\n } else {\n parent.children[index] = {type: 'text', value: node.value}\n }\n\n return index\n }\n\n if (node.type === 'element') {\n /** @type {string} */\n let key\n\n for (key in urlAttributes) {\n if (\n Object.hasOwn(urlAttributes, key) &&\n Object.hasOwn(node.properties, key)\n ) {\n const value = node.properties[key]\n const test = urlAttributes[key]\n if (test === null || test.includes(node.tagName)) {\n node.properties[key] = urlTransform(String(value || ''), key, node)\n }\n }\n }\n }\n\n if (node.type === 'element') {\n let remove = allowedElements\n ? !allowedElements.includes(node.tagName)\n : disallowedElements\n ? disallowedElements.includes(node.tagName)\n : false\n\n if (!remove && allowElement && typeof index === 'number') {\n remove = !allowElement(node, index, parent)\n }\n\n if (remove && parent && typeof index === 'number') {\n if (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 }\n}\n\n/**\n * Make a URL safe.\n *\n * @satisfies {UrlTransform}\n * @param {string} value\n * URL.\n * @returns {string}\n * Safe URL.\n */\nexport function defaultUrlTransform(value) {\n // Same as:\n // <https://github.com/micromark/micromark/blob/929275e/packages/micromark-util-sanitize-uri/dev/index.js#L34>\n // But without the `encode` part.\n const colon = value.indexOf(':')\n const questionMark = value.indexOf('?')\n const numberSign = value.indexOf('#')\n const slash = value.indexOf('/')\n\n if (\n // If there is no protocol, it’s relative.\n colon === -1 ||\n // If the first colon is after a `?`, `#`, or `/`, it’s 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 safeProtocol.test(value.slice(0, colon))\n ) {\n return value\n }\n\n return ''\n}\n","/**\n * @import {Schema} from 'hast-util-sanitize'\n */\n\n// Couple of ARIA attributes allowed in several, but not all, places.\nconst aria = ['ariaDescribedBy', 'ariaLabel', 'ariaLabelledBy']\n\n/**\n * Default schema.\n *\n * Follows GitHub style sanitation.\n *\n * @type {Schema}\n */\nexport const defaultSchema = {\n ancestors: {\n tbody: ['table'],\n td: ['table'],\n th: ['table'],\n thead: ['table'],\n tfoot: ['table'],\n tr: ['table']\n },\n attributes: {\n a: [\n ...aria,\n // Note: these 3 are used by GFM footnotes, they do work on all links.\n 'dataFootnoteBackref',\n 'dataFootnoteRef',\n ['className', 'data-footnote-backref'],\n 'href'\n ],\n blockquote: ['cite'],\n // Note: this class is not normally allowed by GH, when manually writing\n // `code` as HTML in markdown, they adds it some other way.\n // We can’t do that, so we have to allow it.\n code: [['className', /^language-./]],\n del: ['cite'],\n div: ['itemScope', 'itemType'],\n dl: [...aria],\n // Note: this is used by GFM footnotes.\n h2: [['className', 'sr-only']],\n img: [...aria, 'longDesc', 'src'],\n // Note: `input` is not normally allowed by GH, when manually writing\n // it in markdown, they add it from tasklists some other way.\n // We can’t do that, so we have to allow it.\n input: [\n ['disabled', true],\n ['type', 'checkbox']\n ],\n ins: ['cite'],\n // Note: this class is not normally allowed by GH, when manually writing\n // `li` as HTML in markdown, they adds it some other way.\n // We can’t do that, so we have to allow it.\n li: [['className', 'task-list-item']],\n // Note: this class is not normally allowed by GH, when manually writing\n // `ol` as HTML in markdown, they adds it some other way.\n // We can’t do that, so we have to allow it.\n ol: [...aria, ['className', 'contains-task-list']],\n q: ['cite'],\n section: ['dataFootnotes', ['className', 'footnotes']],\n source: ['srcSet'],\n summary: [...aria],\n table: [...aria],\n // Note: this class is not normally allowed by GH, when manually writing\n // `ol` as HTML in markdown, they adds it some other way.\n // We can’t do that, so we have to allow it.\n ul: [...aria, ['className', 'contains-task-list']],\n '*': [\n 'abbr',\n 'accept',\n 'acceptCharset',\n 'accessKey',\n 'action',\n 'align',\n 'alt',\n 'axis',\n 'border',\n 'cellPadding',\n 'cellSpacing',\n 'char',\n 'charOff',\n 'charSet',\n 'checked',\n 'clear',\n 'colSpan',\n 'color',\n 'cols',\n 'compact',\n 'coords',\n 'dateTime',\n 'dir',\n // Note: `disabled` is technically allowed on all elements by GH.\n // But it is useless on everything except `input`.\n // Because `input`s are normally not allowed, but we allow them for\n // checkboxes due to tasklists, we allow `disabled` only there.\n 'encType',\n 'frame',\n 'hSpace',\n 'headers',\n 'height',\n 'hrefLang',\n 'htmlFor',\n 'id',\n 'isMap',\n 'itemProp',\n 'label',\n 'lang',\n 'maxLength',\n 'media',\n 'method',\n 'multiple',\n 'name',\n 'noHref',\n 'noShade',\n 'noWrap',\n 'open',\n 'prompt',\n 'readOnly',\n 'rev',\n 'rowSpan',\n 'rows',\n 'rules',\n 'scope',\n 'selected',\n 'shape',\n 'size',\n 'span',\n 'start',\n 'summary',\n 'tabIndex',\n 'title',\n 'useMap',\n 'vAlign',\n 'value',\n 'width'\n ]\n },\n clobber: ['ariaDescribedBy', 'ariaLabelledBy', 'id', 'name'],\n clobberPrefix: 'user-content-',\n protocols: {\n cite: ['http', 'https'],\n href: ['http', 'https', 'irc', 'ircs', 'mailto', 'xmpp'],\n longDesc: ['http', 'https'],\n src: ['http', 'https']\n },\n required: {\n input: {disabled: true, type: 'checkbox'}\n },\n strip: ['script'],\n tagNames: [\n 'a',\n 'b',\n 'blockquote',\n 'br',\n 'code',\n 'dd',\n 'del',\n 'details',\n 'div',\n 'dl',\n 'dt',\n 'em',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'hr',\n 'i',\n 'img',\n // Note: `input` is not normally allowed by GH, when manually writing\n // it in markdown, they add it from tasklists some other way.\n // We can’t do that, so we have to allow it.\n 'input',\n 'ins',\n 'kbd',\n 'li',\n 'ol',\n 'p',\n 'picture',\n 'pre',\n 'q',\n 'rp',\n 'rt',\n 'ruby',\n 's',\n 'samp',\n 'section',\n 'source',\n 'span',\n 'strike',\n 'strong',\n 'sub',\n 'summary',\n 'sup',\n 'table',\n 'tbody',\n 'td',\n 'tfoot',\n 'th',\n 'thead',\n 'tr',\n 'tt',\n 'ul',\n 'var'\n ]\n}\n","/**\n * @import {\n * Comment,\n * Doctype,\n * ElementContent,\n * Element,\n * Nodes,\n * Properties,\n * RootContent,\n * Root,\n * Text\n * } from 'hast'\n */\n\n/**\n * @typedef {[string, ...Array<Exclude<Properties[keyof Properties], Array<any>> | RegExp>] | string} PropertyDefinition\n * Definition for a property.\n *\n * @typedef Schema\n * Schema that defines what nodes and properties are allowed.\n *\n * The default schema is `defaultSchema`, which follows how GitHub cleans.\n * If any top-level key is missing in the given schema, the corresponding\n * value of the default schema is used.\n *\n * To extend the standard schema with a few changes, clone `defaultSchema`\n * like so:\n *\n * ```js\n * import deepmerge from 'deepmerge'\n * import {h} from 'hastscript'\n * import {defaultSchema, sanitize} from 'hast-util-sanitize'\n *\n * // This allows `className` on all elements.\n * const schema = deepmerge(defaultSchema, {attributes: {'*': ['className']}})\n *\n * const tree = sanitize(h('div', {className: ['foo']}), schema)\n *\n * // `tree` still has `className`.\n * console.log(tree)\n * // {\n * // type: 'element',\n * // tagName: 'div',\n * // properties: {className: ['foo']},\n * // children: []\n * // }\n * ```\n * @property {boolean | null | undefined} [allowComments=false]\n * Whether to allow comment nodes (default: `false`).\n *\n * For example:\n *\n * ```js\n * allowComments: true\n * ```\n * @property {boolean | null | undefined} [allowDoctypes=false]\n * Whether to allow doctype nodes (default: `false`).\n *\n * For example:\n *\n * ```js\n * allowDoctypes: true\n * ```\n * @property {Record<string, Array<string>> | null | undefined} [ancestors]\n * Map of tag names to a list of tag names which are required ancestors\n * (default: `defaultSchema.ancestors`).\n *\n * Elements with these tag names will be ignored if they occur outside of one\n * of their allowed parents.\n *\n * For example:\n *\n * ```js\n * ancestors: {\n * tbody: ['table'],\n * // …\n * tr: ['table']\n * }\n * ```\n * @property {Record<string, Array<PropertyDefinition>> | null | undefined} [attributes]\n * Map of tag names to allowed property names (default:\n * `defaultSchema.attributes`).\n *\n * The special key `'*'` as a tag name defines property names allowed on all\n * elements.\n *\n * The special value `'data*'` as a property name can be used to allow all\n * `data` properties.\n *\n * For example:\n *\n * ```js\n * attributes: {\n * 'ariaDescribedBy', 'ariaLabel', 'ariaLabelledBy', …, 'href'\n * // …\n * '*': [\n * 'abbr',\n * 'accept',\n * 'acceptCharset',\n * // …\n * 'vAlign',\n * 'value',\n * 'width'\n * ]\n * }\n * ```\n *\n * Instead of a single string in the array, which allows any property value\n * for the field, you can use an array to allow several values.\n * For example, `input: ['type']` allows `type` set to any value on `input`s.\n * But `input: [['type', 'checkbox', 'radio']]` allows `type` when set to\n * `'checkbox'` or `'radio'`.\n *\n * You can use regexes, so for example `span: [['className', /^hljs-/]]`\n * allows any class that starts with `hljs-` on `span`s.\n *\n * When comma- or space-separated values are used (such as `className`), each\n * value in is checked individually.\n * For example, to allow certain classes on `span`s for syntax highlighting,\n * use `span: [['className', 'number', 'operator', 'token']]`.\n * This will allow `'number'`, `'operator'`, and `'token'` classes, but drop\n * others.\n * @property {Array<string> | null | undefined} [clobber]\n * List of property names that clobber (default: `defaultSchema.clobber`).\n *\n * For example:\n *\n * ```js\n * clobber: ['ariaDescribedBy', 'ariaLabelledBy', 'id', 'name']\n * ```\n * @property {string | null | undefined} [clobberPrefix]\n * Prefix to use before clobbering properties (default:\n * `defaultSchema.clobberPrefix`).\n *\n * For example:\n *\n * ```js\n * clobberPrefix: 'user-content-'\n * ```\n * @property {Record<string, Array<string> | null | undefined> | null | undefined} [protocols]\n * Map of *property names* to allowed protocols (default:\n * `defaultSchema.protocols`).\n *\n * This defines URLs that are always allowed to have local URLs (relative to\n * the current website, such as `this`, `#this`, `/this`, or `?this`), and\n * only allowed to have remote URLs (such as `https://example.com`) if they\n * use a known protocol.\n *\n * For example:\n *\n * ```js\n * protocols: {\n * cite: ['http', 'https'],\n * // …\n * src: ['http', 'https']\n * }\n * ```\n * @property {Record<string, Record<string, Properties[keyof Properties]>> | null | undefined} [required]\n * Map of tag names to required property names with a default value\n * (default: `defaultSchema.required`).\n *\n * This defines properties that must be set.\n * If a field does not exist (after the element was made safe), these will be\n * added with the given value.\n *\n * For example:\n *\n * ```js\n * required: {\n * input: {disabled: true, type: 'checkbox'}\n * }\n * ```\n *\n * > 👉 **Note**: properties are first checked based on `schema.attributes`,\n * > then on `schema.required`.\n * > That means properties could be removed by `attributes` and then added\n * > again with `required`.\n * @property {Array<string> | null | undefined} [strip]\n * List of tag names to strip from the tree (default: `defaultSchema.strip`).\n *\n * By default, unsafe elements (those not in `schema.tagNames`) are replaced\n * by what they contain.\n * This option can drop their contents.\n *\n * For example:\n *\n * ```js\n * strip: ['script']\n * ```\n * @property {Array<string> | null | undefined} [tagNames]\n * List of allowed tag names (default: `defaultSchema.tagNames`).\n *\n * For example:\n *\n * ```js\n * tagNames: [\n * 'a',\n * 'b',\n * // …\n * 'ul',\n * 'var'\n * ]\n * ```\n *\n * @typedef State\n * Info passed around.\n * @property {Readonly<Schema>} schema\n * Schema.\n * @property {Array<string>} stack\n * Tag names of ancestors.\n */\n\nimport structuredClone from '@ungap/structured-clone'\nimport {position} from 'unist-util-position'\nimport {defaultSchema} from './schema.js'\n\nconst own = {}.hasOwnProperty\n\n/**\n * Sanitize a tree.\n *\n * @param {Readonly<Nodes>} node\n * Unsafe tree.\n * @param {Readonly<Schema> | null | undefined} [options]\n * Configuration (default: `defaultSchema`).\n * @returns {Nodes}\n * New, safe tree.\n */\nexport function sanitize(node, options) {\n /** @type {Nodes} */\n let result = {type: 'root', children: []}\n\n /** @type {State} */\n const state = {\n schema: options ? {...defaultSchema, ...options} : defaultSchema,\n stack: []\n }\n const replace = transform(state, node)\n\n if (replace) {\n if (Array.isArray(replace)) {\n if (replace.length === 1) {\n result = replace[0]\n } else {\n result.children = replace\n }\n } else {\n result = replace\n }\n }\n\n return result\n}\n\n/**\n * Sanitize `node`.\n *\n * @param {State} state\n * Info passed around.\n * @param {Readonly<unknown>} node\n * Unsafe node.\n * @returns {Array<ElementContent> | Nodes | undefined}\n * Safe result.\n */\nfunction transform(state, node) {\n if (node && typeof node === 'object') {\n const unsafe = /** @type {Record<string, Readonly<unknown>>} */ (node)\n const type = typeof unsafe.type === 'string' ? unsafe.type : ''\n\n switch (type) {\n case 'comment': {\n return comment(state, unsafe)\n }\n\n case 'doctype': {\n return doctype(state, unsafe)\n }\n\n case 'element': {\n return element(state, unsafe)\n }\n\n case 'root': {\n return root(state, unsafe)\n }\n\n case 'text': {\n return text(state, unsafe)\n }\n\n default:\n }\n }\n}\n\n/**\n * Make a safe comment.\n *\n * @param {State} state\n * Info passed around.\n * @param {Readonly<Record<string, Readonly<unknown>>>} unsafe\n * Unsafe comment-like value.\n * @returns {Comment | undefined}\n * Safe comment (if with `allowComments`).\n */\nfunction comment(state, unsafe) {\n if (state.schema.allowComments) {\n // See <https://html.spec.whatwg.org/multipage/parsing.html#serialising-html-fragments>\n const result = typeof unsafe.value === 'string' ? unsafe.value : ''\n const index = result.indexOf('-->')\n const value = index < 0 ? result : result.slice(0, index)\n\n /** @type {Comment} */\n const node = {type: 'comment', value}\n\n patch(node, unsafe)\n\n return node\n }\n}\n\n/**\n * Make a safe doctype.\n *\n * @param {State} state\n * Info passed around.\n * @param {Readonly<Record<string, Readonly<unknown>>>} unsafe\n * Unsafe doctype-like value.\n * @returns {Doctype | undefined}\n * Safe doctype (if with `allowDoctypes`).\n */\nfunction doctype(state, unsafe) {\n if (state.schema.allowDoctypes) {\n /** @type {Doctype} */\n const node = {type: 'doctype'}\n\n patch(node, unsafe)\n\n return node\n }\n}\n\n/**\n * Make a safe element.\n *\n * @param {State} state\n * Info passed around.\n * @param {Readonly<Record<string, Readonly<unknown>>>} unsafe\n * Unsafe element-like value.\n * @returns {Array<ElementContent> | Element | undefined}\n * Safe element.\n */\nfunction element(state, unsafe) {\n const name = typeof unsafe.tagName === 'string' ? unsafe.tagName : ''\n\n state.stack.push(name)\n\n const content = /** @type {Array<ElementContent>} */ (\n children(state, unsafe.children)\n )\n const properties_ = properties(state, unsafe.properties)\n\n state.stack.pop()\n\n let safeElement = false\n\n if (\n name &&\n name !== '*' &&\n (!state.schema.tagNames || state.schema.tagNames.includes(name))\n ) {\n safeElement = true\n\n // Some nodes can break out of their context if they don’t have a certain\n // ancestor.\n if (state.schema.ancestors && own.call(state.schema.ancestors, name)) {\n const ancestors = state.schema.ancestors[name]\n let index = -1\n\n safeElement = false\n\n while (++index < ancestors.length) {\n if (state.stack.includes(ancestors[index])) {\n safeElement = true\n }\n }\n }\n }\n\n if (!safeElement) {\n return state.schema.strip && !state.schema.strip.includes(name)\n ? content\n : undefined\n }\n\n /** @type {Element} */\n const node = {\n type: 'element',\n tagName: name,\n properties: properties_,\n children: content\n }\n\n patch(node, unsafe)\n\n return node\n}\n\n/**\n * Make a safe root.\n *\n * @param {State} state\n * Info passed around.\n * @param {Readonly<Record<string, Readonly<unknown>>>} unsafe\n * Unsafe root-like value.\n * @returns {Root}\n * Safe root.\n */\nfunction root(state, unsafe) {\n const content = /** @type {Array<RootContent>} */ (\n children(state, unsafe.children)\n )\n\n /** @type {Root} */\n const node = {type: 'root', children: content}\n\n patch(node, unsafe)\n\n return node\n}\n\n/**\n * Make a safe text.\n *\n * @param {State} _\n * Info passed around.\n * @param {Readonly<Record<string, Readonly<unknown>>>} unsafe\n * Unsafe text-like value.\n * @returns {Text}\n * Safe text.\n */\nfunction text(_, unsafe) {\n const value = typeof unsafe.value === 'string' ? unsafe.value : ''\n /** @type {Text} */\n const node = {type: 'text', value}\n\n patch(node, unsafe)\n\n return node\n}\n\n/**\n * Make children safe.\n *\n * @param {State} state\n * Info passed around.\n * @param {Readonly<unknown>} children\n * Unsafe value.\n * @returns {Array<Nodes>}\n * Safe children.\n */\nfunction children(state, children) {\n /** @type {Array<Nodes>} */\n const results = []\n\n if (Array.isArray(children)) {\n const childrenUnknown = /** @type {Array<Readonly<unknown>>} */ (children)\n let index = -1\n\n while (++index < childrenUnknown.length) {\n const value = transform(state, childrenUnknown[index])\n\n if (value) {\n if (Array.isArray(value)) {\n results.push(...value)\n } else {\n results.push(value)\n }\n }\n }\n }\n\n return results\n}\n\n/**\n * Make element properties safe.\n *\n * @param {State} state\n * Info passed around.\n * @param {Readonly<unknown>} properties\n * Unsafe value.\n * @returns {Properties}\n * Safe value.\n */\nfunction properties(state, properties) {\n const tagName = state.stack[state.stack.length - 1]\n const attributes = state.schema.attributes\n const required = state.schema.required\n const specific =\n attributes && own.call(attributes, tagName)\n ? attributes[tagName]\n : undefined\n const defaults =\n attributes && own.call(attributes, '*') ? attributes['*'] : undefined\n const properties_ =\n /** @type {Readonly<Record<string, Readonly<unknown>>>} */ (\n properties && typeof properties === 'object' ? properties : {}\n )\n /** @type {Properties} */\n const result = {}\n /** @type {string} */\n let key\n\n for (key in properties_) {\n if (own.call(properties_, key)) {\n const unsafe = properties_[key]\n let safe = propertyValue(\n state,\n findDefinition(specific, key),\n key,\n unsafe\n )\n\n if (safe === null || safe === undefined) {\n safe = propertyValue(state, findDefinition(defaults, key), key, unsafe)\n }\n\n if (safe !== null && safe !== undefined) {\n result[key] = safe\n }\n }\n }\n\n if (required && own.call(required, tagName)) {\n const properties = required[tagName]\n\n for (key in properties) {\n if (own.call(properties, key) && !own.call(result, key)) {\n result[key] = properties[key]\n }\n }\n }\n\n return result\n}\n\n/**\n * Sanitize a property value.\n *\n * @param {State} state\n * Info passed around.\n * @param {Readonly<PropertyDefinition> | undefined} definition\n * Definition.\n * @param {string} key\n * Field name.\n * @param {Readonly<unknown>} value\n * Unsafe value (but an array).\n * @returns {Array<number | string> | boolean | number | string | undefined}\n * Safe value.\n */\nfunction propertyValue(state, definition, key, value) {\n return definition\n ? Array.isArray(value)\n ? propertyValueMany(state, definition, key, value)\n : propertyValuePrimitive(state, definition, key, value)\n : undefined\n}\n\n/**\n * Sanitize a property value which is a list.\n *\n * @param {State} state\n * Info passed around.\n * @param {Readonly<PropertyDefinition>} definition\n * Definition.\n * @param {string} key\n * Field name.\n * @param {Readonly<Array<Readonly<unknown>>>} values\n * Unsafe value (but an array).\n * @returns {Array<number | string>}\n * Safe value.\n */\nfunction propertyValueMany(state, definition, key, values) {\n let index = -1\n /** @type {Array<number | string>} */\n const result = []\n\n while (++index < values.length) {\n const value = propertyValuePrimitive(state, definition, key, values[index])\n\n if (typeof value === 'number' || typeof value === 'string') {\n result.push(value)\n }\n }\n\n return result\n}\n\n/**\n * Sanitize a property value which is a primitive.\n *\n * @param {State} state\n * Info passed around.\n * @param {Readonly<PropertyDefinition>} definition\n * Definition.\n * @param {string} key\n * Field name.\n * @param {Readonly<unknown>} value\n * Unsafe value (but not an array).\n * @returns {boolean | number | string | undefined}\n * Safe value.\n */\nfunction propertyValuePrimitive(state, definition, key, value) {\n if (\n typeof value !== 'boolean' &&\n typeof value !== 'number' &&\n typeof value !== 'string'\n ) {\n return\n }\n\n if (!safeProtocol(state, key, value)) {\n return\n }\n\n // Just a string, or only one item in an array, means all values are OK.\n // More than one item means an allow list.\n if (typeof definition === 'object' && definition.length > 1) {\n let ok = false\n let index = 0 // Ignore `key`, which is the first item.\n\n while (++index < definition.length) {\n const allowed = definition[index]\n\n // Expression.\n if (allowed && typeof allowed === 'object' && 'flags' in allowed) {\n if (allowed.test(String(value))) {\n ok = true\n break\n }\n }\n // Primitive.\n else if (allowed === value) {\n ok = true\n break\n }\n }\n\n if (!ok) return\n }\n\n return state.schema.clobber &&\n state.schema.clobberPrefix &&\n state.schema.clobber.includes(key)\n ? state.schema.clobberPrefix + value\n : value\n}\n\n/**\n * Check whether `value` is a safe URL.\n *\n * @param {State} state\n * Info passed around.\n * @param {string} key\n * Field name.\n * @param {Readonly<unknown>} value\n * Unsafe value.\n * @returns {boolean}\n * Whether it’s a safe value.\n */\nfunction safeProtocol(state, key, value) {\n const protocols =\n state.schema.protocols && own.call(state.schema.protocols, key)\n ? state.schema.protocols[key]\n : undefined\n\n // No protocols defined? Then everything is fine.\n if (!protocols || protocols.length === 0) {\n return true\n }\n\n const url = String(value)\n const colon = url.indexOf(':')\n const questionMark = url.indexOf('?')\n const numberSign = url.indexOf('#')\n const slash = url.indexOf('/')\n\n if (\n colon < 0 ||\n // If the first colon is after a `?`, `#`, or `/`, it’s not a protocol.\n (slash > -1 && colon > slash) ||\n (questionMark > -1 && colon > questionMark) ||\n (numberSign > -1 && colon > numberSign)\n ) {\n return true\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) === protocol\n ) {\n return true\n }\n }\n\n return false\n}\n\n/**\n * Add data and position.\n *\n * @param {Nodes} node\n * Node to patch safe data and position on.\n * @param {Readonly<Record<string, Readonly<unknown>>>} unsafe\n * Unsafe node-like value.\n * @returns {undefined}\n * Nothing.\n */\nfunction patch(node, unsafe) {\n const cleanPosition = position(\n // @ts-expect-error: looks like a node.\n unsafe\n )\n\n if (unsafe.data) {\n node.data = structuredClone(unsafe.data)\n }\n\n if (cleanPosition) node.position = cleanPosition\n}\n\n/**\n *\n * @param {Readonly<Array<PropertyDefinition>> | undefined} definitions\n * @param {string} key\n * @returns {Readonly<PropertyDefinition> | undefined}\n */\nfunction findDefinition(definitions, key) {\n /** @type {PropertyDefinition | undefined} */\n let dataDefault\n let index = -1\n\n if (definitions) {\n while (++index < definitions.length) {\n const entry = definitions[index]\n const name = typeof entry === 'string' ? entry : entry[0]\n\n if (name === key) {\n return entry\n }\n\n if (name === 'data*') dataDefault = entry\n }\n }\n\n if (key.length > 4 && key.slice(0, 4).toLowerCase() === 'data') {\n return dataDefault\n }\n}\n","/**\n * @typedef {import('hast').Root} Root\n * @typedef {import('hast-util-sanitize').Schema} Schema\n */\n\nimport {sanitize} from 'hast-util-sanitize'\n\n/**\n * Sanitize HTML.\n *\n * @param {Schema | null | undefined} [options]\n * Configuration (optional).\n * @returns\n * Transform.\n */\nexport default function rehypeSanitize(options) {\n /**\n * @param {Root} tree\n * Tree.\n * @returns {Root}\n * New tree.\n */\n return function (tree) {\n // Assume root in -> root out.\n const result = /** @type {Root} */ (sanitize(tree, options))\n return result\n }\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’s always valid, and a `\\xnn` escape when the simpler form would be disallowed by Unicode patterns’ stricter grammar.\n\treturn string\n\t\t.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&')\n\t\t.replace(/-/g, '\\\\x2d');\n}\n","/**\n * @import {Nodes, Parents, PhrasingContent, Root, Text} from 'mdast'\n * @import {BuildVisitor, Test, VisitorResult} from 'unist-util-visit-parents'\n */\n\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 {[...Array<Parents>, Text]} stack\n * All ancestors of the text node, where the last node is the text itself.\n *\n * @typedef {RegExp | string} 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 *\n * @typedef {[Find, Replace?]} FindAndReplaceTuple\n * Find and replace in tuple form.\n *\n * @typedef {ReplaceFunction | string | null | undefined} Replace\n * Thing to replace with.\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`) — whole match\n * * `...capture` (`Array<string>`) — matches from regex capture groups\n * * `match` (`RegExpMatchObject`) — info on the match\n * @returns {Array<PhrasingContent> | PhrasingContent | string | false | null | undefined}\n * Thing to replace with.\n *\n * * when `null`, `undefined`, `''`, remove the match\n * * …or when `false`, do not replace at all\n * * …or when `string`, replace with a text node of that value\n * * …or when `Node` or `Array<Node>`, replace with those nodes\n *\n * @typedef {[RegExp, ReplaceFunction]} Pair\n * Normalized find and replace.\n *\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 (optional).\n */\n\nimport escape from 'escape-string-regexp'\nimport {visitParents} from 'unist-util-visit-parents'\nimport {convert} from 'unist-util-is'\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 {Nodes} tree\n * Tree to change.\n * @param {FindAndReplaceList | FindAndReplaceTuple} list\n * Patterns to find.\n * @param {Options | null | undefined} [options]\n * Configuration (when `find` is not `Find`).\n * @returns {undefined}\n * Nothing.\n */\nexport function findAndReplace(tree, list, options) {\n const settings = options || {}\n const ignored = convert(settings.ignore || [])\n const pairs = toPairs(list)\n let pairIndex = -1\n\n while (++pairIndex < pairs.length) {\n visitParents(tree, 'text', visitor)\n }\n\n /** @type {BuildVisitor<Root, 'text'>} */\n function visitor(node, parents) {\n let index = -1\n /** @type {Parents | undefined} */\n let grandparent\n\n while (++index < parents.length) {\n const parent = parents[index]\n /** @type {Array<Nodes> | undefined} */\n const siblings = grandparent ? grandparent.children : undefined\n\n if (\n ignored(\n parent,\n siblings ? siblings.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<Parents>} 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 /** @type {Array<Nodes>} */\n const siblings = parent.children\n const index = siblings.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 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’t a match after all.\n if (value === false) {\n // False acts as if there was no match.\n // So we need to reset `lastIndex`, which currently being at the end of\n // the current match, to the beginning.\n find.lastIndex = position + 1\n } else {\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 * Turn a tuple or a list of tuples into pairs.\n *\n * @param {FindAndReplaceList | FindAndReplaceTuple} tupleOrList\n * Schema.\n * @returns {Pairs}\n * Clean pairs.\n */\nfunction toPairs(tupleOrList) {\n /** @type {Pairs} */\n const result = []\n\n if (!Array.isArray(tupleOrList)) {\n throw new TypeError('Expected find and replace tuple or list of tuples')\n }\n\n /** @type {FindAndReplaceList} */\n // @ts-expect-error: correct.\n const list =\n !tupleOrList[0] || Array.isArray(tupleOrList[0])\n ? tupleOrList\n : [tupleOrList]\n\n let index = -1\n\n while (++index < list.length) {\n const tuple = list[index]\n result.push([toExpression(tuple[0]), toFunction(tuple[1])])\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'\n ? replace\n : function () {\n return replace\n }\n}\n","/**\n * @typedef {import('mdast').Nodes} Nodes\n * @typedef {import('mdast-util-find-and-replace').ReplaceFunction} ReplaceFunction\n */\n\nimport {findAndReplace} from 'mdast-util-find-and-replace'\n\n/**\n * Turn normal line endings into hard breaks.\n *\n * @param {Nodes} tree\n * Tree to change.\n * @returns {undefined}\n * Nothing.\n */\nexport function newlineToBreak(tree) {\n findAndReplace(tree, [/\\r?\\n|\\r/g, replace])\n}\n\n/**\n * Replace line endings.\n *\n * @type {ReplaceFunction}\n */\nfunction replace() {\n return {type: 'break'}\n}\n","/**\n * @typedef {import('mdast').Root} Root\n */\n\nimport {newlineToBreak} from 'mdast-util-newline-to-break'\n\n/**\n * Support hard breaks without needing spaces or escapes (turns enters into\n * `<br>`s).\n *\n * @returns\n * Transform.\n */\nexport default function remarkBreaks() {\n /**\n * Transform.\n *\n * @param {Root} tree\n * Tree.\n * @returns {undefined}\n * Nothing.\n */\n return function (tree) {\n newlineToBreak(tree)\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","/**\n * @import {RegExpMatchObject, ReplaceFunction} from 'mdast-util-find-and-replace'\n * @import {CompileContext, Extension as FromMarkdownExtension, Handle as FromMarkdownHandle, Transform as FromMarkdownTransform} from 'mdast-util-from-markdown'\n * @import {ConstructName, Options as ToMarkdownExtension} from 'mdast-util-to-markdown'\n * @import {Link, PhrasingContent} from 'mdast'\n */\n\nimport {ccount} from 'ccount'\nimport {ok as assert} from 'devlop'\nimport {unicodePunctuation, unicodeWhitespace} from 'micromark-util-character'\nimport {findAndReplace} from 'mdast-util-find-and-replace'\n\n/** @type {ConstructName} */\nconst inConstruct = 'phrasing'\n/** @type {Array<ConstructName>} */\nconst notInConstruct = ['autolink', 'link', 'image', 'label']\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM autolink\n * literals in markdown.\n *\n * @returns {FromMarkdownExtension}\n * Extension for `mdast-util-to-markdown` to enable GFM autolink literals.\n */\nexport function gfmAutolinkLiteralFromMarkdown() {\n return {\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/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM autolink\n * literals in markdown.\n *\n * @returns {ToMarkdownExtension}\n * Extension for `mdast-util-to-markdown` to enable GFM autolink literals.\n */\nexport function gfmAutolinkLiteralToMarkdown() {\n return {\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 {\n character: ':',\n before: '[ps]',\n after: '\\\\/',\n inConstruct,\n notInConstruct\n }\n ]\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 = this.stack[this.stack.length - 1]\n assert(node.type === 'link')\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 [/(?<=^|\\s|\\p{P}|\\p{S})([-.\\w+]+)@([-\\w]+(?:\\.[-\\w]+)+)/gu, 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 {Array<PhrasingContent> | Link | 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 // If it’s an email, the previous character should not be a slash.\n (!email || code !== 47)\n )\n}\n","/**\n * @import {\n * CompileContext,\n * Extension as FromMarkdownExtension,\n * Handle as FromMarkdownHandle\n * } from 'mdast-util-from-markdown'\n * @import {ToMarkdownOptions} from 'mdast-util-gfm-footnote'\n * @import {\n * Handle as ToMarkdownHandle,\n * Map,\n * Options as ToMarkdownExtension\n * } from 'mdast-util-to-markdown'\n * @import {FootnoteDefinition, FootnoteReference} from 'mdast'\n */\n\nimport {ok as assert} from 'devlop'\nimport {normalizeIdentifier} from 'micromark-util-normalize-identifier'\n\nfootnoteReference.peek = footnoteReferencePeek\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 enterFootnoteCall(token) {\n this.enter({type: 'footnoteReference', identifier: '', label: ''}, token)\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 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 exitFootnoteCallString(token) {\n const label = this.resume()\n const node = this.stack[this.stack.length - 1]\n assert(node.type === 'footnoteReference')\n node.identifier = normalizeIdentifier(\n this.sliceSerialize(token)\n ).toLowerCase()\n node.label = label\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitFootnoteCall(token) {\n this.exit(token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitFootnoteDefinitionLabelString(token) {\n const label = this.resume()\n const node = this.stack[this.stack.length - 1]\n assert(node.type === 'footnoteDefinition')\n node.identifier = normalizeIdentifier(\n this.sliceSerialize(token)\n ).toLowerCase()\n node.label = label\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitFootnoteDefinition(token) {\n this.exit(token)\n}\n\n/** @type {ToMarkdownHandle} */\nfunction footnoteReferencePeek() {\n return '['\n}\n\n/**\n * @type {ToMarkdownHandle}\n * @param {FootnoteReference} node\n */\nfunction footnoteReference(node, _, state, info) {\n const tracker = state.createTracker(info)\n let value = tracker.move('[^')\n const exit = state.enter('footnoteReference')\n const subexit = state.enter('reference')\n value += tracker.move(\n state.safe(state.associationId(node), {after: ']', before: value})\n )\n subexit()\n exit()\n value += tracker.move(']')\n return value\n}\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 gfmFootnoteCallString: enterFootnoteCallString,\n gfmFootnoteCall: enterFootnoteCall,\n gfmFootnoteDefinitionLabelString: enterFootnoteDefinitionLabelString,\n gfmFootnoteDefinition: enterFootnoteDefinition\n },\n exit: {\n gfmFootnoteCallString: exitFootnoteCallString,\n gfmFootnoteCall: exitFootnoteCall,\n gfmFootnoteDefinitionLabelString: exitFootnoteDefinitionLabelString,\n gfmFootnoteDefinition: exitFootnoteDefinition\n }\n }\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM footnotes\n * in markdown.\n *\n * @param {ToMarkdownOptions | null | undefined} [options]\n * Configuration (optional).\n * @returns {ToMarkdownExtension}\n * Extension for `mdast-util-to-markdown`.\n */\nexport function gfmFootnoteToMarkdown(options) {\n // To do: next major: change default.\n let firstLineBlank = false\n\n if (options && options.firstLineBlank) {\n firstLineBlank = true\n }\n\n return {\n handlers: {footnoteDefinition, footnoteReference},\n // This is on by default already.\n unsafe: [{character: '[', inConstruct: ['label', 'phrasing', 'reference']}]\n }\n\n /**\n * @type {ToMarkdownHandle}\n * @param {FootnoteDefinition} node\n */\n function footnoteDefinition(node, _, state, info) {\n const tracker = state.createTracker(info)\n let value = tracker.move('[^')\n const exit = state.enter('footnoteDefinition')\n const subexit = state.enter('label')\n value += tracker.move(\n state.safe(state.associationId(node), {before: value, after: ']'})\n )\n subexit()\n\n value += tracker.move(']:')\n\n if (node.children && node.children.length > 0) {\n tracker.shift(4)\n\n value += tracker.move(\n (firstLineBlank ? '\\n' : ' ') +\n state.indentLines(\n state.containerFlow(node, tracker.current()),\n firstLineBlank ? mapAll : mapExceptFirst\n )\n )\n }\n\n exit()\n\n return value\n }\n}\n\n/** @type {Map} */\nfunction mapExceptFirst(line, index, blank) {\n return index === 0 ? line : mapAll(line, index, blank)\n}\n\n/** @type {Map} */\nfunction mapAll(line, index, blank) {\n return (blank ? '' : ' ') + line\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').Handle} ToMarkdownHandle\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n */\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 * Create an extension for `mdast-util-from-markdown` to enable GFM\n * strikethrough in markdown.\n *\n * @returns {FromMarkdownExtension}\n * Extension for `mdast-util-from-markdown` to enable GFM strikethrough.\n */\nexport function gfmStrikethroughFromMarkdown() {\n return {\n canContainEols: ['delete'],\n enter: {strikethrough: enterStrikethrough},\n exit: {strikethrough: exitStrikethrough}\n }\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM\n * strikethrough in markdown.\n *\n * @returns {ToMarkdownExtension}\n * Extension for `mdast-util-to-markdown` to enable GFM strikethrough.\n */\nexport function gfmStrikethroughToMarkdown() {\n return {\n unsafe: [\n {\n character: '~',\n inConstruct: 'phrasing',\n notInConstruct: constructsWithoutStrikethrough\n }\n ],\n handlers: {delete: handleDelete}\n }\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, _, state, info) {\n const tracker = state.createTracker(info)\n const exit = state.enter('strikethrough')\n let value = tracker.move('~~')\n value += state.containerPhrasing(node, {\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","// 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’t 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 * > 👉 **Note**: please don’t use this: it could create fragile structures\n * > that aren’t 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 * > 👉 **Note**: please don’t use this: it could create fragile structures\n * > that aren’t 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 “visible” size;\n * note that what is and isn’t 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 * ['中文', 'Charlie'],\n * ['👩❤️👩', 'Delta']\n * ])\n * ```\n *\n * Yields:\n *\n * ```markdown\n * | Alpha | Bravo |\n * | - | - |\n * | 中文 | Charlie |\n * | 👩❤️👩 | 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 * ['中文', 'Charlie'],\n * ['👩❤️👩', 'Delta']\n * ],\n * {stringLength: stringWidth}\n * )\n * ```\n *\n * Yields:\n *\n * ```markdown\n * | Alpha | Bravo |\n * | ----- | ------- |\n * | 中文 | Charlie |\n * | 👩❤️👩 | 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’t align delimiters, but otherwise we’d\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’t add the opening space if we’re 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 * @import {Blockquote, Parents} from 'mdast'\n * @import {Info, Map, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {Blockquote} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function blockquote(node, _, state, info) {\n const exit = state.enter('blockquote')\n const tracker = state.createTracker(info)\n tracker.move('> ')\n tracker.shift(2)\n const value = state.indentLines(\n state.containerFlow(node, tracker.current()),\n map\n )\n exit()\n return value\n}\n\n/** @type {Map} */\nfunction map(line, _, blank) {\n return '>' + (blank ? '' : ' ') + line\n}\n","/**\n * @import {ConstructName, Unsafe} from 'mdast-util-to-markdown'\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 * @import {Break, Parents} from 'mdast'\n * @import {Info, State} from 'mdast-util-to-markdown'\n */\n\nimport {patternInScope} from '../util/pattern-in-scope.js'\n\n/**\n * @param {Break} _\n * @param {Parents | undefined} _1\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function hardBreak(_, _1, state, info) {\n let index = -1\n\n while (++index < state.unsafe.length) {\n // If we can’t put eols in this construct (setext headings, tables), use a\n // space instead.\n if (\n state.unsafe[index].character === '\\n' &&\n patternInScope(state.stack, state.unsafe[index])\n ) {\n return /[ \\t]/.test(info.before) ? '' : ' '\n }\n }\n\n return '\\\\\\n'\n}\n","/**\n * Get the count of the longest repeating streak of `substring` in `value`.\n *\n * @param {string} value\n * Content to search in.\n * @param {string} substring\n * Substring to look for, typically one character.\n * @returns {number}\n * Count of most frequent adjacent `substring`s in `value`.\n */\nexport function longestStreak(value, substring) {\n const source = String(value)\n let index = source.indexOf(substring)\n let expected = index\n let count = 0\n let max = 0\n\n if (typeof substring !== 'string') {\n throw new TypeError('Expected substring')\n }\n\n while (index !== -1) {\n if (index === expected) {\n if (++count > max) {\n max = count\n }\n } else {\n count = 1\n }\n\n expected = index + substring.length\n index = source.indexOf(substring, expected)\n }\n\n return max\n}\n","/**\n * @import {State} from 'mdast-util-to-markdown'\n * @import {Code} from 'mdast'\n */\n\n/**\n * @param {Code} node\n * @param {State} state\n * @returns {boolean}\n */\nexport function formatCodeAsIndented(node, state) {\n return Boolean(\n state.options.fences === false &&\n node.value &&\n // If there’s no info…\n !node.lang &&\n // And there’s a non-whitespace character…\n /[^ \\r\\n]/.test(node.value) &&\n // And the value doesn’t start or end in a blank…\n !/^[\\t ]*(?:[\\r\\n]|$)|(?:^|[\\r\\n])[\\t ]*$/.test(node.value)\n )\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['fence'], null | undefined>}\n */\nexport function checkFence(state) {\n const marker = state.options.fence || '`'\n\n if (marker !== '`' && marker !== '~') {\n throw new Error(\n 'Cannot serialize code with `' +\n marker +\n '` for `options.fence`, expected `` ` `` or `~`'\n )\n }\n\n return marker\n}\n","/**\n * @import {Info, Map, State} from 'mdast-util-to-markdown'\n * @import {Code, Parents} from 'mdast'\n */\n\nimport {longestStreak} from 'longest-streak'\nimport {formatCodeAsIndented} from '../util/format-code-as-indented.js'\nimport {checkFence} from '../util/check-fence.js'\n\n/**\n * @param {Code} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function code(node, _, state, info) {\n const marker = checkFence(state)\n const raw = node.value || ''\n const suffix = marker === '`' ? 'GraveAccent' : 'Tilde'\n\n if (formatCodeAsIndented(node, state)) {\n const exit = state.enter('codeIndented')\n const value = state.indentLines(raw, map)\n exit()\n return value\n }\n\n const tracker = state.createTracker(info)\n const sequence = marker.repeat(Math.max(longestStreak(raw, marker) + 1, 3))\n const exit = state.enter('codeFenced')\n let value = tracker.move(sequence)\n\n if (node.lang) {\n const subexit = state.enter(`codeFencedLang${suffix}`)\n value += tracker.move(\n state.safe(node.lang, {\n before: value,\n after: ' ',\n encode: ['`'],\n ...tracker.current()\n })\n )\n subexit()\n }\n\n if (node.lang && node.meta) {\n const subexit = state.enter(`codeFencedMeta${suffix}`)\n value += tracker.move(' ')\n value += tracker.move(\n state.safe(node.meta, {\n before: value,\n after: '\\n',\n encode: ['`'],\n ...tracker.current()\n })\n )\n subexit()\n }\n\n value += tracker.move('\\n')\n\n if (raw) {\n value += tracker.move(raw + '\\n')\n }\n\n value += tracker.move(sequence)\n exit()\n return value\n}\n\n/** @type {Map} */\nfunction map(line, _, blank) {\n return (blank ? '' : ' ') + line\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['quote'], null | undefined>}\n */\nexport function checkQuote(state) {\n const marker = state.options.quote || '\"'\n\n if (marker !== '\"' && marker !== \"'\") {\n throw new Error(\n 'Cannot serialize title with `' +\n marker +\n '` for `options.quote`, expected `\"`, or `\\'`'\n )\n }\n\n return marker\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Definition, Parents} from 'mdast'\n */\n\nimport {checkQuote} from '../util/check-quote.js'\n\n/**\n * @param {Definition} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function definition(node, _, state, info) {\n const quote = checkQuote(state)\n const suffix = quote === '\"' ? 'Quote' : 'Apostrophe'\n const exit = state.enter('definition')\n let subexit = state.enter('label')\n const tracker = state.createTracker(info)\n let value = tracker.move('[')\n value += tracker.move(\n state.safe(state.associationId(node), {\n before: value,\n after: ']',\n ...tracker.current()\n })\n )\n value += tracker.move(']: ')\n\n subexit()\n\n if (\n // If there’s no url, or…\n !node.url ||\n // If there are control characters or whitespace.\n /[\\0- \\u007F]/.test(node.url)\n ) {\n subexit = state.enter('destinationLiteral')\n value += tracker.move('<')\n value += tracker.move(\n state.safe(node.url, {before: value, after: '>', ...tracker.current()})\n )\n value += tracker.move('>')\n } else {\n // No whitespace, raw is prettier.\n subexit = state.enter('destinationRaw')\n value += tracker.move(\n state.safe(node.url, {\n before: value,\n after: node.title ? ' ' : '\\n',\n ...tracker.current()\n })\n )\n }\n\n subexit()\n\n if (node.title) {\n subexit = state.enter(`title${suffix}`)\n value += tracker.move(' ' + quote)\n value += tracker.move(\n state.safe(node.title, {\n before: value,\n after: quote,\n ...tracker.current()\n })\n )\n value += tracker.move(quote)\n subexit()\n }\n\n exit()\n\n return value\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['emphasis'], null | undefined>}\n */\nexport function checkEmphasis(state) {\n const marker = state.options.emphasis || '*'\n\n if (marker !== '*' && marker !== '_') {\n throw new Error(\n 'Cannot serialize emphasis with `' +\n marker +\n '` for `options.emphasis`, expected `*`, or `_`'\n )\n }\n\n return marker\n}\n","/**\n * Encode a code point as a character reference.\n *\n * @param {number} code\n * Code point to encode.\n * @returns {string}\n * Encoded character reference.\n */\nexport function encodeCharacterReference(code) {\n return '&#x' + code.toString(16).toUpperCase() + ';'\n}\n","/**\n * @import {EncodeSides} from '../types.js'\n */\n\nimport {classifyCharacter} from 'micromark-util-classify-character'\n\n/**\n * Check whether to encode (as a character reference) the characters\n * surrounding an attention run.\n *\n * Which characters are around an attention run influence whether it works or\n * not.\n *\n * See <https://github.com/orgs/syntax-tree/discussions/60> for more info.\n * See this markdown in a particular renderer to see what works:\n *\n * ```markdown\n * | | A (letter inside) | B (punctuation inside) | C (whitespace inside) | D (nothing inside) |\n * | ----------------------- | ----------------- | ---------------------- | --------------------- | ------------------ |\n * | 1 (letter outside) | x*y*z | x*.*z | x* *z | x**z |\n * | 2 (punctuation outside) | .*y*. | .*.*. | .* *. | .**. |\n * | 3 (whitespace outside) | x *y* z | x *.* z | x * * z | x ** z |\n * | 4 (nothing outside) | *x* | *.* | * * | ** |\n * ```\n *\n * @param {number} outside\n * Code point on the outer side of the run.\n * @param {number} inside\n * Code point on the inner side of the run.\n * @param {'*' | '_'} marker\n * Marker of the run.\n * Underscores are handled more strictly (they form less often) than\n * asterisks.\n * @returns {EncodeSides}\n * Whether to encode characters.\n */\n// Important: punctuation must never be encoded.\n// Punctuation is solely used by markdown constructs.\n// And by encoding itself.\n// Encoding them will break constructs or double encode things.\nexport function encodeInfo(outside, inside, marker) {\n const outsideKind = classifyCharacter(outside)\n const insideKind = classifyCharacter(inside)\n\n // Letter outside:\n if (outsideKind === undefined) {\n return insideKind === undefined\n ? // Letter inside:\n // we have to encode *both* letters for `_` as it is looser.\n // it already forms for `*` (and GFMs `~`).\n marker === '_'\n ? {inside: true, outside: true}\n : {inside: false, outside: false}\n : insideKind === 1\n ? // Whitespace inside: encode both (letter, whitespace).\n {inside: true, outside: true}\n : // Punctuation inside: encode outer (letter)\n {inside: false, outside: true}\n }\n\n // Whitespace outside:\n if (outsideKind === 1) {\n return insideKind === undefined\n ? // Letter inside: already forms.\n {inside: false, outside: false}\n : insideKind === 1\n ? // Whitespace inside: encode both (whitespace).\n {inside: true, outside: true}\n : // Punctuation inside: already forms.\n {inside: false, outside: false}\n }\n\n // Punctuation outside:\n return insideKind === undefined\n ? // Letter inside: already forms.\n {inside: false, outside: false}\n : insideKind === 1\n ? // Whitespace inside: encode inner (whitespace).\n {inside: true, outside: false}\n : // Punctuation inside: already forms.\n {inside: false, outside: false}\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Emphasis, Parents} from 'mdast'\n */\n\nimport {checkEmphasis} from '../util/check-emphasis.js'\nimport {encodeCharacterReference} from '../util/encode-character-reference.js'\nimport {encodeInfo} from '../util/encode-info.js'\n\nemphasis.peek = emphasisPeek\n\n/**\n * @param {Emphasis} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function emphasis(node, _, state, info) {\n const marker = checkEmphasis(state)\n const exit = state.enter('emphasis')\n const tracker = state.createTracker(info)\n const before = tracker.move(marker)\n\n let between = tracker.move(\n state.containerPhrasing(node, {\n after: marker,\n before,\n ...tracker.current()\n })\n )\n const betweenHead = between.charCodeAt(0)\n const open = encodeInfo(\n info.before.charCodeAt(info.before.length - 1),\n betweenHead,\n marker\n )\n\n if (open.inside) {\n between = encodeCharacterReference(betweenHead) + between.slice(1)\n }\n\n const betweenTail = between.charCodeAt(between.length - 1)\n const close = encodeInfo(info.after.charCodeAt(0), betweenTail, marker)\n\n if (close.inside) {\n between = between.slice(0, -1) + encodeCharacterReference(betweenTail)\n }\n\n const after = tracker.move(marker)\n\n exit()\n\n state.attentionEncodeSurroundingInfo = {\n after: close.outside,\n before: open.outside\n }\n return before + between + after\n}\n\n/**\n * @param {Emphasis} _\n * @param {Parents | undefined} _1\n * @param {State} state\n * @returns {string}\n */\nfunction emphasisPeek(_, _1, state) {\n return state.options.emphasis || '*'\n}\n","/**\n * @import {State} from 'mdast-util-to-markdown'\n * @import {Heading} from 'mdast'\n */\n\nimport {EXIT, visit} from 'unist-util-visit'\nimport {toString} from 'mdast-util-to-string'\n\n/**\n * @param {Heading} node\n * @param {State} state\n * @returns {boolean}\n */\nexport function formatHeadingAsSetext(node, state) {\n let literalWithBreak = false\n\n // Look for literals with a line break.\n // Note that this also\n visit(node, function (node) {\n if (\n ('value' in node && /\\r?\\n|\\r/.test(node.value)) ||\n node.type === 'break'\n ) {\n literalWithBreak = true\n return EXIT\n }\n })\n\n return Boolean(\n (!node.depth || node.depth < 3) &&\n toString(node) &&\n (state.options.setext || literalWithBreak)\n )\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Heading, Parents} from 'mdast'\n */\n\nimport {encodeCharacterReference} from '../util/encode-character-reference.js'\nimport {formatHeadingAsSetext} from '../util/format-heading-as-setext.js'\n\n/**\n * @param {Heading} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function heading(node, _, state, info) {\n const rank = Math.max(Math.min(6, node.depth || 1), 1)\n const tracker = state.createTracker(info)\n\n if (formatHeadingAsSetext(node, state)) {\n const exit = state.enter('headingSetext')\n const subexit = state.enter('phrasing')\n const value = state.containerPhrasing(node, {\n ...tracker.current(),\n before: '\\n',\n after: '\\n'\n })\n subexit()\n exit()\n\n return (\n value +\n '\\n' +\n (rank === 1 ? '=' : '-').repeat(\n // The whole size…\n value.length -\n // Minus the position of the character after the last EOL (or\n // 0 if there is none)…\n (Math.max(value.lastIndexOf('\\r'), value.lastIndexOf('\\n')) + 1)\n )\n )\n }\n\n const sequence = '#'.repeat(rank)\n const exit = state.enter('headingAtx')\n const subexit = state.enter('phrasing')\n\n // Note: for proper tracking, we should reset the output positions when there\n // is no content returned, because then the space is not output.\n // Practically, in that case, there is no content, so it doesn’t matter that\n // we’ve tracked one too many characters.\n tracker.move(sequence + ' ')\n\n let value = state.containerPhrasing(node, {\n before: '# ',\n after: '\\n',\n ...tracker.current()\n })\n\n if (/^[\\t ]/.test(value)) {\n // To do: what effect has the character reference on tracking?\n value = encodeCharacterReference(value.charCodeAt(0)) + value.slice(1)\n }\n\n value = value ? sequence + ' ' + value : sequence\n\n if (state.options.closeAtx) {\n value += ' ' + sequence\n }\n\n subexit()\n exit()\n\n return value\n}\n","/**\n * @import {Html} from 'mdast'\n */\n\nhtml.peek = htmlPeek\n\n/**\n * @param {Html} node\n * @returns {string}\n */\nexport function html(node) {\n return node.value || ''\n}\n\n/**\n * @returns {string}\n */\nfunction htmlPeek() {\n return '<'\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Image, Parents} from 'mdast'\n */\n\nimport {checkQuote} from '../util/check-quote.js'\n\nimage.peek = imagePeek\n\n/**\n * @param {Image} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function image(node, _, state, info) {\n const quote = checkQuote(state)\n const suffix = quote === '\"' ? 'Quote' : 'Apostrophe'\n const exit = state.enter('image')\n let subexit = state.enter('label')\n const tracker = state.createTracker(info)\n let value = tracker.move('![')\n value += tracker.move(\n state.safe(node.alt, {before: value, after: ']', ...tracker.current()})\n )\n value += tracker.move('](')\n\n subexit()\n\n if (\n // If there’s no url but there is a title…\n (!node.url && node.title) ||\n // If there are control characters or whitespace.\n /[\\0- \\u007F]/.test(node.url)\n ) {\n subexit = state.enter('destinationLiteral')\n value += tracker.move('<')\n value += tracker.move(\n state.safe(node.url, {before: value, after: '>', ...tracker.current()})\n )\n value += tracker.move('>')\n } else {\n // No whitespace, raw is prettier.\n subexit = state.enter('destinationRaw')\n value += tracker.move(\n state.safe(node.url, {\n before: value,\n after: node.title ? ' ' : ')',\n ...tracker.current()\n })\n )\n }\n\n subexit()\n\n if (node.title) {\n subexit = state.enter(`title${suffix}`)\n value += tracker.move(' ' + quote)\n value += tracker.move(\n state.safe(node.title, {\n before: value,\n after: quote,\n ...tracker.current()\n })\n )\n value += tracker.move(quote)\n subexit()\n }\n\n value += tracker.move(')')\n exit()\n\n return value\n}\n\n/**\n * @returns {string}\n */\nfunction imagePeek() {\n return '!'\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {ImageReference, Parents} from 'mdast'\n */\n\nimageReference.peek = imageReferencePeek\n\n/**\n * @param {ImageReference} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function imageReference(node, _, state, info) {\n const type = node.referenceType\n const exit = state.enter('imageReference')\n let subexit = state.enter('label')\n const tracker = state.createTracker(info)\n let value = tracker.move('![')\n const alt = state.safe(node.alt, {\n before: value,\n after: ']',\n ...tracker.current()\n })\n value += tracker.move(alt + '][')\n\n subexit()\n // Hide the fact that we’re in phrasing, because escapes don’t work.\n const stack = state.stack\n state.stack = []\n subexit = state.enter('reference')\n // Note: for proper tracking, we should reset the output positions when we end\n // up making a `shortcut` reference, because then there is no brace output.\n // Practically, in that case, there is no content, so it doesn’t matter that\n // we’ve tracked one too many characters.\n const reference = state.safe(state.associationId(node), {\n before: value,\n after: ']',\n ...tracker.current()\n })\n subexit()\n state.stack = stack\n exit()\n\n if (type === 'full' || !alt || alt !== reference) {\n value += tracker.move(reference + ']')\n } else if (type === 'shortcut') {\n // Remove the unwanted `[`.\n value = value.slice(0, -1)\n } else {\n value += tracker.move(']')\n }\n\n return value\n}\n\n/**\n * @returns {string}\n */\nfunction imageReferencePeek() {\n return '!'\n}\n","/**\n * @import {State} from 'mdast-util-to-markdown'\n * @import {InlineCode, Parents} from 'mdast'\n */\n\ninlineCode.peek = inlineCodePeek\n\n/**\n * @param {InlineCode} node\n * @param {Parents | 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’t 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’t 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 = state.compilePattern(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","/**\n * @import {State} from 'mdast-util-to-markdown'\n * @import {Link} from 'mdast'\n */\n\nimport {toString} from 'mdast-util-to-string'\n\n/**\n * @param {Link} node\n * @param {State} state\n * @returns {boolean}\n */\nexport function formatLinkAsAutolink(node, state) {\n const raw = toString(node)\n\n return Boolean(\n !state.options.resourceLink &&\n // If there’s a url…\n node.url &&\n // And there’s a no title…\n !node.title &&\n // And the content of `node` is a single text node…\n node.children &&\n node.children.length === 1 &&\n node.children[0].type === 'text' &&\n // And if the url is the same as the content…\n (raw === node.url || 'mailto:' + raw === node.url) &&\n // And that starts w/ a protocol…\n /^[a-z][a-z+.-]+:/i.test(node.url) &&\n // And that doesn’t contain ASCII control codes (character escapes and\n // references don’t work), space, or angle brackets…\n !/[\\0- <>\\u007F]/.test(node.url)\n )\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Link, Parents} from 'mdast'\n * @import {Exit} from '../types.js'\n */\n\nimport {checkQuote} from '../util/check-quote.js'\nimport {formatLinkAsAutolink} from '../util/format-link-as-autolink.js'\n\nlink.peek = linkPeek\n\n/**\n * @param {Link} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function link(node, _, state, info) {\n const quote = checkQuote(state)\n const suffix = quote === '\"' ? 'Quote' : 'Apostrophe'\n const tracker = state.createTracker(info)\n /** @type {Exit} */\n let exit\n /** @type {Exit} */\n let subexit\n\n if (formatLinkAsAutolink(node, state)) {\n // Hide the fact that we’re in phrasing, because escapes don’t work.\n const stack = state.stack\n state.stack = []\n exit = state.enter('autolink')\n let value = tracker.move('<')\n value += tracker.move(\n state.containerPhrasing(node, {\n before: value,\n after: '>',\n ...tracker.current()\n })\n )\n value += tracker.move('>')\n exit()\n state.stack = stack\n return value\n }\n\n exit = state.enter('link')\n subexit = state.enter('label')\n let value = tracker.move('[')\n value += tracker.move(\n state.containerPhrasing(node, {\n before: value,\n after: '](',\n ...tracker.current()\n })\n )\n value += tracker.move('](')\n subexit()\n\n if (\n // If there’s no url but there is a title…\n (!node.url && node.title) ||\n // If there are control characters or whitespace.\n /[\\0- \\u007F]/.test(node.url)\n ) {\n subexit = state.enter('destinationLiteral')\n value += tracker.move('<')\n value += tracker.move(\n state.safe(node.url, {before: value, after: '>', ...tracker.current()})\n )\n value += tracker.move('>')\n } else {\n // No whitespace, raw is prettier.\n subexit = state.enter('destinationRaw')\n value += tracker.move(\n state.safe(node.url, {\n before: value,\n after: node.title ? ' ' : ')',\n ...tracker.current()\n })\n )\n }\n\n subexit()\n\n if (node.title) {\n subexit = state.enter(`title${suffix}`)\n value += tracker.move(' ' + quote)\n value += tracker.move(\n state.safe(node.title, {\n before: value,\n after: quote,\n ...tracker.current()\n })\n )\n value += tracker.move(quote)\n subexit()\n }\n\n value += tracker.move(')')\n\n exit()\n return value\n}\n\n/**\n * @param {Link} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @returns {string}\n */\nfunction linkPeek(node, _, state) {\n return formatLinkAsAutolink(node, state) ? '<' : '['\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {LinkReference, Parents} from 'mdast'\n */\n\nlinkReference.peek = linkReferencePeek\n\n/**\n * @param {LinkReference} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function linkReference(node, _, state, info) {\n const type = node.referenceType\n const exit = state.enter('linkReference')\n let subexit = state.enter('label')\n const tracker = state.createTracker(info)\n let value = tracker.move('[')\n const text = state.containerPhrasing(node, {\n before: value,\n after: ']',\n ...tracker.current()\n })\n value += tracker.move(text + '][')\n\n subexit()\n // Hide the fact that we’re in phrasing, because escapes don’t work.\n const stack = state.stack\n state.stack = []\n subexit = state.enter('reference')\n // Note: for proper tracking, we should reset the output positions when we end\n // up making a `shortcut` reference, because then there is no brace output.\n // Practically, in that case, there is no content, so it doesn’t matter that\n // we’ve tracked one too many characters.\n const reference = state.safe(state.associationId(node), {\n before: value,\n after: ']',\n ...tracker.current()\n })\n subexit()\n state.stack = stack\n exit()\n\n if (type === 'full' || !text || text !== reference) {\n value += tracker.move(reference + ']')\n } else if (type === 'shortcut') {\n // Remove the unwanted `[`.\n value = value.slice(0, -1)\n } else {\n value += tracker.move(']')\n }\n\n return value\n}\n\n/**\n * @returns {string}\n */\nfunction linkReferencePeek() {\n return '['\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\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 * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\nimport {checkBullet} from './check-bullet.js'\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['bullet'], null | undefined>}\n */\nexport function checkBulletOther(state) {\n const bullet = checkBullet(state)\n const bulletOther = state.options.bulletOther\n\n if (!bulletOther) {\n return bullet === '*' ? '-' : '*'\n }\n\n if (bulletOther !== '*' && bulletOther !== '+' && bulletOther !== '-') {\n throw new Error(\n 'Cannot serialize items with `' +\n bulletOther +\n '` for `options.bulletOther`, expected `*`, `+`, or `-`'\n )\n }\n\n if (bulletOther === bullet) {\n throw new Error(\n 'Expected `bullet` (`' +\n bullet +\n '`) and `bulletOther` (`' +\n bulletOther +\n '`) to be different'\n )\n }\n\n return bulletOther\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['bulletOrdered'], null | undefined>}\n */\nexport function checkBulletOrdered(state) {\n const marker = state.options.bulletOrdered || '.'\n\n if (marker !== '.' && marker !== ')') {\n throw new Error(\n 'Cannot serialize items with `' +\n marker +\n '` for `options.bulletOrdered`, expected `.` or `)`'\n )\n }\n\n return marker\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['rule'], null | undefined>}\n */\nexport function checkRule(state) {\n const marker = state.options.rule || '*'\n\n if (marker !== '*' && marker !== '-' && marker !== '_') {\n throw new Error(\n 'Cannot serialize rules with `' +\n marker +\n '` for `options.rule`, expected `*`, `-`, or `_`'\n )\n }\n\n return marker\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {List, Parents} from 'mdast'\n */\n\nimport {checkBullet} from '../util/check-bullet.js'\nimport {checkBulletOther} from '../util/check-bullet-other.js'\nimport {checkBulletOrdered} from '../util/check-bullet-ordered.js'\nimport {checkRule} from '../util/check-rule.js'\n\n/**\n * @param {List} node\n * @param {Parents | undefined} parent\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function list(node, parent, state, info) {\n const exit = state.enter('list')\n const bulletCurrent = state.bulletCurrent\n /** @type {string} */\n let bullet = node.ordered ? checkBulletOrdered(state) : checkBullet(state)\n /** @type {string} */\n const bulletOther = node.ordered\n ? bullet === '.'\n ? ')'\n : '.'\n : checkBulletOther(state)\n let useDifferentMarker =\n parent && state.bulletLastUsed ? bullet === state.bulletLastUsed : false\n\n if (!node.ordered) {\n const firstListItem = node.children ? node.children[0] : undefined\n\n // If there’s an empty first list item directly in two list items,\n // we have to use a different bullet:\n //\n // ```markdown\n // * - *\n // ```\n //\n // …because otherwise it would become one big thematic break.\n if (\n // Bullet could be used as a thematic break marker:\n (bullet === '*' || bullet === '-') &&\n // Empty first list item:\n firstListItem &&\n (!firstListItem.children || !firstListItem.children[0]) &&\n // Directly in two other list items:\n state.stack[state.stack.length - 1] === 'list' &&\n state.stack[state.stack.length - 2] === 'listItem' &&\n state.stack[state.stack.length - 3] === 'list' &&\n state.stack[state.stack.length - 4] === 'listItem' &&\n // That are each the first child.\n state.indexStack[state.indexStack.length - 1] === 0 &&\n state.indexStack[state.indexStack.length - 2] === 0 &&\n state.indexStack[state.indexStack.length - 3] === 0\n ) {\n useDifferentMarker = true\n }\n\n // If there’s a thematic break at the start of the first list item,\n // we have to use a different bullet:\n //\n // ```markdown\n // * ---\n // ```\n //\n // …because otherwise it would become one big thematic break.\n if (checkRule(state) === bullet && firstListItem) {\n let index = -1\n\n while (++index < node.children.length) {\n const item = node.children[index]\n\n if (\n item &&\n item.type === 'listItem' &&\n item.children &&\n item.children[0] &&\n item.children[0].type === 'thematicBreak'\n ) {\n useDifferentMarker = true\n break\n }\n }\n }\n }\n\n if (useDifferentMarker) {\n bullet = bulletOther\n }\n\n state.bulletCurrent = bullet\n const value = state.containerFlow(node, info)\n state.bulletLastUsed = bullet\n state.bulletCurrent = bulletCurrent\n exit()\n return value\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\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 || 'one'\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 * @import {Info, Map, State} from 'mdast-util-to-markdown'\n * @import {ListItem, Parents} from 'mdast'\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 {Parents | 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 * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Paragraph, Parents} from 'mdast'\n */\n\n/**\n * @param {Paragraph} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function paragraph(node, _, state, info) {\n const exit = state.enter('paragraph')\n const subexit = state.enter('phrasing')\n const value = state.containerPhrasing(node, info)\n subexit()\n exit()\n return value\n}\n","/**\n * @typedef {import('mdast').Html} Html\n * @typedef {import('mdast').PhrasingContent} PhrasingContent\n */\n\nimport {convert} from 'unist-util-is'\n\n/**\n * Check if the given value is *phrasing content*.\n *\n * > 👉 **Note**: Excludes `html`, which can be both phrasing or flow.\n *\n * @param node\n * Thing to check, typically `Node`.\n * @returns\n * Whether `value` is phrasing content.\n */\n\nexport const phrasing =\n /** @type {(node?: unknown) => node is Exclude<PhrasingContent, Html>} */\n (\n convert([\n 'break',\n 'delete',\n 'emphasis',\n // To do: next major: removed since footnotes were added to GFM.\n 'footnote',\n 'footnoteReference',\n 'image',\n 'imageReference',\n 'inlineCode',\n // Enabled by `mdast-util-math`:\n 'inlineMath',\n 'link',\n 'linkReference',\n // Enabled by `mdast-util-mdx`:\n 'mdxJsxTextElement',\n // Enabled by `mdast-util-mdx`:\n 'mdxTextExpression',\n 'strong',\n 'text',\n // Enabled by `mdast-util-directive`:\n 'textDirective'\n ])\n )\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Parents, Root} from 'mdast'\n */\n\nimport {phrasing} from 'mdast-util-phrasing'\n\n/**\n * @param {Root} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function root(node, _, state, info) {\n // Note: `html` nodes are ambiguous.\n const hasPhrasing = node.children.some(function (d) {\n return phrasing(d)\n })\n\n const container = hasPhrasing ? state.containerPhrasing : state.containerFlow\n return container.call(state, node, info)\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['strong'], null | undefined>}\n */\nexport function checkStrong(state) {\n const marker = state.options.strong || '*'\n\n if (marker !== '*' && marker !== '_') {\n throw new Error(\n 'Cannot serialize strong with `' +\n marker +\n '` for `options.strong`, expected `*`, or `_`'\n )\n }\n\n return marker\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Parents, Strong} from 'mdast'\n */\n\nimport {checkStrong} from '../util/check-strong.js'\nimport {encodeCharacterReference} from '../util/encode-character-reference.js'\nimport {encodeInfo} from '../util/encode-info.js'\n\nstrong.peek = strongPeek\n\n/**\n * @param {Strong} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function strong(node, _, state, info) {\n const marker = checkStrong(state)\n const exit = state.enter('strong')\n const tracker = state.createTracker(info)\n const before = tracker.move(marker + marker)\n\n let between = tracker.move(\n state.containerPhrasing(node, {\n after: marker,\n before,\n ...tracker.current()\n })\n )\n const betweenHead = between.charCodeAt(0)\n const open = encodeInfo(\n info.before.charCodeAt(info.before.length - 1),\n betweenHead,\n marker\n )\n\n if (open.inside) {\n between = encodeCharacterReference(betweenHead) + between.slice(1)\n }\n\n const betweenTail = between.charCodeAt(between.length - 1)\n const close = encodeInfo(info.after.charCodeAt(0), betweenTail, marker)\n\n if (close.inside) {\n between = between.slice(0, -1) + encodeCharacterReference(betweenTail)\n }\n\n const after = tracker.move(marker + marker)\n\n exit()\n\n state.attentionEncodeSurroundingInfo = {\n after: close.outside,\n before: open.outside\n }\n return before + between + after\n}\n\n/**\n * @param {Strong} _\n * @param {Parents | undefined} _1\n * @param {State} state\n * @returns {string}\n */\nfunction strongPeek(_, _1, state) {\n return state.options.strong || '*'\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Parents, Text} from 'mdast'\n */\n\n/**\n * @param {Text} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function text(node, _, state, info) {\n return state.safe(node.value, info)\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['ruleRepetition'], null | undefined>}\n */\nexport function checkRuleRepetition(state) {\n const repetition = state.options.ruleRepetition || 3\n\n if (repetition < 3) {\n throw new Error(\n 'Cannot serialize rules with repetition `' +\n repetition +\n '` for `options.ruleRepetition`, expected `3` or more'\n )\n }\n\n return repetition\n}\n","/**\n * @import {State} from 'mdast-util-to-markdown'\n * @import {Parents, ThematicBreak} from 'mdast'\n */\n\nimport {checkRuleRepetition} from '../util/check-rule-repetition.js'\nimport {checkRule} from '../util/check-rule.js'\n\n/**\n * @param {ThematicBreak} _\n * @param {Parents | undefined} _1\n * @param {State} state\n * @returns {string}\n */\nexport function thematicBreak(_, _1, state) {\n const value = (\n checkRule(state) + (state.options.ruleSpaces ? ' ' : '')\n ).repeat(checkRuleRepetition(state))\n\n return state.options.ruleSpaces ? value.slice(0, -1) : value\n}\n","import {blockquote} from './blockquote.js'\nimport {hardBreak} from './break.js'\nimport {code} from './code.js'\nimport {definition} from './definition.js'\nimport {emphasis} from './emphasis.js'\nimport {heading} from './heading.js'\nimport {html} from './html.js'\nimport {image} from './image.js'\nimport {imageReference} from './image-reference.js'\nimport {inlineCode} from './inline-code.js'\nimport {link} from './link.js'\nimport {linkReference} from './link-reference.js'\nimport {list} from './list.js'\nimport {listItem} from './list-item.js'\nimport {paragraph} from './paragraph.js'\nimport {root} from './root.js'\nimport {strong} from './strong.js'\nimport {text} from './text.js'\nimport {thematicBreak} from './thematic-break.js'\n\n/**\n * Default (CommonMark) handlers.\n */\nexport const handle = {\n blockquote,\n break: hardBreak,\n code,\n definition,\n emphasis,\n hardBreak,\n heading,\n html,\n image,\n imageReference,\n inlineCode,\n link,\n linkReference,\n list,\n listItem,\n paragraph,\n root,\n strong,\n text,\n thematicBreak\n}\n","/**\n * @typedef {import('mdast').InlineCode} InlineCode\n * @typedef {import('mdast').Table} Table\n * @typedef {import('mdast').TableCell} TableCell\n * @typedef {import('mdast').TableRow} TableRow\n *\n * @typedef {import('markdown-table').Options} 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').State} State\n * @typedef {import('mdast-util-to-markdown').Info} Info\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 (default:\n * `true`).\n * @property {boolean | null | undefined} [tablePipeAlign=true]\n * Whether to align the delimiters (default: `true`).\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 (optional).\n */\n\nimport {ok as assert} from 'devlop'\nimport {markdownTable} from 'markdown-table'\nimport {defaultHandlers} from 'mdast-util-to-markdown'\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM tables in\n * markdown.\n *\n * @returns {FromMarkdownExtension}\n * Extension for `mdast-util-from-markdown` to enable GFM tables.\n */\nexport function gfmTableFromMarkdown() {\n return {\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/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterTable(token) {\n const align = token._align\n assert(align, 'expected `_align` on table')\n this.enter(\n {\n type: 'table',\n align: align.map(function (d) {\n return d === 'none' ? null : d\n }),\n children: []\n },\n token\n )\n this.data.inTable = true\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitTable(token) {\n this.exit(token)\n this.data.inTable = undefined\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.data.inTable) {\n value = value.replace(/\\\\([\\\\|])/g, replace)\n }\n\n const node = this.stack[this.stack.length - 1]\n assert(node.type === 'inlineCode')\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’t (but can’t 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 inlineCode: inlineCodeWithTable,\n table: handleTable,\n tableCell: handleTableCell,\n tableRow: handleTableRow\n }\n }\n\n /**\n * @type {ToMarkdownHandle}\n * @param {Table} node\n */\n function handleTable(node, _, state, info) {\n return serializeData(handleTableAsData(node, state, info), node.align)\n }\n\n /**\n * This function isn’t 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, _, state, info) {\n const row = handleTableRowAsData(node, state, info)\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, _, state, info) {\n const exit = state.enter('tableCell')\n const subexit = state.enter('phrasing')\n const value = state.containerPhrasing(node, {\n ...info,\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 {State} state\n * @param {Info} info\n */\n function handleTableAsData(node, state, info) {\n const children = node.children\n let index = -1\n /** @type {Array<Array<string>>} */\n const result = []\n const subexit = state.enter('table')\n\n while (++index < children.length) {\n result[index] = handleTableRowAsData(children[index], state, info)\n }\n\n subexit()\n\n return result\n }\n\n /**\n * @param {TableRow} node\n * @param {State} state\n * @param {Info} info\n */\n function handleTableRowAsData(node, state, info) {\n const children = node.children\n let index = -1\n /** @type {Array<string>} */\n const result = []\n const subexit = state.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(children[index], node, state, info)\n }\n\n subexit()\n\n return result\n }\n\n /**\n * @type {ToMarkdownHandle}\n * @param {InlineCode} node\n */\n function inlineCodeWithTable(node, parent, state) {\n let value = defaultHandlers.inlineCode(node, parent, state)\n\n if (state.stack.includes('tableCell')) {\n value = value.replace(/\\|/g, '\\\\$&')\n }\n\n return value\n }\n}\n","/**\n * @typedef {import('mdast').ListItem} ListItem\n * @typedef {import('mdast').Paragraph} Paragraph\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\nimport {ok as assert} from 'devlop'\nimport {defaultHandlers} from 'mdast-util-to-markdown'\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM task\n * list items in markdown.\n *\n * @returns {FromMarkdownExtension}\n * Extension for `mdast-util-from-markdown` to enable GFM task list items.\n */\nexport function gfmTaskListItemFromMarkdown() {\n return {\n exit: {\n taskListCheckValueChecked: exitCheck,\n taskListCheckValueUnchecked: exitCheck,\n paragraph: exitParagraphWithTaskListItem\n }\n }\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM task list\n * items in markdown.\n *\n * @returns {ToMarkdownExtension}\n * Extension for `mdast-util-to-markdown` to enable GFM task list items.\n */\nexport function gfmTaskListItemToMarkdown() {\n return {\n unsafe: [{atBreak: true, character: '-', after: '[:|-]'}],\n handlers: {listItem: listItemWithTaskListItem}\n }\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitCheck(token) {\n // We’re always in a paragraph, in a list item.\n const node = this.stack[this.stack.length - 2]\n assert(node.type === 'listItem')\n node.checked = token.type === 'taskListCheckValueChecked'\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitParagraphWithTaskListItem(token) {\n const parent = this.stack[this.stack.length - 2]\n\n if (\n parent &&\n parent.type === 'listItem' &&\n typeof parent.checked === 'boolean'\n ) {\n const node = this.stack[this.stack.length - 1]\n assert(node.type === 'paragraph')\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, state, info) {\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 = state.createTracker(info)\n\n if (checkable) {\n tracker.move(checkbox)\n }\n\n let value = defaultHandlers.listItem(node, parent, state, {\n ...info,\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 * @import {Extension as FromMarkdownExtension} from 'mdast-util-from-markdown'\n * @import {Options} from 'mdast-util-gfm'\n * @import {Options as ToMarkdownExtension} from 'mdast-util-to-markdown'\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 (optional).\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(options),\n gfmStrikethroughToMarkdown(),\n gfmTableToMarkdown(options),\n gfmTaskListItemToMarkdown()\n ]\n }\n}\n","/**\n * @import {Code, ConstructRecord, Event, Extension, Previous, State, TokenizeContext, Tokenizer} from 'micromark-util-types'\n */\n\nimport { asciiAlpha, asciiAlphanumeric, asciiControl, markdownLineEndingOrSpace, unicodePunctuation, unicodeWhitespace } 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 name: 'wwwAutolink',\n tokenize: tokenizeWwwAutolink,\n previous: previousWww\n};\nconst protocolAutolink = {\n name: 'protocolAutolink',\n tokenize: tokenizeProtocolAutolink,\n previous: previousProtocol\n};\nconst emailAutolink = {\n name: 'emailAutolink',\n tokenize: tokenizeEmailAutolink,\n previous: previousEmail\n};\n\n/** @type {ConstructRecord} */\nconst text = {};\n\n/**\n * Create an extension for `micromark` to support GitHub autolink literal\n * syntax.\n *\n * @returns {Extension}\n * Extension for `micromark` that can be passed in `extensions` to enable GFM\n * autolink literal syntax.\n */\nexport function gfmAutolinkLiteral() {\n return {\n text\n };\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;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’s 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 (!gfmAtext(code) || !previousEmail.call(self, self.previous) || previousUnbalanced(self.events)) {\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(emailDomainDotTrail, emailDomainAfter, emailDomainDot)(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’d 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’t 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 (code !== 87 && code !== 119 || !previousWww.call(self, self.previous) || previousUnbalanced(self.events)) {\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(wwwPrefix, effects.attempt(domain, effects.attempt(path, wwwAfter), nok), nok)(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 ((code === 72 || code === 104) && previousProtocol.call(self, self.previous) && !previousUnbalanced(self.events)) {\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 || asciiControl(code) || markdownLineEndingOrSpace(code) || unicodeWhitespace(code) || unicodePunctuation(code) ? nok(code) : 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.點看.com`,\n // so that’s 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 (code === null || markdownLineEndingOrSpace(code) || unicodeWhitespace(code) || code !== 45 && unicodePunctuation(code)) {\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’s 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’s GH says a dot is needed, but it’s 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’t 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 (code === 33 || code === 34 || code === 38 || code === 39 || code === 41 || code === 42 || code === 44 || code === 46 || code === 58 || code === 59 || code === 60 || code === 63 || code === 93 || code === 95 || code === 126) {\n return effects.check(trail, ok, pathAtPunctuation)(code);\n }\n if (code === null || markdownLineEndingOrSpace(code) || unicodeWhitespace(code)) {\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 (code === 33 || code === 34 || code === 39 || code === 41 || code === 42 || code === 44 || code === 46 || code === 58 || code === 59 || code === 63 || code === 95 || code === 126) {\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 trailCharacterReferenceStart;\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 || markdownLineEndingOrSpace(code) || unicodeWhitespace(code)) {\n return ok(code);\n }\n return nok(code);\n }\n\n /**\n * In trail, after `]`.\n *\n * > 👉 **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 (code === null || code === 40 || code === 91 || markdownLineEndingOrSpace(code) || unicodeWhitespace(code)) {\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&).\n * ^\n * ```\n *\n * @type {State}\n */\n function trailCharacterReferenceStart(code) {\n // When non-alpha, it’s not a trail.\n return asciiAlpha(code) ? trailCharacterReferenceInside(code) : nok(code);\n }\n\n /**\n * In character-reference like trail.\n *\n * ```markdown\n * > | https://example.com&).\n * ^\n * ```\n *\n * @type {State}\n */\n function trailCharacterReferenceInside(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 trailCharacterReferenceInside;\n }\n\n // It’s 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 code === null || code === 40 || code === 42 || code === 95 || code === 91 || code === 93 || code === 126 || markdownLineEndingOrSpace(code);\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 “inside” atext.\n // The reference code is a bit weird, but that’s 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 code === 43 || code === 45 || code === 46 || code === 95 || asciiAlphanumeric(code);\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 ((token.type === 'labelLink' || token.type === 'labelImage') && !token._balanced) {\n result = true;\n break;\n }\n\n // If we’ve 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 “walked into” w/o finding\n // anything.\n events[events.length - 1][1]._gfmAutolinkLiteralWalkedInto = true;\n }\n return result;\n}","/**\n * @import {Event, Exiter, Extension, Resolver, State, Token, TokenizeContext, Tokenizer} from 'micromark-util-types'\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 name: 'gfmFootnoteDefinition',\n tokenize: tokenizeDefinitionStart,\n continuation: {\n tokenize: tokenizeDefinitionContinuation\n },\n exit: gfmFootnoteDefinitionEnd\n }\n },\n text: {\n [91]: {\n name: 'gfmFootnoteCall',\n tokenize: tokenizeGfmFootnoteCall\n },\n [93]: {\n name: 'gfmPotentialFootnoteCall',\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 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’ve walked far enough.\n if (token.type === 'gfmFootnoteCall' || token.type === \"labelLink\" || token.type === \"label\" || token.type === \"image\" || token.type === \"link\") {\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(self.sliceSerialize({\n start: labelStart.end,\n end: self.now()\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 (events[index][1].type === \"labelImage\" && events[index][0] === 'enter') {\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], events[index + 2], ['enter', call, context],\n // The `[`\n events[index + 3], events[index + 4],\n // The `^`.\n ['enter', marker, context], ['exit', marker, context],\n // Everything in between.\n ['enter', string, context], ['enter', chunk, context], ['exit', chunk, context], ['exit', string, context],\n // The ending (`]`, properly parsed and labelled).\n events[events.length - 2], events[events.length - 1], ['exit', call, context]];\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 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’t 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 || code === 91 || markdownLineEndingOrSpace(code)) {\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 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 * > 👉 **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 || code === 91 || markdownLineEndingOrSpace(code)) {\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 * > 👉 **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(effects, whitespaceAfter, 'gfmFootnoteDefinitionWhitespace');\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(effects, afterPrefix, 'gfmFootnoteDefinitionIndent', 4 + 1);\n\n /**\n * @type {State}\n */\n function afterPrefix(code) {\n const tail = self.events[self.events.length - 1];\n return tail && tail[1].type === 'gfmFootnoteDefinitionIndent' && tail[2].sliceSerialize(tail[1], true).length === 4 ? ok(code) : nok(code);\n }\n}","/**\n * @import {Options} from 'micromark-extension-gfm-strikethrough'\n * @import {Event, Extension, Resolver, State, Token, TokenizeContext, Tokenizer} from 'micromark-util-types'\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 name: 'strikethrough',\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 (events[index][0] === 'enter' && events[index][1].type === 'strikethroughSequenceTemporary' && events[index][1]._close) {\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 (events[open][0] === 'exit' && events[open][1].type === 'strikethroughSequenceTemporary' && events[open][1]._open &&\n // If the sizes are the same:\n events[index][1].end.offset - events[index][1].start.offset === events[open][1].end.offset - events[open][1].start.offset) {\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 = [['enter', strikethrough, context], ['enter', events[open][1], context], ['exit', events[open][1], context], ['enter', text, context]];\n const insideSpan = context.parser.constructs.insideSpan.null;\n if (insideSpan) {\n // Between.\n splice(nextEvents, nextEvents.length, 0, resolveAll(insideSpan, events.slice(open + 1, index), context));\n }\n\n // Closing.\n splice(nextEvents, nextEvents.length, 0, [['exit', text, context], ['enter', events[index][1], context], ['exit', events[index][1], context], ['exit', strikethrough, context]]);\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 (previous === 126 && events[events.length - 1][1].type !== \"characterEscape\") {\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 * @import {Event} from 'micromark-util-types'\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’s 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’s 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 {undefined}\n */\n add(index, remove, add) {\n addImplementation(this, index, remove, add);\n }\n\n // To do: add this when moving to `micromark`.\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 {undefined}\n // */\n // addBefore(index, remove, add) {\n // addImplementation(this, index, remove, add, true)\n // }\n\n /**\n * Done, change the events.\n *\n * @param {Array<Event>} events\n * @returns {undefined}\n */\n consume(events) {\n this.map.sort(function (a, b) {\n return a[0] - b[0];\n });\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]), this.map[index][2]);\n\n // Truncate rest.\n events.length = this.map[index][0];\n }\n vecs.push(events.slice());\n events.length = 0;\n let slice = vecs.pop();\n while (slice) {\n for (const element of slice) {\n events.push(element);\n }\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 {undefined}\n */\nfunction addImplementation(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 by tables, use when moving to micromark.\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// // ?\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 * @import {Event} from 'micromark-util-types'\n */\n\n/**\n * @typedef {'center' | 'left' | 'none' | 'right'} Align\n */\n\n/**\n * Figure out the alignment of a GFM table.\n *\n * @param {Readonly<Array<Event>>} events\n * List of events.\n * @param {number} index\n * Table enter event.\n * @returns {Array<Align>}\n * List of aligns.\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(events[index + 1][1].type === 'tableDelimiterMarker' ? 'left' : 'none');\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 * @import {Event, Extension, Point, Resolver, State, Token, TokenizeContext, Tokenizer} from 'micromark-util-types'\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 { markdownLineEnding, markdownLineEndingOrSpace, markdownSpace } from 'micromark-util-character';\nimport { EditMap } from './edit-map.js';\nimport { gfmTableAlign } from './infer.js';\n\n/**\n * Create an HTML extension for `micromark` to support GitHub tables syntax.\n *\n * @returns {Extension}\n * Extension for `micromark` that can be passed in `extensions` to enable GFM\n * table syntax.\n */\nexport function gfmTable() {\n return {\n flow: {\n null: {\n name: 'table',\n tokenize: tokenizeTable,\n resolveAll: resolveTable\n }\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 (type === \"lineEnding\" ||\n // Note: markdown-rs uses `whitespace` instead of `linePrefix`\n type === \"linePrefix\") index--;else break;\n }\n const tail = index > -1 ? self.events[index][1].type : null;\n const next = tail === 'tableHead' || tail === 'tableRow' ? bodyRowStart : headRowBefore;\n\n // Don’t 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’t 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‘t.\n return nok(code);\n }\n if (markdownLineEnding(code)) {\n // If anything other than one pipe (ignoring whitespace) was used, it’s 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‘t.\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’ve seen a `:` or `|`.\n seen = false;\n if (markdownSpace(code)) {\n return factorySpace(effects, headDelimiterBefore, \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(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’t* 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’s 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‘t.\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’re here, we’re\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\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 (token.type === 'tableRow' || token.type === 'tableDelimiterRow') {\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 (rowKind && (token.type === \"data\" || token.type === 'tableDelimiterMarker' || token.type === 'tableDelimiterFiller')) {\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(map, context, lastCell, rowKind, undefined, currentCell);\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(map, context, lastCell, rowKind, undefined, currentCell);\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 (token.type === 'tableRow' || token.type === 'tableDelimiterRow') {\n lastTableEnd = index;\n if (lastCell[1] !== 0) {\n cell[0] = cell[1];\n currentCell = flushCell(map, context, lastCell, rowKind, index, currentCell);\n } else if (cell[1] !== 0) {\n currentCell = flushCell(map, context, cell, rowKind, index, currentCell);\n }\n rowKind = 0;\n } else if (rowKind && (token.type === \"data\" || token.type === 'tableDelimiterMarker' || token.type === 'tableDelimiterFiller')) {\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’s 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/**\n * Generate a cell.\n *\n * @param {EditMap} map\n * @param {Readonly<TokenizeContext>} context\n * @param {Readonly<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 = rowKind === 1 ? 'tableHeader' : rowKind === 2 ? 'tableDelimiter' : '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 “between” 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 {Readonly<EditMap>} map\n * @param {Readonly<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 {Readonly<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 * @import {Extension, State, TokenizeContext, Tokenizer} from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownLineEndingOrSpace, markdownSpace } from 'micromark-util-character';\nconst tasklistCheck = {\n name: 'tasklistCheck',\n tokenize: tokenizeTasklistCheck\n};\n\n/**\n * Create an HTML extension for `micromark` to support GFM task list items\n * syntax.\n *\n * @returns {Extension}\n * Extension for `micromark` that can be passed in `htmlExtensions` to\n * support GFM task list items when serializing to HTML.\n */\nexport function gfmTaskListItem() {\n return {\n text: {\n [91]: tasklistCheck\n }\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’s 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 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 tokenize: spaceThenNonSpace\n }, ok, nok)(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’s 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 * @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 (optional).\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 * @import {Root} from 'mdast'\n * @import {Options} from 'remark-gfm'\n * @import {} from 'remark-parse'\n * @import {} from 'remark-stringify'\n * @import {Processor} from 'unified'\n */\n\nimport {gfmFromMarkdown, gfmToMarkdown} from 'mdast-util-gfm'\nimport {gfm} from 'micromark-extension-gfm'\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Add support GFM (autolink literals, footnotes, strikethrough, tables,\n * tasklists).\n *\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {undefined}\n * Nothing.\n */\nexport default function remarkGfm(options) {\n // @ts-expect-error: TS is wrong about `this`.\n // eslint-disable-next-line unicorn/no-this-assignment\n const self = /** @type {Processor<Root>} */ (this)\n const settings = options || emptyOptions\n const data = self.data()\n\n const micromarkExtensions =\n data.micromarkExtensions || (data.micromarkExtensions = [])\n const fromMarkdownExtensions =\n data.fromMarkdownExtensions || (data.fromMarkdownExtensions = [])\n const toMarkdownExtensions =\n data.toMarkdownExtensions || (data.toMarkdownExtensions = [])\n\n micromarkExtensions.push(gfm(settings))\n fromMarkdownExtensions.push(gfmFromMarkdown())\n toMarkdownExtensions.push(gfmToMarkdown(settings))\n}\n","import ReactMarkdown, { Components } from \"react-markdown\";\nimport rehypeSanitize from \"rehype-sanitize\";\nimport remarkBreaks from \"remark-breaks\";\nimport remarkGfm from \"remark-gfm\";\n\ninterface MarkdownViewerProps {\n text: string;\n}\n\nexport const MarkdownViewer = ({ text }: MarkdownViewerProps) => {\n const normalizedText = text.replace(/\\\\n/g, \"\\n\");\n\n const components: Components = {\n p: ({ children }) => <p className=\"eloq:mb-3 eloq:last:mb-0\">{children}</p>,\n ul: ({ children }) => (\n <ul className=\"eloq:list-disc eloq:ml-5 eloq:mb-3 eloq:space-y-1\">\n {children}\n </ul>\n ),\n ol: ({ children }) => (\n <ol className=\"eloq:list-decimal eloq:ml-5 eloq:mb-3 eloq:space-y-1\">\n {children}\n </ol>\n ),\n a: ({ children, href }) => (\n <a\n href={href || \"#\"}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"eloq:underline eloq:hover:opacity-80\"\n >\n {children}\n </a>\n ),\n blockquote: ({ children }) => (\n // currentColor + opacity instead of a fixed gray: blockquotes render\n // inside message bubbles whose background (and computed text color)\n // is theme-driven, so a hardcoded gray breaks on dark bubbles.\n <blockquote className=\"eloq:border-l-4 eloq:pl-3 eloq:italic eloq:opacity-75 eloq:my-2\">\n {children}\n </blockquote>\n ),\n };\n\n return (\n <ReactMarkdown\n remarkPlugins={[remarkGfm, remarkBreaks]}\n rehypePlugins={[rehypeSanitize]}\n components={components}\n >\n {normalizedText}\n </ReactMarkdown>\n );\n};\n","import { Message, MessageData } from \"@/type\";\nimport { AlertCircle, Copy, ThumbsDown, ThumbsUp } from \"lucide-react\";\nimport { useEffect, useMemo, useState } from \"react\";\n\nimport { getContrastingTextColor } from \"@/lib/color-contrast\";\nimport { cn } from \"@/lib/utils\";\n\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogTitle,\n} from \"@/components/ui/dialog\";\n\nimport { useChatInterfaceContext } from \"@/components/chat-interface/context\";\nimport { subtitleTextClassName } from \"@/components/chat-interface/shared\";\nimport { Logo } from \"@/components/logo\";\n\nimport { useTheme } from \"@/contexts/theme.context\";\nimport { useTypedText } from \"@/hooks/use-typed-text\";\nimport { MarkdownViewer } from \"./ui/markdown-viewer\";\n\n/** Copy / thumbs-up / thumbs-down buttons beside an assistant message. */\nconst actionButtonClassName =\n \"eloq:text-gray-400 eloq:dark:text-gray-500 eloq:hover:text-primary eloq:dark:hover:text-primary eloq:transition-colors\";\n\n/**\n * One dot of the \"assistant is thinking\" indicator. Sized in em against the\n * label's own text-sm: 0.42em and 0.25em are the 5px dots and 3px gap this\n * was tuned at, kept as a ratio so the two stay in proportion if the label's\n * type size ever changes. Dark mode brightens the dots to gray-200, mirroring\n * the shimmer label's dark highlight in index.css.\n */\nconst thinkingDotClassName =\n \"eloq:h-[0.42em] eloq:w-[0.42em] eloq:rounded-full eloq:bg-gray-400 eloq:dark:bg-gray-200 eloq:animate-thinking-dot eloq:motion-reduce:animate-none eloq:motion-reduce:opacity-70\";\n\ntype MessageActionButtonsProps = Readonly<{\n messageData: MessageData;\n}>;\n\nfunction MessageActionButtons({ messageData }: MessageActionButtonsProps) {\n const [selectedThumb, setSelectedThumb] = useState<\"up\" | \"down\" | null>(\n null,\n );\n const [copied, setCopied] = useState(false);\n const context = useChatInterfaceContext();\n const { collectUserFeedback } = context;\n // The new name wins over the deprecated alias; the standalone interface\n // defaults to visible (the widget hides it via INTERNAL_ONLY_SHOW_COPY_BUTTON\n // defaulting to false).\n const hasCopyButton =\n context.hasCopyButton ??\n (context.hideCopyButton != null ? !context.hideCopyButton : true);\n\n return (\n <div className=\"eloq:inline-flex eloq:shrink-0 eloq:gap-2\">\n {hasCopyButton && (\n <button\n onClick={async () => {\n await navigator.clipboard.writeText(messageData.content);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n }}\n className={cn(actionButtonClassName, copied && \"eloq:text-primary\")}\n title=\"Copy message\"\n >\n <Copy size={16} />\n </button>\n )}\n {!messageData.isWelcomeMessage && collectUserFeedback && (\n <>\n <button\n onClick={() =>\n setSelectedThumb(selectedThumb === \"up\" ? null : \"up\")\n }\n className={cn(\n actionButtonClassName,\n selectedThumb === \"up\" && \"eloq:text-primary\",\n )}\n >\n <ThumbsUp size={16} />\n </button>\n <button\n onClick={() =>\n setSelectedThumb(selectedThumb === \"down\" ? null : \"down\")\n }\n className={cn(\n actionButtonClassName,\n selectedThumb === \"down\" && \"eloq:text-primary\",\n )}\n >\n <ThumbsDown size={16} />\n </button>\n </>\n )}\n </div>\n );\n}\n\nconst animatedIds = new Set<string>();\n\ntype MessageBubbleProps = Readonly<{\n className?: string;\n message: Message;\n nextMessage?: Message;\n assistantLogo?: string;\n}>;\n\n/** How long the bare \"...\" placeholder waits before its dots appear. */\nconst PLACEHOLDER_THINKING_DELAY_MILLISECONDS = 2000;\n\nconst HIDDEN_COGNITION_LABELS = new Set([\"Routing\"]);\nconst THINKING_ELLIPSIS_PATTERN = /^Thinking\\.+$/;\n\nfunction MessageBubbleItem({\n messageData,\n isBot,\n isSibling,\n}: {\n messageData: MessageData;\n isBot: boolean;\n isSameSender: boolean;\n isSibling?: boolean;\n}) {\n const [isImageOpen, setIsImageOpen] = useState(false);\n const theme = useTheme();\n const { onMessageClick } = useChatInterfaceContext();\n\n const bgColor = cn({\n [theme.botBubbleColor]: messageData.sender === \"assistant\",\n [theme.userBubbleColor]: messageData.sender === \"user\",\n });\n // Explicit theme override first; otherwise black or white, whichever\n // contrasts more with the bubble background, so custom bubble colors never\n // produce unreadable text.\n const explicitTextColor =\n messageData.sender === \"assistant\"\n ? theme.botBubbleTextColor\n : theme.userBubbleTextColor;\n const textColor = explicitTextColor || getContrastingTextColor(bgColor);\n\n const isEllipsis = messageData.content === \"...\";\n\n // The placeholder dots go up the instant a message is sent, before the first\n // cognition label arrives. Hold them back briefly so a fast reply doesn't\n // flash them on and straight back off.\n const [hasPlaceholderDelayElapsed, setHasPlaceholderDelayElapsed] =\n useState(!isEllipsis);\n useEffect(() => {\n if (!isEllipsis) {\n setHasPlaceholderDelayElapsed(true);\n return;\n }\n const timeoutId = setTimeout(\n () => setHasPlaceholderDelayElapsed(true),\n PLACEHOLDER_THINKING_DELAY_MILLISECONDS,\n );\n return () => clearTimeout(timeoutId);\n }, [isEllipsis]);\n\n const isHiddenCognitionLabel = HIDDEN_COGNITION_LABELS.has(\n messageData.content.replace(/\\.+$/, \"\"),\n );\n\n const isThinkingBubble = !!(isBot && messageData.isThinking);\n const hasCognitionLabel =\n isThinkingBubble && !isEllipsis && !isHiddenCognitionLabel;\n\n // Each cognition step types itself out, so a new label reads as the agent\n // moving on rather than the text swapping under you.\n const typedCognitionLabel = useTypedText(\n hasCognitionLabel\n ? messageData.content.replace(THINKING_ELLIPSIS_PATTERN, \"Thinking\")\n : \"\",\n hasCognitionLabel,\n );\n\n const renderBubble = () => {\n if (isThinkingBubble) {\n if (!hasPlaceholderDelayElapsed) return null;\n return (\n <div className=\"eloq:ml-1 eloq:flex eloq:items-center eloq:gap-2 eloq:animate-message-in\">\n {/* Only the dots sit in a bubble — flat, with the same background and\n radius as an assistant message. The fixed h-5 matches the label's\n line height, so the row keeps the same height, and the dots the\n same vertical position, with or without a label beside it. */}\n <span\n className=\"eloq:flex eloq:h-5 eloq:items-center eloq:gap-[0.25em] eloq:rounded-2xl eloq:px-[12px] eloq:py-[8px] eloq:text-sm eloq:box-content\"\n style={{ backgroundColor: theme.botBubbleColor }}\n >\n {[0, 150, 300].map((delay) => (\n <span\n key={delay}\n className={thinkingDotClassName}\n style={{ animationDelay: `${delay}ms` }}\n />\n ))}\n </span>\n {typedCognitionLabel && (\n // Outside the bubble, on the panel background. Same wave as the\n // dots, swept through the glyphs.\n <span className=\"eloq-thinking-shimmer eloq:text-sm eloq:font-medium eloq:animate-thinking-shimmer eloq:motion-reduce:animate-none\">\n {typedCognitionLabel}\n </span>\n )}\n </div>\n );\n }\n return (\n <div\n className=\"eloq:flex eloq:flex-col eloq:flex-1 eloq:self-stretch eloq:text-sm\"\n onClick={() =>\n !messageData.isWelcomeMessage && onMessageClick?.(messageData)\n }\n role={\n onMessageClick && !messageData.isWelcomeMessage ? \"button\" : undefined\n }\n tabIndex={0}\n >\n <div\n className={cn(\n `eloq:relative eloq:rounded-2xl eloq:py-[12px] eloq:px-[16px] eloq:align-center`,\n {\n \"eloq:ml-1\": messageData.sender === \"assistant\",\n \"eloq:mr-1\": messageData.sender === \"user\",\n \"eloq:ml-0\": isSibling,\n \"eloq:flex-1\": isSibling,\n },\n )}\n style={{\n backgroundColor: bgColor,\n color: textColor,\n }}\n >\n {messageData.type === \"image\" ? (\n <img\n src={messageData.content}\n alt=\"Attached image\"\n className=\"eloq:max-w-full eloq:rounded-lg eloq:cursor-pointer eloq:hover:opacity-90 eloq:transition-opacity\"\n onClick={() => setIsImageOpen(true)}\n />\n ) : (\n <div className=\"typewriter prose eloq:text-left eloq-wrap-anywhere\">\n <MarkdownViewer text={messageData.content} />\n </div>\n )}\n </div>\n </div>\n );\n };\n\n return (\n <>\n <div\n className={cn(\n `eloq:flex eloq:flex-1 eloq:self-stretch eloq:items-center eloq:gap-1.5 ${messageData.sender === \"user\" ? \"eloq:justify-end\" : \"eloq:justify-start\"}`,\n )}\n >\n {messageData.isFailed && (\n <AlertCircle className=\"eloq:h-4 eloq:w-4 eloq:shrink-0 eloq:text-destructive\" />\n )}\n <div\n className={cn(\"eloq:relative eloq:flex eloq:self-stretch\", {\n \"eloq:max-w-[88%]\": isBot,\n \"eloq:max-w-[75%]\": !isBot,\n \"eloq:max-w-full\": isSibling,\n })}\n >\n {renderBubble()}\n </div>\n </div>\n <Dialog open={isImageOpen} onOpenChange={setIsImageOpen}>\n <DialogContent className=\"eloq:max-w-[90vw] eloq:p-0 eloq:bg-transparent eloq:border-0\">\n <DialogTitle className=\"eloq:hidden\" />\n <DialogDescription className=\"eloq:hidden\" />\n <img\n src={messageData.content}\n alt=\"Expanded image\"\n className=\"eloq:w-full eloq:h-full eloq:object-contain eloq:rounded-lg\"\n />\n </DialogContent>\n </Dialog>\n </>\n );\n}\n\nexport function MessageBubble({\n className,\n message,\n nextMessage,\n assistantLogo,\n}: MessageBubbleProps) {\n const key = useMemo(() => {\n if (Array.isArray(message)) {\n return message.map((msg) => msg.id).join(\"-\");\n }\n return message.id;\n }, [message]);\n const isBot = useMemo(() => {\n if (Array.isArray(message)) {\n return message[0].sender === \"assistant\";\n }\n return message.sender === \"assistant\";\n }, [message]);\n\n const isNew = useMemo(() => {\n if (Array.isArray(message)) return false;\n return message.isNew ?? false;\n }, [message]);\n\n const isThinking = useMemo(() => {\n if (Array.isArray(message)) return false;\n return !!message.isThinking;\n }, [message]);\n\n // Bot messages animate once per key; user messages animate only on optimistic add; thinking has its own animation\n const shouldAnimate = isBot ? !animatedIds.has(key) : isNew;\n const isSameSender = useMemo(() => {\n if (!nextMessage) return false;\n if (Array.isArray(message)) {\n return message.some((msg) => {\n if (Array.isArray(nextMessage)) {\n return msg.sender === nextMessage[0]?.sender;\n }\n return msg.sender === nextMessage?.sender;\n });\n }\n if (Array.isArray(nextMessage)) {\n return message.sender === nextMessage[0]?.sender;\n }\n return message.sender === nextMessage?.sender;\n }, [message, nextMessage]);\n\n const { assistantName } = useChatInterfaceContext();\n\n const renderSenderHeader = () => {\n if (!isBot) return null;\n\n const messageData = Array.isArray(message)\n ? message[message.length - 1]\n : message;\n const isThinking = !Array.isArray(message) && message.isThinking;\n if (isThinking) return null;\n const showLabel = !isSameSender;\n const logoClassName = \"eloq:h-4 eloq:w-4 eloq:flex-shrink-0\";\n const timestamp = new Date(messageData.timestamp).toLocaleString(\n undefined,\n {\n month: \"short\",\n day: \"numeric\",\n year: \"numeric\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n },\n );\n\n return (\n <div\n className=\"eloq:flex eloq:items-center eloq:justify-between eloq:w-full eloq:max-w-[88%] eloq:mt-1 eloq:ml-1 eloq:gap-2 eloq:cursor-default\"\n title={showLabel && !isThinking ? timestamp : undefined}\n >\n <div className=\"eloq:flex eloq:items-center eloq:space-x-1 eloq:min-w-0\">\n {showLabel && (\n <>\n <Logo\n className={logoClassName}\n bgColor=\"#6F33B7\"\n fgColor=\"#ffffff\"\n src={assistantLogo}\n />\n {assistantName && (\n <span className={subtitleTextClassName}>{assistantName}</span>\n )}\n </>\n )}\n </div>\n <MessageActionButtons messageData={messageData} />\n </div>\n );\n };\n\n const renderMessageBox = () => {\n if (Array.isArray(message)) {\n return message.map((message) => (\n <MessageBubbleItem\n key={message.id}\n messageData={message}\n isBot={isBot}\n isSameSender={isSameSender}\n isSibling\n />\n ));\n }\n return (\n <MessageBubbleItem\n key={message.id}\n messageData={message}\n isBot={isBot}\n isSameSender={isSameSender}\n />\n );\n };\n\n return (\n <div\n key={key}\n className={cn({\n \"eloq:animate-message-in\": shouldAnimate,\n // The list spaces messages 16px apart. The thinking indicator is a\n // pending turn rather than a finished one, so pull it closer to the\n // message it is answering.\n \"eloq:-mt-2\": isThinking,\n })}\n ref={() => {\n if (!isThinking) animatedIds.add(key);\n }}\n >\n <div\n className={cn(className, {\n \"eloq:flex eloq:flex-col eloq:items-start\": isBot,\n \"eloq:flex eloq:justify-end\": !isBot,\n })}\n >\n {renderMessageBox()}\n {renderSenderHeader()}\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport { Star } from \"lucide-react\";\nimport { useState } from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\ninterface StarRatingProps {\n value: number;\n onChange: (rating: number) => void;\n disabled?: boolean;\n}\n\nexport function StarRating({\n value,\n onChange,\n disabled = false,\n}: StarRatingProps) {\n const [hovered, setHovered] = useState(0);\n\n const displayValue = hovered || value;\n\n return (\n <div\n className=\"eloq:inline-flex eloq:gap-1\"\n onMouseLeave={() => setHovered(0)}\n >\n {[1, 2, 3, 4, 5].map((star) => (\n <button\n key={star}\n type=\"button\"\n disabled={disabled}\n onClick={() => onChange(star)}\n onMouseEnter={() => !disabled && setHovered(star)}\n className={cn(\n \"eloq:p-0.5 eloq:transition-colors\",\n disabled\n ? \"eloq:cursor-default eloq:opacity-70\"\n : \"eloq:cursor-pointer\",\n )}\n >\n <Star\n size={22}\n className={cn(\n \"eloq:transition-colors\",\n star <= displayValue\n ? \"eloq:fill-yellow-400 eloq:text-yellow-400\"\n : \"eloq:fill-none eloq:text-gray-300 eloq:dark:text-gray-500\",\n )}\n />\n </button>\n ))}\n </div>\n );\n}\n","\"use client\";\n\nimport { useState } from \"react\";\n\nimport { StarRating } from \"@/components/ui/star-rating\";\n\ninterface RatingMessageBubbleProps {\n onRate: (rating: number) => void;\n}\n\nexport function RatingMessageBubble({ onRate }: RatingMessageBubbleProps) {\n const [selectedRating, setSelectedRating] = useState(0);\n const [submitted, setSubmitted] = useState(false);\n\n const handleRate = (rating: number) => {\n setSelectedRating(rating);\n setSubmitted(true);\n onRate(rating);\n };\n\n return (\n <div className=\"eloq:flex eloq:justify-center eloq:pt-2 eloq:pb-2\">\n <div className=\"eloq:rounded-2xl eloq:bg-muted eloq:px-4 eloq:py-3 eloq:flex eloq:flex-col eloq:items-center eloq:gap-1.5\">\n <p className=\"eloq:text-sm eloq:font-medium eloq:text-foreground\">\n {submitted ? \"Thanks for your feedback!\" : \"How was your experience\"}\n </p>\n <StarRating value={selectedRating} onChange={handleRate} />\n </div>\n </div>\n );\n}\n","import { createContext } from \"react\";\nimport { UseAgentCognitionReturn } from \"@/hooks/use-agent-cognition\";\n\nexport const AgentCognitionContext =\n createContext<UseAgentCognitionReturn | null>(null);\n","import { AgentCognitionContext } from \"@/contexts/agent-cognition-context-definition\";\nimport { UseAgentCognitionReturn } from \"@/hooks/use-agent-cognition\";\nimport { useContext } from \"react\";\n\nconst defaultAgentCognition: UseAgentCognitionReturn = {\n isVisible: false,\n content: null,\n showCognition: () => {},\n hideCognition: () => {},\n};\n\nexport function useAgentCognitionContext(): UseAgentCognitionReturn {\n const context = useContext(AgentCognitionContext);\n // No provider is a supported state, not a mistake: only the embed `Chat`\n // provides it (agent cognition needs the live socket). ChatInterface used\n // standalone — transcript previews, the SSR-safe `./ui` entry — has no\n // cognition to show and gets the inert defaults, without console noise on\n // every render.\n return context ?? defaultAgentCognition;\n}\n","\"use client\";\n\nimport { ChevronDown } from \"lucide-react\";\nimport { useCallback, useEffect, useRef, useState, type UIEvent } from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\nimport { CardContent } from \"@/components/ui/card\";\nimport { ScrollArea } from \"@/components/ui/scroll-area\";\n\nimport { MessageBubble } from \"@/components/chat-message-bubble\";\nimport { RatingMessageBubble } from \"@/components/chat-rating-bubble\";\n\nimport { useChatInterfaceContext } from \"@/components/chat-interface/context\";\nimport { useAgentCognitionContext } from \"@/hooks/use-agent-cognition-context\";\n\nexport function ChatInterfaceContent() {\n const context = useChatInterfaceContext();\n const cognition = useAgentCognitionContext();\n const scrollAreaRef = useRef<HTMLDivElement>(null);\n const isFirstRender = useRef(true);\n const prevMessageCountRef = useRef(0);\n const [showChevron, setShowChevron] = useState(false);\n const [isUserScrolling, setIsUserScrolling] = useState(false);\n\n const isAtBottom = (element: HTMLElement) => {\n return (\n element.scrollHeight - element.scrollTop <= element.clientHeight + 60\n );\n };\n\n const handleScroll = (event: UIEvent<HTMLDivElement>) => {\n const target = event.target as HTMLElement;\n\n if (isAtBottom(target)) {\n setShowChevron(false);\n setIsUserScrolling(false);\n } else {\n setShowChevron(true);\n setIsUserScrolling(true);\n }\n };\n\n const scrollToBottom = useCallback((behavior: ScrollBehavior = \"smooth\") => {\n if (scrollAreaRef.current) {\n const scrollableDiv = scrollAreaRef.current.querySelector(\"div\");\n if (scrollableDiv) {\n scrollableDiv.scrollTo({\n top: scrollableDiv.scrollHeight,\n behavior,\n });\n }\n }\n }, []);\n\n useEffect(() => {\n const currentCount = context.messages?.length ?? 0;\n const wasReset = currentCount < prevMessageCountRef.current;\n prevMessageCountRef.current = currentCount;\n\n if (isFirstRender.current) {\n scrollToBottom(\"instant\");\n isFirstRender.current = false;\n } else if (wasReset) {\n setShowChevron(false);\n setIsUserScrolling(false);\n scrollToBottom(\"instant\");\n } else if (!isUserScrolling) {\n scrollToBottom();\n }\n }, [context.messages, isUserScrolling, scrollToBottom]);\n\n useEffect(() => {\n if (!context.isChatClosed) return;\n\n const timeoutId = setTimeout(() => {\n scrollToBottom(\"smooth\");\n }, 500);\n\n return () => clearTimeout(timeoutId);\n }, [context.isChatClosed, scrollToBottom]);\n\n useEffect(() => {\n const scrollableDiv = scrollAreaRef.current?.querySelector(\n \"div.chat-interface-body\",\n ) as HTMLElement;\n if (!scrollableDiv) return;\n\n const observer = new ResizeObserver(() => {\n if (!isUserScrolling && isAtBottom(scrollableDiv)) {\n scrollToBottom(\"auto\");\n }\n });\n\n observer.observe(scrollableDiv);\n return () => observer.disconnect();\n }, [isUserScrolling, scrollToBottom]);\n\n const messagesToDisplay = [\n ...(context.messages || []),\n // Add cognition message when visible and chat is not closed\n ...(!context.isChatClosed && cognition.isVisible\n ? [\n {\n id: \"agent-cognition-temp\",\n content: cognition.content ?? \"\",\n sender: \"assistant\" as const,\n timestamp: new Date().toISOString(),\n isThinking: true,\n },\n ]\n : []),\n ];\n\n return (\n <CardContent className=\"eloq:relative eloq:flex-grow eloq:p-0 eloq:pl-4 eloq:overflow-hidden\">\n <ScrollArea\n ref={scrollAreaRef}\n className=\"eloq:h-full eloq:pr-4 [&>[data-radix-scroll-area-viewport]]:eloq:scroll-smooth\"\n onViewportScroll={handleScroll}\n >\n <div className=\"chat-interface-body eloq:flex eloq:flex-col eloq:space-y-4 eloq:mb-10\">\n {messagesToDisplay.map((message, index, list) => {\n const key = Array.isArray(message)\n ? message.map((message) => message.id).join(\"-\")\n : message.id;\n\n if (!Array.isArray(message) && message.isRatingRequest) {\n return (\n <RatingMessageBubble\n key={key}\n onRate={(rating) => context.onRateChat?.(rating)}\n />\n );\n }\n\n // The pb-14 reserves space for the suggested-message pills, which\n // hide once the user sends their first message — collapse the\n // spacer with them. Mirrors SuggestedMessages' own visibility:\n // no configured texts, no pills, no spacer.\n const areSuggestionsVisible =\n context.suggestedMessages &&\n !!context.suggestedMessageTexts?.length &&\n !context.messages?.some((m) => m.sender === \"user\");\n\n return (\n <MessageBubble\n key={key}\n message={message}\n nextMessage={list[index + 1]}\n className={cn({\n \"eloq:pt-4\": index === 0,\n \"eloq:pb-2\": index >= list.length - 1,\n \"eloq:pb-14\":\n areSuggestionsVisible && index >= list.length - 1,\n })}\n assistantLogo={context.assistantLogo}\n />\n );\n })}\n </div>\n </ScrollArea>\n {showChevron && (\n <button\n className=\"eloq:flex eloq:items-center eloq:justify-center eloq:absolute eloq:left-[calc(50%-0.75rem)] eloq:bottom-10 eloq:mx-auto eloq:cursor-pointer\"\n onClick={() => scrollToBottom(\"smooth\")}\n >\n <ChevronDown className=\"eloq:h-6 eloq:w-6 eloq:text-primary eloq:bg-white eloq:dark:bg-card eloq:rounded-full eloq:border\" />\n </button>\n )}\n </CardContent>\n );\n}\n","/*! @license DOMPurify 3.4.14 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.4.14/LICENSE */\n\nfunction _arrayLikeToArray(r, a) {\n (null == a || a > r.length) && (a = r.length);\n for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];\n return n;\n}\nfunction _arrayWithHoles(r) {\n if (Array.isArray(r)) return r;\n}\nfunction _iterableToArrayLimit(r, l) {\n var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n if (null != t) {\n var e,\n n,\n i,\n u,\n a = [],\n f = true,\n o = false;\n try {\n if (i = (t = t.call(r)).next, 0 === l) ; else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);\n } catch (r) {\n o = true, n = r;\n } finally {\n try {\n if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return;\n } finally {\n if (o) throw n;\n }\n }\n return a;\n }\n}\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _slicedToArray(r, e) {\n return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest();\n}\nfunction _unsupportedIterableToArray(r, a) {\n if (r) {\n if (\"string\" == typeof r) return _arrayLikeToArray(r, a);\n var t = {}.toString.call(r).slice(8, -1);\n return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;\n }\n}\n\nconst entries = Object.entries,\n setPrototypeOf = Object.setPrototypeOf,\n isFrozen = Object.isFrozen,\n getPrototypeOf = Object.getPrototypeOf,\n getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nlet freeze = Object.freeze,\n seal = Object.seal,\n create = Object.create; // eslint-disable-line import/no-mutable-exports\nlet _ref = typeof Reflect !== 'undefined' && Reflect,\n apply = _ref.apply,\n construct = _ref.construct;\nif (!freeze) {\n freeze = function freeze(x) {\n return x;\n };\n}\nif (!seal) {\n seal = function seal(x) {\n return x;\n };\n}\nif (!apply) {\n apply = function apply(func, thisArg) {\n for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n return func.apply(thisArg, args);\n };\n}\nif (!construct) {\n construct = function construct(Func) {\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 return new Func(...args);\n };\n}\nconst arrayForEach = unapply(Array.prototype.forEach);\nconst arrayLastIndexOf = unapply(Array.prototype.lastIndexOf);\nconst arrayPop = unapply(Array.prototype.pop);\nconst arrayPush = unapply(Array.prototype.push);\nconst arraySplice = unapply(Array.prototype.splice);\nconst arrayIsArray = Array.isArray;\nconst stringToLowerCase = unapply(String.prototype.toLowerCase);\nconst stringToString = unapply(String.prototype.toString);\nconst stringMatch = unapply(String.prototype.match);\nconst stringReplace = unapply(String.prototype.replace);\nconst stringIndexOf = unapply(String.prototype.indexOf);\nconst stringTrim = unapply(String.prototype.trim);\nconst numberToString = unapply(Number.prototype.toString);\nconst booleanToString = unapply(Boolean.prototype.toString);\nconst bigintToString = typeof BigInt === 'undefined' ? null : unapply(BigInt.prototype.toString);\nconst symbolToString = typeof Symbol === 'undefined' ? null : unapply(Symbol.prototype.toString);\nconst objectHasOwnProperty = unapply(Object.prototype.hasOwnProperty);\nconst objectToString = unapply(Object.prototype.toString);\nconst regExpTest = unapply(RegExp.prototype.test);\nconst typeErrorCreate = unconstruct(TypeError);\n/**\n * Creates a new function that calls the given function with a specified thisArg and arguments.\n *\n * @param func - The function to be wrapped and called.\n * @returns A new function that calls the given function with a specified thisArg and arguments.\n */\nfunction unapply(func) {\n return function (thisArg) {\n if (thisArg instanceof RegExp) {\n thisArg.lastIndex = 0;\n }\n for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n args[_key3 - 1] = arguments[_key3];\n }\n return apply(func, thisArg, args);\n };\n}\n/**\n * Creates a new function that constructs an instance of the given constructor function with the provided arguments.\n *\n * @param func - The constructor function to be wrapped and called.\n * @returns A new function that constructs an instance of the given constructor function with the provided arguments.\n */\nfunction unconstruct(Func) {\n return function () {\n for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n return construct(Func, args);\n };\n}\n/**\n * Add properties to a lookup table\n *\n * @param set - The set to which elements will be added.\n * @param array - The array containing elements to be added to the set.\n * @param transformCaseFunc - An optional function to transform the case of each element before adding to the set.\n * @returns The modified set with added elements.\n */\nfunction addToSet(set, array) {\n let transformCaseFunc = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : stringToLowerCase;\n if (setPrototypeOf) {\n // Make 'in' and truthy checks like Boolean(set.constructor)\n // independent of any properties defined on Object.prototype.\n // Prevent prototype setters from intercepting set as a this value.\n setPrototypeOf(set, null);\n }\n if (!arrayIsArray(array)) {\n return set;\n }\n let l = array.length;\n while (l--) {\n let element = array[l];\n if (typeof element === 'string') {\n const lcElement = transformCaseFunc(element);\n if (lcElement !== element) {\n // Config presets (e.g. tags.js, attrs.js) are immutable.\n if (!isFrozen(array)) {\n array[l] = lcElement;\n }\n element = lcElement;\n }\n }\n set[element] = true;\n }\n return set;\n}\n/**\n * Clean up an array to harden against CSPP\n *\n * @param array - The array to be cleaned.\n * @returns The cleaned version of the array\n */\nfunction cleanArray(array) {\n for (let index = 0; index < array.length; index++) {\n const isPropertyExist = objectHasOwnProperty(array, index);\n if (!isPropertyExist) {\n array[index] = null;\n }\n }\n return array;\n}\n/**\n * Shallow clone an object\n *\n * @param object - The object to be cloned.\n * @returns A new object that copies the original.\n */\nfunction clone(object) {\n const newObject = create(null);\n for (const _ref2 of entries(object)) {\n var _ref3 = _slicedToArray(_ref2, 2);\n const property = _ref3[0];\n const value = _ref3[1];\n const isPropertyExist = objectHasOwnProperty(object, property);\n if (isPropertyExist) {\n if (arrayIsArray(value)) {\n newObject[property] = cleanArray(value);\n } else if (value && typeof value === 'object' && value.constructor === Object) {\n newObject[property] = clone(value);\n } else {\n newObject[property] = value;\n }\n }\n }\n return newObject;\n}\n/**\n * Convert non-node values into strings without depending on direct property access.\n *\n * @param value - The value to stringify.\n * @returns A string representation of the provided value.\n */\nfunction stringifyValue(value) {\n switch (typeof value) {\n case 'string':\n {\n return value;\n }\n case 'number':\n {\n return numberToString(value);\n }\n case 'boolean':\n {\n return booleanToString(value);\n }\n case 'bigint':\n {\n return bigintToString ? bigintToString(value) : '0';\n }\n case 'symbol':\n {\n return symbolToString ? symbolToString(value) : 'Symbol()';\n }\n case 'undefined':\n {\n return objectToString(value);\n }\n case 'function':\n case 'object':\n {\n if (value === null) {\n return objectToString(value);\n }\n const valueAsRecord = value;\n const valueToString = lookupGetter(valueAsRecord, 'toString');\n if (typeof valueToString === 'function') {\n const stringified = valueToString(valueAsRecord);\n return typeof stringified === 'string' ? stringified : objectToString(stringified);\n }\n return objectToString(value);\n }\n default:\n {\n return objectToString(value);\n }\n }\n}\n/**\n * This method automatically checks if the prop is function or getter and behaves accordingly.\n *\n * @param object - The object to look up the getter function in its prototype chain.\n * @param prop - The property name for which to find the getter function.\n * @returns The getter function found in the prototype chain or a fallback function.\n */\nfunction lookupGetter(object, prop) {\n while (object !== null) {\n const desc = getOwnPropertyDescriptor(object, prop);\n if (desc) {\n if (desc.get) {\n return unapply(desc.get);\n }\n if (typeof desc.value === 'function') {\n return unapply(desc.value);\n }\n }\n object = getPrototypeOf(object);\n }\n function fallbackValue() {\n return null;\n }\n return fallbackValue;\n}\nfunction isRegex(value) {\n try {\n regExpTest(value, '');\n return true;\n } catch (_unused) {\n return false;\n }\n}\n\nconst html$1 = freeze(['a', 'abbr', 'acronym', 'address', 'area', 'article', 'aside', 'audio', 'b', 'bdi', 'bdo', 'big', 'blink', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', 'content', 'data', 'datalist', 'dd', 'decorator', 'del', 'details', 'dfn', 'dialog', 'dir', 'div', 'dl', 'dt', 'element', 'em', 'fieldset', 'figcaption', 'figure', 'font', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'img', 'input', 'ins', 'kbd', 'label', 'legend', 'li', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meter', 'nav', 'nobr', 'ol', 'optgroup', 'option', 'output', 'p', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'search', 'section', 'select', 'shadow', 'slot', 'small', 'source', 'spacer', 'span', 'strike', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'time', 'tr', 'track', 'tt', 'u', 'ul', 'var', 'video', 'wbr']);\nconst svg$1 = freeze(['svg', 'a', 'altglyph', 'altglyphdef', 'altglyphitem', 'animatecolor', 'animatemotion', 'animatetransform', 'circle', 'clippath', 'defs', 'desc', 'ellipse', 'enterkeyhint', 'exportparts', 'filter', 'font', 'g', 'glyph', 'glyphref', 'hkern', 'image', 'inputmode', 'line', 'lineargradient', 'marker', 'mask', 'metadata', 'mpath', 'part', 'path', 'pattern', 'polygon', 'polyline', 'radialgradient', 'rect', 'stop', 'style', 'switch', 'symbol', 'text', 'textpath', 'title', 'tref', 'tspan', 'view', 'vkern']);\nconst svgFilters = freeze(['feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feDistantLight', 'feDropShadow', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feImage', 'feMerge', 'feMergeNode', 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile', 'feTurbulence']);\n// List of SVG elements that are disallowed by default.\n// We still need to know them so that we can do namespace\n// checks properly in case one wants to add them to\n// allow-list.\nconst svgDisallowed = freeze(['animate', 'color-profile', 'cursor', 'discard', 'font-face', 'font-face-format', 'font-face-name', 'font-face-src', 'font-face-uri', 'foreignobject', 'hatch', 'hatchpath', 'mesh', 'meshgradient', 'meshpatch', 'meshrow', 'missing-glyph', 'script', 'set', 'solidcolor', 'unknown', 'use']);\nconst mathMl$1 = freeze(['math', 'menclose', 'merror', 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr', 'mmultiscripts', 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot', 'mrow', 'ms', 'mspace', 'msqrt', 'mstyle', 'msub', 'msup', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', 'munderover', 'mprescripts']);\n// Similarly to SVG, we want to know all MathML elements,\n// even those that we disallow by default.\nconst mathMlDisallowed = freeze(['maction', 'maligngroup', 'malignmark', 'mlongdiv', 'mscarries', 'mscarry', 'msgroup', 'mstack', 'msline', 'msrow', 'semantics', 'annotation', 'annotation-xml', 'mprescripts', 'none']);\nconst text = freeze(['#text']);\n\nconst html = freeze(['accept', 'action', 'align', 'alt', 'autocapitalize', 'autocomplete', 'autopictureinpicture', 'autoplay', 'background', 'bgcolor', 'border', 'capture', 'cellpadding', 'cellspacing', 'checked', 'cite', 'class', 'clear', 'color', 'cols', 'colspan', 'command', 'commandfor', 'controls', 'controlslist', 'coords', 'crossorigin', 'datetime', 'decoding', 'default', 'dir', 'disabled', 'disablepictureinpicture', 'disableremoteplayback', 'download', 'draggable', 'enctype', 'enterkeyhint', 'exportparts', 'face', 'for', 'headers', 'height', 'hidden', 'high', 'href', 'hreflang', 'id', 'inert', 'inputmode', 'integrity', 'ismap', 'kind', 'label', 'lang', 'list', 'loading', 'loop', 'low', 'max', 'maxlength', 'media', 'method', 'min', 'minlength', 'multiple', 'muted', 'name', 'nonce', 'noshade', 'novalidate', 'nowrap', 'open', 'optimum', 'part', 'pattern', 'placeholder', 'playsinline', 'popover', 'popovertarget', 'popovertargetaction', 'poster', 'preload', 'pubdate', 'radiogroup', 'readonly', 'rel', 'required', 'rev', 'reversed', 'role', 'rows', 'rowspan', 'spellcheck', 'scope', 'selected', 'shape', 'size', 'sizes', 'slot', 'span', 'srclang', 'start', 'src', 'srcset', 'step', 'style', 'summary', 'tabindex', 'title', 'translate', 'type', 'usemap', 'valign', 'value', 'width', 'wrap', 'xmlns']);\nconst svg = freeze(['accent-height', 'accumulate', 'additive', 'alignment-baseline', 'amplitude', 'ascent', 'attributename', 'attributetype', 'azimuth', 'basefrequency', 'baseline-shift', 'begin', 'bias', 'by', 'class', 'clip', 'clippathunits', 'clip-path', 'clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'cx', 'cy', 'd', 'dx', 'dy', 'diffuseconstant', 'direction', 'display', 'divisor', 'dominant-baseline', 'dur', 'edgemode', 'elevation', 'end', 'exponent', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'filterunits', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'fx', 'fy', 'g1', 'g2', 'glyph-name', 'glyphref', 'gradientunits', 'gradienttransform', 'height', 'href', 'id', 'image-rendering', 'in', 'in2', 'intercept', 'k', 'k1', 'k2', 'k3', 'k4', 'kerning', 'keypoints', 'keysplines', 'keytimes', 'lang', 'lengthadjust', 'letter-spacing', 'kernelmatrix', 'kernelunitlength', 'lighting-color', 'local', 'marker-end', 'marker-mid', 'marker-start', 'markerheight', 'markerunits', 'markerwidth', 'maskcontentunits', 'maskunits', 'max', 'mask', 'mask-type', 'media', 'method', 'mode', 'min', 'name', 'numoctaves', 'offset', 'operator', 'opacity', 'order', 'orient', 'orientation', 'origin', 'overflow', 'paint-order', 'path', 'pathlength', 'patterncontentunits', 'patterntransform', 'patternunits', 'pointer-events', 'points', 'preservealpha', 'preserveaspectratio', 'primitiveunits', 'r', 'rx', 'ry', 'radius', 'refx', 'refy', 'repeatcount', 'repeatdur', 'restart', 'result', 'rotate', 'scale', 'seed', 'shape-rendering', 'slope', 'specularconstant', 'specularexponent', 'spreadmethod', 'startoffset', 'stddeviation', 'stitchtiles', 'stop-color', 'stop-opacity', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke', 'stroke-width', 'style', 'surfacescale', 'systemlanguage', 'tabindex', 'tablevalues', 'targetx', 'targety', 'transform', 'transform-origin', 'text-anchor', 'text-decoration', 'text-orientation', 'text-rendering', 'textlength', 'type', 'u1', 'u2', 'unicode', 'values', 'vector-effect', 'viewbox', 'visibility', 'version', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'width', 'word-spacing', 'wrap', 'writing-mode', 'xchannelselector', 'ychannelselector', 'x', 'x1', 'x2', 'xmlns', 'y', 'y1', 'y2', 'z', 'zoomandpan']);\nconst mathMl = freeze(['accent', 'accentunder', 'align', 'bevelled', 'close', 'columnalign', 'columnlines', 'columnspacing', 'columnspan', 'denomalign', 'depth', 'dir', 'display', 'displaystyle', 'encoding', 'fence', 'frame', 'height', 'href', 'id', 'largeop', 'length', 'linethickness', 'lquote', 'lspace', 'mathbackground', 'mathcolor', 'mathsize', 'mathvariant', 'maxsize', 'minsize', 'movablelimits', 'notation', 'numalign', 'open', 'rowalign', 'rowlines', 'rowspacing', 'rowspan', 'rspace', 'rquote', 'scriptlevel', 'scriptminsize', 'scriptsizemultiplier', 'selection', 'separator', 'separators', 'stretchy', 'subscriptshift', 'supscriptshift', 'symmetric', 'voffset', 'width', 'xmlns']);\nconst xml = freeze(['xlink:href', 'xml:id', 'xlink:title', 'xml:space', 'xmlns:xlink']);\n\nconst MUSTACHE_EXPR = seal(/{{[\\w\\W]*|^[\\w\\W]*}}/g);\nconst ERB_EXPR = seal(/<%[\\w\\W]*|^[\\w\\W]*%>/g);\nconst TMPLIT_EXPR = seal(/\\${[\\w\\W]*/g);\nconst DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]+$/); // eslint-disable-line no-useless-escape\nconst ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\nconst IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n);\nconst IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\nconst ATTR_WHITESPACE = seal(/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g // eslint-disable-line no-control-regex\n);\nconst DOCTYPE_NAME = seal(/^html$/i);\nconst CUSTOM_ELEMENT = seal(/^[a-z][.\\w]*(-[.\\w]+)+$/i);\n// Markup-significant character probes used by _sanitizeElements.\n// Shared module-level instances are safe despite the sticky /g flags:\n// unapply() resets lastIndex for RegExp receivers before every call.\nconst ELEMENT_MARKUP_PROBE = seal(/<[/\\w!]/g);\nconst COMMENT_MARKUP_PROBE = seal(/<[/\\w]/g);\nconst FALLBACK_TAG_CLOSE = seal(/<\\/no(script|embed|frames)/i);\nconst SELF_CLOSING_TAG = seal(/\\/>/i);\n\n// https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType\nconst NODE_TYPE = {\n element: 1,\n attribute: 2,\n text: 3,\n cdataSection: 4,\n entityReference: 5,\n // Deprecated\n entityNode: 6,\n // Deprecated\n processingInstruction: 7,\n comment: 8,\n document: 9,\n documentType: 10,\n documentFragment: 11,\n notation: 12 // Deprecated\n};\n/* HTML-namespace elements whose child text nodes are serialized *literally*\n (unescaped) by the HTML fragment-serialization algorithm. Two reparse-mXSS\n shapes ride on that literal serialization:\n (a) an element child - a tree the HTML parser can never build, but the DOM\n API and an XML/XHTML parse can - after which a `</tag>`-bearing text\n sibling breaks the element open on reparse; and\n (b) text-only content that already carries the element's OWN end tag, e.g.\n `<style>...</style><img onerror=x>` built as a node, which the literal\n serializer emits verbatim for the HTML parser to re-open.\n Shape (a) is handled by the firstElementChild branch in _isUnsafeNode; shape\n (b) by the LITERAL_TEXT_CLOSE probe. Both read textContent (the raw-serialized\n form for these elements) rather than innerHTML, because an XML/XHTML working\n document serializes innerHTML with `<` escaped, which silently blinds the\n innerHTML-based probes (rule 1's second probe and FALLBACK_TAG_CLOSE) there.\n `script` is never allow-listed, but is kept here so the guard matches the\n serializer's own literal-text list exactly. */\nconst LITERAL_TEXT_ELEMENT_NAMES = ['style', 'script', 'xmp', 'iframe', 'noembed', 'noframes', 'plaintext', 'noscript'];\nconst LITERAL_TEXT_ELEMENTS = freeze(addToSet({}, LITERAL_TEXT_ELEMENT_NAMES));\n/* Per-element end-tag matcher. On an HTML reparse the ONLY token that\n terminates a literal-text element's raw content is its own end tag; a foreign\n literal-text close (e.g. `</xmp>` sitting inside `<style>`) does not break\n out, so matching is per-element, not a shared alternation. The lookahead\n requires an HTML tag-name terminator (whitespace, `/` or `>`) so a longer\n name such as `</styles` is not mistaken for `</style`. */\nconst LITERAL_TEXT_CLOSE = function () {\n const map = {};\n arrayForEach(LITERAL_TEXT_ELEMENT_NAMES, name => {\n map[name] = seal(new RegExp('</' + name + '(?=[\\\\t\\\\n\\\\f\\\\r />])', 'i'));\n });\n return freeze(map);\n}();\nconst getGlobal = function getGlobal() {\n return typeof window === 'undefined' ? null : window;\n};\n/**\n * Creates a no-op policy for internal use only.\n * Don't export this function outside this module!\n * @param trustedTypes The policy factory.\n * @param purifyHostElement The Script element used to load DOMPurify (to determine policy name suffix).\n * @return The policy created (or null, if Trusted Types\n * are not supported or creating the policy failed).\n */\nconst _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, purifyHostElement) {\n if (typeof trustedTypes !== 'object' || typeof trustedTypes.createPolicy !== 'function') {\n return null;\n }\n // Allow the callers to control the unique policy name\n // by adding a data-tt-policy-suffix to the script element with the DOMPurify.\n // Policy creation with duplicate names throws in Trusted Types.\n let suffix = null;\n const ATTR_NAME = 'data-tt-policy-suffix';\n if (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) {\n suffix = purifyHostElement.getAttribute(ATTR_NAME);\n }\n const policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n try {\n return trustedTypes.createPolicy(policyName, {\n createHTML(html) {\n return html;\n },\n createScriptURL(scriptUrl) {\n return scriptUrl;\n }\n });\n } catch (_) {\n // Policy creation failed (most likely another DOMPurify script has\n // already run). Skip creating the policy, as this will only cause errors\n // if TT are enforced.\n console.warn('TrustedTypes policy ' + policyName + ' could not be created.');\n return null;\n }\n};\nconst _createHooksMap = function _createHooksMap() {\n return {\n afterSanitizeAttributes: [],\n afterSanitizeElements: [],\n afterSanitizeShadowDOM: [],\n beforeSanitizeAttributes: [],\n beforeSanitizeElements: [],\n beforeSanitizeShadowDOM: [],\n uponSanitizeAttribute: [],\n uponSanitizeElement: [],\n uponSanitizeShadowNode: []\n };\n};\n/**\n * Resolve a set-valued configuration option: a fresh set built from\n * cfg[key] when it is an own array property (seeded with a clone of\n * options.base when given, case-normalized via options.transform),\n * the fallback set otherwise.\n *\n * @param cfg the cloned, prototype-free configuration object\n * @param key the configuration property to read\n * @param fallback the set to use when the option is absent or not an array\n * @param options transform and optional base set to merge into\n * @returns the resolved set\n */\nconst _resolveSetOption = function _resolveSetOption(cfg, key, fallback, options) {\n return objectHasOwnProperty(cfg, key) && arrayIsArray(cfg[key]) ? addToSet(options.base ? clone(options.base) : {}, cfg[key], options.transform) : fallback;\n};\n/**\n * Resolve an object-valued configuration option: a prototype-free clone\n * of cfg[key] when it is an own, truthy object property, else a fresh\n * fallback built by makeFallback (fresh on every parse, so a previous\n * parse can never leak state into the next one).\n *\n * @param cfg the cloned, prototype-free configuration object\n * @param key the configuration property to read\n * @param makeFallback builds the fallback value when the option is absent\n * @returns the resolved object\n */\nconst _resolveObjectOption = function _resolveObjectOption(cfg, key, makeFallback) {\n const value = objectHasOwnProperty(cfg, key) ? cfg[key] : undefined;\n return value && typeof value === 'object' ? clone(value) : makeFallback();\n};\nfunction createDOMPurify() {\n let window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();\n const DOMPurify = root => createDOMPurify(root);\n DOMPurify.version = '3.4.14';\n DOMPurify.removed = [];\n if (!window || !window.document || window.document.nodeType !== NODE_TYPE.document || !window.Element) {\n // Not running in a browser, provide a factory function\n // so that you can pass your own Window\n DOMPurify.isSupported = false;\n return DOMPurify;\n }\n let document = window.document;\n const originalDocument = document;\n const currentScript = originalDocument.currentScript;\n window.DocumentFragment;\n const HTMLTemplateElement = window.HTMLTemplateElement,\n Node = window.Node,\n Element = window.Element,\n NodeFilter = window.NodeFilter,\n _window$NamedNodeMap = window.NamedNodeMap;\n _window$NamedNodeMap === void 0 ? window.NamedNodeMap || window.MozNamedAttrMap : _window$NamedNodeMap;\n window.HTMLFormElement;\n const DOMParser = window.DOMParser,\n trustedTypes = window.trustedTypes;\n const ElementPrototype = Element.prototype;\n const cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n const remove = lookupGetter(ElementPrototype, 'remove');\n const getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n const getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n const getParentNode = lookupGetter(ElementPrototype, 'parentNode');\n const getShadowRoot = lookupGetter(ElementPrototype, 'shadowRoot');\n const getAttributes = lookupGetter(ElementPrototype, 'attributes');\n const getNodeType = Node && Node.prototype ? lookupGetter(Node.prototype, 'nodeType') : null;\n const getNodeName = Node && Node.prototype ? lookupGetter(Node.prototype, 'nodeName') : null;\n const getOwnerDocument = Node && Node.prototype ? lookupGetter(Node.prototype, 'ownerDocument') : null;\n /* Clobber-safe nodeType / nodeName reads through the cached Node.prototype\n getters, with a direct-property fallback for environments that lack\n Node.prototype. Sites that need a different fallback (e.g. _isClobbered\n returns early on a null name) intentionally keep their own reads. */\n const _readNodeType = function _readNodeType(node) {\n return getNodeType ? getNodeType(node) : node.nodeType;\n };\n const _readNodeName = function _readNodeName(node) {\n return getNodeName ? getNodeName(node) : node.nodeName;\n };\n // As per issue #47, the web-components registry is inherited by a\n // new document created via createHTMLDocument. As per the spec\n // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n // a new empty registry is used when creating a template contents owner\n // document, so we use that as our parent document to ensure nothing\n // is inherited.\n if (typeof HTMLTemplateElement === 'function') {\n const template = document.createElement('template');\n if (template.content && template.content.ownerDocument) {\n document = template.content.ownerDocument;\n }\n }\n let trustedTypesPolicy;\n let emptyHTML = '';\n // The instance's own internal Trusted Types policy. Unlike a caller-supplied\n // `TRUSTED_TYPES_POLICY`, this is created at most once — Trusted Types throws\n // on duplicate policy names — and is the only policy allowed to persist\n // across configurations and survive `clearConfig()`.\n let defaultTrustedTypesPolicy;\n let defaultTrustedTypesPolicyResolved = false;\n // Tracks whether we are already inside a call to the configured Trusted Types\n // policy (`createHTML` or `createScriptURL`). If a supplied policy callback\n // itself calls `DOMPurify.sanitize` (the cause of #1422), `sanitize` would\n // re-enter the policy and recurse until the stack overflows. We detect that\n // re-entry and throw a clear, actionable error instead. The guard is shared\n // across both callbacks, because either one re-entering `sanitize` triggers\n // the same unbounded recursion.\n let IN_TRUSTED_TYPES_POLICY = 0;\n const _assertNotInTrustedTypesPolicy = function _assertNotInTrustedTypesPolicy() {\n if (IN_TRUSTED_TYPES_POLICY > 0) {\n throw typeErrorCreate('A configured TRUSTED_TYPES_POLICY callback (createHTML or ' + 'createScriptURL) must not call DOMPurify.sanitize, as that causes ' + 'infinite recursion. Do not pass a policy whose callbacks wrap ' + 'DOMPurify as TRUSTED_TYPES_POLICY; see the \"DOMPurify and Trusted ' + 'Types\" section of the README.');\n }\n };\n const _createTrustedHTML = function _createTrustedHTML(html) {\n _assertNotInTrustedTypesPolicy();\n IN_TRUSTED_TYPES_POLICY++;\n try {\n return trustedTypesPolicy.createHTML(html);\n } finally {\n IN_TRUSTED_TYPES_POLICY--;\n }\n };\n const _createTrustedScriptURL = function _createTrustedScriptURL(scriptUrl) {\n _assertNotInTrustedTypesPolicy();\n IN_TRUSTED_TYPES_POLICY++;\n try {\n return trustedTypesPolicy.createScriptURL(scriptUrl);\n } finally {\n IN_TRUSTED_TYPES_POLICY--;\n }\n };\n // Lazily resolve (and cache) the instance's internal default policy.\n // Resolution is attempted at most once: a successful `createPolicy` cannot be\n // repeated (Trusted Types throws on duplicate names), and a failed or\n // unsupported attempt must not be retried on every parse.\n const _getDefaultTrustedTypesPolicy = function _getDefaultTrustedTypesPolicy() {\n if (!defaultTrustedTypesPolicyResolved) {\n defaultTrustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, currentScript);\n defaultTrustedTypesPolicyResolved = true;\n }\n return defaultTrustedTypesPolicy;\n };\n const _document = document,\n implementation = _document.implementation,\n createNodeIterator = _document.createNodeIterator,\n createDocumentFragment = _document.createDocumentFragment,\n getElementsByTagName = _document.getElementsByTagName;\n const importNode = originalDocument.importNode;\n let hooks = _createHooksMap();\n /**\n * Expose whether this browser supports running the full DOMPurify.\n */\n DOMPurify.isSupported = typeof entries === 'function' && typeof getParentNode === 'function' && implementation && implementation.createHTMLDocument !== undefined;\n const MUSTACHE_EXPR$1 = MUSTACHE_EXPR,\n ERB_EXPR$1 = ERB_EXPR,\n TMPLIT_EXPR$1 = TMPLIT_EXPR,\n DATA_ATTR$1 = DATA_ATTR,\n ARIA_ATTR$1 = ARIA_ATTR,\n IS_SCRIPT_OR_DATA$1 = IS_SCRIPT_OR_DATA,\n ATTR_WHITESPACE$1 = ATTR_WHITESPACE,\n CUSTOM_ELEMENT$1 = CUSTOM_ELEMENT;\n let IS_ALLOWED_URI$1 = IS_ALLOWED_URI;\n /**\n * We consider the elements and attributes below to be safe. Ideally\n * don't add any new ones but feel free to remove unwanted ones.\n */\n /* allowed element names */\n let ALLOWED_TAGS = null;\n const DEFAULT_ALLOWED_TAGS = addToSet({}, [...html$1, ...svg$1, ...svgFilters, ...mathMl$1, ...text]);\n /* Allowed attribute names */\n let ALLOWED_ATTR = null;\n const DEFAULT_ALLOWED_ATTR = addToSet({}, [...html, ...svg, ...mathMl, ...xml]);\n /*\n * Configure how DOMPurify should handle custom elements and their attributes as well as customized built-in elements.\n * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements)\n * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list)\n * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`.\n */\n let CUSTOM_ELEMENT_HANDLING = Object.seal(create(null, {\n tagNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n attributeNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n allowCustomizedBuiltInElements: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: false\n }\n }));\n /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n let FORBID_TAGS = null;\n /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n let FORBID_ATTR = null;\n /* Config object to store ADD_TAGS/ADD_ATTR functions (when used as functions) */\n const EXTRA_ELEMENT_HANDLING = Object.seal(create(null, {\n tagCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n attributeCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n }\n }));\n /* Decide if ARIA attributes are okay */\n let ALLOW_ARIA_ATTR = true;\n /* Decide if custom data attributes are okay */\n let ALLOW_DATA_ATTR = true;\n /* Decide if unknown protocols are okay */\n let ALLOW_UNKNOWN_PROTOCOLS = false;\n /* Decide if self-closing tags in attributes are allowed.\n * Usually removed due to a mXSS issue in jQuery 3.0 */\n let ALLOW_SELF_CLOSE_IN_ATTR = true;\n /* Output should be safe for common template engines.\n * This means, DOMPurify removes data attributes, mustaches and ERB\n */\n let SAFE_FOR_TEMPLATES = false;\n /* Output should be safe even for XML used within HTML and alike.\n * This means, DOMPurify removes comments when containing risky content.\n */\n let SAFE_FOR_XML = true;\n /* Decide if document with <html>... should be returned */\n let WHOLE_DOCUMENT = false;\n /* Track whether config is already set on this instance of DOMPurify. */\n let SET_CONFIG = false;\n /* Pristine allowlist bindings captured at setConfig() time. On the\n * persistent-config path sanitize() restores the sets from these before\n * the per-walk hook clone-guard, so a hook's in-call widening cannot\n * carry across calls. Null until setConfig() is called; reset by\n * clearConfig(). */\n let SET_CONFIG_ALLOWED_TAGS = null;\n let SET_CONFIG_ALLOWED_ATTR = null;\n /* Decide if all elements (e.g. style, script) must be children of\n * document.body. By default, browsers might move them to document.head */\n let FORCE_BODY = false;\n /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported).\n * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n */\n let RETURN_DOM = false;\n /* Decide if a DOM `DocumentFragment` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported) */\n let RETURN_DOM_FRAGMENT = false;\n /* Try to return a Trusted Type object instead of a string, return a string in\n * case Trusted Types are not supported */\n let RETURN_TRUSTED_TYPE = false;\n /* Output should be free from DOM clobbering attacks?\n * This sanitizes markups named with colliding, clobberable built-in DOM APIs.\n */\n let SANITIZE_DOM = true;\n /* Achieve full DOM Clobbering protection by isolating the namespace of named\n * properties and JS variables, mitigating attacks that abuse the HTML/DOM spec rules.\n *\n * HTML/DOM spec rules that enable DOM Clobbering:\n * - Named Access on Window (§7.3.3)\n * - DOM Tree Accessors (§3.1.5)\n * - Form Element Parent-Child Relations (§4.10.3)\n * - Iframe srcdoc / Nested WindowProxies (§4.8.5)\n * - HTMLCollection (§4.2.10.2)\n *\n * Namespace isolation is implemented by prefixing `id` and `name` attributes\n * with a constant string, i.e., `user-content-`\n */\n let SANITIZE_NAMED_PROPS = false;\n const SANITIZE_NAMED_PROPS_PREFIX = 'user-content-';\n /* Keep element content when removing element? */\n let KEEP_CONTENT = true;\n /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n * of importing it into a new Document and returning a sanitized copy */\n let IN_PLACE = false;\n /* Allow usage of profiles like html, svg and mathMl */\n let USE_PROFILES = {};\n /* Tags to ignore content of when KEEP_CONTENT is true */\n let FORBID_CONTENTS = null;\n const DEFAULT_FORBID_CONTENTS = addToSet({}, ['annotation-xml', 'audio', 'colgroup', 'desc', 'foreignobject', 'head', 'iframe', 'math', 'mi', 'mn', 'mo', 'ms', 'mtext', 'noembed', 'noframes', 'noscript', 'plaintext', 'script',\n // <selectedcontent> mirrors the selected <option>'s subtree, cloned by\n // the UA (customizable <select>) — including any on* handlers — and the\n // engine re-mirrors synchronously whenever a removal changes which\n // option/selectedcontent is current, even inside DOMPurify's inert\n // DOMParser document. Hoisting its children on removal re-inserts a fresh\n // mirror target ahead of the walk, which the engine refills, looping\n // forever (DoS) and amplifying output. Dropping its content on removal\n // (rather than hoisting) breaks that cascade; the content is a duplicate\n // of the option, which is sanitized on its own. See campaign-3 F1/F6.\n 'selectedcontent', 'style', 'svg', 'template', 'thead', 'title', 'video', 'xmp']);\n /* Tags that are safe for data: URIs */\n let DATA_URI_TAGS = null;\n const DEFAULT_DATA_URI_TAGS = addToSet({}, ['audio', 'video', 'img', 'source', 'image', 'track']);\n /* Attributes safe for values like \"javascript:\" */\n let URI_SAFE_ATTRIBUTES = null;\n const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, ['alt', 'class', 'for', 'id', 'label', 'name', 'pattern', 'placeholder', 'role', 'summary', 'title', 'value', 'style', 'xmlns']);\n const MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n const HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n /* Document namespace */\n let NAMESPACE = HTML_NAMESPACE;\n let IS_EMPTY_INPUT = false;\n /* Allowed XHTML+XML namespaces */\n let ALLOWED_NAMESPACES = null;\n const DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE], stringToString);\n const DEFAULT_MATHML_TEXT_INTEGRATION_POINTS = freeze(['mi', 'mo', 'mn', 'ms', 'mtext']);\n let MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, DEFAULT_MATHML_TEXT_INTEGRATION_POINTS);\n const DEFAULT_HTML_INTEGRATION_POINTS = freeze(['annotation-xml']);\n let HTML_INTEGRATION_POINTS = addToSet({}, DEFAULT_HTML_INTEGRATION_POINTS);\n // Certain elements are allowed in both SVG and HTML\n // namespace. We need to specify them explicitly\n // so that they don't get erroneously deleted from\n // HTML namespace.\n const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, ['title', 'style', 'font', 'a', 'script']);\n /* Parsing of strict XHTML documents */\n let PARSER_MEDIA_TYPE = null;\n const SUPPORTED_PARSER_MEDIA_TYPES = ['application/xhtml+xml', 'text/html'];\n const DEFAULT_PARSER_MEDIA_TYPE = 'text/html';\n let transformCaseFunc = null;\n /* Keep a reference to config to pass to hooks */\n let CONFIG = null;\n /* Ideally, do not touch anything below this line */\n /* ______________________________________________ */\n const formElement = document.createElement('form');\n const isRegexOrFunction = function isRegexOrFunction(testValue) {\n return testValue instanceof RegExp || testValue instanceof Function;\n };\n /**\n * _parseConfig\n *\n * @param cfg optional config literal\n */\n // eslint-disable-next-line complexity\n const _parseConfig = function _parseConfig() {\n let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (CONFIG && CONFIG === cfg) {\n return;\n }\n /* Shield configuration object from tampering */\n if (!cfg || typeof cfg !== 'object') {\n cfg = {};\n }\n /* Shield configuration object from prototype pollution */\n cfg = clone(cfg);\n PARSER_MEDIA_TYPE =\n // eslint-disable-next-line unicorn/prefer-includes\n SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? DEFAULT_PARSER_MEDIA_TYPE : cfg.PARSER_MEDIA_TYPE;\n // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is.\n transformCaseFunc = PARSER_MEDIA_TYPE === 'application/xhtml+xml' ? stringToString : stringToLowerCase;\n /* Set configuration parameters */\n ALLOWED_TAGS = _resolveSetOption(cfg, 'ALLOWED_TAGS', DEFAULT_ALLOWED_TAGS, {\n transform: transformCaseFunc\n });\n ALLOWED_ATTR = _resolveSetOption(cfg, 'ALLOWED_ATTR', DEFAULT_ALLOWED_ATTR, {\n transform: transformCaseFunc\n });\n ALLOWED_NAMESPACES = _resolveSetOption(cfg, 'ALLOWED_NAMESPACES', DEFAULT_ALLOWED_NAMESPACES, {\n transform: stringToString\n });\n URI_SAFE_ATTRIBUTES = _resolveSetOption(cfg, 'ADD_URI_SAFE_ATTR', DEFAULT_URI_SAFE_ATTRIBUTES, {\n transform: transformCaseFunc,\n base: DEFAULT_URI_SAFE_ATTRIBUTES\n });\n DATA_URI_TAGS = _resolveSetOption(cfg, 'ADD_DATA_URI_TAGS', DEFAULT_DATA_URI_TAGS, {\n transform: transformCaseFunc,\n base: DEFAULT_DATA_URI_TAGS\n });\n FORBID_CONTENTS = _resolveSetOption(cfg, 'FORBID_CONTENTS', DEFAULT_FORBID_CONTENTS, {\n transform: transformCaseFunc\n });\n FORBID_TAGS = _resolveSetOption(cfg, 'FORBID_TAGS', clone({}), {\n transform: transformCaseFunc\n });\n FORBID_ATTR = _resolveSetOption(cfg, 'FORBID_ATTR', clone({}), {\n transform: transformCaseFunc\n });\n USE_PROFILES = objectHasOwnProperty(cfg, 'USE_PROFILES') ? cfg.USE_PROFILES && typeof cfg.USE_PROFILES === 'object' ? clone(cfg.USE_PROFILES) : cfg.USE_PROFILES : false;\n ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true\n ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true\n ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false\n ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false; // Default true\n SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false\n SAFE_FOR_XML = cfg.SAFE_FOR_XML !== false; // Default true\n WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false\n RETURN_DOM = cfg.RETURN_DOM || false; // Default false\n RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false\n RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false\n FORCE_BODY = cfg.FORCE_BODY || false; // Default false\n SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true\n SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false; // Default false\n KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true\n IN_PLACE = cfg.IN_PLACE || false; // Default false\n IS_ALLOWED_URI$1 = isRegex(cfg.ALLOWED_URI_REGEXP) ? cfg.ALLOWED_URI_REGEXP : IS_ALLOWED_URI; // Default regexp\n NAMESPACE = typeof cfg.NAMESPACE === 'string' ? cfg.NAMESPACE : HTML_NAMESPACE; // Default HTML namespace\n MATHML_TEXT_INTEGRATION_POINTS = _resolveObjectOption(cfg, 'MATHML_TEXT_INTEGRATION_POINTS', () => addToSet({}, DEFAULT_MATHML_TEXT_INTEGRATION_POINTS) // Default built-in map\n );\n HTML_INTEGRATION_POINTS = _resolveObjectOption(cfg, 'HTML_INTEGRATION_POINTS', () => addToSet({}, DEFAULT_HTML_INTEGRATION_POINTS) // Default built-in map\n );\n const customElementHandling = _resolveObjectOption(cfg, 'CUSTOM_ELEMENT_HANDLING', () => create(null));\n CUSTOM_ELEMENT_HANDLING = create(null);\n if (objectHasOwnProperty(customElementHandling, 'tagNameCheck') && isRegexOrFunction(customElementHandling.tagNameCheck)) {\n CUSTOM_ELEMENT_HANDLING.tagNameCheck = customElementHandling.tagNameCheck; // Default undefined\n }\n if (objectHasOwnProperty(customElementHandling, 'attributeNameCheck') && isRegexOrFunction(customElementHandling.attributeNameCheck)) {\n CUSTOM_ELEMENT_HANDLING.attributeNameCheck = customElementHandling.attributeNameCheck; // Default undefined\n }\n if (objectHasOwnProperty(customElementHandling, 'allowCustomizedBuiltInElements') && typeof customElementHandling.allowCustomizedBuiltInElements === 'boolean') {\n CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = customElementHandling.allowCustomizedBuiltInElements; // Default undefined\n }\n seal(CUSTOM_ELEMENT_HANDLING);\n if (SAFE_FOR_TEMPLATES) {\n ALLOW_DATA_ATTR = false;\n }\n if (RETURN_DOM_FRAGMENT) {\n RETURN_DOM = true;\n }\n /* Parse profile info */\n if (USE_PROFILES) {\n ALLOWED_TAGS = addToSet({}, text);\n ALLOWED_ATTR = create(null);\n if (USE_PROFILES.html === true) {\n addToSet(ALLOWED_TAGS, html$1);\n addToSet(ALLOWED_ATTR, html);\n }\n if (USE_PROFILES.svg === true) {\n addToSet(ALLOWED_TAGS, svg$1);\n addToSet(ALLOWED_ATTR, svg);\n addToSet(ALLOWED_ATTR, xml);\n }\n if (USE_PROFILES.svgFilters === true) {\n addToSet(ALLOWED_TAGS, svgFilters);\n addToSet(ALLOWED_ATTR, svg);\n addToSet(ALLOWED_ATTR, xml);\n }\n if (USE_PROFILES.mathMl === true) {\n addToSet(ALLOWED_TAGS, mathMl$1);\n addToSet(ALLOWED_ATTR, mathMl);\n addToSet(ALLOWED_ATTR, xml);\n }\n }\n /* Always reset function-based ADD_TAGS / ADD_ATTR checks to prevent\n * leaking across calls when switching from function to array config */\n EXTRA_ELEMENT_HANDLING.tagCheck = null;\n EXTRA_ELEMENT_HANDLING.attributeCheck = null;\n /* Merge configuration parameters */\n if (objectHasOwnProperty(cfg, 'ADD_TAGS')) {\n if (typeof cfg.ADD_TAGS === 'function') {\n EXTRA_ELEMENT_HANDLING.tagCheck = cfg.ADD_TAGS;\n } else if (arrayIsArray(cfg.ADD_TAGS)) {\n if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n ALLOWED_TAGS = clone(ALLOWED_TAGS);\n }\n addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);\n }\n }\n if (objectHasOwnProperty(cfg, 'ADD_ATTR')) {\n if (typeof cfg.ADD_ATTR === 'function') {\n EXTRA_ELEMENT_HANDLING.attributeCheck = cfg.ADD_ATTR;\n } else if (arrayIsArray(cfg.ADD_ATTR)) {\n if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n ALLOWED_ATTR = clone(ALLOWED_ATTR);\n }\n addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);\n }\n }\n if (objectHasOwnProperty(cfg, 'ADD_FORBID_CONTENTS') && arrayIsArray(cfg.ADD_FORBID_CONTENTS)) {\n if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n FORBID_CONTENTS = clone(FORBID_CONTENTS);\n }\n addToSet(FORBID_CONTENTS, cfg.ADD_FORBID_CONTENTS, transformCaseFunc);\n }\n /* Add #text in case KEEP_CONTENT is set to true */\n if (KEEP_CONTENT) {\n ALLOWED_TAGS['#text'] = true;\n }\n /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */\n if (WHOLE_DOCUMENT) {\n addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);\n }\n /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */\n if (ALLOWED_TAGS.table) {\n addToSet(ALLOWED_TAGS, ['tbody']);\n delete FORBID_TAGS.tbody;\n }\n // Re-derive the active Trusted Types policy from this configuration on\n // every parse. The active policy must never be sticky closure state that\n // outlives the config that set it: a caller-supplied policy left in place\n // after `clearConfig()` — or after a later call that supplied none, or\n // `TRUSTED_TYPES_POLICY: null` — could sign a subsequent \"default\"\n // `RETURN_TRUSTED_TYPE` result with a foreign, possibly unsafe policy.\n // See GHSA-vxr8-fq34-vvx9.\n if (cfg.TRUSTED_TYPES_POLICY) {\n if (typeof cfg.TRUSTED_TYPES_POLICY.createHTML !== 'function') {\n throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createHTML\" hook.');\n }\n if (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== 'function') {\n throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createScriptURL\" hook.');\n }\n // A caller-supplied policy applies to this configuration only.\n const previousTrustedTypesPolicy = trustedTypesPolicy;\n trustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY;\n // Sign local variables required by `sanitize`. If the supplied policy's\n // `createHTML` is circular (i.e. it calls `DOMPurify.sanitize`), this\n // throws via the re-entrancy guard. Restore the previous policy first so\n // the instance is not left in a poisoned state. See #1422.\n try {\n emptyHTML = _createTrustedHTML('');\n } catch (error) {\n trustedTypesPolicy = previousTrustedTypesPolicy;\n throw error;\n }\n } else if (cfg.TRUSTED_TYPES_POLICY === null) {\n // Explicit opt-out for this call: perform no Trusted Types signing and\n // create nothing (so a strict `trusted-types` CSP that disallows a\n // `dompurify` policy can still call `sanitize` from inside its own\n // policy — see #1422). Resetting to `undefined` rather than a sticky\n // `null` also drops any previously retained caller policy, so it cannot\n // resurface on a later call, while still allowing the next config-less\n // call to restore the internal default policy. See GHSA-vxr8-fq34-vvx9.\n trustedTypesPolicy = undefined;\n emptyHTML = '';\n } else {\n // No policy supplied: keep the currently active policy if one is set — a\n // previously supplied policy is intentionally sticky across config-less\n // calls — otherwise fall back to the instance's own internal policy,\n // created at most once. (A policy supplied for a *single* call still\n // lingers by design; what must not linger is a policy whose configuration\n // has been torn down via `clearConfig()`, which restores the default.)\n if (trustedTypesPolicy === undefined) {\n trustedTypesPolicy = _getDefaultTrustedTypesPolicy();\n }\n // Sign internal variables only when a policy is active. A falsy policy\n // (Trusted Types unsupported, creation failed, or an explicit opt-out)\n // leaves `emptyHTML` as a plain string, so we never call `.createHTML` on\n // a non-policy and throw. See #1422.\n if (trustedTypesPolicy && typeof emptyHTML === 'string') {\n emptyHTML = _createTrustedHTML('');\n }\n }\n // Prevent further manipulation of configuration.\n // Not available in IE8, Safari 5, etc.\n if (freeze) {\n freeze(cfg);\n }\n CONFIG = cfg;\n };\n /* Keep track of all possible SVG and MathML tags\n * so that we can perform the namespace checks\n * correctly. */\n const ALL_SVG_TAGS = addToSet({}, [...svg$1, ...svgFilters, ...svgDisallowed]);\n const ALL_MATHML_TAGS = addToSet({}, [...mathMl$1, ...mathMlDisallowed]);\n /**\n * Namespace rules for an element in the SVG namespace.\n *\n * @param tagName the element's lowercase tag name\n * @param parent the (possibly simulated) parent node\n * @param parentTagName the parent's lowercase tag name\n * @returns true if a spec-compliant parser could produce this element\n */\n const _checkSvgNamespace = function _checkSvgNamespace(tagName, parent, parentTagName) {\n // The only way to switch from HTML namespace to SVG\n // is via <svg>. If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'svg';\n }\n // The only way to switch from MathML to SVG is via <svg>\n // if the parent is either <annotation-xml> or a MathML\n // text integration point.\n if (parent.namespaceURI === MATHML_NAMESPACE) {\n return tagName === 'svg' && (parentTagName === 'annotation-xml' || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);\n }\n // We only allow elements that are defined in SVG\n // spec. All others are disallowed in SVG namespace.\n return Boolean(ALL_SVG_TAGS[tagName]);\n };\n /**\n * Namespace rules for an element in the MathML namespace.\n *\n * @param tagName the element's lowercase tag name\n * @param parent the (possibly simulated) parent node\n * @param parentTagName the parent's lowercase tag name\n * @returns true if a spec-compliant parser could produce this element\n */\n const _checkMathMlNamespace = function _checkMathMlNamespace(tagName, parent, parentTagName) {\n // The only way to switch from HTML namespace to MathML\n // is via <math>. If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'math';\n }\n // The only way to switch from SVG to MathML is via\n // <math> and HTML integration points\n if (parent.namespaceURI === SVG_NAMESPACE) {\n return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];\n }\n // We only allow elements that are defined in MathML\n // spec. All others are disallowed in MathML namespace.\n return Boolean(ALL_MATHML_TAGS[tagName]);\n };\n /**\n * Namespace rules for an element in the HTML namespace.\n *\n * @param tagName the element's lowercase tag name\n * @param parent the (possibly simulated) parent node\n * @param parentTagName the parent's lowercase tag name\n * @returns true if a spec-compliant parser could produce this element\n */\n const _checkHtmlNamespace = function _checkHtmlNamespace(tagName, parent, parentTagName) {\n // The only way to switch from SVG to HTML is via\n // HTML integration points, and from MathML to HTML\n // is via MathML text integration points\n if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) {\n return false;\n }\n if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) {\n return false;\n }\n // We disallow tags that are specific for MathML\n // or SVG and should never appear in HTML namespace\n return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]);\n };\n /**\n * @param element a DOM element whose namespace is being checked\n * @returns Return false if the element has a\n * namespace that a spec-compliant parser would never\n * return. Return true otherwise.\n */\n const _checkValidNamespace = function _checkValidNamespace(element) {\n let parent = getParentNode(element);\n // In JSDOM, if we're inside shadow DOM, then parentNode\n // can be null. We just simulate parent in this case.\n if (!parent || !parent.tagName) {\n parent = {\n namespaceURI: NAMESPACE,\n tagName: 'template'\n };\n }\n const tagName = stringToLowerCase(element.tagName);\n const parentTagName = stringToLowerCase(parent.tagName);\n if (!ALLOWED_NAMESPACES[element.namespaceURI]) {\n return false;\n }\n if (element.namespaceURI === SVG_NAMESPACE) {\n return _checkSvgNamespace(tagName, parent, parentTagName);\n }\n if (element.namespaceURI === MATHML_NAMESPACE) {\n return _checkMathMlNamespace(tagName, parent, parentTagName);\n }\n if (element.namespaceURI === HTML_NAMESPACE) {\n return _checkHtmlNamespace(tagName, parent, parentTagName);\n }\n // For XHTML and XML documents that support custom namespaces\n if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && ALLOWED_NAMESPACES[element.namespaceURI]) {\n return true;\n }\n // The code should never reach this place (this means\n // that the element somehow got namespace that is not\n // HTML, SVG, MathML or allowed via ALLOWED_NAMESPACES).\n // Return false just in case.\n return false;\n };\n /**\n * _forceRemove\n *\n * @param node a DOM node\n */\n const _forceRemove = function _forceRemove(node) {\n arrayPush(DOMPurify.removed, {\n element: node\n });\n try {\n // eslint-disable-next-line unicorn/prefer-dom-node-remove\n getParentNode(node).removeChild(node);\n } catch (_) {\n /* The normal detach failed — this is reached for a parentless node\n (getParentNode() is null, so .removeChild throws). Element.prototype\n .remove() is itself a spec no-op on a parentless node, so a recorded\n \"removal\" would otherwise hand the caller back an intact,\n payload-bearing node (e.g. a detached IN_PLACE root the mXSS canary or\n the style-with-element-child rule decided to kill). Fail closed by\n throwing — exactly as a clobbered root does at the IN_PLACE entry —\n rather than trying to \"neutralize\" the node via its own methods.\n Neutralizing would mean calling getAttributeNames()/removeAttribute()\n on the node, both of which a <form> root can clobber via a named child\n (and _isClobbered does not even probe getAttributeNames), so the\n neutralize step could itself be silently defeated, leaving the payload\n intact. A throw touches only the cached, clobber-safe remove() and\n getParentNode(). Generalizes GHSA-r47g-fvhr-h676 (clobbered-form root)\n to every root-kill reason. REPORT-3.\n This lives inside the catch, so it never fires for a normally-removed\n in-tree node: those have a parent, removeChild() succeeds, and the\n catch is not entered. Only a kept (parentless) root reaches here. */\n remove(node);\n if (!getParentNode(node)) {\n throw typeErrorCreate('a node selected for removal could not be detached from its tree ' + 'and cannot be safely returned; refusing to sanitize in place');\n }\n }\n };\n /**\n * _stripAttributeNode\n *\n * Remove a single Attr node case/namespace-exactly on an attribute-teardown\n * path. Name-based removeAttribute() ASCII-lowercases its lookup key for an\n * HTML element in an HTML document and so silently misses a case-preserved\n * handler (e.g. `ONERROR` off an XML/XHTML import) - the same defect\n * _removeAttribute() was fixed for, which a name-based call would reintroduce\n * on these IN_PLACE teardown paths. Unlike _removeAttribute this does not\n * record into DOMPurify.removed: the neutralize passes intentionally do not\n * book-keep. A clobbered/detached node falls back to best-effort name-based\n * removal.\n *\n * @param element the element to strip the attribute from\n * @param attribute the Attr node to remove\n * @param name the attribute's name, for the fallback path\n */\n const _stripAttributeNode = function _stripAttributeNode(element, attribute, name) {\n try {\n element.removeAttributeNode(attribute);\n } catch (_) {\n try {\n element.removeAttribute(name);\n } catch (_) {}\n }\n };\n /**\n * _neutralizeRoot\n *\n * Fail-closed teardown of an in-place root after the sanitize walk aborts\n * (campaign-3 F2). An internal throw mid-walk — e.g. a page-registered\n * custom element's reaction detaches a node so `_forceRemove`'s deliberate\n * parentless guard throws, or any other re-entrant engine mutation — would\n * otherwise leave the caller's *live* tree half-sanitized, with everything\n * after the abort point still carrying its handlers. There is no safe way\n * to resume the walk (the tree mutated under us), so we strip the root bare:\n * remove every child and every attribute, then let the caller's catch see\n * the original error. Clobber-safe (cached `remove`/`childNodes`/`attributes`\n * getters; the root was already clobber-pre-flighted at the IN_PLACE entry).\n *\n * @param root the in-place root to empty\n */\n const _neutralizeRoot = function _neutralizeRoot(root) {\n /* Strip every disallowed attribute (on* handlers included) off the whole\n subtree BEFORE detaching anything. Detaching first would hand back\n handler-bearing originals (e.g. an already-loading `<img onerror>`)\n whose queued resource event still fires in page scope after we throw.\n Clobber-safe reads; a doomed clobbered node's own attributes are\n irrelevant while its non-clobbered descendants are reached and scrubbed. */\n _neutralizeSubtree(root);\n const childNodes = getChildNodes(root);\n if (childNodes) {\n const snapshot = [];\n arrayForEach(childNodes, child => {\n arrayPush(snapshot, child);\n });\n arrayForEach(snapshot, child => {\n try {\n remove(child);\n } catch (_) {\n /* Best-effort teardown; a still-attached child is handled below */\n }\n });\n }\n const attributes = getAttributes(root);\n if (attributes) {\n for (let i = attributes.length - 1; i >= 0; --i) {\n const attribute = attributes[i];\n const name = attribute && attribute.name;\n if (typeof name === 'string') {\n _stripAttributeNode(root, attribute, name);\n }\n }\n }\n };\n /**\n * _removeAttribute\n *\n * Name-based getAttributeNode()/removeAttribute() ASCII-lowercase their\n * lookup key for HTML elements in an HTML document, so they silently miss an\n * attribute whose stored qualified name still contains uppercase ASCII\n * letters. That happens when the node came from a case-preserving source\n * (an XML/XHTML document imported via importNode(), or createAttributeNS()),\n * where e.g. `ONERROR` survives the walk: the policy check lowercases to\n * `onerror` and rejects it, but `removeAttribute('ONERROR')` looks up\n * `onerror` and finds nothing. Remove the exact Attr node instead, which is\n * case- and namespace-exact, and fall back to name-based removal only when\n * the caller could not supply the node.\n *\n * @param name an Attribute name\n * @param element a DOM node\n * @param attr the exact Attr node to remove, when the caller has it\n */\n const _removeAttribute = function _removeAttribute(name, element, attr) {\n if (!attr) {\n try {\n attr = element.getAttributeNode(name);\n } catch (_) {\n attr = null;\n }\n }\n arrayPush(DOMPurify.removed, {\n attribute: attr || null,\n from: element\n });\n try {\n if (attr) {\n element.removeAttributeNode(attr);\n } else {\n element.removeAttribute(name);\n }\n } catch (_) {\n /* Clobbered or already-detached node - best-effort fall back to a\n name-based removal so the \"is\" handling below still runs. */\n try {\n element.removeAttribute(name);\n } catch (_) {}\n }\n // We void attribute values for unremovable \"is\" attributes\n if (name === 'is') {\n if (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n try {\n _forceRemove(element);\n } catch (_) {}\n } else {\n try {\n element.setAttribute(name, '');\n } catch (_) {}\n }\n }\n };\n /**\n * _stripDisallowedAttributes\n *\n * Removes every attribute the active configuration does not allow from a\n * single element, using the same allowlist as the main attribute pass (so\n * `on*` handlers go, but no `/^on/` blocklist is introduced). Used only to\n * neutralise nodes that are being discarded from an in-place tree.\n *\n * @param element the element to strip\n */\n const _stripDisallowedAttributes = function _stripDisallowedAttributes(element) {\n const attributes = getAttributes(element);\n if (!attributes) {\n return;\n }\n for (let i = attributes.length - 1; i >= 0; --i) {\n const attribute = attributes[i];\n const name = attribute && attribute.name;\n if (typeof name !== 'string' || ALLOWED_ATTR[transformCaseFunc(name)]) {\n continue;\n }\n _stripAttributeNode(element, attribute, name);\n }\n };\n /**\n * _neutralizeSubtree\n *\n * Completes the audit-5 F1 fix across every removal path. The KEEP_CONTENT\n * move-hoist neutralises only disallowed-tag removals; clobber, mXSS-canary,\n * namespace, comment, processing-instruction and KEEP_CONTENT:false removals\n * all drop their subtree wholesale via `_forceRemove`. On the IN_PLACE path\n * those dropped nodes are detached from the caller's LIVE tree but a\n * handler-bearing original among them (an `<img onerror>`/`<video>` that was\n * loading) keeps its queued resource event, which fires in page scope after\n * sanitize returns. This walks a removed subtree and strips every attribute\n * the active configuration does not allow — so `on*` handlers are cancelled\n * through the SAME allowlist that governs kept nodes, not a separate `/^on/`\n * blocklist. Run synchronously before sanitize returns, i.e. before any\n * queued event can fire. Hook-free by design: these nodes leave the output,\n * so firing attribute hooks for them would be surprising. Clobber-safe reads;\n * a doomed clobbered node may shadow `removeAttribute` (its own attributes are\n * irrelevant — it is discarded — while its non-clobbered descendants, e.g.\n * the `<img>`, are reached and scrubbed).\n *\n * @param root the root of a removed subtree to neutralise\n */\n const _neutralizeSubtree = function _neutralizeSubtree(root) {\n const stack = [root];\n while (stack.length > 0) {\n const node = stack.pop();\n const nodeType = _readNodeType(node);\n if (nodeType === NODE_TYPE.element) {\n _stripDisallowedAttributes(node);\n }\n const childNodes = getChildNodes(node);\n if (childNodes) {\n for (let i = childNodes.length - 1; i >= 0; --i) {\n stack.push(childNodes[i]);\n }\n }\n }\n };\n /**\n * _neutralizePatchLinkage\n *\n * IN_PLACE entry pre-pass (declarative-partial-updates / streaming\n * hardening, https://github.com/WICG/declarative-partial-updates).\n *\n * The main walk strips patch linkage (`for`/`patchsrc`) and removes range\n * markers (PIs / markup comments) node-by-node, in document order, AS it\n * reaches each node. On a live in-place root that leaves a window: from the\n * moment the root is connected until the walk arrives at a given node, that\n * node's linkage is live. A patch applied on connection/stream can fire as\n * a microtask during the walk and inject or teleport an unsanitized DOM\n * range into a region the iterator has already passed and will not revisit,\n * so the post-return \"tree is sanitized\" contract is violated. Sweep the\n * whole tree once up front and sever every linkage before the walk begins,\n * closing that window.\n *\n * This CANNOT undo a patch that already fired before sanitize ran — that is\n * the irreducible \"do not IN_PLACE a live-connected attacker tree\" caveat —\n * but it closes everything from sanitize-start onward. Gated on SAFE_FOR_XML\n * to group with the rest of the declarative-partial-updates handling and\n * stay overridable, consistent with the codebase.\n *\n * Clobber-safe traversal (cached childNodes getter); per-node try/catch so a\n * clobbered root cannot defeat the sweep of its non-clobbered descendants.\n *\n * NOTE (pending real-Chrome confirmation, see test/declarative-patch-probe\n * .html Q1): this mirrors the existing policy of keeping `for` on\n * <label>/<output>. If the shipping feature can drive a patch through a\n * surviving `for`-on-label/output + `id` pair, this pre-pass and the\n * attribute check at _isBasicCustomElement's caller must additionally drop\n * that pair on the IN_PLACE path. Left as-is until the taxonomy is verified.\n *\n * @param root the in-place root to sweep\n */\n /**\n * Central policy for declarative-partial-updates patch-linkage attributes,\n * shared by the _neutralizePatchLinkage pre-pass and _isValidAttribute so\n * the two sites cannot drift: `patchsrc` always links, `for` links\n * everywhere except on <label>/<output>, and the whole policy is gated on\n * SAFE_FOR_XML (see the rationale block in _isValidAttribute).\n *\n * @param lcName the transformCaseFunc'd attribute name\n * @param lcTag the transformCaseFunc'd tag name of the carrying element\n * @return true if the attribute is patch linkage and must be dropped\n */\n const _isPatchLinkageAttribute = function _isPatchLinkageAttribute(lcName, lcTag) {\n if (!SAFE_FOR_XML) {\n return false;\n }\n if (lcName === 'patchsrc') {\n return true;\n }\n return lcName === 'for' && lcTag !== 'label' && lcTag !== 'output';\n };\n const _neutralizePatchLinkage = function _neutralizePatchLinkage(root) {\n if (!SAFE_FOR_XML) {\n return;\n }\n const stack = [root];\n while (stack.length > 0) {\n const node = stack.pop();\n const nodeType = _readNodeType(node);\n /* Remove range markers (the target side of a patch linkage): every\n processing instruction, and any markup-bearing comment. */\n if (nodeType === NODE_TYPE.processingInstruction || nodeType === NODE_TYPE.comment && regExpTest(COMMENT_MARKUP_PROBE, node.data)) {\n try {\n remove(node);\n } catch (_) {\n /* Best-effort */\n }\n continue;\n }\n /* Strip patch-source attributes (the source side) off elements. */\n if (nodeType === NODE_TYPE.element) {\n const element = node;\n const lcTag = transformCaseFunc(_readNodeName(node));\n try {\n if (element.hasAttribute && element.hasAttribute('patchsrc')) {\n element.removeAttribute('patchsrc');\n }\n if (element.hasAttribute && element.hasAttribute('for') && _isPatchLinkageAttribute('for', lcTag)) {\n element.removeAttribute('for');\n }\n } catch (_) {\n /* Clobbered removeAttribute/hasAttribute on a doomed node — ignore */\n }\n }\n const childNodes = getChildNodes(node);\n if (childNodes) {\n for (let i = childNodes.length - 1; i >= 0; --i) {\n stack.push(childNodes[i]);\n }\n }\n }\n };\n /**\n * _initDocument\n *\n * @param dirty - a string of dirty markup\n * @return a DOM, filled with the dirty markup\n */\n const _initDocument = function _initDocument(dirty) {\n /* Create a HTML document */\n let doc = null;\n let leadingWhitespace = null;\n if (FORCE_BODY) {\n dirty = '<remove></remove>' + dirty;\n } else {\n /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */\n const matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n leadingWhitespace = matches && matches[0];\n }\n if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && NAMESPACE === HTML_NAMESPACE) {\n // Root of XHTML doc must contain xmlns declaration (see https://www.w3.org/TR/xhtml1/normative.html#strict)\n dirty = '<html xmlns=\"http://www.w3.org/1999/xhtml\"><head></head><body>' + dirty + '</body></html>';\n }\n const dirtyPayload = trustedTypesPolicy ? _createTrustedHTML(dirty) : dirty;\n /*\n * Use the DOMParser API by default, fallback later if needs be\n * DOMParser not work for svg when has multiple root element.\n */\n if (NAMESPACE === HTML_NAMESPACE) {\n try {\n doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);\n } catch (_) {}\n }\n /* Use createHTMLDocument in case DOMParser is not available */\n if (!doc || !doc.documentElement) {\n doc = implementation.createDocument(NAMESPACE, 'template', null);\n try {\n doc.documentElement.innerHTML = IS_EMPTY_INPUT ? emptyHTML : dirtyPayload;\n } catch (_) {\n // Syntax error if dirtyPayload is invalid xml\n }\n }\n const body = doc.body || doc.documentElement;\n if (dirty && leadingWhitespace) {\n body.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null);\n }\n /* Work on whole document or just its body */\n if (NAMESPACE === HTML_NAMESPACE) {\n return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? 'html' : 'body')[0];\n }\n return WHOLE_DOCUMENT ? doc.documentElement : body;\n };\n /**\n * Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document.\n *\n * @param root The root element or node to start traversing on.\n * @return The created NodeIterator\n */\n const _createNodeIterator = function _createNodeIterator(root) {\n /* Read ownerDocument through the cached Node.prototype getter, never the\n direct property. HTMLFormElement has [LegacyOverrideBuiltIns], so a\n clobbering child (<input name=\"ownerDocument\"> or a form-associated\n external input) shadows the prototype getter and makes a direct read\n return that <input>. createNodeIterator.call(<input>, ...) then throws\n \"Illegal invocation\", and on the IN_PLACE path that throw lands before\n the walk's fail-closed barrier - leaving the caller's live tree, with\n any already-armed handler in it, un-neutralized. The cached getter\n returns the real Document regardless of the clobber. */\n const doc = getOwnerDocument ? getOwnerDocument(root) : root.ownerDocument;\n return createNodeIterator.call(doc || root, root,\n // eslint-disable-next-line no-bitwise\n NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT | NodeFilter.SHOW_PROCESSING_INSTRUCTION | NodeFilter.SHOW_CDATA_SECTION, null);\n };\n /**\n * Replace template expression syntax (mustache, ERB, template\n * literal) with a space; shared by all SAFE_FOR_TEMPLATES scrub\n * sites. Order matters: mustache, then ERB, then template literal.\n *\n * @param value the string to scrub\n * @returns the scrubbed string\n */\n const _stripTemplateExpressions = function _stripTemplateExpressions(value) {\n value = stringReplace(value, MUSTACHE_EXPR$1, ' ');\n value = stringReplace(value, ERB_EXPR$1, ' ');\n value = stringReplace(value, TMPLIT_EXPR$1, ' ');\n return value;\n };\n /**\n * Strip template-engine expressions ({{...}}, ${...}, <%...%>) from the\n * character data of an element subtree. Used as the final safety net for\n * SAFE_FOR_TEMPLATES on every DOM-returning code path so that expressions\n * which only form after text-node normalization (e.g. fragments split across\n * stripped elements) cannot survive into a template-evaluating framework.\n *\n * Walks text/comment/CDATA/processing-instruction nodes and mutates `.data`\n * in place rather than round-tripping through innerHTML. This preserves\n * descendant node references (important for IN_PLACE callers), avoids a\n * serialize/reparse cycle, and reads literal character data — which means\n * `<%...%>` in text content matches the ERB regex against its real bytes\n * instead of the HTML-entity-escaped form innerHTML would produce.\n *\n * Attribute values are not visited here; SAFE_FOR_TEMPLATES handling for\n * attributes is performed during the per-node `_sanitizeAttributes` pass.\n *\n * @param node The root element whose character data should be scrubbed.\n */\n const _scrubTemplateExpressions2 = function _scrubTemplateExpressions(node) {\n var _node$querySelectorAl;\n node.normalize();\n /* Clobber-safe ownerDocument read, same reasoning as _createNodeIterator:\n under SAFE_FOR_TEMPLATES this runs on the live IN_PLACE root, which may\n carry a form-named-getter override of ownerDocument. */\n const doc = getOwnerDocument ? getOwnerDocument(node) : node.ownerDocument;\n const walker = createNodeIterator.call(doc || node, node,\n // eslint-disable-next-line no-bitwise\n NodeFilter.SHOW_TEXT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_CDATA_SECTION | NodeFilter.SHOW_PROCESSING_INSTRUCTION, null);\n let currentNode = walker.nextNode();\n while (currentNode) {\n currentNode.data = _stripTemplateExpressions(currentNode.data);\n currentNode = walker.nextNode();\n }\n // NodeIterator does not descend into <template>.content per the DOM spec,\n // so we must explicitly recurse into each template's content fragment,\n // mirroring the approach used by _sanitizeShadowDOM.\n const templates = (_node$querySelectorAl = node.querySelectorAll) === null || _node$querySelectorAl === void 0 ? void 0 : _node$querySelectorAl.call(node, 'template');\n if (templates) {\n arrayForEach(templates, tmpl => {\n if (_isDocumentFragment(tmpl.content)) {\n _scrubTemplateExpressions2(tmpl.content);\n }\n });\n }\n };\n /**\n * _isClobbered\n *\n * Detect DOM-clobbering on HTMLFormElement nodes. Form is the only HTML\n * interface with [LegacyOverrideBuiltIns]; a descendant element with a\n * `name` attribute matching a prototype property shadows that property\n * on direct reads. We use this check at the IN_PLACE entry-point and\n * during attribute sanitization to refuse clobbered forms.\n *\n * @param element element to check for clobbering attacks\n * @return true if clobbered, false if safe\n */\n const _isClobbered = function _isClobbered(element) {\n // Realm-independent tag-name probe. If we can't determine the tag\n // name at all, we can't reason about clobbering — return false\n // (the caller's other defences still apply).\n const realTagName = getNodeName ? getNodeName(element) : null;\n if (typeof realTagName !== 'string') {\n return false;\n }\n if (transformCaseFunc(realTagName) !== 'form') {\n return false;\n }\n return typeof element.nodeName !== 'string' || typeof element.textContent !== 'string' || typeof element.removeChild !== 'function' ||\n // Realm-safe NamedNodeMap detection: equality against the cached\n // prototype getter. Clobbered .attributes (e.g. <input name=\"attributes\">)\n // makes the direct read diverge from the cached read; a clean form\n // (same-realm OR foreign-realm) has both reads pointing at the same\n // canonical NamedNodeMap.\n element.attributes !== getAttributes(element) || typeof element.removeAttribute !== 'function' || typeof element.setAttribute !== 'function' || typeof element.namespaceURI !== 'string' || typeof element.insertBefore !== 'function' || typeof element.hasChildNodes !== 'function' ||\n // NodeType clobbering probe. Cached Node.prototype.nodeType getter\n // returns the integer 1 for any Element regardless of realm; direct\n // read on a clobbered form (e.g. <input name=\"nodeType\">) returns\n // the named child element. Cheap addition — nodeType is read from\n // an internal slot, no serialization cost — and removes a residual\n // clobbering surface used by several mXSS / PI / comment branches\n // in _sanitizeElements that compare currentNode.nodeType directly.\n element.nodeType !== getNodeType(element) ||\n // HTMLFormElement has [LegacyOverrideBuiltIns]: a descendant named\n // \"childNodes\" shadows the prototype getter. Direct reads of\n // form.childNodes from a clobbered form return the named child\n // instead of the real NodeList, so any walk that reads it directly\n // skips the form's real children. Compare the direct read to the\n // cached Node.prototype getter — when the form's named-property\n // getter intercepts the read, the two values differ and we flag\n // the form. This catches every clobbering child type (input,\n // select, etc.) regardless of whether the named child happens to\n // carry a numeric .length, which a typeof-based probe would miss\n // (e.g. HTMLSelectElement.length is a defined unsigned-long).\n element.childNodes !== getChildNodes(element);\n };\n /**\n * Checks whether the given value is a DocumentFragment from any realm.\n *\n * The realm-independent replacement reads `nodeType` through the cached\n * Node.prototype getter and compares to the DOCUMENT_FRAGMENT_NODE\n * constant (11). nodeType is a numeric value resolved from the node's\n * internal slot, identical across realms for the same kind of node.\n *\n * @param value object to check\n * @return true if value is a DocumentFragment-shaped node from any realm\n */\n const _isDocumentFragment = function _isDocumentFragment(value) {\n if (!getNodeType || typeof value !== 'object' || value === null) {\n return false;\n }\n try {\n return getNodeType(value) === NODE_TYPE.documentFragment;\n } catch (_) {\n return false;\n }\n };\n /**\n * Checks whether the given object is a DOM node, including nodes that\n * originate from a different window/realm (e.g. an iframe's\n * contentDocument). The previous `value instanceof Node` check was\n * realm-bound: nodes from a different window failed it, causing\n * sanitize() to silently stringify them and reset IN_PLACE to false,\n * returning the original node unsanitized. See GHSA-4w3q-35jp-p934.\n *\n * @param value object to check whether it's a DOM node\n * @return true if value is a DOM node from any realm\n */\n const _isNode = function _isNode(value) {\n if (!getNodeType || typeof value !== 'object' || value === null) {\n return false;\n }\n try {\n return typeof getNodeType(value) === 'number';\n } catch (_) {\n return false;\n }\n };\n function _executeHooks(hooks, currentNode, data) {\n if (hooks.length === 0) {\n return;\n }\n arrayForEach(hooks, hook => {\n hook.call(DOMPurify, currentNode, data, CONFIG);\n });\n }\n /**\n * Structural-threat checks that condemn a node regardless of the\n * allowlists: mXSS via namespace confusion, risky CSS construction,\n * processing instructions, markup-bearing comments. Pure predicate;\n * the caller removes. Check order is load-bearing.\n *\n * @param currentNode the node to inspect\n * @param tagName the node's transformCaseFunc'd tag name\n * @return true if the node must be removed\n */\n const _isUnsafeNode = function _isUnsafeNode(currentNode, tagName) {\n /* Detect mXSS attempts abusing namespace confusion */\n if (SAFE_FOR_XML && currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && regExpTest(ELEMENT_MARKUP_PROBE, currentNode.textContent) && regExpTest(ELEMENT_MARKUP_PROBE, currentNode.innerHTML)) {\n return true;\n }\n /* Remove rawtext/literal-text elements whose literal serialization\n re-opens markup on an HTML reparse - shapes (a) and (b) documented at\n LITERAL_TEXT_ELEMENTS. Both are invisible to rule 1 above (which\n self-disables once there is an element child, and whose second probe\n reads the innerHTML an XML/XHTML document serializes escaped), which\n is why both probes here read textContent instead. Previously only\n `style`-with-element-child was covered; every element in\n LITERAL_TEXT_ELEMENTS shares this literal serialization and is\n equally affected. */\n if (SAFE_FOR_XML && currentNode.namespaceURI === HTML_NAMESPACE && LITERAL_TEXT_ELEMENTS[tagName] && (_isNode(currentNode.firstElementChild) || typeof currentNode.textContent === 'string' && regExpTest(LITERAL_TEXT_CLOSE[tagName], currentNode.textContent))) {\n return true;\n }\n /* Remove any occurrence of processing instructions */\n if (currentNode.nodeType === NODE_TYPE.processingInstruction) {\n return true;\n }\n /* Remove any kind of possibly harmful comments */\n if (SAFE_FOR_XML && currentNode.nodeType === NODE_TYPE.comment && regExpTest(COMMENT_MARKUP_PROBE, currentNode.data)) {\n return true;\n }\n return false;\n };\n /**\n * Evaluate a CUSTOM_ELEMENT_HANDLING check (a RegExp or a predicate\n * function, per the validation in _parseConfig) against a name.\n * Additional arguments are forwarded to predicate functions - the\n * attributeNameCheck predicate receives the tag name as its second\n * argument. A null/absent check never matches.\n *\n * @param check the configured tagNameCheck / attributeNameCheck value\n * @param name the name to test\n * @param args extra arguments forwarded to a predicate function\n * @return true if the check matches the name\n */\n const _matchesNameCheck = function _matchesNameCheck(check, name) {\n if (check instanceof RegExp) {\n return regExpTest(check, name);\n }\n if (check instanceof Function) {\n for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n return Boolean(check(name, ...args));\n }\n return false;\n };\n /**\n * Handle a node whose tag is forbidden or not allowlisted: keep\n * allowed custom elements (false return exits _sanitizeElements\n * early - the namespace and fallback-tag removal checks are\n * intentionally skipped for kept custom elements), else hoist\n * content per KEEP_CONTENT and remove.\n *\n * A kept custom element is the ONLY case in which this function\n * returns false, so the caller uses that return value to run the\n * afterSanitizeElements hook on the kept element and keep the\n * element-hook lifecycle consistent with normal allowlisted\n * elements (GHSA-c2j3-45gr-mqc4).\n *\n * @param currentNode the disallowed node\n * @param tagName the node's transformCaseFunc'd tag name\n * @return true if the node was removed, false if kept\n */\n const _sanitizeDisallowedNode = function _sanitizeDisallowedNode(currentNode, tagName, root) {\n /* Check if we have a custom element to handle */\n if (!FORBID_TAGS[tagName] && _isBasicCustomElement(tagName) && _matchesNameCheck(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)) {\n return false;\n }\n /* Keep content except for bad-listed elements.\n Use the cached prototype getters exclusively — the previous code\n had `|| currentNode.parentNode` / `|| currentNode.childNodes`\n fallbacks, but the cached getters always return the canonical\n value (or null for a real parent-less node), so the fallback\n path was dead in safe cases and a clobbering surface in unsafe\n ones. Falsy cached results stay falsy; the `if (childNodes &&\n parentNode)` check already gates correctly. */\n if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {\n const parentNode = getParentNode(currentNode);\n const childNodes = getChildNodes(currentNode);\n if (childNodes && parentNode) {\n const childCount = childNodes.length;\n /* Hoist by moving each child up one level rather than deep-cloning\n it. Moving transfers every descendant exactly once, so a chain of\n nested disallowed elements costs O(n) instead of the O(n^2) that\n re-cloning the shrinking subtree at each level produced; it also\n empties the removed original, so `DOMPurify.removed` no longer\n pins whole subtrees. Moving preserves the in-place guarantee too:\n an original carrying already-queued resource events (`<img\n onerror>`, `<video>`/`<audio>` error, lazy/`onload`, …) is\n relocated and sanitised rather than left detached but still armed.\n The sole case that must clone is removing the walk root itself.\n The result is serialised from the root's subtree, so a restrictive\n ALLOWED_TAGS that strips the root (`body` on the string path) must\n leave the content inside it, which only cloning does. In IN_PLACE\n the root is pre-validated as an allowed tag and so is never removed\n here, so that path always takes the move branch.\n `childNodes` is live; a tail-to-head walk keeps `childNodes[i]`\n valid whether we move (drops the trailing entry) or clone (leaves\n the list intact). */\n for (let i = childCount - 1; i >= 0; --i) {\n const hoisted = currentNode === root ? cloneNode(childNodes[i], true) : childNodes[i];\n parentNode.insertBefore(hoisted, getNextSibling(currentNode));\n }\n }\n }\n _forceRemove(currentNode);\n return true;\n };\n /**\n * Fork a hook-mutable allowlist off its shared binding the first time a\n * (possibly lazily-installed) uponSanitize* hook is about to see it, so the\n * hook cannot widen the per-instance default or the setConfig binding by\n * reference and leak past the call. Returns the set unchanged once it is\n * already call-local, so repeated calls across elements are idempotent.\n *\n * @param hookList the uponSanitize* hook array for this event\n * @param set the current ALLOWED_TAGS / ALLOWED_ATTR binding\n * @param defaultSet the per-instance DEFAULT_ALLOWED_* constant\n * @param setConfigSet the captured setConfig() binding, or null\n * @return a call-local clone if a hook is present and set is still shared,\n * else set unchanged\n */\n const _forkSharedAllowlist = function _forkSharedAllowlist(hookList, set, defaultSet, setConfigSet) {\n if (hookList.length === 0) {\n return set;\n }\n return set === defaultSet || set === setConfigSet ? clone(set) : set;\n };\n /**\n * Shared guard for a node that a hook has detached from the walk tree,\n * used after each element-hook site in _sanitizeElements. Detaching is a\n * long-standing user pattern (issue #469; draw.io-style foreignObject\n * filtering). Per the cached, unclobberable parentNode getter the node is\n * genuinely out of the tree, so it can reach neither the serialized\n * output nor an IN_PLACE live tree; treat it as removed and stop\n * processing it. Without this guard, the unsafe-node / namespace checks\n * would call _forceRemove on a parentless node and hit the REPORT-3\n * fail-closed throw — which exists for nodes DOMPurify wants gone but\n * *cannot* detach (clobbered / parentless roots), the opposite of a node\n * that is already safely gone. The walk root is exempt: a detached\n * IN_PLACE root is legitimate input and must still be fully sanitized,\n * and a kill-decision on it must keep hitting the REPORT-3 throw.\n *\n * Nodes detached by hooks stay the hook's responsibility for placement:\n * they are not recorded in DOMPurify.removed, so the post-walk IN_PLACE\n * pass (which iterates DOMPurify.removed) does not reach them. But a\n * hook-detached subtree can still hold a queued resource-event handler -\n * e.g. an <img onload> that began loading when the caller built the live\n * tree - which fires in page scope after sanitize returns even though the\n * handler never reached the returned tree. That is the audit-5 F1 hazard,\n * and the documented node.remove() hook pattern walks straight into it.\n * So on the IN_PLACE path we neutralize the detached subtree inline,\n * stripping its non-allow-listed attributes before returning, exactly as\n * the post-walk pass does for _forceRemove'd subtrees.\n *\n * @param currentNode the node a hook may have detached\n * @param root the current walk root\n * @return true if the node is detached and now handled, false otherwise\n */\n const _handleHookDetachedNode = function _handleHookDetachedNode(currentNode, root) {\n if (currentNode === root || getParentNode(currentNode) !== null) {\n return false;\n }\n if (IN_PLACE) {\n _neutralizeSubtree(currentNode);\n }\n return true;\n };\n /**\n * _sanitizeElements\n *\n * @protect nodeName\n * @protect textContent\n * @protect removeChild\n * @param currentNode to check for permission to exist\n * @return true if node was killed, false if left alive\n */\n const _sanitizeElements = function _sanitizeElements(currentNode, root) {\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeElements, currentNode, null);\n /* A hook may have detached the node - treat it as removed (see\n _handleHookDetachedNode for the full rationale). */\n if (_handleHookDetachedNode(currentNode, root)) {\n return true;\n }\n /* Check if element is clobbered or can clobber */\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Now let's check the element's type and name */\n const tagName = transformCaseFunc(_readNodeName(currentNode));\n /* Close the pre-walk clone-guard's timing gap: an uponSanitizeElement\n hook may have been installed after that guard sampled the hook arrays\n (e.g. lazily from beforeSanitizeElements), leaving ALLOWED_TAGS still\n aliasing a shared binding that a widening hook would mutate by\n reference. Fork it before exposing it to the hook. */\n ALLOWED_TAGS = _forkSharedAllowlist(hooks.uponSanitizeElement, ALLOWED_TAGS, DEFAULT_ALLOWED_TAGS, SET_CONFIG_ALLOWED_TAGS);\n /* Execute a hook if present */\n _executeHooks(hooks.uponSanitizeElement, currentNode, {\n tagName,\n allowedTags: ALLOWED_TAGS\n });\n /* The uponSanitizeElement hook may have detached the node, exactly as\n above (see _handleHookDetachedNode for the full rationale). */\n if (_handleHookDetachedNode(currentNode, root)) {\n return true;\n }\n /* Remove mXSS vectors, processing instructions and risky comments */\n if (_isUnsafeNode(currentNode, tagName)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Remove element if anything forbids its presence */\n if (FORBID_TAGS[tagName] || !(EXTRA_ELEMENT_HANDLING.tagCheck instanceof Function && EXTRA_ELEMENT_HANDLING.tagCheck(tagName)) && !ALLOWED_TAGS[tagName]) {\n const removed = _sanitizeDisallowedNode(currentNode, tagName, root);\n /* A false return means the node is a custom element kept via\n CUSTOM_ELEMENT_HANDLING - the only keep path through\n _sanitizeDisallowedNode. Run afterSanitizeElements on it so the\n element-hook lifecycle matches normal allowlisted elements: a\n security policy applied in this hook (e.g. stripping an attribute\n from every surviving element) must not silently skip kept custom\n elements (GHSA-c2j3-45gr-mqc4). This mirrors the normal-element\n tail below - the hook runs, then the walker's subsequent\n _sanitizeAttributes pass sanitizes the element's attributes. The\n deliberately skipped namespace and fallback-tag removal checks stay\n skipped; they are removal decisions, not the hook contract. */\n if (removed === false) {\n _executeHooks(hooks.afterSanitizeElements, currentNode, null);\n }\n return removed;\n }\n /* Check whether element has a valid namespace.\n Realm-safe check (GHSA-hpcv-96wg-7vj8): use the cached Node.prototype\n nodeType getter rather than `instanceof Element`, which is realm-\n bound and short-circuits to false for any node minted in a different\n realm — letting a foreign-realm element with a forbidden namespace\n slip past the namespace check entirely. */\n const nt = _readNodeType(currentNode);\n if (nt === NODE_TYPE.element && !_checkValidNamespace(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Make sure that older browsers don't get fallback-tag mXSS */\n if ((tagName === 'noscript' || tagName === 'noembed' || tagName === 'noframes') && regExpTest(FALLBACK_TAG_CLOSE, currentNode.innerHTML)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Sanitize element content to be template-safe */\n if (SAFE_FOR_TEMPLATES && currentNode.nodeType === NODE_TYPE.text) {\n /* Get the element's text content */\n const content = _stripTemplateExpressions(currentNode.textContent);\n if (currentNode.textContent !== content) {\n arrayPush(DOMPurify.removed, {\n element: currentNode.cloneNode()\n });\n currentNode.textContent = content;\n }\n }\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeElements, currentNode, null);\n return false;\n };\n /**\n * _isValidAttribute\n *\n * @param lcTag Lowercase tag name of containing element.\n * @param lcName Lowercase attribute name.\n * @param value Attribute value.\n * @return Returns true if `value` is valid, otherwise false.\n */\n // eslint-disable-next-line complexity\n const _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {\n /* FORBID_ATTR must always win, even if ADD_ATTR predicate would allow it */\n if (FORBID_ATTR[lcName]) {\n return false;\n }\n /* Reject declarative-partial-updates patch-linkage attributes\n (https://github.com/WICG/declarative-partial-updates).\n Empirical note (Chrome 150, verified — see\n test/declarative-patch-probe-v3.html): expansion is NOT applied after\n sanitization. For the string path it fires during sanitize()'s own\n parse, so the walk sees and sanitizes the fully materialized expanded\n tree — teleports into MathML/SVG integration points included; a\n weaponized `<template for>`->`<img onerror>` comes back with the handler\n stripped. For the IN_PLACE path it fires on connection, before the walk.\n Either way DOMPurify is NOT blind to the patch.\n This removal is therefore defense-in-depth rather than the sole barrier:\n it prevents live linkage from surviving into the OUTPUT and re-expanding\n in the caller's context, and keeps behaviour deterministic if a future\n engine defers expansion. `for` is legitimate only on <label>/<output>;\n anywhere else (notably <template for>) it links the element to a patch\n target and teleports or removes an arbitrary DOM range by id/marker name.\n `patchsrc` fetches remote markup and is treated as a script-loading\n mechanism (CSP). Gated on SAFE_FOR_XML so the removal groups with the\n other structural-threat checks and stays overridable, consistent with\n the rest of the codebase. PI range markers are already removed by\n _isUnsafeNode. */\n if (_isPatchLinkageAttribute(lcName, lcTag)) {\n return false;\n }\n /* Make sure attribute cannot clobber */\n if (SANITIZE_DOM && (lcName === 'id' || lcName === 'name') && (value in document || value in formElement)) {\n return false;\n }\n const nameIsPermitted = ALLOWED_ATTR[lcName] || EXTRA_ELEMENT_HANDLING.attributeCheck instanceof Function && EXTRA_ELEMENT_HANDLING.attributeCheck(lcName, lcTag);\n /* Allow valid data-* attributes: At least one character after \"-\"\n (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)\n XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)\n We don't need to check the value; it's always URI safe. */\n if (ALLOW_DATA_ATTR && regExpTest(DATA_ATTR$1, lcName)) {\n return true;\n }\n /* Allow valid aria-* attributes, the value is always URI safe */\n if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR$1, lcName)) {\n return true;\n }\n /* A name outside the allowlist is acceptable on custom-element terms\n only. The value checks below are intentionally skipped in that case:\n if the user supplied a tagNameCheck we also allow derived custom\n elements using the same test, and attributes passing the configured\n attributeNameCheck are allowed as custom elements define these at\n their own discretion. */\n if (!nameIsPermitted) {\n return (\n // Condition a) covers a basically valid custom element tag name whose\n // tag passes the configured tagNameCheck and whose attribute name\n // passes the configured attributeNameCheck ...\n _isBasicCustomElement(lcTag) && _matchesNameCheck(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag) && _matchesNameCheck(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName, lcTag) ||\n // Condition b) covers an `is` attribute whose value passes the\n // configured tagNameCheck while customized built-in elements are\n // allowed.\n lcName === 'is' && CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements && _matchesNameCheck(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value)\n );\n }\n /* Check value is safe. First, is attr inert? If so, is safe */\n if (URI_SAFE_ATTRIBUTES[lcName]) {\n return true;\n }\n /* Check no script, data or unknown possibly unsafe URI\n unless we know URI values are safe for that attribute */\n if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE$1, ''))) {\n return true;\n }\n /* Keep image data URIs alive if src/xlink:href is allowed */\n /* Further prevent gadget XSS for dynamically built script tags */\n if ((lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') && lcTag !== 'script' && stringIndexOf(value, 'data:') === 0 && DATA_URI_TAGS[lcTag]) {\n return true;\n }\n /* Allow unknown protocols: This provides support for links that\n are handled by protocol handlers which may be unknown ahead of\n time, e.g. fb:, spotify: */\n if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA$1, stringReplace(value, ATTR_WHITESPACE$1, ''))) {\n return true;\n }\n /* Only an empty (binary) value remains safe at this point;\n anything else is presumed unsafe, do not add it back */\n return !value;\n };\n /* Names the HTML spec reserves from valid-custom-element-name; these must\n * never be treated as basic custom elements even when a permissive\n * CUSTOM_ELEMENT_HANDLING.tagNameCheck is configured. */\n const RESERVED_CUSTOM_ELEMENT_NAMES = addToSet({}, ['annotation-xml', 'color-profile', 'font-face', 'font-face-format', 'font-face-name', 'font-face-src', 'font-face-uri', 'missing-glyph']);\n /**\n * _isBasicCustomElement\n * checks if at least one dash is included in tagName, and it's not the first char\n * for more sophisticated checking see https://github.com/sindresorhus/validate-element-name\n *\n * @param tagName name of the tag of the node to sanitize\n * @returns Returns true if the tag name meets the basic criteria for a custom element, otherwise false.\n */\n const _isBasicCustomElement = function _isBasicCustomElement(tagName) {\n return !RESERVED_CUSTOM_ELEMENT_NAMES[stringToLowerCase(tagName)] && regExpTest(CUSTOM_ELEMENT$1, tagName);\n };\n /**\n * Wrap an attribute value in the matching Trusted Types object when\n * the active policy requires it. Namespaced attributes pass through\n * unchanged (no TT support yet, see\n * https://bugs.chromium.org/p/chromium/issues/detail?id=1305293).\n *\n * @param lcTag lowercase tag name of the containing element\n * @param lcName lowercase attribute name\n * @param namespaceURI the attribute's namespace, if any\n * @param value the attribute value to wrap\n * @return the value, wrapped when Trusted Types demand it\n */\n const _applyTrustedTypesToAttribute = function _applyTrustedTypesToAttribute(lcTag, lcName, namespaceURI, value) {\n if (trustedTypesPolicy && typeof trustedTypes === 'object' && typeof trustedTypes.getAttributeType === 'function' && !namespaceURI) {\n switch (trustedTypes.getAttributeType(lcTag, lcName)) {\n case 'TrustedHTML':\n {\n return _createTrustedHTML(value);\n }\n case 'TrustedScriptURL':\n {\n return _createTrustedScriptURL(value);\n }\n }\n }\n return value;\n };\n /**\n * Write a modified attribute value back onto the element. On\n * success, re-probe for clobbering introduced by the new value and\n * remove the element when found; otherwise pop the removal entry\n * recorded by the earlier _removeAttribute (long-standing pairing\n * with the SANITIZE_NAMED_PROPS path - do not \"fix\" casually). On\n * failure, remove the attribute instead.\n *\n * @param currentNode the element carrying the attribute\n * @param name the attribute name as present on the element\n * @param namespaceURI the attribute's namespace, if any\n * @param value the new attribute value\n */\n const _setAttributeValue = function _setAttributeValue(currentNode, name, namespaceURI, value) {\n try {\n if (namespaceURI) {\n currentNode.setAttributeNS(namespaceURI, name, value);\n } else {\n /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. \"x-schema\". */\n currentNode.setAttribute(name, value);\n }\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n } else {\n arrayPop(DOMPurify.removed);\n }\n } catch (_) {\n _removeAttribute(name, currentNode);\n }\n };\n /**\n * _sanitizeAttributes\n *\n * @protect attributes\n * @protect nodeName\n * @protect removeAttribute\n * @protect setAttribute\n *\n * @param currentNode to sanitize\n */\n const _sanitizeAttributes = function _sanitizeAttributes(currentNode) {\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeAttributes, currentNode, null);\n const attributes = currentNode.attributes;\n /* Check if we have attributes; if not we might have a text node */\n if (!attributes || _isClobbered(currentNode)) {\n return;\n }\n /* Same lazy-install guard as uponSanitizeElement (see there): fork the\n attribute allowlist off its shared binding before a hook can see it. */\n ALLOWED_ATTR = _forkSharedAllowlist(hooks.uponSanitizeAttribute, ALLOWED_ATTR, DEFAULT_ALLOWED_ATTR, SET_CONFIG_ALLOWED_ATTR);\n const hookEvent = {\n attrName: '',\n attrValue: '',\n keepAttr: true,\n allowedAttributes: ALLOWED_ATTR,\n forceKeepAttr: undefined\n };\n let l = attributes.length;\n const lcTag = transformCaseFunc(currentNode.nodeName);\n /* Go backwards over all attributes; safely remove bad ones */\n while (l--) {\n const attr = attributes[l];\n const name = attr.name,\n namespaceURI = attr.namespaceURI,\n attrValue = attr.value;\n const lcName = transformCaseFunc(name);\n const initValue = attrValue;\n let value = name === 'value' ? initValue : stringTrim(initValue);\n /* Execute a hook if present */\n hookEvent.attrName = lcName;\n hookEvent.attrValue = value;\n hookEvent.keepAttr = true;\n hookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set\n _executeHooks(hooks.uponSanitizeAttribute, currentNode, hookEvent);\n value = hookEvent.attrValue;\n /* Full DOM Clobbering protection via namespace isolation,\n * Prefix id and name attributes with `user-content-`\n */\n if (SANITIZE_NAMED_PROPS && (lcName === 'id' || lcName === 'name') && stringIndexOf(value, SANITIZE_NAMED_PROPS_PREFIX) !== 0) {\n // Remove the attribute with this value\n _removeAttribute(name, currentNode, attr);\n // Prefix the value and later re-create the attribute with the sanitized value\n value = SANITIZE_NAMED_PROPS_PREFIX + value;\n }\n // Else: already prefixed, leave the attribute alone — the prefix is\n // itself the clobbering protection, and re-applying it is incorrect.\n /* Work around a security issue with comments inside attributes */\n if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i, value)) {\n _removeAttribute(name, currentNode, attr);\n continue;\n }\n /* Make sure we cannot easily use animated hrefs, even if animations are allowed */\n if (lcName === 'attributename' && stringMatch(value, 'href')) {\n _removeAttribute(name, currentNode, attr);\n continue;\n }\n /* Did the hooks force-keep the attribute? */\n if (hookEvent.forceKeepAttr) {\n continue;\n }\n /* Did the hooks approve of the attribute? */\n if (!hookEvent.keepAttr) {\n _removeAttribute(name, currentNode, attr);\n continue;\n }\n /* Work around a security issue in jQuery 3.0 */\n if (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(SELF_CLOSING_TAG, value)) {\n _removeAttribute(name, currentNode, attr);\n continue;\n }\n /* Sanitize attribute content to be template-safe */\n if (SAFE_FOR_TEMPLATES) {\n value = _stripTemplateExpressions(value);\n }\n /* Is `value` valid for this attribute? */\n if (!_isValidAttribute(lcTag, lcName, value)) {\n _removeAttribute(name, currentNode, attr);\n continue;\n }\n /* Handle attributes that require Trusted Types */\n value = _applyTrustedTypesToAttribute(lcTag, lcName, namespaceURI, value);\n /* Handle invalid data-* attribute set by try-catching it */\n if (value !== initValue) {\n _setAttributeValue(currentNode, name, namespaceURI, value);\n }\n }\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeAttributes, currentNode, null);\n };\n /**\n * _sanitizeShadowDOM\n *\n * @param fragment to iterate over recursively\n */\n const _sanitizeShadowDOM2 = function _sanitizeShadowDOM(fragment) {\n let shadowNode = null;\n const shadowIterator = _createNodeIterator(fragment);\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeShadowDOM, fragment, null);\n while (shadowNode = shadowIterator.nextNode()) {\n /* Execute a hook if present */\n _executeHooks(hooks.uponSanitizeShadowNode, shadowNode, null);\n /* Sanitize tags and elements */\n _sanitizeElements(shadowNode, fragment);\n /* Check attributes next */\n _sanitizeAttributes(shadowNode);\n /* Deep shadow DOM detected.\n Realm-safe check (GHSA-hpcv-96wg-7vj8): use nodeType against the\n DOCUMENT_FRAGMENT_NODE constant rather than instanceof, so we\n recurse into <template>.content from foreign realms too. */\n if (_isDocumentFragment(shadowNode.content)) {\n _sanitizeShadowDOM2(shadowNode.content);\n }\n /* An element iterated here may itself host an attached\n shadow root. The default NodeIterator does not enter shadow\n trees, so a shadow root nested inside template.content was\n previously reached by no walk at all (the pre-pass at\n _sanitizeAttachedShadowRoots descends via childNodes, which\n doesn't enter template.content; the template-content recursion\n above iterates the content but never inspected shadowRoot).\n Walk it explicitly. The nodeType guard avoids reading\n shadowRoot off text / comment / CDATA / PI nodes that the\n iterator also surfaces. */\n if (_readNodeType(shadowNode) === NODE_TYPE.element) {\n const innerSr = getShadowRoot(shadowNode);\n if (_isDocumentFragment(innerSr)) {\n _sanitizeAttachedShadowRoots(innerSr);\n _sanitizeShadowDOM2(innerSr);\n }\n }\n }\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeShadowDOM, fragment, null);\n };\n /**\n * _sanitizeAttachedShadowRoots\n *\n * Walks `root` and feeds every attached shadow root we encounter into\n * the existing _sanitizeShadowDOM pipeline. The default node iterator\n * does not descend into shadow trees, so nodes inside an attached\n * shadow root would otherwise be skipped entirely.\n *\n * Two real input paths put attached shadow roots in front of us:\n * 1. IN_PLACE on a DOM node that already has shadow roots attached.\n * 2. DOM-node input where importNode(dirty, true) deep-clones the\n * shadow root because it was created with `clonable: true`.\n *\n * This pass runs once, up front, so the main iteration loop (and the\n * existing _sanitizeShadowDOM template-content recursion) stay\n * untouched — string-input paths are not affected.\n *\n * @param root the subtree root to walk for attached shadow roots\n */\n const _sanitizeAttachedShadowRoots = function _sanitizeAttachedShadowRoots(root) {\n /* Iterative (explicit stack) rather than per-child recursion. DOM APIs\n impose no depth cap, so an attacker-shaped tree (JSON/CRDT/editor data\n built straight into the DOM — the IN_PLACE surface) deeper than the JS\n call-stack budget would otherwise overflow native recursion here and\n throw at the IN_PLACE entry pre-pass, before a single node is\n sanitized, leaving the caller's live tree untouched (fail-open). See\n campaign-3 F4. A heap stack keeps depth off the call stack.\n Each work item is either a node to descend into, or a deferred\n `_sanitizeShadowDOM` for an already-walked shadow root. The deferred\n form preserves the original post-order discipline: a shadow root's\n nested shadow roots are discovered before the outer shadow is\n sanitized (which may remove hosts). Pushes are in reverse of the\n desired processing order (LIFO): template content, then children, then\n the shadow-sanitize, then the shadow walk — so the order matches the\n previous recursion exactly. */\n const stack = [{\n node: root,\n shadow: null\n }];\n while (stack.length > 0) {\n const item = stack.pop();\n /* Deferred shadow-DOM sanitisation: runs after its subtree was walked. */\n if (item.shadow) {\n _sanitizeShadowDOM2(item.shadow);\n continue;\n }\n const node = item.node;\n const nodeType = _readNodeType(node);\n const isElement = nodeType === NODE_TYPE.element;\n /* (pushed last → processed first) Children, snapshotted in reverse so\n the first child is processed first. Snapshotting matters because a\n hook may detach siblings mid-walk. */\n const childNodes = getChildNodes(node);\n if (childNodes) {\n for (let i = childNodes.length - 1; i >= 0; --i) {\n stack.push({\n node: childNodes[i],\n shadow: null\n });\n }\n }\n /* (pushed before children → processed after them, matching the old\n \"template content last\" order) When the node is a <template>,\n descend into its content. */\n if (isElement) {\n const rootName = getNodeName ? getNodeName(node) : null;\n if (typeof rootName === 'string' && transformCaseFunc(rootName) === 'template') {\n const content = node.content;\n if (_isDocumentFragment(content)) {\n stack.push({\n node: content,\n shadow: null\n });\n }\n }\n }\n /* Shadow root (processed first): walk its subtree, then sanitise it.\n Realm-safe check (GHSA-hpcv-96wg-7vj8): nodeType-based detection\n rather than `instanceof DocumentFragment`, which is realm-bound and\n silently skipped foreign-realm shadow roots (e.g.\n iframe.contentDocument attachShadow). */\n if (isElement) {\n const sr = getShadowRoot(node);\n if (_isDocumentFragment(sr)) {\n /* Push the deferred sanitise first so it pops after the shadow\n walk we push next, i.e. nested shadow roots are discovered\n before this one is sanitised. */\n stack.push({\n node: null,\n shadow: sr\n }, {\n node: sr,\n shadow: null\n });\n }\n }\n }\n };\n // eslint-disable-next-line complexity\n DOMPurify.sanitize = function (dirty) {\n let cfg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let body = null;\n let importedNode = null;\n let currentNode = null;\n let returnNode = null;\n /* Make sure we have a string to sanitize.\n DO NOT return early, as this will return the wrong type if\n the user has requested a DOM object rather than a string */\n IS_EMPTY_INPUT = !dirty;\n if (IS_EMPTY_INPUT) {\n dirty = '<!-->';\n }\n /* Stringify, in case dirty is an object */\n if (typeof dirty !== 'string' && !_isNode(dirty)) {\n dirty = stringifyValue(dirty);\n if (typeof dirty !== 'string') {\n throw typeErrorCreate('dirty is not a string, aborting');\n }\n }\n /* Return dirty HTML if DOMPurify cannot run */\n if (!DOMPurify.isSupported) {\n return dirty;\n }\n /* Assign config vars */\n if (SET_CONFIG) {\n /* Persistent setConfig() path: _parseConfig is skipped, so the sets are\n * not re-derived per call. Restore them from the pristine bindings\n * captured at setConfig() time so a previous call's hook clone (mutated\n * below) does not carry over. */\n ALLOWED_TAGS = SET_CONFIG_ALLOWED_TAGS;\n ALLOWED_ATTR = SET_CONFIG_ALLOWED_ATTR;\n } else {\n _parseConfig(cfg);\n }\n /* Clone the hook-mutable allowlists before the walk whenever an\n * uponSanitize* hook is registered. The hook event exposes ALLOWED_TAGS\n * and ALLOWED_ATTR by reference (as allowedTags / allowedAttributes), so\n * a hook that widens them would otherwise mutate the shared set\n * permanently: across later calls and across every element. Cloning per\n * walk keeps documented in-call widening working while scoping it to the\n * call. A single guard for both config paths - the per-call path rebinds\n * the sets in _parseConfig each call, the persistent path restores them\n * from the captured bindings just above - so the two cannot diverge. */\n if (hooks.uponSanitizeElement.length > 0 || hooks.uponSanitizeAttribute.length > 0) {\n ALLOWED_TAGS = clone(ALLOWED_TAGS);\n }\n if (hooks.uponSanitizeAttribute.length > 0) {\n ALLOWED_ATTR = clone(ALLOWED_ATTR);\n }\n /* Clean up removed elements */\n DOMPurify.removed = [];\n /* Resolve IN_PLACE for this call without mutating persistent config.\n Writing the IN_PLACE closure variable here leaks under setConfig(),\n where _parseConfig is skipped on later calls: a single string call would\n disable in-place mode for every subsequent node call, returning a\n sanitized copy while leaving the caller's node — which in-place callers\n keep using and whose return value they ignore — unsanitized. REPORT-2. */\n const inPlace = IN_PLACE && typeof dirty !== 'string' && _isNode(dirty);\n if (inPlace) {\n /* Declarative-partial-updates / streaming pre-pass: sever every patch\n linkage across the live tree BEFORE the walk, so no patch can fire\n mid-walk and inject into an already-processed region. Runs first, so\n it also covers the forbidden/clobbered roots that throw below. */\n _neutralizePatchLinkage(dirty);\n /* Do some early pre-sanitization to avoid unsafe root nodes.\n Read nodeName through the cached prototype getter — a clobbering\n child named \"nodeName\" on the form root would otherwise shadow\n the property and let this check skip the root-allowlist\n validation entirely. */\n const nn = _readNodeName(dirty);\n if (typeof nn === 'string') {\n const tagName = transformCaseFunc(nn);\n if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n /* Fail closed on a live root: neutralize handlers/children before\n throwing, exactly as the mid-walk abort path does. */\n _neutralizeRoot(dirty);\n throw typeErrorCreate('root node is forbidden and cannot be sanitized in-place');\n }\n }\n /* Pre-flight the root through _isClobbered. The iterator-driven\n removal path can not detach a parent-less root: _forceRemove\n falls through to Element.prototype.remove(), which per spec\n is a no-op on a node with no parent. A clobbered root would\n then survive the main loop with its attributes uninspected,\n because _sanitizeAttributes early-returns on _isClobbered. The\n result would be an attacker-controlled form, complete with any\n event-handler attributes the caller passed in, handed back to\n the application unsanitized. Refuse to sanitize such a root\n the same way we refuse a forbidden tag. GHSA-r47g-fvhr-h676. */\n if (_isClobbered(dirty)) {\n /* Fail closed on a live clobbered root before throwing.\n _neutralizeRoot's reads are clobber-safe (cached getters); the\n form's non-clobbered descendants, e.g. an armed <img>, are scrubbed. */\n _neutralizeRoot(dirty);\n throw typeErrorCreate('root node is clobbered and cannot be sanitized in-place');\n }\n /* Sanitize attached shadow roots before the main iterator runs.\n The iterator does not descend into shadow trees. Same fail-closed\n barrier as the main walk (campaign-3 F2): a custom-element reaction\n inside a shadow root could abort this pre-pass before the walk runs,\n which would otherwise leave the entire live tree unsanitized. */\n try {\n _sanitizeAttachedShadowRoots(dirty);\n } catch (error) {\n _neutralizeRoot(dirty);\n throw error;\n }\n } else if (_isNode(dirty)) {\n /* If dirty is a DOM element, append to an empty document to avoid\n elements being stripped by the parser */\n body = _initDocument('<!---->');\n importedNode = body.ownerDocument.importNode(dirty, true);\n if (importedNode.nodeType === NODE_TYPE.element && importedNode.nodeName === 'BODY') {\n /* Node is already a body, use as is */\n body = importedNode;\n } else if (importedNode.nodeName === 'HTML') {\n body = importedNode;\n } else {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n body.appendChild(importedNode);\n }\n /* Clonable shadow roots are deep-cloned by importNode(); sanitize\n them before the main iterator runs, since the iterator does not\n descend into shadow trees. The walk routes every read through a\n cached prototype getter so clobbering descendants on a form root\n cannot hide a shadow host from this pass. */\n _sanitizeAttachedShadowRoots(importedNode);\n } else {\n /* Exit directly if we have nothing to do */\n if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT &&\n // eslint-disable-next-line unicorn/prefer-includes\n dirty.indexOf('<') === -1) {\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? _createTrustedHTML(dirty) : dirty;\n }\n /* Initialize the document to work on */\n body = _initDocument(dirty);\n /* Check we have a DOM node from the data */\n if (!body) {\n return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : '';\n }\n }\n /* Remove first element node (ours) if FORCE_BODY is set */\n if (body && FORCE_BODY) {\n _forceRemove(body.firstChild);\n }\n /* Get node iterator */\n const walkRoot = inPlace ? dirty : body;\n /* Now start iterating over the created document.\n The walk runs inside an exception barrier (campaign-3 F2): a re-entrant\n engine/custom-element mutation can detach a node mid-walk so\n `_forceRemove`'s parentless guard throws, aborting the loop. Without the\n barrier the caller's in-place tree would be left half-sanitized with the\n unvisited tail still armed. _createNodeIterator itself is inside the\n barrier too: constructing the iterator dereferences the root's document,\n and any failure there (e.g. an exotic/clobbered root) must still fail\n closed rather than skip the neutralize. On any throw we fail closed -\n strip the in-place root bare - then rethrow so the existing throw\n contract is preserved. (String/DOM-copy paths never return the partial\n body, so the propagating throw is already fail-closed there.) */\n try {\n const nodeIterator = _createNodeIterator(walkRoot);\n while (currentNode = nodeIterator.nextNode()) {\n /* Sanitize tags and elements */\n _sanitizeElements(currentNode, walkRoot);\n /* Check attributes next */\n _sanitizeAttributes(currentNode);\n /* Shadow DOM detected, sanitize it.\n Realm-safe check (GHSA-hpcv-96wg-7vj8): nodeType-based detection\n instead of instanceof, so foreign-realm <template>.content is\n walked correctly. */\n if (_isDocumentFragment(currentNode.content)) {\n _sanitizeShadowDOM2(currentNode.content);\n }\n }\n } catch (error) {\n if (inPlace) {\n _neutralizeRoot(dirty);\n /* Nodes _forceRemove'd earlier in the aborted walk are already\n detached from the root, so _neutralizeRoot's subtree pass does not\n reach them. Defuse them too, mirroring the success-path loop below. */\n arrayForEach(DOMPurify.removed, entry => {\n if (entry.element) {\n _neutralizeSubtree(entry.element);\n }\n });\n }\n throw error;\n }\n /* If we sanitized `dirty` in-place, return it. */\n if (inPlace) {\n /* Fail-closed completion of the audit-5 F1 fix: every node removed from\n the caller's live tree is detached but may still hold a queued\n resource-event handler that fires in page scope after we return. The\n move-hoist covers only disallowed-tag KEEP_CONTENT removals; strip the\n non-allow-listed attributes off every other removed subtree (clobber,\n mXSS, namespace, comments, KEEP_CONTENT:false, …) so those handlers are\n cancelled before any event can fire. Runs synchronously, pre-return. */\n arrayForEach(DOMPurify.removed, entry => {\n if (entry.element) {\n _neutralizeSubtree(entry.element);\n }\n });\n if (SAFE_FOR_TEMPLATES) {\n _scrubTemplateExpressions2(dirty);\n }\n return dirty;\n }\n /* Return sanitized string or DOM */\n if (RETURN_DOM) {\n if (SAFE_FOR_TEMPLATES) {\n _scrubTemplateExpressions2(body);\n }\n if (RETURN_DOM_FRAGMENT) {\n returnNode = createDocumentFragment.call(body.ownerDocument);\n while (body.firstChild) {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n returnNode.appendChild(body.firstChild);\n }\n } else {\n returnNode = body;\n }\n if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmode) {\n /*\n AdoptNode() is not used because internal state is not reset\n (e.g. the past names map of a HTMLFormElement), this is safe\n in theory but we would rather not risk another attack vector.\n The state that is cloned by importNode() is explicitly defined\n by the specs.\n */\n returnNode = importNode.call(originalDocument, returnNode, true);\n }\n return returnNode;\n }\n let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n /* Serialize doctype if allowed */\n if (WHOLE_DOCUMENT && ALLOWED_TAGS['!doctype'] && body.ownerDocument && body.ownerDocument.doctype && body.ownerDocument.doctype.name && regExpTest(DOCTYPE_NAME, body.ownerDocument.doctype.name)) {\n serializedHTML = '<!DOCTYPE ' + body.ownerDocument.doctype.name + '>\\n' + serializedHTML;\n }\n /* Sanitize final string template-safe */\n if (SAFE_FOR_TEMPLATES) {\n serializedHTML = _stripTemplateExpressions(serializedHTML);\n }\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? _createTrustedHTML(serializedHTML) : serializedHTML;\n };\n DOMPurify.setConfig = function () {\n let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n _parseConfig(cfg);\n SET_CONFIG = true;\n SET_CONFIG_ALLOWED_TAGS = ALLOWED_TAGS;\n SET_CONFIG_ALLOWED_ATTR = ALLOWED_ATTR;\n };\n DOMPurify.clearConfig = function () {\n CONFIG = null;\n SET_CONFIG = false;\n SET_CONFIG_ALLOWED_TAGS = null;\n SET_CONFIG_ALLOWED_ATTR = null;\n // Drop any caller-supplied Trusted Types policy so it cannot poison later\n // `RETURN_TRUSTED_TYPE` output. The internal default policy (cached, and\n // never recreated — Trusted Types throws on duplicate names) is restored by\n // the next `_parseConfig`. See GHSA-vxr8-fq34-vvx9.\n trustedTypesPolicy = defaultTrustedTypesPolicy;\n emptyHTML = '';\n };\n DOMPurify.isValidAttribute = function (tag, attr, value) {\n /* Initialize shared config vars if necessary. */\n if (!CONFIG) {\n _parseConfig({});\n }\n const lcTag = transformCaseFunc(tag);\n const lcName = transformCaseFunc(attr);\n return _isValidAttribute(lcTag, lcName, value);\n };\n DOMPurify.addHook = function (entryPoint, hookFunction) {\n if (typeof hookFunction !== 'function') {\n return;\n }\n /* Reject unknown entry points. Without this, a non-hook key (e.g.\n * '__proto__') indexes off the prototype chain rather than a real\n * hook array, and arrayPush then writes to Object.prototype. Guard\n * with an own-property check against the known hook names. */\n if (!objectHasOwnProperty(hooks, entryPoint)) {\n return;\n }\n arrayPush(hooks[entryPoint], hookFunction);\n };\n DOMPurify.removeHook = function (entryPoint, hookFunction) {\n if (!objectHasOwnProperty(hooks, entryPoint)) {\n return undefined;\n }\n if (hookFunction !== undefined) {\n const index = arrayLastIndexOf(hooks[entryPoint], hookFunction);\n return index === -1 ? undefined : arraySplice(hooks[entryPoint], index, 1)[0];\n }\n return arrayPop(hooks[entryPoint]);\n };\n DOMPurify.removeHooks = function (entryPoint) {\n if (!objectHasOwnProperty(hooks, entryPoint)) {\n return;\n }\n hooks[entryPoint] = [];\n };\n DOMPurify.removeAllHooks = function () {\n hooks = _createHooksMap();\n };\n return DOMPurify;\n}\nvar purify = createDOMPurify();\n\nexport { purify as default };\n//# sourceMappingURL=purify.es.mjs.map\n","import { forwardRef, type ComponentProps } from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst Textarea = forwardRef<HTMLTextAreaElement, ComponentProps<\"textarea\">>(\n ({ className, ...props }, ref) => {\n return (\n <textarea\n className={cn(\n \"eloq:flex eloq:min-h-[80px] eloq:w-full eloq:rounded-md eloq:border eloq:border-input eloq:bg-background eloq:px-3 eloq:py-2 eloq:text-base eloq:ring-offset-background eloq:placeholder:text-muted-foreground eloq:focus-visible:outline-none eloq:focus-visible:ring-1 eloq:focus-visible:ring-offset-2 eloq:focus-visible:ring-muted eloq:disabled:cursor-not-allowed eloq:disabled:opacity-50 eloq:md:text-sm\",\n className,\n )}\n ref={ref}\n {...props}\n />\n );\n },\n);\nTextarea.displayName = \"Textarea\";\n\nexport { Textarea };\n","/**\n * Derives the two gradient stops for the suggested-message \"aura\" ring from a\n * base color: one more saturated, one softer (less saturated, slightly\n * lighter). The rotating conic gradient between them reads as an animated\n * frame in the same hue family as the bubble background.\n */\n\nconst HEX_PATTERN = /^#?([0-9a-f]{3}|[0-9a-f]{6})$/i;\n\ninterface HslColor {\n hue: number;\n saturation: number;\n lightness: number;\n}\n\nexport interface AuraColors {\n /** More saturated variant of the base color. */\n strong: string;\n /** Softer (desaturated, lighter) variant of the base color. */\n soft: string;\n}\n\nfunction parseHexChannels(\n color: string,\n): [red: number, green: number, blue: number] | null {\n const match = HEX_PATTERN.exec(color.trim());\n if (!match) return null;\n\n let hex = match[1];\n if (hex.length === 3) {\n hex = hex\n .split(\"\")\n .map((character) => character + character)\n .join(\"\");\n }\n return [\n Number.parseInt(hex.slice(0, 2), 16),\n Number.parseInt(hex.slice(2, 4), 16),\n Number.parseInt(hex.slice(4, 6), 16),\n ];\n}\n\nfunction rgbToHsl([red, green, blue]: [number, number, number]): HslColor {\n const normalizedRed = red / 255;\n const normalizedGreen = green / 255;\n const normalizedBlue = blue / 255;\n\n const maximum = Math.max(normalizedRed, normalizedGreen, normalizedBlue);\n const minimum = Math.min(normalizedRed, normalizedGreen, normalizedBlue);\n const delta = maximum - minimum;\n\n const lightness = (maximum + minimum) / 2;\n\n if (delta === 0) {\n return { hue: 0, saturation: 0, lightness };\n }\n\n const saturation =\n lightness > 0.5\n ? delta / (2 - maximum - minimum)\n : delta / (maximum + minimum);\n\n let hue: number;\n if (maximum === normalizedRed) {\n hue =\n ((normalizedGreen - normalizedBlue) / delta +\n (normalizedGreen < normalizedBlue ? 6 : 0)) /\n 6;\n } else if (maximum === normalizedGreen) {\n hue = ((normalizedBlue - normalizedRed) / delta + 2) / 6;\n } else {\n hue = ((normalizedRed - normalizedGreen) / delta + 4) / 6;\n }\n\n return { hue: hue * 360, saturation, lightness };\n}\n\nfunction clamp01(value: number): number {\n return Math.min(1, Math.max(0, value));\n}\n\nfunction toHslString({ hue, saturation, lightness }: HslColor): string {\n return `hsl(${Math.round(hue)} ${Math.round(saturation * 100)}% ${Math.round(\n lightness * 100,\n )}%)`;\n}\n\n/**\n * Returns the aura gradient stops for a base color. Both stops keep the base\n * hue but are LIGHTER than the base — a saturation shift alone is invisible\n * on already-saturated colors, where the ring would match the pill exactly,\n * and a darkening ring reads as a shadow, which looks off in the chat UI.\n * The lightness shift is capped near white so very light pills still get a\n * (subtle) ring. Near-gray bases (e.g. the default muted pill background)\n * also get a saturation nudge so the ring reads as a colour, not a shadow.\n * Falls back to a neutral gray pair when the color cannot be parsed.\n */\nexport function getAuraColors(\n baseColor: string | undefined | null,\n): AuraColors {\n const channels = baseColor ? parseHexChannels(baseColor) : null;\n if (!channels) {\n return { strong: \"hsl(0 0% 62%)\", soft: \"hsl(0 0% 82%)\" };\n }\n\n const { hue, saturation, lightness } = rgbToHsl(channels);\n\n // The strong stop sits 45 lightness points above the pill, the soft stop\n // 25 — a pronounced contrast so the 2px frame is unmissable at a glance.\n // Capped just below white so the ring never bleaches out entirely.\n const strong: HslColor = {\n hue,\n saturation: clamp01(Math.max(saturation * 1.35, saturation + 0.25)),\n lightness: Math.min(clamp01(lightness + 0.45), 0.95),\n };\n const soft: HslColor = {\n hue,\n saturation: clamp01(saturation * 0.6 + 0.1),\n lightness: Math.min(clamp01(lightness + 0.25), 0.9),\n };\n\n return { strong: toHslString(strong), soft: toHslString(soft) };\n}\n","import { useRef, type MouseEvent } from \"react\";\n\nexport function useDragScroll() {\n const isMouseDown = useRef(false);\n const startX = useRef(0);\n const scrollLeft = useRef(0);\n\n const onMouseDown = (e: MouseEvent<HTMLDivElement>) => {\n isMouseDown.current = true;\n const element = e.currentTarget;\n startX.current = e.pageX - element.offsetLeft;\n scrollLeft.current = element.scrollLeft;\n element.style.cursor = \"grabbing\";\n };\n\n const onMouseUp = (e: MouseEvent<HTMLDivElement>) => {\n isMouseDown.current = false;\n e.currentTarget.style.cursor = \"grab\";\n };\n\n const onMouseLeave = (e: MouseEvent<HTMLDivElement>) => {\n isMouseDown.current = false;\n e.currentTarget.style.cursor = \"grab\";\n };\n\n const onMouseMove = (e: MouseEvent<HTMLDivElement>) => {\n if (!isMouseDown.current) return;\n e.preventDefault();\n const element = e.currentTarget;\n const x = e.pageX - element.offsetLeft;\n const walk = (x - startX.current) * 1.5;\n element.scrollLeft = scrollLeft.current - walk;\n };\n\n return {\n onMouseDown,\n onMouseUp,\n onMouseLeave,\n onMouseMove,\n };\n}\n","\"use client\";\n\nimport { useEffect, useRef, useState, type CSSProperties } from \"react\";\n\nimport { getAuraColors } from \"@/lib/color-aura\";\nimport { getContrastingTextColor } from \"@/lib/color-contrast\";\nimport { cn } from \"@/lib/utils\";\n\nimport { useDragScroll } from \"@/hooks/use-drag-scroll\";\n\nimport { useChatInterfaceContext } from \"@/components/chat-interface/context\";\nimport { useTheme } from \"@/contexts/theme.context\";\n\nconst SHINE_SWEEP_DURATION_MILLISECONDS = 1100;\nconst SHINE_MINIMUM_PAUSE_MILLISECONDS = 4000;\nconst SHINE_MAXIMUM_PAUSE_MILLISECONDS = 9000;\n\n/**\n * Drives the shine sweep at randomized intervals: one 1.1s flash, then a\n * random 4–9s pause, repeat. CSS animations can't randomize their delay per\n * iteration, so the component toggles the animation class instead.\n */\nfunction useRandomShine(isEnabled: boolean): boolean {\n const [isShining, setIsShining] = useState(false);\n\n useEffect(() => {\n if (!isEnabled) return;\n\n let timeoutId: ReturnType<typeof setTimeout>;\n let hasUnmounted = false;\n\n const scheduleNextFlash = () => {\n const pause =\n SHINE_MINIMUM_PAUSE_MILLISECONDS +\n Math.random() *\n (SHINE_MAXIMUM_PAUSE_MILLISECONDS - SHINE_MINIMUM_PAUSE_MILLISECONDS);\n timeoutId = setTimeout(() => {\n if (hasUnmounted) return;\n setIsShining(true);\n timeoutId = setTimeout(() => {\n if (hasUnmounted) return;\n setIsShining(false);\n scheduleNextFlash();\n }, SHINE_SWEEP_DURATION_MILLISECONDS);\n }, pause);\n };\n\n scheduleNextFlash();\n\n return () => {\n hasUnmounted = true;\n clearTimeout(timeoutId);\n };\n }, [isEnabled]);\n\n return isShining;\n}\n\n/**\n * True while the element horizontally overflows (i.e. drag-to-scroll can\n * actually shift the row). Tracked with a ResizeObserver so the affordance\n * follows container resizes and pill changes.\n */\nfunction useHasHorizontalOverflow(): {\n scrollContainerRef: (element: HTMLDivElement | null) => void;\n hasOverflow: boolean;\n} {\n const [hasOverflow, setHasOverflow] = useState(false);\n const observerRef = useRef<ResizeObserver | null>(null);\n\n const scrollContainerRef = (element: HTMLDivElement | null) => {\n observerRef.current?.disconnect();\n observerRef.current = null;\n if (!element) return;\n\n const update = () => {\n const isOverflowing = element.scrollWidth > element.clientWidth + 1;\n setHasOverflow(isOverflowing);\n // The drag-scroll hook sets inline cursor styles during drags; drop\n // any stale one when the row stops overflowing (e.g. window resized).\n if (!isOverflowing) element.style.cursor = \"\";\n };\n\n update();\n // Guard for environments without ResizeObserver (jsdom, old browsers):\n // the initial measurement above still runs, only live tracking is lost.\n if (typeof ResizeObserver !== \"undefined\") {\n observerRef.current = new ResizeObserver(update);\n observerRef.current.observe(element);\n for (const child of element.children) {\n observerRef.current.observe(child);\n }\n }\n };\n\n return { scrollContainerRef, hasOverflow };\n}\n\nexport interface SuggestedMessagesProps {\n /** Called with the pill's text; the footer fills and focuses the input. */\n onSelect: (message: string) => void;\n}\n\n/**\n * The quick-reply pill row shown above the composer. Renders nothing unless\n * `suggestedMessages` is enabled in the chat-interface context AND\n * `suggestedMessageTexts` is non-empty (there are no placeholder examples),\n * and only until the conversation starts: the pills disappear the moment the\n * user sends their first message (they reappear when the chat is cleared,\n * since the message list resets). Clicking a pill only fills the composer —\n * the pills stay until the message is actually sent. Two independently\n * toggleable effects highlight the first (primary) pill:\n * - `hasSuggestedMessageAura` — a rotating conic-gradient frame in a\n * saturated/soft pair derived from the pill background (or the user-bubble\n * colour when the pills use the default muted background);\n * - `hasSuggestedMessageShine` — a banner-style light streak flashing across\n * the pill at random 4–9 second intervals.\n */\nexport function SuggestedMessages({ onSelect }: SuggestedMessagesProps) {\n const context = useChatInterfaceContext();\n const theme = useTheme();\n const dragScroll = useDragScroll();\n // Grab affordances only make sense when the row can actually shift.\n const { scrollContainerRef, hasOverflow } = useHasHorizontalOverflow();\n\n // Hidden as soon as the conversation has started: any user message in the\n // list (also covers restored conversations). Purely derived, so the pills\n // naturally reappear when the chat is cleared and the list resets.\n const hasUserMessages = !!context.messages?.some(\n (message) => message.sender === \"user\",\n );\n // No configured texts means no pills: the flag alone must not surface\n // placeholder examples in a customer's widget.\n const suggestedMessages = context.suggestedMessageTexts ?? [];\n const isVisible =\n !!context.suggestedMessages &&\n suggestedMessages.length > 0 &&\n !hasUserMessages;\n\n // The two effects toggle independently: the ring (aura) and the light\n // sweep (shine). Both apply to the first (primary) pill only.\n const hasAura = !!context.hasSuggestedMessageAura && isVisible;\n const hasShine = !!context.hasSuggestedMessageShine && isVisible;\n const isShining = useRandomShine(hasShine);\n\n if (!isVisible) return null;\n\n // The default pill background is a near-neutral muted gray whose\n // saturation shift would be invisible — fall back to the brand's\n // user-bubble colour instead.\n const auraColors = hasAura\n ? getAuraColors(theme.suggestedMessageBubbleColor || theme.userBubbleColor)\n : null;\n\n const pillStyle = theme.suggestedMessageBubbleColor\n ? {\n backgroundColor: theme.suggestedMessageBubbleColor,\n color:\n theme.suggestedMessageBubbleTextColor ||\n getContrastingTextColor(theme.suggestedMessageBubbleColor),\n }\n : undefined;\n\n const renderPill = (\n message: string,\n options: { isInsideAura: boolean; hasShine: boolean } = {\n isInsideAura: false,\n hasShine: false,\n },\n ) => (\n <button\n key={message}\n onClick={() => onSelect(message)}\n className={cn(\n // Pointer on the pill itself (it's a click target). The closed hand\n // while held only appears when the row overflows — that's when\n // dragging can actually shift it.\n \"eloq:whitespace-nowrap eloq:px-3 eloq:py-1.5 eloq:text-sm eloq:rounded-full eloq:bg-muted eloq:hover:bg-muted eloq:cursor-pointer\",\n hasOverflow && \"eloq:active:cursor-grabbing\",\n // The shine overlay is positioned against the pill.\n (options.isInsideAura || options.hasShine) && \"eloq:relative\",\n // Inside the aura wrapper the (opaque) pill covers the gradient except\n // for the wrapper's 2px padding, which reads as the animated frame.\n options.isInsideAura && \"eloq:block\",\n )}\n style={pillStyle}\n >\n {message}\n {options.hasShine && (\n // Banner-style shine: a skewed streak of light sweeping across the\n // pill — visible on any background, unlike the ring alone. Fired at\n // random 4–9s intervals by useRandomShine.\n <span\n className={cn(\n \"eloq-aura-shine\",\n isShining && \"eloq-aura-shine--active\",\n )}\n data-testid=\"suggested-message-shine\"\n />\n )}\n </button>\n );\n\n return (\n <div\n ref={scrollContainerRef}\n data-testid=\"suggested-messages\"\n className={cn(\n \"eloq:w-full eloq:px-4 eloq:pb-10 eloq:-mt-20 eloq:overflow-x-auto no-scrollbar eloq:z-10\",\n // Drag-to-scroll (and its grab cursor) only when the pills actually\n // overflow the row; the hook also sets inline cursor styles on mouse\n // events, so don't attach it at all otherwise.\n hasOverflow && \"eloq:cursor-grab\",\n )}\n {...(hasOverflow ? dragScroll : {})}\n >\n {/* items-center keeps the plain pills vertically aligned with the first\n one, whose aura wrapper makes it 4px taller (2px ring each side). */}\n <div className=\"eloq:flex eloq:items-center eloq:gap-2 eloq:min-w-min\">\n {suggestedMessages.map((message, index) =>\n // Both effects highlight only the first (primary) suggestion — a\n // ring or flash on every pill would compete for attention.\n hasAura && auraColors && index === 0 ? (\n <span\n key={message}\n className=\"eloq-aura eloq:flex-none\"\n data-testid=\"suggested-message-aura\"\n style={\n {\n \"--eloq-aura-strong\": auraColors.strong,\n \"--eloq-aura-soft\": auraColors.soft,\n } as CSSProperties\n }\n >\n {renderPill(message, { isInsideAura: true, hasShine })}\n </span>\n ) : (\n // Direct flex child, exactly like the pre-aura markup.\n renderPill(message, {\n isInsideAura: false,\n hasShine: hasShine && index === 0,\n })\n ),\n )}\n </div>\n </div>\n );\n}\n","// Error codes enum\nexport enum ERROR_CODES {\n NETWORK_ERROR = 0,\n MAINTENANCE_MODE = 5031,\n CHAT_DISABLED = 5032,\n TECHNICAL_DIFFICULTIES = 5001,\n}\n\n// Error messages mapping\nexport const ERROR_MESSAGES: Record<ERROR_CODES | string, string> = {\n [ERROR_CODES.NETWORK_ERROR]:\n \"Unable to connect to the service. Please check your network connection.\",\n [ERROR_CODES.MAINTENANCE_MODE]:\n \"The service is currently undergoing maintenance. Please try again later.\",\n [ERROR_CODES.CHAT_DISABLED]:\n \"I am sorry this service is currently unavailable, please try again later.\",\n [ERROR_CODES.TECHNICAL_DIFFICULTIES]:\n \"We are currently facing technical difficulties. Please try again later.\",\n DEFAULT: \"Something went wrong. Please try again later.\",\n};\n","import { ERROR_CODES, ERROR_MESSAGES } from \"./constants\";\n\nexport const getErrorMessage = (code: ERROR_CODES): string =>\n ERROR_MESSAGES[code] || ERROR_MESSAGES[\"DEFAULT\"];\n","import { createContext, useContext } from \"react\";\nimport { ServerError } from \"@/lib/http\";\nimport { getErrorMessage } from \"./utils\";\n\nexport interface SdkError {\n code: number;\n message: string;\n}\n\ninterface ErrorContextType {\n error: SdkError | null;\n hideSdk: boolean;\n publishApiError: (error: ServerError) => void;\n publishError: (error: SdkError) => void;\n publishNetworkError: () => void;\n clearError: () => void;\n}\n\nexport const ErrorContext = createContext<ErrorContextType>({\n error: null,\n hideSdk: false,\n publishApiError: () => {},\n publishError: () => {},\n publishNetworkError: () => {},\n clearError: () => {},\n});\n\n// Custom hook to use the error context\nexport const useErrorContext = () => {\n const context = useContext(ErrorContext);\n\n if (context === undefined) {\n throw new Error(\"useError must be used within an ErrorProvider\");\n }\n\n return context;\n};\n\n// Helper function for publishing API errors\nexport const createPublishApiError = (\n setError: (error: SdkError | null) => void,\n) => {\n return (error: ServerError) => {\n // Extract error details - default to first error in array\n const code = Number(error.response[\"errors\"][0].error_code);\n // Get appropriate error message\n const message = getErrorMessage(code);\n\n setError({ code, message });\n };\n};\n","import { AlertTriangle, XCircle, Info, CheckCircle } from \"lucide-react\";\n\ninterface BannerProps {\n message: string;\n type: \"warning\" | \"error\" | \"info\" | \"success\";\n}\n\n// Dark mode swaps the pale-tint panels for translucent tints of the same hue\n// with light text, so banners stay readable without glowing on the dark card.\nconst configs = {\n warning: {\n bgColor: \"eloq:bg-amber-50 eloq:dark:bg-amber-400/10\",\n borderColor: \"eloq:border-amber-400\",\n textColor: \"eloq:text-amber-800 eloq:dark:text-amber-200\",\n iconColor: \"eloq:text-amber-500 eloq:dark:text-amber-400\",\n icon: AlertTriangle,\n },\n error: {\n bgColor: \"eloq:bg-red-50 eloq:dark:bg-red-500/10\",\n borderColor: \"eloq:border-red-500\",\n textColor: \"eloq:text-red-800 eloq:dark:text-red-200\",\n iconColor: \"eloq:text-red-500 eloq:dark:text-red-400\",\n icon: XCircle,\n },\n info: {\n bgColor: \"eloq:bg-blue-50 eloq:dark:bg-blue-500/10\",\n borderColor: \"eloq:border-blue-500\",\n textColor: \"eloq:text-blue-800 eloq:dark:text-blue-200\",\n iconColor: \"eloq:text-blue-500 eloq:dark:text-blue-400\",\n icon: Info,\n },\n success: {\n bgColor: \"eloq:bg-green-50 eloq:dark:bg-green-500/10\",\n borderColor: \"eloq:border-green-500\",\n textColor: \"eloq:text-green-800 eloq:dark:text-green-200\",\n iconColor: \"eloq:text-green-500 eloq:dark:text-green-400\",\n icon: CheckCircle,\n },\n};\n\nexport const Banner = ({ message, type }: BannerProps) => {\n const config = configs[type] || configs.warning;\n const Icon = config.icon;\n\n return (\n <div\n className={`eloq:flex eloq:items-center eloq:gap-3 ${config.bgColor} eloq:text-sm eloq:sm:text-md eloq:border-l-4 ${config.borderColor} eloq:p-3 eloq:rounded-md eloq:my-4`}\n >\n <Icon className={config.iconColor} size={25} />\n <span className={config.textColor}>{message}</span>\n </div>\n );\n};\n","\"use client\";\n\nimport DOMPurify from \"dompurify\";\nimport { ArrowUp, MessageCircle } from \"lucide-react\";\nimport { useEffect, useRef, useState, type FormEvent } from \"react\";\n\nimport { getContrastingTextColor } from \"@/lib/color-contrast\";\nimport { cn } from \"@/lib/utils\";\n\nimport { CardFooter } from \"@/components/ui/card\";\nimport { Textarea } from \"@/components/ui/textarea\";\n\nimport { useChatInterfaceContext } from \"@/components/chat-interface/context\";\nimport { SuggestedMessages } from \"@/components/chat-interface/suggested-messages\";\nimport { Logo } from \"@/components/logo\";\nimport { useErrorContext } from \"@/contexts/error-handling.utils\";\nimport { useTheme } from \"@/contexts/theme.context\";\nimport { Banner } from \"../banner\";\n\n// Guard the module-level hook registration: in a DOM-less runtime (Next.js\n// SSR/Node), DOMPurify is a stub without `addHook`, so calling it while the\n// module evaluates crashes the host app's whole server render\n// (\"TypeError: DOMPurify.addHook is not a function\"). `isSupported` is false\n// exactly in those environments — and sanitize() is only reached from browser\n// event/render paths, where the hook is registered.\nif (DOMPurify.isSupported) {\n DOMPurify.addHook(\"afterSanitizeAttributes\", (node) => {\n if (node.tagName === \"A\") {\n node.setAttribute(\"rel\", \"noopener noreferrer\");\n if (node.hasAttribute(\"target\")) {\n node.setAttribute(\"target\", \"_blank\");\n }\n }\n });\n}\n\n/**\n * Rounded surface holding the message textarea. Light mode outlines it with a\n * soft black glow; that glow is invisible on a dark background, so dark mode\n * swaps it for a border.\n */\nconst composerSurfaceClassName =\n \"eloq:bg-card eloq:rounded-3xl eloq:shadow-[0_0_4px_0_rgba(0,0,0,0.20)] eloq:dark:shadow-none eloq:dark:border eloq:dark:border-border\";\n\n/**\n * Panel shown in place of the composer once the conversation has ended. Same\n * light-shadow/dark-border swap as the composer surface, on the cream\n * branding-band color.\n */\nconst chatClosedPanelClassName =\n \"eloq:w-full eloq:rounded-t-2xl eloq:bg-cream eloq:border-t eloq:border-x eloq:border-border eloq:px-5 eloq:pt-5 eloq:pb-4 eloq:shadow-[0_-8px_24px_rgba(0,0,0,0.08)] eloq:dark:shadow-none\";\n\nconst startNewChatButtonClassName =\n \"eloq:flex eloq:items-center eloq:justify-between eloq:w-[70%] eloq:m-auto eloq:rounded-full eloq:py-2 eloq:pl-4 eloq:pr-2 eloq:text-sm eloq:font-semibold eloq:transition-opacity eloq:hover:opacity-90 eloq:focus-visible:outline-none eloq:focus-visible:ring-2 eloq:focus-visible:ring-primary eloq:focus-visible:ring-offset-2\";\n\n/** \"Powered by Eloquent AI\" band at the very bottom of the chat. */\nconst brandingStripClassName = \"eloq:bg-cream\";\n\n/**\n * Send button when there is nothing to send. In dark mode --muted-foreground\n * is near-white, which would make the DISABLED button the brightest thing on\n * screen — use the muted surface with a dim arrow instead.\n */\nconst sendButtonDisabledClassName =\n \"eloq:bg-muted-foreground eloq:dark:bg-muted eloq:dark:text-muted-foreground/50\";\n\n/**\n * Whether legal-text HTML can be sanitized and rendered yet.\n *\n * Server-rendered as false on purpose: DOMPurify cannot sanitize without a DOM\n * (`isSupported` is false), and rendering unsanitized config-provided HTML is\n * not an option. The text appears after hydration — the state starts false on\n * the client too, so the first client render matches the server markup and\n * there is no hydration mismatch.\n */\nfunction useCanRenderSanitizedHtml(): boolean {\n const [isHydrated, setIsHydrated] = useState(false);\n useEffect(() => {\n setIsHydrated(true);\n }, []);\n\n return isHydrated && DOMPurify.isSupported;\n}\n\nexport function ChatInterfaceFooter() {\n const { error } = useErrorContext();\n const inErrorState = !!error;\n\n const context = useChatInterfaceContext();\n const inputRef = useRef<HTMLTextAreaElement>(null);\n const [messageInput, setMessageInput] = useState(\"\");\n const theme = useTheme();\n const isAfterRating = !!context.messages?.some((m) => m.isRatingRequest);\n const keyboardInset = context.keyboardInset ?? 0;\n const canRenderSanitizedHtml = useCanRenderSanitizedHtml();\n\n const userBubbleTextColor =\n theme.userBubbleTextColor || getContrastingTextColor(theme.userBubbleColor);\n\n const getButtonStyle = () => {\n if (messageInput.trim() && !inErrorState && !isAfterRating) {\n return {\n backgroundColor: theme.userBubbleColor,\n color: userBubbleTextColor,\n };\n }\n return {};\n };\n\n const handleSuggestedMessageSelect = (message: string) => {\n setMessageInput(message);\n if (inputRef.current) {\n inputRef.current.focus();\n }\n };\n\n const handleSubmit = async (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n const message = messageInput.trim();\n if (!message || inErrorState || isAfterRating) return;\n\n // Remove message from input optimistically. If it fails, put it back\n try {\n setMessageInput(\"\");\n await context.onSendMessage?.({\n id: crypto.randomUUID(),\n content: message,\n sender: \"user\",\n timestamp: new Date().toISOString(),\n });\n\n if (inputRef.current) {\n const textarea = inputRef.current;\n // Reset height to auto to get the correct scrollHeight\n textarea.style.height = \"auto\";\n // Set new height based on scrollHeight, with max of 6 lines\n const newHeight = Math.min(textarea.scrollHeight, 48);\n textarea.style.height = `${newHeight}px`;\n }\n } catch {\n setMessageInput(message);\n }\n };\n\n const renderInputArea = () => {\n if (context.isChatClosed) {\n return (\n <div className=\"eloq:w-full eloq:z-20 eloq:animate-slide-up-in\">\n <div\n className={chatClosedPanelClassName}\n role=\"status\"\n aria-live=\"polite\"\n >\n <p className=\"eloq:text-sm eloq:text-center eloq:text-muted-foreground eloq:mb-4\">\n Your conversation has ended\n </p>\n <button\n type=\"button\"\n onClick={() => context.onStartNewChat?.()}\n className={startNewChatButtonClassName}\n style={{\n backgroundColor: theme.userBubbleColor,\n color: userBubbleTextColor,\n }}\n >\n <span>Start a new conversation</span>\n <span className=\"eloq:flex eloq:items-center eloq:justify-center eloq:w-6 eloq:h-6 eloq:rounded-full eloq:bg-white/20\">\n <MessageCircle className=\"eloq:h-4 eloq:w-4\" />\n </span>\n </button>\n </div>\n </div>\n );\n }\n\n return (\n <>\n <SuggestedMessages onSelect={handleSuggestedMessageSelect} />\n <div\n className=\"eloq:flex eloq:flex-col eloq:w-full eloq:items-center eloq:px-4 eloq:mx-1 eloq:pb-4 eloq:-mt-6 eloq:z-20\"\n style={\n keyboardInset\n ? { transform: `translateY(-${keyboardInset}px)` }\n : undefined\n }\n >\n {inErrorState && <Banner message={error.message} type=\"error\" />}\n <form\n className=\"eloq:relative eloq:flex eloq:items-center eloq:w-full eloq:m-0\"\n onSubmit={handleSubmit}\n >\n <div className={cn(\"eloq:flex-1\", composerSurfaceClassName)}>\n <Textarea\n ref={inputRef}\n name=\"message\"\n placeholder=\"Type a message...\"\n className=\"eloq:flex-1 eloq:min-h-[48px] eloq:max-h-[132px] eloq:text-base eloq:sm:text-sm eloq:resize-none eloq:border-0 eloq:pl-4 eloq:pr-12 eloq:py-3.5 eloq-thin-scrollbar eloq:leading-5 eloq:bg-card eloq:rounded-3xl\"\n rows={1}\n value={messageInput}\n disabled={inErrorState || isAfterRating}\n onChange={(e) => setMessageInput(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n const form = e.currentTarget.form;\n if (form) {\n form.dispatchEvent(\n new Event(\"submit\", { bubbles: true }),\n );\n }\n }\n }}\n onInput={(e) => {\n const textarea = e.currentTarget;\n textarea.style.height = \"auto\";\n const newHeight = Math.min(textarea.scrollHeight, 132);\n textarea.style.height = `${newHeight}px`;\n\n setMessageInput(textarea.value);\n }}\n />\n </div>\n <button\n type=\"submit\"\n disabled={!messageInput.trim() || inErrorState || isAfterRating}\n className={cn(\n \"eloq:absolute eloq:top-0 eloq:bottom-2 eloq:right-2 eloq:self-end eloq:p-2 eloq:text-muted eloq:rounded-full eloq:transition-colors\",\n messageInput.trim() && !inErrorState\n ? \"eloq:text-primary-foreground\"\n : sendButtonDisabledClassName,\n )}\n style={getButtonStyle()}\n >\n <ArrowUp className=\"eloq:h-4 eloq:w-4\" />\n </button>\n </form>\n </div>\n </>\n );\n };\n\n return (\n <CardFooter className=\"eloq:flex eloq:flex-col eloq:bg-background eloq:p-0\">\n {renderInputArea()}\n <div\n className={cn(\n \"eloq:w-full eloq:flex eloq:flex-col eloq:items-center eloq:justify-center eloq:space-x-2 eloq:px-0\",\n brandingStripClassName,\n )}\n >\n <div className=\"eloq:w-full eloq:flex eloq:items-center eloq:justify-center eloq:space-x-2 eloq:py-1\">\n <Logo\n className=\"eloq:h-5 eloq:w-5 eloq:mr-[2px]\"\n bgColor={theme.mode === \"dark\" ? \"white\" : \"black\"}\n fgColor={theme.mode === \"dark\" ? \"black\" : \"white\"}\n />\n <div className=\"eloq:text-xs eloq:text-center eloq:text-muted-foreground eloq:font-medium eloq:p-1\">\n Powered by Eloquent AI\n </div>\n </div>\n {context.legalText && canRenderSanitizedHtml && (\n <div\n className=\"eloq:text-[10px] eloq:text-center eloq:text-muted-foreground eloq:mb-1\"\n dangerouslySetInnerHTML={{\n __html: DOMPurify.sanitize(context.legalText, {\n ALLOWED_TAGS: [\"a\", \"b\", \"i\", \"em\", \"strong\", \"span\", \"br\"],\n ALLOWED_ATTR: [\"href\", \"target\"],\n }),\n }}\n />\n )}\n </div>\n </CardFooter>\n );\n}\n","\"use client\";\nvar __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/avatar.tsx\nimport * as React from \"react\";\nimport { IS_DEVELOPMENT } from \"@radix-ui/primitive/is-development\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar AVATAR_NAME = \"Avatar\";\nvar [createAvatarContext, createAvatarScope] = createContextScope(AVATAR_NAME);\nvar STATIC_IMAGE_COUNT_STATE = [\n 0,\n () => void 0\n];\nvar [AvatarProvider, useAvatarContext] = createAvatarContext(AVATAR_NAME);\nvar Avatar = /* @__PURE__ */ React.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function Avatar2(props, forwardedRef) {\n const { __scopeAvatar, ...avatarProps } = props;\n const [imageLoadingStatus, setImageLoadingStatus] = React.useState(\"idle\");\n const [imageCount, setImageCount] = useImageCount();\n return /* @__PURE__ */ jsx(\n AvatarProvider,\n {\n scope: __scopeAvatar,\n imageLoadingStatus,\n setImageLoadingStatus,\n imageCount,\n setImageCount,\n children: /* @__PURE__ */ jsx(Primitive.span, { ...avatarProps, ref: forwardedRef })\n }\n );\n }, \"Avatar\")\n);\nvar IMAGE_NAME = \"AvatarImage\";\nvar AvatarImage = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function AvatarImage2(props, forwardedRef) {\n const { __scopeAvatar, src, onLoadingStatusChange, ...imageProps } = props;\n const context = useAvatarContext(IMAGE_NAME, __scopeAvatar);\n useUpdateImageCount(context.setImageCount);\n const imageLoadingStatus = useImageLoadingStatus(src, {\n referrerPolicy: imageProps.referrerPolicy,\n crossOrigin: imageProps.crossOrigin,\n loadingStatus: context.imageLoadingStatus,\n setLoadingStatus: context.setImageLoadingStatus\n });\n const handleLoadingStatusChange = useCallbackRef((status) => {\n onLoadingStatusChange?.(status);\n });\n const loadingStatusRef = React.useRef(imageLoadingStatus);\n useLayoutEffect(() => {\n const previousLoadingStatus = loadingStatusRef.current;\n loadingStatusRef.current = imageLoadingStatus;\n if (imageLoadingStatus !== previousLoadingStatus) {\n handleLoadingStatusChange(imageLoadingStatus);\n }\n }, [imageLoadingStatus, handleLoadingStatusChange]);\n return imageLoadingStatus === \"loaded\" ? /* @__PURE__ */ jsx(Primitive.img, { ...imageProps, ref: forwardedRef, src }) : null;\n }, \"AvatarImage\")\n);\nvar FALLBACK_NAME = \"AvatarFallback\";\nvar AvatarFallback = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function AvatarFallback2(props, forwardedRef) {\n const { __scopeAvatar, delayMs, ...fallbackProps } = props;\n const context = useAvatarContext(FALLBACK_NAME, __scopeAvatar);\n const [canRender, setCanRender] = React.useState(delayMs === void 0);\n React.useEffect(() => {\n if (delayMs !== void 0) {\n const timerId = window.setTimeout(() => setCanRender(true), delayMs);\n return () => window.clearTimeout(timerId);\n }\n }, [delayMs]);\n return canRender && context.imageLoadingStatus !== \"loaded\" ? /* @__PURE__ */ jsx(Primitive.span, { ...fallbackProps, ref: forwardedRef }) : null;\n }, \"AvatarFallback\")\n);\nfunction useImageLoadingStatus(src, {\n loadingStatus,\n setLoadingStatus,\n referrerPolicy,\n crossOrigin\n}) {\n useLayoutEffect(() => {\n if (!src) {\n setLoadingStatus(\"error\");\n return;\n }\n const image = new window.Image();\n const handleLoad = /* @__PURE__ */ __name((event) => {\n const image2 = event.currentTarget;\n setLoadingStatus(getImageLoadingStatus(image2));\n }, \"handleLoad\");\n const handleError = /* @__PURE__ */ __name(() => setLoadingStatus(\"error\"), \"handleError\");\n image.addEventListener(\"load\", handleLoad);\n image.addEventListener(\"error\", handleError);\n if (referrerPolicy) {\n image.referrerPolicy = referrerPolicy;\n }\n image.crossOrigin = crossOrigin ?? null;\n image.src = src;\n setLoadingStatus(getImageLoadingStatus(image));\n return () => {\n image.removeEventListener(\"load\", handleLoad);\n image.removeEventListener(\"error\", handleError);\n setLoadingStatus(\"idle\");\n };\n }, [src, crossOrigin, referrerPolicy, setLoadingStatus]);\n return loadingStatus;\n}\n__name(useImageLoadingStatus, \"useImageLoadingStatus\");\nfunction getImageLoadingStatus(image) {\n return image.complete ? image.naturalWidth > 0 ? \"loaded\" : \"error\" : \"loading\";\n}\n__name(getImageLoadingStatus, \"getImageLoadingStatus\");\nfunction useImageCount() {\n let state = STATIC_IMAGE_COUNT_STATE;\n if (IS_DEVELOPMENT) {\n state = React.useState(0);\n const [imageCount] = state;\n const hasWarnedRef = React.useRef(false);\n React.useEffect(() => {\n if (imageCount > 1 && !hasWarnedRef.current) {\n hasWarnedRef.current = true;\n console.warn(\n \"Avatar: Only one `Avatar.Image` component should be rendered per `Avatar.Root`, but multiple were detected. This will lead to unexpected behavior.\"\n );\n }\n }, [imageCount]);\n }\n return state;\n}\n__name(useImageCount, \"useImageCount\");\nfunction useUpdateImageCount(setImageCount) {\n if (IS_DEVELOPMENT) {\n React.useEffect(() => {\n setImageCount((imageCount) => imageCount + 1);\n return () => {\n setImageCount((imageCount) => imageCount - 1);\n };\n }, [setImageCount]);\n }\n}\n__name(useUpdateImageCount, \"useUpdateImageCount\");\nexport {\n Avatar,\n AvatarFallback,\n AvatarImage,\n AvatarFallback as Fallback,\n AvatarImage as Image,\n Avatar as Root,\n createAvatarScope\n};\n//# sourceMappingURL=index.mjs.map\n","import {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ElementRef,\n} from \"react\";\nimport * as AvatarPrimitive from \"@radix-ui/react-avatar\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst Avatar = forwardRef<\n ElementRef<typeof AvatarPrimitive.Root>,\n ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Root\n ref={ref}\n className={cn(\n \"eloq:relative eloq:flex eloq:h-10 eloq:w-10 eloq:shrink-0 eloq:overflow-hidden eloq:rounded-full\",\n className,\n )}\n {...props}\n />\n));\nAvatar.displayName = AvatarPrimitive.Root.displayName;\n\nconst AvatarImage = forwardRef<\n ElementRef<typeof AvatarPrimitive.Image>,\n ComponentPropsWithoutRef<typeof AvatarPrimitive.Image>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Image\n ref={ref}\n className={cn(\"eloq:aspect-square eloq:h-full eloq:w-full\", className)}\n {...props}\n />\n));\nAvatarImage.displayName = AvatarPrimitive.Image.displayName;\n\nconst AvatarFallback = forwardRef<\n ElementRef<typeof AvatarPrimitive.Fallback>,\n ComponentPropsWithoutRef<typeof AvatarPrimitive.Fallback>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Fallback\n ref={ref}\n className={cn(\n \"eloq:flex eloq:h-full eloq:w-full eloq:items-center eloq:justify-center eloq:rounded-full eloq:bg-muted\",\n className,\n )}\n {...props}\n />\n));\nAvatarFallback.displayName = AvatarPrimitive.Fallback.displayName;\n\nexport { Avatar, AvatarImage, AvatarFallback };\n","\"use client\";\n\nimport { RefreshCcw, X } from \"lucide-react\";\n\nimport { Avatar } from \"@/components/ui/avatar\";\nimport { CardHeader } from \"@/components/ui/card\";\n\nimport { Logo } from \"@/components/logo\";\n\nimport { useChatInterfaceContext } from \"@/components/chat-interface/context\";\nimport {\n headerRowClassName,\n headerTitleGroupClassName,\n subtitleTextClassName,\n} from \"@/components/chat-interface/shared\";\nimport { cn } from \"@/lib/utils\";\n\n/**\n * Header hangs over the content with a soft drop shadow in light mode; the\n * shadow is invisible on a dark background, so dark mode swaps it for a\n * bottom border (same idiom as the footer's composer surface).\n */\nconst headerSurfaceClassName =\n \"eloq:shadow-[0_3px_4px_-2px_rgba(0,0,0,0.04)] eloq:dark:shadow-none eloq:dark:border-b eloq:dark:border-border\";\n\nconst headerIconButtonClassName =\n \"eloq:text-gray-400 eloq:hover:text-gray-600 eloq:dark:hover:text-gray-300 eloq:p-2\";\n\nexport function ChatInterfaceHeader({\n onCleanChat,\n onClose,\n}: {\n onCleanChat: () => void;\n onClose: () => void;\n}) {\n const context = useChatInterfaceContext();\n // New names win over the deprecated aliases; both default to visible.\n const hasCleanChatButton =\n context.hasCleanChatButton ?? context.cleanChatButton ?? true;\n const hasCloseButton = context.hasCloseButton ?? context.closeButton ?? true;\n return (\n <CardHeader className={cn(headerRowClassName, headerSurfaceClassName)}>\n <div className={headerTitleGroupClassName}>\n <Avatar className=\"eloq:h-10 eloq:w-10\">\n <Logo\n src={context.assistantLogo}\n bgColor=\"#6F33B7\"\n fgColor=\"#ffffff\"\n />\n </Avatar>\n <div className=\"eloq:flex eloq:flex-col\">\n <h2 className=\"eloq:text-sm eloq:text-foreground eloq:font-semibold\">\n {context.assistantName}\n </h2>\n <span className={subtitleTextClassName}>{context.subtitle}</span>\n </div>\n </div>\n <div>\n {hasCleanChatButton && (\n <button onClick={onCleanChat} className={headerIconButtonClassName}>\n <RefreshCcw className=\"eloq:h-4 eloq:w-4\" />\n </button>\n )}\n\n {hasCloseButton && (\n <button onClick={onClose} className={headerIconButtonClassName}>\n <X className=\"eloq:h-4 eloq:w-4\" />\n </button>\n )}\n </div>\n </CardHeader>\n );\n}\n","\"use client\";\n\nimport { cn } from \"@/lib/utils\";\nimport { Message, MessageData } from \"@/type\";\n\nimport { Card } from \"@/components/ui/card\";\n\nimport { ThemeContextType, ThemeProvider } from \"@/contexts/theme.context\";\n\nimport { ChatInterfaceContent } from \"@/components/chat-interface/content\";\nimport { ChatInterfaceProvider } from \"@/components/chat-interface/context\";\nimport { ChatInterfaceFooter } from \"@/components/chat-interface/footer\";\nimport { ChatInterfaceHeader } from \"@/components/chat-interface/header\";\nimport { cardContainerClassName } from \"@/components/chat-interface/shared\";\n\nexport interface ChatInterfaceProps {\n displayWelcomeMessages?: boolean;\n theme?: Partial<ThemeContextType>;\n isOpen?: boolean;\n isMobile?: boolean;\n /** Current on-screen keyboard overlap (px), used to lift the input above it. */\n keyboardInset?: number;\n messages?: Message[];\n assistantName?: string;\n assistantLogo?: string;\n legalText?: string;\n /** Show the close (X) button in the chat header. Defaults to true. */\n hasCloseButton?: boolean;\n /** Show the clear-conversation button in the chat header. Defaults to true. */\n hasCleanChatButton?: boolean;\n /** @deprecated Use `hasCloseButton` instead. Ignored when `hasCloseButton` is set. */\n closeButton?: boolean;\n /** @deprecated Use `hasCleanChatButton` instead. Ignored when `hasCleanChatButton` is set. */\n cleanChatButton?: boolean;\n /** Show the copy-message button on assistant messages. Defaults to true. */\n hasCopyButton?: boolean;\n /** @deprecated Use `hasCopyButton` instead. Ignored when `hasCopyButton` is set. */\n hideCopyButton?: boolean;\n collectUserFeedback?: boolean;\n suggestedMessages?: boolean;\n /** Quick-reply pill texts; the row renders nothing when empty. */\n suggestedMessageTexts?: string[];\n /** Rotating conic-gradient frame around the first suggestion pill, colored from the pill/user-bubble background. */\n hasSuggestedMessageAura?: boolean;\n /** Banner-style light streak flashing across the first suggestion pill at random intervals. */\n hasSuggestedMessageShine?: boolean;\n title?: string;\n subtitle?: string;\n /**\n * Play the popup-style panel entrance animation, defaulting to true — the\n * embed widget's existing behavior. With false the interface renders as\n * plain page content with no entrance; read-only transcript views (and\n * server rendering) want this.\n */\n hasIntroAnimation?: boolean;\n /**\n * Mark the widget as running against a test (non-live) agent: a yellow/black\n * caution stripe is drawn down the widget's left edge so a test session can\n * never be mistaken for the production one.\n */\n isTestMode?: boolean;\n onSendMessage?: (message: MessageData) => Promise<void>;\n onMessageClick?: (message: MessageData) => void;\n onClose?: () => void;\n onCleanChat?: () => void;\n isChatClosed?: boolean;\n onStartNewChat?: () => void;\n onRateChat?: (rating: number) => void;\n}\n\nexport function ChatInterface(props: ChatInterfaceProps) {\n const {\n isOpen = false,\n isMobile,\n onCleanChat,\n onClose,\n theme,\n hasIntroAnimation = true,\n isTestMode = false,\n } = props;\n\n const cardClassName = cardContainerClassName({\n isOpen,\n isMobile,\n // No intro also means no panel-in/out entrance: the interface is being\n // rendered as page content (embedded playground, transcript previews),\n // where a popup-style \"rise from the corner\" animation is wrong.\n skipAnimation: !hasIntroAnimation,\n });\n\n const renderCard = () => {\n return (\n <Card className={cn(cardClassName, { \"eloq:relative\": isTestMode })}>\n {isTestMode && (\n <div\n data-testid=\"test-mode-stripe\"\n className=\"eloq-test-mode-stripe eloq:absolute eloq:left-0 eloq:top-0 eloq:h-full eloq:w-3 eloq:z-10\"\n />\n )}\n <ChatInterfaceHeader\n onCleanChat={() => onCleanChat?.()}\n onClose={() => onClose?.()}\n />\n <ChatInterfaceContent />\n <ChatInterfaceFooter />\n </Card>\n );\n };\n\n return (\n <ThemeProvider {...theme}>\n <ChatInterfaceProvider {...props}>\n <main\n className={cn(\n \"eloquent-chat eloq:w-full eloq:h-full eloq:flex eloq:flex-col eloq:justify-end eloq:items-end eloq:overflow-hidden\",\n {\n dark: theme?.mode === \"dark\",\n },\n )}\n >\n {renderCard()}\n </main>\n </ChatInterfaceProvider>\n </ThemeProvider>\n );\n}\n","import type { HTMLAttributes } from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\nfunction Skeleton({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn(\n \"eloq:animate-pulse eloq:rounded-md eloq:bg-muted\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Skeleton };\n","import { useEffect, useState } from \"react\";\n\n/**\n * Returns `value` delayed by `delayMilliseconds`: the returned value only\n * updates once the input has stayed unchanged for the full delay. Drop-in\n * replacement for `useDebounce` from `@uidotdev/usehooks`.\n */\nexport function useDebounce<Type>(\n value: Type,\n delayMilliseconds: number,\n): Type {\n const [debouncedValue, setDebouncedValue] = useState(value);\n\n useEffect(() => {\n const timeoutHandle = setTimeout(() => {\n setDebouncedValue(value);\n }, delayMilliseconds);\n\n return () => {\n clearTimeout(timeoutHandle);\n };\n }, [value, delayMilliseconds]);\n\n return debouncedValue;\n}\n","import { ScrollArea } from \"@radix-ui/react-scroll-area\";\n\nimport { Skeleton } from \"@/components/ui/skeleton\";\nimport {\n Card,\n CardContent,\n CardFooter,\n CardHeader,\n} from \"@/components/ui/card\";\nimport {\n cardContainerClassName,\n headerRowClassName,\n headerTitleGroupClassName,\n} from \"./shared\";\nimport { useDebounce } from \"@/hooks/use-debounce\";\nimport { cn } from \"@/lib/utils\";\n\nexport function SkeletonChatInterface({\n isOpen = false,\n isMobile,\n skipAnimation = false,\n}: {\n isOpen?: boolean;\n isMobile: boolean | undefined;\n /** Render in place without the panel entrance — for embedded remounts, where the frame replaces a widget that was already on screen. */\n skipAnimation?: boolean;\n}) {\n const isOpenDebounced = useDebounce(isOpen, 10);\n const cardClassName = cardContainerClassName({\n isOpen: skipAnimation ? isOpen : isOpenDebounced,\n isMobile,\n skipAnimation,\n });\n\n return (\n <Card key=\"chat-interface-skeleton\" className={cardClassName}>\n <CardHeader\n className={cn(headerRowClassName, \"eloq:mb-4 eloq:shadow-sm\")}\n >\n <div className={headerTitleGroupClassName}>\n <Skeleton className=\"eloq:h-8 eloq:w-8\" />\n <Skeleton className=\"eloq:h-6 eloq:w-32\" />\n </div>\n </CardHeader>\n <CardContent className=\"eloq:flex-1 eloq:px-4 eloq:overflow-hidden\">\n <ScrollArea>\n <div className=\"eloq:flex eloq:flex-col eloq:items-center eloq:justify-center eloq:space-y-2 eloq:pt-10\">\n <Skeleton className=\"eloq:w-14 eloq:h-14 eloq:mx-auto eloq:rounded-md\" />\n <div>\n <Skeleton className=\"eloq:h-6 eloq:w-32 eloq:mx-auto eloq:mt-2\" />\n </div>\n <Skeleton className=\"eloq:h-4 eloq:w-24 eloq:mx-auto\" />\n </div>\n <div className=\"eloq:flex eloq:flex-col eloq:space-y-4 eloq:mt-10\">\n <Skeleton className=\"eloq:h-12 eloq:w-2/3\" />\n <Skeleton className=\"eloq:h-12 eloq:w-2/3 eloq:self-end\" />\n <Skeleton className=\"eloq:h-12 eloq:w-2/3\" />\n <Skeleton className=\"eloq:h-12 eloq:w-2/3 eloq:self-end\" />\n </div>\n </ScrollArea>\n </CardContent>\n <CardFooter>\n <Skeleton className=\"eloq:h-12 eloq:w-full eloq:rounded-full\" />\n </CardFooter>\n </Card>\n );\n}\n"],"names":["r","f","n","clsx","concatArrays","array1","array2","combinedArray","i","createClassValidatorObject","classGroupId","validator","createClassPartObject","nextPart","validators","CLASS_PART_SEPARATOR","EMPTY_CONFLICTS","ARBITRARY_PROPERTY_PREFIX","createClassGroupUtils","config","classMap","createClassMap","conflictingClassGroups","conflictingClassGroupModifiers","className","getGroupIdForArbitraryProperty","classParts","startIndex","getGroupRecursive","hasPostfixModifier","modifierConflicts","baseConflicts","classPartObject","currentClassPart","nextClassPartObject","result","classRest","validatorsLength","validatorObj","content","colonIndex","property","theme","classGroups","processClassGroups","group","processClassesRecursively","classGroup","len","classDefinition","processClassDefinition","processStringDefinition","processFunctionDefinition","processObjectDefinition","classPartObjectToEdit","getPart","isThemeGetter","entries","key","value","path","current","parts","part","next","func","createLruCache","maxCacheSize","cacheSize","cache","previousCache","update","IMPORTANT_MODIFIER","MODIFIER_SEPARATOR","EMPTY_MODIFIERS","createResultObject","modifiers","hasImportantModifier","baseClassName","maybePostfixModifierPosition","isExternal","createParseClassName","prefix","experimentalParseClassName","parseClassName","bracketDepth","parenDepth","modifierStart","postfixModifierPosition","index","currentCharacter","baseClassNameWithImportantModifier","fullPrefix","parseClassNameOriginal","createSortModifiers","modifierWeights","mod","currentSegment","modifier","isArbitrary","isOrderSensitive","createConfigUtils","createPostfixLookupClassGroupIds","lookup","classGroupIds","SPLIT_CLASSES_REGEX","mergeClassList","classList","configUtils","getClassGroupId","getConflictingClassGroupIds","sortModifiers","postfixLookupClassGroupIds","classGroupsInConflict","classNames","originalClassName","baseClassNameWithoutPostfix","classGroupIdWithPostfix","variantModifier","modifierId","classId","conflictGroups","twJoin","classLists","argument","resolvedValue","string","toValue","mix","k","createTailwindMerge","createConfigFirst","createConfigRest","cacheGet","cacheSet","functionToCall","initTailwindMerge","previousConfig","createConfigCurrent","tailwindMerge","cachedResult","args","fallbackThemeArr","fromTheme","themeGetter","arbitraryValueRegex","arbitraryVariableRegex","fractionRegex","tshirtUnitRegex","lengthUnitRegex","colorFunctionRegex","shadowRegex","imageRegex","isFraction","isNumber","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","shouldMatchNoLabel","label","getDefaultConfig","themeColor","themeFont","themeText","themeFontWeight","themeTracking","themeLeading","themeBreakpoint","themeContainer","themeSpacing","themeRadius","themeShadow","themeInsetShadow","themeTextShadow","themeDropShadow","themeBlur","themePerspective","themeAspect","themeEase","themeAnimate","scaleBreak","scalePosition","scalePositionWithArbitrary","scaleOverflow","scaleOverscroll","scaleUnambiguousSpacing","scaleInset","scaleGridTemplateColsRows","scaleGridColRowStartAndEnd","scaleGridColRowStartOrEnd","scaleGridAutoColsRows","scaleAlignPrimaryAxis","scaleAlignSecondaryAxis","scaleMargin","scaleSizing","scaleSizingInline","scaleSizingBlock","scaleColor","scaleBgPosition","scaleBgRepeat","scaleBgSize","scaleGradientStopPosition","scaleRadius","scaleBorderWidth","scaleLineStyle","scaleBlendMode","scaleMaskImagePosition","scaleBlur","scaleRotate","scaleScale","scaleSkew","scaleTranslate","mergeConfigs","baseConfig","extend","override","overrideProperty","overrideConfigProperties","mergeConfigProperties","mergeArrayProperties","baseObject","overrideKey","overrideValue","overrideObject","mergeObject","mergeValue","extendTailwindMerge","configExtension","createConfig","twMerge","cn","inputs","wrapPromise","promise","error","getCookie","name","match","setCookie","hours","expires","deleteCookie","Logo","props","bgColor","fgColor","src","rest","imageError","setImageError","useState","previousSrc","setPreviousSrc","showFallback","jsx","jsxs","Card","forwardRef","ref","CardHeader","CardTitle","CardDescription","CardContent","CardFooter","ThemeContext","createContext","ThemeProvider","mode","useTheme","context","useContext","mergeClasses","classes","array","toKebabCase","toCamelCase","p1","p2","toPascalCase","camelCase","defaultAttributes","hasA11yProp","prop","Icon","color","size","strokeWidth","absoluteStrokeWidth","children","iconNode","createElement","tag","attrs","createLucideIcon","iconName","Component","__iconNode","ArrowUp","ChevronDown","CircleAlert","CircleCheckBig","CircleX","Copy","Info","MessageCircle","RefreshCcw","Star","ThumbsDown","ThumbsUp","TriangleAlert","X","__defProp","__name","target","setRef","composeRefs","refs","node","hasCleanup","cleanups","cleanup","useComposedRefs","React","createSlot","ownerName","Slot2","forwardedRef","slotProps","slottableElement","hasSlottable","newChildren","isLazyComponent","use","maybeSlottable","isSlottable","slottable","child","getSlottableElementFromSlottable","slottableElementRef","getElementRef","composedRef","createSlottableError","createSlotError","mergedProps","mergeProps","SLOTTABLE_IDENTIFIER","createSlottable","Slottable2","child2","childProps","overrideProps","propName","slotPropValue","childPropValue","element","getter","mayWarn","REACT_LAZY_TYPE","isPromiseLike","NODES","Primitive","primitive","Slot","Node","asChild","primitiveProps","Comp","dispatchDiscreteCustomEvent","event","ReactDOM","useLayoutEffect2","useStateMachine","initialState","machine","state","Presence","present","presence","usePresence","React2","useStableComposedRefs","setNode","stylesRef","prevPresentRef","prevAnimationNameRef","mountAnimationNameRef","send","getAnimationName","useLayoutEffect","styles","wasPresent","prevAnimationName","currentAnimationName","timeoutId","ownerWindow","handleAnimationEnd","isCurrentAnimation","currentFillMode","handleAnimationStart","node2","refsRef","currentRefs","createContext2","rootComponentName","defaultContext","Context","Provider","useContext2","consumerName","options","optional","createContextScope","scopeName","createContextScopeDeps","defaultContexts","createContext3","BaseContext","scope","createScope","scopeContexts","contexts","composeContextScopes","scopes","baseScope","scopeHooks","createScope2","overrideScopes","nextScopes","nextScopes2","useScope","currentScope","useCallbackRef","callback","callbackRef","DirectionContext","useDirection","localDir","globalDir","clamp","min","max","canUseDOM","composeEventHandlers","originalEventHandler","ourEventHandler","checkForDefaultPrevented","getOwnerWindow","getOwnerDocument","getActiveElement","activeDescendant","activeElement","isFrame","id","SCROLL_AREA_NAME","createScrollAreaContext","createScrollAreaScope","ScrollAreaProvider","useScrollAreaContext","ScrollArea","__scopeScrollArea","type","dir","scrollHideDelay","scrollAreaProps","scrollArea","setScrollArea","viewport","setViewport","setContent","scrollbarX","setScrollbarX","scrollbarY","setScrollbarY","cornerWidth","setCornerWidth","cornerHeight","setCornerHeight","scrollbarXEnabled","setScrollbarXEnabled","scrollbarYEnabled","setScrollbarYEnabled","composedRefs","direction","VIEWPORT_NAME","ScrollAreaViewport","nonce","viewportProps","Fragment","ScrollAreaViewportStyle","prevProps","nextProps","SCROLLBAR_NAME","ScrollAreaScrollbar","forceMount","scrollbarProps","onScrollbarXEnabledChange","onScrollbarYEnabledChange","isHorizontal","ScrollAreaScrollbarHover","ScrollAreaScrollbarScroll","ScrollAreaScrollbarAuto","ScrollAreaScrollbarVisible","visible","setVisible","hideTimer","handlePointerEnter","handlePointerLeave","debounceScrollEnd","useDebounceCallback","scrollDirection","prevScrollPos","handleScroll","scrollPos","handleResize","isOverflowX","isOverflowY","useResizeObserver","orientation","thumbRef","pointerOffsetRef","sizes","setSizes","thumbRatio","getThumbRatio","commonProps","thumb","pointerPos","getScrollPosition","getScrollPositionFromPointer","ScrollAreaScrollbarX","offset","getThumbOffsetFromScroll","ScrollAreaScrollbarY","onSizesChange","computedStyle","setComputedStyle","ScrollAreaScrollbarImpl","getThumbSize","maxScrollPos","isScrollingWithinScrollbarBounds","toInt","ScrollbarProvider","useScrollbarContext","hasThumb","onThumbChange","onThumbPointerUp","onThumbPointerDown","onThumbPositionChange","onDragScroll","onWheelScroll","onResize","scrollbar","setScrollbar","rectRef","prevWebkitUserSelectRef","handleWheelScroll","handleThumbPositionChange","handleDragScroll","x","y","handleWheel","THUMB_NAME","ScrollAreaThumb","thumbProps","scrollbarContext","ScrollAreaThumbImpl","style","scrollAreaContext","removeUnlinkedScrollListenerRef","listener","addUnlinkedScrollListener","thumbRect","CORNER_NAME","ScrollAreaCorner","hasBothScrollbarsVisible","ScrollAreaCornerImpl","cornerProps","width","setWidth","height","setHeight","hasSize","onCornerWidthChange","onCornerHeightChange","height2","width2","viewportSize","contentSize","ratio","scrollbarPadding","thumbSize","pointerOffset","thumbSizePx","thumbCenter","thumbOffsetFromEnd","minPointerPos","maxPointerPos","scrollRange","linearScale","maxThumbPos","scrollClampRange","scrollWithoutMomentum","input","output","handler","prevPosition","rAF","loop","position","isHorizontalScroll","isVerticalScroll","delay","handleCallback","debounceTimerRef","resizeObserver","Root","Viewport","Corner","onViewportScroll","ScrollAreaPrimitive.Root","ScrollAreaPrimitive.Viewport","ScrollBar","ScrollAreaPrimitive.Corner","ScrollAreaPrimitive.ScrollAreaScrollbar","ScrollAreaPrimitive.ScrollAreaThumb","HEX_PATTERN","RGB_PATTERN","parseColorChannels","trimmed","hexMatch","hex","character","rgbMatch","channels","channel","getRelativeLuminance","red","green","blue","toLinear","normalized","BLACK_PREFERENCE_THRESHOLD","getContrastingTextColor","backgroundColor","luminance","contrastWithWhite","useReactId","count","useId","deterministicId","setId","reactId","useReactEffectEvent","useReactInsertionEffect","useEffectEvent","useInsertionEffect","useControllableState","defaultProp","onChange","caller","uncontrolledProp","setUncontrolledProp","onChangeRef","useUncontrolledState","isControlled","setValue","nextValue","value2","isFunction","prevValueRef","SYNC_STATE","useControllableStateReducer","reducer","userArgs","initialArg","init","controlledState","onChangeProp","internalState","dispatch","state2","action","uncontrolledState","CONTEXT_UPDATE","POINTER_DOWN_OUTSIDE","FOCUS_OUTSIDE","originalBodyPointerEvents","DismissableLayerContext","DismissableLayer","disableOutsidePointerEvents","deferPointerDownOutside","onEscapeKeyDown","onPointerDownOutside","onFocusOutside","onInteractOutside","onDismiss","layerProps","ownerDocument","force","layers","highestLayerWithOutsidePointerEventsDisabled","highestLayerWithOutsidePointerEventsDisabledIndex","isBodyPointerEventsDisabled","isPointerEventsEnabled","isDeferredPointerDownOutsideRef","pointerDownOutside","usePointerDownOutside","isPointerDownOnBranch","branch","focusOutside","useFocusOutside","isHighestLayer","handleKeyDown","dispatchUpdate","handleUpdate","useDismissableLayerSurface","IS_TRUE","dismissableSurfaces","shouldHandlePointerDownOutside","handlePointerDownOutside","isPointerInsideReactTreeRef","isPointerDownOutsideRef","interceptedOutsideInteractionEventsRef","handleClickRef","resetOutsideInteraction","isOutsideInteractionIntercepted","handleInteractionCapture","surface","handleInteractionBubble","handlePointerDown","handleAndDispatchPointerDownOutsideEvent2","wasOutsideInteractionIntercepted","handleAndDispatchCustomEvent","eventDetail","outsideInteractionEvents","eventName","timerId","handleFocusOutside","isFocusInsideReactTreeRef","handleFocus","detail","discrete","AUTOFOCUS_ON_MOUNT","AUTOFOCUS_ON_UNMOUNT","EVENT_OPTIONS","FocusScope","trapped","onMountAutoFocusProp","onUnmountAutoFocusProp","scopeProps","container","setContainer","onMountAutoFocus","onUnmountAutoFocus","lastFocusedElementRef","focusScope","handleFocusIn2","focus","handleFocusOut2","relatedTarget","handleMutations2","mutations","mutation","mutationObserver","focusScopesStack","previouslyFocusedElement","mountEvent","focusFirst","removeLinks","getTabbableCandidates","unmountEvent","isTabKey","focusedElement","container2","first","last","getTabbableEdges","candidates","select","candidate","findVisible","nodes","walker","isHiddenInput","elements","canUseCheckVisibility","isHidden","upTo","isSelectableInput","createFocusScopesStack","stack","activeFocusScope","arrayRemove","item","updatedArray","items","Portal","containerProp","portalProps","mounted","setMounted","guards","FocusGuards","useFocusGuards","createFocusGuard","start","end","__assign","s","p","__rest","e","t","__spreadArray","to","from","pack","l","ar","zeroRightClassName","fullWidthClassName","noScrollbarsClassName","removedBarSizeVariable","assignRef","initialValue","useIsomorphicLayoutEffect","currentValues","useMergeRefs","defaultValue","newValue","oldValue","prevRefs_1","nextRefs_1","current_1","ItoI","a","innerCreateMedium","defaults","middleware","buffer","assigned","medium","data","cb","cbs","pendingQueue","executeQueue","cycle","filter","createSidecarMedium","SideCar","_a","sideCar","Target","exportSidecar","exported","effectCar","nothing","RemoveScroll","parentRef","callbacks","setCallbacks","forwardProps","removeScrollBar","enabled","shards","noRelative","noIsolation","inert","allowPinchZoom","_b","Container","gapMode","containerRef","containerProps","getNonce","makeStyleTag","injectStyles","css","insertStyleTag","head","stylesheetSingleton","counter","stylesheet","styleHookSingleton","sheet","isDynamic","styleSingleton","useStyle","Sheet","dynamic","zeroGap","parse","getOffset","cs","left","top","right","getGapWidth","offsets","documentWidth","windowWidth","Style","lockAttribute","getStyles","allowRelative","important","gap","getCurrentUseCounter","useLockAttribute","newCounter","RemoveScrollBar","noImportant","passiveSupported","nonPassive","alwaysContainsScroll","elementCanBeScrolled","overflow","elementCouldBeVScrolled","elementCouldBeHScrolled","locationCouldBeScrolled","axis","isScrollable","elementCouldBeScrolled","getScrollVariables","scrollHeight","clientHeight","getVScrollVariables","scrollTop","getHScrollVariables","scrollLeft","scrollWidth","clientWidth","getDirectionFactor","endTarget","sourceDelta","noOverscroll","directionFactor","delta","targetInLock","shouldCancelScroll","isDeltaPositive","availableScroll","availableScrollTop","scroll_1","capacity","elementScroll","parent_1","getTouchXY","getDeltaXY","extractRef","deltaCompare","generateStyle","idCounter","lockStack","RemoveScrollSideCar","shouldPreventQueue","touchStartRef","activeAxis","lastProps","allow_1","el","shouldCancelEvent","parent","touch","touchStart","deltaX","deltaY","currentAxis","moveDirection","selection","anchorNode","isTouchingSelection","canBeScrolledInMainDirection","cancelingAxis","shouldPrevent","_event","sourceEvent","shardNodes","shouldStop","shouldCancel","should","getOutermostShadowParent","scrollTouchStart","scrollWheel","scrollTouchMove","inst","shadowParent","ReactRemoveScroll","getDefaultParent","originalTarget","sampleTarget","counterMap","uncontrolledNodes","markerMap","lockCount","unwrapHost","correctTargets","targets","correctedTarget","applyAttributeToOthers","parentNode","markerName","controlAttribute","markerCounter","hiddenNodes","elementsToKeep","elementsToStop","keep","deep","attr","alreadyHidden","counterValue","markerValue","hideOthers","activeParentNode","DIALOG_NAME","createDialogContext","createDialogScope","DialogProvider","useDialogContext","Dialog","__scopeDialog","openProp","defaultOpen","onOpenChange","modal","triggerRef","contentRef","open","setOpen","titleCount","setTitleCount","descriptionCount","setDescriptionCount","prevOpen","PORTAL_NAME","PortalProvider","usePortalContext","DialogPortal","PortalPrimitive","OVERLAY_NAME","DialogOverlay","portalContext","overlayProps","DialogOverlayImpl","registerDismissableSurface","getState","CONTENT_NAME","DialogContent","contentProps","DialogContentModal","DialogContentNonModal","DialogContentImpl","originalEvent","ctrlLeftClick","hasInteractedOutsideRef","hasPointerDownOutsideRef","trapFocus","onOpenAutoFocus","onCloseAutoFocus","TITLE_NAME","DialogTitle","titleProps","DESCRIPTION_NAME","DialogDescription","descriptionProps","CLOSE_NAME","DialogClose","closeProps","DialogPrimitive.Root","DialogPrimitive.Portal","DialogPrimitive.Overlay","DialogPrimitive.Content","DialogPrimitive.Close","DialogPrimitive.Title","DialogPrimitive.Description","ChatContext","ChatInterfaceProvider","useChatInterfaceContext","headerRowClassName","headerTitleGroupClassName","subtitleTextClassName","cardContainerClassName","isOpen","isMobile","skipAnimation","CHARACTER_INTERVAL_MILLISECONDS","prefersReducedMotion","useTypedText","text","isEnabled","visibleCharacterCount","setVisibleCharacterCount","isInstant","useRef","useEffect","intervalId","stringify","values","settings","nameRe","nameReJsx","emptyOptions","re","whitespace","thing","empty","Schema","normal","space","merge","definitions","definition","normalize","attribute","powers","boolean","increment","booleanish","overloadedBoolean","number","spaceSeparated","commaSeparated","commaOrSpaceSeparated","checks","types","DefinedInfo","mask","mark","check","create","properties","normals","info","aria","_","caseSensitiveTransform","attributes","caseInsensitiveTransform","html","svg","xlink","xmlns","xml","hastToReact","cap","dash","valid","find","schema","Type","camelcase","dashes","kebab","$0","htmlBase","svgBase","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","lineno","column","updatePosition","str","lines","Position","msg","err","m","comments","rules","c","comment","pos","declaration","val","ret","trim","declarations","decls","decl","cjs","__importDefault","this","StyleToObject","inline_style_parser_1","require$$0","iterator","styleObject","hasIterator","utilities","CUSTOM_PROPERTY_REGEX","HYPHEN_REGEX","NO_HYPHEN_REGEX","VENDOR_PREFIX_REGEX","MS_VENDOR_PREFIX_REGEX","skipCamelCase","capitalize","trimHyphen","style_to_object_1","utilities_1","require$$1","StyleToJS","pointEnd","point","pointStart","stringifyPosition","VFileMessage","causeOrReason","optionsOrParentOrPlace","origin","reason","legacyCause","own","emptyMap","tableElements","tableCellElement","docs","toJsxRuntime","tree","filePath","developmentCreate","productionCreate","one","mdxExpression","mdxJsxElement","mdxEsm","root","parentSchema","findComponentFromName","createElementProps","createChildren","addNode","addChildren","expression","assert","crashEstree","createJsxElementProps","fn","jsxDEV","isStaticChildren","alignValue","createProperty","objectExpression","countsByName","commas","spaces","parseStyle","transformStylesToCssCasing","styleToJs","cause","message","allowExpression","identifiers","isIdentifierName","place","domCasing","cssCasing","transformStyleToCssCasing","toDash","urlAttributes","toString","includeImageAlt","includeHtml","all","characterEntities","decodeNamedCharacterReference","splice","list","remove","chunkStart","parameters","push","hasOwnProperty","combineExtensions","extensions","syntaxExtension","extension","hook","code","constructs","existing","before","decodeNumericCharacterReference","base","normalizeIdentifier","asciiAlpha","regexCheck","asciiAlphanumeric","asciiAtext","asciiControl","asciiDigit","asciiHexDigit","asciiPunctuation","markdownLineEnding","markdownLineEndingOrSpace","markdownSpace","unicodePunctuation","unicodeWhitespace","regex","normalizeUri","skip","replace","factorySpace","effects","ok","limit","initializeContent","contentStart","afterContentStartConstruct","paragraphInitial","previous","lineStart","token","document","initializeDocument","containerConstruct","tokenizeContainer","self","continued","childFlow","childToken","lineStartOffset","documentContinue","checkNewContainers","closeFlow","indexBeforeExits","indexBeforeFlow","exitContainers","documentContinued","flowStart","thereIsANewContainer","thereIsNoNewContainer","containerContinue","flowContinue","writeToChild","endOfFile","stream","seen","entry","nok","classifyCharacter","resolveAll","events","called","resolve","attention","resolveAllAttention","tokenizeAttention","openingSequence","closingSequence","nextEvents","movePoint","attentionMarkers","marker","inside","after","close","autolink","tokenizeAutolink","schemeOrEmailAtext","emailAtext","schemeInsideOrEmailAtext","urlInside","emailAtSignOrDot","emailLabel","emailValue","blankLine","tokenizeBlankLine","blockQuote","tokenizeBlockQuoteContinuation","exit","tokenizeBlockQuoteStart","contStart","contBefore","characterEscape","tokenizeCharacterEscape","characterReference","tokenizeCharacterReference","test","numeric","nonLazyContinuation","tokenizeNonLazyContinuation","codeFenced","tokenizeCodeFenced","closeStart","tokenizeCloseStart","initialPrefix","sizeOpen","beforeSequenceOpen","tail","sequenceOpen","infoBefore","atNonLazyBreak","metaBefore","meta","contentBefore","beforeContentChunk","contentChunk","startBefore","beforeSequenceClose","sequenceClose","sequenceCloseAfter","codeIndented","tokenizeCodeIndented","furtherStart","tokenizeFurtherStart","afterPrefix","atBreak","codeText","resolveCodeText","tokenizeCodeText","tailExitIndex","headEnterIndex","enter","between","SpliceBuffer","initial","stop","deleteCount","removed","chunkedPush","subtokenize","eventsArray","jumps","lineIndex","otherIndex","otherEvent","subevents","more","subcontent","eventIndex","startPosition","startPositions","tokenizer","childEvents","gaps","adjust","breaks","slice","resolveContent","tokenizeContent","continuationConstruct","tokenizeContinuation","chunkInside","contentEnd","contentContinue","startLookahead","prefixed","factoryDestination","literalType","literalMarkerType","rawType","stringType","balance","enclosedBefore","raw","enclosed","enclosedEscape","rawEscape","factoryLabel","markerType","labelInside","labelEscape","factoryTitle","begin","escape","factoryWhitespace","tokenizeDefinition","titleBefore","tokenizeTitleBefore","identifier","labelAfter","markerAfter","destinationBefore","destinationAfter","afterWhitespace","beforeMarker","titleAfter","titleAfterOptionalWhitespace","hardBreakEscape","tokenizeHardBreakEscape","headingAtx","resolveHeadingAtx","tokenizeHeadingAtx","sequenceFurther","htmlBlockNames","htmlRawNames","htmlFlow","resolveToHtmlFlow","tokenizeHtmlFlow","blankLineBefore","tokenizeBlankLineBefore","nonLazyContinuationStart","tokenizeNonLazyContinuationStart","closingTag","markerB","declarationOpen","tagCloseStart","continuationDeclarationInside","tagName","commentOpenInside","cdataOpenInside","continuation","slash","basicSelfClosing","completeClosingTagAfter","completeAttributeNameBefore","completeEnd","completeAttributeName","completeAttributeNameAfter","completeAttributeValueBefore","completeAttributeValueQuoted","completeAttributeValueUnquoted","completeAttributeValueQuotedAfter","completeAfter","continuationCommentInside","continuationRawTagOpen","continuationClose","continuationCdataInside","continuationAfter","continuationStart","continuationStartNonLazy","continuationBefore","continuationRawEndTag","htmlText","tokenizeHtmlText","returnState","instruction","tagOpen","commentEnd","commentClose","lineEndingBefore","cdata","cdataClose","cdataEnd","instructionClose","tagClose","tagCloseBetween","tagOpenBetween","tagOpenAttributeName","tagOpenAttributeNameAfter","tagOpenAttributeValueBefore","tagOpenAttributeValueQuoted","tagOpenAttributeValueUnquoted","tagOpenAttributeValueQuotedAfter","lineEndingAfter","lineEndingAfterPrefix","labelEnd","resolveAllLabelEnd","resolveToLabelEnd","tokenizeLabelEnd","resourceConstruct","tokenizeResource","referenceFullConstruct","tokenizeReferenceFull","referenceCollapsedConstruct","tokenizeReferenceCollapsed","newEvents","media","labelStart","defined","labelEndNok","labelEndOk","referenceNotFull","resourceStart","resourceBefore","resourceOpen","resourceEnd","resourceDestinationAfter","resourceDestinationMissing","resourceBetween","resourceTitleAfter","referenceFull","referenceFullAfter","referenceFullMissing","referenceCollapsedStart","referenceCollapsedOpen","labelStartImage","tokenizeLabelStartImage","labelStartLink","tokenizeLabelStartLink","lineEnding","tokenizeLineEnding","thematicBreak","tokenizeThematicBreak","sequence","tokenizeListContinuation","tokenizeListEnd","tokenizeListStart","listItemPrefixWhitespaceConstruct","tokenizeListItemPrefixWhitespace","indentConstruct","tokenizeIndent","initialSize","kind","atMarker","onBlank","endOfPrefix","otherPrefix","notBlank","notInCurrentItem","setextUnderline","resolveToSetextUnderline","tokenizeSetextUnderline","heading","paragraph","flow","initializeFlow","atBlankEnding","afterConstruct","resolver","createResolver","initializeFactory","field","resolveAllLineSuffixes","initializeText","notText","extraResolver","resolveAllText","chunks","bufferIndex","tabs","chunk","contentInitial","flowInitial","insideSpan","resolveText","disable","createTokenizer","parser","initialize","columnStart","resolveAllConstructs","constructFactory","onsuccessfulconstruct","onsuccessfulcheck","consume","defineSkip","now","sliceSerialize","sliceStream","write","main","addResult","expandTabs","serializeChunks","sliceChunks","_bufferIndex","_index","line","accountForPotentialSkip","chunkIndex","go","fields","construct","onreturn","bogusState","listOfConstructs","constructIndex","currentConstruct","handleListOfConstructs","handleMapOfConstructs","map","handleConstruct","store","startPoint","startPrevious","startCurrentConstruct","startEventsIndex","startStack","restore","startBufferIndex","endIndex","endBufferIndex","view","atTab","defaultConstructs","creator","postprocess","search","preprocess","atCarriageReturn","preprocessor","encoding","endPosition","characterEscapeOrReference","decodeString","decode","$1","$2","fromMarkdown","compiler","opener","link","onenterdata","codeFlow","emphasis","hardBreak","image","listItem","onenterlistitemvalue","onenterlistordered","onenterreference","strong","closer","onexitatxheadingsequence","onexitautolinkemail","onexitautolinkprotocol","onexitdata","onexitcharacterreferencemarker","onexitcharacterreferencevalue","onexitcharacterreference","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","compile","resume","listStack","prepareList","defaultOnError","length","containerBalance","listSpread","firstBlankLineIndex","tailIndex","tailEvent","and","errorHandler","onExitError","ancestor","depth","siblings","referenceType","fragment","d","combined","remarkParse","doc","blockquote","language","strikethrough","footnoteReference","clobberPrefix","safeId","reuseCounter","sup","revert","subtype","suffix","contents","imageReference","inlineCode","linkReference","results","loose","listLoose","listItemLoose","spread","table","rows","firstRow","tableContent","body","tableRow","align","cellIndex","cells","cell","tableCell","tab","trimLines","source","trimLine","handlers","ignore","VOID","PRIMITIVE","ARRAY","OBJECT","DATE","REGEXP","MAP","SET","ERROR","BIGINT","env","guard","deserializer","$","as","out","unpair","arr","object","flags","set","deserialize","serialized","EMPTY","keys","typeOf","asString","shouldSkip","TYPE","serializer","strict","json","pair","serialize","lossy","structuredClone$1","any","defaultFootnoteBackContent","rereferenceIndex","defaultFootnoteBackLabel","referenceIndex","footer","footnoteBackContent","footnoteBackLabel","footnoteLabel","footnoteLabelTagName","footnoteLabelProperties","listItems","backReferences","counts","tailTail","structuredClone","convert","castFactory","anyFactory","propertiesFactory","typeFactory","tests","checkAsRecord","nodeAsRecord","testFunction","looksLikeANode","CONTINUE","EXIT","SKIP","visitParents","visitor","reverse","is","step","factory","parents","visit","subresult","grandparents","toResult","nodeAsParent","testOrVisitor","visitorOrReverse","maybeReverse","overload","createState","definitionById","footnoteById","footnoteCounts","defaultHandlers","applyData","patch","wrap","handle","shallow","defaultUnknownHandler","trimMarkdownSpaceStart","hName","hChildren","hProperties","toHast","foot","remarkRehype","destination","file","hastTree","bail","hasOwn","toStr","defineProperty","gOPD","isArray","isPlainObject","obj","hasOwnConstructor","hasIsPrototypeOf","setProperty","getProperty","copy","copyIsArray","clone","prototype","trough","fns","pipeline","run","middlewareIndex","middelware","wrapped","fnExpectsCallback","done","exception","then","minpath","basename","dirname","extname","join","assertPath","seenNonSlash","firstNonSlashEnd","extnameIndex","unmatchedSlash","startPart","startDot","preDotState","segments","joined","absolute","normalizeString","allowAboveRoot","lastSegmentLength","lastSlash","dots","lastSlashIndex","minproc","cwd","isUrl","fileUrlOrPath","urlToPath","getPathFromURLPosix","url","pathname","third","order","VFile","isUint8Array","assertNonEmpty","assertPart","stem","CallableInstance","proto","apply","Processor","attacher","assertUnfrozen","transformer","realFile","vfile","assertParser","assertCompiler","executor","reject","parseTree","realDone","compileTree","compileResult","looksLikeAValue","complete","assertDone","assertNode","transformers","outputTree","resultingTree","attachers","namespace","addPlugin","addList","addPreset","add","plugin","plugins","entryIndex","primary","currentPrimary","isPlainObj","unified","frozen","asyncName","looksLikeAVFile","changelog","emptyPlugins","emptyRemarkRehypeOptions","safeProtocol","deprecations","Markdown","processor","createProcessor","createFile","post","rehypePlugins","remarkPlugins","remarkRehypeOptions","allowedElements","allowElement","components","disallowedElements","skipHtml","unwrapDisallowed","urlTransform","defaultUrlTransform","deprecation","transform","colon","questionMark","numberSign","defaultSchema","sanitize","unsafe","doctype","properties_","safeElement","ancestors","childrenUnknown","required","specific","safe","propertyValue","findDefinition","propertyValueMany","propertyValuePrimitive","allowed","protocols","protocol","cleanPosition","dataDefault","rehypeSanitize","escapeStringRegexp","findAndReplace","ignored","pairs","toPairs","pairIndex","grandparent","change","matchObject","tupleOrList","tuple","toExpression","toFunction","newlineToBreak","remarkBreaks","ccount","inConstruct","notInConstruct","gfmAutolinkLiteralFromMarkdown","transformGfmAutolinkLiterals","enterLiteralAutolink","enterLiteralAutolinkValue","exitLiteralAutolink","exitLiteralAutolinkEmail","exitLiteralAutolinkHttp","exitLiteralAutolinkWww","gfmAutolinkLiteralToMarkdown","findUrl","findEmail","domain","isCorrectDomain","splitUrl","atext","trailExec","trail","closingParenIndex","openingParens","closingParens","email","footnoteReferencePeek","enterFootnoteCallString","enterFootnoteCall","enterFootnoteDefinitionLabelString","enterFootnoteDefinition","exitFootnoteCallString","exitFootnoteCall","exitFootnoteDefinitionLabelString","exitFootnoteDefinition","tracker","subexit","gfmFootnoteFromMarkdown","gfmFootnoteToMarkdown","firstLineBlank","footnoteDefinition","mapAll","mapExceptFirst","blank","constructsWithoutStrikethrough","handleDelete","peekDelete","gfmStrikethroughFromMarkdown","enterStrikethrough","exitStrikethrough","gfmStrikethroughToMarkdown","defaultStringLength","markdownTable","stringLength","alignments","cellMatrix","sizeMatrix","longestCellByColumn","mostCellsPerRow","rowIndex","row","columnIndex","toAlignment","patternInScope","pattern","listInScope","none","_1","longestStreak","substring","expected","formatCodeAsIndented","checkFence","checkQuote","quote","checkEmphasis","encodeCharacterReference","encodeInfo","outside","outsideKind","insideKind","emphasisPeek","betweenHead","betweenTail","formatHeadingAsSetext","literalWithBreak","rank","htmlPeek","imagePeek","imageReferencePeek","alt","reference","inlineCodePeek","formatLinkAsAutolink","linkPeek","linkReferencePeek","checkBullet","checkBulletOther","bullet","bulletOther","checkBulletOrdered","checkRule","bulletCurrent","useDifferentMarker","firstListItem","checkListItemIndent","listItemIndent","phrasing","checkStrong","strongPeek","checkRuleRepetition","repetition","gfmTableFromMarkdown","enterTable","enterCell","enterRow","exitCodeText","exitTable","gfmTableToMarkdown","padding","alignDelimiters","around","inlineCodeWithTable","handleTable","handleTableCell","handleTableRow","serializeData","handleTableAsData","handleTableRowAsData","matrix","gfmTaskListItemFromMarkdown","exitCheck","exitParagraphWithTaskListItem","gfmTaskListItemToMarkdown","listItemWithTaskListItem","firstParaghraph","sibling","checkable","checkbox","gfmFromMarkdown","gfmToMarkdown","wwwPrefix","tokenizeWwwPrefix","tokenizeDomain","tokenizePath","tokenizeTrail","emailDomainDotTrail","tokenizeEmailDomainDotTrail","wwwAutolink","tokenizeWwwAutolink","previousWww","protocolAutolink","tokenizeProtocolAutolink","previousProtocol","emailAutolink","tokenizeEmailAutolink","previousEmail","gfmAutolinkLiteral","dot","gfmAtext","previousUnbalanced","emailDomain","emailDomainAfter","emailDomainDot","wwwStart","wwwAfter","protocolStart","protocolPrefixInside","protocolSlashesInside","afterProtocol","protocolAfter","wwwPrefixInside","wwwPrefixAfter","underscoreInLastSegment","underscoreInLastLastSegment","domainInside","domainAfter","domainAtPunctuation","sizeClose","pathInside","pathAtPunctuation","trailCharacterReferenceStart","trailBracketAfter","trailCharacterReferenceInside","indent","gfmFootnote","tokenizeDefinitionStart","tokenizeDefinitionContinuation","gfmFootnoteDefinitionEnd","tokenizeGfmFootnoteCall","tokenizePotentialGfmFootnoteCall","resolveToPotentialGfmFootnoteCall","call","replacement","callStart","callData","callEscape","labelAtMarker","whitespaceAfter","gfmStrikethrough","single","tokenizeStrikethrough","resolveAllStrikethrough","EditMap","addImplementation","b","vecs","editMap","at","gfmTableAlign","inDelimiterRow","alignIndex","gfmTable","tokenizeTable","resolveTable","sizeB","bodyRowStart","headRowBefore","headRowStart","headRowBreak","headDelimiterStart","headRowData","headRowEscape","headDelimiterBefore","headDelimiterValueBefore","headDelimiterCellBefore","headDelimiterNok","headDelimiterLeftAlignmentAfter","headDelimiterCellAfter","headDelimiterFiller","headDelimiterRightAlignmentAfter","bodyRowBreak","bodyRowData","bodyRowEscape","inFirstCellAwaitingPipe","rowKind","lastCell","afterHeadAwaitingFirstBodyRow","lastTableEnd","currentTable","currentBody","currentCell","flushTableEnd","flushCell","range","rowEnd","previousCell","groupName","valueName","getPoint","relatedStart","relatedEnd","valueToken","tableBody","exits","related","side","tasklistCheck","tokenizeTasklistCheck","gfmTaskListItem","spaceThenNonSpace","gfm","remarkGfm","micromarkExtensions","fromMarkdownExtensions","toMarkdownExtensions","MarkdownViewer","normalizedText","ReactMarkdown","href","actionButtonClassName","thinkingDotClassName","MessageActionButtons","messageData","selectedThumb","setSelectedThumb","copied","setCopied","collectUserFeedback","hasCopyButton","animatedIds","PLACEHOLDER_THINKING_DELAY_MILLISECONDS","HIDDEN_COGNITION_LABELS","THINKING_ELLIPSIS_PATTERN","MessageBubbleItem","isBot","isSibling","isImageOpen","setIsImageOpen","onMessageClick","textColor","isEllipsis","hasPlaceholderDelayElapsed","setHasPlaceholderDelayElapsed","isHiddenCognitionLabel","isThinkingBubble","hasCognitionLabel","typedCognitionLabel","renderBubble","AlertCircle","MessageBubble","nextMessage","assistantLogo","useMemo","isNew","isThinking","shouldAnimate","isSameSender","assistantName","renderSenderHeader","showLabel","logoClassName","timestamp","renderMessageBox","StarRating","disabled","hovered","setHovered","displayValue","star","RatingMessageBubble","onRate","selectedRating","setSelectedRating","submitted","setSubmitted","rating","AgentCognitionContext","defaultAgentCognition","useAgentCognitionContext","ChatInterfaceContent","cognition","scrollAreaRef","isFirstRender","prevMessageCountRef","showChevron","setShowChevron","isUserScrolling","setIsUserScrolling","isAtBottom","scrollToBottom","useCallback","behavior","scrollableDiv","currentCount","wasReset","observer","messagesToDisplay","areSuggestionsVisible","_arrayLikeToArray","_arrayWithHoles","_iterableToArrayLimit","u","o","_nonIterableRest","_slicedToArray","_unsupportedIterableToArray","setPrototypeOf","isFrozen","getPrototypeOf","getOwnPropertyDescriptor","freeze","seal","_ref","thisArg","_len","_key","Func","_len2","_key2","arrayForEach","unapply","arrayLastIndexOf","arrayPop","arrayPush","arraySplice","arrayIsArray","stringToLowerCase","stringToString","stringMatch","stringReplace","stringIndexOf","stringTrim","numberToString","booleanToString","bigintToString","symbolToString","objectHasOwnProperty","objectToString","regExpTest","typeErrorCreate","unconstruct","_len3","_key3","_len4","_key4","addToSet","transformCaseFunc","lcElement","cleanArray","newObject","_ref2","_ref3","stringifyValue","valueAsRecord","valueToString","lookupGetter","stringified","desc","fallbackValue","isRegex","html$1","svg$1","svgFilters","svgDisallowed","mathMl$1","mathMlDisallowed","mathMl","MUSTACHE_EXPR","ERB_EXPR","TMPLIT_EXPR","DATA_ATTR","ARIA_ATTR","IS_ALLOWED_URI","IS_SCRIPT_OR_DATA","ATTR_WHITESPACE","DOCTYPE_NAME","CUSTOM_ELEMENT","ELEMENT_MARKUP_PROBE","COMMENT_MARKUP_PROBE","FALLBACK_TAG_CLOSE","SELF_CLOSING_TAG","NODE_TYPE","LITERAL_TEXT_ELEMENT_NAMES","LITERAL_TEXT_ELEMENTS","LITERAL_TEXT_CLOSE","getGlobal","_createTrustedTypesPolicy","trustedTypes","purifyHostElement","ATTR_NAME","policyName","scriptUrl","_createHooksMap","_resolveSetOption","cfg","fallback","_resolveObjectOption","makeFallback","createDOMPurify","window","DOMPurify","originalDocument","currentScript","HTMLTemplateElement","Element","NodeFilter","_window$NamedNodeMap","DOMParser","ElementPrototype","cloneNode","getNextSibling","getChildNodes","getParentNode","getShadowRoot","getAttributes","getNodeType","getNodeName","_readNodeType","_readNodeName","template","trustedTypesPolicy","emptyHTML","defaultTrustedTypesPolicy","defaultTrustedTypesPolicyResolved","IN_TRUSTED_TYPES_POLICY","_assertNotInTrustedTypesPolicy","_createTrustedHTML","_createTrustedScriptURL","_getDefaultTrustedTypesPolicy","_document","implementation","createNodeIterator","createDocumentFragment","getElementsByTagName","importNode","hooks","MUSTACHE_EXPR$1","ERB_EXPR$1","TMPLIT_EXPR$1","DATA_ATTR$1","ARIA_ATTR$1","IS_SCRIPT_OR_DATA$1","ATTR_WHITESPACE$1","CUSTOM_ELEMENT$1","IS_ALLOWED_URI$1","ALLOWED_TAGS","DEFAULT_ALLOWED_TAGS","ALLOWED_ATTR","DEFAULT_ALLOWED_ATTR","CUSTOM_ELEMENT_HANDLING","FORBID_TAGS","FORBID_ATTR","EXTRA_ELEMENT_HANDLING","ALLOW_ARIA_ATTR","ALLOW_DATA_ATTR","ALLOW_UNKNOWN_PROTOCOLS","ALLOW_SELF_CLOSE_IN_ATTR","SAFE_FOR_TEMPLATES","SAFE_FOR_XML","WHOLE_DOCUMENT","SET_CONFIG","SET_CONFIG_ALLOWED_TAGS","SET_CONFIG_ALLOWED_ATTR","FORCE_BODY","RETURN_DOM","RETURN_DOM_FRAGMENT","RETURN_TRUSTED_TYPE","SANITIZE_DOM","SANITIZE_NAMED_PROPS","SANITIZE_NAMED_PROPS_PREFIX","KEEP_CONTENT","IN_PLACE","USE_PROFILES","FORBID_CONTENTS","DEFAULT_FORBID_CONTENTS","DATA_URI_TAGS","DEFAULT_DATA_URI_TAGS","URI_SAFE_ATTRIBUTES","DEFAULT_URI_SAFE_ATTRIBUTES","MATHML_NAMESPACE","SVG_NAMESPACE","HTML_NAMESPACE","NAMESPACE","IS_EMPTY_INPUT","ALLOWED_NAMESPACES","DEFAULT_ALLOWED_NAMESPACES","DEFAULT_MATHML_TEXT_INTEGRATION_POINTS","MATHML_TEXT_INTEGRATION_POINTS","DEFAULT_HTML_INTEGRATION_POINTS","HTML_INTEGRATION_POINTS","COMMON_SVG_AND_HTML_ELEMENTS","PARSER_MEDIA_TYPE","SUPPORTED_PARSER_MEDIA_TYPES","DEFAULT_PARSER_MEDIA_TYPE","CONFIG","formElement","isRegexOrFunction","_parseConfig","customElementHandling","previousTrustedTypesPolicy","ALL_SVG_TAGS","ALL_MATHML_TAGS","_checkSvgNamespace","parentTagName","_checkMathMlNamespace","_checkHtmlNamespace","_checkValidNamespace","_forceRemove","_stripAttributeNode","_neutralizeRoot","_neutralizeSubtree","childNodes","snapshot","_removeAttribute","_stripDisallowedAttributes","_isPatchLinkageAttribute","lcName","lcTag","_neutralizePatchLinkage","nodeType","_initDocument","dirty","leadingWhitespace","matches","dirtyPayload","_createNodeIterator","_stripTemplateExpressions","_scrubTemplateExpressions2","_node$querySelectorAl","currentNode","templates","tmpl","_isDocumentFragment","_isClobbered","realTagName","_isNode","_executeHooks","_isUnsafeNode","_matchesNameCheck","_sanitizeDisallowedNode","_isBasicCustomElement","childCount","hoisted","_forkSharedAllowlist","hookList","defaultSet","setConfigSet","_handleHookDetachedNode","_sanitizeElements","_isValidAttribute","nameIsPermitted","RESERVED_CUSTOM_ELEMENT_NAMES","_applyTrustedTypesToAttribute","namespaceURI","_setAttributeValue","_sanitizeAttributes","hookEvent","attrValue","initValue","_sanitizeShadowDOM2","shadowNode","shadowIterator","innerSr","_sanitizeAttachedShadowRoots","isElement","rootName","sr","importedNode","returnNode","inPlace","nn","walkRoot","nodeIterator","serializedHTML","entryPoint","hookFunction","purify","Textarea","parseHexChannels","rgbToHsl","normalizedRed","normalizedGreen","normalizedBlue","maximum","minimum","lightness","saturation","hue","clamp01","toHslString","getAuraColors","baseColor","soft","useDragScroll","isMouseDown","startX","walk","SHINE_SWEEP_DURATION_MILLISECONDS","SHINE_MINIMUM_PAUSE_MILLISECONDS","SHINE_MAXIMUM_PAUSE_MILLISECONDS","useRandomShine","isShining","setIsShining","hasUnmounted","scheduleNextFlash","pause","useHasHorizontalOverflow","hasOverflow","setHasOverflow","observerRef","isOverflowing","SuggestedMessages","onSelect","dragScroll","scrollContainerRef","hasUserMessages","suggestedMessages","isVisible","hasAura","hasShine","auraColors","pillStyle","renderPill","ERROR_MESSAGES","getErrorMessage","ErrorContext","useErrorContext","createPublishApiError","setError","configs","AlertTriangle","XCircle","CheckCircle","Banner","composerSurfaceClassName","chatClosedPanelClassName","startNewChatButtonClassName","brandingStripClassName","sendButtonDisabledClassName","useCanRenderSanitizedHtml","isHydrated","setIsHydrated","ChatInterfaceFooter","inErrorState","inputRef","messageInput","setMessageInput","isAfterRating","keyboardInset","canRenderSanitizedHtml","userBubbleTextColor","getButtonStyle","handleSuggestedMessageSelect","handleSubmit","textarea","newHeight","form","AVATAR_NAME","createAvatarContext","createAvatarScope","STATIC_IMAGE_COUNT_STATE","AvatarProvider","useAvatarContext","Avatar","__scopeAvatar","avatarProps","imageLoadingStatus","setImageLoadingStatus","imageCount","setImageCount","useImageCount","IMAGE_NAME","AvatarImage","onLoadingStatusChange","imageProps","useImageLoadingStatus","handleLoadingStatusChange","status","loadingStatusRef","previousLoadingStatus","FALLBACK_NAME","AvatarFallback","delayMs","fallbackProps","canRender","setCanRender","loadingStatus","setLoadingStatus","referrerPolicy","crossOrigin","handleLoad","image2","getImageLoadingStatus","handleError","useUpdateImageCount","AvatarPrimitive.Root","AvatarPrimitive.Image","AvatarPrimitive.Fallback","headerSurfaceClassName","headerIconButtonClassName","ChatInterfaceHeader","onCleanChat","onClose","hasCleanChatButton","hasCloseButton","ChatInterface","hasIntroAnimation","isTestMode","cardClassName","renderCard","Skeleton","useDebounce","delayMilliseconds","debouncedValue","setDebouncedValue","timeoutHandle","SkeletonChatInterface","isOpenDebounced"],"mappings":"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","x_google_ignoreList":[0,1,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,276,286]}
|