@smartspace/chat-ui 1.13.1-dev.23960f3
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/LICENSE +21 -0
- package/dist/index.css +3 -0
- package/dist/index.css.map +1 -0
- package/dist/index.d.ts +1329 -0
- package/dist/index.js +20592 -0
- package/dist/index.js.map +1 -0
- package/dist/test/index.d.ts +2 -0
- package/dist/test/index.js +3 -0
- package/dist/test/index.js.map +1 -0
- package/package.json +77 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/platform/chat/ChatProvider.tsx","../src/domains/files/queryKeys.ts","../src/domains/files/mutations.ts","../../../node_modules/.pnpm/@milkdown+exception@7.20.0/node_modules/@milkdown/exception/src/code.ts","../../../node_modules/.pnpm/@milkdown+exception@7.20.0/node_modules/@milkdown/exception/src/error.ts","../../../node_modules/.pnpm/@milkdown+exception@7.20.0/node_modules/@milkdown/exception/src/index.ts","../../../node_modules/.pnpm/@milkdown+utils@7.20.0/node_modules/@milkdown/utils/src/composable/$node.ts","../../../node_modules/.pnpm/@milkdown+utils@7.20.0/node_modules/@milkdown/utils/src/composable/$prose.ts","../../../node_modules/.pnpm/@milkdown+utils@7.20.0/node_modules/@milkdown/utils/src/composable/$view.ts","../src/shared/markdown/extensions/autolink.ts","../src/shared/markdown/extensions/fileTag.ts","../src/shared/markdown/htmlPreviewShared.ts","../src/shared/markdown/extensions/htmlPreview.ts","../src/shared/markdown/extensions/mention.ts","../src/shared/markdown/extensions/ssImage.ts","../src/shared/markdown/MarkdownEditor.tsx","../src/shared/utils/utils.ts","../src/shared/mui-compat/button.tsx","../src/shared/utils/threadId.ts","../src/domains/flowruns/queryKeys.ts","../src/domains/flowruns/mutations.ts","../src/domains/flowruns/queries.ts","../src/chat-variables/renders/boolean-renderer.tsx","../src/chat-variables/renders/dropdown-renderer.tsx","../src/chat-variables/renders/grid-horizontal-layout-renderer.tsx","../src/chat-variables/renders/json-editor-renderer.tsx","../src/domains/models/model-icon.ts","../src/domains/models/queryKeys.ts","../src/domains/models/queries.ts","../src/chat-variables/renders/model-id-renderer.tsx","../src/chat-variables/renders/number-renderer.tsx","../src/chat-variables/renders/textarea-renderer.tsx","../src/chat-variables/renders/index.ts","../src/chat-variables/VariablesForm.vm.ts","../src/chat-variables/VariablesForm.tsx","../src/domains/threads/queryKeys.ts","../src/domains/threads/cache.ts","../src/shared/utils/dateFromApi.ts","../src/domains/threads/mapper.ts","../src/domains/threads/queries.ts","../src/shared/utils/randomUUID.ts","../src/domains/messages/enums.ts","../src/domains/messages/queryKeys.ts","../src/domains/messages/mutations.ts","../src/domains/workspaces/queryKeys.ts","../src/domains/workspaces/queries.ts","../src/shared/hooks/useIsMobile.ts","../src/messages/MessageComposer.vm.ts","../src/messages/MessageComposer.tsx","../src/domains/messages/queries.ts","../../../node_modules/.pnpm/@ungap+structured-clone@1.3.0/node_modules/@ungap/structured-clone/esm/types.js","../../../node_modules/.pnpm/@ungap+structured-clone@1.3.0/node_modules/@ungap/structured-clone/esm/deserialize.js","../../../node_modules/.pnpm/@ungap+structured-clone@1.3.0/node_modules/@ungap/structured-clone/esm/serialize.js","../../../node_modules/.pnpm/@ungap+structured-clone@1.3.0/node_modules/@ungap/structured-clone/esm/index.js","../../../node_modules/.pnpm/devlop@1.1.0/node_modules/devlop/lib/default.js","../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/util/schema.js","../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/util/merge.js","../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/normalize.js","../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/util/info.js","../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/util/types.js","../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/util/defined-info.js","../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/util/create.js","../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/aria.js","../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/util/case-sensitive-transform.js","../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/util/case-insensitive-transform.js","../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/html.js","../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/svg.js","../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/xlink.js","../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/xmlns.js","../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/xml.js","../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/find.js","../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/index.js","../../../node_modules/.pnpm/comma-separated-tokens@2.0.3/node_modules/comma-separated-tokens/index.js","../../../node_modules/.pnpm/hast-util-parse-selector@4.0.0/node_modules/hast-util-parse-selector/lib/index.js","../../../node_modules/.pnpm/space-separated-tokens@2.0.2/node_modules/space-separated-tokens/index.js","../../../node_modules/.pnpm/hastscript@9.0.1/node_modules/hastscript/lib/create-h.js","../../../node_modules/.pnpm/hastscript@9.0.1/node_modules/hastscript/lib/svg-case-sensitive-tag-names.js","../../../node_modules/.pnpm/hastscript@9.0.1/node_modules/hastscript/lib/index.js","../../../node_modules/.pnpm/vfile-location@5.0.3/node_modules/vfile-location/lib/index.js","../../../node_modules/.pnpm/web-namespaces@2.0.1/node_modules/web-namespaces/index.js","../../../node_modules/.pnpm/hast-util-from-parse5@8.0.3/node_modules/hast-util-from-parse5/lib/index.js","../../../node_modules/.pnpm/zwitch@2.0.4/node_modules/zwitch/index.js","../../../node_modules/.pnpm/hast-util-to-parse5@8.0.1/node_modules/hast-util-to-parse5/lib/index.js","../../../node_modules/.pnpm/html-void-elements@3.0.0/node_modules/html-void-elements/index.js","../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/unicode.js","../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/error-codes.js","../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/tokenizer/preprocessor.js","../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/token.js","../../../node_modules/.pnpm/entities@6.0.1/node_modules/entities/src/generated/decode-data-html.ts","../../../node_modules/.pnpm/entities@6.0.1/node_modules/entities/src/decode-codepoint.ts","../../../node_modules/.pnpm/entities@6.0.1/node_modules/entities/src/decode.ts","../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/html.js","../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/tokenizer/index.js","../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/open-element-stack.js","../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/formatting-element-list.js","../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/tree-adapters/default.js","../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/doctype.js","../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/foreign-content.js","../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/index.js","../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/serializer/index.js","../../../node_modules/.pnpm/unist-util-position@5.0.0/node_modules/unist-util-position/lib/index.js","../../../node_modules/.pnpm/unist-util-is@6.0.1/node_modules/unist-util-is/lib/index.js","../../../node_modules/.pnpm/unist-util-visit-parents@6.0.2/node_modules/unist-util-visit-parents/lib/color.node.js","../../../node_modules/.pnpm/unist-util-visit-parents@6.0.2/node_modules/unist-util-visit-parents/lib/index.js","../../../node_modules/.pnpm/unist-util-visit@5.1.0/node_modules/unist-util-visit/lib/index.js","../../../node_modules/.pnpm/hast-util-raw@9.1.0/node_modules/hast-util-raw/lib/index.js","../../../node_modules/.pnpm/rehype-raw@7.0.0/node_modules/rehype-raw/lib/index.js","../../../node_modules/.pnpm/hast-util-sanitize@5.0.2/node_modules/hast-util-sanitize/lib/schema.js","../../../node_modules/.pnpm/hast-util-sanitize@5.0.2/node_modules/hast-util-sanitize/lib/index.js","../../../node_modules/.pnpm/rehype-sanitize@6.0.0/node_modules/rehype-sanitize/lib/index.js","../../../node_modules/.pnpm/ccount@2.0.1/node_modules/ccount/index.js","../../../node_modules/.pnpm/micromark-util-character@2.1.1/node_modules/micromark-util-character/index.js","../../../node_modules/.pnpm/escape-string-regexp@5.0.0/node_modules/escape-string-regexp/index.js","../../../node_modules/.pnpm/mdast-util-find-and-replace@3.0.2/node_modules/mdast-util-find-and-replace/lib/index.js","../../../node_modules/.pnpm/mdast-util-gfm-autolink-literal@2.0.1/node_modules/mdast-util-gfm-autolink-literal/lib/index.js","../../../node_modules/.pnpm/micromark-util-normalize-identifier@2.0.1/node_modules/micromark-util-normalize-identifier/index.js","../../../node_modules/.pnpm/mdast-util-gfm-footnote@2.1.0/node_modules/mdast-util-gfm-footnote/lib/index.js","../../../node_modules/.pnpm/mdast-util-gfm-strikethrough@2.0.0/node_modules/mdast-util-gfm-strikethrough/lib/index.js","../../../node_modules/.pnpm/markdown-table@3.0.4/node_modules/markdown-table/index.js","../../../node_modules/.pnpm/mdast-util-to-markdown@2.1.2/node_modules/mdast-util-to-markdown/lib/handle/blockquote.js","../../../node_modules/.pnpm/mdast-util-to-markdown@2.1.2/node_modules/mdast-util-to-markdown/lib/util/pattern-in-scope.js","../../../node_modules/.pnpm/mdast-util-to-markdown@2.1.2/node_modules/mdast-util-to-markdown/lib/handle/break.js","../../../node_modules/.pnpm/longest-streak@3.1.0/node_modules/longest-streak/index.js","../../../node_modules/.pnpm/mdast-util-to-markdown@2.1.2/node_modules/mdast-util-to-markdown/lib/util/format-code-as-indented.js","../../../node_modules/.pnpm/mdast-util-to-markdown@2.1.2/node_modules/mdast-util-to-markdown/lib/util/check-fence.js","../../../node_modules/.pnpm/mdast-util-to-markdown@2.1.2/node_modules/mdast-util-to-markdown/lib/handle/code.js","../../../node_modules/.pnpm/mdast-util-to-markdown@2.1.2/node_modules/mdast-util-to-markdown/lib/util/check-quote.js","../../../node_modules/.pnpm/mdast-util-to-markdown@2.1.2/node_modules/mdast-util-to-markdown/lib/handle/definition.js","../../../node_modules/.pnpm/mdast-util-to-markdown@2.1.2/node_modules/mdast-util-to-markdown/lib/util/check-emphasis.js","../../../node_modules/.pnpm/mdast-util-to-markdown@2.1.2/node_modules/mdast-util-to-markdown/lib/util/encode-character-reference.js","../../../node_modules/.pnpm/micromark-util-classify-character@2.0.1/node_modules/micromark-util-classify-character/index.js","../../../node_modules/.pnpm/mdast-util-to-markdown@2.1.2/node_modules/mdast-util-to-markdown/lib/util/encode-info.js","../../../node_modules/.pnpm/mdast-util-to-markdown@2.1.2/node_modules/mdast-util-to-markdown/lib/handle/emphasis.js","../../../node_modules/.pnpm/mdast-util-to-string@4.0.0/node_modules/mdast-util-to-string/lib/index.js","../../../node_modules/.pnpm/mdast-util-to-markdown@2.1.2/node_modules/mdast-util-to-markdown/lib/util/format-heading-as-setext.js","../../../node_modules/.pnpm/mdast-util-to-markdown@2.1.2/node_modules/mdast-util-to-markdown/lib/handle/heading.js","../../../node_modules/.pnpm/mdast-util-to-markdown@2.1.2/node_modules/mdast-util-to-markdown/lib/handle/html.js","../../../node_modules/.pnpm/mdast-util-to-markdown@2.1.2/node_modules/mdast-util-to-markdown/lib/handle/image.js","../../../node_modules/.pnpm/mdast-util-to-markdown@2.1.2/node_modules/mdast-util-to-markdown/lib/handle/image-reference.js","../../../node_modules/.pnpm/mdast-util-to-markdown@2.1.2/node_modules/mdast-util-to-markdown/lib/handle/inline-code.js","../../../node_modules/.pnpm/mdast-util-to-markdown@2.1.2/node_modules/mdast-util-to-markdown/lib/util/format-link-as-autolink.js","../../../node_modules/.pnpm/mdast-util-to-markdown@2.1.2/node_modules/mdast-util-to-markdown/lib/handle/link.js","../../../node_modules/.pnpm/mdast-util-to-markdown@2.1.2/node_modules/mdast-util-to-markdown/lib/handle/link-reference.js","../../../node_modules/.pnpm/mdast-util-to-markdown@2.1.2/node_modules/mdast-util-to-markdown/lib/util/check-bullet.js","../../../node_modules/.pnpm/mdast-util-to-markdown@2.1.2/node_modules/mdast-util-to-markdown/lib/util/check-bullet-other.js","../../../node_modules/.pnpm/mdast-util-to-markdown@2.1.2/node_modules/mdast-util-to-markdown/lib/util/check-bullet-ordered.js","../../../node_modules/.pnpm/mdast-util-to-markdown@2.1.2/node_modules/mdast-util-to-markdown/lib/util/check-rule.js","../../../node_modules/.pnpm/mdast-util-to-markdown@2.1.2/node_modules/mdast-util-to-markdown/lib/handle/list.js","../../../node_modules/.pnpm/mdast-util-to-markdown@2.1.2/node_modules/mdast-util-to-markdown/lib/util/check-list-item-indent.js","../../../node_modules/.pnpm/mdast-util-to-markdown@2.1.2/node_modules/mdast-util-to-markdown/lib/handle/list-item.js","../../../node_modules/.pnpm/mdast-util-to-markdown@2.1.2/node_modules/mdast-util-to-markdown/lib/handle/paragraph.js","../../../node_modules/.pnpm/mdast-util-phrasing@4.1.0/node_modules/mdast-util-phrasing/lib/index.js","../../../node_modules/.pnpm/mdast-util-to-markdown@2.1.2/node_modules/mdast-util-to-markdown/lib/handle/root.js","../../../node_modules/.pnpm/mdast-util-to-markdown@2.1.2/node_modules/mdast-util-to-markdown/lib/util/check-strong.js","../../../node_modules/.pnpm/mdast-util-to-markdown@2.1.2/node_modules/mdast-util-to-markdown/lib/handle/strong.js","../../../node_modules/.pnpm/mdast-util-to-markdown@2.1.2/node_modules/mdast-util-to-markdown/lib/handle/text.js","../../../node_modules/.pnpm/mdast-util-to-markdown@2.1.2/node_modules/mdast-util-to-markdown/lib/util/check-rule-repetition.js","../../../node_modules/.pnpm/mdast-util-to-markdown@2.1.2/node_modules/mdast-util-to-markdown/lib/handle/thematic-break.js","../../../node_modules/.pnpm/mdast-util-to-markdown@2.1.2/node_modules/mdast-util-to-markdown/lib/handle/index.js","../../../node_modules/.pnpm/mdast-util-gfm-table@2.0.0/node_modules/mdast-util-gfm-table/lib/index.js","../../../node_modules/.pnpm/mdast-util-gfm-task-list-item@2.0.0/node_modules/mdast-util-gfm-task-list-item/lib/index.js","../../../node_modules/.pnpm/mdast-util-gfm@3.1.0/node_modules/mdast-util-gfm/lib/index.js","../../../node_modules/.pnpm/micromark-util-chunked@2.0.1/node_modules/micromark-util-chunked/index.js","../../../node_modules/.pnpm/micromark-util-combine-extensions@2.0.1/node_modules/micromark-util-combine-extensions/index.js","../../../node_modules/.pnpm/micromark-extension-gfm-autolink-literal@2.1.0/node_modules/micromark-extension-gfm-autolink-literal/lib/syntax.js","../../../node_modules/.pnpm/micromark-util-resolve-all@2.0.1/node_modules/micromark-util-resolve-all/index.js","../../../node_modules/.pnpm/micromark-factory-space@2.0.1/node_modules/micromark-factory-space/index.js","../../../node_modules/.pnpm/micromark-core-commonmark@2.0.3/node_modules/micromark-core-commonmark/lib/blank-line.js","../../../node_modules/.pnpm/micromark-extension-gfm-footnote@2.1.0/node_modules/micromark-extension-gfm-footnote/lib/syntax.js","../../../node_modules/.pnpm/micromark-extension-gfm-strikethrough@2.1.0/node_modules/micromark-extension-gfm-strikethrough/lib/syntax.js","../../../node_modules/.pnpm/micromark-extension-gfm-table@2.1.1/node_modules/micromark-extension-gfm-table/lib/edit-map.js","../../../node_modules/.pnpm/micromark-extension-gfm-table@2.1.1/node_modules/micromark-extension-gfm-table/lib/infer.js","../../../node_modules/.pnpm/micromark-extension-gfm-table@2.1.1/node_modules/micromark-extension-gfm-table/lib/syntax.js","../../../node_modules/.pnpm/micromark-extension-gfm-task-list-item@2.1.0/node_modules/micromark-extension-gfm-task-list-item/lib/syntax.js","../../../node_modules/.pnpm/micromark-extension-gfm@3.0.0/node_modules/micromark-extension-gfm/index.js","../../../node_modules/.pnpm/remark-gfm@4.0.1/node_modules/remark-gfm/lib/index.js","../src/shared/markdown/plugins/remarkFileTag.ts","../src/shared/markdown/renderers/CodeBlock.tsx","../src/shared/markdown/renderers/HtmlPreview.tsx","../src/shared/markdown/renderers/SsImage.tsx","../src/shared/markdown/sanitizeSchema.ts","../src/shared/markdown/MessageMarkdown.tsx","../src/shared/mui-compat/skeleton.tsx","../src/theme/tag-styles.ts","../src/domains/messages/errors.ts","../src/theme/public-config.ts","../src/domains/files/utils.ts","../src/domains/json_forms/utils.ts","../src/shared/utils/initials.ts","../src/shared/utils/avatarColour.ts","../src/shared/mui-compat/avatar.tsx","../src/shared/utils/parseDateTime.ts","../src/shared/utils/userPhoto.ts","../src/messages/smartCopy.ts","../src/messages/MessageCopyButton.tsx","../src/messages/MessageFileDownload.tsx","../src/domains/files/queries.ts","../src/messages/MessageImage.tsx","../src/messages/MessageSources.tsx","../src/messages/MessageBubble.tsx","../src/messages/MessageStatus.tsx","../src/messages/MessageItem.tsx","../src/messages/MessageList.tsx","../src/messages/MessageList.skeleton.tsx","../src/domains/messages/mapper.ts","../src/domains/files/mapper.ts","../src/domains/workspaces/mapper.ts"],"names":["children","ErrorCode","code","node","raw","html","text","ok","next","h","editorViewCtx","useState","useMemo","list","root","lm","serializerCtx","parserCtx","handle","maxHeight","Slice","serializer","jsx","React2","useQueryClient","useMutation","toast","useQuery","path","useEffect","useCallback","jsxs","s","rankWith","withJsonFormsControlProps","renderers","cells","element","useRef","search","queryOptions","properties","keys","forwardRef","useImperativeHandle","Loader2","idx","nextData","patch","MessageValueType","createPortal","$","index","map","definition","svg","previous","parse","stringify","value","point","document","startTag","endTag","position","location","own","one","all","result","CODE_POINTS","ERR","TokenType","_a","CharCodes","BinTrieFlags","EntityDecoderState","DecodingMode","base","NS","ATTRS","DOCUMENT_MODE","TAG_NAMES","TAG_ID","State","isAsciiAlphaNumeric","EntryType","entry","InsertionMode","fragment","checks","is","visit","comment","doctype","stitch","aria","replace","find","domain","trail","exit","row","sizes","columnIndex","serialize","emptyOptions","toString","subexit","style","self","constructs","Fragment","normalize","getFileIcon","FileImage","FileVideo","FileAudio","FileArchive","FileCode","FileSpreadsheet","Presentation","FileText","color","React10","env","Check","X","image","Skeleton","JsonForms","Button","ChatZod"],"mappings":"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","file":"index.js","sourcesContent":["import React, { createContext, useContext, useMemo } from 'react';\n\nimport type { ChatService } from './ChatService';\n\nexport type ChatIdentity = {\n userId: string;\n displayName: string;\n};\n\nexport type ChatContextIds = {\n workspaceId: string;\n /** Empty string when no thread is currently selected (e.g. draft state). */\n threadId: string;\n};\n\ntype ChatProviderValue = {\n service: ChatService;\n ids: ChatContextIds;\n identity: ChatIdentity;\n};\n\nconst ChatCtx = createContext<ChatProviderValue | null>(null);\n\nexport type ChatProviderProps = {\n service: ChatService;\n workspaceId: string;\n threadId: string;\n identity: ChatIdentity;\n children: React.ReactNode;\n};\n\n/**\n * Single point of injection for the chat UI subtree. Provides:\n * - a `ChatService` implementation (backend port)\n * - the current `{ workspaceId, threadId }` context\n * - user identity used for optimistic message stamping\n *\n * All message UI components and message/file/thread/workspace hooks read\n * from this provider instead of reaching into platform auth or TanStack\n * Router directly — that is what makes the chat UI portable to a package.\n */\nexport function ChatProvider({\n service,\n workspaceId,\n threadId,\n identity,\n children,\n}: ChatProviderProps) {\n const value = useMemo<ChatProviderValue>(\n () => ({\n service,\n ids: { workspaceId, threadId },\n identity: { userId: identity.userId, displayName: identity.displayName },\n }),\n // Depend on primitives, not the identity object reference — callers\n // commonly pass a fresh object literal each render (see ChatProviderBridge),\n // which would otherwise bust the memo and re-render every consumer.\n // `service` is included as a ref but is expected to be a stable singleton\n // (the production app passes the module-level `defaultChatService`); a\n // caller that swaps services on every render would correctly re-trigger.\n [service, workspaceId, threadId, identity.userId, identity.displayName]\n );\n return <ChatCtx.Provider value={value}>{children}</ChatCtx.Provider>;\n}\n\nfunction useChatProviderValue(): ChatProviderValue {\n const ctx = useContext(ChatCtx);\n if (!ctx) {\n throw new Error(\n 'Chat hook used outside <ChatProvider>. Wrap your tree in <ChatProvider>.'\n );\n }\n return ctx;\n}\n\nexport function useChatService(): ChatService {\n return useChatProviderValue().service;\n}\n\nexport function useChatContext(): ChatContextIds {\n return useChatProviderValue().ids;\n}\n\nexport function useChatIdentity(): ChatIdentity {\n return useChatProviderValue().identity;\n}\n","export const filesKeys = {\n all: ['files'] as const,\n\n queries: () => [...filesKeys.all, 'query'] as const,\n downloadBlob: (fileId: string) =>\n [...filesKeys.queries(), 'downloadBlob', { fileId }] as const,\n\n mutations: () => [...filesKeys.all, 'mutation'] as const,\n mutation: {\n upload: (scope?: { workspaceId?: string; threadId?: string }) =>\n [...filesKeys.mutations(), 'upload', { scope }] as const,\n download: (fileId: string) =>\n [...filesKeys.mutations(), 'download', { fileId }] as const,\n downloadBlob: (fileId: string) =>\n [...filesKeys.mutations(), 'downloadBlob', { fileId }] as const,\n downloadByUri: (uri: string) =>\n [...filesKeys.mutations(), 'downloadByUri', { uri }] as const,\n },\n};\n","import { useMutation, useQueryClient } from '@tanstack/react-query';\nimport { useCallback, useState } from 'react';\nimport { toast } from 'sonner';\n\nimport { useChatService } from '@/platform/chat';\n\nimport { FileInfo, FileScope } from './model';\nimport { filesKeys } from './queryKeys';\n\n// All mutations and state for file management\nexport const useFileMutations = (scope: FileScope) => {\n const { workspaceId, threadId } = scope;\n const service = useChatService();\n const queryClient = useQueryClient();\n\n const [uploadedFiles, setUploadedFiles] = useState<FileInfo[]>([]);\n const [fileProgress, setFileProgress] = useState<Record<string, number>>({});\n\n const clearUploadState = useCallback(() => {\n setUploadedFiles([]);\n setFileProgress({});\n }, []);\n\n const uploadFilesMutation = useMutation({\n mutationKey: filesKeys.mutation.upload(scope),\n mutationFn: async (files: File[]): Promise<FileInfo[]> => {\n clearUploadState();\n\n const progressTracker: Record<string, number> = {};\n\n const uploaded = await service.uploadFiles(\n files,\n scope,\n (file, fileInfo) => {\n setUploadedFiles((prev) => [...prev, fileInfo]);\n\n progressTracker[file.name] = 100;\n setFileProgress((prev) => ({ ...prev, [file.name]: 100 }));\n },\n (chunkIndex, totalChunks, file) => {\n const percent = Math.round((chunkIndex / totalChunks) * 100);\n progressTracker[file.name] = percent;\n setFileProgress((prev) => ({ ...prev, [file.name]: percent }));\n }\n );\n\n return uploaded ?? [];\n },\n onError: () => {\n toast.error('There was an error uploading your files.');\n },\n });\n\n const downloadFileMutation = useMutation({\n mutationFn: async (fileInfo: FileInfo) => {\n const blob = await service.downloadFile(fileInfo.id, scope);\n saveFile(blob, fileInfo.name);\n },\n onError: () => toast.error('Failed to download file'),\n });\n\n const downloadFileByUriMutation = useMutation({\n mutationFn: async ({\n name,\n sourceUri,\n }: {\n name: string;\n sourceUri: string;\n }) => {\n const uri = await service.getFileDownloadUrl(sourceUri);\n if (!uri) throw new Error('No download URL');\n const response = await fetch(uri);\n const blob = await response.blob();\n saveFile(blob, name);\n return blob;\n },\n onError: () => toast.error('Failed to download file'),\n });\n\n const fileStates = (files: File[]) =>\n files.map((file) => ({\n name: file.name,\n progress: fileProgress[file.name] ?? 0,\n status: uploadedFiles.some((f) => f.name === file.name)\n ? ('done' as const)\n : ('uploading' as const),\n }));\n\n // Cache blob URLs by file id across thread switches / remounts. File bytes\n // are immutable per id, so the entry never goes stale and we keep it for\n // the session (gcTime: Infinity). The blob memory survives until the page\n // unloads, which is fine for a chat session.\n const getFileBlobUrl = useCallback(\n (id: string) =>\n queryClient.fetchQuery({\n queryKey: filesKeys.downloadBlob(id),\n queryFn: async () => {\n const blob = await service.downloadFile(id, {\n workspaceId,\n threadId,\n });\n return URL.createObjectURL(blob);\n },\n staleTime: Infinity,\n gcTime: Infinity,\n }),\n [queryClient, service, workspaceId, threadId]\n );\n\n return {\n uploadFilesMutation,\n downloadFileMutation,\n downloadFileByUriMutation,\n getFileBlobUrl,\n fileProgress,\n uploadedFiles,\n clearUploadState,\n fileStates,\n };\n};\n\n// Utility function to save a file to disk\nconst saveFile = (blob: Blob, fileName: string) => {\n const a = document.createElement('a');\n a.download = fileName;\n a.href = URL.createObjectURL(blob);\n a.addEventListener('click', () => {\n setTimeout(() => URL.revokeObjectURL(a.href), 30 * 1000);\n });\n a.click();\n};\n","export enum ErrorCode {\n docTypeError = 'docTypeError',\n contextNotFound = 'contextNotFound',\n timerNotFound = 'timerNotFound',\n ctxCallOutOfScope = 'ctxCallOutOfScope',\n createNodeInParserFail = 'createNodeInParserFail',\n stackOverFlow = 'stackOverFlow',\n parserMatchError = 'parserMatchError',\n serializerMatchError = 'serializerMatchError',\n getAtomFromSchemaFail = 'getAtomFromSchemaFail',\n expectDomTypeError = 'expectDomTypeError',\n callCommandBeforeEditorView = 'callCommandBeforeEditorView',\n missingRootElement = 'missingRootElement',\n missingNodeInSchema = 'missingNodeInSchema',\n missingMarkInSchema = 'missingMarkInSchema',\n\n // collab plugin\n ctxNotBind = 'ctxNotBind',\n missingYjsDoc = 'missingYjsDoc',\n}\n","import type { ErrorCode } from './code'\n\nexport class MilkdownError extends Error {\n public code: string\n constructor(code: ErrorCode, message: string) {\n super(message)\n this.name = 'MilkdownError'\n this.code = code\n }\n}\n","import { ErrorCode } from './code'\nimport { MilkdownError } from './error'\n\nconst functionReplacer = (_: string, value: unknown) =>\n typeof value === 'function' ? '[Function]' : value\n\nconst stringify = (x: unknown): string => JSON.stringify(x, functionReplacer)\n\nexport function docTypeError(type: unknown) {\n return new MilkdownError(\n ErrorCode.docTypeError,\n `Doc type error, unsupported type: ${stringify(type)}`\n )\n}\n\nexport function contextNotFound(name: string) {\n return new MilkdownError(\n ErrorCode.contextNotFound,\n `Context \"${name}\" not found, do you forget to inject it?`\n )\n}\n\nexport function timerNotFound(name: string) {\n return new MilkdownError(\n ErrorCode.timerNotFound,\n `Timer \"${name}\" not found, do you forget to record it?`\n )\n}\n\nexport function ctxCallOutOfScope() {\n return new MilkdownError(\n ErrorCode.ctxCallOutOfScope,\n 'Should not call a context out of the plugin.'\n )\n}\n\nexport function createNodeInParserFail(\n nodeType: object,\n attrs?: unknown,\n content?: unknown[]\n) {\n const nodeTypeName = 'name' in nodeType ? nodeType.name : nodeType\n const heading = `Cannot create node for ${nodeTypeName}`\n const serialize = (x: unknown): string => {\n if (x == null) return 'null'\n\n if (Array.isArray(x)) {\n return `[${x.map(serialize).join(', ')}]`\n }\n\n if (typeof x === 'object') {\n if ('toJSON' in x && typeof (x as any).toJSON === 'function') {\n return JSON.stringify((x as any).toJSON())\n }\n\n if ('spec' in x) {\n return JSON.stringify((x as any).spec)\n }\n\n return JSON.stringify(x)\n }\n\n if (\n typeof x === 'string' ||\n typeof x === 'number' ||\n typeof x === 'boolean'\n ) {\n return JSON.stringify(x)\n }\n\n if (typeof x === 'function') {\n return `[Function: ${(x as Function).name || 'anonymous'}]`\n }\n\n try {\n return String(x)\n } catch {\n return '[Unserializable]'\n }\n }\n\n const headingMessage = ['[Description]', heading] as const\n const attrsMessage = ['[Attributes]', attrs] as const\n const contentMessage = [\n '[Content]',\n (content ?? []).map((node) => {\n if (!node) return 'null'\n\n if (typeof node === 'object' && 'type' in node) {\n return `${node}`\n }\n\n return serialize(node)\n }),\n ] as const\n\n const messages = [headingMessage, attrsMessage, contentMessage].reduce(\n (acc, [title, value]) => {\n const message = `${title}: ${serialize(value)}.`\n return acc.concat(message)\n },\n [] as string[]\n )\n\n return new MilkdownError(\n ErrorCode.createNodeInParserFail,\n messages.join('\\n')\n )\n}\n\nexport function stackOverFlow() {\n return new MilkdownError(\n ErrorCode.stackOverFlow,\n 'Stack over flow, cannot pop on an empty stack.'\n )\n}\n\nexport function parserMatchError(node: unknown) {\n return new MilkdownError(\n ErrorCode.parserMatchError,\n `Cannot match target parser for node: ${stringify(node)}.`\n )\n}\n\nexport function serializerMatchError(node: unknown) {\n return new MilkdownError(\n ErrorCode.serializerMatchError,\n `Cannot match target serializer for node: ${stringify(node)}.`\n )\n}\n\nexport function getAtomFromSchemaFail(type: 'mark' | 'node', name: string) {\n return new MilkdownError(\n ErrorCode.getAtomFromSchemaFail,\n `Cannot get ${type}: ${name} from schema.`\n )\n}\n\nexport function expectDomTypeError(node: unknown) {\n return new MilkdownError(\n ErrorCode.expectDomTypeError,\n `Expect to be a dom, but get: ${stringify(node)}.`\n )\n}\n\nexport function callCommandBeforeEditorView() {\n return new MilkdownError(\n ErrorCode.callCommandBeforeEditorView,\n \"You're trying to call a command before editor view initialized, make sure to get commandManager from ctx after editor view has been initialized\"\n )\n}\n\nexport function missingRootElement() {\n return new MilkdownError(\n ErrorCode.missingRootElement,\n 'Missing root element, milkdown cannot find root element of the editor.'\n )\n}\n\nexport function missingNodeInSchema(name: string) {\n return new MilkdownError(\n ErrorCode.missingNodeInSchema,\n `Missing node in schema, milkdown cannot find \"${name}\" in schema.`\n )\n}\n\nexport function missingMarkInSchema(name: string) {\n return new MilkdownError(\n ErrorCode.missingMarkInSchema,\n `Missing mark in schema, milkdown cannot find \"${name}\" in schema.`\n )\n}\n\nexport function ctxNotBind() {\n return new MilkdownError(\n ErrorCode.ctxNotBind,\n 'Context not bind, please make sure the plugin has been initialized.'\n )\n}\n\nexport function missingYjsDoc() {\n return new MilkdownError(\n ErrorCode.missingYjsDoc,\n 'Missing yjs doc, please make sure you have bind one.'\n )\n}\n","import type { Ctx, MilkdownPlugin } from '@milkdown/ctx'\nimport type { NodeType } from '@milkdown/prose/model'\nimport type { NodeSchema } from '@milkdown/transformer'\n\nimport { nodesCtx, schemaCtx, schemaTimerCtx } from '@milkdown/core'\nimport { missingNodeInSchema } from '@milkdown/exception'\n\nimport { addTimer } from './utils'\n\n/// @internal\nexport type $Node = MilkdownPlugin & {\n id: string\n schema: NodeSchema\n type: (ctx: Ctx) => NodeType\n}\n\n/// Create a node plugin.\n/// It takes a node id and a factory function.\n/// The factory should return a function that returns a [node schema](/transformer#interface-nodeschema).\n///\n/// Additional property:\n/// - `id`: The id of the node.\n/// - `schema`: The node schema created.\n/// - `type`: A function that will return the [prosemirror node type](https://prosemirror.net/docs/ref/#model.NodeType).\nexport function $node(id: string, schema: (ctx: Ctx) => NodeSchema): $Node {\n const plugin: MilkdownPlugin = (ctx) => async () => {\n const nodeSchema = schema(ctx)\n ctx.update(nodesCtx, (ns) => [\n ...ns.filter((n) => n[0] !== id),\n [id, nodeSchema] as [string, NodeSchema],\n ])\n ;(<$Node>plugin).id = id\n ;(<$Node>plugin).schema = nodeSchema\n\n return () => {\n ctx.update(nodesCtx, (ns) => ns.filter(([x]) => x !== id))\n }\n }\n\n ;(<$Node>plugin).type = (ctx) => {\n const nodeType = ctx.get(schemaCtx).nodes[id]\n if (!nodeType) throw missingNodeInSchema(id)\n\n return nodeType\n }\n\n return <$Node>plugin\n}\n\n/// The async version for `$node`. You can use `await` in the factory when creating the node schema.\n///\n/// Additional property:\n/// - `id`: The id of the node.\n/// - `schema`: The node schema created.\n/// - `type`: A function that will return the [prosemirror node type](https://prosemirror.net/docs/ref/#model.NodeType).\n/// - `timer`: The timer which will be resolved when the node schema is ready.\nexport function $nodeAsync(\n id: string,\n schema: (ctx: Ctx) => Promise<NodeSchema>,\n timerName?: string\n) {\n const plugin = addTimer<$Node>(\n async (ctx, plugin, done) => {\n const nodeSchema = await schema(ctx)\n ctx.update(nodesCtx, (ns) => [\n ...ns.filter((n) => n[0] !== id),\n [id, nodeSchema] as [string, NodeSchema],\n ])\n\n plugin.id = id\n plugin.schema = nodeSchema\n done()\n\n return () => {\n ctx.update(nodesCtx, (ns) => ns.filter(([x]) => x !== id))\n }\n },\n schemaTimerCtx,\n timerName\n )\n\n plugin.type = (ctx) => {\n const nodeType = ctx.get(schemaCtx).nodes[id]\n if (!nodeType) throw missingNodeInSchema(id)\n\n return nodeType\n }\n\n return plugin\n}\n","import type { Ctx, MilkdownPlugin } from '@milkdown/ctx'\nimport type { Plugin, PluginKey } from '@milkdown/prose/state'\n\nimport {\n SchemaReady,\n editorStateTimerCtx,\n prosePluginsCtx,\n} from '@milkdown/core'\n\nimport { addTimer } from './utils'\n\n/// @internal\nexport type $Prose = MilkdownPlugin & {\n plugin: () => Plugin\n key: () => PluginKey | undefined\n}\n\n/// Create a milkdown wrapper for [prosemirror plugin](https://prosemirror.net/docs/ref/#state.Plugin).\n/// It takes a factory function which returns a [prosemirror plugin](https://prosemirror.net/docs/ref/#state.Plugin).\n///\n/// Additional property:\n/// - `plugin`: The prosemirror plugin created.\n/// - `key`: The [prosemirror plugin key](https://prosemirror.net/docs/ref/#state.PluginKey) of the plugin.\nexport function $prose(prose: (ctx: Ctx) => Plugin): $Prose {\n let prosePlugin: Plugin | undefined\n const plugin: MilkdownPlugin = (ctx) => async () => {\n await ctx.wait(SchemaReady)\n prosePlugin = prose(ctx)\n ctx.update(prosePluginsCtx, (ps) => [...ps, prosePlugin!])\n\n return () => {\n ctx.update(prosePluginsCtx, (ps) => ps.filter((x) => x !== prosePlugin))\n }\n }\n ;(<$Prose>plugin).plugin = () => prosePlugin!\n ;(<$Prose>plugin).key = () => prosePlugin!.spec.key\n\n return <$Prose>plugin\n}\n\n/// The async version for `$prose`. You can use `await` in the factory when creating the plugin.\n///\n/// Additional property:\n/// - `plugin`: The prosemirror plugin created.\n/// - `key`: The [prosemirror plugin key](https://prosemirror.net/docs/ref/#state.PluginKey) of the plugin.\n/// - `timer`: The timer which will be resolved when the plugin is ready.\nexport function $proseAsync(\n prose: (ctx: Ctx) => Promise<Plugin>,\n timerName?: string\n) {\n let prosePlugin: Plugin | undefined\n const plugin = addTimer<$Prose>(\n async (ctx) => {\n await ctx.wait(SchemaReady)\n prosePlugin = await prose(ctx)\n ctx.update(prosePluginsCtx, (ps) => [...ps, prosePlugin!])\n\n return () => {\n ctx.update(prosePluginsCtx, (ps) => ps.filter((x) => x !== prosePlugin))\n }\n },\n editorStateTimerCtx,\n timerName\n )\n\n plugin.plugin = () => prosePlugin!\n plugin.key = () => prosePlugin!.spec.key\n\n return plugin\n}\n","import type { Ctx, MilkdownPlugin } from '@milkdown/ctx'\nimport type {\n MarkViewConstructor,\n NodeViewConstructor,\n} from '@milkdown/prose/view'\n\nimport {\n SchemaReady,\n editorViewTimerCtx,\n markViewCtx,\n nodeViewCtx,\n} from '@milkdown/core'\nimport { NodeType } from '@milkdown/prose/model'\n\nimport type { $Mark, $Node } from '.'\n\nimport { addTimer } from './utils'\n\n/// @internal\nexport type $View<\n T extends $Node | $Mark,\n V extends NodeViewConstructor | MarkViewConstructor,\n> = MilkdownPlugin & {\n view: V\n type: T\n}\n\n/// @internal\nexport type GetConstructor<T extends $Node | $Mark> = T extends $Node\n ? NodeViewConstructor\n : T extends $Mark\n ? MarkViewConstructor\n : NodeViewConstructor | MarkViewConstructor\n\n/// Create a [prosemirror node/mark view](https://prosemirror.net/docs/ref/#view.NodeView) plugin.\n/// It takes two arguments\n/// - `type`: The node/mark plugin that needs to add a view.\n/// - `view`: The factory that creates the view. It should return a function that returns a [node/mark view constructor](https://prosemirror.net/docs/ref/#view.NodeView).\n///\n/// Additional property:\n/// - `view`: The view created.\n/// - `type`: The node/mark plugin that needs to add a view.\nexport function $view<\n T extends $Node | $Mark,\n V extends NodeViewConstructor | MarkViewConstructor = GetConstructor<T>,\n>(type: T, view: (ctx: Ctx) => V): $View<T, V> {\n const plugin: MilkdownPlugin = (ctx) => async () => {\n await ctx.wait(SchemaReady)\n const v = view(ctx)\n if (type.type(ctx) instanceof NodeType)\n ctx.update(nodeViewCtx, (ps) => [\n ...ps,\n [type.id, v] as [string, NodeViewConstructor],\n ])\n else\n ctx.update(markViewCtx, (ps) => [\n ...ps,\n [type.id, v] as [string, MarkViewConstructor],\n ])\n ;(<$View<T, V>>plugin).view = v\n ;(<$View<T, V>>plugin).type = type\n\n return () => {\n if (type.type(ctx) instanceof NodeType)\n ctx.update(nodeViewCtx, (ps) => ps.filter((x) => x[0] !== type.id))\n else ctx.update(markViewCtx, (ps) => ps.filter((x) => x[0] !== type.id))\n }\n }\n\n return <$View<T, V>>plugin\n}\n\n/// The async version for `$view`. You can use `await` in the factory when creating the view.\n///\n/// Additional property:\n/// - `view`: The view created.\n/// - `type`: The node/mark plugin that needs to add a view.\n/// - `timer`: The timer which will be resolved when the view is ready.\nexport function $viewAsync<\n T extends $Node | $Mark,\n V extends NodeViewConstructor | MarkViewConstructor = GetConstructor<T>,\n>(type: T, view: (ctx: Ctx) => Promise<V>, timerName?: string) {\n return addTimer<$View<T, V>>(\n async (ctx, plugin) => {\n await ctx.wait(SchemaReady)\n const v = await view(ctx)\n if (type.type(ctx) instanceof NodeType)\n ctx.update(nodeViewCtx, (ps) => [\n ...ps,\n [type.id, v] as [string, NodeViewConstructor],\n ])\n else\n ctx.update(markViewCtx, (ps) => [\n ...ps,\n [type.id, v] as [string, MarkViewConstructor],\n ])\n\n plugin.view = v\n plugin.type = type\n\n return () => {\n if (type.type(ctx) instanceof NodeType)\n ctx.update(nodeViewCtx, (ps) => ps.filter((x) => x[0] !== type.id))\n else ctx.update(markViewCtx, (ps) => ps.filter((x) => x[0] !== type.id))\n }\n },\n editorViewTimerCtx,\n timerName\n )\n}\n","import type { Node as PMNode } from '@milkdown/prose/model';\nimport { Plugin, PluginKey } from '@milkdown/prose/state';\nimport { Decoration, DecorationSet } from '@milkdown/prose/view';\nimport { $prose } from '@milkdown/utils';\n\nconst autolinkKey = new PluginKey('autolink');\n\n/**\n * Regex that matches bare URLs starting with http://, https://, or www.\n * Captures the full URL including path, query, and fragment.\n */\nconst URL_RE =\n /(?:https?:\\/\\/|www\\.)[^\\s<>[\\]()\"\"\"'']+[^\\s<>[\\]()\"\"\"''.,;:!?]/g;\n\nfunction buildDecorations(doc: PMNode): DecorationSet {\n const decorations: Decoration[] = [];\n\n doc.descendants((node, pos, parent) => {\n // Don't descend into code blocks — URLs inside source code must stay literal.\n if (node.type.name === 'code_block') return false;\n\n if (!node.isText || !node.text) return;\n\n // Skip nodes that are already inside a link mark, or marked as inline code.\n if (node.marks.some((m) => m.type.name === 'link')) return;\n if (\n node.marks.some(\n (m) => m.type.name === 'inlineCode' || m.type.name === 'code'\n )\n )\n return;\n\n // Defensive: skip text whose parent is a code-ish node (covers custom nodeViews).\n if (parent && (parent.type.spec.code || parent.type.name === 'code_block'))\n return;\n\n let match: RegExpExecArray | null;\n URL_RE.lastIndex = 0;\n while ((match = URL_RE.exec(node.text)) !== null) {\n const start = pos + match.index;\n const end = start + match[0].length;\n const url = match[0];\n const href = url.startsWith('http') ? url : `https://${url}`;\n\n decorations.push(\n Decoration.inline(start, end, {\n nodeName: 'a',\n href,\n target: '_blank',\n rel: 'noopener noreferrer',\n class: 'md-autolink',\n })\n );\n }\n });\n\n return DecorationSet.create(doc, decorations);\n}\n\nexport const autolink = $prose(() => {\n return new Plugin({\n key: autolinkKey,\n state: {\n init(_, state) {\n return buildDecorations(state.doc);\n },\n apply(tr, oldSet) {\n if (tr.docChanged) {\n return buildDecorations(tr.doc);\n }\n return oldSet.map(tr.mapping, tr.doc);\n },\n },\n props: {\n decorations(state) {\n return autolinkKey.getState(state) as DecorationSet | undefined;\n },\n },\n });\n});\n","import type { Node } from '@milkdown/prose/model';\nimport type { NodeParserSpec, NodeSerializerSpec } from '@milkdown/transformer';\nimport { $node } from '@milkdown/utils';\n\n// Lightweight inline \"file tag\" node, e.g. [[file:123|Spec.docx]]\n// - Renders as a styled <span>\n// - Selectable & copyable (partial selection safe)\n// - You can map it to your own UI or slash/toolbar action later\nexport const fileTag = $node('fileTag', () => ({\n group: 'inline',\n inline: true,\n atom: true, // treat as a single unit (still selectable)\n selectable: true,\n draggable: false,\n attrs: {\n id: { default: '' },\n label: { default: '' },\n },\n // Render to DOM (what the editor shows)\n toDOM: (node: Node) => {\n const { id, label } = node.attrs as { id: string; label: string };\n return [\n 'span',\n {\n 'data-file-tag': '',\n 'data-id': id,\n class: 'file-tag',\n contenteditable: 'false',\n spellcheck: 'false',\n },\n label || `file:${id}`,\n ];\n },\n // Parse from DOM (when pasting HTML or loading saved HTML)\n parseDOM: [\n {\n tag: 'span[data-file-tag]',\n getAttrs: (dom: HTMLElement) => {\n const el = dom as HTMLElement;\n return {\n id: el.getAttribute('data-id') ?? '',\n label: el.innerText ?? '',\n };\n },\n },\n ],\n // Markdown transformer hooks\n parseMarkdown: {\n match: (n) => n.type === 'fileTag',\n runner: (state, node, type) => {\n const raw = node as unknown as {\n value?: string;\n id?: string;\n label?: string;\n };\n let id = raw.id;\n let label = raw.label;\n if (!id && typeof raw.value === 'string') {\n const [maybeId, maybeLabel] = raw.value.split('|');\n id = maybeId;\n label = maybeLabel;\n }\n state.openNode(type, { id: id ?? '', label: label ?? '' });\n state.closeNode();\n },\n } as NodeParserSpec,\n toMarkdown: {\n match: (node) => node.type.name === 'fileTag',\n runner: (state, node) => {\n const { id, label } = node.attrs as { id: string; label: string };\n state.addNode('fileTag', undefined, `${id}|${label}`);\n },\n } as NodeSerializerSpec,\n}));\n","// Defensive upper bound — a runaway HTML preview (infinite loop resizing,\n// `scrollHeight = 1e9`) shouldn't blow out the page. 5000px is roughly 5\n// viewports on a laptop, so any legitimate chart/table still fits.\nexport const MAX_IFRAME_HEIGHT = 5000;\nexport const HEIGHT_MESSAGE = 'ss-html-preview-height';\nexport const ERROR_MESSAGE = 'ss-html-preview-error';\nexport const SNAPSHOT_REQUEST = 'ss-html-preview-snapshot';\nexport const SNAPSHOT_RESULT = 'ss-html-preview-snapshot-result';\n\n// Custom web clipboard format (Chromium 104+). External apps (Word, Outlook,\n// Google Docs) ignore unknown `web ` formats and fall back to `text/html` — so\n// they get the rasterized-image version. Written as a belt-and-braces channel\n// alongside the HTML marker below; note Chromium does NOT expose custom web\n// formats to the synchronous `paste` event's `getData`, so the HTML marker is\n// the mechanism the composer paste handler actually relies on.\nexport const SS_MARKDOWN_CLIPBOARD_TYPE = 'web text/markdown';\n\n// SmartSpace recovers the live markdown on paste by embedding it in the\n// `text/html` payload as a hidden comment. `text/html` IS reliably exposed to\n// the paste event (unlike custom web formats), and Word/Docs ignore comments —\n// so this round-trips charts back as live source in every browser, while\n// external apps still see only the rasterized image.\nconst MARKDOWN_MARKER_PREFIX = '<!--ss-md:';\nconst MARKDOWN_MARKER_SUFFIX = '-->';\nconst MARKDOWN_MARKER_RE = /<!--ss-md:([A-Za-z0-9+/=]+)-->/;\n\n/** Wrap markdown in the hidden HTML comment marker (UTF-8 → base64). */\nexport function encodeMarkdownMarker(markdown: string): string {\n try {\n const b64 = btoa(unescape(encodeURIComponent(markdown)));\n return `${MARKDOWN_MARKER_PREFIX}${b64}${MARKDOWN_MARKER_SUFFIX}`;\n } catch {\n return '';\n }\n}\n\n/** Pull SmartSpace markdown back out of a pasted `text/html` string, if present. */\nexport function extractMarkdownMarker(html: string): string | null {\n const match = html.match(MARKDOWN_MARKER_RE);\n if (!match) return null;\n try {\n return decodeURIComponent(escape(atob(match[1])));\n } catch {\n return null;\n }\n}\n\n// Injected into each previewed HTML document. Because the iframe uses\n// `sandbox=\"allow-scripts\"` (no `allow-same-origin`), the parent cannot read\n// `contentDocument` directly, so the iframe has to push its height out via\n// postMessage. ResizeObserver handles late content (charts, images, fonts).\n// The script is idempotent (dedupes repeated heights) so a chatty ResizeObserver\n// doesn't spam the parent.\nconst HEIGHT_REPORTER_SCRIPT = `\n<script>(function(){\n try {\n var s = document.createElement('style');\n s.textContent = 'html,body{margin:0;padding:0;}';\n (document.head || document.documentElement).appendChild(s);\n } catch (e) {}\n function reportError(msg){\n try {\n parent.postMessage({ type: ${JSON.stringify(\n ERROR_MESSAGE\n )}, message: String(msg || 'preview error') }, '*');\n } catch (e) {}\n }\n // Catch synchronous script errors and unhandled promise rejections so the\n // host can flip the preview back to source view instead of showing a blank\n // iframe (e.g. when an LLM emits a JS-only snippet referencing a missing\n // canvas).\n window.addEventListener('error', function(ev){\n reportError(ev && ev.message);\n });\n window.addEventListener('unhandledrejection', function(ev){\n reportError(ev && ev.reason && ev.reason.message);\n });\n // Snapshot responder. The parent can't read this sandboxed (no\n // allow-same-origin) document, so when it asks for a snapshot we rasterize\n // our own <canvas> elements via toDataURL and post just the PNG strings\n // back out — strings cross the sandbox boundary fine. Used by the message\n // \"smart copy\" so client-side charts (Chart.js etc.) paste into Word as\n // images instead of dead <canvas>/<script> source.\n window.addEventListener('message', function(ev){\n var d = ev && ev.data;\n if (!d || d.type !== ${JSON.stringify(SNAPSHOT_REQUEST)}) return;\n var images = [];\n try {\n var canvases = document.querySelectorAll('canvas');\n for (var i = 0; i < canvases.length; i++) {\n var c = canvases[i];\n // Skip zero-area canvases (off-screen / not yet drawn).\n if (!c.width || !c.height) continue;\n try {\n var rect = c.getBoundingClientRect();\n images.push({\n dataUrl: c.toDataURL('image/png'),\n width: c.width,\n height: c.height,\n // On-screen CSS size, independent of devicePixelRatio scaling, so\n // the pasted <img> renders at the chart's intended size rather than\n // 2x on a retina display. Falls back to the pixel size.\n cssWidth: Math.round(rect.width) || c.width,\n cssHeight: Math.round(rect.height) || c.height\n });\n } catch (e) {\n // Tainted canvas (cross-origin image drawn without CORS) — skip it;\n // the host falls back to inlining the static HTML source.\n }\n }\n } catch (e) {}\n try {\n parent.postMessage({\n type: ${JSON.stringify(SNAPSHOT_RESULT)},\n id: d.id,\n images: images\n }, '*');\n } catch (e) {}\n });\n var lastSent = -1;\n function send(){\n try {\n var body = document.body;\n if (!body) return;\n var h = Math.ceil(body.getBoundingClientRect().height);\n if (h === lastSent) return;\n lastSent = h;\n parent.postMessage({ type: ${JSON.stringify(\n HEIGHT_MESSAGE\n )}, height: h }, '*');\n } catch (e) {}\n }\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', send);\n } else {\n send();\n }\n window.addEventListener('load', send);\n try {\n if (typeof ResizeObserver !== 'undefined') {\n var ro = new ResizeObserver(send);\n if (document.body) ro.observe(document.body);\n }\n } catch (e) {}\n setTimeout(send, 100);\n setTimeout(send, 500);\n setTimeout(send, 1500);\n})();</script>\n`;\n\n/**\n * Injects the height-reporter script just before the LAST `</body>` (or\n * `</html>`) tag. `lastIndexOf` rather than regex so a `</body>` inside a\n * string literal or comment doesn't confuse us.\n */\nexport function injectHeightReporter(html: string): string {\n const lower = html.toLowerCase();\n const bodyIdx = lower.lastIndexOf('</body>');\n if (bodyIdx >= 0) {\n return (\n html.slice(0, bodyIdx) + HEIGHT_REPORTER_SCRIPT + html.slice(bodyIdx)\n );\n }\n const htmlIdx = lower.lastIndexOf('</html>');\n if (htmlIdx >= 0) {\n return (\n html.slice(0, htmlIdx) + HEIGHT_REPORTER_SCRIPT + html.slice(htmlIdx)\n );\n }\n return html + HEIGHT_REPORTER_SCRIPT;\n}\n\n// Single global listener routing height + error messages back to whichever\n// iframe originated them, via WeakMap keyed on `event.source`. Consumers\n// still clear eagerly on teardown to avoid stale handlers firing mid-destroy.\nexport type IframeHandler = {\n onHeight: (height: number) => void;\n onError?: (message: string) => void;\n};\nexport const iframeHandlers = new WeakMap<Window, IframeHandler>();\n\nexport function ensureGlobalListener(): void {\n if (typeof window === 'undefined') return;\n const w = window as Window & { __ssHtmlPreviewListener?: boolean };\n if (w.__ssHtmlPreviewListener) return;\n w.__ssHtmlPreviewListener = true;\n window.addEventListener('message', (event) => {\n const data = event.data as {\n type?: string;\n height?: number;\n message?: string;\n } | null;\n if (!data || typeof data.type !== 'string') return;\n const source = event.source as Window | null;\n if (!source) return;\n const handler = iframeHandlers.get(source);\n if (!handler) return;\n if (data.type === HEIGHT_MESSAGE && typeof data.height === 'number') {\n handler.onHeight(data.height);\n } else if (data.type === ERROR_MESSAGE) {\n handler.onError?.(typeof data.message === 'string' ? data.message : '');\n }\n });\n}\n\nexport async function copyText(text: string): Promise<boolean> {\n try {\n if (navigator.clipboard?.writeText) {\n await navigator.clipboard.writeText(text);\n return true;\n }\n } catch {\n /* fall through to textarea fallback */\n }\n try {\n const ta = document.createElement('textarea');\n ta.value = text;\n ta.setAttribute('readonly', '');\n ta.style.position = 'fixed';\n ta.style.opacity = '0';\n document.body.appendChild(ta);\n ta.select();\n const ok = document.execCommand('copy');\n ta.remove();\n return ok;\n } catch {\n return false;\n }\n}\n\nexport type SnapshotImage = {\n dataUrl: string;\n width: number;\n height: number;\n cssWidth: number;\n cssHeight: number;\n};\n\nlet snapshotSeq = 0;\n\n/**\n * Ask a previewed HTML iframe to rasterize its own `<canvas>` elements and\n * return them as PNG data URLs. The iframe is sandboxed without\n * `allow-same-origin`, so the parent can't read its DOM — instead the injected\n * reporter script (see `HEIGHT_REPORTER_SCRIPT`) does the `toDataURL` and posts\n * the strings back. Resolves to `[]` if the iframe has no (usable) canvas or\n * doesn't reply before `timeoutMs`.\n */\nexport function snapshotIframe(\n iframe: HTMLIFrameElement,\n timeoutMs = 1500\n): Promise<SnapshotImage[]> {\n return new Promise((resolve) => {\n const win = iframe.contentWindow;\n if (!win || typeof window === 'undefined') {\n resolve([]);\n return;\n }\n const id = `snap-${++snapshotSeq}`;\n let settled = false;\n\n const finish = (images: SnapshotImage[]) => {\n if (settled) return;\n settled = true;\n window.removeEventListener('message', onMessage);\n clearTimeout(timer);\n resolve(images);\n };\n\n const onMessage = (event: MessageEvent) => {\n if (event.source !== win) return;\n const data = event.data as {\n type?: string;\n id?: string;\n images?: SnapshotImage[];\n } | null;\n if (!data || data.type !== SNAPSHOT_RESULT || data.id !== id) return;\n finish(Array.isArray(data.images) ? data.images : []);\n };\n\n const timer = setTimeout(() => finish([]), timeoutMs);\n window.addEventListener('message', onMessage);\n try {\n win.postMessage({ type: SNAPSHOT_REQUEST, id }, '*');\n } catch {\n finish([]);\n }\n });\n}\n","import { codeBlockSchema } from '@milkdown/preset-commonmark';\nimport { $view } from '@milkdown/utils';\n\nimport {\n copyText,\n ensureGlobalListener,\n iframeHandlers,\n injectHeightReporter,\n MAX_IFRAME_HEIGHT,\n} from '../htmlPreviewShared';\n\n// Re-exported for existing importers/tests.\nexport { injectHeightReporter };\n\nconst PREVIEW_LANGUAGES = new Set(['html']);\n\n// `codeBlockSchema` from @milkdown/preset-commonmark is a `$nodeSchema` result\n// (an array-plus-props). `$view` reads `type.id` lazily, but that `id` field on\n// the composed result is a snapshot of `undefined` at module-load time and is\n// never updated when the inner `$node` plugin actually registers. Registering\n// against `codeBlockSchema.node` (the underlying `$node` plugin) ensures\n// `type.id` is populated by the time `$view` reads it.\nexport const htmlPreviewView = $view(codeBlockSchema.node, () => (node) => {\n const language = String(node.attrs.language || '').toLowerCase();\n const isPreviewable = PREVIEW_LANGUAGES.has(language);\n\n const dom = document.createElement('div');\n dom.className = 'ss-code-block';\n if (isPreviewable) dom.classList.add('ss-code-block--previewable');\n\n const header = document.createElement('div');\n header.className = 'ss-code-block__header';\n\n const langLabel = document.createElement('span');\n langLabel.className = 'ss-code-block__lang';\n langLabel.textContent = language || 'text';\n header.appendChild(langLabel);\n\n const actions = document.createElement('div');\n actions.className = 'ss-code-block__actions';\n header.appendChild(actions);\n\n const pre = document.createElement('pre');\n if (language) pre.dataset.language = language;\n const code = document.createElement('code');\n pre.appendChild(code);\n\n let iframe: HTMLIFrameElement | null = null;\n let showingPreview = isPreviewable;\n let lastSrcdoc = '';\n let destroyed = false;\n\n const syncIframe = (src: string) => {\n if (!iframe) return;\n const withReporter = injectHeightReporter(src);\n if (withReporter === lastSrcdoc) return;\n lastSrcdoc = withReporter;\n iframe.srcdoc = withReporter;\n };\n\n // Copy button — visible whenever the source <pre> is visible.\n const copyBtn = document.createElement('button');\n copyBtn.type = 'button';\n copyBtn.className = 'ss-code-block__copy';\n copyBtn.textContent = 'Copy';\n let copyResetTimer: ReturnType<typeof setTimeout> | null = null;\n copyBtn.addEventListener('mousedown', (e) => {\n e.preventDefault();\n e.stopPropagation();\n });\n copyBtn.addEventListener('click', async (e) => {\n e.preventDefault();\n e.stopPropagation();\n const ok = await copyText(code.textContent ?? '');\n if (destroyed) return;\n copyBtn.textContent = ok ? 'Copied' : 'Failed';\n if (copyResetTimer) clearTimeout(copyResetTimer);\n copyResetTimer = setTimeout(() => {\n copyResetTimer = null;\n if (destroyed) return;\n copyBtn.textContent = 'Copy';\n }, 1500);\n });\n const setCopyVisible = (visible: boolean) => {\n copyBtn.style.display = visible ? '' : 'none';\n };\n actions.appendChild(copyBtn);\n setCopyVisible(!isPreviewable);\n\n // Parent-side rAF coalescing: a noisy ResizeObserver in the iframe could\n // fire many height messages per frame; we only apply the latest one each\n // animation frame to avoid layout thrash.\n let pendingHeight: number | null = null;\n let rafId: number | null = null;\n const flushPendingHeight = () => {\n rafId = null;\n if (pendingHeight == null || !iframe) return;\n const next = Math.min(pendingHeight, MAX_IFRAME_HEIGHT);\n pendingHeight = null;\n if (next <= 0) return;\n iframe.style.height = `${next}px`;\n };\n const scheduleHeight = (height: number) => {\n pendingHeight = height;\n if (rafId != null) return;\n if (typeof requestAnimationFrame === 'function') {\n rafId = requestAnimationFrame(flushPendingHeight);\n } else {\n // Fallback for SSR / jsdom without rAF.\n rafId = window.setTimeout(flushPendingHeight, 16) as unknown as number;\n }\n };\n\n if (isPreviewable) {\n ensureGlobalListener();\n iframe = document.createElement('iframe');\n iframe.className = 'ss-code-block__iframe';\n iframe.setAttribute('sandbox', 'allow-scripts');\n iframe.setAttribute('loading', 'lazy');\n iframe.setAttribute('title', 'HTML preview');\n const setShowingPreview = (next: boolean) => {\n showingPreview = next;\n if (!iframe) return;\n if (showingPreview) {\n iframe.style.display = '';\n pre.style.display = 'none';\n toggle.textContent = 'Source';\n setCopyVisible(false);\n } else {\n iframe.style.display = 'none';\n pre.style.display = '';\n toggle.textContent = 'Preview';\n setCopyVisible(true);\n }\n };\n\n iframe.addEventListener('load', () => {\n if (destroyed || !iframe || !iframe.contentWindow) return;\n iframeHandlers.set(iframe.contentWindow, {\n onHeight: scheduleHeight,\n onError: () => {\n if (destroyed) return;\n if (showingPreview) setShowingPreview(false);\n },\n });\n });\n syncIframe(node.textContent);\n\n const toggle = document.createElement('button');\n toggle.type = 'button';\n toggle.className = 'ss-code-block__toggle';\n toggle.textContent = 'Source';\n toggle.addEventListener('mousedown', (e) => {\n e.preventDefault();\n e.stopPropagation();\n });\n toggle.addEventListener('click', (e) => {\n e.preventDefault();\n e.stopPropagation();\n setShowingPreview(!showingPreview);\n });\n actions.appendChild(toggle);\n }\n\n dom.appendChild(header);\n if (iframe) dom.appendChild(iframe);\n dom.appendChild(pre);\n\n if (showingPreview) pre.style.display = 'none';\n\n return {\n dom,\n contentDOM: code,\n update(updatedNode) {\n if (updatedNode.type.name !== 'code_block') return false;\n const nextLang = String(updatedNode.attrs.language || '').toLowerCase();\n if (nextLang !== language) return false;\n if (iframe) syncIframe(updatedNode.textContent);\n return true;\n },\n ignoreMutation(mutation) {\n if (!dom.contains(mutation.target as Node)) return true;\n if (mutation.target === code) return false;\n if (code.contains(mutation.target as Node)) return false;\n return true;\n },\n destroy() {\n destroyed = true;\n if (copyResetTimer) {\n clearTimeout(copyResetTimer);\n copyResetTimer = null;\n }\n if (rafId != null) {\n if (typeof cancelAnimationFrame === 'function') {\n cancelAnimationFrame(rafId);\n } else {\n clearTimeout(rafId);\n }\n rafId = null;\n }\n if (iframe?.contentWindow) {\n iframeHandlers.delete(iframe.contentWindow);\n }\n },\n };\n});\n","import { InputRule } from '@milkdown/prose/inputrules';\nimport type { Node } from '@milkdown/prose/model';\nimport type { NodeParserSpec, NodeSerializerSpec } from '@milkdown/transformer';\nimport { $inputRule, $node } from '@milkdown/utils';\n\n// Inline @mention node with simple input rule: typing @username creates a mention atom\nexport const mention = $node('mention', () => ({\n group: 'inline',\n inline: true,\n atom: true,\n selectable: true,\n draggable: false,\n attrs: {\n id: { default: '' },\n label: { default: '' },\n },\n toDOM: (node: Node) => {\n const { id, label } = node.attrs as { id: string; label: string };\n const text = label || (id ? `@${id}` : '@mention');\n return [\n 'span',\n {\n 'data-type': 'mention',\n 'data-id': id,\n class: 'mention',\n contenteditable: 'false',\n spellcheck: 'false',\n },\n text,\n ];\n },\n parseDOM: [\n {\n tag: \"span[data-type='mention']\",\n getAttrs: (dom: HTMLElement) => {\n const el = dom as HTMLElement;\n return {\n id: el.getAttribute('data-id') ?? '',\n label: el.innerText ?? '',\n };\n },\n },\n ],\n parseMarkdown: {\n match: (n) => n.type === 'mention',\n runner: (state, node, type) => {\n const raw = node as unknown as {\n id?: string;\n label?: string;\n value?: string;\n };\n let id = raw.id;\n let label = raw.label;\n if (!id && typeof raw.value === 'string') {\n // support value like \"username|Label\"\n const [maybeId, maybeLabel] = raw.value.split('|');\n id = maybeId;\n label = maybeLabel;\n }\n state.openNode(type, { id: id ?? '', label: label ?? '' });\n state.closeNode();\n },\n } as NodeParserSpec,\n toMarkdown: {\n match: (node) => node.type.name === 'mention',\n runner: (state, node) => {\n const { id, label } = node.attrs as { id: string; label: string };\n state.addNode('text', undefined, label || `@${id}`);\n },\n } as NodeSerializerSpec,\n}));\n\n// Input rule to transform @username (letters, numbers, underscore, dot, hyphen) into a mention node\nexport const createMentionInputRule = $inputRule((ctx) => {\n const type = mention.type(ctx);\n // Matches \"@username\" at word boundary; avoids matching emails by requiring start or whitespace\n const regex = /(?:^|\\s)@([a-zA-Z0-9_.-]{2,32})$/;\n return new InputRule(regex, (state, match, start, end) => {\n const username = match[1];\n if (!username) return null;\n const tr = state.tr;\n const from = end - username.length - 1; // include '@'\n tr.replaceWith(\n from,\n end,\n type.create({ id: username, label: `@${username}` })\n );\n return tr;\n });\n});\n","import { editorViewCtx } from '@milkdown/core';\nimport type { Node as PMNode } from '@milkdown/prose/model';\nimport type { EditorView } from '@milkdown/prose/view';\nimport { $node, $view } from '@milkdown/utils';\n\nfunction parseQuery(query: string): Record<string, string> {\n const params = new URLSearchParams(query);\n const out: Record<string, string> = {};\n params.forEach((v, k) => {\n out[k] = v;\n });\n return out;\n}\n\ntype SsImageAttrs = {\n fileId: string;\n alt?: string;\n w?: string | number | null;\n h?: string | number | null;\n fit?: string | null;\n align?: string | null;\n caption?: string | null;\n extraClass?: string | null;\n title?: string | null;\n};\n\nexport const ssImageNode = $node('ssImage', () => ({\n group: 'inline',\n inline: true,\n atom: true,\n selectable: true,\n draggable: false,\n attrs: {\n fileId: { default: '' },\n alt: { default: '' },\n w: { default: null },\n h: { default: null },\n fit: { default: null },\n align: { default: null },\n caption: { default: null },\n extraClass: { default: null },\n title: { default: null },\n },\n toDOM: (node: PMNode) => {\n const a = node.attrs as SsImageAttrs;\n const attrs: Record<string, string> = {\n 'data-ss-image': '',\n 'data-file-id': a.fileId || '',\n alt: a.alt || '',\n title: a.title || '',\n };\n if (a.w != null) attrs['width'] = String(a.w);\n if (a.h != null) attrs['height'] = String(a.h);\n if (a.fit) attrs['data-fit'] = String(a.fit);\n if (a.align) attrs['data-align'] = String(a.align);\n if (a.caption) attrs['data-caption'] = String(a.caption);\n if (a.extraClass) attrs['data-class'] = String(a.extraClass);\n return ['img', attrs];\n },\n parseDOM: [\n {\n tag: 'img[data-ss-image]',\n },\n ],\n parseMarkdown: {\n match: (n) => {\n try {\n const md = n as Record<string, unknown>;\n return (\n md.type === 'image' &&\n typeof md.url === 'string' &&\n md.url.startsWith('ss-file:')\n );\n } catch {\n return false;\n }\n },\n runner: (state, node, type) => {\n const raw = node as unknown as {\n url?: string;\n alt?: string;\n title?: string;\n };\n const url = raw.url ?? '';\n const withoutScheme = url.substring('ss-file:'.length);\n const [idPart, query = ''] = withoutScheme.split('?');\n const q = parseQuery(query);\n state.openNode(type, {\n fileId: idPart,\n alt: raw.alt ?? '',\n w: q.w ?? null,\n h: q.h ?? null,\n fit: q.fit ?? null,\n align: q.align ?? null,\n caption: q.caption ?? null,\n extraClass: q.class ?? null,\n title: raw.title ?? null,\n });\n state.closeNode();\n },\n },\n toMarkdown: {\n match: (node) => node.type.name === 'ssImage',\n runner: (state, node) => {\n const a = node.attrs as SsImageAttrs;\n const params = new URLSearchParams();\n if (a.w != null) params.set('w', String(a.w));\n if (a.h != null) params.set('h', String(a.h));\n if (a.fit) params.set('fit', String(a.fit));\n if (a.align) params.set('align', String(a.align));\n if (a.caption) params.set('caption', String(a.caption));\n if (a.extraClass) params.set('class', String(a.extraClass));\n const query = params.toString();\n const url = `ss-file:${a.fileId}${query ? `?${query}` : ''}`;\n // Milkdown's state.addNode('image', ...): use normal image serializer context\n const imageMeta = {\n url,\n title: a.title ?? undefined,\n alt: a.alt ?? undefined,\n };\n state.addNode(\n 'image',\n undefined,\n undefined,\n imageMeta as Parameters<typeof state.addNode>[3]\n );\n },\n },\n}));\n\nexport const ssImageView = $view(ssImageNode, (ctx) => (node) => {\n const dom = document.createElement('span');\n dom.className = 'ss-attach ss-attach--image';\n // allow spinner overlay\n dom.style.position = 'relative';\n const img = document.createElement('img');\n img.alt = (node.attrs as SsImageAttrs).alt || '';\n const fileId = (node.attrs as SsImageAttrs).fileId as string;\n const w = (node.attrs as SsImageAttrs).w as number | string | null;\n const h = (node.attrs as SsImageAttrs).h as number | string | null;\n if (w) img.width = Number(w);\n if (h) img.height = Number(h);\n img.className = 'ss-attach__img';\n\n const spinner = document.createElement('span');\n spinner.className = 'ss-attach__spinner';\n\n // Remove (X) button (only meaningful when editor is editable)\n const removeBtn = document.createElement('button');\n removeBtn.type = 'button';\n removeBtn.className = 'ss-attach__remove';\n removeBtn.setAttribute('aria-label', 'Remove image');\n removeBtn.innerHTML =\n '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"/><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"/></svg>';\n removeBtn.addEventListener('mousedown', (e) => {\n // prevent ProseMirror from moving selection/caret weirdly\n e.preventDefault();\n e.stopPropagation();\n });\n removeBtn.addEventListener('click', (e) => {\n e.preventDefault();\n e.stopPropagation();\n try {\n const view = ctx.get(editorViewCtx) as EditorView;\n if (!view || view.editable === false) return;\n const pos = view.posAtDOM(dom, 0);\n if (typeof pos !== 'number') return;\n const tr = view.state.tr.delete(pos, pos + node.nodeSize);\n view.dispatch(tr.scrollIntoView());\n } catch {\n // ignore remove errors\n }\n });\n\n // Show lightweight placeholder while downloading (do not set img.src yet).\n // Hide the bare <img> so the broken-image icon/alt text doesn't render\n // beneath the spinner.\n img.style.background = 'rgba(0,0,0,0.04)';\n img.style.visibility = 'hidden';\n let hasSetRealSrc = false;\n\n // Hide spinner once image loads (or errors)\n img.addEventListener('load', () => {\n if (!hasSetRealSrc) return;\n spinner.remove();\n img.style.background = '';\n img.style.visibility = '';\n });\n img.addEventListener('error', () => {\n if (!hasSetRealSrc) return;\n spinner.remove();\n img.style.background = 'rgba(255,0,0,0.06)';\n img.style.visibility = '';\n });\n\n // Fetch via app API (window hook to avoid bundling React inside NodeView)\n try {\n const anyWin = window as unknown as {\n __ssDownloadFile?: (id: string) => Promise<string>;\n };\n if (anyWin.__ssDownloadFile) {\n anyWin\n .__ssDownloadFile(fileId)\n .then((blobUrl) => {\n hasSetRealSrc = true;\n img.src = blobUrl;\n })\n .catch(() => {\n // trigger error styling\n hasSetRealSrc = true;\n img.dispatchEvent(new Event('error'));\n });\n } else {\n // leave as placeholder if integration not provided\n }\n } catch {\n // ignore download errors\n }\n\n dom.appendChild(spinner);\n dom.appendChild(img);\n dom.appendChild(removeBtn);\n return { dom, contentDOM: null };\n});\n","import {\n defaultValueCtx,\n Editor,\n editorViewCtx,\n editorViewOptionsCtx,\n parserCtx,\n rootCtx,\n serializerCtx,\n} from '@milkdown/core';\nimport { history } from '@milkdown/kit/plugin/history';\nimport { clipboard } from '@milkdown/plugin-clipboard';\nimport { listener, listenerCtx } from '@milkdown/plugin-listener';\nimport { commonmark } from '@milkdown/preset-commonmark';\nimport { Slice } from '@milkdown/prose/model';\nimport type { Node as PMNode } from '@milkdown/prose/model';\nimport type { EditorView } from '@milkdown/prose/view';\nimport { Milkdown, MilkdownProvider, useEditor } from '@milkdown/react';\nimport { useQuery } from '@tanstack/react-query';\n//\nimport type React from 'react';\nimport {\n forwardRef,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { createPortal } from 'react-dom';\n\n// Note: Mention plugin is not published under @milkdown/plugin-mention on npm.\n// This setup is ready to add a mention-like plugin later if desired.\nimport { autolink } from './extensions/autolink';\nimport { fileTag } from './extensions/fileTag';\nimport { htmlPreviewView } from './extensions/htmlPreview';\nimport { mention } from './extensions/mention';\nimport { ssImageNode, ssImageView } from './extensions/ssImage';\nimport {\n extractMarkdownMarker,\n SS_MARKDOWN_CLIPBOARD_TYPE,\n} from './htmlPreviewShared';\nimport './styles.css';\n\nconst initial = [\n '# Milkdown Demo',\n '',\n 'Type *Markdown* and see it render live.',\n '',\n 'Custom file tag example: ',\n '[[file:123|Project Spec.docx]]',\n '',\n 'Mention example: @alice (plugin placeholder)',\n].join('\\n');\n\nexport type MentionUserLike = { id: string; displayName: string };\nexport type FetchMentionUsers = (\n workspaceId: string\n) => Promise<MentionUserLike[]>;\n\nexport type MarkdownEditorHandle = {\n addFiles: (files: File[]) => void;\n focus: () => void;\n /** Clears the editor content (useful when host clears `value`, since Milkdown isn't fully controlled here). */\n clear: () => void;\n /**\n * Serializes the current editor doc to markdown synchronously.\n * Needed because the `markdownUpdated` listener is debounced by 200ms inside\n * `@milkdown/plugin-listener`, so React state can lag behind what's in the editor.\n * Callers that need the freshest text (e.g. sending on Enter) should read from here.\n */\n getMarkdown: () => string;\n /**\n * Returns mention users currently present in the editor document.\n * Useful for building API payloads (e.g. comments.mentionedUsers).\n */\n getMentionedUsers?: () => Array<{ id: string; displayName: string }>;\n /**\n * Returns plain text for the current editor content, with mention nodes rendered as \"@Display Name\".\n * Useful when the host renders content as plain text (not markdown).\n */\n getPlainText?: () => string;\n};\n\nexport type MarkdownEditorProps = {\n value?: string;\n onChange?: (md: string) => void;\n onKeyDown?: (e: React.KeyboardEvent) => void;\n onImagesPasted?: (files: File[]) => void;\n onFilesAdded?: (files: File[]) => void;\n onUploadFiles?: (files: File[]) => Promise<{ id: string; name: string }[]>;\n /**\n * Controls what happens when the user drops files onto the editor surface.\n * - 'inline' (default): upload + insert `ssImage`/`fileTag` nodes into the editor when possible.\n * - 'attachments': do NOT insert into the editor; instead call `onFilesAdded` so the host can manage attachments UI.\n */\n fileHandlingMode?: 'inline' | 'attachments';\n disabled?: boolean;\n editable?: boolean;\n className?: string;\n minHeight?: number | string;\n maxHeight?: number | string;\n ghostMessage?: string;\n placeholder?: string;\n workspaceId?: string;\n threadId?: string;\n enableMentions?: boolean;\n /**\n * Optional mention users fetcher. Kept as a prop so this shared component does not\n * depend on any domain/service modules.\n */\n fetchMentionUsers?: FetchMentionUsers;\n};\n\ntype PMNodeTypeLike = {\n create: (attrs?: Record<string, unknown>) => PMNode;\n};\n\nfunction getSchemaNodeType(\n view: EditorView,\n name: string\n): PMNodeTypeLike | null {\n const nodes = view.state.schema.nodes as unknown as Record<string, unknown>;\n const t = nodes?.[name];\n if (!t || typeof t !== 'object') return null;\n if (\n !('create' in t) ||\n typeof (t as { create?: unknown }).create !== 'function'\n )\n return null;\n return t as PMNodeTypeLike;\n}\n\nfunction EditorInner({\n value,\n onChange: _onChange,\n onKeyDown,\n onImagesPasted: _onImagesPasted,\n onFilesAdded: _onFilesAdded,\n onUploadFiles: _onUploadFiles,\n fileHandlingMode = 'inline',\n disabled,\n editable,\n className,\n minHeight,\n maxHeight,\n ghostMessage,\n placeholder,\n workspaceId,\n enableMentions,\n fetchMentionUsers,\n editorHandleRef,\n}: {\n value?: MarkdownEditorProps['value'];\n onChange?: MarkdownEditorProps['onChange'];\n onKeyDown?: React.KeyboardEventHandler<HTMLDivElement>;\n onImagesPasted?: MarkdownEditorProps['onImagesPasted'];\n onFilesAdded?: MarkdownEditorProps['onFilesAdded'];\n onUploadFiles?: MarkdownEditorProps['onUploadFiles'];\n fileHandlingMode?: MarkdownEditorProps['fileHandlingMode'];\n disabled?: MarkdownEditorProps['disabled'];\n editable?: MarkdownEditorProps['editable'];\n className?: MarkdownEditorProps['className'];\n minHeight?: MarkdownEditorProps['minHeight'];\n maxHeight?: MarkdownEditorProps['maxHeight'];\n ghostMessage?: MarkdownEditorProps['ghostMessage'];\n placeholder?: MarkdownEditorProps['placeholder'];\n workspaceId?: MarkdownEditorProps['workspaceId'];\n enableMentions?: MarkdownEditorProps['enableMentions'];\n fetchMentionUsers?: MarkdownEditorProps['fetchMentionUsers'];\n editorHandleRef?: React.ForwardedRef<MarkdownEditorHandle>;\n}) {\n const initialValueRef = useRef(value ?? initial);\n const isEditable =\n (editable ?? (disabled != null ? !disabled : true)) === true;\n const [isEmpty, setIsEmpty] = useState(\n !initialValueRef.current ||\n initialValueRef.current.replace(/\\s+/g, '') === ''\n );\n const [hasFocus, setHasFocus] = useState(false);\n const effectivePlaceholder = placeholder ?? ghostMessage;\n const [attachments, setAttachments] = useState<\n { url: string; name: string; isImage: boolean }[]\n >([]);\n const previewUrlsRef = useRef<string[]>([]);\n const [_isDragging, setIsDragging] = useState(false);\n const viewRef = useRef<EditorView | null>(null);\n const serializerRef = useRef<((doc: PMNode) => string) | null>(null);\n const parserRef = useRef<((markdown: string) => PMNode | null) | null>(null);\n\n function guessImageExt(mime: string) {\n const t = (mime || '').toLowerCase();\n if (t === 'image/jpeg') return 'jpg';\n if (t === 'image/svg+xml') return 'svg';\n const parts = t.split('/');\n return parts[1] || 'png';\n }\n\n function ensurePastedImageHasNiceName(file: File): File {\n if (!file.type?.startsWith('image/')) return file;\n const raw = (file.name || '').trim();\n const looksDefault =\n !raw ||\n raw === 'image' ||\n raw === 'blob' ||\n raw === 'image.png' ||\n raw === 'image.jpg' ||\n raw === 'image.jpeg';\n if (!looksDefault) return file;\n\n const ext = guessImageExt(file.type);\n const ts = new Date().toISOString().replace(/[:.]/g, '-');\n const nextName = `pasted-image-${ts}.${ext}`;\n try {\n return new File([file], nextName, {\n type: file.type,\n lastModified: Date.now(),\n });\n } catch {\n return file;\n }\n }\n\n // Mentions UI state\n const [mentionOpen, setMentionOpen] = useState(false);\n const [mentionQuery, setMentionQuery] = useState('');\n const [mentionFromPos, setMentionFromPos] = useState<number | null>(null);\n const [mentionCoords, setMentionCoords] = useState<{\n left: number;\n top: number;\n bottom: number;\n }>({\n left: 0,\n top: 0,\n bottom: 0,\n });\n const [mentionIndex, setMentionIndex] = useState(0);\n const [mentionPlacement, setMentionPlacement] = useState<'up' | 'down'>(\n 'down'\n );\n\n // Refs to prevent keyup-driven recalculation from clobbering arrow-key navigation.\n const mentionQueryRef = useRef('');\n const mentionFromPosRef = useRef<number | null>(null);\n const mentionOpenRef = useRef(false);\n // When the user presses Escape, suppress re-opening until the cursor moves or\n // the `@` position changes (i.e. a new mention session starts).\n const mentionDismissedAtRef = useRef<number | null>(null);\n\n useEffect(() => {\n mentionQueryRef.current = mentionQuery;\n }, [mentionQuery]);\n useEffect(() => {\n mentionFromPosRef.current = mentionFromPos;\n }, [mentionFromPos]);\n useEffect(() => {\n mentionOpenRef.current = mentionOpen;\n }, [mentionOpen]);\n\n // If mentions are disabled, ensure the dropdown is never visible.\n useEffect(() => {\n if (enableMentions) return;\n setMentionOpen(false);\n setMentionQuery('');\n setMentionFromPos(null);\n setMentionIndex(0);\n }, [enableMentions]);\n\n const {\n data: usersData = [],\n isLoading: isUsersLoading,\n isFetching: isUsersFetching,\n } = useQuery({\n queryKey: ['markdown', 'mentionUsers', workspaceId ?? ''],\n queryFn: async () => {\n if (!fetchMentionUsers) return [] as MentionUserLike[];\n if (!workspaceId) return [] as MentionUserLike[];\n return await fetchMentionUsers(workspaceId);\n },\n staleTime: 30_000,\n enabled:\n !!enableMentions &&\n !!workspaceId &&\n !!fetchMentionUsers &&\n (mentionOpen || (mentionQuery ?? '').length > 0),\n }) as unknown as {\n data: MentionUserLike[];\n isLoading: boolean;\n isFetching: boolean;\n };\n\n const mentionCandidates = useMemo(() => {\n if (!enableMentions) return [] as MentionUserLike[];\n if (!mentionOpen) return [] as MentionUserLike[];\n const q = mentionQuery.trim().toLowerCase();\n const list = (usersData as MentionUserLike[]) || [];\n if (!q) return list.slice(0, 8);\n return list\n .filter((u) => u.displayName.toLowerCase().includes(q))\n .slice(0, 8);\n }, [mentionOpen, mentionQuery, usersData, enableMentions]);\n\n // (debug logs removed)\n\n useEffect(() => {\n return () => {\n // cleanup object URLs on unmount\n previewUrlsRef.current.forEach((u) => {\n try {\n URL.revokeObjectURL(u);\n } catch (_err) {\n /* ignore revoke errors */\n }\n });\n previewUrlsRef.current = [];\n };\n }, []);\n\n useEditor(\n (root) => {\n return Editor.make()\n .config((ctx) => {\n ctx.set(rootCtx, root);\n ctx.set(defaultValueCtx, initialValueRef.current);\n ctx.set(editorViewOptionsCtx, {\n editable: () => isEditable,\n });\n if (_onChange) {\n const lm = ctx.get(listenerCtx);\n lm.markdownUpdated((_ctx, md) => {\n _onChange(md);\n });\n }\n const lm = ctx.get(listenerCtx);\n lm.markdownUpdated((_ctx, md) => {\n setIsEmpty(!md || md.replace(/\\s+/g, '') === '');\n });\n lm.focus(() => setHasFocus(true));\n lm.blur(() => setHasFocus(false));\n lm.mounted((c: unknown) => {\n try {\n const anyCtx = c as { get: (t: unknown) => unknown };\n const view = anyCtx.get(editorViewCtx) as EditorView;\n viewRef.current = view;\n try {\n serializerRef.current = anyCtx.get(serializerCtx) as (\n doc: PMNode\n ) => string;\n } catch {\n /* serializer not ready yet */\n }\n try {\n parserRef.current = anyCtx.get(parserCtx) as (\n markdown: string\n ) => PMNode | null;\n } catch {\n /* parser not ready yet */\n }\n const handle = () => {\n try {\n if (enableMentions) updateMentionFromView();\n } catch {\n /* ignore */\n }\n };\n const handleKeyDown = (ev: KeyboardEvent) => {\n if (!enableMentions) return;\n if (ev.key === '@') {\n try {\n const pos = view.state.selection.from;\n const coords = view.coordsAtPos(pos);\n setMentionCoords({\n left: coords.left,\n top: coords.top,\n bottom: coords.bottom,\n });\n setMentionPlacement(getMentionPlacement(coords.top));\n setMentionFromPos(Math.max(0, pos - 1));\n setMentionQuery('');\n setMentionIndex(0);\n setMentionOpen(true);\n } catch {\n /* ignore */\n }\n }\n };\n const dom: HTMLElement = view.dom as unknown as HTMLElement;\n dom.addEventListener('keyup', handle);\n dom.addEventListener('click', handle);\n dom.addEventListener('keydown', handleKeyDown);\n // Pair every addEventListener with a removeEventListener via\n // the listener plugin's `destroy` hook. `useEditor` rebuilds\n // the editor on every `[isEditable]` flip and on unmount; the\n // old `view.dom` would otherwise hang on to closure refs over\n // setMentionCoords/setMentionOpen (and through them the whole\n // component scope). With many thread switches that grew into\n // a real retention problem.\n lm.destroy(() => {\n dom.removeEventListener('keyup', handle);\n dom.removeEventListener('click', handle);\n dom.removeEventListener('keydown', handleKeyDown);\n });\n } catch {\n /* ignore get view errors */\n }\n });\n })\n .use(commonmark)\n .use(history)\n .use(clipboard)\n .use(listener)\n .use(autolink)\n .use(fileTag)\n .use(ssImageNode)\n .use(ssImageView)\n .use(htmlPreviewView)\n .use(enableMentions ? mention : fileTag);\n },\n [isEditable]\n );\n\n async function getImageDimensions(\n file: File\n ): Promise<{ width: number; height: number } | null> {\n try {\n const url = URL.createObjectURL(file);\n const img = new Image();\n const dims = await new Promise<{ width: number; height: number }>(\n (resolve, reject) => {\n img.onload = () =>\n resolve({ width: img.naturalWidth, height: img.naturalHeight });\n img.onerror = () => reject(new Error('image load failed'));\n img.src = url;\n }\n );\n URL.revokeObjectURL(url);\n return dims;\n } catch {\n return null;\n }\n }\n\n function clampImageSize(\n width: number,\n height: number,\n maxWidth = 260,\n maxHeight = 180\n ): { width: number; height: number } {\n const w = Number(width) || 1;\n const h = Number(height) || 1;\n const scale = Math.min(maxWidth / w, maxHeight / h, 1);\n return {\n width: Math.max(1, Math.round(w * scale)),\n height: Math.max(1, Math.round(h * scale)),\n };\n }\n\n async function uploadSingleFile(\n file: File\n ): Promise<{ id: string; name: string } | null> {\n if (!_onUploadFiles) return null;\n try {\n const res = await _onUploadFiles([file]);\n if (res && res[0])\n return { id: res[0].id, name: res[0].name || file.name || 'file' };\n return null;\n } catch {\n return null;\n }\n }\n\n function insertTextAtSelection(view: EditorView, text: string) {\n const { from, to } = view.state.selection;\n const tr = view.state.tr.insertText(text, from, to);\n view.dispatch(tr.scrollIntoView());\n }\n\n function insertNodeAtSelection(view: EditorView, node: PMNode) {\n const { from, to } = view.state.selection;\n const tr = view.state.tr.replaceWith(from, to, node);\n view.dispatch(tr.scrollIntoView());\n }\n\n // Parse a markdown string and replace the current selection with it. Used\n // when pasting SmartSpace's own custom clipboard format so charts paste as\n // live `html` source rather than the rasterized-image `text/html`.\n function insertMarkdownAtSelection(view: EditorView, markdown: string) {\n const parser = parserRef.current;\n if (!parser) return false;\n try {\n const doc = parser(markdown);\n if (!doc) return false;\n const slice = new Slice(doc.content, 0, 0);\n view.dispatch(view.state.tr.replaceSelection(slice).scrollIntoView());\n return true;\n } catch {\n return false;\n }\n }\n\n async function insertUploadedFilesIntoEditor(files: File[]) {\n const view = viewRef.current;\n if (!isEditable || !view) return false;\n\n try {\n view.focus();\n } catch {\n /* ignore focus errors */\n }\n\n for (const file of files) {\n const isImage = file.type.startsWith('image/');\n const uploaded = await uploadSingleFile(file);\n const id = uploaded?.id ?? 'local';\n const name =\n uploaded?.name ?? (file.name || (isImage ? 'image' : 'file'));\n\n if (isImage) {\n const dims = await getImageDimensions(file);\n const rawW = dims?.width ?? 500;\n const rawH = dims?.height ?? 500;\n const { width, height } = clampImageSize(rawW, rawH);\n try {\n const type = getSchemaNodeType(view, 'ssImage');\n if (type) {\n const node = type.create({\n fileId: id,\n alt: name,\n w: width,\n h: height,\n });\n insertNodeAtSelection(view, node);\n insertTextAtSelection(view, ' ');\n } else {\n insertTextAtSelection(\n view,\n ` `\n );\n }\n } catch {\n /* ignore insert errors */\n }\n } else {\n try {\n const type = getSchemaNodeType(view, 'fileTag');\n if (type) {\n const node = type.create({ id, label: name });\n insertNodeAtSelection(view, node);\n insertTextAtSelection(view, ' ');\n } else {\n insertTextAtSelection(view, `[[file:${id}|${name}]] `);\n }\n } catch {\n /* ignore insert errors */\n }\n }\n }\n\n return true;\n }\n\n async function handleFiles(files: File[], opts?: { notifyHost?: boolean }) {\n if (!files || files.length === 0) return;\n const notifyHost = opts?.notifyHost !== false;\n\n // If we can insert into the editor (focused/imperative add), prefer that over the local preview list.\n // Note: callers (file picker) will focus the editor first via the imperative handle.\n if (isEditable && viewRef.current && _onUploadFiles) {\n const inserted = await insertUploadedFilesIntoEditor(files);\n if (inserted) {\n if (notifyHost && _onFilesAdded) _onFilesAdded(files);\n return;\n }\n }\n\n // Fallback: local-only attachment previews\n const items = files.map((f) => {\n const isImage = f.type.startsWith('image/');\n const url = isImage ? URL.createObjectURL(f) : '';\n const key = `${f.name}:${f.size}:${f.type}`;\n if (url) previewUrlsRef.current.push(url);\n return {\n key,\n url,\n name: f.name || 'file',\n isImage,\n status: 'uploading' as const,\n };\n });\n\n setAttachments((prev) => [...prev, ...items]);\n if (notifyHost && _onFilesAdded) _onFilesAdded(files);\n }\n\n useImperativeHandle(\n editorHandleRef ?? null,\n () => ({\n addFiles: (files: File[]) => {\n void handleFiles(files);\n },\n focus: () => {\n try {\n viewRef.current?.focus();\n } catch {\n /* ignore focus errors */\n }\n },\n getMentionedUsers: () => {\n const view = viewRef.current;\n if (!view) return [];\n const found: Array<{ id: string; displayName: string }> = [];\n view.state.doc.descendants((node) => {\n if (node.type?.name !== 'mention') return true;\n const attrs = node.attrs as unknown as {\n id?: unknown;\n label?: unknown;\n };\n const id =\n typeof attrs?.id === 'string' ? attrs.id : String(attrs?.id ?? '');\n const label =\n typeof attrs?.label === 'string'\n ? attrs.label\n : String(attrs?.label ?? '');\n const displayName = label.replace(/^@/, '');\n if (id) found.push({ id, displayName });\n return true;\n });\n const uniq = new Map<string, { id: string; displayName: string }>();\n for (const u of found) {\n if (!uniq.has(u.id)) uniq.set(u.id, u);\n }\n return [...uniq.values()];\n },\n getPlainText: () => {\n const view = viewRef.current;\n if (!view) return (value ?? '') as string;\n const doc = view.state.doc;\n const mentionBoundary = '\\u0000';\n const leafText = (node: PMNode) => {\n try {\n if (node?.type?.name === 'mention') {\n const attrs = node.attrs as unknown as { label?: unknown };\n const raw =\n typeof attrs?.label === 'string'\n ? attrs.label\n : String(attrs?.label ?? '');\n const displayName = raw.replace(/^@/, '');\n return `@${displayName}${mentionBoundary}`;\n }\n } catch {\n /* ignore */\n }\n return '';\n };\n const rawText = doc.textBetween(0, doc.content.size, '\\n', leafText);\n if (!rawText.includes(mentionBoundary)) return rawText.trimEnd();\n const chars = [...rawText];\n for (let i = 0; i < chars.length; i += 1) {\n if (chars[i] !== mentionBoundary) continue;\n const next = chars[i + 1] ?? '';\n chars[i] = /\\w/.test(next) ? ' ' : '';\n }\n return chars.join('').trimEnd();\n },\n getMarkdown: () => {\n const view = viewRef.current;\n const serializer = serializerRef.current;\n if (!view || !serializer) return (value ?? '') as string;\n try {\n return serializer(view.state.doc);\n } catch {\n return (value ?? '') as string;\n }\n },\n clear: () => {\n const view = viewRef.current;\n if (!view) return;\n try {\n const emptyDoc = view.state.schema.topNodeType.createAndFill();\n if (!emptyDoc) return;\n const slice = new Slice(emptyDoc.content, 0, 0);\n\n // Replace the entire document content with the empty doc content.\n // Positions can be a little tricky across PM versions, so we try a safe primary path with a fallback.\n try {\n const tr = view.state.tr.replace(\n 0,\n view.state.doc.content.size,\n slice\n );\n view.dispatch(tr.scrollIntoView());\n } catch {\n // Fallback: common \"inside doc\" range.\n const from = 1;\n const to = Math.max(from, view.state.doc.content.size - 1);\n const tr = view.state.tr.replace(from, to, slice);\n view.dispatch(tr.scrollIntoView());\n }\n } catch {\n /* ignore clear errors */\n }\n },\n }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [isEditable]\n );\n\n return (\n <div\n className={`md-editor${!isEditable ? ' md-editor--readonly' : ''}${\n className ? ` ${className}` : ''\n }`}\n onClick={(e) => {\n // Make links clickable in read-only mode (autolinked and markdown links)\n if (!isEditable) {\n const target = e.target as HTMLElement;\n const anchor = target.closest('a');\n if (anchor?.href) {\n e.preventDefault();\n window.open(anchor.href, '_blank', 'noopener');\n }\n }\n }}\n onKeyDown={(e) => {\n if (\n mentionOpen &&\n (e.key === 'ArrowDown' ||\n e.key === 'ArrowUp' ||\n e.key === 'Enter' ||\n e.key === 'Escape')\n ) {\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n setMentionIndex((i) =>\n mentionCandidates.length > 0\n ? (i + 1) % mentionCandidates.length\n : 0\n );\n return;\n }\n if (e.key === 'ArrowUp') {\n e.preventDefault();\n setMentionIndex((i) =>\n mentionCandidates.length > 0\n ? (i - 1 + mentionCandidates.length) % mentionCandidates.length\n : 0\n );\n return;\n }\n if (e.key === 'Enter') {\n if (mentionCandidates.length > 0) {\n e.preventDefault();\n const user =\n mentionCandidates[mentionIndex] || mentionCandidates[0];\n insertMention(user);\n return;\n }\n }\n if (e.key === 'Escape') {\n e.preventDefault();\n mentionDismissedAtRef.current = mentionFromPosRef.current;\n setMentionOpen(false);\n return;\n }\n }\n onKeyDown?.(e as React.KeyboardEvent<HTMLDivElement>);\n }}\n onKeyUpCapture={(_e) => {\n try {\n if (enableMentions) updateMentionFromView();\n } catch {\n /* ignore keyup errors */\n }\n }}\n onDragEnter={(e) => {\n try {\n if (e.dataTransfer?.types?.includes('Files')) {\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(true);\n }\n } catch (_err) {\n // ignore dragenter errors\n }\n }}\n onDragOver={(e) => {\n try {\n if (e.dataTransfer?.types?.includes('Files')) {\n e.preventDefault();\n e.stopPropagation();\n }\n } catch (_err) {\n // ignore dragover errors\n }\n }}\n onDragLeave={(e) => {\n try {\n if (e.dataTransfer?.types?.includes('Files')) {\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(false);\n }\n } catch (_err) {\n // ignore dragleave errors\n }\n }}\n onDrop={(e) => {\n try {\n if (!e.dataTransfer?.files?.length) return;\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(false);\n const filesArray = Array.from(e.dataTransfer.files);\n if (fileHandlingMode === 'attachments' && _onFilesAdded) {\n _onFilesAdded(filesArray);\n return;\n }\n void handleFiles(filesArray);\n } catch (_err) {\n // ignore drop errors\n }\n }}\n onPasteCapture={(e) => {\n try {\n // SmartSpace's own \"smart copy\" embeds the live markdown in the\n // copied content so a chart pastes back as live `html` source instead\n // of the rasterized image we hand to Word. Recover it from the hidden\n // HTML marker (works in every browser), falling back to the custom\n // web format. When neither is present this is a normal external paste\n // and we let the default handler run.\n const view = viewRef.current;\n if (isEditable && view) {\n const ssMarkdown =\n extractMarkdownMarker(\n e.clipboardData?.getData('text/html') ?? ''\n ) ?? e.clipboardData?.getData(SS_MARKDOWN_CLIPBOARD_TYPE);\n if (ssMarkdown && insertMarkdownAtSelection(view, ssMarkdown)) {\n e.preventDefault();\n e.stopPropagation();\n return;\n }\n }\n\n const items = e.clipboardData?.items;\n if (!items) return;\n const imageFiles: File[] = [];\n for (const item of Array.from(items)) {\n if (item.kind === 'file') {\n const file = item.getAsFile();\n if (file && file.type.startsWith('image/')) imageFiles.push(file);\n }\n }\n if (imageFiles.length > 0) {\n // show inline previews immediately and forward to host for upload\n const renamed = imageFiles.map(ensurePastedImageHasNiceName);\n void handleFiles(renamed, { notifyHost: false });\n e.preventDefault();\n e.stopPropagation();\n _onImagesPasted?.(renamed);\n }\n } catch {\n // no-op on paste errors\n }\n }}\n role=\"textbox\"\n aria-readonly={isEditable ? 'false' : 'true'}\n aria-disabled={isEditable ? 'false' : 'true'}\n aria-multiline=\"true\"\n tabIndex={0}\n style={((): React.CSSProperties & {\n ['--md-min-height']?: string;\n ['--md-max-height']?: string;\n } => {\n const vars: React.CSSProperties & {\n ['--md-min-height']?: string;\n ['--md-max-height']?: string;\n } = {};\n if (minHeight != null) {\n vars['--md-min-height'] =\n typeof minHeight === 'number'\n ? `${minHeight}px`\n : String(minHeight);\n }\n if (maxHeight != null) {\n vars['--md-max-height'] =\n typeof maxHeight === 'number'\n ? `${maxHeight}px`\n : String(maxHeight);\n }\n return vars;\n })()}\n >\n {effectivePlaceholder && isEditable && isEmpty && !hasFocus ? (\n <div className=\"md-editor__ghost\">{effectivePlaceholder}</div>\n ) : null}\n <Milkdown />\n {mentionOpen\n ? createPortal(\n <div\n className=\"md-mention-menu\"\n style={{\n position: 'fixed',\n left: mentionCoords.left,\n top:\n mentionPlacement === 'up'\n ? mentionCoords.top\n : mentionCoords.bottom,\n transform:\n mentionPlacement === 'up'\n ? 'translateY(calc(-100% - 8px))'\n : 'translateY(8px)',\n }}\n role=\"dialog\"\n aria-label=\"User mentions\"\n >\n <ul className=\"max-h-60 overflow-auto\" role=\"listbox\">\n {mentionCandidates.length === 0 &&\n (isUsersLoading || isUsersFetching) ? (\n <li className=\"px-3 py-2 text-sm text-muted-foreground\">\n Loading users…\n </li>\n ) : mentionCandidates.length === 0 ? (\n <li className=\"px-3 py-2 text-sm text-muted-foreground\">\n No users\n </li>\n ) : (\n mentionCandidates.map((u, i) => (\n <li\n key={u.id}\n role=\"option\"\n aria-selected={i === mentionIndex}\n >\n <button\n type=\"button\"\n className={`w-full text-left px-3 py-1 cursor-pointer ${\n i === mentionIndex ? 'bg-muted' : ''\n }`}\n onMouseDown={(e) => e.preventDefault()}\n onMouseEnter={() => setMentionIndex(i)}\n onClick={(ev) => {\n ev.stopPropagation();\n insertMention(u);\n }}\n onKeyDown={(ke) => {\n if (ke.key === 'Enter' || ke.key === ' ') {\n ke.preventDefault();\n insertMention(u);\n }\n }}\n >\n {u.displayName}\n </button>\n </li>\n ))\n )}\n </ul>\n </div>,\n document.body\n )\n : null}\n {attachments.length > 0 ? (\n <div className=\"mt-2 border-t pt-2\">\n <div className=\"grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 gap-2 auto-rows-min\">\n {attachments.map((p, index) => (\n <div\n key={`${p.url || p.name}-${index}`}\n className=\"relative group\"\n >\n <div\n className={`flex items-center gap-2 p-2 rounded-md border bg-muted/20 ${\n p.isImage ? 'flex-col' : ''\n }`}\n >\n {p.isImage && p.url ? (\n <img\n src={p.url}\n alt={`Attachment ${index + 1}`}\n className=\"w-full h-20 object-cover rounded\"\n loading=\"lazy\"\n />\n ) : (\n <div className=\"w-full text-xs text-muted-foreground truncate\">\n {p.name || 'file'}\n </div>\n )}\n {!p.isImage ? (\n <div className=\"text-[10px] text-muted-foreground truncate\">\n {p.name || 'file'}\n </div>\n ) : null}\n </div>\n <button\n type=\"button\"\n className=\"absolute -top-2 -right-2 h-5 w-5 rounded-full bg-background border opacity-0 group-hover:opacity-100\"\n onClick={() =>\n setAttachments((prev) => prev.filter((_, i) => i !== index))\n }\n aria-label=\"Remove attachment\"\n >\n ×\n </button>\n </div>\n ))}\n </div>\n </div>\n ) : null}\n </div>\n );\n\n function insertMention(user: MentionUserLike) {\n try {\n const view = viewRef.current;\n if (!view) return;\n const to = view.state.selection.from;\n const start = mentionFromPos != null ? mentionFromPos : to - 1;\n const type = view.state.schema.nodes['mention'];\n if (!type) return;\n const node = type.create({ id: user.id, label: user.displayName });\n const tr = view.state.tr.replaceWith(start, to, node);\n view.dispatch(tr);\n const { from } = view.state.selection;\n const nextChar = view.state.doc.textBetween(from, from + 1, '\\n', '\\n');\n if (!/[\\s]/.test(nextChar)) {\n insertTextAtSelection(view, ' ');\n }\n setMentionOpen(false);\n setMentionQuery('');\n } catch {\n /* ignore insert errors */\n }\n }\n\n function updateMentionFromView() {\n if (!enableMentions) {\n if (mentionOpen) setMentionOpen(false);\n return;\n }\n const view = viewRef.current;\n if (!isEditable || !view) return;\n const { from } = view.state.selection;\n const windowStart = Math.max(0, from - 200);\n const text = view.state.doc.textBetween(windowStart, from, '\\n', '\\n');\n const at = text.lastIndexOf('@');\n if (at === -1) {\n if (mentionOpen) setMentionOpen(false);\n return;\n }\n const after = text.slice(at + 1);\n // Allow a single space so users can type \"First Last\" in the mention query.\n // Close the dropdown once they type a second space (or any newline/tab).\n if (/[\\t\\r\\n]/.test(after)) {\n if (mentionOpen) setMentionOpen(false);\n return;\n }\n const spaceCount = (after.match(/ /g) ?? []).length;\n // Allow a single space so users can type \"First Last\" in the mention query.\n // Close the dropdown once they type a second space (or any newline/tab).\n if (spaceCount > 1) {\n if (mentionOpen) setMentionOpen(false);\n return;\n }\n const absoluteFrom = windowStart + at;\n\n // If the user dismissed this mention session with Escape, don't reopen\n // until the `@` position changes (i.e. a new mention is started).\n if (mentionDismissedAtRef.current === absoluteFrom) {\n return;\n }\n // Clear the dismissed marker when a new session starts.\n mentionDismissedAtRef.current = null;\n\n const coords = view.coordsAtPos(from);\n setMentionCoords({\n left: coords.left,\n top: coords.top,\n bottom: coords.bottom,\n });\n setMentionPlacement(getMentionPlacement(coords.top));\n setMentionFromPos(absoluteFrom);\n setMentionQuery(after);\n // Only reset the highlighted option when the query/session changes.\n // Otherwise, arrow key navigation will be immediately overwritten by this updater.\n const queryChanged = after !== mentionQueryRef.current;\n const sessionChanged =\n absoluteFrom !== mentionFromPosRef.current || !mentionOpenRef.current;\n if (queryChanged || sessionChanged) setMentionIndex(0);\n setMentionOpen(true);\n }\n\n function getMentionPlacement(caretTop: number): 'up' | 'down' {\n // Prefer opening upward; flip to downward if there isn't enough space above.\n // Mention menu has max height 15rem (~240px), plus a small gap.\n const maxMenuHeight = 240;\n const gap = 12;\n const minViewportPadding = 8;\n return caretTop - (maxMenuHeight + gap) < minViewportPadding\n ? 'down'\n : 'up';\n }\n}\n\nexport const MarkdownEditor = forwardRef<\n MarkdownEditorHandle,\n MarkdownEditorProps\n>((props, ref) => {\n return (\n <MilkdownProvider>\n <EditorInner {...props} editorHandleRef={ref} />\n </MilkdownProvider>\n );\n});\nMarkdownEditor.displayName = 'MarkdownEditor';\n\nexport default MarkdownEditor;\n","import { type ClassValue, clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import { Slot } from '@radix-ui/react-slot';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport * as React from 'react';\n\nimport { cn } from '@/shared/utils/utils';\n\nconst buttonVariants = cva(\n 'inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50',\n {\n variants: {\n variant: {\n default: 'bg-primary text-primary-foreground hover:bg-primary/90',\n destructive:\n 'bg-destructive text-destructive-foreground hover:bg-destructive/90',\n outline:\n 'border border-input bg-background hover:bg-accent hover:text-accent-foreground',\n secondary:\n 'bg-secondary text-secondary-foreground hover:bg-secondary/80',\n ghost: 'hover:bg-accent hover:text-accent-foreground',\n link: 'text-primary underline-offset-4 hover:underline',\n },\n size: {\n default: 'h-10 px-4 py-2',\n sm: 'h-9 rounded-md px-3',\n lg: 'h-11 rounded-md px-8',\n icon: 'h-10 w-10',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n }\n);\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean;\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : 'button';\n return (\n <Comp\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n />\n );\n }\n);\nButton.displayName = 'Button';\n\nexport { Button, buttonVariants };\n","/** Synthetic id for the \"New Thread\" row in the thread list; links to thread/new route. */\nexport const NEW_THREAD_ID = '__new__';\n\n/** Generate a GUID for a new thread (e.g. when sending first message from thread/new). */\nexport function createThreadId(): string {\n const cryptoObj = (globalThis as unknown as { crypto?: Crypto | undefined })\n ?.crypto;\n return typeof cryptoObj?.randomUUID === 'function'\n ? cryptoObj.randomUUID()\n : `${Date.now()}-${Math.random().toString(16).slice(2)}`;\n}\n\nexport const DRAFT_THREAD_PREFIX = 'draft-'; // legacy only (do not generate new ids with this prefix)\nconst DRAFT_THREAD_STORAGE_KEY = 'ss:draftThreadIds';\n\n// In-memory + sessionStorage: which thread IDs are \"drafts\" (client-only until first message).\n// Used so useThread/loaders skip fetch for drafts; route params + list cache hold the state.\nconst draftThreadIds = new Set<string>();\nlet hydratedFromStorage = false;\n\nfunction isBrowserStorageAvailable() {\n try {\n return typeof window !== 'undefined' && !!window.sessionStorage;\n } catch {\n return false;\n }\n}\n\nfunction hydrateFromStorageOnce() {\n if (hydratedFromStorage) return;\n hydratedFromStorage = true;\n if (!isBrowserStorageAvailable()) return;\n\n try {\n const raw = window.sessionStorage.getItem(DRAFT_THREAD_STORAGE_KEY);\n if (!raw) return;\n const parsed = JSON.parse(raw);\n if (!Array.isArray(parsed)) return;\n for (const id of parsed) {\n if (typeof id === 'string' && id) draftThreadIds.add(id);\n }\n } catch {\n // ignore\n }\n}\n\nfunction persistToStorage() {\n if (!isBrowserStorageAvailable()) return;\n try {\n window.sessionStorage.setItem(\n DRAFT_THREAD_STORAGE_KEY,\n JSON.stringify(Array.from(draftThreadIds))\n );\n } catch {\n // ignore\n }\n}\n\nexport function markDraftThreadId(threadId: string) {\n if (!threadId) return;\n hydrateFromStorageOnce();\n draftThreadIds.add(threadId);\n persistToStorage();\n}\n\nexport function unmarkDraftThreadId(threadId: string) {\n if (!threadId) return;\n hydrateFromStorageOnce();\n draftThreadIds.delete(threadId);\n persistToStorage();\n}\n\nexport function isDraftThreadId(threadId?: string | null): boolean {\n if (!threadId) return false;\n // Backwards compatibility for any old routes/caches using prefixed ids.\n if (threadId.startsWith(DRAFT_THREAD_PREFIX)) return true;\n\n hydrateFromStorageOnce();\n return draftThreadIds.has(threadId);\n}\n\nexport function createDraftThreadId(): string {\n // Must be a GUID-like string (no \"draft-\" prefix) so it can be safely used anywhere\n // a thread id is expected (including APIs that validate GUID format).\n const cryptoObj = (globalThis as unknown as { crypto?: Crypto | undefined })\n ?.crypto;\n return typeof cryptoObj?.randomUUID === 'function'\n ? cryptoObj.randomUUID()\n : `${Date.now()}-${Math.random().toString(16).slice(2)}`;\n}\n","export const flowRunsKeys = {\n all: ['flowruns'] as const,\n\n variables: (flowRunId: string) =>\n [...flowRunsKeys.all, 'variables', { flowRunId }] as const,\n\n mutations: () => [...flowRunsKeys.all, 'mutations'] as const,\n updateVariable: (flowRunId: string, variableName: string) =>\n [\n ...flowRunsKeys.mutations(),\n 'updateVariable',\n { flowRunId, variableName },\n ] as const,\n};\n","import { useMutation, useQueryClient } from '@tanstack/react-query';\nimport { toast } from 'sonner';\n\nimport { useChatService } from '@/platform/chat';\n\nimport { isDraftThreadId } from '@/shared/utils/threadId';\n\nimport { flowRunsKeys } from './queryKeys';\n\n/**\n * Patch a single flow-run variable. Called per-change by the chat\n * variables form. Skips writes for draft threads (no flow-run yet)\n * and invalidates the matching variables cache on success.\n */\nexport function useUpdateFlowRunVariable() {\n const qc = useQueryClient();\n const service = useChatService();\n return useMutation({\n mutationKey: flowRunsKeys.updateVariable('', ''),\n mutationFn: async ({\n flowRunId,\n variableName,\n value,\n }: {\n flowRunId: string;\n variableName: string;\n value: unknown;\n }) => {\n if (isDraftThreadId(flowRunId)) return;\n await service.updateFlowRunVariable({\n flowRunId,\n name: variableName,\n value,\n });\n },\n onSuccess: (_data, variables) => {\n if (variables?.flowRunId) {\n qc.invalidateQueries({\n queryKey: flowRunsKeys.variables(variables.flowRunId),\n });\n }\n },\n onError: (error) => {\n console.error('Failed to update variable:', error);\n toast.error('Failed to update variable');\n throw error;\n },\n });\n}\n","import { queryOptions, useQuery } from '@tanstack/react-query';\n\nimport { useChatService } from '@/platform/chat';\n\nimport { flowRunsKeys } from './queryKeys';\n\n/**\n * Read the current flow-run variable values for a thread. The chat\n * variables form seeds initial UI state from this and rerenders when\n * the cache invalidates.\n */\nexport function useFlowRunVariables(flowRunId?: string) {\n const service = useChatService();\n return useQuery({\n ...queryOptions({\n queryKey: flowRunsKeys.variables(flowRunId ?? ''),\n queryFn: () => service.fetchFlowRunVariables(flowRunId ?? ''),\n staleTime: 30_000,\n }),\n enabled: !!flowRunId,\n });\n}\n","import type { ControlElement, JsonSchema7 } from '@jsonforms/core';\nimport { rankWith } from '@jsonforms/core';\nimport { withJsonFormsControlProps } from '@jsonforms/react';\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\n\ntype AccessUiSchema = { access?: 'Read' | 'Write' };\n\nconst BooleanRenderer: React.FC<import('@jsonforms/core').ControlProps> = ({\n data,\n handleChange,\n path,\n label,\n description,\n errors,\n uischema,\n visible,\n enabled,\n required,\n}) => {\n const [isMobile, setIsMobile] = useState(false);\n\n useEffect(() => {\n const updateIsMobile = () =>\n setIsMobile(typeof window !== 'undefined' && window.innerWidth <= 640);\n updateIsMobile();\n window.addEventListener('resize', updateIsMobile);\n return () => window.removeEventListener('resize', updateIsMobile);\n }, []);\n\n const onToggle = useCallback(() => {\n handleChange(path, !data);\n }, [handleChange, path, data]);\n\n // Build styles that differ by mobile/non-mobile\n const dims = useMemo(\n () =>\n isMobile\n ? {\n w: undefined as string | undefined,\n h: '28px',\n pad: '2px 10px',\n knobSize: 0,\n }\n : {\n w: '44px',\n h: '24px',\n pad: undefined as string | undefined,\n knobSize: 20,\n },\n [isMobile]\n );\n\n if (!visible) return null;\n\n // Read-only if ui schema set access: 'Read'\n const readOnly =\n (uischema as unknown as AccessUiSchema | undefined)?.access === 'Read';\n const isDisabled = !enabled || readOnly;\n\n const hasError = !!errors && errors.length > 0;\n const isChecked = Boolean(data);\n\n return (\n <div\n style={{\n paddingTop: 0,\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n minHeight: isMobile ? '36px' : '40px',\n gap: isMobile ? 6 : 8,\n }}\n >\n {/* Label (hidden on mobile; the button gets aria-label) */}\n {label && !isMobile && (\n <label\n htmlFor={`toggle-${path}`}\n style={{\n fontSize: '0.875rem',\n fontWeight: 500,\n color: hasError ? '#ef4444' : '#475569',\n cursor: isDisabled ? 'not-allowed' : 'pointer',\n userSelect: 'none',\n marginBottom: 0,\n lineHeight: '24px',\n }}\n onKeyDown={\n !isDisabled\n ? (e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onToggle();\n }\n }\n : undefined\n }\n tabIndex={isDisabled ? -1 : 0}\n >\n {label}\n {required && (\n <span style={{ color: '#ef4444', marginLeft: '0.25rem' }}>*</span>\n )}\n </label>\n )}\n\n {/* Toggle Switch */}\n <button\n id={`toggle-${path}`}\n type=\"button\"\n role=\"switch\"\n aria-checked={isChecked}\n aria-label={label}\n onClick={onToggle}\n disabled={isDisabled}\n // Blur the element after *pointer* interactions so the ring doesn't linger.\n onPointerUp={(e: React.PointerEvent<HTMLButtonElement>) => {\n // Keep keyboard focus visible for accessibility; only blur on pointer\n if (\n e.pointerType === 'mouse' ||\n e.pointerType === 'touch' ||\n e.pointerType === 'pen'\n ) {\n (e.currentTarget as HTMLButtonElement).blur();\n }\n }}\n className=\"boolean-switch focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary\"\n style={{\n position: 'relative',\n display: 'inline-flex',\n alignItems: 'center',\n width: dims.w,\n height: dims.h,\n padding: dims.pad,\n borderRadius: isMobile ? '9999px' : '12px',\n border: 'none',\n cursor: isDisabled ? 'not-allowed' : 'pointer',\n backgroundColor: isChecked ? 'hsl(var(--primary))' : '#e5e7eb',\n transition: 'background-color 0.2s ease-in-out',\n outline: 'none',\n opacity: isDisabled ? 0.6 : 1,\n alignSelf: 'center',\n color: isMobile ? (isChecked ? '#ffffff' : '#374151') : undefined,\n fontSize: isMobile ? '0.75rem' : undefined,\n fontWeight: isMobile ? 600 : undefined,\n }}\n >\n {/* Knob for desktop */}\n {!isMobile && (\n <span\n aria-hidden=\"true\"\n style={{\n position: 'absolute',\n left: isChecked ? '22px' : '2px',\n top: '2px',\n width: `${dims.knobSize}px`,\n height: `${dims.knobSize}px`,\n borderRadius: '50%',\n backgroundColor: '#ffffff',\n transition: 'left 0.2s ease-in-out',\n boxShadow: '0 1px 3px rgba(0, 0, 0, 0.1)',\n }}\n />\n )}\n {/* Inline text for mobile (keeps compact width) */}\n {isMobile && (\n <span\n style={{\n padding: '0 2px',\n lineHeight: 1,\n whiteSpace: 'nowrap',\n }}\n >\n {label}\n </span>\n )}\n </button>\n\n {/* Description and Errors */}\n {description && (\n <div\n style={{\n color: '#6b7280',\n fontSize: '0.75rem',\n marginTop: isMobile ? '2px' : '4px',\n }}\n >\n {description}\n </div>\n )}\n\n {hasError && (\n <div\n style={{\n color: '#ef4444',\n fontSize: '0.75rem',\n marginTop: isMobile ? '2px' : '4px',\n }}\n >\n {errors}\n </div>\n )}\n </div>\n );\n};\n\n// Match boolean fields\nexport const booleanRendererTester = rankWith(40, (uischema, schema) => {\n if (uischema.type !== 'Control') return false;\n const scope = (uischema as ControlElement).scope;\n const propertyPath = scope.replace('#/properties/', '');\n const fieldSchema = (schema as JsonSchema7 | undefined)?.properties?.[\n propertyPath\n ] as JsonSchema7 | undefined;\n return fieldSchema?.type === 'boolean';\n});\n\nexport const BooleanRendererControl =\n withJsonFormsControlProps(BooleanRenderer);\n","import type {\n ControlElement,\n ControlProps,\n JsonSchema7,\n} from '@jsonforms/core';\nimport { rankWith } from '@jsonforms/core';\nimport { withJsonFormsControlProps } from '@jsonforms/react';\nimport { FormControl, InputLabel, MenuItem, Select } from '@mui/material';\nimport type { SelectChangeEvent } from '@mui/material/Select';\nimport React, { useCallback } from 'react';\n\ntype AccessUiSchema = { access?: 'Read' | 'Write' };\ntype Option = { const: unknown; title?: string };\n\nfunction hasConst(x: unknown): x is { const: unknown; title?: unknown } {\n return !!x && typeof x === 'object' && 'const' in x;\n}\n\nfunction toOptions(schema: JsonSchema7 | undefined): Option[] {\n if (!schema) return [];\n\n const fromOneOfAnyOf = (arr?: unknown) => {\n if (!Array.isArray(arr)) return [];\n return arr.filter(hasConst).map((s) => ({\n const: s.const,\n title: typeof s.title === 'string' ? s.title : undefined,\n }));\n };\n\n const oneOf = fromOneOfAnyOf(\n (schema as unknown as { oneOf?: unknown }).oneOf\n );\n if (oneOf.length) return oneOf;\n\n const anyOf = fromOneOfAnyOf(\n (schema as unknown as { anyOf?: unknown }).anyOf\n );\n if (anyOf.length) return anyOf;\n\n const enumVals = (schema as unknown as { enum?: unknown }).enum;\n if (Array.isArray(enumVals)) {\n return enumVals.map((v) => ({\n const: v,\n title: typeof v === 'string' ? v : String(v),\n }));\n }\n\n return [];\n}\n\nconst DropdownRenderer: React.FC<ControlProps> = ({\n data,\n handleChange,\n path,\n enabled,\n schema,\n label,\n description,\n errors,\n uischema,\n}) => {\n // Get options from oneOf or anyOf\n const options = toOptions(schema as JsonSchema7 | undefined);\n\n const handleSelectionChange = useCallback(\n (event: SelectChangeEvent<unknown>) => {\n handleChange(path, event.target.value);\n },\n [handleChange, path]\n );\n\n const displayValue = data ?? '';\n\n // Get readOnly from uischema (set when access === 'Read')\n const readOnly =\n (uischema as unknown as AccessUiSchema | undefined)?.access === 'Read';\n const isDisabled = !enabled || readOnly;\n\n return (\n <FormControl\n variant=\"outlined\"\n size=\"small\"\n fullWidth\n error={!!errors}\n disabled={isDisabled}\n className=\"compact-field\"\n sx={{\n minWidth: '220px',\n }}\n >\n <InputLabel\n id={`${path}-label`}\n sx={{\n color: '#6b7280',\n fontSize: '0.875rem',\n fontWeight: 500,\n '&.Mui-focused': {\n color: '#6366f1',\n },\n '&.Mui-error': {\n color: '#ef4444',\n },\n }}\n >\n {label}\n </InputLabel>\n <Select\n labelId={`${path}-label`}\n value={displayValue}\n onChange={handleSelectionChange}\n label={label}\n sx={{\n '& .MuiOutlinedInput-root': {\n backgroundColor: '#fafafa',\n borderRadius: '8px',\n transition: 'all 0.2s ease-in-out',\n height: '40px', // Same height as model dropdown\n '& fieldset': {\n borderColor: '#e5e7eb',\n borderWidth: '1px',\n },\n '&:hover': {\n backgroundColor: '#ffffff',\n '& fieldset': {\n borderColor: '#9ca3af',\n },\n },\n '&.Mui-focused': {\n backgroundColor: '#ffffff',\n '& fieldset': {\n borderColor: '#6366f1',\n borderWidth: '2px',\n },\n },\n '&.Mui-error': {\n '& fieldset': {\n borderColor: '#ef4444',\n },\n },\n },\n '& .MuiSelect-select': {\n backgroundColor: '#fafafa',\n borderRadius: '8px',\n transition: 'all 0.2s ease-in-out',\n height: '40px',\n display: 'flex',\n alignItems: 'center',\n paddingRight: '32px !important',\n '&:hover': {\n backgroundColor: '#ffffff',\n },\n '&.Mui-focused': {\n backgroundColor: '#ffffff',\n },\n },\n '& .MuiOutlinedInput-notchedOutline': {\n borderColor: '#e5e7eb',\n borderWidth: '1px',\n borderRadius: '8px',\n },\n '&:hover .MuiOutlinedInput-notchedOutline': {\n borderColor: '#9ca3af',\n },\n '&.Mui-focused .MuiOutlinedInput-notchedOutline': {\n borderColor: '#6366f1',\n borderWidth: '2px',\n },\n '&.Mui-error .MuiOutlinedInput-notchedOutline': {\n borderColor: '#ef4444',\n },\n '& .MuiSelect-icon': {\n color: '#9ca3af',\n '&:hover': {\n color: '#6b7280',\n },\n },\n }}\n MenuProps={{\n PaperProps: {\n sx: {\n borderRadius: '8px',\n boxShadow:\n '0 10px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)',\n border: '1px solid #e5e7eb',\n marginTop: '4px',\n maxHeight: '280px',\n },\n },\n MenuListProps: {\n sx: {\n padding: 0,\n },\n },\n }}\n >\n {options.map((option, index) => {\n const raw = option.const;\n const key =\n typeof raw === 'string' || typeof raw === 'number'\n ? String(raw)\n : String(index);\n const value =\n typeof raw === 'string' || typeof raw === 'number'\n ? raw\n : String(raw ?? index);\n\n return (\n <MenuItem\n key={key}\n value={value}\n sx={{\n padding: '12px 16px',\n fontSize: '0.875rem',\n borderBottom: '1px solid #f3f4f6',\n '&:last-child': {\n borderBottom: 'none',\n },\n '&:hover': {\n backgroundColor: '#f8fafc',\n },\n '&.Mui-selected': {\n backgroundColor: '#eff6ff',\n '&:hover': {\n backgroundColor: '#dbeafe',\n },\n },\n }}\n >\n {option.title ?? String(raw)}\n </MenuItem>\n );\n })}\n </Select>\n {(description || errors) && (\n <div\n style={{\n fontSize: '0.75rem',\n marginTop: '4px',\n color: errors ? '#ef4444' : '#6b7280',\n }}\n >\n {errors || description}\n </div>\n )}\n </FormControl>\n );\n};\n\n// Create the tester function for JSON Forms\nexport const dropdownRendererTester = rankWith(\n 90, // High priority to override material renderers\n (uischema, schema) => {\n // Check if this is a Control element\n if (uischema.type !== 'Control') {\n return false;\n }\n\n // Extract the property path from the scope\n const propertyPath = (uischema as ControlElement).scope.replace(\n '#/properties/',\n ''\n );\n const fieldSchema = (schema as JsonSchema7 | undefined)?.properties?.[\n propertyPath\n ] as JsonSchema7 | undefined;\n\n if (!fieldSchema) {\n return false;\n }\n\n // Check if this field has oneOf, anyOf, or enum (dropdown indicators)\n const hasDropdownOptions = !!(\n fieldSchema.oneOf ||\n fieldSchema.anyOf ||\n (fieldSchema.enum && Array.isArray(fieldSchema.enum))\n );\n\n // Don't handle model selector fields (they have their own renderer)\n const isModelSelector =\n (typeof fieldSchema === 'object' &&\n fieldSchema &&\n (fieldSchema as unknown as Record<string, unknown>)[\n 'x-model-selector'\n ] === true) ||\n fieldSchema.title === 'ModelId' ||\n fieldSchema.format === 'uuid';\n\n return hasDropdownOptions && !isModelSelector;\n }\n);\n\n// Export the wrapped component\nexport const DropdownRendererControl =\n withJsonFormsControlProps(DropdownRenderer);\n","import {\n rankWith,\n uiTypeIs,\n type Layout,\n type LayoutProps,\n} from '@jsonforms/core';\nimport {\n ResolvedJsonFormsDispatch,\n withJsonFormsLayoutProps,\n} from '@jsonforms/react';\nimport React from 'react';\n\n/**\n * Forces JSONForms HorizontalLayout to render as a responsive CSS grid.\n * This avoids the \"everything stacked vertically\" look when bringing variables back.\n */\nconst GridHorizontalLayout: React.FC<LayoutProps> = (props) => {\n const { uischema, schema, path, visible, renderers, cells } = props;\n if (visible === false) return null;\n\n const layout = uischema as Layout;\n const elements = Array.isArray(layout?.elements) ? layout.elements : [];\n\n return (\n <div className=\"ss-jsonforms-grid\">\n {elements.map((element, idx) => (\n <div className=\"ss-jsonforms-cell\" key={`${path || 'root'}:${idx}`}>\n <ResolvedJsonFormsDispatch\n uischema={element}\n schema={schema}\n path={path}\n renderers={renderers}\n cells={cells}\n />\n </div>\n ))}\n </div>\n );\n};\n\nexport const gridHorizontalLayoutTester = rankWith(\n 1000,\n uiTypeIs('HorizontalLayout')\n);\n\nexport const GridHorizontalLayoutRenderer =\n withJsonFormsLayoutProps(GridHorizontalLayout);\n","import type { ControlProps, RankedTester } from '@jsonforms/core';\nimport { rankWith } from '@jsonforms/core';\nimport { withJsonFormsControlProps } from '@jsonforms/react';\nimport 'ace-builds/src-noconflict/ace';\nimport 'ace-builds/src-noconflict/ext-language_tools';\nimport 'ace-builds/src-noconflict/mode-json';\nimport 'ace-builds/src-noconflict/theme-github';\nimport debounce from 'lodash.debounce';\nimport React, { useEffect, useRef, useState } from 'react';\nimport AceEditor from 'react-ace';\n\ntype AccessUiSchema = { access?: 'Read' | 'Write' };\n\nconst JsonEditorRenderer: React.FC<ControlProps> = ({\n data,\n handleChange,\n path,\n label,\n description,\n errors,\n uischema,\n visible,\n enabled,\n required,\n}) => {\n const [jsonValue, setJsonValue] = useState<string>('');\n const [displayedParseError, setDisplayedParseError] = useState<string | null>(\n null\n );\n const isInitializing = useRef(true);\n const lastValidData = useRef<unknown>(null);\n\n // Debounced function to display error messages\n const debouncedSetDisplayError = useRef(\n debounce((error: string | null) => {\n setDisplayedParseError(error);\n }, 300)\n );\n\n // Convert data to JSON string only on initial load or when external data changes significantly\n useEffect(() => {\n if (\n isInitializing.current ||\n (data !== lastValidData.current && data !== undefined)\n ) {\n try {\n const formatted = JSON.stringify(data, null, 2);\n setJsonValue(formatted || '{}');\n setDisplayedParseError(null);\n debouncedSetDisplayError.current.cancel(); // Cancel any pending error display\n lastValidData.current = data;\n isInitializing.current = false;\n } catch (error) {\n setJsonValue('{}');\n const errorMsg = 'Invalid JSON data';\n setDisplayedParseError(errorMsg);\n isInitializing.current = false;\n }\n }\n }, [data, debouncedSetDisplayError]);\n\n const handleEditorChange = (value: string) => {\n // Always update the editor value to preserve user input and whitespace\n setJsonValue(value);\n\n try {\n const parsed = JSON.parse(value);\n setDisplayedParseError(null);\n debouncedSetDisplayError.current.cancel(); // Cancel any pending error display\n lastValidData.current = parsed;\n handleChange(path, parsed);\n } catch (error) {\n const errorMsg = `Invalid JSON: ${\n error instanceof Error ? error.message : 'Unknown error'\n }`;\n // Debounce the error display so it doesn't show immediately while typing\n debouncedSetDisplayError.current(errorMsg);\n }\n };\n\n // Cleanup debounced functions on unmount\n useEffect(() => {\n const d = debouncedSetDisplayError.current;\n return () => {\n d.cancel();\n };\n }, []);\n\n if (!visible) {\n return null;\n }\n\n // Get readOnly from uischema (set when access === 'Read')\n const readOnly =\n (uischema as unknown as AccessUiSchema | undefined)?.access === 'Read';\n const isDisabled = !enabled || readOnly;\n\n return (\n <div style={{ marginBottom: '1rem' }}>\n {label && (\n <label\n style={{\n display: 'block',\n color: '#475569',\n fontSize: '0.875rem',\n fontWeight: 500,\n marginBottom: '0.375rem',\n }}\n >\n {label}\n {required && (\n <span style={{ color: '#ef4444', marginLeft: '0.25rem' }}>*</span>\n )}\n </label>\n )}\n\n {description && (\n <div\n style={{\n color: '#6b7280',\n fontSize: '0.75rem',\n marginBottom: '0.5rem',\n }}\n >\n {description}\n </div>\n )}\n\n <div\n style={{\n border:\n errors || displayedParseError\n ? '1px solid #ef4444'\n : '1px solid #d1d5db',\n borderRadius: '6px',\n overflow: 'hidden',\n opacity: isDisabled ? 0.6 : 1,\n }}\n >\n <AceEditor\n mode=\"json\"\n theme=\"github\"\n name={`json-editor-${path}`}\n onChange={handleEditorChange}\n value={jsonValue}\n width=\"100%\"\n fontSize={14}\n showPrintMargin={false}\n showGutter={true}\n highlightActiveLine={true}\n readOnly={isDisabled}\n setOptions={{\n enableBasicAutocompletion: true,\n enableLiveAutocompletion: true,\n enableSnippets: false,\n showLineNumbers: true,\n showGutter: false,\n tabSize: 2,\n minLines: 5,\n maxLines: 8,\n wrap: true,\n }}\n style={{\n fontFamily: 'Consolas, Monaco, \"Courier New\", monospace',\n }}\n />\n </div>\n\n {displayedParseError && (\n <div\n style={{\n color: '#ef4444',\n fontSize: '0.75rem',\n marginTop: '0.25rem',\n }}\n >\n {displayedParseError}\n </div>\n )}\n\n {errors && (\n <div\n style={{\n color: '#ef4444',\n fontSize: '0.75rem',\n marginTop: '0.25rem',\n }}\n >\n {errors}\n </div>\n )}\n </div>\n );\n};\n\n// Tester function that matches everything but has the lowest priority\nexport const jsonEditorTester: RankedTester = rankWith(\n 1, // Very low priority - will be used as fallback when no other renderer matches\n () => true // Matches everything\n);\n\n// Enhanced component with JsonForms integration\nexport const JsonEditorRendererControl =\n withJsonFormsControlProps(JsonEditorRenderer);\n","import azureAiIcon from '@lobehub/icons-static-svg/icons/azureai-color.svg';\nimport bedrockIcon from '@lobehub/icons-static-svg/icons/bedrock-color.svg';\nimport claudeIcon from '@lobehub/icons-static-svg/icons/claude-color.svg';\nimport cohereIcon from '@lobehub/icons-static-svg/icons/cohere-color.svg';\nimport deepseekIcon from '@lobehub/icons-static-svg/icons/deepseek-color.svg';\nimport geminiIcon from '@lobehub/icons-static-svg/icons/gemini-color.svg';\nimport huggingfaceIcon from '@lobehub/icons-static-svg/icons/huggingface-color.svg';\nimport metaIcon from '@lobehub/icons-static-svg/icons/meta-color.svg';\nimport microsoftIcon from '@lobehub/icons-static-svg/icons/microsoft-color.svg';\nimport mistralIcon from '@lobehub/icons-static-svg/icons/mistral-color.svg';\nimport openaiIcon from '@lobehub/icons-static-svg/icons/openai.svg';\nimport perplexityIcon from '@lobehub/icons-static-svg/icons/perplexity-color.svg';\nimport qwenIcon from '@lobehub/icons-static-svg/icons/qwen-color.svg';\nimport vertexaiIcon from '@lobehub/icons-static-svg/icons/vertexai-color.svg';\nimport xaiIcon from '@lobehub/icons-static-svg/icons/xai.svg';\n\nimport type { Model } from './model';\n\nconst PUBLISHER_ICONS: Record<string, string> = {\n openai: openaiIcon,\n anthropic: claudeIcon,\n google: geminiIcon,\n meta: metaIcon,\n mistral: mistralIcon,\n microsoft: microsoftIcon,\n deepseek: deepseekIcon,\n cohere: cohereIcon,\n xai: xaiIcon,\n huggingface: huggingfaceIcon,\n amazon: bedrockIcon,\n perplexity: perplexityIcon,\n alibaba: qwenIcon,\n};\n\nconst FOUNDRY_ICONS: Record<string, string> = {\n openai: openaiIcon,\n anthropic: claudeIcon,\n azureopenai: azureAiIcon,\n azure: azureAiIcon,\n azurefoundry: azureAiIcon,\n google: geminiIcon,\n gemini: geminiIcon,\n googlegemini: geminiIcon,\n vertexai: vertexaiIcon,\n huggingface: huggingfaceIcon,\n cohere: cohereIcon,\n};\n\nexport function getModelIcon(model: Model | null | undefined): string | null {\n if (!model) return null;\n const publisher = model.modelPublisher?.toLowerCase();\n if (publisher && PUBLISHER_ICONS[publisher]) {\n return PUBLISHER_ICONS[publisher];\n }\n const foundry = model.modelDeploymentProviderType?.toLowerCase();\n if (foundry && FOUNDRY_ICONS[foundry]) {\n return FOUNDRY_ICONS[foundry];\n }\n return null;\n}\n","export const modelsKeys = {\n all: ['models'] as const,\n\n lists: () => [...modelsKeys.all, 'list'] as const,\n list: (opts?: { search?: string; take?: number; skip?: number }) =>\n [\n ...modelsKeys.lists(),\n {\n search: opts?.search ?? undefined,\n take: opts?.take ?? undefined,\n skip: opts?.skip ?? undefined,\n },\n ] as const,\n\n details: () => [...modelsKeys.all, 'detail'] as const,\n detail: (modelId: string) => [...modelsKeys.details(), { modelId }] as const,\n};\n","import { queryOptions, useQuery } from '@tanstack/react-query';\n\nimport { useChatService } from '@/platform/chat';\n\nimport { modelsKeys } from './queryKeys';\n\n/**\n * List models the user has access to. Drives the model-id renderer in\n * the chat variables form (a searchable dropdown of models).\n */\nexport function useModels({\n search,\n take,\n skip,\n}: { search?: string; take?: number; skip?: number } = {}) {\n const service = useChatService();\n return useQuery(\n queryOptions({\n queryKey: modelsKeys.list({ search, take, skip }),\n queryFn: () => service.fetchModels({ search, take, skip }),\n refetchOnWindowFocus: false,\n })\n );\n}\n","import type {\n ControlElement,\n ControlProps,\n JsonSchema7,\n} from '@jsonforms/core';\nimport { rankWith } from '@jsonforms/core';\nimport { withJsonFormsControlProps } from '@jsonforms/react';\nimport { Autocomplete, TextField } from '@mui/material';\nimport MuiDialog from '@mui/material/Dialog';\nimport MuiDialogContent from '@mui/material/DialogContent';\nimport type { AutocompleteInputChangeReason } from '@mui/material/useAutocomplete';\nimport { Loader2 } from 'lucide-react';\nimport React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\n\nimport { getModelIcon, type Model, useModels } from '@/domains/models';\n\ntype AccessUiSchema = { access?: 'Read' | 'Write' };\n\nconst ModelIdRenderer: React.FC<ControlProps> = ({\n data,\n handleChange,\n path,\n enabled,\n label,\n description,\n errors,\n required,\n uischema,\n}) => {\n const [searchValue, setSearchValue] = useState('');\n const [debouncedSearchValue, setDebouncedSearchValue] = useState('');\n const [isOpen, setIsOpen] = useState(false);\n const debounceTimerRef = useRef<ReturnType<typeof setTimeout> | undefined>(\n undefined\n );\n\n // Debounce search to prevent excessive API calls\n useEffect(() => {\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n\n debounceTimerRef.current = setTimeout(() => {\n setDebouncedSearchValue(searchValue);\n }, 300);\n\n return () => {\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n };\n }, [searchValue]);\n\n // Use debounced search value directly, only search when there's actual input\n const searchTerm = useMemo(() => {\n return debouncedSearchValue && debouncedSearchValue.length > 0\n ? debouncedSearchValue\n : undefined;\n }, [debouncedSearchValue]);\n\n // Fetch models with search functionality\n const { data: modelsData, isLoading } = useModels({\n search: searchTerm,\n take: 1000,\n });\n const [listModels, setListModels] = useState<Model[]>([]);\n useEffect(() => {\n if (modelsData?.data) {\n const sorted = [...modelsData.data].sort((a, b) => {\n const aName = (a.displayName || a.name || '').toLowerCase();\n const bName = (b.displayName || b.name || '').toLowerCase();\n if (aName < bName) return -1;\n if (aName > bName) return 1;\n return 0;\n });\n setListModels(sorted);\n }\n }, [modelsData?.data]);\n\n const selectedModel =\n typeof data === 'string' && data && listModels.length\n ? listModels.find((model) => model.id === data)\n : null;\n\n // Compute the input value to show either the search term or the selected model's name\n const displayInputValue = useMemo(() => {\n // If user is actively searching, show their search input\n if (searchValue) {\n return searchValue;\n }\n // If there's a selected model and no search input, show the model's display name\n if (selectedModel && !searchValue) {\n return selectedModel.displayName || selectedModel.name || '';\n }\n // Otherwise, empty\n return '';\n }, [searchValue, selectedModel]);\n\n const handleModelChange = useCallback(\n (_event: React.SyntheticEvent | null, newValue: Model | null) => {\n if (newValue) {\n handleChange(path, newValue.id);\n } else {\n handleChange(path, undefined);\n }\n // Clear search when selection is made\n setSearchValue('');\n setDebouncedSearchValue('');\n setIsOpen(false);\n },\n [handleChange, path, setIsOpen]\n );\n\n const handleInputChange = useCallback(\n (\n _event: React.SyntheticEvent,\n newInputValue: string,\n reason: AutocompleteInputChangeReason\n ) => {\n // Only update search value when user is typing, not when selecting\n if (reason === 'input') {\n setSearchValue(newInputValue);\n }\n },\n []\n );\n\n const handleOpen = useCallback(() => {\n setIsOpen(true);\n }, []);\n\n const handleClose = useCallback(() => {\n setIsOpen(false);\n // Clear search value when closing dropdown\n setSearchValue('');\n }, []);\n\n const [isMobile, setIsMobile] = useState(\n () => typeof window !== 'undefined' && window.innerWidth <= 640\n );\n\n useEffect(() => {\n const updateIsMobile = () =>\n setIsMobile(typeof window !== 'undefined' && window.innerWidth <= 640);\n window.addEventListener('resize', updateIsMobile);\n return () => window.removeEventListener('resize', updateIsMobile);\n }, []);\n\n // Get readOnly from uischema (set when access === 'Read')\n const readOnly =\n (uischema as unknown as AccessUiSchema | undefined)?.access === 'Read';\n const isDisabled = !enabled || readOnly;\n\n if (isMobile) {\n const iconSrc = getModelIcon(selectedModel);\n return (\n <div className=\"w-full flex justify-center\">\n <button\n type=\"button\"\n disabled={isDisabled}\n onClick={() => setIsOpen(true)}\n className=\"inline-flex items-center gap-2 rounded-full px-3 py-1.5 bg-accent text-foreground/90 hover:bg-accent/80 transition-colors\"\n style={{ width: 'fit-content', maxWidth: '100%' }}\n >\n {iconSrc && <img src={iconSrc} alt=\"Provider\" className=\"h-4 w-4\" />}\n <span className=\"text-sm truncate\">\n {selectedModel\n ? selectedModel.displayName || selectedModel.name\n : label || 'Select model'}\n </span>\n </button>\n\n <MuiDialog\n open={isOpen}\n onClose={() => setIsOpen(false)}\n maxWidth={false}\n slotProps={{\n backdrop: { sx: { backgroundColor: 'rgba(0,0,0,0.5)' } },\n }}\n PaperProps={{\n sx: {\n width: '90vw',\n maxWidth: '384px',\n height: '70vh',\n m: 0,\n p: 0,\n borderRadius: '12px',\n display: 'flex',\n flexDirection: 'column',\n },\n }}\n >\n <MuiDialogContent\n sx={{\n p: 0,\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n }}\n >\n <div className=\"flex flex-col h-full w-full\">\n <div className=\"flex-1 overflow-y-auto w-full max-w-[360px] mx-auto\">\n {isLoading && listModels.length === 0 && (\n <div className=\"flex items-center justify-center py-8\">\n <Loader2 className=\"h-4 w-4 animate-spin text-primary\" />\n </div>\n )}\n <ul className=\"divide-y w-full\">\n {listModels.map((option) => (\n <li key={option.id} className=\"p-0\">\n <button\n type=\"button\"\n className=\"w-full text-left px-3 py-2 hover:bg-accent cursor-pointer\"\n onClick={() => handleModelChange(null, option)}\n >\n <div className=\"flex items-center gap-2\">\n {(() => {\n const icon = getModelIcon(option);\n return icon ? (\n <img\n src={icon}\n alt=\"Provider\"\n className=\"h-4 w-4\"\n />\n ) : null;\n })()}\n <span className=\"text-sm\">\n {option.displayName || option.name}\n </span>\n </div>\n </button>\n </li>\n ))}\n </ul>\n </div>\n <div className=\"px-2 py-1 border-t bg-background flex justify-center\">\n <TextField\n value={searchValue}\n onChange={(e) =>\n setSearchValue((e.target as HTMLInputElement).value)\n }\n placeholder=\"Search models...\"\n size=\"small\"\n className=\"w-full max-w-[360px] m-0\"\n sx={{ m: 0, p: 0 }}\n />\n </div>\n </div>\n </MuiDialogContent>\n </MuiDialog>\n </div>\n );\n }\n\n return (\n <Autocomplete<Model>\n value={selectedModel}\n onChange={handleModelChange}\n inputValue={displayInputValue}\n onInputChange={handleInputChange}\n onOpen={handleOpen}\n onClose={handleClose}\n options={listModels}\n getOptionLabel={(option) => {\n return option.displayName || option.name || '';\n }}\n isOptionEqualToValue={(option, value) => {\n return option.id === value?.id;\n }}\n loading={isLoading}\n disabled={isDisabled}\n clearOnBlur={false}\n selectOnFocus={false}\n handleHomeEndKeys={false}\n blurOnSelect\n filterOptions={(x) => x} // Disable client-side filtering since we handle it server-side\n noOptionsText={\n <div className=\"flex flex-col items-center py-4 text-gray-500\">\n <div className=\"text-sm\">\n {isLoading\n ? 'Loading models...'\n : searchValue\n ? 'No models found'\n : 'Start typing to search models...'}\n </div>\n {searchValue && !isLoading && (\n <div className=\"text-xs mt-1 opacity-75\">\n Try adjusting your search terms\n </div>\n )}\n </div>\n }\n renderInput={(params) => {\n const iconSrc = getModelIcon(selectedModel);\n\n return (\n <TextField\n {...params}\n label={label}\n helperText={description || errors}\n error={!!errors}\n required={required}\n variant=\"outlined\"\n size=\"small\"\n className=\"compact-field\"\n sx={{\n '& .MuiOutlinedInput-root': {\n backgroundColor: '#fafafa',\n borderRadius: '8px',\n transition: 'all 0.2s ease-in-out',\n '& fieldset': {\n borderColor: '#e5e7eb',\n borderWidth: '1px',\n },\n '&:hover': {\n backgroundColor: '#ffffff',\n '& fieldset': {\n borderColor: '#9ca3af',\n },\n },\n '&.Mui-focused': {\n backgroundColor: '#ffffff',\n '& fieldset': {\n borderColor: '#6366f1',\n borderWidth: '2px',\n },\n },\n '&.Mui-error': {\n '& fieldset': {\n borderColor: '#ef4444',\n },\n },\n },\n '& .MuiInputLabel-root': {\n color: '#6b7280',\n fontSize: '0.875rem',\n fontWeight: 500,\n '&.Mui-focused': {\n color: '#6366f1',\n },\n '&.Mui-error': {\n color: '#ef4444',\n },\n },\n '& .MuiFormHelperText-root': {\n fontSize: '0.75rem',\n marginTop: '4px',\n '&.Mui-error': {\n color: '#ef4444',\n },\n },\n }}\n InputProps={{\n ...params.InputProps,\n startAdornment: iconSrc ? (\n <img\n src={iconSrc}\n alt=\"Provider logo\"\n style={{\n width: 20,\n height: 20,\n objectFit: 'contain',\n marginRight: 8,\n flexShrink: 0,\n }}\n />\n ) : null,\n endAdornment: (\n <>\n {isLoading ? (\n <div className=\"flex items-center mr-2\">\n <Loader2 className=\"h-4 w-4 animate-spin text-primary\" />\n </div>\n ) : null}\n {params.InputProps.endAdornment}\n </>\n ),\n }}\n />\n );\n }}\n renderOption={(props, option) => {\n const iconSrc = getModelIcon(option);\n\n return (\n <li\n {...props}\n key={option.id}\n className=\"!px-4 !py-3 hover:!bg-gray-50 cursor-pointer transition-colors duration-150 border-b border-gray-50 last:border-b-0\"\n >\n <div className=\"flex items-center space-x-3\">\n <div className=\"flex h-6 w-6 flex-shrink-0 items-center justify-center\">\n {iconSrc ? (\n <img\n src={iconSrc}\n alt=\"Provider logo\"\n className=\"h-5 w-5 object-contain\"\n />\n ) : (\n <span\n role=\"img\"\n aria-label=\"Provider\"\n className=\"text-muted-foreground text-xs\"\n >\n ⚡\n </span>\n )}\n </div>\n\n <div className=\"flex flex-col space-y-1 flex-1\">\n <div className=\"flex items-center justify-between\">\n <span className=\"font-medium text-gray-900 text-sm leading-tight\">\n {option.displayName || option.name}\n </span>\n {selectedModel?.id === option.id && (\n <div className=\"w-2 h-2 bg-indigo-500 rounded-full flex-shrink-0\"></div>\n )}\n </div>\n {option.displayName && option.name !== option.displayName && (\n <span className=\"text-xs text-gray-500 leading-tight\">\n {option.name}\n </span>\n )}\n </div>\n </div>\n </li>\n );\n }}\n sx={{\n '& .MuiAutocomplete-paper': {\n borderRadius: '8px',\n boxShadow:\n '0 10px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)',\n border: '1px solid #e5e7eb',\n marginTop: '4px',\n '& .MuiAutocomplete-listbox': {\n padding: 0,\n maxHeight: '280px',\n '& .MuiAutocomplete-option': {\n padding: 0,\n minHeight: 'auto',\n '&.Mui-focused': {\n backgroundColor: '#f8fafc !important',\n },\n '&[aria-selected=\"true\"]': {\n backgroundColor: '#eff6ff !important',\n '&.Mui-focused': {\n backgroundColor: '#dbeafe !important',\n },\n },\n },\n },\n },\n '& .MuiAutocomplete-popper': {\n zIndex: 1300,\n },\n '& .MuiAutocomplete-clearIndicator': {\n color: '#9ca3af',\n '&:hover': {\n color: '#6b7280',\n backgroundColor: '#f3f4f6',\n },\n },\n '& .MuiAutocomplete-popupIndicator': {\n color: '#9ca3af',\n '&:hover': {\n color: '#6b7280',\n backgroundColor: '#f3f4f6',\n },\n },\n }}\n />\n );\n};\n\n// Create the tester function for JSON Forms\nexport const modelIdRendererTester = rankWith(\n 100, // Much higher rank to ensure it takes priority\n (uischema, schema) => {\n // Check if this is a Control element (individual field)\n if (uischema.type !== 'Control') {\n return false;\n }\n\n // Extract the property path from the scope (e.g., \"#/properties/Model\" -> \"Model\")\n const propertyPath = (uischema as ControlElement).scope.replace(\n '#/properties/',\n ''\n );\n\n // Get the individual field schema from the root schema\n const fieldSchema = (schema as JsonSchema7 | undefined)?.properties?.[\n propertyPath\n ] as JsonSchema7 | undefined;\n\n if (!fieldSchema) {\n return false;\n }\n\n // Check if this field has the ModelId indicators\n const hasModelSelector =\n typeof fieldSchema === 'object' &&\n fieldSchema &&\n (fieldSchema as unknown as Record<string, unknown>)[\n 'x-model-selector'\n ] === true;\n const hasModelIdTitle = fieldSchema.title === 'ModelId';\n const result = hasModelIdTitle || hasModelSelector;\n\n return result;\n }\n);\n\n// Export the wrapped component\nexport const ModelIdRendererControl =\n withJsonFormsControlProps(ModelIdRenderer);\n","import type {\n ControlElement,\n ControlProps,\n JsonSchema7,\n RankedTester,\n} from '@jsonforms/core';\nimport { rankWith } from '@jsonforms/core';\nimport { withJsonFormsControlProps } from '@jsonforms/react';\nimport React, { useCallback } from 'react';\n\ntype AccessUiSchema = { access?: 'Read' | 'Write' };\n\nconst NumberRenderer: React.FC<ControlProps> = ({\n data,\n handleChange,\n path,\n label,\n description,\n errors,\n schema,\n uischema,\n visible,\n enabled,\n required,\n}) => {\n const isInteger = (schema as JsonSchema7 | undefined)?.type === 'integer';\n\n const handleInputChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n const raw = event.target.value;\n if (raw === '') {\n handleChange(path, undefined);\n return;\n }\n const parsed = isInteger ? parseInt(raw, 10) : parseFloat(raw);\n if (Number.isNaN(parsed)) {\n handleChange(path, undefined);\n return;\n }\n handleChange(path, parsed);\n },\n [handleChange, path, isInteger]\n );\n\n if (!visible) return null;\n\n const readOnly =\n (uischema as unknown as AccessUiSchema | undefined)?.access === 'Read';\n const isDisabled = !enabled || readOnly;\n const hasError = !!errors && errors.length > 0;\n\n const fieldSchema = schema as JsonSchema7 | undefined;\n const min = fieldSchema?.minimum;\n const max = fieldSchema?.maximum;\n const step = isInteger ? 1 : fieldSchema?.multipleOf ?? 'any';\n\n return (\n <div\n className=\"ss-jsonforms-field ss-jsonforms-number\"\n style={{\n display: 'inline-flex',\n flexDirection: 'row',\n alignItems: 'center',\n gap: 8,\n minHeight: '40px',\n }}\n >\n {label && (\n <label\n htmlFor={`number-${path}`}\n style={{\n color: hasError ? '#ef4444' : '#475569',\n fontSize: '0.875rem',\n fontWeight: 500,\n whiteSpace: 'nowrap',\n lineHeight: '24px',\n }}\n >\n {label}\n {required && (\n <span style={{ color: '#ef4444', marginLeft: '0.25rem' }}>*</span>\n )}\n </label>\n )}\n\n <input\n id={`number-${path}`}\n type=\"number\"\n value={data ?? ''}\n onChange={handleInputChange}\n disabled={isDisabled}\n min={min}\n max={max}\n step={step}\n style={{\n width: '80px',\n height: '24px',\n padding: '0 0.5rem',\n border: hasError ? '2px solid #ef4444' : '1px solid #d1d5db',\n borderRadius: '6px',\n fontSize: '0.875rem',\n lineHeight: '24px',\n fontFamily: 'inherit',\n backgroundColor: isDisabled ? '#f9fafb' : '#ffffff',\n color: isDisabled ? '#9ca3af' : '#111827',\n outline: 'none',\n boxSizing: 'border-box',\n }}\n />\n\n {hasError && (\n <div\n style={{\n color: '#ef4444',\n fontSize: '0.75rem',\n }}\n >\n {errors}\n </div>\n )}\n </div>\n );\n};\n\nexport const numberRendererTester: RankedTester = rankWith(\n 40,\n (uischema, schema) => {\n if (uischema.type !== 'Control') return false;\n const propertyPath = (uischema as ControlElement).scope.replace(\n '#/properties/',\n ''\n );\n const fieldSchema = (schema as JsonSchema7 | undefined)?.properties?.[\n propertyPath\n ] as JsonSchema7 | undefined;\n if (!fieldSchema) return false;\n return fieldSchema.type === 'integer' || fieldSchema.type === 'number';\n }\n);\n\nexport const NumberRendererControl = withJsonFormsControlProps(NumberRenderer);\n","import type {\n ControlElement,\n ControlProps,\n JsonSchema7,\n RankedTester,\n} from '@jsonforms/core';\nimport { rankWith } from '@jsonforms/core';\nimport { withJsonFormsControlProps } from '@jsonforms/react';\nimport React, { useCallback, useEffect, useRef } from 'react';\n\ntype AccessUiSchema = { access?: 'Read' | 'Write' };\ntype TextareaUiOptions = {\n placeholder?: string;\n minRows?: number;\n maxRows?: number;\n};\n\nconst TextareaRenderer: React.FC<ControlProps> = ({\n data,\n handleChange,\n path,\n label,\n description,\n errors,\n schema,\n uischema,\n visible,\n enabled,\n required,\n}) => {\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n\n // Auto-resize textarea based on content\n const autoResize = useCallback(() => {\n if (textareaRef.current) {\n textareaRef.current.style.height = 'auto';\n textareaRef.current.style.height = `${Math.min(\n Math.max(textareaRef.current.scrollHeight, 80), // Minimum height of 80px\n 240 // Maximum height of 240px\n )}px`;\n }\n }, []);\n\n useEffect(() => {\n autoResize();\n }, [data, autoResize]);\n\n const handleInputChange = useCallback(\n (event: React.ChangeEvent<HTMLTextAreaElement>) => {\n const newValue = event.target.value;\n handleChange(path, newValue);\n\n // Trigger auto-resize after state update\n setTimeout(autoResize, 0);\n },\n [handleChange, path, autoResize]\n );\n\n if (!visible) {\n return null;\n }\n\n // Get readOnly from uischema (set when access === 'Read')\n const readOnly =\n (uischema as unknown as AccessUiSchema | undefined)?.access === 'Read';\n const isDisabled = !enabled || readOnly;\n const hasError = errors && errors.length > 0;\n\n // Get textarea-specific options from schema\n const textareaOptions =\n ((schema as unknown as Record<string, unknown>)['ui:textarea'] as\n | TextareaUiOptions\n | undefined) ?? {};\n const placeholder =\n textareaOptions.placeholder ||\n (schema as JsonSchema7 | undefined)?.description ||\n `Enter ${label?.toLowerCase() || 'text'}...`;\n const minRows = textareaOptions.minRows || 3;\n\n return (\n <div className=\"ss-jsonforms-field ss-jsonforms-textarea\">\n {label && (\n <label\n style={{\n display: 'block',\n color: hasError ? '#ef4444' : '#475569',\n fontSize: '0.875rem',\n fontWeight: 500,\n marginBottom: '0.375rem',\n }}\n >\n {label}\n {required && (\n <span style={{ color: '#ef4444', marginLeft: '0.25rem' }}>*</span>\n )}\n </label>\n )}\n\n {description && (\n <div\n style={{\n color: '#6b7280',\n fontSize: '0.75rem',\n marginBottom: '0.5rem',\n }}\n >\n {description}\n </div>\n )}\n\n <textarea\n ref={textareaRef}\n value={data || ''}\n onChange={handleInputChange}\n placeholder={placeholder}\n disabled={isDisabled}\n rows={minRows}\n style={{\n width: '100%',\n minHeight: '80px',\n maxHeight: '240px',\n resize: 'vertical',\n padding: '0.75rem',\n border: hasError ? '2px solid #ef4444' : '1px solid #d1d5db',\n borderRadius: '6px',\n fontSize: '16px',\n lineHeight: '1.5',\n fontFamily: 'inherit',\n backgroundColor: isDisabled ? '#f9fafb' : '#ffffff',\n color: isDisabled ? '#9ca3af' : '#111827',\n outline: 'none',\n transition:\n 'border-color 0.2s ease-in-out, box-shadow 0.2s ease-in-out',\n boxShadow: hasError ? '0 0 0 1px #ef4444' : 'none',\n WebkitTextSizeAdjust: '100%',\n }}\n onFocus={(e) => {\n if (!hasError) {\n e.target.style.borderColor = '#6366f1';\n e.target.style.boxShadow = '0 0 0 1px #6366f1';\n }\n }}\n onBlur={(e) => {\n if (!hasError) {\n e.target.style.borderColor = '#d1d5db';\n e.target.style.boxShadow = 'none';\n }\n }}\n />\n\n {hasError && (\n <div\n style={{\n color: '#ef4444',\n fontSize: '0.75rem',\n marginTop: '0.25rem',\n }}\n >\n {errors}\n </div>\n )}\n </div>\n );\n};\n\n// Tester function that makes textarea the default for string fields, except for very short fields\nexport const textareaRendererTester: RankedTester = rankWith(\n 30, // Higher priority than material renderers (20) but lower than specialized ones (100)\n (uischema, schema) => {\n // Check if this is a Control element\n if (uischema.type !== 'Control') {\n return false;\n }\n\n // Extract the property path from the scope\n const propertyPath = (uischema as ControlElement).scope.replace(\n '#/properties/',\n ''\n );\n const fieldSchema = (schema as JsonSchema7 | undefined)?.properties?.[\n propertyPath\n ] as JsonSchema7 | undefined;\n\n if (!fieldSchema || fieldSchema.type !== 'string') {\n return false;\n }\n\n // Explicit single-line indicators - use single line input\n const widget = (fieldSchema as unknown as Record<string, unknown>)[\n 'ui:widget'\n ];\n const hasExplicitSingleLine =\n widget === 'text' ||\n widget === 'input' ||\n fieldSchema.format === 'email' ||\n fieldSchema.format === 'uri' ||\n fieldSchema.format === 'password' ||\n fieldSchema.format === 'uuid' ||\n fieldSchema.enum; // dropdown/select fields\n\n if (hasExplicitSingleLine) {\n return false;\n }\n\n // Very short maxLength suggests single line (about 1 line = ~60 characters)\n const hasVeryShortMaxLength =\n fieldSchema.maxLength && fieldSchema.maxLength < 60;\n\n if (hasVeryShortMaxLength) {\n return false;\n }\n\n if (fieldSchema.oneOf) {\n return false;\n }\n\n // Default to textarea for all other string fields\n return true;\n }\n);\n\n// Enhanced component with JsonForms integration\nexport const TextareaRendererControl =\n withJsonFormsControlProps(TextareaRenderer);\n","import { vanillaCells, vanillaRenderers } from '@jsonforms/vanilla-renderers';\n\nimport {\n BooleanRendererControl,\n booleanRendererTester,\n} from './boolean-renderer';\nimport {\n DropdownRendererControl,\n dropdownRendererTester,\n} from './dropdown-renderer';\nimport {\n GridHorizontalLayoutRenderer,\n gridHorizontalLayoutTester,\n} from './grid-horizontal-layout-renderer';\nimport {\n JsonEditorRendererControl,\n jsonEditorTester,\n} from './json-editor-renderer';\nimport {\n ModelIdRendererControl,\n modelIdRendererTester,\n} from './model-id-renderer';\nimport { NumberRendererControl, numberRendererTester } from './number-renderer';\nimport {\n TextareaRendererControl,\n textareaRendererTester,\n} from './textarea-renderer';\n\nexport const cells = vanillaCells;\n\nexport const renderers = [\n {\n tester: gridHorizontalLayoutTester,\n renderer: GridHorizontalLayoutRenderer,\n },\n { tester: modelIdRendererTester, renderer: ModelIdRendererControl },\n { tester: booleanRendererTester, renderer: BooleanRendererControl },\n { tester: dropdownRendererTester, renderer: DropdownRendererControl },\n { tester: numberRendererTester, renderer: NumberRendererControl },\n { tester: textareaRendererTester, renderer: TextareaRendererControl },\n ...vanillaRenderers,\n { tester: jsonEditorTester, renderer: JsonEditorRendererControl },\n];\n","// VM: hydrate from server on success, or from schema defaults on error OR empty server {}.\nimport type {\n ControlElement,\n JsonSchema7,\n UISchemaElement,\n} from '@jsonforms/core';\nimport { createAjv } from '@jsonforms/core';\nimport * as React from 'react';\n\nimport { useUpdateFlowRunVariable } from '@/domains/flowruns/mutations';\nimport { useFlowRunVariables } from '@/domains/flowruns/queries';\n\nimport { isDraftThreadId } from '@/shared/utils/threadId';\n\nimport { cells, renderers } from './renders/index';\nimport type { WorkspaceLike } from './types';\n\ntype VarsRecord = Record<\n string,\n { schema?: JsonSchema7; access?: 'Read' | 'Write' }\n>;\ntype VmParams = { workspace: WorkspaceLike; threadId: string };\n\n// Layout helper types\ntype VerticalLayout = { type: 'VerticalLayout'; elements: UISchemaElement[] };\ntype HorizontalLayout = {\n type: 'HorizontalLayout';\n elements: UISchemaElement[];\n options?: Record<string, unknown>;\n};\n\ninterface ChatVariablesFormVm {\n schema: JsonSchema7;\n uiSchema: UISchemaElement;\n data: Record<string, unknown> | null;\n renderers: typeof renderers;\n cells: typeof cells;\n ajv: ReturnType<typeof createAjv>;\n onChange: (args: { data: Record<string, unknown> }) => void;\n config: {\n restrict: boolean;\n trim: boolean;\n showUnfocusedDescription: boolean;\n hideRequiredAsterisk: boolean;\n };\n isLoading: boolean;\n isReady: boolean;\n isHydrated: boolean;\n}\n\nfunction buildSimpleSchemaAndUi(\n vars: VarsRecord | undefined,\n threadVars: Record<string, unknown> | undefined,\n useDefaults: boolean\n): {\n schema: JsonSchema7;\n uiSchema: UISchemaElement;\n initialData: Record<string, unknown>;\n} {\n const names = Object.keys(vars || {});\n\n const properties: Record<string, JsonSchema7> = {};\n const controls: ControlElement[] = [];\n const initialData: Record<string, unknown> = {};\n\n for (const name of names) {\n const cfg = vars?.[name] || {};\n const s = (cfg.schema || {}) as JsonSchema7;\n properties[name] = s;\n\n const hasServerKey =\n threadVars !== undefined &&\n Object.prototype.hasOwnProperty.call(threadVars, name);\n\n const val = hasServerKey\n ? threadVars?.[name]\n : useDefaults\n ? (s as unknown as { default?: unknown }).default\n : undefined;\n\n initialData[name] = val;\n\n const control: ControlElement = {\n type: 'Control',\n scope: `#/properties/${name}`,\n };\n if (cfg.access === 'Read') {\n (properties[name] as unknown as { readOnly?: boolean }).readOnly = true;\n (control as unknown as { enabled?: boolean }).enabled = false;\n }\n controls.push(control);\n }\n\n const schema: JsonSchema7 = { type: 'object', properties };\n\n const innerRow: HorizontalLayout = {\n type: 'HorizontalLayout',\n elements: controls as unknown as UISchemaElement[],\n options: { gap: '12px', alignItems: 'flex-start' },\n };\n\n const ui: VerticalLayout = {\n type: 'VerticalLayout',\n elements: [innerRow as unknown as UISchemaElement],\n };\n\n return { schema, uiSchema: ui as unknown as UISchemaElement, initialData };\n}\n\nexport function useChatVariablesFormVm({\n workspace,\n threadId,\n setVariables,\n}: VmParams & {\n setVariables: (variables: Record<string, unknown>) => void;\n}): ChatVariablesFormVm {\n const {\n data: threadVars,\n isLoading,\n isError,\n } = useFlowRunVariables(threadId);\n const { mutate: updateVariableMutation } = useUpdateFlowRunVariable();\n const querySettled = !isLoading && (threadVars !== undefined || isError);\n\n // use defaults if error OR server returned {}\n const shouldUseDefaults =\n isError || (threadVars && Object.keys(threadVars).length === 0);\n\n const built = React.useMemo(() => {\n return buildSimpleSchemaAndUi(\n workspace.variables as VarsRecord,\n threadVars,\n shouldUseDefaults ?? false\n );\n }, [workspace.variables, threadVars, shouldUseDefaults]);\n\n const [data, setData] = React.useState<Record<string, unknown> | null>(null);\n\n React.useEffect(() => {\n if (querySettled) {\n setData(built.initialData);\n setVariables(built.initialData);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [querySettled, built.initialData, setVariables]);\n\n const ajv = React.useMemo(() => createAjv({ useDefaults: false }), []);\n\n const prevRef = React.useRef<Record<string, unknown> | null>(null);\n React.useEffect(() => {\n prevRef.current = data;\n }, [data]);\n\n const onChange = React.useCallback(\n ({ data: next }: { data: Record<string, unknown> }) => {\n if (prevRef.current && !isDraftThreadId(threadId)) {\n const keys = Object.keys((workspace.variables as VarsRecord) || {});\n for (const k of keys) {\n const before = prevRef.current?.[k];\n const after = next?.[k];\n if (before !== after) {\n updateVariableMutation({\n flowRunId: threadId,\n variableName: k,\n value: after,\n });\n }\n }\n }\n setData(next);\n setVariables(next);\n },\n [workspace.variables, setVariables, updateVariableMutation, threadId]\n );\n\n const config = React.useMemo(\n () => ({\n restrict: true,\n trim: false,\n showUnfocusedDescription: true,\n hideRequiredAsterisk: true,\n }),\n []\n );\n\n return {\n schema: built.schema,\n uiSchema: built.uiSchema,\n data,\n renderers,\n cells,\n ajv,\n onChange,\n config,\n isLoading,\n isReady: querySettled,\n isHydrated: data !== null,\n };\n}\n","import { JsonForms } from '@jsonforms/react';\nimport { Loader2 } from 'lucide-react';\nimport { forwardRef, useImperativeHandle } from 'react';\n\nimport { ChatVariablesFormProps, ChatVariablesFormRef } from './types';\nimport { useChatVariablesFormVm } from './VariablesForm.vm';\n\nimport './VariablesForm.css'; // 👈 import the CSS overrides\n\nexport const ChatVariablesForm = forwardRef<\n ChatVariablesFormRef,\n ChatVariablesFormProps & {\n setVariables: (variables: Record<string, unknown>) => void;\n }\n>(({ workspace, threadId, setVariables }, ref) => {\n const vm = useChatVariablesFormVm({ workspace, threadId, setVariables });\n\n useImperativeHandle(ref, () => ({\n hasChanges: () => false,\n getChangedVariables: () => ({}),\n getCurrentVariables: () => vm.data ?? {},\n saveChangedVariables: async () => {\n return;\n },\n }));\n\n if (!workspace.variables || Object.keys(workspace.variables).length === 0)\n return null;\n\n if (!vm.isHydrated) {\n return (\n <div className=\"flex justify-center items-center w-full h-8\">\n <Loader2 className=\"h-4 w-4 animate-spin text-primary\" />\n </div>\n );\n }\n\n return (\n <div className=\"w-full jsonforms-compact\">\n <JsonForms\n schema={vm.schema}\n uischema={vm.uiSchema}\n data={vm.data}\n renderers={vm.renderers}\n cells={vm.cells}\n ajv={vm.ajv}\n onChange={vm.onChange}\n config={vm.config}\n />\n </div>\n );\n});\n","/** Page size used by the sidebar thread list; must match ThreadsList.vm so list cache key is consistent. */\nexport const THREAD_LIST_PAGE_SIZE = 30;\n\nexport const threadsKeys = {\n all: ['threads'] as const,\n\n lists: () => [...threadsKeys.all, 'list'] as const,\n list: (workspaceId: string, opts?: { take?: number; skip?: number }) =>\n [...threadsKeys.lists(), { workspaceId, ...opts }] as const,\n\n details: () => [...threadsKeys.all, 'detail'] as const,\n detail: (workspaceId: string, threadId: string) =>\n [...threadsKeys.details(), { workspaceId, threadId }] as const,\n\n optimisticRunning: (threadId: string) =>\n [...threadsKeys.all, 'optimisticRunning', threadId] as const,\n\n mutations: () => [...threadsKeys.all, 'mutations'] as const,\n setPin: (threadId: string) =>\n [...threadsKeys.mutations(), 'setPin', { threadId }] as const,\n renameThread: (threadId: string) =>\n [...threadsKeys.mutations(), 'renameThread', { threadId }] as const,\n deleteThread: (threadId: string) =>\n [...threadsKeys.mutations(), 'deleteThread', { threadId }] as const,\n};\n","import type { QueryClient } from '@tanstack/react-query';\n\nimport type { MessageThread, ThreadsResponse } from './model';\nimport { threadsKeys } from './queryKeys';\n\ntype ThreadsListCache =\n | ThreadsResponse\n | { pages: ThreadsResponse[]; pageParams: unknown[] };\n\n/**\n * Write a freshly-observed thread (from SignalR or an SSE thread frame)\n * directly into the relevant query caches so subscribers paint without a\n * refetch roundtrip.\n *\n * - Merges into `threadsKeys.detail(workspaceId, thread.id)`.\n * - Splices into every threads-list cache for the workspace, handling both\n * finite `ThreadsResponse` and infinite `{ pages, pageParams }` shapes.\n *\n * Returns `true` when the thread was found in at least one list cache.\n * Callers that need to surface brand-new threads (e.g. another user just\n * created one) can fall back to invalidating the list queries when this\n * returns `false`.\n */\n/**\n * True when a stale summary should be ignored. The guard is intentionally\n * narrow: we only reject writes that would resurrect a settled `running:\n * false` back to `true`. That's the only direction the original race can\n * cause harm in — a stale SignalR `receiveThreadUpdate` arriving after the\n * SSE terminal frame already wrote `false`.\n *\n * Naively rejecting every older-timestamp write breaks the SSE terminal\n * frame itself: `summaryEmittedAt` is derived from the server's\n * `lastUpdatedAt` (DB row timestamp), but mid-flow SignalR broadcasts can\n * carry fresher timestamps than the terminal frame, so a strict\n * \"incoming.ts < existing.ts\" rule rejects the very write that should\n * clear the running indicator. We sidestep that by only flagging writes\n * that change the running flag in the dangerous direction.\n *\n * Equal-or-undefined timestamps always fall through so the function stays\n * a no-op for callers that don't set the field.\n */\nfunction isStaleSummary(\n incoming: Pick<MessageThread, 'summaryEmittedAt' | 'isFlowRunning'>,\n existing:\n | Pick<MessageThread, 'summaryEmittedAt' | 'isFlowRunning'>\n | undefined\n): boolean {\n if (!existing) return false;\n if (typeof existing.summaryEmittedAt !== 'number') return false;\n if (typeof incoming.summaryEmittedAt !== 'number') return false;\n if (incoming.summaryEmittedAt >= existing.summaryEmittedAt) return false;\n // Only block stale writes that would flip a settled \"not running\" back\n // to \"running\". Same-direction or `running → not running` writes go\n // through even when the timestamp is older.\n return existing.isFlowRunning === false && incoming.isFlowRunning === true;\n}\n\nexport function applyThreadToCache(\n qc: QueryClient,\n thread: MessageThread\n): boolean {\n // Reject stale summaries (e.g. SignalR's lagged DB write landing after a\n // fresher SSE thread frame). The detail-cache check is authoritative\n // because every server-emitted summary writes there first.\n const existingDetail = qc.getQueryData<MessageThread>(\n threadsKeys.detail(thread.workSpaceId, thread.id)\n );\n if (isStaleSummary(thread, existingDetail)) {\n return false;\n }\n\n qc.setQueryData<MessageThread>(\n threadsKeys.detail(thread.workSpaceId, thread.id),\n (old) => ({ ...(old ?? thread), ...thread })\n );\n\n let foundInList = false;\n qc.setQueriesData<ThreadsListCache>(\n {\n predicate: (query) => {\n const k = query.queryKey as unknown[];\n return (\n k[0] === 'threads' &&\n k[1] === 'list' &&\n (k[2] as { workspaceId?: string } | undefined)?.workspaceId ===\n thread.workSpaceId\n );\n },\n },\n (old) => {\n if (!old) return old;\n if ('pages' in old && Array.isArray(old.pages)) {\n let changed = false;\n const pages = old.pages.map((page) => {\n if (!page?.data) return page;\n const idx = page.data.findIndex((t) => t.id === thread.id);\n if (idx === -1) return page;\n if (isStaleSummary(thread, page.data[idx])) return page;\n changed = true;\n foundInList = true;\n const nextData = page.data.slice();\n nextData[idx] = { ...nextData[idx], ...thread };\n return { ...page, data: nextData };\n });\n return changed ? { ...old, pages } : old;\n }\n const list = old as ThreadsResponse;\n if (!list.data) return old;\n const idx = list.data.findIndex((t) => t.id === thread.id);\n if (idx === -1) return old;\n if (isStaleSummary(thread, list.data[idx])) return old;\n foundInList = true;\n const nextData = list.data.slice();\n nextData[idx] = { ...nextData[idx], ...thread };\n return { ...list, data: nextData };\n }\n );\n\n return foundInList;\n}\n\n/**\n * Invalidate every threads-list cache for a workspace. Use as a fallback when\n * `applyThreadToCache` didn't find the thread in any list (i.e. brand-new\n * thread) so the sidebar refetches and picks it up.\n */\nexport function invalidateWorkspaceThreadLists(\n qc: QueryClient,\n workspaceId: string\n): void {\n qc.invalidateQueries({\n predicate: (query) => {\n const k = query.queryKey as unknown[];\n return (\n k[0] === 'threads' &&\n k[1] === 'list' &&\n (k[2] as { workspaceId?: string } | undefined)?.workspaceId ===\n workspaceId\n );\n },\n });\n}\n\n/**\n * Client-only flag for \"we just hit send for this thread, server hasn't\n * confirmed yet\". Stored in its own cache cell (not on `MessageThread`)\n * so the SSE gate — which reads server-confirmed `isFlowRunning` from the\n * detail cache — stays unaffected. The unified UI selector\n * `useThreadIsRunning` ORs this with `thread.isFlowRunning` so the composer,\n * message list typing dots, and sidebar dot all light up at the same instant\n * on send and turn off together when the flow's terminal frame arrives.\n */\nexport function setThreadOptimisticRunning(\n qc: QueryClient,\n threadId: string,\n running: boolean\n): void {\n qc.setQueryData<boolean>(threadsKeys.optimisticRunning(threadId), running);\n}\n\n/**\n * Optimistically flip a single thread's `isFlowRunning` flag in every list\n * cache for the workspace (finite + infinite shapes). Used by `useSendMessage`\n * so the sidebar dot lights up instantly without waiting for SignalR — the\n * detail cache is intentionally NOT touched here, since that value gates the\n * thread SSE and must stay server-confirmed.\n */\nexport function setThreadRunningInLists(\n qc: QueryClient,\n workspaceId: string,\n threadId: string,\n running: boolean\n): void {\n qc.setQueriesData<ThreadsListCache>(\n {\n predicate: (query) => {\n const k = query.queryKey as unknown[];\n return (\n k[0] === 'threads' &&\n k[1] === 'list' &&\n (k[2] as { workspaceId?: string } | undefined)?.workspaceId ===\n workspaceId\n );\n },\n },\n (old) => {\n if (!old) return old;\n const patch = (t: MessageThread): MessageThread =>\n t.id === threadId ? { ...t, isFlowRunning: running } : t;\n if ('pages' in old && Array.isArray(old.pages)) {\n let changed = false;\n const pages = old.pages.map((page) => {\n if (!page?.data) return page;\n const idx = page.data.findIndex((t) => t.id === threadId);\n if (idx === -1) return page;\n changed = true;\n return { ...page, data: page.data.map(patch) };\n });\n return changed ? { ...old, pages } : old;\n }\n const list = old as ThreadsResponse;\n if (!list.data) return old;\n const idx = list.data.findIndex((t) => t.id === threadId);\n if (idx === -1) return old;\n return { ...list, data: list.data.map(patch) };\n }\n );\n}\n","import { z } from 'zod';\n\n/** True when the ISO string already carries timezone info (Z or ±HH:MM offset). */\nconst hasTimezone = (s: string) => /Z|[+-]\\d{2}:\\d{2}$/.test(s);\n\n/**\n * Treat an API date string as UTC even when it lacks a trailing \"Z\".\n * If already a Date, returns it as-is (Date stores UTC internally).\n */\nexport function utcDate(value: string | Date): Date {\n if (typeof value === 'string' && !hasTimezone(value)) {\n return new Date(value + 'Z');\n }\n return new Date(value);\n}\n\n/**\n * Zod schema that coerces a Date, ISO string, or numeric timestamp\n * from the API into a Date object, ensuring timezone-less strings\n * are treated as UTC.\n */\nexport const DateFromApi = z.preprocess((val) => {\n if (typeof val === 'string' && !hasTimezone(val)) {\n return val + 'Z';\n }\n return val;\n}, z.coerce.date());\n","import { ChatZod, SignalR } from '@smartspace/api-client';\nimport type { z } from 'zod';\n\nimport { utcDate } from '@/shared/utils/dateFromApi';\n\nimport { MessageThread, ThreadsResponse } from './model';\n\nconst {\n workSpacesThreadResponse: threadsListResponseSchema,\n messageThreadsGetMessageThreadWorkspacesWorkspaceIdMessagethreadsIdResponse:\n threadResponseSchema,\n} = ChatZod;\n\ntype ThreadsResponseDto = z.infer<typeof threadsListResponseSchema>;\ntype ThreadDto = z.infer<typeof threadResponseSchema>;\n\nexport function mapThreadDtoToModel(dto: ThreadDto): MessageThread {\n const lastUpdatedAt = utcDate(dto.lastUpdatedAt);\n return {\n id: dto.id,\n createdAt: utcDate(dto.createdAt),\n createdBy: dto.createdBy ?? '',\n createdByUserId: dto.createdByUserId,\n isFlowRunning: dto.isFlowRunning,\n lastUpdatedAt,\n lastUpdatedByUserId: dto.lastUpdatedByUserId,\n name: dto.name ?? '',\n totalMessages: dto.totalMessages,\n pinned: dto.favorited,\n workSpaceId: dto.workSpaceId,\n summaryEmittedAt: lastUpdatedAt.getTime(),\n };\n}\n\nexport function mapThreadsResponseDtoToModel(\n dto: ThreadsResponseDto\n): ThreadsResponse {\n return { data: dto.data.map(mapThreadDtoToModel), total: dto.total };\n}\n\n/**\n * Map the SignalR `receiveThreadUpdate` payload to our thread model so we\n * can write it straight into the query cache without invalidating + refetching.\n */\nexport function mapSignalRThreadSummaryToModel(\n summary: SignalR.MessageThreadSummary\n): MessageThread {\n const lastUpdatedAt = utcDate(summary.lastUpdatedAt);\n return {\n id: summary.id,\n createdAt: utcDate(summary.createdAt),\n createdBy: summary.createdBy ?? '',\n createdByUserId: summary.createdByUserId,\n isFlowRunning: summary.isFlowRunning,\n lastUpdatedAt,\n lastUpdatedByUserId: summary.lastUpdatedByUserId,\n name: summary.name ?? '',\n totalMessages: summary.totalMessages,\n pinned: summary.favorited,\n workSpaceId: summary.workSpaceId,\n summaryEmittedAt: lastUpdatedAt.getTime(),\n };\n}\n","import type { QueryClient } from '@tanstack/react-query';\nimport {\n queryOptions,\n skipToken,\n useQuery,\n useQueryClient,\n} from '@tanstack/react-query';\n\nimport { useChatService } from '@/platform/chat';\nimport type { ChatService } from '@/platform/chat';\n\nimport { isDraftThreadId } from '@/shared/utils/threadId';\n\nimport type { MessageThread } from './model';\nimport { ThreadsResponse } from './model';\nimport { threadsKeys } from './queryKeys';\n\nexport const threadDetailOptions = ({\n service,\n workspaceId,\n threadId,\n}: {\n service: ChatService;\n workspaceId: string;\n threadId: string;\n}) =>\n queryOptions({\n queryKey: threadsKeys.detail(workspaceId, threadId),\n queryFn: () => service.fetchThread(workspaceId, threadId),\n refetchOnWindowFocus: false,\n staleTime: 60_000,\n });\n\n/**\n * Derive placeholder thread from list cache for instant detail display (e.g. drafts).\n * Searches all list caches for this workspace (infinite and non-infinite).\n */\nexport function getThreadPlaceholderFromListCache(\n queryClient: QueryClient,\n workspaceId: string,\n threadId: string\n): MessageThread | undefined {\n const entries = queryClient.getQueriesData<\n ThreadsResponse | { pages: ThreadsResponse[] }\n >({\n queryKey: threadsKeys.lists(),\n });\n for (const [, data] of entries) {\n if (!data) continue;\n // Infinite query shape\n if (\n typeof data === 'object' &&\n 'pages' in data &&\n Array.isArray(data.pages)\n ) {\n for (const page of data.pages) {\n const found = page?.data?.find?.((t) => t.id === threadId);\n if (found) return found;\n }\n continue;\n }\n // Non-infinite shape\n const list = data as ThreadsResponse;\n if (list?.data?.length) {\n const found = list.data.find((t) => t.id === threadId);\n if (found) return found;\n }\n }\n return undefined;\n}\n\nexport const useThread = ({\n workspaceId,\n threadId,\n enabled = true,\n}: {\n workspaceId: string;\n threadId: string;\n enabled?: boolean;\n}) => {\n const service = useChatService();\n const queryClient = useQueryClient();\n const canFetch =\n enabled && !!workspaceId && !!threadId && !isDraftThreadId(threadId);\n const placeholderData = getThreadPlaceholderFromListCache(\n queryClient,\n workspaceId,\n threadId\n );\n return useQuery({\n ...threadDetailOptions({ service, workspaceId, threadId }),\n enabled: canFetch,\n placeholderData,\n });\n};\n\n/**\n * Unified \"is this thread running?\" signal for UI consumers (composer,\n * message list typing dots, sidebar dot). ORs the client-only optimistic\n * flag (set the instant the user hits send) with server-confirmed\n * `isFlowRunning` from the detail cache, so all three indicators start\n * and stop on the same render. The optimistic cell is cleared by\n * `useSendMessage` once POST returns and the detail cache holds the\n * authoritative value.\n */\nexport const useThreadIsRunning = (\n workspaceId: string | undefined,\n threadId: string | undefined\n): boolean => {\n const queryClient = useQueryClient();\n\n // Subscribe to the detail cache without ever fetching. SSE/SignalR populate\n // it for the active thread via applyThreadToCache; for every other thread\n // the slot stays empty and we fall back to the list cache. Avoids the N+1\n // burst of detail GETs that fired when every sidebar ThreadItem ran its\n // own useThread.\n const { data: detailThread } = useQuery<MessageThread | undefined>({\n queryKey: threadsKeys.detail(workspaceId ?? '', threadId ?? ''),\n queryFn: skipToken,\n });\n\n // List cache is the authoritative source for sidebar items. Re-evaluated\n // every render — ThreadsList subscribes to the list query, so any\n // applyThreadToCache write re-renders this component with fresh data.\n const listThread =\n workspaceId && threadId\n ? getThreadPlaceholderFromListCache(queryClient, workspaceId, threadId)\n : undefined;\n\n const { data: optimistic } = useQuery({\n queryKey: threadsKeys.optimisticRunning(threadId ?? ''),\n queryFn: () => false,\n initialData: false,\n staleTime: Infinity,\n enabled: !!threadId,\n });\n\n return !!optimistic || !!(detailThread ?? listThread)?.isFlowRunning;\n};\n","/**\n * Safe wrapper around `crypto.randomUUID()` with a timestamp-based fallback\n * for environments that don't expose the Web Crypto API (e.g. non-secure\n * contexts, old Node test runners, JSDOM without the flag).\n *\n * The fallback is intentionally detectable: IDs start with the current\n * millisecond timestamp, making it trivially obvious in logs/tests when the\n * real API is unavailable. It is not cryptographically strong — use it only\n * for transient optimistic-UI identifiers that are discarded once the server\n * responds.\n */\nexport function randomUUID(): string {\n const cryptoObj = (globalThis as unknown as { crypto?: Crypto | undefined })\n ?.crypto;\n return typeof cryptoObj?.randomUUID === 'function'\n ? cryptoObj.randomUUID()\n : `${Date.now()}-${Math.random().toString(16).slice(2)}`;\n}\n","export enum MessageValueType {\n OUTPUT = 'Output',\n INPUT = 'Input',\n}\n\nexport enum MessageResponseSourceType {\n BlobInternal = 'BlobInternal',\n WebExternal = 'WebExternal',\n File = 'File',\n URL = 'URL',\n}\n","// src/domains/messages/queryKeys.ts\nexport const messagesKeys = {\n all: ['messages'] as const,\n\n lists: () => [...messagesKeys.all, 'list'] as const,\n list: (threadId: string) => [...messagesKeys.lists(), { threadId }] as const,\n\n details: () => [...messagesKeys.all, 'detail'] as const,\n detail: (messageId: string) =>\n [...messagesKeys.details(), { messageId }] as const,\n\n infinite: (threadId: string) =>\n [...messagesKeys.lists(), 'infinite', { threadId }] as const,\n};\n\nexport const messagesMutationsKeys = {\n all: ['messages', 'mutations'] as const,\n\n send: () => [...messagesMutationsKeys.all, 'send'] as const,\n addInput: () => [...messagesMutationsKeys.all, 'addInput'] as const,\n};\n","import { useMutation, useQueryClient } from '@tanstack/react-query';\nimport { toast } from 'sonner';\n\nimport { useChatIdentity, useChatService } from '@/platform/chat';\n\n\nimport { FileInfo } from '@/domains/files';\nimport {\n type MessageThread,\n setThreadOptimisticRunning,\n setThreadRunningInLists,\n threadsKeys,\n} from '@/domains/threads';\n\nimport { randomUUID } from '@/shared/utils/randomUUID';\n\nimport { MessageValueType } from './enums';\nimport { Message, MessageContentItem } from './model';\nimport { messagesKeys } from './queryKeys';\n\n/**\n * Reconcile an optimistic placeholder with a server-confirmed message.\n *\n * Drops every entry flagged `optimistic: true` from `old`, then merges\n * `incoming` into the remaining list:\n *\n * - **No match by id** → append.\n * - **Match exists** → behaviour controlled by `onDuplicate`:\n * - `keep-existing` (default): leave the existing entry untouched. Used by\n * `useSendMessage` so a richer SSE-delivered version isn't overwritten\n * by the sparse `POST /Messages/start` response.\n * - `replace`: overwrite the existing entry with `incoming`. Used by\n * `useAddInputToMessage`, where the mutation response carries the\n * latest server state we want to commit.\n */\nfunction reconcileWithMessage(\n old: Message[],\n incoming: Message,\n onDuplicate: 'keep-existing' | 'replace' = 'keep-existing'\n): Message[] {\n const stable = old.filter((m) => !m.optimistic);\n const idx = stable.findIndex((m) => m.id === incoming.id);\n if (idx === -1) return [...stable, incoming];\n if (onDuplicate === 'keep-existing') return stable;\n const copy = stable.slice();\n copy[idx] = incoming;\n return copy;\n}\n\ntype SendArgs = {\n workspaceId: string;\n threadId: string;\n contentList?: MessageContentItem[];\n files?: FileInfo[];\n variables?: Record<string, unknown>;\n};\n\nexport function useSendMessage() {\n const qc = useQueryClient();\n const { userId, displayName: userName } = useChatIdentity();\n const service = useChatService();\n\n return useMutation<void, Error, SendArgs>({\n mutationFn: async ({\n workspaceId,\n threadId,\n contentList,\n files,\n variables,\n }) => {\n if (!threadId) throw new Error('Thread ID is required');\n if (!workspaceId) throw new Error('Workspace ID is required');\n\n // Optimistic message\n const optimistic: Message = {\n id: `temp-${randomUUID()}`,\n values: [\n {\n id: `temp-${randomUUID()}-prompt`,\n type: MessageValueType.INPUT,\n name: 'prompt',\n value: contentList,\n channels: {},\n createdAt: new Date(),\n createdBy: userName || 'You',\n createdByUserId: userId ?? undefined,\n },\n ...(files?.length\n ? [\n {\n id: `temp-${randomUUID()}-files`,\n type: MessageValueType.INPUT,\n name: 'files',\n value: files,\n channels: {},\n createdAt: new Date(),\n createdBy: userName || 'You',\n createdByUserId: userId ?? undefined,\n },\n ]\n : []),\n ...(variables && Object.keys(variables).length\n ? [\n {\n id: `temp-${randomUUID()}-vars`,\n type: MessageValueType.INPUT,\n name: 'variables',\n value: variables,\n channels: {},\n createdAt: new Date(),\n createdBy: userName || 'You',\n createdByUserId: userId ?? undefined,\n },\n ]\n : []),\n ],\n createdAt: new Date(),\n createdBy: userName || 'You',\n createdByUserId: userId ?? undefined,\n optimistic: true,\n };\n\n // add optimistic into cache\n qc.setQueryData<Message[]>(messagesKeys.list(threadId), (old = []) => [\n ...old,\n optimistic,\n ]);\n\n // Light up every running indicator (composer spinner, message-list\n // typing dots, sidebar dot) on the same render. The optimistic flag\n // lives in its own cache cell, so the SSE gate — which reads server-\n // confirmed `isFlowRunning` from the detail cache — stays untouched\n // and we don't open the stream before the backend has actually\n // started the flow. The list-cache patch keeps cross-tab SignalR\n // semantics consistent for sidebars that aren't reading the unified\n // selector.\n setThreadOptimisticRunning(qc, threadId, true);\n setThreadRunningInLists(qc, workspaceId, threadId, true);\n\n // cancel in-flight refetches for this list so they don't race the optimistic insert\n await qc.cancelQueries({ queryKey: messagesKeys.list(threadId) });\n\n let realMessage: Message;\n try {\n realMessage = await service.sendMessage({\n workspaceId,\n threadId,\n contentList,\n files,\n variables,\n });\n } catch (err) {\n // rollback: remove optimistics, undo the running flags\n qc.setQueryData<Message[]>(messagesKeys.list(threadId), (old = []) =>\n old.filter((x) => !x.optimistic)\n );\n setThreadOptimisticRunning(qc, threadId, false);\n setThreadRunningInLists(qc, workspaceId, threadId, false);\n toast.error('There was an error posting your message');\n throw err;\n }\n\n // Reconcile the optimistic placeholder with the server's realMessage\n // in place. We previously replaced the cache with `[realMessage]` and\n // relied on the SSE snapshot to restore history, but with the (now\n // in use) `/Messages/start` endpoint the POST resolves in ~50ms\n // while the SSE snapshot can take a few hundred ms longer; the gap\n // was producing a visible \"all old messages flicker\" the moment the\n // user hit send. `reconcileWithMessage`'s default `keep-existing`\n // duplicate strategy ensures that if the SSE happened to deliver\n // realMessage first (carrying richer in-progress state) we don't\n // overwrite it with the sparse POST response.\n qc.setQueryData<Message[]>(messagesKeys.list(threadId), (old = []) =>\n reconcileWithMessage(old, realMessage)\n );\n\n // POST returned successfully — the server has accepted the message\n // and the flow is now running. Mirror that in the detail cache so:\n // 1. The composer doesn't briefly drop its \"running\" indicator\n // between mutation resolution and the SignalR receiveThreadUpdate\n // broadcast (which can lag by a few hundred ms).\n // 2. The thread SSE gate (which reads this value) opens immediately\n // instead of waiting for SignalR to flip it.\n // SignalR / SSE thread frames will overwrite this with the authoritative\n // value as they arrive.\n qc.setQueryData<MessageThread>(\n threadsKeys.detail(workspaceId, threadId),\n (old) => (old ? { ...old, isFlowRunning: true } : old)\n );\n\n // Detail cache now holds the server-confirmed truth — drop the\n // optimistic flag so the unified selector relies purely on\n // `isFlowRunning` from here. SSE/SignalR terminal frames will flip\n // it false to stop every indicator together.\n setThreadOptimisticRunning(qc, threadId, false);\n\n // Reconcile thread list ordering / last-message preview and thread detail\n // (isFlowRunning). Message content continues to arrive via the thread SSE.\n qc.invalidateQueries({\n predicate: (query) => {\n const k = query.queryKey as unknown[];\n return (\n k[0] === 'threads' &&\n k[1] === 'list' &&\n (k[2] as { workspaceId?: string })?.workspaceId === workspaceId\n );\n },\n });\n qc.invalidateQueries({\n queryKey: threadsKeys.detail(workspaceId, threadId),\n });\n },\n retry: false,\n });\n}\n\ntype AddInputArgs = {\n workspaceId?: string; // only needed if you invalidate thread lists\n threadId: string;\n messageId: string;\n name: string;\n value: unknown;\n channels: Record<string, number> | null;\n};\n\nexport function useAddInputToMessage() {\n const qc = useQueryClient();\n const { userId, displayName: userName } = useChatIdentity();\n const service = useChatService();\n\n const addInputToMessageMutation = useMutation<\n Message,\n Error,\n AddInputArgs,\n { previousMessages: Message[] }\n >({\n onMutate: async ({ threadId, messageId, name, value, channels }) => {\n // Cancel in-flight refetches so they don't overwrite the optimistic patch.\n await qc.cancelQueries({ queryKey: messagesKeys.list(threadId) });\n\n // Snapshot before mutating — used for rollback.\n const previousMessages =\n qc.getQueryData<Message[]>(messagesKeys.list(threadId)) ?? [];\n\n // Apply optimistic patch.\n qc.setQueryData<Message[]>(messagesKeys.list(threadId), (old = []) =>\n old.map((m) =>\n m.id === messageId\n ? {\n ...m,\n values: [\n ...(m.values ?? []),\n {\n id: `temp-${randomUUID()}-add`,\n type: MessageValueType.INPUT,\n name,\n value,\n channels: channels ?? {},\n createdAt: new Date(),\n createdBy: userName || 'You',\n createdByUserId: userId ?? undefined,\n },\n ],\n }\n : m\n )\n );\n\n return { previousMessages };\n },\n mutationFn: async ({ threadId, messageId, name, value, channels }) => {\n if (!threadId) throw new Error('Thread ID is required');\n\n return await service.addInputToMessage({\n messageId,\n name,\n value,\n channels,\n });\n },\n onSuccess: (message, { threadId }) => {\n qc.setQueryData<Message[]>(messagesKeys.list(threadId), (old = []) =>\n reconcileWithMessage(old, message, 'replace')\n );\n },\n onError: (_e, { threadId }, context) => {\n // Restore the pre-mutation snapshot.\n if (context) {\n qc.setQueryData<Message[]>(\n messagesKeys.list(threadId),\n context.previousMessages\n );\n }\n toast.error('There was an error posting your form input');\n },\n retry: false,\n });\n\n return {\n addInputToMessageMutation,\n };\n}\n","export const workspaceKeys = {\n all: ['workspaces'] as const,\n\n list: (searchTerm?: string) =>\n [...workspaceKeys.all, 'list', searchTerm ?? ''] as const,\n\n // single workspace by id\n byId: (workspaceId: string) =>\n [...workspaceKeys.all, 'byId', workspaceId] as const,\n\n // taggable users for a given workspace\n taggableUsers: (workspaceId: string) =>\n [...workspaceKeys.all, 'taggableUsers', workspaceId] as const,\n};\n","import { queryOptions, useQuery } from '@tanstack/react-query';\n\nimport { useChatService } from '@/platform/chat';\nimport type { ChatService } from '@/platform/chat';\n\nimport type { MentionUser, Workspace } from './model';\nimport { workspaceKeys } from './queryKeys';\n\nexport const workspaceDetailOptions = ({\n service,\n workspaceId,\n}: {\n service: ChatService;\n workspaceId: string;\n}) =>\n queryOptions<Workspace>({\n queryKey: workspaceKeys.byId(workspaceId),\n queryFn: () => service.fetchWorkspace(workspaceId),\n staleTime: 30_000,\n });\n\nexport function useWorkspace(workspaceId: string) {\n const service = useChatService();\n return useQuery({\n ...workspaceDetailOptions({ service, workspaceId }),\n enabled: !!workspaceId,\n });\n}\n\nexport const taggableUsersOptions = ({\n service,\n workspaceId,\n}: {\n service: ChatService;\n workspaceId: string;\n}) =>\n queryOptions<MentionUser[]>({\n queryKey: workspaceKeys.taggableUsers(workspaceId),\n queryFn: () => service.fetchTaggableUsers(workspaceId),\n staleTime: 30_000,\n });\n\nexport function useTaggableWorkspaceUsers(workspaceId: string) {\n const service = useChatService();\n return useQuery(taggableUsersOptions({ service, workspaceId }));\n}\n","import { useEffect, useState } from 'react';\n\nconst MOBILE_BREAKPOINT = 1100;\n\nexport function useIsMobile() {\n const getIsMobile = () =>\n typeof window !== 'undefined'\n ? window.innerWidth < MOBILE_BREAKPOINT\n : false;\n const [isMobile, setIsMobile] = useState<boolean>(getIsMobile());\n\n // Listen for window size changes\n useEffect(() => {\n const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);\n\n const onChange = () => {\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);\n };\n\n mql.addEventListener('change', onChange);\n\n return () => mql.removeEventListener('change', onChange);\n }, []);\n\n return isMobile;\n}\n","import { useMemo, useState } from 'react';\n\nimport { useChatContext } from '@/platform/chat';\n\nimport { useSendMessage } from '@/domains/messages/mutations';\nimport { useThreadIsRunning } from '@/domains/threads/queries';\nimport { useWorkspace } from '@/domains/workspaces/queries';\n\nimport { useIsMobile } from '@/shared/hooks/useIsMobile';\nimport { isDraftThreadId } from '@/shared/utils/threadId';\n\n/** Public shape exported to the UI component */\nexport type MessageComposerVm = ReturnType<typeof useMessageComposerVm>;\n\nexport type MessageComposerVmProps = {\n hasAttachments?: boolean;\n isUploadingFiles?: boolean;\n};\n\nexport function useMessageComposerVm(props: MessageComposerVmProps = {}) {\n const { workspaceId, threadId } = useChatContext();\n const [isFullscreen, setIsFullscreen] = useState(false);\n const isDraftThread = isDraftThreadId(threadId);\n\n // Message + attachments state (owned by VM)\n const [newMessage, setNewMessage] = useState('');\n const [variables, setVariables] = useState<Record<string, unknown>>({});\n\n // Data/UX context\n const isMobile = useIsMobile();\n const { data: workspace } = useWorkspace(workspaceId);\n const isRunning = useThreadIsRunning(workspaceId, threadId);\n\n const isUploadingFiles = props.isUploadingFiles ?? false;\n\n const sendMessage = useSendMessage();\n\n /** Derived: can we send? */\n const sendDisabled = useMemo(() => {\n const nothingToSend = !newMessage.trim() && !props.hasAttachments;\n const flowBlocked = isRunning || sendMessage.isPending;\n return isUploadingFiles || flowBlocked || nothingToSend;\n }, [\n isUploadingFiles,\n isRunning,\n sendMessage.isPending,\n newMessage,\n props.hasAttachments,\n ]);\n\n const internalSend = (\n text: string,\n files?: { id: string; name: string }[]\n ) => {\n if (!workspaceId || !threadId) return;\n const trimmed = text.trim();\n const contentList = trimmed\n ? [{ text: trimmed, image: undefined }]\n : undefined;\n const vars =\n variables && Object.keys(variables).length > 0 ? variables : undefined;\n sendMessage.mutate({\n workspaceId,\n threadId,\n contentList,\n files,\n variables: vars,\n });\n setNewMessage('');\n };\n\n /**\n * Can we send given the provided text/files right now?\n * Kept separate from `sendDisabled` (which drives the UI button) so callers\n * can bypass the React-state-based check when they have a fresher text value —\n * e.g. when reading directly from the editor at Enter time, since the Milkdown\n * `markdownUpdated` listener is debounced by 200ms and React state can lag.\n */\n const canSend = (text: string, files?: { id: string; name: string }[]) => {\n const hasFiles = (files?.length ?? 0) > 0 || !!props.hasAttachments;\n const nothingToSend = !text.trim() && !hasFiles;\n const flowBlocked = isRunning || sendMessage.isPending;\n return !(isUploadingFiles || flowBlocked || nothingToSend);\n };\n\n /**\n * Returns true when the message was dispatched, false when blocked.\n * Callers use the return value to decide whether to clear local UI state.\n */\n const handleSendMessage = (\n text: string,\n files?: { id: string; name: string }[]\n ): boolean => {\n if (!canSend(text, files)) return false;\n internalSend(text, files);\n return true;\n };\n\n return {\n // text + handlers\n newMessage,\n setNewMessage,\n handleSendMessage,\n isSending: isRunning,\n supportsFiles: !!workspace?.supportsFiles,\n disabled: isRunning,\n isDraftThread,\n variables,\n setVariables,\n\n // Thread/workspace context\n workspace,\n workspaceId,\n threadId,\n\n // UI/UX state\n isMobile,\n isFullscreen,\n setIsFullscreen,\n\n // derived\n sendDisabled,\n };\n}\n","import MuiButton from '@mui/material/Button';\nimport IconButton from '@mui/material/IconButton';\nimport {\n ArrowBigUp,\n Check,\n FileArchive,\n FileAudio,\n FileCode,\n FileImage,\n FileSpreadsheet,\n FileText,\n FileVideo,\n Minimize2,\n Paperclip,\n Presentation,\n X,\n} from 'lucide-react';\nimport type * as React from 'react';\nimport { useEffect, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport type { FileInfo } from '@/domains/files/model';\nimport { useFileMutations } from '@/domains/files/mutations';\n\nimport type { MarkdownEditorHandle } from '@/shared/markdown/MarkdownEditor';\nimport { MarkdownEditor } from '@/shared/markdown/MarkdownEditor';\nimport { Button as UIButton } from '@/shared/mui-compat/button';\n\nimport { ChatVariablesForm } from '@/chat-variables/VariablesForm';\n\nimport { useMessageComposerVm } from './MessageComposer.vm';\n\ndeclare global {\n interface Window {\n __ssDownloadFile?: (id: string) => Promise<string>;\n }\n}\n\nconst imageExtensions = new Set([\n 'jpg',\n 'jpeg',\n 'png',\n 'gif',\n 'webp',\n 'bmp',\n 'svg',\n]);\n\nfunction getExtension(fileName: string) {\n const parts = (fileName || '').split('.');\n return (parts.length > 1 ? parts[parts.length - 1] : '').toLowerCase();\n}\n\nfunction isLikelyImageFile(fileName: string) {\n return imageExtensions.has(getExtension(fileName));\n}\n\nfunction getFileIcon(fileName: string) {\n const ext = getExtension(fileName);\n\n if (imageExtensions.has(ext)) return FileImage;\n if (['mp4', 'avi', 'mov', 'wmv', 'flv', 'webm', 'mkv'].includes(ext))\n return FileVideo;\n if (['mp3', 'wav', 'flac', 'aac', 'ogg', 'wma'].includes(ext))\n return FileAudio;\n if (['zip', 'rar', '7z', 'tar', 'gz', 'bz2'].includes(ext))\n return FileArchive;\n if (\n [\n 'js',\n 'ts',\n 'jsx',\n 'tsx',\n 'py',\n 'java',\n 'cpp',\n 'c',\n 'cs',\n 'php',\n 'html',\n 'css',\n 'json',\n 'xml',\n 'md',\n ].includes(ext)\n )\n return FileCode;\n if (['xlsx', 'xls', 'csv'].includes(ext)) return FileSpreadsheet;\n if (['pptx', 'ppt'].includes(ext)) return Presentation;\n return FileText;\n}\n\nexport type MessageComposerProps = {\n /** Mirrors `MessageList`'s `expandedLayout`. See its docs. */\n expandedLayout?: boolean;\n};\n\nexport default function MessageComposer({\n expandedLayout = false,\n}: MessageComposerProps = {}) {\n const editorRef = useRef<MarkdownEditorHandle | null>(null);\n const fileInputRef = useRef<HTMLInputElement | null>(null);\n // Milkdown isn't fully controlled by `value`, so we force-remount the editor after sending to guarantee a visual clear.\n const [editorKey, setEditorKey] = useState(0);\n\n type AttachmentItem = {\n key: string;\n name: string;\n ext: string;\n isImage: boolean;\n /** Local object URL for image preview (revoked on removal/clear) */\n previewUrl?: string;\n status: 'uploading' | 'done' | 'error';\n fileId?: string;\n };\n\n const [attachments, setAttachments] = useState<AttachmentItem[]>([]);\n const previewUrlsRef = useRef<Record<string, string>>({});\n const [uploadingCount, setUploadingCount] = useState(0);\n\n const uploadedAttachments: FileInfo[] = attachments\n .filter((a) => a.status === 'done' && a.fileId)\n .map((a) => ({ id: a.fileId as string, name: a.name }));\n\n const isUploadingAttachments = uploadingCount > 0;\n\n const vm = useMessageComposerVm({\n hasAttachments: uploadedAttachments.length > 0,\n isUploadingFiles: isUploadingAttachments,\n });\n\n const {\n // context\n workspace,\n workspaceId,\n threadId,\n isMobile,\n\n // text\n newMessage,\n setNewMessage,\n handleSendMessage,\n isSending,\n disabled,\n\n // ui state\n isFullscreen,\n setIsFullscreen,\n\n // derived\n sendDisabled,\n\n // helpers\n supportsFiles,\n isDraftThread,\n setVariables,\n } = vm;\n\n // Draft threads use a placeholder thread id; omit it for uploads so files still work in draft mode.\n const { uploadFilesMutation, getFileBlobUrl } = useFileMutations({\n workspaceId,\n threadId: isDraftThread ? undefined : threadId,\n });\n // Provide a global downloader for ssImage node views (non-React context).\n // Milkdown's image node view reads `window.__ssDownloadFile` by name on\n // first render, so an effect-based assignment runs early enough.\n useEffect(() => {\n if (typeof window === 'undefined') return;\n window.__ssDownloadFile = (id: string) => getFileBlobUrl(id);\n return () => {\n if (window.__ssDownloadFile) delete window.__ssDownloadFile;\n };\n }, [getFileBlobUrl]);\n const onUploadFiles = async (files: File[]) => {\n const res = await uploadFilesMutation.mutateAsync(files);\n return res.map(({ id, name }) => ({ id, name }));\n };\n\n const handlePickFilesClick = () => {\n fileInputRef.current?.click();\n };\n\n const addAttachments = async (files: File[]) => {\n if (!files || files.length === 0) return;\n\n const items: AttachmentItem[] = files.map((f) => {\n const key = `${f.name}:${f.size}:${f.type}:${f.lastModified}`;\n const isImage = f.type.startsWith('image/');\n const ext = getExtension(f.name);\n const previewUrl = isImage ? URL.createObjectURL(f) : undefined;\n if (previewUrl) previewUrlsRef.current[key] = previewUrl;\n return {\n key,\n name: f.name || 'file',\n ext,\n isImage,\n previewUrl,\n status: 'uploading',\n };\n });\n\n // optimistic add (dedupe by key)\n setAttachments((prev) => {\n const existing = new Set(prev.map((p) => p.key));\n const next = [...prev];\n for (const it of items) {\n if (existing.has(it.key)) continue;\n existing.add(it.key);\n next.push(it);\n }\n return next;\n });\n\n setUploadingCount((c) => c + 1);\n try {\n const uploaded = await uploadFilesMutation.mutateAsync(files);\n setAttachments((prev) => {\n const next = prev.slice();\n // assume upload result order matches input order\n for (let i = 0; i < items.length; i++) {\n const localKey = items[i]?.key;\n const info = uploaded[i];\n if (!localKey || !info) continue;\n const idx = next.findIndex((x) => x.key === localKey);\n if (idx === -1) continue; // user removed it while uploading\n next[idx] = {\n ...next[idx],\n status: 'done',\n fileId: info.id,\n name: info.name || next[idx].name,\n ext: getExtension(info.name || next[idx].name),\n };\n }\n return next;\n });\n } catch {\n setAttachments((prev) =>\n prev.map((a) =>\n items.some((it) => it.key === a.key) ? { ...a, status: 'error' } : a\n )\n );\n } finally {\n setUploadingCount((c) => Math.max(0, c - 1));\n }\n };\n\n // cleanup any local object URLs when attachments change/remove\n useEffect(() => {\n const keys = new Set(attachments.map((a) => a.key));\n for (const [k, url] of Object.entries(previewUrlsRef.current)) {\n if (keys.has(k)) continue;\n try {\n URL.revokeObjectURL(url);\n } catch {\n /* ignore */\n }\n delete previewUrlsRef.current[k];\n }\n }, [attachments]);\n\n const handleFileSelected = (e: React.ChangeEvent<HTMLInputElement>) => {\n const files = Array.from(e.target.files ?? []);\n if (files.length === 0) return;\n void addAttachments(files);\n // allow re-selecting same file\n e.target.value = '';\n };\n\n const handleRemoveAttachment = (id: string) => {\n setAttachments((prev) => prev.filter((a) => a.key !== id));\n const url = previewUrlsRef.current[id];\n if (url) {\n try {\n URL.revokeObjectURL(url);\n } catch {\n /* ignore */\n }\n delete previewUrlsRef.current[id];\n }\n };\n\n const handleClearAttachments = () => {\n setAttachments([]);\n for (const url of Object.values(previewUrlsRef.current)) {\n try {\n URL.revokeObjectURL(url);\n } catch {\n /* ignore */\n }\n }\n previewUrlsRef.current = {};\n };\n\n // Re-focus the editor after it remounts (editorKey changes on send).\n useEffect(() => {\n if (editorKey === 0) return; // skip initial mount\n // Small delay to let the new Milkdown instance mount and populate the ref.\n const id = window.setTimeout(() => editorRef.current?.focus(), 50);\n return () => window.clearTimeout(id);\n }, [editorKey]);\n\n const handleSendMessageAndClear = () => {\n // Read the freshest markdown straight from the editor. The `markdownUpdated`\n // listener is debounced by 200ms in `@milkdown/plugin-listener`, so when a\n // user types fast and hits Enter the React `newMessage` state can be stale —\n // previously that caused the send to use/require old text and the subsequent\n // editor remount to wipe characters the user had just typed.\n const latestText = editorRef.current?.getMarkdown() ?? newMessage;\n const sent = handleSendMessage(latestText, uploadedAttachments);\n if (!sent) return;\n handleClearAttachments();\n setEditorKey((k) => k + 1);\n };\n\n const handleComposerKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n handleSendMessageAndClear();\n }\n };\n\n return (\n <div className=\"ss-chat__composer max-h-[60%] flex-shrink-0 w-full mt-auto bg-sidebar border-t px-4 py-4\">\n {/* Hidden file input shared by all upload buttons */}\n {supportsFiles && (\n <input\n ref={fileInputRef}\n type=\"file\"\n multiple\n className=\"hidden\"\n onChange={handleFileSelected}\n />\n )}\n {workspace && threadId && (\n <div\n className={`${isMobile ? 'w-full max-w-full' : 'w-full'} ${\n !isMobile\n ? `${expandedLayout ? 'max-w-[90%]' : 'max-w-[70%]'} mx-auto`\n : ''\n } transition-[max-width] duration-300 ease-in-out`}\n >\n <ChatVariablesForm\n key={`${workspaceId}-${threadId}`}\n workspace={workspace}\n threadId={threadId}\n setVariables={setVariables}\n />\n </div>\n )}\n {Object.keys(workspace?.variables ?? {}).length > 0 && (\n <hr className=\"my-2\" />\n )}\n\n <div\n className={`${isMobile ? 'w-full max-w-full' : 'w-full'} ${\n !isMobile\n ? `${expandedLayout ? 'max-w-[90%]' : 'max-w-[70%]'} mx-auto`\n : ''\n } bg-background ${\n isMobile\n ? ''\n : 'rounded-md border shadow-sm overflow-hidden focus-within:ring-1 focus-within:ring-ring/50 focus-within:ring-offset-0'\n } transition-[max-width] duration-300 ease-in-out`}\n >\n {attachments.length > 0 && (\n <div className=\"border-b bg-muted/5 px-3 py-2\">\n <div className=\"flex items-center justify-between gap-2\">\n <div className=\"text-xs font-medium text-foreground/80\">\n {attachments.length}{' '}\n {attachments.length === 1 ? 'file' : 'files'} selected\n {isUploadingAttachments ? ' (uploading...)' : ''}\n </div>\n <MuiButton\n type=\"button\"\n size=\"small\"\n variant=\"text\"\n onClick={handleClearAttachments}\n disabled={isUploadingAttachments}\n className=\"text-xs normal-case min-w-0 px-2 h-7 text-muted-foreground hover:text-destructive\"\n >\n Remove all\n </MuiButton>\n </div>\n\n <div className=\"mt-2 overflow-x-auto\">\n <div className=\"flex gap-2 pb-1\">\n {attachments.map((f) => {\n const isImage = f.isImage || isLikelyImageFile(f.name);\n const previewUrl = f.previewUrl;\n const Icon = getFileIcon(f.name);\n const ext = getExtension(f.name).toUpperCase() || 'FILE';\n const isDone = f.status === 'done';\n const isUploading = f.status === 'uploading';\n\n return (\n <div\n key={f.key}\n className=\"relative group w-[180px] min-w-[180px] rounded-md border bg-background overflow-hidden\"\n title={f.name}\n >\n <div className=\"h-[58px] w-full bg-muted/10 flex items-center justify-center overflow-hidden\">\n {isImage ? (\n previewUrl ? (\n <img\n src={previewUrl}\n alt={f.name}\n className=\"h-full w-full object-cover\"\n loading=\"lazy\"\n />\n ) : (\n <span className=\"h-5 w-5 rounded-full border-2 border-muted-foreground/30 border-t-foreground/60 animate-spin\" />\n )\n ) : (\n <div className=\"w-9 h-9 rounded bg-muted/20 flex items-center justify-center\">\n <Icon className=\"h-5 w-5 text-muted-foreground\" />\n </div>\n )}\n </div>\n\n <div className=\"px-2 py-1.5\">\n <div\n className=\"text-xs font-medium text-foreground truncate\"\n title={f.name}\n >\n {f.name}\n </div>\n <div className=\"text-[10px] text-muted-foreground truncate\">\n {ext}\n </div>\n </div>\n\n {/* Status: uploaded check / uploading spinner */}\n {isDone && (\n <div className=\"absolute bottom-1 right-1 bg-green-500 rounded-full p-0.5\">\n <Check className=\"h-3 w-3 text-white\" />\n </div>\n )}\n {isUploading && (\n <div className=\"absolute bottom-1 right-1 h-4 w-4 rounded-full border-2 border-muted-foreground/30 border-t-foreground/60 animate-spin\" />\n )}\n\n {/* Remove single file */}\n <button\n type=\"button\"\n className=\"absolute top-1 right-1 h-6 w-6 rounded-full bg-background/90 border opacity-0 group-hover:opacity-100 transition-opacity flex items-center justify-center\"\n onClick={() => handleRemoveAttachment(f.key)}\n aria-label={`Remove ${f.name}`}\n disabled={isUploadingAttachments}\n >\n <X className=\"h-3.5 w-3.5 text-muted-foreground\" />\n </button>\n </div>\n );\n })}\n </div>\n </div>\n </div>\n )}\n\n <div className=\"w-full max-h-[400px] overflow-y-auto\">\n <div>\n {isMobile ? (\n <div className=\"flex items-center gap-2 px-3 py-2\">\n <div className=\"relative flex-1 px-2 py-2\">\n <MarkdownEditor\n key={`composer-md-${editorKey}`}\n ref={editorRef}\n value={newMessage}\n onChange={(md) => setNewMessage(md)}\n onKeyDown={handleComposerKeyDown}\n onFilesAdded={(files) => {\n void addAttachments(files);\n }}\n onUploadFiles={onUploadFiles}\n fileHandlingMode=\"attachments\"\n workspaceId={workspaceId}\n disabled={disabled}\n placeholder=\"Type a message...\"\n className=\"md-editor--bare text-sm\"\n />\n </div>\n\n {supportsFiles && (\n <IconButton\n type=\"button\"\n size=\"small\"\n className=\"h-10 w-10 rounded-full self-end\"\n onClick={handlePickFilesClick}\n disabled={disabled}\n aria-label=\"Upload files\"\n >\n <Paperclip\n className=\"h-5 w-5 text-muted-foreground/70\"\n strokeWidth={2}\n />\n </IconButton>\n )}\n\n <IconButton\n onClick={handleSendMessageAndClear}\n className={`h-10 w-10 rounded-full self-end ${\n sendDisabled ? 'opacity-50 cursor-not-allowed' : ''\n }`}\n disabled={sendDisabled}\n aria-label=\"Send\"\n >\n <ArrowBigUp className=\"h-5 w-5\" strokeWidth={2.5} />\n </IconButton>\n </div>\n ) : (\n <div className=\"relative px-5 py-2\">\n <MarkdownEditor\n key={`composer-md-${editorKey}`}\n ref={editorRef}\n value={newMessage}\n onChange={(md) => setNewMessage(md)}\n onKeyDown={handleComposerKeyDown}\n onFilesAdded={(files) => {\n void addAttachments(files);\n }}\n onUploadFiles={onUploadFiles}\n fileHandlingMode=\"attachments\"\n workspaceId={workspaceId}\n disabled={disabled}\n placeholder=\"Type a message...\"\n className=\"md-editor--bare text-sm\"\n />\n </div>\n )}\n </div>\n </div>\n\n {/* Mobile fullscreen composer */}\n {isMobile &&\n isFullscreen &&\n typeof document !== 'undefined' &&\n createPortal(\n <div\n className=\"fixed inset-x-0\"\n style={{\n top: '5vh',\n height: '95vh',\n left: 0,\n right: 0,\n zIndex: 1300,\n }}\n >\n <div className=\"relative h-full w-full bg-background border shadow-lg\">\n <IconButton\n type=\"button\"\n size=\"small\"\n className=\"h-8 w-8 absolute top-2 right-2 text-muted-foreground hover:text-foreground\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n setIsFullscreen(false);\n }}\n aria-label=\"Collapse\"\n >\n <Minimize2 className=\"h-4 w-4\" />\n </IconButton>\n <div className=\"flex flex-col h-full\">\n <div className=\"flex-1 p-4\">\n <MarkdownEditor\n key={`composer-md-${editorKey}`}\n ref={editorRef}\n value={newMessage}\n onChange={(md) => setNewMessage(md)}\n onKeyDown={handleComposerKeyDown}\n onFilesAdded={(files) => {\n void addAttachments(files);\n }}\n onUploadFiles={onUploadFiles}\n fileHandlingMode=\"attachments\"\n workspaceId={workspaceId}\n disabled={disabled}\n className=\"md-editor--bare text-sm h-full\"\n />\n </div>\n <div className=\"flex items-center gap-2 px-3 py-2 border-t bg-background\">\n <div className=\"flex-1\" />\n {supportsFiles && (\n <IconButton\n type=\"button\"\n onClick={handlePickFilesClick}\n disabled={disabled}\n aria-label=\"Upload files\"\n >\n <Paperclip\n className=\"h-5 w-5 text-muted-foreground/70\"\n strokeWidth={2}\n />\n </IconButton>\n )}\n <IconButton\n onClick={handleSendMessageAndClear}\n className={`h-10 w-10 rounded-full ${\n sendDisabled ? 'opacity-50 cursor-not-allowed' : ''\n }`}\n disabled={sendDisabled}\n aria-label=\"Send\"\n >\n <ArrowBigUp className=\"h-5 w-5\" strokeWidth={2.5} />\n </IconButton>\n </div>\n </div>\n </div>\n </div>,\n document.body\n )}\n\n {/* Desktop footer actions */}\n {!isMobile && (\n <div className=\"flex items-center justify-between px-4 py-2 bg-background\">\n <div className=\"flex items-center gap-3\">\n {supportsFiles && (\n <IconButton\n type=\"button\"\n onClick={handlePickFilesClick}\n disabled={disabled}\n aria-label=\"Upload files\"\n className=\"text-muted-foreground/70 hover:text-muted-foreground\"\n >\n <Paperclip className=\"h-5 w-5\" strokeWidth={2} />\n </IconButton>\n )}\n </div>\n\n <UIButton\n onClick={handleSendMessageAndClear}\n className={`text-xs h-7 px-4 py-1 ${\n sendDisabled ? 'opacity-50 cursor-not-allowed' : ''\n }`}\n disabled={sendDisabled}\n >\n {isSending ? (\n <span className=\"flex items-center gap-1\">\n <span className=\"h-1.5 w-1.5 rounded-full bg-background animate-bounce [animation-delay:-0.3s]\" />\n <span className=\"h-1.5 w-1.5 rounded-full bg-background animate-bounce [animation-delay:-0.15s]\" />\n <span className=\"h-1.5 w-1.5 rounded-full bg-background animate-bounce\" />\n </span>\n ) : (\n 'Send'\n )}\n </UIButton>\n </div>\n )}\n </div>\n </div>\n );\n}\n","import {\n infiniteQueryOptions,\n queryOptions,\n useInfiniteQuery,\n useQuery,\n} from '@tanstack/react-query';\n\nimport { useChatService } from '@/platform/chat';\nimport type { ChatService } from '@/platform/chat';\n\nimport { isDraftThreadId } from '@/shared/utils/threadId';\n\nimport type { Message } from './model';\nimport { messagesKeys } from './queryKeys';\n\nexport const messagesListOptions = (\n service: ChatService,\n threadId: string,\n opts?: { take?: number; skip?: number }\n) =>\n queryOptions<Message[]>({\n queryKey: threadId ? messagesKeys.list(threadId) : messagesKeys.lists(),\n // NOTE: queryKey intentionally does NOT include opts. This keeps cache updates from\n // message mutations (which write to messagesKeys.list(threadId)) working.\n // If opts changes (e.g. user clicks \"Load full history\"), we manually refetch.\n queryFn: async () => {\n if (!threadId) return [];\n // Server is the source of truth. The send mutation cancels in-flight\n // refetches before POSTing so its `[realMessage]` write isn't races by\n // a stale fetch landing afterwards.\n return (await service.fetchMessages(threadId, opts)).reverse();\n },\n retry: false,\n refetchOnWindowFocus: false,\n refetchOnReconnect: false,\n // Avoid re-fetching the entire thread on every small navigation.\n staleTime: 30_000,\n });\n\nexport function useMessages(threadId: string) {\n const service = useChatService();\n const isDraft = isDraftThreadId(threadId);\n return useQuery({\n ...messagesListOptions(service, threadId),\n enabled: !!threadId && !isDraft,\n initialData: !threadId || isDraft ? [] : undefined,\n });\n}\n\nconst DEFAULT_MESSAGES_PAGE_SIZE = 50;\n\n/**\n * Infinite query options for loading older messages (offset-based).\n * Page 0 = most recent; fetchPreviousPage loads older (page 1, 2, ...).\n */\nexport function messagesInfiniteOptions(\n service: ChatService,\n threadId: string,\n pageSize = DEFAULT_MESSAGES_PAGE_SIZE\n) {\n return infiniteQueryOptions({\n queryKey: messagesKeys.infinite(threadId),\n queryFn: async ({ pageParam }: { pageParam: number }) => {\n const fetched = await service.fetchMessages(threadId, {\n take: pageSize,\n skip: pageParam * pageSize,\n });\n return fetched.reverse();\n },\n initialPageParam: 0,\n getNextPageParam: () => undefined,\n getPreviousPageParam: (\n firstPage: Message[],\n _allPages: Message[][],\n firstPageParam: number\n ) => (firstPage.length < pageSize ? undefined : firstPageParam + 1),\n retry: false,\n refetchOnWindowFocus: false,\n refetchOnReconnect: false,\n staleTime: 30_000,\n });\n}\n\n/**\n * Hook for infinite messages (load older via fetchPreviousPage).\n * Flattens pages so oldest is first; use for prepend/scroll-to-top UX.\n */\nexport function useInfiniteMessages(\n threadId: string,\n pageSize = DEFAULT_MESSAGES_PAGE_SIZE,\n opts?: { skipWhenNewThread?: boolean }\n) {\n const service = useChatService();\n const isDraft = isDraftThreadId(threadId);\n return useInfiniteQuery({\n ...messagesInfiniteOptions(service, threadId, pageSize),\n enabled: !opts?.skipWhenNewThread && !!threadId && !isDraft,\n });\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 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(new env[name](message), index);\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(new env[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 (asString.includes('Error'))\n return [ERROR, asString];\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, 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","export function deprecate(fn) {\n return fn\n}\n\nexport function equal() {}\n\nexport function ok() {}\n\nexport function unreachable() {}\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 alt: null,\n as: null,\n async: boolean,\n autoCapitalize: null,\n autoComplete: spaceSeparated,\n autoFocus: boolean,\n autoPlay: boolean,\n blocking: spaceSeparated,\n capture: null,\n charSet: null,\n checked: boolean,\n cite: null,\n className: spaceSeparated,\n cols: number,\n colSpan: null,\n content: null,\n contentEditable: booleanish,\n controls: boolean,\n controlsList: spaceSeparated,\n coords: number | commaSeparated,\n crossOrigin: null,\n data: null,\n dateTime: null,\n decoding: null,\n default: boolean,\n defer: boolean,\n dir: null,\n dirName: null,\n disabled: boolean,\n download: overloadedBoolean,\n draggable: booleanish,\n encType: null,\n enterKeyHint: null,\n fetchPriority: null,\n form: null,\n formAction: null,\n formEncType: null,\n formMethod: null,\n formNoValidate: boolean,\n formTarget: null,\n headers: spaceSeparated,\n height: number,\n hidden: 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 shadowRootDelegatesFocus: boolean,\n shadowRootMode: null,\n shape: null,\n size: number,\n sizes: null,\n slot: null,\n span: number,\n spellCheck: booleanish,\n src: null,\n srcDoc: null,\n srcLang: null,\n srcSet: null,\n start: number,\n step: null,\n style: null,\n tabIndex: number,\n target: null,\n title: null,\n translate: null,\n type: null,\n typeMustMatch: boolean,\n useMap: null,\n value: booleanish,\n width: number,\n wrap: null,\n writingSuggestions: null,\n\n // Legacy.\n // See: https://html.spec.whatwg.org/#other-elements,-attributes-and-apis\n align: null, // Several. Use CSS `text-align` instead,\n aLink: null, // `<body>`. Use CSS `a:active {color}` instead\n archive: spaceSeparated, // `<object>`. List of URIs to archives\n axis: null, // `<td>` and `<th>`. Use `scope` on `<th>`\n background: null, // `<body>`. Use CSS `background-image` instead\n bgColor: null, // `<body>` and table elements. Use CSS `background-color` instead\n border: number, // `<table>`. Use CSS `border-width` instead,\n borderColor: null, // `<table>`. Use CSS `border-color` instead,\n bottomMargin: number, // `<body>`\n cellPadding: null, // `<table>`\n cellSpacing: null, // `<table>`\n char: null, // Several table elements. When `align=char`, sets the character to align on\n charOff: null, // Several table elements. When `char`, offsets the alignment\n classId: null, // `<object>`\n clear: null, // `<br>`. Use CSS `clear` instead\n code: null, // `<object>`\n codeBase: null, // `<object>`\n codeType: null, // `<object>`\n color: null, // `<font>` and `<hr>`. Use CSS instead\n compact: boolean, // Lists. Use CSS to reduce space between items instead\n declare: boolean, // `<object>`\n event: null, // `<script>`\n face: null, // `<font>`. Use CSS instead\n frame: null, // `<table>`\n frameBorder: null, // `<iframe>`. Use CSS `border` instead\n hSpace: number, // `<img>` and `<object>`\n leftMargin: number, // `<body>`\n link: null, // `<body>`. Use CSS `a:link {color: *}` instead\n longDesc: null, // `<frame>`, `<iframe>`, and `<img>`. Use an `<a>`\n lowSrc: null, // `<img>`. Use a `<picture>`\n marginHeight: number, // `<body>`\n marginWidth: number, // `<body>`\n noResize: boolean, // `<frame>`\n noHref: boolean, // `<area>`. Use no href instead of an explicit `nohref`\n noShade: boolean, // `<hr>`. Use background-color and height instead of borders\n noWrap: boolean, // `<td>` and `<th>`\n object: null, // `<applet>`\n profile: null, // `<head>`\n prompt: null, // `<isindex>`\n rev: null, // `<link>`\n rightMargin: number, // `<body>`\n rules: null, // `<table>`\n scheme: null, // `<meta>`\n scrolling: booleanish, // `<frame>`. Use overflow in the child context\n standby: null, // `<object>`\n summary: null, // `<table>`\n text: null, // `<body>`. Use CSS `color` instead\n topMargin: number, // `<body>`\n valueType: null, // `<param>`\n version: null, // `<html>`. Use a doctype.\n vAlign: null, // Several. Use CSS `vertical-align` instead\n vLink: null, // `<body>`. Use CSS `a:visited {color}` instead\n vSpace: number, // `<img>` and `<object>`\n\n // Non-standard Properties.\n allowTransparency: null,\n autoCorrect: null,\n autoSave: null,\n disablePictureInPicture: boolean,\n disableRemotePlayback: boolean,\n prefix: null,\n property: null,\n results: number,\n security: null,\n unselectable: null\n },\n 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 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 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 * @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 * @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 {import('hast').Element} Element\n * @typedef {import('hast').Properties} Properties\n */\n\n/**\n * @template {string} SimpleSelector\n * Selector type.\n * @template {string} DefaultTagName\n * Default tag name.\n * @typedef {(\n * SimpleSelector extends ''\n * ? DefaultTagName\n * : SimpleSelector extends `${infer TagName}.${infer Rest}`\n * ? ExtractTagName<TagName, DefaultTagName>\n * : SimpleSelector extends `${infer TagName}#${infer Rest}`\n * ? ExtractTagName<TagName, DefaultTagName>\n * : SimpleSelector extends string\n * ? SimpleSelector\n * : DefaultTagName\n * )} ExtractTagName\n * Extract tag name from a simple selector.\n */\n\nconst search = /[#.]/g\n\n/**\n * Create a hast element from a simple CSS selector.\n *\n * @template {string} Selector\n * Type of selector.\n * @template {string} [DefaultTagName='div']\n * Type of default tag name (default: `'div'`).\n * @param {Selector | null | undefined} [selector]\n * Simple CSS selector (optional).\n *\n * Can contain a tag name (`foo`), classes (`.bar`), and an ID (`#baz`).\n * Multiple classes are allowed.\n * Uses the last ID if multiple IDs are found.\n * @param {DefaultTagName | null | undefined} [defaultTagName='div']\n * Tag name to use if `selector` does not specify one (default: `'div'`).\n * @returns {Element & {tagName: ExtractTagName<Selector, DefaultTagName>}}\n * Built element.\n */\nexport function parseSelector(selector, defaultTagName) {\n const value = selector || ''\n /** @type {Properties} */\n const props = {}\n let start = 0\n /** @type {string | undefined} */\n let previous\n /** @type {string | undefined} */\n let tagName\n\n while (start < value.length) {\n search.lastIndex = start\n const match = search.exec(value)\n const subvalue = value.slice(start, match ? match.index : value.length)\n\n if (subvalue) {\n if (!previous) {\n tagName = subvalue\n } else if (previous === '#') {\n props.id = subvalue\n } else if (Array.isArray(props.className)) {\n props.className.push(subvalue)\n } else {\n props.className = [subvalue]\n }\n\n start += subvalue.length\n }\n\n if (match) {\n previous = match[0]\n start++\n }\n }\n\n return {\n type: 'element',\n // @ts-expect-error: tag name is parsed.\n tagName: tagName || defaultTagName || 'div',\n properties: props,\n children: []\n }\n}\n","/**\n * Parse space-separated tokens to an array of strings.\n *\n * @param {string} value\n * Space-separated tokens.\n * @returns {Array<string>}\n * List of tokens.\n */\nexport function parse(value) {\n const input = String(value || '').trim()\n return input ? input.split(/[ \\t\\n\\r\\f]+/g) : []\n}\n\n/**\n * Serialize an array of strings as space separated-tokens.\n *\n * @param {Array<string|number>} values\n * List of tokens.\n * @returns {string}\n * Space-separated tokens.\n */\nexport function stringify(values) {\n return values.join(' ').trim()\n}\n","/**\n * @import {Element, Nodes, RootContent, Root} from 'hast'\n * @import {Info, Schema} from 'property-information'\n */\n\n/**\n * @typedef {Array<Nodes | PrimitiveChild>} ArrayChildNested\n * List of children (deep).\n */\n\n/**\n * @typedef {Array<ArrayChildNested | Nodes | PrimitiveChild>} ArrayChild\n * List of children.\n */\n\n/**\n * @typedef {Array<number | string>} ArrayValue\n * List of property values for space- or comma separated values (such as `className`).\n */\n\n/**\n * @typedef {ArrayChild | Nodes | PrimitiveChild} Child\n * Acceptable child value.\n */\n\n/**\n * @typedef {number | string | null | undefined} PrimitiveChild\n * Primitive children, either ignored (nullish), or turned into text nodes.\n */\n\n/**\n * @typedef {boolean | number | string | null | undefined} PrimitiveValue\n * Primitive property value.\n */\n\n/**\n * @typedef {Record<string, PropertyValue | Style>} Properties\n * Acceptable value for element properties.\n */\n\n/**\n * @typedef {ArrayValue | PrimitiveValue} PropertyValue\n * Primitive value or list value.\n */\n\n/**\n * @typedef {Element | Root} Result\n * Result from a `h` (or `s`) call.\n */\n\n/**\n * @typedef {number | string} StyleValue\n * Value for a CSS style field.\n */\n\n/**\n * @typedef {Record<string, StyleValue>} Style\n * Supported value of a `style` prop.\n */\n\nimport {parse as parseCommas} from 'comma-separated-tokens'\nimport {parseSelector} from 'hast-util-parse-selector'\nimport {find, normalize} from 'property-information'\nimport {parse as parseSpaces} from 'space-separated-tokens'\n\n/**\n * @param {Schema} schema\n * Schema to use.\n * @param {string} defaultTagName\n * Default tag name.\n * @param {ReadonlyArray<string> | undefined} [caseSensitive]\n * Case-sensitive tag names (default: `undefined`).\n * @returns\n * `h`.\n */\nexport function createH(schema, defaultTagName, caseSensitive) {\n const adjust = caseSensitive ? createAdjustMap(caseSensitive) : undefined\n\n /**\n * Hyperscript compatible DSL for creating virtual hast trees.\n *\n * @overload\n * @param {null | undefined} [selector]\n * @param {...Child} children\n * @returns {Root}\n *\n * @overload\n * @param {string} selector\n * @param {Properties} properties\n * @param {...Child} children\n * @returns {Element}\n *\n * @overload\n * @param {string} selector\n * @param {...Child} children\n * @returns {Element}\n *\n * @param {string | null | undefined} [selector]\n * Selector.\n * @param {Child | Properties | null | undefined} [properties]\n * Properties (or first child) (default: `undefined`).\n * @param {...Child} children\n * Children.\n * @returns {Result}\n * Result.\n */\n function h(selector, properties, ...children) {\n /** @type {Result} */\n let node\n\n if (selector === null || selector === undefined) {\n node = {type: 'root', children: []}\n // Properties are not supported for roots.\n const child = /** @type {Child} */ (properties)\n children.unshift(child)\n } else {\n node = parseSelector(selector, defaultTagName)\n // Normalize the name.\n const lower = node.tagName.toLowerCase()\n const adjusted = adjust ? adjust.get(lower) : undefined\n node.tagName = adjusted || lower\n\n // Handle properties.\n if (isChild(properties)) {\n children.unshift(properties)\n } else {\n for (const [key, value] of Object.entries(properties)) {\n addProperty(schema, node.properties, key, value)\n }\n }\n }\n\n // Handle children.\n for (const child of children) {\n addChild(node.children, child)\n }\n\n if (node.type === 'element' && node.tagName === 'template') {\n node.content = {type: 'root', children: node.children}\n node.children = []\n }\n\n return node\n }\n\n return h\n}\n\n/**\n * Check if something is properties or a child.\n *\n * @param {Child | Properties} value\n * Value to check.\n * @returns {value is Child}\n * Whether `value` is definitely a child.\n */\nfunction isChild(value) {\n // Never properties if not an object.\n if (value === null || typeof value !== 'object' || Array.isArray(value)) {\n return true\n }\n\n // Never node without `type`; that’s the main discriminator.\n if (typeof value.type !== 'string') return false\n\n // Slower check: never property value if object or array with\n // non-number/strings.\n const record = /** @type {Record<string, unknown>} */ (value)\n const keys = Object.keys(value)\n\n for (const key of keys) {\n const value = record[key]\n\n if (value && typeof value === 'object') {\n if (!Array.isArray(value)) return true\n\n const list = /** @type {ReadonlyArray<unknown>} */ (value)\n\n for (const item of list) {\n if (typeof item !== 'number' && typeof item !== 'string') {\n return true\n }\n }\n }\n }\n\n // Also see empty `children` as a node.\n if ('children' in value && Array.isArray(value.children)) {\n return true\n }\n\n // Default to properties, someone can always pass an empty object,\n // put `data: {}` in a node,\n // or wrap it in an array.\n return false\n}\n\n/**\n * @param {Schema} schema\n * Schema.\n * @param {Properties} properties\n * Properties object.\n * @param {string} key\n * Property name.\n * @param {PropertyValue | Style} value\n * Property value.\n * @returns {undefined}\n * Nothing.\n */\nfunction addProperty(schema, properties, key, value) {\n const info = find(schema, key)\n /** @type {PropertyValue} */\n let result\n\n // Ignore nullish and NaN values.\n if (value === null || value === undefined) return\n\n if (typeof value === 'number') {\n // Ignore NaN.\n if (Number.isNaN(value)) return\n\n result = value\n }\n // Booleans.\n else if (typeof value === 'boolean') {\n result = value\n }\n // Handle list values.\n else if (typeof value === 'string') {\n if (info.spaceSeparated) {\n result = parseSpaces(value)\n } else if (info.commaSeparated) {\n result = parseCommas(value)\n } else if (info.commaOrSpaceSeparated) {\n result = parseSpaces(parseCommas(value).join(' '))\n } else {\n result = parsePrimitive(info, info.property, value)\n }\n } else if (Array.isArray(value)) {\n result = [...value]\n } else {\n result = info.property === 'style' ? style(value) : String(value)\n }\n\n if (Array.isArray(result)) {\n /** @type {Array<number | string>} */\n const finalResult = []\n\n for (const item of result) {\n // Assume no booleans in array.\n finalResult.push(\n /** @type {number | string} */ (\n parsePrimitive(info, info.property, item)\n )\n )\n }\n\n result = finalResult\n }\n\n // Class names (which can be added both on the `selector` and here).\n if (info.property === 'className' && Array.isArray(properties.className)) {\n // Assume no booleans in `className`.\n result = properties.className.concat(\n /** @type {Array<number | string> | number | string} */ (result)\n )\n }\n\n properties[info.property] = result\n}\n\n/**\n * @param {Array<RootContent>} nodes\n * Children.\n * @param {Child} value\n * Child.\n * @returns {undefined}\n * Nothing.\n */\nfunction addChild(nodes, value) {\n if (value === null || value === undefined) {\n // Empty.\n } else if (typeof value === 'number' || typeof value === 'string') {\n nodes.push({type: 'text', value: String(value)})\n } else if (Array.isArray(value)) {\n for (const child of value) {\n addChild(nodes, child)\n }\n } else if (typeof value === 'object' && 'type' in value) {\n if (value.type === 'root') {\n addChild(nodes, value.children)\n } else {\n nodes.push(value)\n }\n } else {\n throw new Error('Expected node, nodes, or string, got `' + value + '`')\n }\n}\n\n/**\n * Parse a single primitives.\n *\n * @param {Info} info\n * Property information.\n * @param {string} name\n * Property name.\n * @param {PrimitiveValue} value\n * Property value.\n * @returns {PrimitiveValue}\n * Property value.\n */\nfunction parsePrimitive(info, name, value) {\n if (typeof value === 'string') {\n if (info.number && value && !Number.isNaN(Number(value))) {\n return Number(value)\n }\n\n if (\n (info.boolean || info.overloadedBoolean) &&\n (value === '' || normalize(value) === normalize(name))\n ) {\n return true\n }\n }\n\n return value\n}\n\n/**\n * Serialize a `style` object as a string.\n *\n * @param {Style} styles\n * Style object.\n * @returns {string}\n * CSS string.\n */\nfunction style(styles) {\n /** @type {Array<string>} */\n const result = []\n\n for (const [key, value] of Object.entries(styles)) {\n result.push([key, value].join(': '))\n }\n\n return result.join('; ')\n}\n\n/**\n * Create a map to adjust casing.\n *\n * @param {ReadonlyArray<string>} values\n * List of properly cased keys.\n * @returns {Map<string, string>}\n * Map of lowercase keys to uppercase keys.\n */\nfunction createAdjustMap(values) {\n /** @type {Map<string, string>} */\n const result = new Map()\n\n for (const value of values) {\n result.set(value.toLowerCase(), value)\n }\n\n return result\n}\n","/**\n * List of case-sensitive SVG tag names.\n *\n * @type {ReadonlyArray<string>}\n */\nexport const svgCaseSensitiveTagNames = [\n 'altGlyph',\n 'altGlyphDef',\n 'altGlyphItem',\n 'animateColor',\n 'animateMotion',\n 'animateTransform',\n 'clipPath',\n 'feBlend',\n 'feColorMatrix',\n 'feComponentTransfer',\n 'feComposite',\n 'feConvolveMatrix',\n 'feDiffuseLighting',\n 'feDisplacementMap',\n 'feDistantLight',\n 'feDropShadow',\n 'feFlood',\n 'feFuncA',\n 'feFuncB',\n 'feFuncG',\n 'feFuncR',\n 'feGaussianBlur',\n 'feImage',\n 'feMerge',\n 'feMergeNode',\n 'feMorphology',\n 'feOffset',\n 'fePointLight',\n 'feSpecularLighting',\n 'feSpotLight',\n 'feTile',\n 'feTurbulence',\n 'foreignObject',\n 'glyphRef',\n 'linearGradient',\n 'radialGradient',\n 'solidColor',\n 'textArea',\n 'textPath'\n]\n","// Register the JSX namespace on `h`.\n/**\n * @typedef {import('./jsx-classic.js').Element} h.JSX.Element\n * @typedef {import('./jsx-classic.js').ElementChildrenAttribute} h.JSX.ElementChildrenAttribute\n * @typedef {import('./jsx-classic.js').IntrinsicAttributes} h.JSX.IntrinsicAttributes\n * @typedef {import('./jsx-classic.js').IntrinsicElements} h.JSX.IntrinsicElements\n */\n\n// Register the JSX namespace on `s`.\n/**\n * @typedef {import('./jsx-classic.js').Element} s.JSX.Element\n * @typedef {import('./jsx-classic.js').ElementChildrenAttribute} s.JSX.ElementChildrenAttribute\n * @typedef {import('./jsx-classic.js').IntrinsicAttributes} s.JSX.IntrinsicAttributes\n * @typedef {import('./jsx-classic.js').IntrinsicElements} s.JSX.IntrinsicElements\n */\n\nimport {html, svg} from 'property-information'\nimport {createH} from './create-h.js'\nimport {svgCaseSensitiveTagNames} from './svg-case-sensitive-tag-names.js'\n\n// Note: this explicit type is needed, otherwise TS creates broken types.\n/** @type {ReturnType<createH>} */\nexport const h = createH(html, 'div')\n\n// Note: this explicit type is needed, otherwise TS creates broken types.\n/** @type {ReturnType<createH>} */\nexport const s = createH(svg, 'g', svgCaseSensitiveTagNames)\n","/**\n * @import {VFile, Value} from 'vfile'\n * @import {Location} from 'vfile-location'\n */\n\n/**\n * Create an index of the given document to translate between line/column and\n * offset based positional info.\n *\n * Also implemented in Rust in [`wooorm/markdown-rs`][markdown-rs].\n *\n * [markdown-rs]: https://github.com/wooorm/markdown-rs/blob/main/src/util/location.rs\n *\n * @param {VFile | Value} file\n * File to index.\n * @returns {Location}\n * Accessors for index.\n */\nexport function location(file) {\n const value = String(file)\n /**\n * List, where each index is a line number (0-based), and each value is the\n * byte index *after* where the line ends.\n *\n * @type {Array<number>}\n */\n const indices = []\n\n return {toOffset, toPoint}\n\n /** @type {Location['toPoint']} */\n function toPoint(offset) {\n if (typeof offset === 'number' && offset > -1 && offset <= value.length) {\n let index = 0\n\n while (true) {\n let end = indices[index]\n\n if (end === undefined) {\n const eol = next(value, indices[index - 1])\n end = eol === -1 ? value.length + 1 : eol + 1\n indices[index] = end\n }\n\n if (end > offset) {\n return {\n line: index + 1,\n column: offset - (index > 0 ? indices[index - 1] : 0) + 1,\n offset\n }\n }\n\n index++\n }\n }\n }\n\n /** @type {Location['toOffset']} */\n function toOffset(point) {\n if (\n point &&\n typeof point.line === 'number' &&\n typeof point.column === 'number' &&\n !Number.isNaN(point.line) &&\n !Number.isNaN(point.column)\n ) {\n while (indices.length < point.line) {\n const from = indices[indices.length - 1]\n const eol = next(value, from)\n const end = eol === -1 ? value.length + 1 : eol + 1\n if (from === end) break\n indices.push(end)\n }\n\n const offset =\n (point.line > 1 ? indices[point.line - 2] : 0) + point.column - 1\n // The given `column` could not exist on this line.\n if (offset < indices[point.line - 1]) return offset\n }\n }\n}\n\n/**\n * @param {string} value\n * @param {number} from\n */\nfunction next(value, from) {\n const cr = value.indexOf('\\r', from)\n const lf = value.indexOf('\\n', from)\n if (lf === -1) return cr\n if (cr === -1 || cr + 1 === lf) return lf\n return cr < lf ? cr : lf\n}\n","/**\n * Map of web namespaces.\n *\n * @type {Record<string, string>}\n */\nexport const webNamespaces = {\n html: 'http://www.w3.org/1999/xhtml',\n mathml: 'http://www.w3.org/1998/Math/MathML',\n svg: 'http://www.w3.org/2000/svg',\n xlink: 'http://www.w3.org/1999/xlink',\n xml: 'http://www.w3.org/XML/1998/namespace',\n xmlns: 'http://www.w3.org/2000/xmlns/'\n}\n","/**\n * @import {ElementData, Element, Nodes, RootContent, Root} from 'hast'\n * @import {DefaultTreeAdapterMap, Token} from 'parse5'\n * @import {Schema} from 'property-information'\n * @import {Point, Position} from 'unist'\n * @import {VFile} from 'vfile'\n * @import {Options} from 'hast-util-from-parse5'\n */\n\n/**\n * @typedef State\n * Info passed around about the current state.\n * @property {VFile | undefined} file\n * Corresponding file.\n * @property {boolean} location\n * Whether location info was found.\n * @property {Schema} schema\n * Current schema.\n * @property {boolean | undefined} verbose\n * Add extra positional info.\n */\n\nimport {ok as assert} from 'devlop'\nimport {h, s} from 'hastscript'\nimport {find, html, svg} from 'property-information'\nimport {location} from 'vfile-location'\nimport {webNamespaces} from 'web-namespaces'\n\nconst own = {}.hasOwnProperty\n/** @type {unknown} */\n// type-coverage:ignore-next-line\nconst proto = Object.prototype\n\n/**\n * Transform a `parse5` AST to hast.\n *\n * @param {DefaultTreeAdapterMap['node']} tree\n * `parse5` tree to transform.\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {Nodes}\n * hast tree.\n */\nexport function fromParse5(tree, options) {\n const settings = options || {}\n\n return one(\n {\n file: settings.file || undefined,\n location: false,\n schema: settings.space === 'svg' ? svg : html,\n verbose: settings.verbose || false\n },\n tree\n )\n}\n\n/**\n * Transform a node.\n *\n * @param {State} state\n * Info passed around about the current state.\n * @param {DefaultTreeAdapterMap['node']} node\n * p5 node.\n * @returns {Nodes}\n * hast node.\n */\nfunction one(state, node) {\n /** @type {Nodes} */\n let result\n\n switch (node.nodeName) {\n case '#comment': {\n const reference = /** @type {DefaultTreeAdapterMap['commentNode']} */ (\n node\n )\n result = {type: 'comment', value: reference.data}\n patch(state, reference, result)\n return result\n }\n\n case '#document':\n case '#document-fragment': {\n const reference =\n /** @type {DefaultTreeAdapterMap['document'] | DefaultTreeAdapterMap['documentFragment']} */ (\n node\n )\n const quirksMode =\n 'mode' in reference\n ? reference.mode === 'quirks' || reference.mode === 'limited-quirks'\n : false\n\n result = {\n type: 'root',\n children: all(state, node.childNodes),\n data: {quirksMode}\n }\n\n if (state.file && state.location) {\n const document = String(state.file)\n const loc = location(document)\n const start = loc.toPoint(0)\n const end = loc.toPoint(document.length)\n // Always defined as we give valid input.\n assert(start, 'expected `start`')\n assert(end, 'expected `end`')\n result.position = {start, end}\n }\n\n return result\n }\n\n case '#documentType': {\n const reference = /** @type {DefaultTreeAdapterMap['documentType']} */ (\n node\n )\n result = {type: 'doctype'}\n patch(state, reference, result)\n return result\n }\n\n case '#text': {\n const reference = /** @type {DefaultTreeAdapterMap['textNode']} */ (node)\n result = {type: 'text', value: reference.value}\n patch(state, reference, result)\n return result\n }\n\n // Element.\n default: {\n const reference = /** @type {DefaultTreeAdapterMap['element']} */ (node)\n result = element(state, reference)\n return result\n }\n }\n}\n\n/**\n * Transform children.\n *\n * @param {State} state\n * Info passed around about the current state.\n * @param {Array<DefaultTreeAdapterMap['node']>} nodes\n * Nodes.\n * @returns {Array<RootContent>}\n * hast nodes.\n */\nfunction all(state, nodes) {\n let index = -1\n /** @type {Array<RootContent>} */\n const results = []\n\n while (++index < nodes.length) {\n // Assume no roots in `nodes`.\n const result = /** @type {RootContent} */ (one(state, nodes[index]))\n results.push(result)\n }\n\n return results\n}\n\n/**\n * Transform an element.\n *\n * @param {State} state\n * Info passed around about the current state.\n * @param {DefaultTreeAdapterMap['element']} node\n * `parse5` node to transform.\n * @returns {Element}\n * hast node.\n */\nfunction element(state, node) {\n const schema = state.schema\n\n state.schema = node.namespaceURI === webNamespaces.svg ? svg : html\n\n // Props.\n let index = -1\n /** @type {Record<string, string>} */\n const properties = {}\n\n while (++index < node.attrs.length) {\n const attribute = node.attrs[index]\n const name =\n (attribute.prefix ? attribute.prefix + ':' : '') + attribute.name\n if (!own.call(proto, name)) {\n properties[name] = attribute.value\n }\n }\n\n // Build.\n const x = state.schema.space === 'svg' ? s : h\n const result = x(node.tagName, properties, all(state, node.childNodes))\n patch(state, node, result)\n\n // Switch content.\n if (result.tagName === 'template') {\n const reference = /** @type {DefaultTreeAdapterMap['template']} */ (node)\n const pos = reference.sourceCodeLocation\n const startTag = pos && pos.startTag && position(pos.startTag)\n const endTag = pos && pos.endTag && position(pos.endTag)\n\n // Root in, root out.\n const content = /** @type {Root} */ (one(state, reference.content))\n\n if (startTag && endTag && state.file) {\n content.position = {start: startTag.end, end: endTag.start}\n }\n\n result.content = content\n }\n\n state.schema = schema\n\n return result\n}\n\n/**\n * Patch positional info from `from` onto `to`.\n *\n * @param {State} state\n * Info passed around about the current state.\n * @param {DefaultTreeAdapterMap['node']} from\n * p5 node.\n * @param {Nodes} to\n * hast node.\n * @returns {undefined}\n * Nothing.\n */\nfunction patch(state, from, to) {\n if ('sourceCodeLocation' in from && from.sourceCodeLocation && state.file) {\n const position = createLocation(state, to, from.sourceCodeLocation)\n\n if (position) {\n state.location = true\n to.position = position\n }\n }\n}\n\n/**\n * Create clean positional information.\n *\n * @param {State} state\n * Info passed around about the current state.\n * @param {Nodes} node\n * hast node.\n * @param {Token.ElementLocation} location\n * p5 location info.\n * @returns {Position | undefined}\n * Position, or nothing.\n */\nfunction createLocation(state, node, location) {\n const result = position(location)\n\n if (node.type === 'element') {\n const tail = node.children[node.children.length - 1]\n\n // Bug for unclosed with children.\n // See: <https://github.com/inikulin/parse5/issues/109>.\n if (\n result &&\n !location.endTag &&\n tail &&\n tail.position &&\n tail.position.end\n ) {\n result.end = Object.assign({}, tail.position.end)\n }\n\n if (state.verbose) {\n /** @type {Record<string, Position | undefined>} */\n const properties = {}\n /** @type {string} */\n let key\n\n if (location.attrs) {\n for (key in location.attrs) {\n if (own.call(location.attrs, key)) {\n properties[find(state.schema, key).property] = position(\n location.attrs[key]\n )\n }\n }\n }\n\n assert(location.startTag, 'a start tag should exist')\n const opening = position(location.startTag)\n const closing = location.endTag ? position(location.endTag) : undefined\n /** @type {ElementData['position']} */\n const data = {opening}\n if (closing) data.closing = closing\n data.properties = properties\n\n node.data = {position: data}\n }\n }\n\n return result\n}\n\n/**\n * Turn a p5 location into a position.\n *\n * @param {Token.Location} loc\n * Location.\n * @returns {Position | undefined}\n * Position or nothing.\n */\nfunction position(loc) {\n const start = point({\n line: loc.startLine,\n column: loc.startCol,\n offset: loc.startOffset\n })\n const end = point({\n line: loc.endLine,\n column: loc.endCol,\n offset: loc.endOffset\n })\n\n // @ts-expect-error: we do use `undefined` for points if one or the other\n // exists.\n return start || end ? {start, end} : undefined\n}\n\n/**\n * Filter out invalid points.\n *\n * @param {Point} point\n * Point with potentially `undefined` values.\n * @returns {Point | undefined}\n * Point or nothing.\n */\nfunction point(point) {\n return point.line && point.column ? point : undefined\n}\n","/**\n * @callback Handler\n * Handle a value, with a certain ID field set to a certain value.\n * The ID field is passed to `zwitch`, and it’s value is this function’s\n * place on the `handlers` record.\n * @param {...any} parameters\n * Arbitrary parameters passed to the zwitch.\n * The first will be an object with a certain ID field set to a certain value.\n * @returns {any}\n * Anything!\n */\n\n/**\n * @callback UnknownHandler\n * Handle values that do have a certain ID field, but it’s set to a value\n * that is not listed in the `handlers` record.\n * @param {unknown} value\n * An object with a certain ID field set to an unknown value.\n * @param {...any} rest\n * Arbitrary parameters passed to the zwitch.\n * @returns {any}\n * Anything!\n */\n\n/**\n * @callback InvalidHandler\n * Handle values that do not have a certain ID field.\n * @param {unknown} value\n * Any unknown value.\n * @param {...any} rest\n * Arbitrary parameters passed to the zwitch.\n * @returns {void|null|undefined|never}\n * This should crash or return nothing.\n */\n\n/**\n * @template {InvalidHandler} [Invalid=InvalidHandler]\n * @template {UnknownHandler} [Unknown=UnknownHandler]\n * @template {Record<string, Handler>} [Handlers=Record<string, Handler>]\n * @typedef Options\n * Configuration (required).\n * @property {Invalid} [invalid]\n * Handler to use for invalid values.\n * @property {Unknown} [unknown]\n * Handler to use for unknown values.\n * @property {Handlers} [handlers]\n * Handlers to use.\n */\n\nconst own = {}.hasOwnProperty\n\n/**\n * Handle values based on a field.\n *\n * @template {InvalidHandler} [Invalid=InvalidHandler]\n * @template {UnknownHandler} [Unknown=UnknownHandler]\n * @template {Record<string, Handler>} [Handlers=Record<string, Handler>]\n * @param {string} key\n * Field to switch on.\n * @param {Options<Invalid, Unknown, Handlers>} [options]\n * Configuration (required).\n * @returns {{unknown: Unknown, invalid: Invalid, handlers: Handlers, (...parameters: Parameters<Handlers[keyof Handlers]>): ReturnType<Handlers[keyof Handlers]>, (...parameters: Parameters<Unknown>): ReturnType<Unknown>}}\n */\nexport function zwitch(key, options) {\n const settings = options || {}\n\n /**\n * Handle one value.\n *\n * Based on the bound `key`, a respective handler will be called.\n * If `value` is not an object, or doesn’t have a `key` property, the special\n * “invalid” handler will be called.\n * If `value` has an unknown `key`, the special “unknown” handler will be\n * called.\n *\n * All arguments, and the context object, are passed through to the handler,\n * and it’s result is returned.\n *\n * @this {unknown}\n * Any context object.\n * @param {unknown} [value]\n * Any value.\n * @param {...unknown} parameters\n * Arbitrary parameters passed to the zwitch.\n * @property {Handler} invalid\n * Handle for values that do not have a certain ID field.\n * @property {Handler} unknown\n * Handle values that do have a certain ID field, but it’s set to a value\n * that is not listed in the `handlers` record.\n * @property {Handlers} handlers\n * Record of handlers.\n * @returns {unknown}\n * Anything.\n */\n function one(value, ...parameters) {\n /** @type {Handler|undefined} */\n let fn = one.invalid\n const handlers = one.handlers\n\n if (value && own.call(value, key)) {\n // @ts-expect-error Indexable.\n const id = String(value[key])\n // @ts-expect-error Indexable.\n fn = own.call(handlers, id) ? handlers[id] : one.unknown\n }\n\n if (fn) {\n return fn.call(this, value, ...parameters)\n }\n }\n\n one.handlers = settings.handlers || {}\n one.invalid = settings.invalid\n one.unknown = settings.unknown\n\n // @ts-expect-error: matches!\n return one\n}\n","/**\n * @import {Comment, Doctype, Element, Nodes, RootContent, Root, Text} from 'hast'\n * @import {DefaultTreeAdapterMap, Token} from 'parse5'\n * @import {Schema} from 'property-information'\n */\n\n/**\n * @typedef {DefaultTreeAdapterMap['document']} Parse5Document\n * @typedef {DefaultTreeAdapterMap['documentFragment']} Parse5Fragment\n * @typedef {DefaultTreeAdapterMap['element']} Parse5Element\n * @typedef {DefaultTreeAdapterMap['node']} Parse5Nodes\n * @typedef {DefaultTreeAdapterMap['documentType']} Parse5Doctype\n * @typedef {DefaultTreeAdapterMap['commentNode']} Parse5Comment\n * @typedef {DefaultTreeAdapterMap['textNode']} Parse5Text\n * @typedef {DefaultTreeAdapterMap['parentNode']} Parse5Parent\n * @typedef {Token.Attribute} Parse5Attribute\n *\n * @typedef Options\n * Configuration.\n * @property {Space | null | undefined} [space='html']\n * Which space the document is in (default: `'html'`).\n *\n * When an `<svg>` element is found in the HTML space, this package already\n * automatically switches to and from the SVG space when entering and exiting\n * it.\n *\n * @typedef {Exclude<Parse5Nodes, Parse5Document | Parse5Fragment>} Parse5Content\n *\n * @typedef {'html' | 'svg'} Space\n */\n\nimport {stringify as commas} from 'comma-separated-tokens'\nimport {ok as assert} from 'devlop'\nimport {find, html, svg} from 'property-information'\nimport {stringify as spaces} from 'space-separated-tokens'\nimport {webNamespaces} from 'web-namespaces'\nimport {zwitch} from 'zwitch'\n\n/** @type {Options} */\nconst emptyOptions = {}\n\nconst own = {}.hasOwnProperty\n\nconst one = zwitch('type', {handlers: {root, element, text, comment, doctype}})\n\n/**\n * Transform a hast tree to a `parse5` AST.\n *\n * @param {Nodes} tree\n * Tree to transform.\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {Parse5Nodes}\n * `parse5` node.\n */\nexport function toParse5(tree, options) {\n const settings = options || emptyOptions\n const space = settings.space\n return one(tree, space === 'svg' ? svg : html)\n}\n\n/**\n * @param {Root} node\n * Node (hast) to transform.\n * @param {Schema} schema\n * Current schema.\n * @returns {Parse5Document}\n * Parse5 node.\n */\nfunction root(node, schema) {\n /** @type {Parse5Document} */\n const result = {\n nodeName: '#document',\n // @ts-expect-error: `parse5` uses enums, which are actually strings.\n mode: (node.data || {}).quirksMode ? 'quirks' : 'no-quirks',\n childNodes: []\n }\n result.childNodes = all(node.children, result, schema)\n patch(node, result)\n return result\n}\n\n/**\n * @param {Root} node\n * Node (hast) to transform.\n * @param {Schema} schema\n * Current schema.\n * @returns {Parse5Fragment}\n * Parse5 node.\n */\nfunction fragment(node, schema) {\n /** @type {Parse5Fragment} */\n const result = {nodeName: '#document-fragment', childNodes: []}\n result.childNodes = all(node.children, result, schema)\n patch(node, result)\n return result\n}\n\n/**\n * @param {Doctype} node\n * Node (hast) to transform.\n * @returns {Parse5Doctype}\n * Parse5 node.\n */\nfunction doctype(node) {\n /** @type {Parse5Doctype} */\n const result = {\n nodeName: '#documentType',\n name: 'html',\n publicId: '',\n systemId: '',\n parentNode: null\n }\n\n patch(node, result)\n return result\n}\n\n/**\n * @param {Text} node\n * Node (hast) to transform.\n * @returns {Parse5Text}\n * Parse5 node.\n */\nfunction text(node) {\n /** @type {Parse5Text} */\n const result = {\n nodeName: '#text',\n value: node.value,\n parentNode: null\n }\n patch(node, result)\n return result\n}\n\n/**\n * @param {Comment} node\n * Node (hast) to transform.\n * @returns {Parse5Comment}\n * Parse5 node.\n */\nfunction comment(node) {\n /** @type {Parse5Comment} */\n const result = {\n nodeName: '#comment',\n data: node.value,\n parentNode: null\n }\n\n patch(node, result)\n\n return result\n}\n\n/**\n * @param {Element} node\n * Node (hast) to transform.\n * @param {Schema} schema\n * Current schema.\n * @returns {Parse5Element}\n * Parse5 node.\n */\nfunction element(node, schema) {\n const parentSchema = schema\n let currentSchema = parentSchema\n\n if (\n node.type === 'element' &&\n node.tagName.toLowerCase() === 'svg' &&\n parentSchema.space === 'html'\n ) {\n currentSchema = svg\n }\n\n /** @type {Array<Parse5Attribute>} */\n const attrs = []\n /** @type {string} */\n let prop\n\n if (node.properties) {\n for (prop in node.properties) {\n if (prop !== 'children' && own.call(node.properties, prop)) {\n const result = createProperty(\n currentSchema,\n prop,\n node.properties[prop]\n )\n\n if (result) {\n attrs.push(result)\n }\n }\n }\n }\n\n const space = currentSchema.space\n // `html` and `svg` both have a space.\n assert(space)\n\n /** @type {Parse5Element} */\n const result = {\n nodeName: node.tagName,\n tagName: node.tagName,\n attrs,\n // @ts-expect-error: `parse5` types are wrong.\n namespaceURI: webNamespaces[space],\n childNodes: [],\n parentNode: null\n }\n result.childNodes = all(node.children, result, currentSchema)\n patch(node, result)\n\n if (node.tagName === 'template' && node.content) {\n // @ts-expect-error: `parse5` types are wrong.\n result.content = fragment(node.content, currentSchema)\n }\n\n return result\n}\n\n/**\n * Handle a property.\n *\n * @param {Schema} schema\n * Current schema.\n * @param {string} prop\n * Key.\n * @param {Array<number | string> | boolean | number | string | null | undefined} value\n * hast property value.\n * @returns {Parse5Attribute | undefined}\n * Field for runtime, optional.\n */\nfunction createProperty(schema, prop, value) {\n const info = find(schema, prop)\n\n // Ignore nullish and `NaN` values.\n if (\n value === false ||\n value === null ||\n value === undefined ||\n (typeof value === 'number' && Number.isNaN(value)) ||\n (!value && info.boolean)\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 /** @type {Parse5Attribute} */\n const attribute = {\n name: info.attribute,\n value: value === true ? '' : String(value)\n }\n\n if (info.space && info.space !== 'html' && info.space !== 'svg') {\n const index = attribute.name.indexOf(':')\n\n if (index < 0) {\n attribute.prefix = ''\n } else {\n attribute.name = attribute.name.slice(index + 1)\n attribute.prefix = info.attribute.slice(0, index)\n }\n\n attribute.namespace = webNamespaces[info.space]\n }\n\n return attribute\n}\n\n/**\n * Transform all hast nodes.\n *\n * @param {Array<RootContent>} children\n * List of children.\n * @param {Parse5Parent} parentNode\n * `parse5` parent node.\n * @param {Schema} schema\n * Current schema.\n * @returns {Array<Parse5Content>}\n * Transformed children.\n */\nfunction all(children, parentNode, schema) {\n let index = -1\n /** @type {Array<Parse5Content>} */\n const results = []\n\n if (children) {\n while (++index < children.length) {\n /** @type {Parse5Content} */\n const child = one(children[index], schema)\n\n child.parentNode = parentNode\n\n results.push(child)\n }\n }\n\n return results\n}\n\n/**\n * Add position info from `from` to `to`.\n *\n * @param {Nodes} from\n * hast node.\n * @param {Parse5Nodes} to\n * `parse5` node.\n * @returns {undefined}\n * Nothing.\n */\nfunction patch(from, to) {\n const position = from.position\n\n if (position && position.start && position.end) {\n assert(typeof position.start.offset === 'number')\n assert(typeof position.end.offset === 'number')\n\n to.sourceCodeLocation = {\n startLine: position.start.line,\n startCol: position.start.column,\n startOffset: position.start.offset,\n endLine: position.end.line,\n endCol: position.end.column,\n endOffset: position.end.offset\n }\n }\n}\n","/**\n * List of HTML void tag names.\n *\n * @type {Array<string>}\n */\nexport const htmlVoidElements = [\n 'area',\n 'base',\n 'basefont',\n 'bgsound',\n 'br',\n 'col',\n 'command',\n 'embed',\n 'frame',\n 'hr',\n 'image',\n 'img',\n 'input',\n 'keygen',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr'\n]\n","const UNDEFINED_CODE_POINTS = new Set([\n 65534, 65535, 131070, 131071, 196606, 196607, 262142, 262143, 327678, 327679, 393214,\n 393215, 458750, 458751, 524286, 524287, 589822, 589823, 655358, 655359, 720894,\n 720895, 786430, 786431, 851966, 851967, 917502, 917503, 983038, 983039, 1048574,\n 1048575, 1114110, 1114111,\n]);\nexport const REPLACEMENT_CHARACTER = '\\uFFFD';\nexport var CODE_POINTS;\n(function (CODE_POINTS) {\n CODE_POINTS[CODE_POINTS[\"EOF\"] = -1] = \"EOF\";\n CODE_POINTS[CODE_POINTS[\"NULL\"] = 0] = \"NULL\";\n CODE_POINTS[CODE_POINTS[\"TABULATION\"] = 9] = \"TABULATION\";\n CODE_POINTS[CODE_POINTS[\"CARRIAGE_RETURN\"] = 13] = \"CARRIAGE_RETURN\";\n CODE_POINTS[CODE_POINTS[\"LINE_FEED\"] = 10] = \"LINE_FEED\";\n CODE_POINTS[CODE_POINTS[\"FORM_FEED\"] = 12] = \"FORM_FEED\";\n CODE_POINTS[CODE_POINTS[\"SPACE\"] = 32] = \"SPACE\";\n CODE_POINTS[CODE_POINTS[\"EXCLAMATION_MARK\"] = 33] = \"EXCLAMATION_MARK\";\n CODE_POINTS[CODE_POINTS[\"QUOTATION_MARK\"] = 34] = \"QUOTATION_MARK\";\n CODE_POINTS[CODE_POINTS[\"AMPERSAND\"] = 38] = \"AMPERSAND\";\n CODE_POINTS[CODE_POINTS[\"APOSTROPHE\"] = 39] = \"APOSTROPHE\";\n CODE_POINTS[CODE_POINTS[\"HYPHEN_MINUS\"] = 45] = \"HYPHEN_MINUS\";\n CODE_POINTS[CODE_POINTS[\"SOLIDUS\"] = 47] = \"SOLIDUS\";\n CODE_POINTS[CODE_POINTS[\"DIGIT_0\"] = 48] = \"DIGIT_0\";\n CODE_POINTS[CODE_POINTS[\"DIGIT_9\"] = 57] = \"DIGIT_9\";\n CODE_POINTS[CODE_POINTS[\"SEMICOLON\"] = 59] = \"SEMICOLON\";\n CODE_POINTS[CODE_POINTS[\"LESS_THAN_SIGN\"] = 60] = \"LESS_THAN_SIGN\";\n CODE_POINTS[CODE_POINTS[\"EQUALS_SIGN\"] = 61] = \"EQUALS_SIGN\";\n CODE_POINTS[CODE_POINTS[\"GREATER_THAN_SIGN\"] = 62] = \"GREATER_THAN_SIGN\";\n CODE_POINTS[CODE_POINTS[\"QUESTION_MARK\"] = 63] = \"QUESTION_MARK\";\n CODE_POINTS[CODE_POINTS[\"LATIN_CAPITAL_A\"] = 65] = \"LATIN_CAPITAL_A\";\n CODE_POINTS[CODE_POINTS[\"LATIN_CAPITAL_Z\"] = 90] = \"LATIN_CAPITAL_Z\";\n CODE_POINTS[CODE_POINTS[\"RIGHT_SQUARE_BRACKET\"] = 93] = \"RIGHT_SQUARE_BRACKET\";\n CODE_POINTS[CODE_POINTS[\"GRAVE_ACCENT\"] = 96] = \"GRAVE_ACCENT\";\n CODE_POINTS[CODE_POINTS[\"LATIN_SMALL_A\"] = 97] = \"LATIN_SMALL_A\";\n CODE_POINTS[CODE_POINTS[\"LATIN_SMALL_Z\"] = 122] = \"LATIN_SMALL_Z\";\n})(CODE_POINTS || (CODE_POINTS = {}));\nexport const SEQUENCES = {\n DASH_DASH: '--',\n CDATA_START: '[CDATA[',\n DOCTYPE: 'doctype',\n SCRIPT: 'script',\n PUBLIC: 'public',\n SYSTEM: 'system',\n};\n//Surrogates\nexport function isSurrogate(cp) {\n return cp >= 55296 && cp <= 57343;\n}\nexport function isSurrogatePair(cp) {\n return cp >= 56320 && cp <= 57343;\n}\nexport function getSurrogatePairCodePoint(cp1, cp2) {\n return (cp1 - 55296) * 1024 + 9216 + cp2;\n}\n//NOTE: excluding NULL and ASCII whitespace\nexport function isControlCodePoint(cp) {\n return ((cp !== 0x20 && cp !== 0x0a && cp !== 0x0d && cp !== 0x09 && cp !== 0x0c && cp >= 0x01 && cp <= 0x1f) ||\n (cp >= 0x7f && cp <= 0x9f));\n}\nexport function isUndefinedCodePoint(cp) {\n return (cp >= 64976 && cp <= 65007) || UNDEFINED_CODE_POINTS.has(cp);\n}\n","export var ERR;\n(function (ERR) {\n ERR[\"controlCharacterInInputStream\"] = \"control-character-in-input-stream\";\n ERR[\"noncharacterInInputStream\"] = \"noncharacter-in-input-stream\";\n ERR[\"surrogateInInputStream\"] = \"surrogate-in-input-stream\";\n ERR[\"nonVoidHtmlElementStartTagWithTrailingSolidus\"] = \"non-void-html-element-start-tag-with-trailing-solidus\";\n ERR[\"endTagWithAttributes\"] = \"end-tag-with-attributes\";\n ERR[\"endTagWithTrailingSolidus\"] = \"end-tag-with-trailing-solidus\";\n ERR[\"unexpectedSolidusInTag\"] = \"unexpected-solidus-in-tag\";\n ERR[\"unexpectedNullCharacter\"] = \"unexpected-null-character\";\n ERR[\"unexpectedQuestionMarkInsteadOfTagName\"] = \"unexpected-question-mark-instead-of-tag-name\";\n ERR[\"invalidFirstCharacterOfTagName\"] = \"invalid-first-character-of-tag-name\";\n ERR[\"unexpectedEqualsSignBeforeAttributeName\"] = \"unexpected-equals-sign-before-attribute-name\";\n ERR[\"missingEndTagName\"] = \"missing-end-tag-name\";\n ERR[\"unexpectedCharacterInAttributeName\"] = \"unexpected-character-in-attribute-name\";\n ERR[\"unknownNamedCharacterReference\"] = \"unknown-named-character-reference\";\n ERR[\"missingSemicolonAfterCharacterReference\"] = \"missing-semicolon-after-character-reference\";\n ERR[\"unexpectedCharacterAfterDoctypeSystemIdentifier\"] = \"unexpected-character-after-doctype-system-identifier\";\n ERR[\"unexpectedCharacterInUnquotedAttributeValue\"] = \"unexpected-character-in-unquoted-attribute-value\";\n ERR[\"eofBeforeTagName\"] = \"eof-before-tag-name\";\n ERR[\"eofInTag\"] = \"eof-in-tag\";\n ERR[\"missingAttributeValue\"] = \"missing-attribute-value\";\n ERR[\"missingWhitespaceBetweenAttributes\"] = \"missing-whitespace-between-attributes\";\n ERR[\"missingWhitespaceAfterDoctypePublicKeyword\"] = \"missing-whitespace-after-doctype-public-keyword\";\n ERR[\"missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers\"] = \"missing-whitespace-between-doctype-public-and-system-identifiers\";\n ERR[\"missingWhitespaceAfterDoctypeSystemKeyword\"] = \"missing-whitespace-after-doctype-system-keyword\";\n ERR[\"missingQuoteBeforeDoctypePublicIdentifier\"] = \"missing-quote-before-doctype-public-identifier\";\n ERR[\"missingQuoteBeforeDoctypeSystemIdentifier\"] = \"missing-quote-before-doctype-system-identifier\";\n ERR[\"missingDoctypePublicIdentifier\"] = \"missing-doctype-public-identifier\";\n ERR[\"missingDoctypeSystemIdentifier\"] = \"missing-doctype-system-identifier\";\n ERR[\"abruptDoctypePublicIdentifier\"] = \"abrupt-doctype-public-identifier\";\n ERR[\"abruptDoctypeSystemIdentifier\"] = \"abrupt-doctype-system-identifier\";\n ERR[\"cdataInHtmlContent\"] = \"cdata-in-html-content\";\n ERR[\"incorrectlyOpenedComment\"] = \"incorrectly-opened-comment\";\n ERR[\"eofInScriptHtmlCommentLikeText\"] = \"eof-in-script-html-comment-like-text\";\n ERR[\"eofInDoctype\"] = \"eof-in-doctype\";\n ERR[\"nestedComment\"] = \"nested-comment\";\n ERR[\"abruptClosingOfEmptyComment\"] = \"abrupt-closing-of-empty-comment\";\n ERR[\"eofInComment\"] = \"eof-in-comment\";\n ERR[\"incorrectlyClosedComment\"] = \"incorrectly-closed-comment\";\n ERR[\"eofInCdata\"] = \"eof-in-cdata\";\n ERR[\"absenceOfDigitsInNumericCharacterReference\"] = \"absence-of-digits-in-numeric-character-reference\";\n ERR[\"nullCharacterReference\"] = \"null-character-reference\";\n ERR[\"surrogateCharacterReference\"] = \"surrogate-character-reference\";\n ERR[\"characterReferenceOutsideUnicodeRange\"] = \"character-reference-outside-unicode-range\";\n ERR[\"controlCharacterReference\"] = \"control-character-reference\";\n ERR[\"noncharacterCharacterReference\"] = \"noncharacter-character-reference\";\n ERR[\"missingWhitespaceBeforeDoctypeName\"] = \"missing-whitespace-before-doctype-name\";\n ERR[\"missingDoctypeName\"] = \"missing-doctype-name\";\n ERR[\"invalidCharacterSequenceAfterDoctypeName\"] = \"invalid-character-sequence-after-doctype-name\";\n ERR[\"duplicateAttribute\"] = \"duplicate-attribute\";\n ERR[\"nonConformingDoctype\"] = \"non-conforming-doctype\";\n ERR[\"missingDoctype\"] = \"missing-doctype\";\n ERR[\"misplacedDoctype\"] = \"misplaced-doctype\";\n ERR[\"endTagWithoutMatchingOpenElement\"] = \"end-tag-without-matching-open-element\";\n ERR[\"closingOfElementWithOpenChildElements\"] = \"closing-of-element-with-open-child-elements\";\n ERR[\"disallowedContentInNoscriptInHead\"] = \"disallowed-content-in-noscript-in-head\";\n ERR[\"openElementsLeftAfterEof\"] = \"open-elements-left-after-eof\";\n ERR[\"abandonedHeadElementChild\"] = \"abandoned-head-element-child\";\n ERR[\"misplacedStartTagForHeadElement\"] = \"misplaced-start-tag-for-head-element\";\n ERR[\"nestedNoscriptInHead\"] = \"nested-noscript-in-head\";\n ERR[\"eofInElementThatCanContainOnlyText\"] = \"eof-in-element-that-can-contain-only-text\";\n})(ERR || (ERR = {}));\n","import { CODE_POINTS as $, getSurrogatePairCodePoint, isControlCodePoint, isSurrogate, isSurrogatePair, isUndefinedCodePoint, } from '../common/unicode.js';\nimport { ERR } from '../common/error-codes.js';\n//Const\nconst DEFAULT_BUFFER_WATERLINE = 1 << 16;\n//Preprocessor\n//NOTE: HTML input preprocessing\n//(see: http://www.whatwg.org/specs/web-apps/current-work/multipage/parsing.html#preprocessing-the-input-stream)\nexport class Preprocessor {\n constructor(handler) {\n this.handler = handler;\n this.html = '';\n this.pos = -1;\n // NOTE: Initial `lastGapPos` is -2, to ensure `col` on initialisation is 0\n this.lastGapPos = -2;\n this.gapStack = [];\n this.skipNextNewLine = false;\n this.lastChunkWritten = false;\n this.endOfChunkHit = false;\n this.bufferWaterline = DEFAULT_BUFFER_WATERLINE;\n this.isEol = false;\n this.lineStartPos = 0;\n this.droppedBufferSize = 0;\n this.line = 1;\n //NOTE: avoid reporting errors twice on advance/retreat\n this.lastErrOffset = -1;\n }\n /** The column on the current line. If we just saw a gap (eg. a surrogate pair), return the index before. */\n get col() {\n return this.pos - this.lineStartPos + Number(this.lastGapPos !== this.pos);\n }\n get offset() {\n return this.droppedBufferSize + this.pos;\n }\n getError(code, cpOffset) {\n const { line, col, offset } = this;\n const startCol = col + cpOffset;\n const startOffset = offset + cpOffset;\n return {\n code,\n startLine: line,\n endLine: line,\n startCol,\n endCol: startCol,\n startOffset,\n endOffset: startOffset,\n };\n }\n _err(code) {\n if (this.handler.onParseError && this.lastErrOffset !== this.offset) {\n this.lastErrOffset = this.offset;\n this.handler.onParseError(this.getError(code, 0));\n }\n }\n _addGap() {\n this.gapStack.push(this.lastGapPos);\n this.lastGapPos = this.pos;\n }\n _processSurrogate(cp) {\n //NOTE: try to peek a surrogate pair\n if (this.pos !== this.html.length - 1) {\n const nextCp = this.html.charCodeAt(this.pos + 1);\n if (isSurrogatePair(nextCp)) {\n //NOTE: we have a surrogate pair. Peek pair character and recalculate code point.\n this.pos++;\n //NOTE: add a gap that should be avoided during retreat\n this._addGap();\n return getSurrogatePairCodePoint(cp, nextCp);\n }\n }\n //NOTE: we are at the end of a chunk, therefore we can't infer the surrogate pair yet.\n else if (!this.lastChunkWritten) {\n this.endOfChunkHit = true;\n return $.EOF;\n }\n //NOTE: isolated surrogate\n this._err(ERR.surrogateInInputStream);\n return cp;\n }\n willDropParsedChunk() {\n return this.pos > this.bufferWaterline;\n }\n dropParsedChunk() {\n if (this.willDropParsedChunk()) {\n this.html = this.html.substring(this.pos);\n this.lineStartPos -= this.pos;\n this.droppedBufferSize += this.pos;\n this.pos = 0;\n this.lastGapPos = -2;\n this.gapStack.length = 0;\n }\n }\n write(chunk, isLastChunk) {\n if (this.html.length > 0) {\n this.html += chunk;\n }\n else {\n this.html = chunk;\n }\n this.endOfChunkHit = false;\n this.lastChunkWritten = isLastChunk;\n }\n insertHtmlAtCurrentPos(chunk) {\n this.html = this.html.substring(0, this.pos + 1) + chunk + this.html.substring(this.pos + 1);\n this.endOfChunkHit = false;\n }\n startsWith(pattern, caseSensitive) {\n // Check if our buffer has enough characters\n if (this.pos + pattern.length > this.html.length) {\n this.endOfChunkHit = !this.lastChunkWritten;\n return false;\n }\n if (caseSensitive) {\n return this.html.startsWith(pattern, this.pos);\n }\n for (let i = 0; i < pattern.length; i++) {\n const cp = this.html.charCodeAt(this.pos + i) | 0x20;\n if (cp !== pattern.charCodeAt(i)) {\n return false;\n }\n }\n return true;\n }\n peek(offset) {\n const pos = this.pos + offset;\n if (pos >= this.html.length) {\n this.endOfChunkHit = !this.lastChunkWritten;\n return $.EOF;\n }\n const code = this.html.charCodeAt(pos);\n return code === $.CARRIAGE_RETURN ? $.LINE_FEED : code;\n }\n advance() {\n this.pos++;\n //NOTE: LF should be in the last column of the line\n if (this.isEol) {\n this.isEol = false;\n this.line++;\n this.lineStartPos = this.pos;\n }\n if (this.pos >= this.html.length) {\n this.endOfChunkHit = !this.lastChunkWritten;\n return $.EOF;\n }\n let cp = this.html.charCodeAt(this.pos);\n //NOTE: all U+000D CARRIAGE RETURN (CR) characters must be converted to U+000A LINE FEED (LF) characters\n if (cp === $.CARRIAGE_RETURN) {\n this.isEol = true;\n this.skipNextNewLine = true;\n return $.LINE_FEED;\n }\n //NOTE: any U+000A LINE FEED (LF) characters that immediately follow a U+000D CARRIAGE RETURN (CR) character\n //must be ignored.\n if (cp === $.LINE_FEED) {\n this.isEol = true;\n if (this.skipNextNewLine) {\n // `line` will be bumped again in the recursive call.\n this.line--;\n this.skipNextNewLine = false;\n this._addGap();\n return this.advance();\n }\n }\n this.skipNextNewLine = false;\n if (isSurrogate(cp)) {\n cp = this._processSurrogate(cp);\n }\n //OPTIMIZATION: first check if code point is in the common allowed\n //range (ASCII alphanumeric, whitespaces, big chunk of BMP)\n //before going into detailed performance cost validation.\n const isCommonValidRange = this.handler.onParseError === null ||\n (cp > 0x1f && cp < 0x7f) ||\n cp === $.LINE_FEED ||\n cp === $.CARRIAGE_RETURN ||\n (cp > 0x9f && cp < 64976);\n if (!isCommonValidRange) {\n this._checkForProblematicCharacters(cp);\n }\n return cp;\n }\n _checkForProblematicCharacters(cp) {\n if (isControlCodePoint(cp)) {\n this._err(ERR.controlCharacterInInputStream);\n }\n else if (isUndefinedCodePoint(cp)) {\n this._err(ERR.noncharacterInInputStream);\n }\n }\n retreat(count) {\n this.pos -= count;\n while (this.pos < this.lastGapPos) {\n this.lastGapPos = this.gapStack.pop();\n this.pos--;\n }\n this.isEol = false;\n }\n}\n","export var TokenType;\n(function (TokenType) {\n TokenType[TokenType[\"CHARACTER\"] = 0] = \"CHARACTER\";\n TokenType[TokenType[\"NULL_CHARACTER\"] = 1] = \"NULL_CHARACTER\";\n TokenType[TokenType[\"WHITESPACE_CHARACTER\"] = 2] = \"WHITESPACE_CHARACTER\";\n TokenType[TokenType[\"START_TAG\"] = 3] = \"START_TAG\";\n TokenType[TokenType[\"END_TAG\"] = 4] = \"END_TAG\";\n TokenType[TokenType[\"COMMENT\"] = 5] = \"COMMENT\";\n TokenType[TokenType[\"DOCTYPE\"] = 6] = \"DOCTYPE\";\n TokenType[TokenType[\"EOF\"] = 7] = \"EOF\";\n TokenType[TokenType[\"HIBERNATION\"] = 8] = \"HIBERNATION\";\n})(TokenType || (TokenType = {}));\nexport function getTokenAttr(token, attrName) {\n for (let i = token.attrs.length - 1; i >= 0; i--) {\n if (token.attrs[i].name === attrName) {\n return token.attrs[i].value;\n }\n }\n return null;\n}\n","// Generated using scripts/write-decode-map.ts\n\nexport const htmlDecodeTree: Uint16Array = /* #__PURE__ */ new Uint16Array(\n // prettier-ignore\n /* #__PURE__ */ \"\\u1d41<\\xd5\\u0131\\u028a\\u049d\\u057b\\u05d0\\u0675\\u06de\\u07a2\\u07d6\\u080f\\u0a4a\\u0a91\\u0da1\\u0e6d\\u0f09\\u0f26\\u10ca\\u1228\\u12e1\\u1415\\u149d\\u14c3\\u14df\\u1525\\0\\0\\0\\0\\0\\0\\u156b\\u16cd\\u198d\\u1c12\\u1ddd\\u1f7e\\u2060\\u21b0\\u228d\\u23c0\\u23fb\\u2442\\u2824\\u2912\\u2d08\\u2e48\\u2fce\\u3016\\u32ba\\u3639\\u37ac\\u38fe\\u3a28\\u3a71\\u3ae0\\u3b2e\\u0800EMabcfglmnoprstu\\\\bfms\\x7f\\x84\\x8b\\x90\\x95\\x98\\xa6\\xb3\\xb9\\xc8\\xcflig\\u803b\\xc6\\u40c6P\\u803b&\\u4026cute\\u803b\\xc1\\u40c1reve;\\u4102\\u0100iyx}rc\\u803b\\xc2\\u40c2;\\u4410r;\\uc000\\ud835\\udd04rave\\u803b\\xc0\\u40c0pha;\\u4391acr;\\u4100d;\\u6a53\\u0100gp\\x9d\\xa1on;\\u4104f;\\uc000\\ud835\\udd38plyFunction;\\u6061ing\\u803b\\xc5\\u40c5\\u0100cs\\xbe\\xc3r;\\uc000\\ud835\\udc9cign;\\u6254ilde\\u803b\\xc3\\u40c3ml\\u803b\\xc4\\u40c4\\u0400aceforsu\\xe5\\xfb\\xfe\\u0117\\u011c\\u0122\\u0127\\u012a\\u0100cr\\xea\\xf2kslash;\\u6216\\u0176\\xf6\\xf8;\\u6ae7ed;\\u6306y;\\u4411\\u0180crt\\u0105\\u010b\\u0114ause;\\u6235noullis;\\u612ca;\\u4392r;\\uc000\\ud835\\udd05pf;\\uc000\\ud835\\udd39eve;\\u42d8c\\xf2\\u0113mpeq;\\u624e\\u0700HOacdefhilorsu\\u014d\\u0151\\u0156\\u0180\\u019e\\u01a2\\u01b5\\u01b7\\u01ba\\u01dc\\u0215\\u0273\\u0278\\u027ecy;\\u4427PY\\u803b\\xa9\\u40a9\\u0180cpy\\u015d\\u0162\\u017aute;\\u4106\\u0100;i\\u0167\\u0168\\u62d2talDifferentialD;\\u6145leys;\\u612d\\u0200aeio\\u0189\\u018e\\u0194\\u0198ron;\\u410cdil\\u803b\\xc7\\u40c7rc;\\u4108nint;\\u6230ot;\\u410a\\u0100dn\\u01a7\\u01adilla;\\u40b8terDot;\\u40b7\\xf2\\u017fi;\\u43a7rcle\\u0200DMPT\\u01c7\\u01cb\\u01d1\\u01d6ot;\\u6299inus;\\u6296lus;\\u6295imes;\\u6297o\\u0100cs\\u01e2\\u01f8kwiseContourIntegral;\\u6232eCurly\\u0100DQ\\u0203\\u020foubleQuote;\\u601duote;\\u6019\\u0200lnpu\\u021e\\u0228\\u0247\\u0255on\\u0100;e\\u0225\\u0226\\u6237;\\u6a74\\u0180git\\u022f\\u0236\\u023aruent;\\u6261nt;\\u622fourIntegral;\\u622e\\u0100fr\\u024c\\u024e;\\u6102oduct;\\u6210nterClockwiseContourIntegral;\\u6233oss;\\u6a2fcr;\\uc000\\ud835\\udc9ep\\u0100;C\\u0284\\u0285\\u62d3ap;\\u624d\\u0580DJSZacefios\\u02a0\\u02ac\\u02b0\\u02b4\\u02b8\\u02cb\\u02d7\\u02e1\\u02e6\\u0333\\u048d\\u0100;o\\u0179\\u02a5trahd;\\u6911cy;\\u4402cy;\\u4405cy;\\u440f\\u0180grs\\u02bf\\u02c4\\u02c7ger;\\u6021r;\\u61a1hv;\\u6ae4\\u0100ay\\u02d0\\u02d5ron;\\u410e;\\u4414l\\u0100;t\\u02dd\\u02de\\u6207a;\\u4394r;\\uc000\\ud835\\udd07\\u0100af\\u02eb\\u0327\\u0100cm\\u02f0\\u0322ritical\\u0200ADGT\\u0300\\u0306\\u0316\\u031ccute;\\u40b4o\\u0174\\u030b\\u030d;\\u42d9bleAcute;\\u42ddrave;\\u4060ilde;\\u42dcond;\\u62c4ferentialD;\\u6146\\u0470\\u033d\\0\\0\\0\\u0342\\u0354\\0\\u0405f;\\uc000\\ud835\\udd3b\\u0180;DE\\u0348\\u0349\\u034d\\u40a8ot;\\u60dcqual;\\u6250ble\\u0300CDLRUV\\u0363\\u0372\\u0382\\u03cf\\u03e2\\u03f8ontourIntegra\\xec\\u0239o\\u0274\\u0379\\0\\0\\u037b\\xbb\\u0349nArrow;\\u61d3\\u0100eo\\u0387\\u03a4ft\\u0180ART\\u0390\\u0396\\u03a1rrow;\\u61d0ightArrow;\\u61d4e\\xe5\\u02cang\\u0100LR\\u03ab\\u03c4eft\\u0100AR\\u03b3\\u03b9rrow;\\u67f8ightArrow;\\u67faightArrow;\\u67f9ight\\u0100AT\\u03d8\\u03derrow;\\u61d2ee;\\u62a8p\\u0241\\u03e9\\0\\0\\u03efrrow;\\u61d1ownArrow;\\u61d5erticalBar;\\u6225n\\u0300ABLRTa\\u0412\\u042a\\u0430\\u045e\\u047f\\u037crrow\\u0180;BU\\u041d\\u041e\\u0422\\u6193ar;\\u6913pArrow;\\u61f5reve;\\u4311eft\\u02d2\\u043a\\0\\u0446\\0\\u0450ightVector;\\u6950eeVector;\\u695eector\\u0100;B\\u0459\\u045a\\u61bdar;\\u6956ight\\u01d4\\u0467\\0\\u0471eeVector;\\u695fector\\u0100;B\\u047a\\u047b\\u61c1ar;\\u6957ee\\u0100;A\\u0486\\u0487\\u62a4rrow;\\u61a7\\u0100ct\\u0492\\u0497r;\\uc000\\ud835\\udc9frok;\\u4110\\u0800NTacdfglmopqstux\\u04bd\\u04c0\\u04c4\\u04cb\\u04de\\u04e2\\u04e7\\u04ee\\u04f5\\u0521\\u052f\\u0536\\u0552\\u055d\\u0560\\u0565G;\\u414aH\\u803b\\xd0\\u40d0cute\\u803b\\xc9\\u40c9\\u0180aiy\\u04d2\\u04d7\\u04dcron;\\u411arc\\u803b\\xca\\u40ca;\\u442dot;\\u4116r;\\uc000\\ud835\\udd08rave\\u803b\\xc8\\u40c8ement;\\u6208\\u0100ap\\u04fa\\u04fecr;\\u4112ty\\u0253\\u0506\\0\\0\\u0512mallSquare;\\u65fberySmallSquare;\\u65ab\\u0100gp\\u0526\\u052aon;\\u4118f;\\uc000\\ud835\\udd3csilon;\\u4395u\\u0100ai\\u053c\\u0549l\\u0100;T\\u0542\\u0543\\u6a75ilde;\\u6242librium;\\u61cc\\u0100ci\\u0557\\u055ar;\\u6130m;\\u6a73a;\\u4397ml\\u803b\\xcb\\u40cb\\u0100ip\\u056a\\u056fsts;\\u6203onentialE;\\u6147\\u0280cfios\\u0585\\u0588\\u058d\\u05b2\\u05ccy;\\u4424r;\\uc000\\ud835\\udd09lled\\u0253\\u0597\\0\\0\\u05a3mallSquare;\\u65fcerySmallSquare;\\u65aa\\u0370\\u05ba\\0\\u05bf\\0\\0\\u05c4f;\\uc000\\ud835\\udd3dAll;\\u6200riertrf;\\u6131c\\xf2\\u05cb\\u0600JTabcdfgorst\\u05e8\\u05ec\\u05ef\\u05fa\\u0600\\u0612\\u0616\\u061b\\u061d\\u0623\\u066c\\u0672cy;\\u4403\\u803b>\\u403emma\\u0100;d\\u05f7\\u05f8\\u4393;\\u43dcreve;\\u411e\\u0180eiy\\u0607\\u060c\\u0610dil;\\u4122rc;\\u411c;\\u4413ot;\\u4120r;\\uc000\\ud835\\udd0a;\\u62d9pf;\\uc000\\ud835\\udd3eeater\\u0300EFGLST\\u0635\\u0644\\u064e\\u0656\\u065b\\u0666qual\\u0100;L\\u063e\\u063f\\u6265ess;\\u62dbullEqual;\\u6267reater;\\u6aa2ess;\\u6277lantEqual;\\u6a7eilde;\\u6273cr;\\uc000\\ud835\\udca2;\\u626b\\u0400Aacfiosu\\u0685\\u068b\\u0696\\u069b\\u069e\\u06aa\\u06be\\u06caRDcy;\\u442a\\u0100ct\\u0690\\u0694ek;\\u42c7;\\u405eirc;\\u4124r;\\u610clbertSpace;\\u610b\\u01f0\\u06af\\0\\u06b2f;\\u610dizontalLine;\\u6500\\u0100ct\\u06c3\\u06c5\\xf2\\u06a9rok;\\u4126mp\\u0144\\u06d0\\u06d8ownHum\\xf0\\u012fqual;\\u624f\\u0700EJOacdfgmnostu\\u06fa\\u06fe\\u0703\\u0707\\u070e\\u071a\\u071e\\u0721\\u0728\\u0744\\u0778\\u078b\\u078f\\u0795cy;\\u4415lig;\\u4132cy;\\u4401cute\\u803b\\xcd\\u40cd\\u0100iy\\u0713\\u0718rc\\u803b\\xce\\u40ce;\\u4418ot;\\u4130r;\\u6111rave\\u803b\\xcc\\u40cc\\u0180;ap\\u0720\\u072f\\u073f\\u0100cg\\u0734\\u0737r;\\u412ainaryI;\\u6148lie\\xf3\\u03dd\\u01f4\\u0749\\0\\u0762\\u0100;e\\u074d\\u074e\\u622c\\u0100gr\\u0753\\u0758ral;\\u622bsection;\\u62c2isible\\u0100CT\\u076c\\u0772omma;\\u6063imes;\\u6062\\u0180gpt\\u077f\\u0783\\u0788on;\\u412ef;\\uc000\\ud835\\udd40a;\\u4399cr;\\u6110ilde;\\u4128\\u01eb\\u079a\\0\\u079ecy;\\u4406l\\u803b\\xcf\\u40cf\\u0280cfosu\\u07ac\\u07b7\\u07bc\\u07c2\\u07d0\\u0100iy\\u07b1\\u07b5rc;\\u4134;\\u4419r;\\uc000\\ud835\\udd0dpf;\\uc000\\ud835\\udd41\\u01e3\\u07c7\\0\\u07ccr;\\uc000\\ud835\\udca5rcy;\\u4408kcy;\\u4404\\u0380HJacfos\\u07e4\\u07e8\\u07ec\\u07f1\\u07fd\\u0802\\u0808cy;\\u4425cy;\\u440cppa;\\u439a\\u0100ey\\u07f6\\u07fbdil;\\u4136;\\u441ar;\\uc000\\ud835\\udd0epf;\\uc000\\ud835\\udd42cr;\\uc000\\ud835\\udca6\\u0580JTaceflmost\\u0825\\u0829\\u082c\\u0850\\u0863\\u09b3\\u09b8\\u09c7\\u09cd\\u0a37\\u0a47cy;\\u4409\\u803b<\\u403c\\u0280cmnpr\\u0837\\u083c\\u0841\\u0844\\u084dute;\\u4139bda;\\u439bg;\\u67ealacetrf;\\u6112r;\\u619e\\u0180aey\\u0857\\u085c\\u0861ron;\\u413ddil;\\u413b;\\u441b\\u0100fs\\u0868\\u0970t\\u0500ACDFRTUVar\\u087e\\u08a9\\u08b1\\u08e0\\u08e6\\u08fc\\u092f\\u095b\\u0390\\u096a\\u0100nr\\u0883\\u088fgleBracket;\\u67e8row\\u0180;BR\\u0899\\u089a\\u089e\\u6190ar;\\u61e4ightArrow;\\u61c6eiling;\\u6308o\\u01f5\\u08b7\\0\\u08c3bleBracket;\\u67e6n\\u01d4\\u08c8\\0\\u08d2eeVector;\\u6961ector\\u0100;B\\u08db\\u08dc\\u61c3ar;\\u6959loor;\\u630aight\\u0100AV\\u08ef\\u08f5rrow;\\u6194ector;\\u694e\\u0100er\\u0901\\u0917e\\u0180;AV\\u0909\\u090a\\u0910\\u62a3rrow;\\u61a4ector;\\u695aiangle\\u0180;BE\\u0924\\u0925\\u0929\\u62b2ar;\\u69cfqual;\\u62b4p\\u0180DTV\\u0937\\u0942\\u094cownVector;\\u6951eeVector;\\u6960ector\\u0100;B\\u0956\\u0957\\u61bfar;\\u6958ector\\u0100;B\\u0965\\u0966\\u61bcar;\\u6952ight\\xe1\\u039cs\\u0300EFGLST\\u097e\\u098b\\u0995\\u099d\\u09a2\\u09adqualGreater;\\u62daullEqual;\\u6266reater;\\u6276ess;\\u6aa1lantEqual;\\u6a7dilde;\\u6272r;\\uc000\\ud835\\udd0f\\u0100;e\\u09bd\\u09be\\u62d8ftarrow;\\u61daidot;\\u413f\\u0180npw\\u09d4\\u0a16\\u0a1bg\\u0200LRlr\\u09de\\u09f7\\u0a02\\u0a10eft\\u0100AR\\u09e6\\u09ecrrow;\\u67f5ightArrow;\\u67f7ightArrow;\\u67f6eft\\u0100ar\\u03b3\\u0a0aight\\xe1\\u03bfight\\xe1\\u03caf;\\uc000\\ud835\\udd43er\\u0100LR\\u0a22\\u0a2ceftArrow;\\u6199ightArrow;\\u6198\\u0180cht\\u0a3e\\u0a40\\u0a42\\xf2\\u084c;\\u61b0rok;\\u4141;\\u626a\\u0400acefiosu\\u0a5a\\u0a5d\\u0a60\\u0a77\\u0a7c\\u0a85\\u0a8b\\u0a8ep;\\u6905y;\\u441c\\u0100dl\\u0a65\\u0a6fiumSpace;\\u605flintrf;\\u6133r;\\uc000\\ud835\\udd10nusPlus;\\u6213pf;\\uc000\\ud835\\udd44c\\xf2\\u0a76;\\u439c\\u0480Jacefostu\\u0aa3\\u0aa7\\u0aad\\u0ac0\\u0b14\\u0b19\\u0d91\\u0d97\\u0d9ecy;\\u440acute;\\u4143\\u0180aey\\u0ab4\\u0ab9\\u0aberon;\\u4147dil;\\u4145;\\u441d\\u0180gsw\\u0ac7\\u0af0\\u0b0eative\\u0180MTV\\u0ad3\\u0adf\\u0ae8ediumSpace;\\u600bhi\\u0100cn\\u0ae6\\u0ad8\\xeb\\u0ad9eryThi\\xee\\u0ad9ted\\u0100GL\\u0af8\\u0b06reaterGreate\\xf2\\u0673essLes\\xf3\\u0a48Line;\\u400ar;\\uc000\\ud835\\udd11\\u0200Bnpt\\u0b22\\u0b28\\u0b37\\u0b3areak;\\u6060BreakingSpace;\\u40a0f;\\u6115\\u0680;CDEGHLNPRSTV\\u0b55\\u0b56\\u0b6a\\u0b7c\\u0ba1\\u0beb\\u0c04\\u0c5e\\u0c84\\u0ca6\\u0cd8\\u0d61\\u0d85\\u6aec\\u0100ou\\u0b5b\\u0b64ngruent;\\u6262pCap;\\u626doubleVerticalBar;\\u6226\\u0180lqx\\u0b83\\u0b8a\\u0b9bement;\\u6209ual\\u0100;T\\u0b92\\u0b93\\u6260ilde;\\uc000\\u2242\\u0338ists;\\u6204reater\\u0380;EFGLST\\u0bb6\\u0bb7\\u0bbd\\u0bc9\\u0bd3\\u0bd8\\u0be5\\u626fqual;\\u6271ullEqual;\\uc000\\u2267\\u0338reater;\\uc000\\u226b\\u0338ess;\\u6279lantEqual;\\uc000\\u2a7e\\u0338ilde;\\u6275ump\\u0144\\u0bf2\\u0bfdownHump;\\uc000\\u224e\\u0338qual;\\uc000\\u224f\\u0338e\\u0100fs\\u0c0a\\u0c27tTriangle\\u0180;BE\\u0c1a\\u0c1b\\u0c21\\u62eaar;\\uc000\\u29cf\\u0338qual;\\u62ecs\\u0300;EGLST\\u0c35\\u0c36\\u0c3c\\u0c44\\u0c4b\\u0c58\\u626equal;\\u6270reater;\\u6278ess;\\uc000\\u226a\\u0338lantEqual;\\uc000\\u2a7d\\u0338ilde;\\u6274ested\\u0100GL\\u0c68\\u0c79reaterGreater;\\uc000\\u2aa2\\u0338essLess;\\uc000\\u2aa1\\u0338recedes\\u0180;ES\\u0c92\\u0c93\\u0c9b\\u6280qual;\\uc000\\u2aaf\\u0338lantEqual;\\u62e0\\u0100ei\\u0cab\\u0cb9verseElement;\\u620cghtTriangle\\u0180;BE\\u0ccb\\u0ccc\\u0cd2\\u62ebar;\\uc000\\u29d0\\u0338qual;\\u62ed\\u0100qu\\u0cdd\\u0d0cuareSu\\u0100bp\\u0ce8\\u0cf9set\\u0100;E\\u0cf0\\u0cf3\\uc000\\u228f\\u0338qual;\\u62e2erset\\u0100;E\\u0d03\\u0d06\\uc000\\u2290\\u0338qual;\\u62e3\\u0180bcp\\u0d13\\u0d24\\u0d4eset\\u0100;E\\u0d1b\\u0d1e\\uc000\\u2282\\u20d2qual;\\u6288ceeds\\u0200;EST\\u0d32\\u0d33\\u0d3b\\u0d46\\u6281qual;\\uc000\\u2ab0\\u0338lantEqual;\\u62e1ilde;\\uc000\\u227f\\u0338erset\\u0100;E\\u0d58\\u0d5b\\uc000\\u2283\\u20d2qual;\\u6289ilde\\u0200;EFT\\u0d6e\\u0d6f\\u0d75\\u0d7f\\u6241qual;\\u6244ullEqual;\\u6247ilde;\\u6249erticalBar;\\u6224cr;\\uc000\\ud835\\udca9ilde\\u803b\\xd1\\u40d1;\\u439d\\u0700Eacdfgmoprstuv\\u0dbd\\u0dc2\\u0dc9\\u0dd5\\u0ddb\\u0de0\\u0de7\\u0dfc\\u0e02\\u0e20\\u0e22\\u0e32\\u0e3f\\u0e44lig;\\u4152cute\\u803b\\xd3\\u40d3\\u0100iy\\u0dce\\u0dd3rc\\u803b\\xd4\\u40d4;\\u441eblac;\\u4150r;\\uc000\\ud835\\udd12rave\\u803b\\xd2\\u40d2\\u0180aei\\u0dee\\u0df2\\u0df6cr;\\u414cga;\\u43a9cron;\\u439fpf;\\uc000\\ud835\\udd46enCurly\\u0100DQ\\u0e0e\\u0e1aoubleQuote;\\u601cuote;\\u6018;\\u6a54\\u0100cl\\u0e27\\u0e2cr;\\uc000\\ud835\\udcaaash\\u803b\\xd8\\u40d8i\\u016c\\u0e37\\u0e3cde\\u803b\\xd5\\u40d5es;\\u6a37ml\\u803b\\xd6\\u40d6er\\u0100BP\\u0e4b\\u0e60\\u0100ar\\u0e50\\u0e53r;\\u603eac\\u0100ek\\u0e5a\\u0e5c;\\u63deet;\\u63b4arenthesis;\\u63dc\\u0480acfhilors\\u0e7f\\u0e87\\u0e8a\\u0e8f\\u0e92\\u0e94\\u0e9d\\u0eb0\\u0efcrtialD;\\u6202y;\\u441fr;\\uc000\\ud835\\udd13i;\\u43a6;\\u43a0usMinus;\\u40b1\\u0100ip\\u0ea2\\u0eadncareplan\\xe5\\u069df;\\u6119\\u0200;eio\\u0eb9\\u0eba\\u0ee0\\u0ee4\\u6abbcedes\\u0200;EST\\u0ec8\\u0ec9\\u0ecf\\u0eda\\u627aqual;\\u6aaflantEqual;\\u627cilde;\\u627eme;\\u6033\\u0100dp\\u0ee9\\u0eeeuct;\\u620fortion\\u0100;a\\u0225\\u0ef9l;\\u621d\\u0100ci\\u0f01\\u0f06r;\\uc000\\ud835\\udcab;\\u43a8\\u0200Ufos\\u0f11\\u0f16\\u0f1b\\u0f1fOT\\u803b\\\"\\u4022r;\\uc000\\ud835\\udd14pf;\\u611acr;\\uc000\\ud835\\udcac\\u0600BEacefhiorsu\\u0f3e\\u0f43\\u0f47\\u0f60\\u0f73\\u0fa7\\u0faa\\u0fad\\u1096\\u10a9\\u10b4\\u10bearr;\\u6910G\\u803b\\xae\\u40ae\\u0180cnr\\u0f4e\\u0f53\\u0f56ute;\\u4154g;\\u67ebr\\u0100;t\\u0f5c\\u0f5d\\u61a0l;\\u6916\\u0180aey\\u0f67\\u0f6c\\u0f71ron;\\u4158dil;\\u4156;\\u4420\\u0100;v\\u0f78\\u0f79\\u611cerse\\u0100EU\\u0f82\\u0f99\\u0100lq\\u0f87\\u0f8eement;\\u620builibrium;\\u61cbpEquilibrium;\\u696fr\\xbb\\u0f79o;\\u43a1ght\\u0400ACDFTUVa\\u0fc1\\u0feb\\u0ff3\\u1022\\u1028\\u105b\\u1087\\u03d8\\u0100nr\\u0fc6\\u0fd2gleBracket;\\u67e9row\\u0180;BL\\u0fdc\\u0fdd\\u0fe1\\u6192ar;\\u61e5eftArrow;\\u61c4eiling;\\u6309o\\u01f5\\u0ff9\\0\\u1005bleBracket;\\u67e7n\\u01d4\\u100a\\0\\u1014eeVector;\\u695dector\\u0100;B\\u101d\\u101e\\u61c2ar;\\u6955loor;\\u630b\\u0100er\\u102d\\u1043e\\u0180;AV\\u1035\\u1036\\u103c\\u62a2rrow;\\u61a6ector;\\u695biangle\\u0180;BE\\u1050\\u1051\\u1055\\u62b3ar;\\u69d0qual;\\u62b5p\\u0180DTV\\u1063\\u106e\\u1078ownVector;\\u694feeVector;\\u695cector\\u0100;B\\u1082\\u1083\\u61bear;\\u6954ector\\u0100;B\\u1091\\u1092\\u61c0ar;\\u6953\\u0100pu\\u109b\\u109ef;\\u611dndImplies;\\u6970ightarrow;\\u61db\\u0100ch\\u10b9\\u10bcr;\\u611b;\\u61b1leDelayed;\\u69f4\\u0680HOacfhimoqstu\\u10e4\\u10f1\\u10f7\\u10fd\\u1119\\u111e\\u1151\\u1156\\u1161\\u1167\\u11b5\\u11bb\\u11bf\\u0100Cc\\u10e9\\u10eeHcy;\\u4429y;\\u4428FTcy;\\u442ccute;\\u415a\\u0280;aeiy\\u1108\\u1109\\u110e\\u1113\\u1117\\u6abcron;\\u4160dil;\\u415erc;\\u415c;\\u4421r;\\uc000\\ud835\\udd16ort\\u0200DLRU\\u112a\\u1134\\u113e\\u1149ownArrow\\xbb\\u041eeftArrow\\xbb\\u089aightArrow\\xbb\\u0fddpArrow;\\u6191gma;\\u43a3allCircle;\\u6218pf;\\uc000\\ud835\\udd4a\\u0272\\u116d\\0\\0\\u1170t;\\u621aare\\u0200;ISU\\u117b\\u117c\\u1189\\u11af\\u65a1ntersection;\\u6293u\\u0100bp\\u118f\\u119eset\\u0100;E\\u1197\\u1198\\u628fqual;\\u6291erset\\u0100;E\\u11a8\\u11a9\\u6290qual;\\u6292nion;\\u6294cr;\\uc000\\ud835\\udcaear;\\u62c6\\u0200bcmp\\u11c8\\u11db\\u1209\\u120b\\u0100;s\\u11cd\\u11ce\\u62d0et\\u0100;E\\u11cd\\u11d5qual;\\u6286\\u0100ch\\u11e0\\u1205eeds\\u0200;EST\\u11ed\\u11ee\\u11f4\\u11ff\\u627bqual;\\u6ab0lantEqual;\\u627dilde;\\u627fTh\\xe1\\u0f8c;\\u6211\\u0180;es\\u1212\\u1213\\u1223\\u62d1rset\\u0100;E\\u121c\\u121d\\u6283qual;\\u6287et\\xbb\\u1213\\u0580HRSacfhiors\\u123e\\u1244\\u1249\\u1255\\u125e\\u1271\\u1276\\u129f\\u12c2\\u12c8\\u12d1ORN\\u803b\\xde\\u40deADE;\\u6122\\u0100Hc\\u124e\\u1252cy;\\u440by;\\u4426\\u0100bu\\u125a\\u125c;\\u4009;\\u43a4\\u0180aey\\u1265\\u126a\\u126fron;\\u4164dil;\\u4162;\\u4422r;\\uc000\\ud835\\udd17\\u0100ei\\u127b\\u1289\\u01f2\\u1280\\0\\u1287efore;\\u6234a;\\u4398\\u0100cn\\u128e\\u1298kSpace;\\uc000\\u205f\\u200aSpace;\\u6009lde\\u0200;EFT\\u12ab\\u12ac\\u12b2\\u12bc\\u623cqual;\\u6243ullEqual;\\u6245ilde;\\u6248pf;\\uc000\\ud835\\udd4bipleDot;\\u60db\\u0100ct\\u12d6\\u12dbr;\\uc000\\ud835\\udcafrok;\\u4166\\u0ae1\\u12f7\\u130e\\u131a\\u1326\\0\\u132c\\u1331\\0\\0\\0\\0\\0\\u1338\\u133d\\u1377\\u1385\\0\\u13ff\\u1404\\u140a\\u1410\\u0100cr\\u12fb\\u1301ute\\u803b\\xda\\u40dar\\u0100;o\\u1307\\u1308\\u619fcir;\\u6949r\\u01e3\\u1313\\0\\u1316y;\\u440eve;\\u416c\\u0100iy\\u131e\\u1323rc\\u803b\\xdb\\u40db;\\u4423blac;\\u4170r;\\uc000\\ud835\\udd18rave\\u803b\\xd9\\u40d9acr;\\u416a\\u0100di\\u1341\\u1369er\\u0100BP\\u1348\\u135d\\u0100ar\\u134d\\u1350r;\\u405fac\\u0100ek\\u1357\\u1359;\\u63dfet;\\u63b5arenthesis;\\u63ddon\\u0100;P\\u1370\\u1371\\u62c3lus;\\u628e\\u0100gp\\u137b\\u137fon;\\u4172f;\\uc000\\ud835\\udd4c\\u0400ADETadps\\u1395\\u13ae\\u13b8\\u13c4\\u03e8\\u13d2\\u13d7\\u13f3rrow\\u0180;BD\\u1150\\u13a0\\u13a4ar;\\u6912ownArrow;\\u61c5ownArrow;\\u6195quilibrium;\\u696eee\\u0100;A\\u13cb\\u13cc\\u62a5rrow;\\u61a5own\\xe1\\u03f3er\\u0100LR\\u13de\\u13e8eftArrow;\\u6196ightArrow;\\u6197i\\u0100;l\\u13f9\\u13fa\\u43d2on;\\u43a5ing;\\u416ecr;\\uc000\\ud835\\udcb0ilde;\\u4168ml\\u803b\\xdc\\u40dc\\u0480Dbcdefosv\\u1427\\u142c\\u1430\\u1433\\u143e\\u1485\\u148a\\u1490\\u1496ash;\\u62abar;\\u6aeby;\\u4412ash\\u0100;l\\u143b\\u143c\\u62a9;\\u6ae6\\u0100er\\u1443\\u1445;\\u62c1\\u0180bty\\u144c\\u1450\\u147aar;\\u6016\\u0100;i\\u144f\\u1455cal\\u0200BLST\\u1461\\u1465\\u146a\\u1474ar;\\u6223ine;\\u407ceparator;\\u6758ilde;\\u6240ThinSpace;\\u600ar;\\uc000\\ud835\\udd19pf;\\uc000\\ud835\\udd4dcr;\\uc000\\ud835\\udcb1dash;\\u62aa\\u0280cefos\\u14a7\\u14ac\\u14b1\\u14b6\\u14bcirc;\\u4174dge;\\u62c0r;\\uc000\\ud835\\udd1apf;\\uc000\\ud835\\udd4ecr;\\uc000\\ud835\\udcb2\\u0200fios\\u14cb\\u14d0\\u14d2\\u14d8r;\\uc000\\ud835\\udd1b;\\u439epf;\\uc000\\ud835\\udd4fcr;\\uc000\\ud835\\udcb3\\u0480AIUacfosu\\u14f1\\u14f5\\u14f9\\u14fd\\u1504\\u150f\\u1514\\u151a\\u1520cy;\\u442fcy;\\u4407cy;\\u442ecute\\u803b\\xdd\\u40dd\\u0100iy\\u1509\\u150drc;\\u4176;\\u442br;\\uc000\\ud835\\udd1cpf;\\uc000\\ud835\\udd50cr;\\uc000\\ud835\\udcb4ml;\\u4178\\u0400Hacdefos\\u1535\\u1539\\u153f\\u154b\\u154f\\u155d\\u1560\\u1564cy;\\u4416cute;\\u4179\\u0100ay\\u1544\\u1549ron;\\u417d;\\u4417ot;\\u417b\\u01f2\\u1554\\0\\u155boWidt\\xe8\\u0ad9a;\\u4396r;\\u6128pf;\\u6124cr;\\uc000\\ud835\\udcb5\\u0be1\\u1583\\u158a\\u1590\\0\\u15b0\\u15b6\\u15bf\\0\\0\\0\\0\\u15c6\\u15db\\u15eb\\u165f\\u166d\\0\\u1695\\u169b\\u16b2\\u16b9\\0\\u16becute\\u803b\\xe1\\u40e1reve;\\u4103\\u0300;Ediuy\\u159c\\u159d\\u15a1\\u15a3\\u15a8\\u15ad\\u623e;\\uc000\\u223e\\u0333;\\u623frc\\u803b\\xe2\\u40e2te\\u80bb\\xb4\\u0306;\\u4430lig\\u803b\\xe6\\u40e6\\u0100;r\\xb2\\u15ba;\\uc000\\ud835\\udd1erave\\u803b\\xe0\\u40e0\\u0100ep\\u15ca\\u15d6\\u0100fp\\u15cf\\u15d4sym;\\u6135\\xe8\\u15d3ha;\\u43b1\\u0100ap\\u15dfc\\u0100cl\\u15e4\\u15e7r;\\u4101g;\\u6a3f\\u0264\\u15f0\\0\\0\\u160a\\u0280;adsv\\u15fa\\u15fb\\u15ff\\u1601\\u1607\\u6227nd;\\u6a55;\\u6a5clope;\\u6a58;\\u6a5a\\u0380;elmrsz\\u1618\\u1619\\u161b\\u161e\\u163f\\u164f\\u1659\\u6220;\\u69a4e\\xbb\\u1619sd\\u0100;a\\u1625\\u1626\\u6221\\u0461\\u1630\\u1632\\u1634\\u1636\\u1638\\u163a\\u163c\\u163e;\\u69a8;\\u69a9;\\u69aa;\\u69ab;\\u69ac;\\u69ad;\\u69ae;\\u69aft\\u0100;v\\u1645\\u1646\\u621fb\\u0100;d\\u164c\\u164d\\u62be;\\u699d\\u0100pt\\u1654\\u1657h;\\u6222\\xbb\\xb9arr;\\u637c\\u0100gp\\u1663\\u1667on;\\u4105f;\\uc000\\ud835\\udd52\\u0380;Eaeiop\\u12c1\\u167b\\u167d\\u1682\\u1684\\u1687\\u168a;\\u6a70cir;\\u6a6f;\\u624ad;\\u624bs;\\u4027rox\\u0100;e\\u12c1\\u1692\\xf1\\u1683ing\\u803b\\xe5\\u40e5\\u0180cty\\u16a1\\u16a6\\u16a8r;\\uc000\\ud835\\udcb6;\\u402amp\\u0100;e\\u12c1\\u16af\\xf1\\u0288ilde\\u803b\\xe3\\u40e3ml\\u803b\\xe4\\u40e4\\u0100ci\\u16c2\\u16c8onin\\xf4\\u0272nt;\\u6a11\\u0800Nabcdefiklnoprsu\\u16ed\\u16f1\\u1730\\u173c\\u1743\\u1748\\u1778\\u177d\\u17e0\\u17e6\\u1839\\u1850\\u170d\\u193d\\u1948\\u1970ot;\\u6aed\\u0100cr\\u16f6\\u171ek\\u0200ceps\\u1700\\u1705\\u170d\\u1713ong;\\u624cpsilon;\\u43f6rime;\\u6035im\\u0100;e\\u171a\\u171b\\u623dq;\\u62cd\\u0176\\u1722\\u1726ee;\\u62bded\\u0100;g\\u172c\\u172d\\u6305e\\xbb\\u172drk\\u0100;t\\u135c\\u1737brk;\\u63b6\\u0100oy\\u1701\\u1741;\\u4431quo;\\u601e\\u0280cmprt\\u1753\\u175b\\u1761\\u1764\\u1768aus\\u0100;e\\u010a\\u0109ptyv;\\u69b0s\\xe9\\u170cno\\xf5\\u0113\\u0180ahw\\u176f\\u1771\\u1773;\\u43b2;\\u6136een;\\u626cr;\\uc000\\ud835\\udd1fg\\u0380costuvw\\u178d\\u179d\\u17b3\\u17c1\\u17d5\\u17db\\u17de\\u0180aiu\\u1794\\u1796\\u179a\\xf0\\u0760rc;\\u65efp\\xbb\\u1371\\u0180dpt\\u17a4\\u17a8\\u17adot;\\u6a00lus;\\u6a01imes;\\u6a02\\u0271\\u17b9\\0\\0\\u17becup;\\u6a06ar;\\u6605riangle\\u0100du\\u17cd\\u17d2own;\\u65bdp;\\u65b3plus;\\u6a04e\\xe5\\u1444\\xe5\\u14adarow;\\u690d\\u0180ako\\u17ed\\u1826\\u1835\\u0100cn\\u17f2\\u1823k\\u0180lst\\u17fa\\u05ab\\u1802ozenge;\\u69ebriangle\\u0200;dlr\\u1812\\u1813\\u1818\\u181d\\u65b4own;\\u65beeft;\\u65c2ight;\\u65b8k;\\u6423\\u01b1\\u182b\\0\\u1833\\u01b2\\u182f\\0\\u1831;\\u6592;\\u65914;\\u6593ck;\\u6588\\u0100eo\\u183e\\u184d\\u0100;q\\u1843\\u1846\\uc000=\\u20e5uiv;\\uc000\\u2261\\u20e5t;\\u6310\\u0200ptwx\\u1859\\u185e\\u1867\\u186cf;\\uc000\\ud835\\udd53\\u0100;t\\u13cb\\u1863om\\xbb\\u13cctie;\\u62c8\\u0600DHUVbdhmptuv\\u1885\\u1896\\u18aa\\u18bb\\u18d7\\u18db\\u18ec\\u18ff\\u1905\\u190a\\u1910\\u1921\\u0200LRlr\\u188e\\u1890\\u1892\\u1894;\\u6557;\\u6554;\\u6556;\\u6553\\u0280;DUdu\\u18a1\\u18a2\\u18a4\\u18a6\\u18a8\\u6550;\\u6566;\\u6569;\\u6564;\\u6567\\u0200LRlr\\u18b3\\u18b5\\u18b7\\u18b9;\\u655d;\\u655a;\\u655c;\\u6559\\u0380;HLRhlr\\u18ca\\u18cb\\u18cd\\u18cf\\u18d1\\u18d3\\u18d5\\u6551;\\u656c;\\u6563;\\u6560;\\u656b;\\u6562;\\u655fox;\\u69c9\\u0200LRlr\\u18e4\\u18e6\\u18e8\\u18ea;\\u6555;\\u6552;\\u6510;\\u650c\\u0280;DUdu\\u06bd\\u18f7\\u18f9\\u18fb\\u18fd;\\u6565;\\u6568;\\u652c;\\u6534inus;\\u629flus;\\u629eimes;\\u62a0\\u0200LRlr\\u1919\\u191b\\u191d\\u191f;\\u655b;\\u6558;\\u6518;\\u6514\\u0380;HLRhlr\\u1930\\u1931\\u1933\\u1935\\u1937\\u1939\\u193b\\u6502;\\u656a;\\u6561;\\u655e;\\u653c;\\u6524;\\u651c\\u0100ev\\u0123\\u1942bar\\u803b\\xa6\\u40a6\\u0200ceio\\u1951\\u1956\\u195a\\u1960r;\\uc000\\ud835\\udcb7mi;\\u604fm\\u0100;e\\u171a\\u171cl\\u0180;bh\\u1968\\u1969\\u196b\\u405c;\\u69c5sub;\\u67c8\\u016c\\u1974\\u197el\\u0100;e\\u1979\\u197a\\u6022t\\xbb\\u197ap\\u0180;Ee\\u012f\\u1985\\u1987;\\u6aae\\u0100;q\\u06dc\\u06db\\u0ce1\\u19a7\\0\\u19e8\\u1a11\\u1a15\\u1a32\\0\\u1a37\\u1a50\\0\\0\\u1ab4\\0\\0\\u1ac1\\0\\0\\u1b21\\u1b2e\\u1b4d\\u1b52\\0\\u1bfd\\0\\u1c0c\\u0180cpr\\u19ad\\u19b2\\u19ddute;\\u4107\\u0300;abcds\\u19bf\\u19c0\\u19c4\\u19ca\\u19d5\\u19d9\\u6229nd;\\u6a44rcup;\\u6a49\\u0100au\\u19cf\\u19d2p;\\u6a4bp;\\u6a47ot;\\u6a40;\\uc000\\u2229\\ufe00\\u0100eo\\u19e2\\u19e5t;\\u6041\\xee\\u0693\\u0200aeiu\\u19f0\\u19fb\\u1a01\\u1a05\\u01f0\\u19f5\\0\\u19f8s;\\u6a4don;\\u410ddil\\u803b\\xe7\\u40e7rc;\\u4109ps\\u0100;s\\u1a0c\\u1a0d\\u6a4cm;\\u6a50ot;\\u410b\\u0180dmn\\u1a1b\\u1a20\\u1a26il\\u80bb\\xb8\\u01adptyv;\\u69b2t\\u8100\\xa2;e\\u1a2d\\u1a2e\\u40a2r\\xe4\\u01b2r;\\uc000\\ud835\\udd20\\u0180cei\\u1a3d\\u1a40\\u1a4dy;\\u4447ck\\u0100;m\\u1a47\\u1a48\\u6713ark\\xbb\\u1a48;\\u43c7r\\u0380;Ecefms\\u1a5f\\u1a60\\u1a62\\u1a6b\\u1aa4\\u1aaa\\u1aae\\u65cb;\\u69c3\\u0180;el\\u1a69\\u1a6a\\u1a6d\\u42c6q;\\u6257e\\u0261\\u1a74\\0\\0\\u1a88rrow\\u0100lr\\u1a7c\\u1a81eft;\\u61baight;\\u61bb\\u0280RSacd\\u1a92\\u1a94\\u1a96\\u1a9a\\u1a9f\\xbb\\u0f47;\\u64c8st;\\u629birc;\\u629aash;\\u629dnint;\\u6a10id;\\u6aefcir;\\u69c2ubs\\u0100;u\\u1abb\\u1abc\\u6663it\\xbb\\u1abc\\u02ec\\u1ac7\\u1ad4\\u1afa\\0\\u1b0aon\\u0100;e\\u1acd\\u1ace\\u403a\\u0100;q\\xc7\\xc6\\u026d\\u1ad9\\0\\0\\u1ae2a\\u0100;t\\u1ade\\u1adf\\u402c;\\u4040\\u0180;fl\\u1ae8\\u1ae9\\u1aeb\\u6201\\xee\\u1160e\\u0100mx\\u1af1\\u1af6ent\\xbb\\u1ae9e\\xf3\\u024d\\u01e7\\u1afe\\0\\u1b07\\u0100;d\\u12bb\\u1b02ot;\\u6a6dn\\xf4\\u0246\\u0180fry\\u1b10\\u1b14\\u1b17;\\uc000\\ud835\\udd54o\\xe4\\u0254\\u8100\\xa9;s\\u0155\\u1b1dr;\\u6117\\u0100ao\\u1b25\\u1b29rr;\\u61b5ss;\\u6717\\u0100cu\\u1b32\\u1b37r;\\uc000\\ud835\\udcb8\\u0100bp\\u1b3c\\u1b44\\u0100;e\\u1b41\\u1b42\\u6acf;\\u6ad1\\u0100;e\\u1b49\\u1b4a\\u6ad0;\\u6ad2dot;\\u62ef\\u0380delprvw\\u1b60\\u1b6c\\u1b77\\u1b82\\u1bac\\u1bd4\\u1bf9arr\\u0100lr\\u1b68\\u1b6a;\\u6938;\\u6935\\u0270\\u1b72\\0\\0\\u1b75r;\\u62dec;\\u62dfarr\\u0100;p\\u1b7f\\u1b80\\u61b6;\\u693d\\u0300;bcdos\\u1b8f\\u1b90\\u1b96\\u1ba1\\u1ba5\\u1ba8\\u622arcap;\\u6a48\\u0100au\\u1b9b\\u1b9ep;\\u6a46p;\\u6a4aot;\\u628dr;\\u6a45;\\uc000\\u222a\\ufe00\\u0200alrv\\u1bb5\\u1bbf\\u1bde\\u1be3rr\\u0100;m\\u1bbc\\u1bbd\\u61b7;\\u693cy\\u0180evw\\u1bc7\\u1bd4\\u1bd8q\\u0270\\u1bce\\0\\0\\u1bd2re\\xe3\\u1b73u\\xe3\\u1b75ee;\\u62ceedge;\\u62cfen\\u803b\\xa4\\u40a4earrow\\u0100lr\\u1bee\\u1bf3eft\\xbb\\u1b80ight\\xbb\\u1bbde\\xe4\\u1bdd\\u0100ci\\u1c01\\u1c07onin\\xf4\\u01f7nt;\\u6231lcty;\\u632d\\u0980AHabcdefhijlorstuwz\\u1c38\\u1c3b\\u1c3f\\u1c5d\\u1c69\\u1c75\\u1c8a\\u1c9e\\u1cac\\u1cb7\\u1cfb\\u1cff\\u1d0d\\u1d7b\\u1d91\\u1dab\\u1dbb\\u1dc6\\u1dcdr\\xf2\\u0381ar;\\u6965\\u0200glrs\\u1c48\\u1c4d\\u1c52\\u1c54ger;\\u6020eth;\\u6138\\xf2\\u1133h\\u0100;v\\u1c5a\\u1c5b\\u6010\\xbb\\u090a\\u016b\\u1c61\\u1c67arow;\\u690fa\\xe3\\u0315\\u0100ay\\u1c6e\\u1c73ron;\\u410f;\\u4434\\u0180;ao\\u0332\\u1c7c\\u1c84\\u0100gr\\u02bf\\u1c81r;\\u61catseq;\\u6a77\\u0180glm\\u1c91\\u1c94\\u1c98\\u803b\\xb0\\u40b0ta;\\u43b4ptyv;\\u69b1\\u0100ir\\u1ca3\\u1ca8sht;\\u697f;\\uc000\\ud835\\udd21ar\\u0100lr\\u1cb3\\u1cb5\\xbb\\u08dc\\xbb\\u101e\\u0280aegsv\\u1cc2\\u0378\\u1cd6\\u1cdc\\u1ce0m\\u0180;os\\u0326\\u1cca\\u1cd4nd\\u0100;s\\u0326\\u1cd1uit;\\u6666amma;\\u43ddin;\\u62f2\\u0180;io\\u1ce7\\u1ce8\\u1cf8\\u40f7de\\u8100\\xf7;o\\u1ce7\\u1cf0ntimes;\\u62c7n\\xf8\\u1cf7cy;\\u4452c\\u026f\\u1d06\\0\\0\\u1d0arn;\\u631eop;\\u630d\\u0280lptuw\\u1d18\\u1d1d\\u1d22\\u1d49\\u1d55lar;\\u4024f;\\uc000\\ud835\\udd55\\u0280;emps\\u030b\\u1d2d\\u1d37\\u1d3d\\u1d42q\\u0100;d\\u0352\\u1d33ot;\\u6251inus;\\u6238lus;\\u6214quare;\\u62a1blebarwedg\\xe5\\xfan\\u0180adh\\u112e\\u1d5d\\u1d67ownarrow\\xf3\\u1c83arpoon\\u0100lr\\u1d72\\u1d76ef\\xf4\\u1cb4igh\\xf4\\u1cb6\\u0162\\u1d7f\\u1d85karo\\xf7\\u0f42\\u026f\\u1d8a\\0\\0\\u1d8ern;\\u631fop;\\u630c\\u0180cot\\u1d98\\u1da3\\u1da6\\u0100ry\\u1d9d\\u1da1;\\uc000\\ud835\\udcb9;\\u4455l;\\u69f6rok;\\u4111\\u0100dr\\u1db0\\u1db4ot;\\u62f1i\\u0100;f\\u1dba\\u1816\\u65bf\\u0100ah\\u1dc0\\u1dc3r\\xf2\\u0429a\\xf2\\u0fa6angle;\\u69a6\\u0100ci\\u1dd2\\u1dd5y;\\u445fgrarr;\\u67ff\\u0900Dacdefglmnopqrstux\\u1e01\\u1e09\\u1e19\\u1e38\\u0578\\u1e3c\\u1e49\\u1e61\\u1e7e\\u1ea5\\u1eaf\\u1ebd\\u1ee1\\u1f2a\\u1f37\\u1f44\\u1f4e\\u1f5a\\u0100Do\\u1e06\\u1d34o\\xf4\\u1c89\\u0100cs\\u1e0e\\u1e14ute\\u803b\\xe9\\u40e9ter;\\u6a6e\\u0200aioy\\u1e22\\u1e27\\u1e31\\u1e36ron;\\u411br\\u0100;c\\u1e2d\\u1e2e\\u6256\\u803b\\xea\\u40ealon;\\u6255;\\u444dot;\\u4117\\u0100Dr\\u1e41\\u1e45ot;\\u6252;\\uc000\\ud835\\udd22\\u0180;rs\\u1e50\\u1e51\\u1e57\\u6a9aave\\u803b\\xe8\\u40e8\\u0100;d\\u1e5c\\u1e5d\\u6a96ot;\\u6a98\\u0200;ils\\u1e6a\\u1e6b\\u1e72\\u1e74\\u6a99nters;\\u63e7;\\u6113\\u0100;d\\u1e79\\u1e7a\\u6a95ot;\\u6a97\\u0180aps\\u1e85\\u1e89\\u1e97cr;\\u4113ty\\u0180;sv\\u1e92\\u1e93\\u1e95\\u6205et\\xbb\\u1e93p\\u01001;\\u1e9d\\u1ea4\\u0133\\u1ea1\\u1ea3;\\u6004;\\u6005\\u6003\\u0100gs\\u1eaa\\u1eac;\\u414bp;\\u6002\\u0100gp\\u1eb4\\u1eb8on;\\u4119f;\\uc000\\ud835\\udd56\\u0180als\\u1ec4\\u1ece\\u1ed2r\\u0100;s\\u1eca\\u1ecb\\u62d5l;\\u69e3us;\\u6a71i\\u0180;lv\\u1eda\\u1edb\\u1edf\\u43b5on\\xbb\\u1edb;\\u43f5\\u0200csuv\\u1eea\\u1ef3\\u1f0b\\u1f23\\u0100io\\u1eef\\u1e31rc\\xbb\\u1e2e\\u0269\\u1ef9\\0\\0\\u1efb\\xed\\u0548ant\\u0100gl\\u1f02\\u1f06tr\\xbb\\u1e5dess\\xbb\\u1e7a\\u0180aei\\u1f12\\u1f16\\u1f1als;\\u403dst;\\u625fv\\u0100;D\\u0235\\u1f20D;\\u6a78parsl;\\u69e5\\u0100Da\\u1f2f\\u1f33ot;\\u6253rr;\\u6971\\u0180cdi\\u1f3e\\u1f41\\u1ef8r;\\u612fo\\xf4\\u0352\\u0100ah\\u1f49\\u1f4b;\\u43b7\\u803b\\xf0\\u40f0\\u0100mr\\u1f53\\u1f57l\\u803b\\xeb\\u40ebo;\\u60ac\\u0180cip\\u1f61\\u1f64\\u1f67l;\\u4021s\\xf4\\u056e\\u0100eo\\u1f6c\\u1f74ctatio\\xee\\u0559nential\\xe5\\u0579\\u09e1\\u1f92\\0\\u1f9e\\0\\u1fa1\\u1fa7\\0\\0\\u1fc6\\u1fcc\\0\\u1fd3\\0\\u1fe6\\u1fea\\u2000\\0\\u2008\\u205allingdotse\\xf1\\u1e44y;\\u4444male;\\u6640\\u0180ilr\\u1fad\\u1fb3\\u1fc1lig;\\u8000\\ufb03\\u0269\\u1fb9\\0\\0\\u1fbdg;\\u8000\\ufb00ig;\\u8000\\ufb04;\\uc000\\ud835\\udd23lig;\\u8000\\ufb01lig;\\uc000fj\\u0180alt\\u1fd9\\u1fdc\\u1fe1t;\\u666dig;\\u8000\\ufb02ns;\\u65b1of;\\u4192\\u01f0\\u1fee\\0\\u1ff3f;\\uc000\\ud835\\udd57\\u0100ak\\u05bf\\u1ff7\\u0100;v\\u1ffc\\u1ffd\\u62d4;\\u6ad9artint;\\u6a0d\\u0100ao\\u200c\\u2055\\u0100cs\\u2011\\u2052\\u03b1\\u201a\\u2030\\u2038\\u2045\\u2048\\0\\u2050\\u03b2\\u2022\\u2025\\u2027\\u202a\\u202c\\0\\u202e\\u803b\\xbd\\u40bd;\\u6153\\u803b\\xbc\\u40bc;\\u6155;\\u6159;\\u615b\\u01b3\\u2034\\0\\u2036;\\u6154;\\u6156\\u02b4\\u203e\\u2041\\0\\0\\u2043\\u803b\\xbe\\u40be;\\u6157;\\u615c5;\\u6158\\u01b6\\u204c\\0\\u204e;\\u615a;\\u615d8;\\u615el;\\u6044wn;\\u6322cr;\\uc000\\ud835\\udcbb\\u0880Eabcdefgijlnorstv\\u2082\\u2089\\u209f\\u20a5\\u20b0\\u20b4\\u20f0\\u20f5\\u20fa\\u20ff\\u2103\\u2112\\u2138\\u0317\\u213e\\u2152\\u219e\\u0100;l\\u064d\\u2087;\\u6a8c\\u0180cmp\\u2090\\u2095\\u209dute;\\u41f5ma\\u0100;d\\u209c\\u1cda\\u43b3;\\u6a86reve;\\u411f\\u0100iy\\u20aa\\u20aerc;\\u411d;\\u4433ot;\\u4121\\u0200;lqs\\u063e\\u0642\\u20bd\\u20c9\\u0180;qs\\u063e\\u064c\\u20c4lan\\xf4\\u0665\\u0200;cdl\\u0665\\u20d2\\u20d5\\u20e5c;\\u6aa9ot\\u0100;o\\u20dc\\u20dd\\u6a80\\u0100;l\\u20e2\\u20e3\\u6a82;\\u6a84\\u0100;e\\u20ea\\u20ed\\uc000\\u22db\\ufe00s;\\u6a94r;\\uc000\\ud835\\udd24\\u0100;g\\u0673\\u061bmel;\\u6137cy;\\u4453\\u0200;Eaj\\u065a\\u210c\\u210e\\u2110;\\u6a92;\\u6aa5;\\u6aa4\\u0200Eaes\\u211b\\u211d\\u2129\\u2134;\\u6269p\\u0100;p\\u2123\\u2124\\u6a8arox\\xbb\\u2124\\u0100;q\\u212e\\u212f\\u6a88\\u0100;q\\u212e\\u211bim;\\u62e7pf;\\uc000\\ud835\\udd58\\u0100ci\\u2143\\u2146r;\\u610am\\u0180;el\\u066b\\u214e\\u2150;\\u6a8e;\\u6a90\\u8300>;cdlqr\\u05ee\\u2160\\u216a\\u216e\\u2173\\u2179\\u0100ci\\u2165\\u2167;\\u6aa7r;\\u6a7aot;\\u62d7Par;\\u6995uest;\\u6a7c\\u0280adels\\u2184\\u216a\\u2190\\u0656\\u219b\\u01f0\\u2189\\0\\u218epro\\xf8\\u209er;\\u6978q\\u0100lq\\u063f\\u2196les\\xf3\\u2088i\\xed\\u066b\\u0100en\\u21a3\\u21adrtneqq;\\uc000\\u2269\\ufe00\\xc5\\u21aa\\u0500Aabcefkosy\\u21c4\\u21c7\\u21f1\\u21f5\\u21fa\\u2218\\u221d\\u222f\\u2268\\u227dr\\xf2\\u03a0\\u0200ilmr\\u21d0\\u21d4\\u21d7\\u21dbrs\\xf0\\u1484f\\xbb\\u2024il\\xf4\\u06a9\\u0100dr\\u21e0\\u21e4cy;\\u444a\\u0180;cw\\u08f4\\u21eb\\u21efir;\\u6948;\\u61adar;\\u610firc;\\u4125\\u0180alr\\u2201\\u220e\\u2213rts\\u0100;u\\u2209\\u220a\\u6665it\\xbb\\u220alip;\\u6026con;\\u62b9r;\\uc000\\ud835\\udd25s\\u0100ew\\u2223\\u2229arow;\\u6925arow;\\u6926\\u0280amopr\\u223a\\u223e\\u2243\\u225e\\u2263rr;\\u61fftht;\\u623bk\\u0100lr\\u2249\\u2253eftarrow;\\u61a9ightarrow;\\u61aaf;\\uc000\\ud835\\udd59bar;\\u6015\\u0180clt\\u226f\\u2274\\u2278r;\\uc000\\ud835\\udcbdas\\xe8\\u21f4rok;\\u4127\\u0100bp\\u2282\\u2287ull;\\u6043hen\\xbb\\u1c5b\\u0ae1\\u22a3\\0\\u22aa\\0\\u22b8\\u22c5\\u22ce\\0\\u22d5\\u22f3\\0\\0\\u22f8\\u2322\\u2367\\u2362\\u237f\\0\\u2386\\u23aa\\u23b4cute\\u803b\\xed\\u40ed\\u0180;iy\\u0771\\u22b0\\u22b5rc\\u803b\\xee\\u40ee;\\u4438\\u0100cx\\u22bc\\u22bfy;\\u4435cl\\u803b\\xa1\\u40a1\\u0100fr\\u039f\\u22c9;\\uc000\\ud835\\udd26rave\\u803b\\xec\\u40ec\\u0200;ino\\u073e\\u22dd\\u22e9\\u22ee\\u0100in\\u22e2\\u22e6nt;\\u6a0ct;\\u622dfin;\\u69dcta;\\u6129lig;\\u4133\\u0180aop\\u22fe\\u231a\\u231d\\u0180cgt\\u2305\\u2308\\u2317r;\\u412b\\u0180elp\\u071f\\u230f\\u2313in\\xe5\\u078ear\\xf4\\u0720h;\\u4131f;\\u62b7ed;\\u41b5\\u0280;cfot\\u04f4\\u232c\\u2331\\u233d\\u2341are;\\u6105in\\u0100;t\\u2338\\u2339\\u621eie;\\u69dddo\\xf4\\u2319\\u0280;celp\\u0757\\u234c\\u2350\\u235b\\u2361al;\\u62ba\\u0100gr\\u2355\\u2359er\\xf3\\u1563\\xe3\\u234darhk;\\u6a17rod;\\u6a3c\\u0200cgpt\\u236f\\u2372\\u2376\\u237by;\\u4451on;\\u412ff;\\uc000\\ud835\\udd5aa;\\u43b9uest\\u803b\\xbf\\u40bf\\u0100ci\\u238a\\u238fr;\\uc000\\ud835\\udcben\\u0280;Edsv\\u04f4\\u239b\\u239d\\u23a1\\u04f3;\\u62f9ot;\\u62f5\\u0100;v\\u23a6\\u23a7\\u62f4;\\u62f3\\u0100;i\\u0777\\u23aelde;\\u4129\\u01eb\\u23b8\\0\\u23bccy;\\u4456l\\u803b\\xef\\u40ef\\u0300cfmosu\\u23cc\\u23d7\\u23dc\\u23e1\\u23e7\\u23f5\\u0100iy\\u23d1\\u23d5rc;\\u4135;\\u4439r;\\uc000\\ud835\\udd27ath;\\u4237pf;\\uc000\\ud835\\udd5b\\u01e3\\u23ec\\0\\u23f1r;\\uc000\\ud835\\udcbfrcy;\\u4458kcy;\\u4454\\u0400acfghjos\\u240b\\u2416\\u2422\\u2427\\u242d\\u2431\\u2435\\u243bppa\\u0100;v\\u2413\\u2414\\u43ba;\\u43f0\\u0100ey\\u241b\\u2420dil;\\u4137;\\u443ar;\\uc000\\ud835\\udd28reen;\\u4138cy;\\u4445cy;\\u445cpf;\\uc000\\ud835\\udd5ccr;\\uc000\\ud835\\udcc0\\u0b80ABEHabcdefghjlmnoprstuv\\u2470\\u2481\\u2486\\u248d\\u2491\\u250e\\u253d\\u255a\\u2580\\u264e\\u265e\\u2665\\u2679\\u267d\\u269a\\u26b2\\u26d8\\u275d\\u2768\\u278b\\u27c0\\u2801\\u2812\\u0180art\\u2477\\u247a\\u247cr\\xf2\\u09c6\\xf2\\u0395ail;\\u691barr;\\u690e\\u0100;g\\u0994\\u248b;\\u6a8bar;\\u6962\\u0963\\u24a5\\0\\u24aa\\0\\u24b1\\0\\0\\0\\0\\0\\u24b5\\u24ba\\0\\u24c6\\u24c8\\u24cd\\0\\u24f9ute;\\u413amptyv;\\u69b4ra\\xee\\u084cbda;\\u43bbg\\u0180;dl\\u088e\\u24c1\\u24c3;\\u6991\\xe5\\u088e;\\u6a85uo\\u803b\\xab\\u40abr\\u0400;bfhlpst\\u0899\\u24de\\u24e6\\u24e9\\u24eb\\u24ee\\u24f1\\u24f5\\u0100;f\\u089d\\u24e3s;\\u691fs;\\u691d\\xeb\\u2252p;\\u61abl;\\u6939im;\\u6973l;\\u61a2\\u0180;ae\\u24ff\\u2500\\u2504\\u6aabil;\\u6919\\u0100;s\\u2509\\u250a\\u6aad;\\uc000\\u2aad\\ufe00\\u0180abr\\u2515\\u2519\\u251drr;\\u690crk;\\u6772\\u0100ak\\u2522\\u252cc\\u0100ek\\u2528\\u252a;\\u407b;\\u405b\\u0100es\\u2531\\u2533;\\u698bl\\u0100du\\u2539\\u253b;\\u698f;\\u698d\\u0200aeuy\\u2546\\u254b\\u2556\\u2558ron;\\u413e\\u0100di\\u2550\\u2554il;\\u413c\\xec\\u08b0\\xe2\\u2529;\\u443b\\u0200cqrs\\u2563\\u2566\\u256d\\u257da;\\u6936uo\\u0100;r\\u0e19\\u1746\\u0100du\\u2572\\u2577har;\\u6967shar;\\u694bh;\\u61b2\\u0280;fgqs\\u258b\\u258c\\u0989\\u25f3\\u25ff\\u6264t\\u0280ahlrt\\u2598\\u25a4\\u25b7\\u25c2\\u25e8rrow\\u0100;t\\u0899\\u25a1a\\xe9\\u24f6arpoon\\u0100du\\u25af\\u25b4own\\xbb\\u045ap\\xbb\\u0966eftarrows;\\u61c7ight\\u0180ahs\\u25cd\\u25d6\\u25derrow\\u0100;s\\u08f4\\u08a7arpoon\\xf3\\u0f98quigarro\\xf7\\u21f0hreetimes;\\u62cb\\u0180;qs\\u258b\\u0993\\u25falan\\xf4\\u09ac\\u0280;cdgs\\u09ac\\u260a\\u260d\\u261d\\u2628c;\\u6aa8ot\\u0100;o\\u2614\\u2615\\u6a7f\\u0100;r\\u261a\\u261b\\u6a81;\\u6a83\\u0100;e\\u2622\\u2625\\uc000\\u22da\\ufe00s;\\u6a93\\u0280adegs\\u2633\\u2639\\u263d\\u2649\\u264bppro\\xf8\\u24c6ot;\\u62d6q\\u0100gq\\u2643\\u2645\\xf4\\u0989gt\\xf2\\u248c\\xf4\\u099bi\\xed\\u09b2\\u0180ilr\\u2655\\u08e1\\u265asht;\\u697c;\\uc000\\ud835\\udd29\\u0100;E\\u099c\\u2663;\\u6a91\\u0161\\u2669\\u2676r\\u0100du\\u25b2\\u266e\\u0100;l\\u0965\\u2673;\\u696alk;\\u6584cy;\\u4459\\u0280;acht\\u0a48\\u2688\\u268b\\u2691\\u2696r\\xf2\\u25c1orne\\xf2\\u1d08ard;\\u696bri;\\u65fa\\u0100io\\u269f\\u26a4dot;\\u4140ust\\u0100;a\\u26ac\\u26ad\\u63b0che\\xbb\\u26ad\\u0200Eaes\\u26bb\\u26bd\\u26c9\\u26d4;\\u6268p\\u0100;p\\u26c3\\u26c4\\u6a89rox\\xbb\\u26c4\\u0100;q\\u26ce\\u26cf\\u6a87\\u0100;q\\u26ce\\u26bbim;\\u62e6\\u0400abnoptwz\\u26e9\\u26f4\\u26f7\\u271a\\u272f\\u2741\\u2747\\u2750\\u0100nr\\u26ee\\u26f1g;\\u67ecr;\\u61fdr\\xeb\\u08c1g\\u0180lmr\\u26ff\\u270d\\u2714eft\\u0100ar\\u09e6\\u2707ight\\xe1\\u09f2apsto;\\u67fcight\\xe1\\u09fdparrow\\u0100lr\\u2725\\u2729ef\\xf4\\u24edight;\\u61ac\\u0180afl\\u2736\\u2739\\u273dr;\\u6985;\\uc000\\ud835\\udd5dus;\\u6a2dimes;\\u6a34\\u0161\\u274b\\u274fst;\\u6217\\xe1\\u134e\\u0180;ef\\u2757\\u2758\\u1800\\u65cange\\xbb\\u2758ar\\u0100;l\\u2764\\u2765\\u4028t;\\u6993\\u0280achmt\\u2773\\u2776\\u277c\\u2785\\u2787r\\xf2\\u08a8orne\\xf2\\u1d8car\\u0100;d\\u0f98\\u2783;\\u696d;\\u600eri;\\u62bf\\u0300achiqt\\u2798\\u279d\\u0a40\\u27a2\\u27ae\\u27bbquo;\\u6039r;\\uc000\\ud835\\udcc1m\\u0180;eg\\u09b2\\u27aa\\u27ac;\\u6a8d;\\u6a8f\\u0100bu\\u252a\\u27b3o\\u0100;r\\u0e1f\\u27b9;\\u601arok;\\u4142\\u8400<;cdhilqr\\u082b\\u27d2\\u2639\\u27dc\\u27e0\\u27e5\\u27ea\\u27f0\\u0100ci\\u27d7\\u27d9;\\u6aa6r;\\u6a79re\\xe5\\u25f2mes;\\u62c9arr;\\u6976uest;\\u6a7b\\u0100Pi\\u27f5\\u27f9ar;\\u6996\\u0180;ef\\u2800\\u092d\\u181b\\u65c3r\\u0100du\\u2807\\u280dshar;\\u694ahar;\\u6966\\u0100en\\u2817\\u2821rtneqq;\\uc000\\u2268\\ufe00\\xc5\\u281e\\u0700Dacdefhilnopsu\\u2840\\u2845\\u2882\\u288e\\u2893\\u28a0\\u28a5\\u28a8\\u28da\\u28e2\\u28e4\\u0a83\\u28f3\\u2902Dot;\\u623a\\u0200clpr\\u284e\\u2852\\u2863\\u287dr\\u803b\\xaf\\u40af\\u0100et\\u2857\\u2859;\\u6642\\u0100;e\\u285e\\u285f\\u6720se\\xbb\\u285f\\u0100;s\\u103b\\u2868to\\u0200;dlu\\u103b\\u2873\\u2877\\u287bow\\xee\\u048cef\\xf4\\u090f\\xf0\\u13d1ker;\\u65ae\\u0100oy\\u2887\\u288cmma;\\u6a29;\\u443cash;\\u6014asuredangle\\xbb\\u1626r;\\uc000\\ud835\\udd2ao;\\u6127\\u0180cdn\\u28af\\u28b4\\u28c9ro\\u803b\\xb5\\u40b5\\u0200;acd\\u1464\\u28bd\\u28c0\\u28c4s\\xf4\\u16a7ir;\\u6af0ot\\u80bb\\xb7\\u01b5us\\u0180;bd\\u28d2\\u1903\\u28d3\\u6212\\u0100;u\\u1d3c\\u28d8;\\u6a2a\\u0163\\u28de\\u28e1p;\\u6adb\\xf2\\u2212\\xf0\\u0a81\\u0100dp\\u28e9\\u28eeels;\\u62a7f;\\uc000\\ud835\\udd5e\\u0100ct\\u28f8\\u28fdr;\\uc000\\ud835\\udcc2pos\\xbb\\u159d\\u0180;lm\\u2909\\u290a\\u290d\\u43bctimap;\\u62b8\\u0c00GLRVabcdefghijlmoprstuvw\\u2942\\u2953\\u297e\\u2989\\u2998\\u29da\\u29e9\\u2a15\\u2a1a\\u2a58\\u2a5d\\u2a83\\u2a95\\u2aa4\\u2aa8\\u2b04\\u2b07\\u2b44\\u2b7f\\u2bae\\u2c34\\u2c67\\u2c7c\\u2ce9\\u0100gt\\u2947\\u294b;\\uc000\\u22d9\\u0338\\u0100;v\\u2950\\u0bcf\\uc000\\u226b\\u20d2\\u0180elt\\u295a\\u2972\\u2976ft\\u0100ar\\u2961\\u2967rrow;\\u61cdightarrow;\\u61ce;\\uc000\\u22d8\\u0338\\u0100;v\\u297b\\u0c47\\uc000\\u226a\\u20d2ightarrow;\\u61cf\\u0100Dd\\u298e\\u2993ash;\\u62afash;\\u62ae\\u0280bcnpt\\u29a3\\u29a7\\u29ac\\u29b1\\u29ccla\\xbb\\u02deute;\\u4144g;\\uc000\\u2220\\u20d2\\u0280;Eiop\\u0d84\\u29bc\\u29c0\\u29c5\\u29c8;\\uc000\\u2a70\\u0338d;\\uc000\\u224b\\u0338s;\\u4149ro\\xf8\\u0d84ur\\u0100;a\\u29d3\\u29d4\\u666el\\u0100;s\\u29d3\\u0b38\\u01f3\\u29df\\0\\u29e3p\\u80bb\\xa0\\u0b37mp\\u0100;e\\u0bf9\\u0c00\\u0280aeouy\\u29f4\\u29fe\\u2a03\\u2a10\\u2a13\\u01f0\\u29f9\\0\\u29fb;\\u6a43on;\\u4148dil;\\u4146ng\\u0100;d\\u0d7e\\u2a0aot;\\uc000\\u2a6d\\u0338p;\\u6a42;\\u443dash;\\u6013\\u0380;Aadqsx\\u0b92\\u2a29\\u2a2d\\u2a3b\\u2a41\\u2a45\\u2a50rr;\\u61d7r\\u0100hr\\u2a33\\u2a36k;\\u6924\\u0100;o\\u13f2\\u13f0ot;\\uc000\\u2250\\u0338ui\\xf6\\u0b63\\u0100ei\\u2a4a\\u2a4ear;\\u6928\\xed\\u0b98ist\\u0100;s\\u0ba0\\u0b9fr;\\uc000\\ud835\\udd2b\\u0200Eest\\u0bc5\\u2a66\\u2a79\\u2a7c\\u0180;qs\\u0bbc\\u2a6d\\u0be1\\u0180;qs\\u0bbc\\u0bc5\\u2a74lan\\xf4\\u0be2i\\xed\\u0bea\\u0100;r\\u0bb6\\u2a81\\xbb\\u0bb7\\u0180Aap\\u2a8a\\u2a8d\\u2a91r\\xf2\\u2971rr;\\u61aear;\\u6af2\\u0180;sv\\u0f8d\\u2a9c\\u0f8c\\u0100;d\\u2aa1\\u2aa2\\u62fc;\\u62facy;\\u445a\\u0380AEadest\\u2ab7\\u2aba\\u2abe\\u2ac2\\u2ac5\\u2af6\\u2af9r\\xf2\\u2966;\\uc000\\u2266\\u0338rr;\\u619ar;\\u6025\\u0200;fqs\\u0c3b\\u2ace\\u2ae3\\u2aeft\\u0100ar\\u2ad4\\u2ad9rro\\xf7\\u2ac1ightarro\\xf7\\u2a90\\u0180;qs\\u0c3b\\u2aba\\u2aealan\\xf4\\u0c55\\u0100;s\\u0c55\\u2af4\\xbb\\u0c36i\\xed\\u0c5d\\u0100;r\\u0c35\\u2afei\\u0100;e\\u0c1a\\u0c25i\\xe4\\u0d90\\u0100pt\\u2b0c\\u2b11f;\\uc000\\ud835\\udd5f\\u8180\\xac;in\\u2b19\\u2b1a\\u2b36\\u40acn\\u0200;Edv\\u0b89\\u2b24\\u2b28\\u2b2e;\\uc000\\u22f9\\u0338ot;\\uc000\\u22f5\\u0338\\u01e1\\u0b89\\u2b33\\u2b35;\\u62f7;\\u62f6i\\u0100;v\\u0cb8\\u2b3c\\u01e1\\u0cb8\\u2b41\\u2b43;\\u62fe;\\u62fd\\u0180aor\\u2b4b\\u2b63\\u2b69r\\u0200;ast\\u0b7b\\u2b55\\u2b5a\\u2b5flle\\xec\\u0b7bl;\\uc000\\u2afd\\u20e5;\\uc000\\u2202\\u0338lint;\\u6a14\\u0180;ce\\u0c92\\u2b70\\u2b73u\\xe5\\u0ca5\\u0100;c\\u0c98\\u2b78\\u0100;e\\u0c92\\u2b7d\\xf1\\u0c98\\u0200Aait\\u2b88\\u2b8b\\u2b9d\\u2ba7r\\xf2\\u2988rr\\u0180;cw\\u2b94\\u2b95\\u2b99\\u619b;\\uc000\\u2933\\u0338;\\uc000\\u219d\\u0338ghtarrow\\xbb\\u2b95ri\\u0100;e\\u0ccb\\u0cd6\\u0380chimpqu\\u2bbd\\u2bcd\\u2bd9\\u2b04\\u0b78\\u2be4\\u2bef\\u0200;cer\\u0d32\\u2bc6\\u0d37\\u2bc9u\\xe5\\u0d45;\\uc000\\ud835\\udcc3ort\\u026d\\u2b05\\0\\0\\u2bd6ar\\xe1\\u2b56m\\u0100;e\\u0d6e\\u2bdf\\u0100;q\\u0d74\\u0d73su\\u0100bp\\u2beb\\u2bed\\xe5\\u0cf8\\xe5\\u0d0b\\u0180bcp\\u2bf6\\u2c11\\u2c19\\u0200;Ees\\u2bff\\u2c00\\u0d22\\u2c04\\u6284;\\uc000\\u2ac5\\u0338et\\u0100;e\\u0d1b\\u2c0bq\\u0100;q\\u0d23\\u2c00c\\u0100;e\\u0d32\\u2c17\\xf1\\u0d38\\u0200;Ees\\u2c22\\u2c23\\u0d5f\\u2c27\\u6285;\\uc000\\u2ac6\\u0338et\\u0100;e\\u0d58\\u2c2eq\\u0100;q\\u0d60\\u2c23\\u0200gilr\\u2c3d\\u2c3f\\u2c45\\u2c47\\xec\\u0bd7lde\\u803b\\xf1\\u40f1\\xe7\\u0c43iangle\\u0100lr\\u2c52\\u2c5ceft\\u0100;e\\u0c1a\\u2c5a\\xf1\\u0c26ight\\u0100;e\\u0ccb\\u2c65\\xf1\\u0cd7\\u0100;m\\u2c6c\\u2c6d\\u43bd\\u0180;es\\u2c74\\u2c75\\u2c79\\u4023ro;\\u6116p;\\u6007\\u0480DHadgilrs\\u2c8f\\u2c94\\u2c99\\u2c9e\\u2ca3\\u2cb0\\u2cb6\\u2cd3\\u2ce3ash;\\u62adarr;\\u6904p;\\uc000\\u224d\\u20d2ash;\\u62ac\\u0100et\\u2ca8\\u2cac;\\uc000\\u2265\\u20d2;\\uc000>\\u20d2nfin;\\u69de\\u0180Aet\\u2cbd\\u2cc1\\u2cc5rr;\\u6902;\\uc000\\u2264\\u20d2\\u0100;r\\u2cca\\u2ccd\\uc000<\\u20d2ie;\\uc000\\u22b4\\u20d2\\u0100At\\u2cd8\\u2cdcrr;\\u6903rie;\\uc000\\u22b5\\u20d2im;\\uc000\\u223c\\u20d2\\u0180Aan\\u2cf0\\u2cf4\\u2d02rr;\\u61d6r\\u0100hr\\u2cfa\\u2cfdk;\\u6923\\u0100;o\\u13e7\\u13e5ear;\\u6927\\u1253\\u1a95\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\u2d2d\\0\\u2d38\\u2d48\\u2d60\\u2d65\\u2d72\\u2d84\\u1b07\\0\\0\\u2d8d\\u2dab\\0\\u2dc8\\u2dce\\0\\u2ddc\\u2e19\\u2e2b\\u2e3e\\u2e43\\u0100cs\\u2d31\\u1a97ute\\u803b\\xf3\\u40f3\\u0100iy\\u2d3c\\u2d45r\\u0100;c\\u1a9e\\u2d42\\u803b\\xf4\\u40f4;\\u443e\\u0280abios\\u1aa0\\u2d52\\u2d57\\u01c8\\u2d5alac;\\u4151v;\\u6a38old;\\u69bclig;\\u4153\\u0100cr\\u2d69\\u2d6dir;\\u69bf;\\uc000\\ud835\\udd2c\\u036f\\u2d79\\0\\0\\u2d7c\\0\\u2d82n;\\u42dbave\\u803b\\xf2\\u40f2;\\u69c1\\u0100bm\\u2d88\\u0df4ar;\\u69b5\\u0200acit\\u2d95\\u2d98\\u2da5\\u2da8r\\xf2\\u1a80\\u0100ir\\u2d9d\\u2da0r;\\u69beoss;\\u69bbn\\xe5\\u0e52;\\u69c0\\u0180aei\\u2db1\\u2db5\\u2db9cr;\\u414dga;\\u43c9\\u0180cdn\\u2dc0\\u2dc5\\u01cdron;\\u43bf;\\u69b6pf;\\uc000\\ud835\\udd60\\u0180ael\\u2dd4\\u2dd7\\u01d2r;\\u69b7rp;\\u69b9\\u0380;adiosv\\u2dea\\u2deb\\u2dee\\u2e08\\u2e0d\\u2e10\\u2e16\\u6228r\\xf2\\u1a86\\u0200;efm\\u2df7\\u2df8\\u2e02\\u2e05\\u6a5dr\\u0100;o\\u2dfe\\u2dff\\u6134f\\xbb\\u2dff\\u803b\\xaa\\u40aa\\u803b\\xba\\u40bagof;\\u62b6r;\\u6a56lope;\\u6a57;\\u6a5b\\u0180clo\\u2e1f\\u2e21\\u2e27\\xf2\\u2e01ash\\u803b\\xf8\\u40f8l;\\u6298i\\u016c\\u2e2f\\u2e34de\\u803b\\xf5\\u40f5es\\u0100;a\\u01db\\u2e3as;\\u6a36ml\\u803b\\xf6\\u40f6bar;\\u633d\\u0ae1\\u2e5e\\0\\u2e7d\\0\\u2e80\\u2e9d\\0\\u2ea2\\u2eb9\\0\\0\\u2ecb\\u0e9c\\0\\u2f13\\0\\0\\u2f2b\\u2fbc\\0\\u2fc8r\\u0200;ast\\u0403\\u2e67\\u2e72\\u0e85\\u8100\\xb6;l\\u2e6d\\u2e6e\\u40b6le\\xec\\u0403\\u0269\\u2e78\\0\\0\\u2e7bm;\\u6af3;\\u6afdy;\\u443fr\\u0280cimpt\\u2e8b\\u2e8f\\u2e93\\u1865\\u2e97nt;\\u4025od;\\u402eil;\\u6030enk;\\u6031r;\\uc000\\ud835\\udd2d\\u0180imo\\u2ea8\\u2eb0\\u2eb4\\u0100;v\\u2ead\\u2eae\\u43c6;\\u43d5ma\\xf4\\u0a76ne;\\u660e\\u0180;tv\\u2ebf\\u2ec0\\u2ec8\\u43c0chfork\\xbb\\u1ffd;\\u43d6\\u0100au\\u2ecf\\u2edfn\\u0100ck\\u2ed5\\u2eddk\\u0100;h\\u21f4\\u2edb;\\u610e\\xf6\\u21f4s\\u0480;abcdemst\\u2ef3\\u2ef4\\u1908\\u2ef9\\u2efd\\u2f04\\u2f06\\u2f0a\\u2f0e\\u402bcir;\\u6a23ir;\\u6a22\\u0100ou\\u1d40\\u2f02;\\u6a25;\\u6a72n\\u80bb\\xb1\\u0e9dim;\\u6a26wo;\\u6a27\\u0180ipu\\u2f19\\u2f20\\u2f25ntint;\\u6a15f;\\uc000\\ud835\\udd61nd\\u803b\\xa3\\u40a3\\u0500;Eaceinosu\\u0ec8\\u2f3f\\u2f41\\u2f44\\u2f47\\u2f81\\u2f89\\u2f92\\u2f7e\\u2fb6;\\u6ab3p;\\u6ab7u\\xe5\\u0ed9\\u0100;c\\u0ece\\u2f4c\\u0300;acens\\u0ec8\\u2f59\\u2f5f\\u2f66\\u2f68\\u2f7eppro\\xf8\\u2f43urlye\\xf1\\u0ed9\\xf1\\u0ece\\u0180aes\\u2f6f\\u2f76\\u2f7approx;\\u6ab9qq;\\u6ab5im;\\u62e8i\\xed\\u0edfme\\u0100;s\\u2f88\\u0eae\\u6032\\u0180Eas\\u2f78\\u2f90\\u2f7a\\xf0\\u2f75\\u0180dfp\\u0eec\\u2f99\\u2faf\\u0180als\\u2fa0\\u2fa5\\u2faalar;\\u632eine;\\u6312urf;\\u6313\\u0100;t\\u0efb\\u2fb4\\xef\\u0efbrel;\\u62b0\\u0100ci\\u2fc0\\u2fc5r;\\uc000\\ud835\\udcc5;\\u43c8ncsp;\\u6008\\u0300fiopsu\\u2fda\\u22e2\\u2fdf\\u2fe5\\u2feb\\u2ff1r;\\uc000\\ud835\\udd2epf;\\uc000\\ud835\\udd62rime;\\u6057cr;\\uc000\\ud835\\udcc6\\u0180aeo\\u2ff8\\u3009\\u3013t\\u0100ei\\u2ffe\\u3005rnion\\xf3\\u06b0nt;\\u6a16st\\u0100;e\\u3010\\u3011\\u403f\\xf1\\u1f19\\xf4\\u0f14\\u0a80ABHabcdefhilmnoprstux\\u3040\\u3051\\u3055\\u3059\\u30e0\\u310e\\u312b\\u3147\\u3162\\u3172\\u318e\\u3206\\u3215\\u3224\\u3229\\u3258\\u326e\\u3272\\u3290\\u32b0\\u32b7\\u0180art\\u3047\\u304a\\u304cr\\xf2\\u10b3\\xf2\\u03ddail;\\u691car\\xf2\\u1c65ar;\\u6964\\u0380cdenqrt\\u3068\\u3075\\u3078\\u307f\\u308f\\u3094\\u30cc\\u0100eu\\u306d\\u3071;\\uc000\\u223d\\u0331te;\\u4155i\\xe3\\u116emptyv;\\u69b3g\\u0200;del\\u0fd1\\u3089\\u308b\\u308d;\\u6992;\\u69a5\\xe5\\u0fd1uo\\u803b\\xbb\\u40bbr\\u0580;abcfhlpstw\\u0fdc\\u30ac\\u30af\\u30b7\\u30b9\\u30bc\\u30be\\u30c0\\u30c3\\u30c7\\u30cap;\\u6975\\u0100;f\\u0fe0\\u30b4s;\\u6920;\\u6933s;\\u691e\\xeb\\u225d\\xf0\\u272el;\\u6945im;\\u6974l;\\u61a3;\\u619d\\u0100ai\\u30d1\\u30d5il;\\u691ao\\u0100;n\\u30db\\u30dc\\u6236al\\xf3\\u0f1e\\u0180abr\\u30e7\\u30ea\\u30eer\\xf2\\u17e5rk;\\u6773\\u0100ak\\u30f3\\u30fdc\\u0100ek\\u30f9\\u30fb;\\u407d;\\u405d\\u0100es\\u3102\\u3104;\\u698cl\\u0100du\\u310a\\u310c;\\u698e;\\u6990\\u0200aeuy\\u3117\\u311c\\u3127\\u3129ron;\\u4159\\u0100di\\u3121\\u3125il;\\u4157\\xec\\u0ff2\\xe2\\u30fa;\\u4440\\u0200clqs\\u3134\\u3137\\u313d\\u3144a;\\u6937dhar;\\u6969uo\\u0100;r\\u020e\\u020dh;\\u61b3\\u0180acg\\u314e\\u315f\\u0f44l\\u0200;ips\\u0f78\\u3158\\u315b\\u109cn\\xe5\\u10bbar\\xf4\\u0fa9t;\\u65ad\\u0180ilr\\u3169\\u1023\\u316esht;\\u697d;\\uc000\\ud835\\udd2f\\u0100ao\\u3177\\u3186r\\u0100du\\u317d\\u317f\\xbb\\u047b\\u0100;l\\u1091\\u3184;\\u696c\\u0100;v\\u318b\\u318c\\u43c1;\\u43f1\\u0180gns\\u3195\\u31f9\\u31fcht\\u0300ahlrst\\u31a4\\u31b0\\u31c2\\u31d8\\u31e4\\u31eerrow\\u0100;t\\u0fdc\\u31ada\\xe9\\u30c8arpoon\\u0100du\\u31bb\\u31bfow\\xee\\u317ep\\xbb\\u1092eft\\u0100ah\\u31ca\\u31d0rrow\\xf3\\u0feaarpoon\\xf3\\u0551ightarrows;\\u61c9quigarro\\xf7\\u30cbhreetimes;\\u62ccg;\\u42daingdotse\\xf1\\u1f32\\u0180ahm\\u320d\\u3210\\u3213r\\xf2\\u0feaa\\xf2\\u0551;\\u600foust\\u0100;a\\u321e\\u321f\\u63b1che\\xbb\\u321fmid;\\u6aee\\u0200abpt\\u3232\\u323d\\u3240\\u3252\\u0100nr\\u3237\\u323ag;\\u67edr;\\u61fer\\xeb\\u1003\\u0180afl\\u3247\\u324a\\u324er;\\u6986;\\uc000\\ud835\\udd63us;\\u6a2eimes;\\u6a35\\u0100ap\\u325d\\u3267r\\u0100;g\\u3263\\u3264\\u4029t;\\u6994olint;\\u6a12ar\\xf2\\u31e3\\u0200achq\\u327b\\u3280\\u10bc\\u3285quo;\\u603ar;\\uc000\\ud835\\udcc7\\u0100bu\\u30fb\\u328ao\\u0100;r\\u0214\\u0213\\u0180hir\\u3297\\u329b\\u32a0re\\xe5\\u31f8mes;\\u62cai\\u0200;efl\\u32aa\\u1059\\u1821\\u32ab\\u65b9tri;\\u69celuhar;\\u6968;\\u611e\\u0d61\\u32d5\\u32db\\u32df\\u332c\\u3338\\u3371\\0\\u337a\\u33a4\\0\\0\\u33ec\\u33f0\\0\\u3428\\u3448\\u345a\\u34ad\\u34b1\\u34ca\\u34f1\\0\\u3616\\0\\0\\u3633cute;\\u415bqu\\xef\\u27ba\\u0500;Eaceinpsy\\u11ed\\u32f3\\u32f5\\u32ff\\u3302\\u330b\\u330f\\u331f\\u3326\\u3329;\\u6ab4\\u01f0\\u32fa\\0\\u32fc;\\u6ab8on;\\u4161u\\xe5\\u11fe\\u0100;d\\u11f3\\u3307il;\\u415frc;\\u415d\\u0180Eas\\u3316\\u3318\\u331b;\\u6ab6p;\\u6abaim;\\u62e9olint;\\u6a13i\\xed\\u1204;\\u4441ot\\u0180;be\\u3334\\u1d47\\u3335\\u62c5;\\u6a66\\u0380Aacmstx\\u3346\\u334a\\u3357\\u335b\\u335e\\u3363\\u336drr;\\u61d8r\\u0100hr\\u3350\\u3352\\xeb\\u2228\\u0100;o\\u0a36\\u0a34t\\u803b\\xa7\\u40a7i;\\u403bwar;\\u6929m\\u0100in\\u3369\\xf0nu\\xf3\\xf1t;\\u6736r\\u0100;o\\u3376\\u2055\\uc000\\ud835\\udd30\\u0200acoy\\u3382\\u3386\\u3391\\u33a0rp;\\u666f\\u0100hy\\u338b\\u338fcy;\\u4449;\\u4448rt\\u026d\\u3399\\0\\0\\u339ci\\xe4\\u1464ara\\xec\\u2e6f\\u803b\\xad\\u40ad\\u0100gm\\u33a8\\u33b4ma\\u0180;fv\\u33b1\\u33b2\\u33b2\\u43c3;\\u43c2\\u0400;deglnpr\\u12ab\\u33c5\\u33c9\\u33ce\\u33d6\\u33de\\u33e1\\u33e6ot;\\u6a6a\\u0100;q\\u12b1\\u12b0\\u0100;E\\u33d3\\u33d4\\u6a9e;\\u6aa0\\u0100;E\\u33db\\u33dc\\u6a9d;\\u6a9fe;\\u6246lus;\\u6a24arr;\\u6972ar\\xf2\\u113d\\u0200aeit\\u33f8\\u3408\\u340f\\u3417\\u0100ls\\u33fd\\u3404lsetm\\xe9\\u336ahp;\\u6a33parsl;\\u69e4\\u0100dl\\u1463\\u3414e;\\u6323\\u0100;e\\u341c\\u341d\\u6aaa\\u0100;s\\u3422\\u3423\\u6aac;\\uc000\\u2aac\\ufe00\\u0180flp\\u342e\\u3433\\u3442tcy;\\u444c\\u0100;b\\u3438\\u3439\\u402f\\u0100;a\\u343e\\u343f\\u69c4r;\\u633ff;\\uc000\\ud835\\udd64a\\u0100dr\\u344d\\u0402es\\u0100;u\\u3454\\u3455\\u6660it\\xbb\\u3455\\u0180csu\\u3460\\u3479\\u349f\\u0100au\\u3465\\u346fp\\u0100;s\\u1188\\u346b;\\uc000\\u2293\\ufe00p\\u0100;s\\u11b4\\u3475;\\uc000\\u2294\\ufe00u\\u0100bp\\u347f\\u348f\\u0180;es\\u1197\\u119c\\u3486et\\u0100;e\\u1197\\u348d\\xf1\\u119d\\u0180;es\\u11a8\\u11ad\\u3496et\\u0100;e\\u11a8\\u349d\\xf1\\u11ae\\u0180;af\\u117b\\u34a6\\u05b0r\\u0165\\u34ab\\u05b1\\xbb\\u117car\\xf2\\u1148\\u0200cemt\\u34b9\\u34be\\u34c2\\u34c5r;\\uc000\\ud835\\udcc8tm\\xee\\xf1i\\xec\\u3415ar\\xe6\\u11be\\u0100ar\\u34ce\\u34d5r\\u0100;f\\u34d4\\u17bf\\u6606\\u0100an\\u34da\\u34edight\\u0100ep\\u34e3\\u34eapsilo\\xee\\u1ee0h\\xe9\\u2eafs\\xbb\\u2852\\u0280bcmnp\\u34fb\\u355e\\u1209\\u358b\\u358e\\u0480;Edemnprs\\u350e\\u350f\\u3511\\u3515\\u351e\\u3523\\u352c\\u3531\\u3536\\u6282;\\u6ac5ot;\\u6abd\\u0100;d\\u11da\\u351aot;\\u6ac3ult;\\u6ac1\\u0100Ee\\u3528\\u352a;\\u6acb;\\u628alus;\\u6abfarr;\\u6979\\u0180eiu\\u353d\\u3552\\u3555t\\u0180;en\\u350e\\u3545\\u354bq\\u0100;q\\u11da\\u350feq\\u0100;q\\u352b\\u3528m;\\u6ac7\\u0100bp\\u355a\\u355c;\\u6ad5;\\u6ad3c\\u0300;acens\\u11ed\\u356c\\u3572\\u3579\\u357b\\u3326ppro\\xf8\\u32faurlye\\xf1\\u11fe\\xf1\\u11f3\\u0180aes\\u3582\\u3588\\u331bppro\\xf8\\u331aq\\xf1\\u3317g;\\u666a\\u0680123;Edehlmnps\\u35a9\\u35ac\\u35af\\u121c\\u35b2\\u35b4\\u35c0\\u35c9\\u35d5\\u35da\\u35df\\u35e8\\u35ed\\u803b\\xb9\\u40b9\\u803b\\xb2\\u40b2\\u803b\\xb3\\u40b3;\\u6ac6\\u0100os\\u35b9\\u35bct;\\u6abeub;\\u6ad8\\u0100;d\\u1222\\u35c5ot;\\u6ac4s\\u0100ou\\u35cf\\u35d2l;\\u67c9b;\\u6ad7arr;\\u697bult;\\u6ac2\\u0100Ee\\u35e4\\u35e6;\\u6acc;\\u628blus;\\u6ac0\\u0180eiu\\u35f4\\u3609\\u360ct\\u0180;en\\u121c\\u35fc\\u3602q\\u0100;q\\u1222\\u35b2eq\\u0100;q\\u35e7\\u35e4m;\\u6ac8\\u0100bp\\u3611\\u3613;\\u6ad4;\\u6ad6\\u0180Aan\\u361c\\u3620\\u362drr;\\u61d9r\\u0100hr\\u3626\\u3628\\xeb\\u222e\\u0100;o\\u0a2b\\u0a29war;\\u692alig\\u803b\\xdf\\u40df\\u0be1\\u3651\\u365d\\u3660\\u12ce\\u3673\\u3679\\0\\u367e\\u36c2\\0\\0\\0\\0\\0\\u36db\\u3703\\0\\u3709\\u376c\\0\\0\\0\\u3787\\u0272\\u3656\\0\\0\\u365bget;\\u6316;\\u43c4r\\xeb\\u0e5f\\u0180aey\\u3666\\u366b\\u3670ron;\\u4165dil;\\u4163;\\u4442lrec;\\u6315r;\\uc000\\ud835\\udd31\\u0200eiko\\u3686\\u369d\\u36b5\\u36bc\\u01f2\\u368b\\0\\u3691e\\u01004f\\u1284\\u1281a\\u0180;sv\\u3698\\u3699\\u369b\\u43b8ym;\\u43d1\\u0100cn\\u36a2\\u36b2k\\u0100as\\u36a8\\u36aeppro\\xf8\\u12c1im\\xbb\\u12acs\\xf0\\u129e\\u0100as\\u36ba\\u36ae\\xf0\\u12c1rn\\u803b\\xfe\\u40fe\\u01ec\\u031f\\u36c6\\u22e7es\\u8180\\xd7;bd\\u36cf\\u36d0\\u36d8\\u40d7\\u0100;a\\u190f\\u36d5r;\\u6a31;\\u6a30\\u0180eps\\u36e1\\u36e3\\u3700\\xe1\\u2a4d\\u0200;bcf\\u0486\\u36ec\\u36f0\\u36f4ot;\\u6336ir;\\u6af1\\u0100;o\\u36f9\\u36fc\\uc000\\ud835\\udd65rk;\\u6ada\\xe1\\u3362rime;\\u6034\\u0180aip\\u370f\\u3712\\u3764d\\xe5\\u1248\\u0380adempst\\u3721\\u374d\\u3740\\u3751\\u3757\\u375c\\u375fngle\\u0280;dlqr\\u3730\\u3731\\u3736\\u3740\\u3742\\u65b5own\\xbb\\u1dbbeft\\u0100;e\\u2800\\u373e\\xf1\\u092e;\\u625cight\\u0100;e\\u32aa\\u374b\\xf1\\u105aot;\\u65ecinus;\\u6a3alus;\\u6a39b;\\u69cdime;\\u6a3bezium;\\u63e2\\u0180cht\\u3772\\u377d\\u3781\\u0100ry\\u3777\\u377b;\\uc000\\ud835\\udcc9;\\u4446cy;\\u445brok;\\u4167\\u0100io\\u378b\\u378ex\\xf4\\u1777head\\u0100lr\\u3797\\u37a0eftarro\\xf7\\u084fightarrow\\xbb\\u0f5d\\u0900AHabcdfghlmoprstuw\\u37d0\\u37d3\\u37d7\\u37e4\\u37f0\\u37fc\\u380e\\u381c\\u3823\\u3834\\u3851\\u385d\\u386b\\u38a9\\u38cc\\u38d2\\u38ea\\u38f6r\\xf2\\u03edar;\\u6963\\u0100cr\\u37dc\\u37e2ute\\u803b\\xfa\\u40fa\\xf2\\u1150r\\u01e3\\u37ea\\0\\u37edy;\\u445eve;\\u416d\\u0100iy\\u37f5\\u37farc\\u803b\\xfb\\u40fb;\\u4443\\u0180abh\\u3803\\u3806\\u380br\\xf2\\u13adlac;\\u4171a\\xf2\\u13c3\\u0100ir\\u3813\\u3818sht;\\u697e;\\uc000\\ud835\\udd32rave\\u803b\\xf9\\u40f9\\u0161\\u3827\\u3831r\\u0100lr\\u382c\\u382e\\xbb\\u0957\\xbb\\u1083lk;\\u6580\\u0100ct\\u3839\\u384d\\u026f\\u383f\\0\\0\\u384arn\\u0100;e\\u3845\\u3846\\u631cr\\xbb\\u3846op;\\u630fri;\\u65f8\\u0100al\\u3856\\u385acr;\\u416b\\u80bb\\xa8\\u0349\\u0100gp\\u3862\\u3866on;\\u4173f;\\uc000\\ud835\\udd66\\u0300adhlsu\\u114b\\u3878\\u387d\\u1372\\u3891\\u38a0own\\xe1\\u13b3arpoon\\u0100lr\\u3888\\u388cef\\xf4\\u382digh\\xf4\\u382fi\\u0180;hl\\u3899\\u389a\\u389c\\u43c5\\xbb\\u13faon\\xbb\\u389aparrows;\\u61c8\\u0180cit\\u38b0\\u38c4\\u38c8\\u026f\\u38b6\\0\\0\\u38c1rn\\u0100;e\\u38bc\\u38bd\\u631dr\\xbb\\u38bdop;\\u630eng;\\u416fri;\\u65f9cr;\\uc000\\ud835\\udcca\\u0180dir\\u38d9\\u38dd\\u38e2ot;\\u62f0lde;\\u4169i\\u0100;f\\u3730\\u38e8\\xbb\\u1813\\u0100am\\u38ef\\u38f2r\\xf2\\u38a8l\\u803b\\xfc\\u40fcangle;\\u69a7\\u0780ABDacdeflnoprsz\\u391c\\u391f\\u3929\\u392d\\u39b5\\u39b8\\u39bd\\u39df\\u39e4\\u39e8\\u39f3\\u39f9\\u39fd\\u3a01\\u3a20r\\xf2\\u03f7ar\\u0100;v\\u3926\\u3927\\u6ae8;\\u6ae9as\\xe8\\u03e1\\u0100nr\\u3932\\u3937grt;\\u699c\\u0380eknprst\\u34e3\\u3946\\u394b\\u3952\\u395d\\u3964\\u3996app\\xe1\\u2415othin\\xe7\\u1e96\\u0180hir\\u34eb\\u2ec8\\u3959op\\xf4\\u2fb5\\u0100;h\\u13b7\\u3962\\xef\\u318d\\u0100iu\\u3969\\u396dgm\\xe1\\u33b3\\u0100bp\\u3972\\u3984setneq\\u0100;q\\u397d\\u3980\\uc000\\u228a\\ufe00;\\uc000\\u2acb\\ufe00setneq\\u0100;q\\u398f\\u3992\\uc000\\u228b\\ufe00;\\uc000\\u2acc\\ufe00\\u0100hr\\u399b\\u399fet\\xe1\\u369ciangle\\u0100lr\\u39aa\\u39afeft\\xbb\\u0925ight\\xbb\\u1051y;\\u4432ash\\xbb\\u1036\\u0180elr\\u39c4\\u39d2\\u39d7\\u0180;be\\u2dea\\u39cb\\u39cfar;\\u62bbq;\\u625alip;\\u62ee\\u0100bt\\u39dc\\u1468a\\xf2\\u1469r;\\uc000\\ud835\\udd33tr\\xe9\\u39aesu\\u0100bp\\u39ef\\u39f1\\xbb\\u0d1c\\xbb\\u0d59pf;\\uc000\\ud835\\udd67ro\\xf0\\u0efbtr\\xe9\\u39b4\\u0100cu\\u3a06\\u3a0br;\\uc000\\ud835\\udccb\\u0100bp\\u3a10\\u3a18n\\u0100Ee\\u3980\\u3a16\\xbb\\u397en\\u0100Ee\\u3992\\u3a1e\\xbb\\u3990igzag;\\u699a\\u0380cefoprs\\u3a36\\u3a3b\\u3a56\\u3a5b\\u3a54\\u3a61\\u3a6airc;\\u4175\\u0100di\\u3a40\\u3a51\\u0100bg\\u3a45\\u3a49ar;\\u6a5fe\\u0100;q\\u15fa\\u3a4f;\\u6259erp;\\u6118r;\\uc000\\ud835\\udd34pf;\\uc000\\ud835\\udd68\\u0100;e\\u1479\\u3a66at\\xe8\\u1479cr;\\uc000\\ud835\\udccc\\u0ae3\\u178e\\u3a87\\0\\u3a8b\\0\\u3a90\\u3a9b\\0\\0\\u3a9d\\u3aa8\\u3aab\\u3aaf\\0\\0\\u3ac3\\u3ace\\0\\u3ad8\\u17dc\\u17dftr\\xe9\\u17d1r;\\uc000\\ud835\\udd35\\u0100Aa\\u3a94\\u3a97r\\xf2\\u03c3r\\xf2\\u09f6;\\u43be\\u0100Aa\\u3aa1\\u3aa4r\\xf2\\u03b8r\\xf2\\u09eba\\xf0\\u2713is;\\u62fb\\u0180dpt\\u17a4\\u3ab5\\u3abe\\u0100fl\\u3aba\\u17a9;\\uc000\\ud835\\udd69im\\xe5\\u17b2\\u0100Aa\\u3ac7\\u3acar\\xf2\\u03cer\\xf2\\u0a01\\u0100cq\\u3ad2\\u17b8r;\\uc000\\ud835\\udccd\\u0100pt\\u17d6\\u3adcr\\xe9\\u17d4\\u0400acefiosu\\u3af0\\u3afd\\u3b08\\u3b0c\\u3b11\\u3b15\\u3b1b\\u3b21c\\u0100uy\\u3af6\\u3afbte\\u803b\\xfd\\u40fd;\\u444f\\u0100iy\\u3b02\\u3b06rc;\\u4177;\\u444bn\\u803b\\xa5\\u40a5r;\\uc000\\ud835\\udd36cy;\\u4457pf;\\uc000\\ud835\\udd6acr;\\uc000\\ud835\\udcce\\u0100cm\\u3b26\\u3b29y;\\u444el\\u803b\\xff\\u40ff\\u0500acdefhiosw\\u3b42\\u3b48\\u3b54\\u3b58\\u3b64\\u3b69\\u3b6d\\u3b74\\u3b7a\\u3b80cute;\\u417a\\u0100ay\\u3b4d\\u3b52ron;\\u417e;\\u4437ot;\\u417c\\u0100et\\u3b5d\\u3b61tr\\xe6\\u155fa;\\u43b6r;\\uc000\\ud835\\udd37cy;\\u4436grarr;\\u61ddpf;\\uc000\\ud835\\udd6bcr;\\uc000\\ud835\\udccf\\u0100jn\\u3b85\\u3b87;\\u600dj;\\u600c\"\n .split(\"\")\n .map((c) => c.charCodeAt(0)),\n);\n","// Adapted from https://github.com/mathiasbynens/he/blob/36afe179392226cf1b6ccdb16ebbb7a5a844d93a/src/he.js#L106-L134\n\nconst decodeMap = new Map([\n [0, 65_533],\n // C1 Unicode control character reference replacements\n [128, 8364],\n [130, 8218],\n [131, 402],\n [132, 8222],\n [133, 8230],\n [134, 8224],\n [135, 8225],\n [136, 710],\n [137, 8240],\n [138, 352],\n [139, 8249],\n [140, 338],\n [142, 381],\n [145, 8216],\n [146, 8217],\n [147, 8220],\n [148, 8221],\n [149, 8226],\n [150, 8211],\n [151, 8212],\n [152, 732],\n [153, 8482],\n [154, 353],\n [155, 8250],\n [156, 339],\n [158, 382],\n [159, 376],\n]);\n\n/**\n * Polyfill for `String.fromCodePoint`. It is used to create a string from a Unicode code point.\n */\nexport const fromCodePoint: (...codePoints: number[]) => string =\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, n/no-unsupported-features/es-builtins\n String.fromCodePoint ??\n function (codePoint: number): string {\n let output = \"\";\n\n if (codePoint > 0xff_ff) {\n codePoint -= 0x1_00_00;\n output += String.fromCharCode(\n ((codePoint >>> 10) & 0x3_ff) | 0xd8_00,\n );\n codePoint = 0xdc_00 | (codePoint & 0x3_ff);\n }\n\n output += String.fromCharCode(codePoint);\n return output;\n };\n\n/**\n * Replace the given code point with a replacement character if it is a\n * surrogate or is outside the valid range. Otherwise return the code\n * point unchanged.\n */\nexport function replaceCodePoint(codePoint: number): number {\n if (\n (codePoint >= 0xd8_00 && codePoint <= 0xdf_ff) ||\n codePoint > 0x10_ff_ff\n ) {\n return 0xff_fd;\n }\n\n return decodeMap.get(codePoint) ?? codePoint;\n}\n\n/**\n * Replace the code point if relevant, then convert it to a string.\n *\n * @deprecated Use `fromCodePoint(replaceCodePoint(codePoint))` instead.\n * @param codePoint The code point to decode.\n * @returns The decoded code point.\n */\nexport function decodeCodePoint(codePoint: number): string {\n return fromCodePoint(replaceCodePoint(codePoint));\n}\n","import { htmlDecodeTree } from \"./generated/decode-data-html.js\";\nimport { xmlDecodeTree } from \"./generated/decode-data-xml.js\";\nimport { replaceCodePoint, fromCodePoint } from \"./decode-codepoint.js\";\n\nconst enum CharCodes {\n NUM = 35, // \"#\"\n SEMI = 59, // \";\"\n EQUALS = 61, // \"=\"\n ZERO = 48, // \"0\"\n NINE = 57, // \"9\"\n LOWER_A = 97, // \"a\"\n LOWER_F = 102, // \"f\"\n LOWER_X = 120, // \"x\"\n LOWER_Z = 122, // \"z\"\n UPPER_A = 65, // \"A\"\n UPPER_F = 70, // \"F\"\n UPPER_Z = 90, // \"Z\"\n}\n\n/** Bit that needs to be set to convert an upper case ASCII character to lower case */\nconst TO_LOWER_BIT = 0b10_0000;\n\nexport enum BinTrieFlags {\n VALUE_LENGTH = 0b1100_0000_0000_0000,\n BRANCH_LENGTH = 0b0011_1111_1000_0000,\n JUMP_TABLE = 0b0000_0000_0111_1111,\n}\n\nfunction isNumber(code: number): boolean {\n return code >= CharCodes.ZERO && code <= CharCodes.NINE;\n}\n\nfunction isHexadecimalCharacter(code: number): boolean {\n return (\n (code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_F) ||\n (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_F)\n );\n}\n\nfunction isAsciiAlphaNumeric(code: number): boolean {\n return (\n (code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_Z) ||\n (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_Z) ||\n isNumber(code)\n );\n}\n\n/**\n * Checks if the given character is a valid end character for an entity in an attribute.\n *\n * Attribute values that aren't terminated properly aren't parsed, and shouldn't lead to a parser error.\n * See the example in https://html.spec.whatwg.org/multipage/parsing.html#named-character-reference-state\n */\nfunction isEntityInAttributeInvalidEnd(code: number): boolean {\n return code === CharCodes.EQUALS || isAsciiAlphaNumeric(code);\n}\n\nconst enum EntityDecoderState {\n EntityStart,\n NumericStart,\n NumericDecimal,\n NumericHex,\n NamedEntity,\n}\n\nexport enum DecodingMode {\n /** Entities in text nodes that can end with any character. */\n Legacy = 0,\n /** Only allow entities terminated with a semicolon. */\n Strict = 1,\n /** Entities in attributes have limitations on ending characters. */\n Attribute = 2,\n}\n\n/**\n * Producers for character reference errors as defined in the HTML spec.\n */\nexport interface EntityErrorProducer {\n missingSemicolonAfterCharacterReference(): void;\n absenceOfDigitsInNumericCharacterReference(\n consumedCharacters: number,\n ): void;\n validateNumericCharacterReference(code: number): void;\n}\n\n/**\n * Token decoder with support of writing partial entities.\n */\nexport class EntityDecoder {\n constructor(\n /** The tree used to decode entities. */\n private readonly decodeTree: Uint16Array,\n /**\n * The function that is called when a codepoint is decoded.\n *\n * For multi-byte named entities, this will be called multiple times,\n * with the second codepoint, and the same `consumed` value.\n *\n * @param codepoint The decoded codepoint.\n * @param consumed The number of bytes consumed by the decoder.\n */\n private readonly emitCodePoint: (cp: number, consumed: number) => void,\n /** An object that is used to produce errors. */\n private readonly errors?: EntityErrorProducer | undefined,\n ) {}\n\n /** The current state of the decoder. */\n private state = EntityDecoderState.EntityStart;\n /** Characters that were consumed while parsing an entity. */\n private consumed = 1;\n /**\n * The result of the entity.\n *\n * Either the result index of a numeric entity, or the codepoint of a\n * numeric entity.\n */\n private result = 0;\n\n /** The current index in the decode tree. */\n private treeIndex = 0;\n /** The number of characters that were consumed in excess. */\n private excess = 1;\n /** The mode in which the decoder is operating. */\n private decodeMode = DecodingMode.Strict;\n\n /** Resets the instance to make it reusable. */\n startEntity(decodeMode: DecodingMode): void {\n this.decodeMode = decodeMode;\n this.state = EntityDecoderState.EntityStart;\n this.result = 0;\n this.treeIndex = 0;\n this.excess = 1;\n this.consumed = 1;\n }\n\n /**\n * Write an entity to the decoder. This can be called multiple times with partial entities.\n * If the entity is incomplete, the decoder will return -1.\n *\n * Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the\n * entity is incomplete, and resume when the next string is written.\n *\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The offset at which the entity begins. Should be 0 if this is not the first call.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n write(input: string, offset: number): number {\n switch (this.state) {\n case EntityDecoderState.EntityStart: {\n if (input.charCodeAt(offset) === CharCodes.NUM) {\n this.state = EntityDecoderState.NumericStart;\n this.consumed += 1;\n return this.stateNumericStart(input, offset + 1);\n }\n this.state = EntityDecoderState.NamedEntity;\n return this.stateNamedEntity(input, offset);\n }\n\n case EntityDecoderState.NumericStart: {\n return this.stateNumericStart(input, offset);\n }\n\n case EntityDecoderState.NumericDecimal: {\n return this.stateNumericDecimal(input, offset);\n }\n\n case EntityDecoderState.NumericHex: {\n return this.stateNumericHex(input, offset);\n }\n\n case EntityDecoderState.NamedEntity: {\n return this.stateNamedEntity(input, offset);\n }\n }\n }\n\n /**\n * Switches between the numeric decimal and hexadecimal states.\n *\n * Equivalent to the `Numeric character reference state` in the HTML spec.\n *\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n private stateNumericStart(input: string, offset: number): number {\n if (offset >= input.length) {\n return -1;\n }\n\n if ((input.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes.LOWER_X) {\n this.state = EntityDecoderState.NumericHex;\n this.consumed += 1;\n return this.stateNumericHex(input, offset + 1);\n }\n\n this.state = EntityDecoderState.NumericDecimal;\n return this.stateNumericDecimal(input, offset);\n }\n\n private addToNumericResult(\n input: string,\n start: number,\n end: number,\n base: number,\n ): void {\n if (start !== end) {\n const digitCount = end - start;\n this.result =\n this.result * Math.pow(base, digitCount) +\n Number.parseInt(input.substr(start, digitCount), base);\n this.consumed += digitCount;\n }\n }\n\n /**\n * Parses a hexadecimal numeric entity.\n *\n * Equivalent to the `Hexademical character reference state` in the HTML spec.\n *\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n private stateNumericHex(input: string, offset: number): number {\n const startIndex = offset;\n\n while (offset < input.length) {\n const char = input.charCodeAt(offset);\n if (isNumber(char) || isHexadecimalCharacter(char)) {\n offset += 1;\n } else {\n this.addToNumericResult(input, startIndex, offset, 16);\n return this.emitNumericEntity(char, 3);\n }\n }\n\n this.addToNumericResult(input, startIndex, offset, 16);\n\n return -1;\n }\n\n /**\n * Parses a decimal numeric entity.\n *\n * Equivalent to the `Decimal character reference state` in the HTML spec.\n *\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n private stateNumericDecimal(input: string, offset: number): number {\n const startIndex = offset;\n\n while (offset < input.length) {\n const char = input.charCodeAt(offset);\n if (isNumber(char)) {\n offset += 1;\n } else {\n this.addToNumericResult(input, startIndex, offset, 10);\n return this.emitNumericEntity(char, 2);\n }\n }\n\n this.addToNumericResult(input, startIndex, offset, 10);\n\n return -1;\n }\n\n /**\n * Validate and emit a numeric entity.\n *\n * Implements the logic from the `Hexademical character reference start\n * state` and `Numeric character reference end state` in the HTML spec.\n *\n * @param lastCp The last code point of the entity. Used to see if the\n * entity was terminated with a semicolon.\n * @param expectedLength The minimum number of characters that should be\n * consumed. Used to validate that at least one digit\n * was consumed.\n * @returns The number of characters that were consumed.\n */\n private emitNumericEntity(lastCp: number, expectedLength: number): number {\n // Ensure we consumed at least one digit.\n if (this.consumed <= expectedLength) {\n this.errors?.absenceOfDigitsInNumericCharacterReference(\n this.consumed,\n );\n return 0;\n }\n\n // Figure out if this is a legit end of the entity\n if (lastCp === CharCodes.SEMI) {\n this.consumed += 1;\n } else if (this.decodeMode === DecodingMode.Strict) {\n return 0;\n }\n\n this.emitCodePoint(replaceCodePoint(this.result), this.consumed);\n\n if (this.errors) {\n if (lastCp !== CharCodes.SEMI) {\n this.errors.missingSemicolonAfterCharacterReference();\n }\n\n this.errors.validateNumericCharacterReference(this.result);\n }\n\n return this.consumed;\n }\n\n /**\n * Parses a named entity.\n *\n * Equivalent to the `Named character reference state` in the HTML spec.\n *\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n private stateNamedEntity(input: string, offset: number): number {\n const { decodeTree } = this;\n let current = decodeTree[this.treeIndex];\n // The mask is the number of bytes of the value, including the current byte.\n let valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n\n for (; offset < input.length; offset++, this.excess++) {\n const char = input.charCodeAt(offset);\n\n this.treeIndex = determineBranch(\n decodeTree,\n current,\n this.treeIndex + Math.max(1, valueLength),\n char,\n );\n\n if (this.treeIndex < 0) {\n return this.result === 0 ||\n // If we are parsing an attribute\n (this.decodeMode === DecodingMode.Attribute &&\n // We shouldn't have consumed any characters after the entity,\n (valueLength === 0 ||\n // And there should be no invalid characters.\n isEntityInAttributeInvalidEnd(char)))\n ? 0\n : this.emitNotTerminatedNamedEntity();\n }\n\n current = decodeTree[this.treeIndex];\n valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n\n // If the branch is a value, store it and continue\n if (valueLength !== 0) {\n // If the entity is terminated by a semicolon, we are done.\n if (char === CharCodes.SEMI) {\n return this.emitNamedEntityData(\n this.treeIndex,\n valueLength,\n this.consumed + this.excess,\n );\n }\n\n // If we encounter a non-terminated (legacy) entity while parsing strictly, then ignore it.\n if (this.decodeMode !== DecodingMode.Strict) {\n this.result = this.treeIndex;\n this.consumed += this.excess;\n this.excess = 0;\n }\n }\n }\n\n return -1;\n }\n\n /**\n * Emit a named entity that was not terminated with a semicolon.\n *\n * @returns The number of characters consumed.\n */\n private emitNotTerminatedNamedEntity(): number {\n const { result, decodeTree } = this;\n\n const valueLength =\n (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14;\n\n this.emitNamedEntityData(result, valueLength, this.consumed);\n this.errors?.missingSemicolonAfterCharacterReference();\n\n return this.consumed;\n }\n\n /**\n * Emit a named entity.\n *\n * @param result The index of the entity in the decode tree.\n * @param valueLength The number of bytes in the entity.\n * @param consumed The number of characters consumed.\n *\n * @returns The number of characters consumed.\n */\n private emitNamedEntityData(\n result: number,\n valueLength: number,\n consumed: number,\n ): number {\n const { decodeTree } = this;\n\n this.emitCodePoint(\n valueLength === 1\n ? decodeTree[result] & ~BinTrieFlags.VALUE_LENGTH\n : decodeTree[result + 1],\n consumed,\n );\n if (valueLength === 3) {\n // For multi-byte values, we need to emit the second byte.\n this.emitCodePoint(decodeTree[result + 2], consumed);\n }\n\n return consumed;\n }\n\n /**\n * Signal to the parser that the end of the input was reached.\n *\n * Remaining data will be emitted and relevant errors will be produced.\n *\n * @returns The number of characters consumed.\n */\n end(): number {\n switch (this.state) {\n case EntityDecoderState.NamedEntity: {\n // Emit a named entity if we have one.\n return this.result !== 0 &&\n (this.decodeMode !== DecodingMode.Attribute ||\n this.result === this.treeIndex)\n ? this.emitNotTerminatedNamedEntity()\n : 0;\n }\n // Otherwise, emit a numeric entity if we have one.\n case EntityDecoderState.NumericDecimal: {\n return this.emitNumericEntity(0, 2);\n }\n case EntityDecoderState.NumericHex: {\n return this.emitNumericEntity(0, 3);\n }\n case EntityDecoderState.NumericStart: {\n this.errors?.absenceOfDigitsInNumericCharacterReference(\n this.consumed,\n );\n return 0;\n }\n case EntityDecoderState.EntityStart: {\n // Return 0 if we have no entity.\n return 0;\n }\n }\n }\n}\n\n/**\n * Creates a function that decodes entities in a string.\n *\n * @param decodeTree The decode tree.\n * @returns A function that decodes entities in a string.\n */\nfunction getDecoder(decodeTree: Uint16Array) {\n let returnValue = \"\";\n const decoder = new EntityDecoder(\n decodeTree,\n (data) => (returnValue += fromCodePoint(data)),\n );\n\n return function decodeWithTrie(\n input: string,\n decodeMode: DecodingMode,\n ): string {\n let lastIndex = 0;\n let offset = 0;\n\n while ((offset = input.indexOf(\"&\", offset)) >= 0) {\n returnValue += input.slice(lastIndex, offset);\n\n decoder.startEntity(decodeMode);\n\n const length = decoder.write(\n input,\n // Skip the \"&\"\n offset + 1,\n );\n\n if (length < 0) {\n lastIndex = offset + decoder.end();\n break;\n }\n\n lastIndex = offset + length;\n // If `length` is 0, skip the current `&` and continue.\n offset = length === 0 ? lastIndex + 1 : lastIndex;\n }\n\n const result = returnValue + input.slice(lastIndex);\n\n // Make sure we don't keep a reference to the final string.\n returnValue = \"\";\n\n return result;\n };\n}\n\n/**\n * Determines the branch of the current node that is taken given the current\n * character. This function is used to traverse the trie.\n *\n * @param decodeTree The trie.\n * @param current The current node.\n * @param nodeIdx The index right after the current node and its value.\n * @param char The current character.\n * @returns The index of the next node, or -1 if no branch is taken.\n */\nexport function determineBranch(\n decodeTree: Uint16Array,\n current: number,\n nodeIndex: number,\n char: number,\n): number {\n const branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;\n const jumpOffset = current & BinTrieFlags.JUMP_TABLE;\n\n // Case 1: Single branch encoded in jump offset\n if (branchCount === 0) {\n return jumpOffset !== 0 && char === jumpOffset ? nodeIndex : -1;\n }\n\n // Case 2: Multiple branches encoded in jump table\n if (jumpOffset) {\n const value = char - jumpOffset;\n\n return value < 0 || value >= branchCount\n ? -1\n : decodeTree[nodeIndex + value] - 1;\n }\n\n // Case 3: Multiple branches encoded in dictionary\n\n // Binary search for the character.\n let lo = nodeIndex;\n let hi = lo + branchCount - 1;\n\n while (lo <= hi) {\n const mid = (lo + hi) >>> 1;\n const midValue = decodeTree[mid];\n\n if (midValue < char) {\n lo = mid + 1;\n } else if (midValue > char) {\n hi = mid - 1;\n } else {\n return decodeTree[mid + branchCount];\n }\n }\n\n return -1;\n}\n\nconst htmlDecoder = /* #__PURE__ */ getDecoder(htmlDecodeTree);\nconst xmlDecoder = /* #__PURE__ */ getDecoder(xmlDecodeTree);\n\n/**\n * Decodes an HTML string.\n *\n * @param htmlString The string to decode.\n * @param mode The decoding mode.\n * @returns The decoded string.\n */\nexport function decodeHTML(\n htmlString: string,\n mode: DecodingMode = DecodingMode.Legacy,\n): string {\n return htmlDecoder(htmlString, mode);\n}\n\n/**\n * Decodes an HTML string in an attribute.\n *\n * @param htmlAttribute The string to decode.\n * @returns The decoded string.\n */\nexport function decodeHTMLAttribute(htmlAttribute: string): string {\n return htmlDecoder(htmlAttribute, DecodingMode.Attribute);\n}\n\n/**\n * Decodes an HTML string, requiring all entities to be terminated by a semicolon.\n *\n * @param htmlString The string to decode.\n * @returns The decoded string.\n */\nexport function decodeHTMLStrict(htmlString: string): string {\n return htmlDecoder(htmlString, DecodingMode.Strict);\n}\n\n/**\n * Decodes an XML string, requiring all entities to be terminated by a semicolon.\n *\n * @param xmlString The string to decode.\n * @returns The decoded string.\n */\nexport function decodeXML(xmlString: string): string {\n return xmlDecoder(xmlString, DecodingMode.Strict);\n}\n\n// Re-export for use by eg. htmlparser2\nexport { htmlDecodeTree } from \"./generated/decode-data-html.js\";\nexport { xmlDecodeTree } from \"./generated/decode-data-xml.js\";\n\nexport {\n decodeCodePoint,\n replaceCodePoint,\n fromCodePoint,\n} from \"./decode-codepoint.js\";\n","/** All valid namespaces in HTML. */\nexport var NS;\n(function (NS) {\n NS[\"HTML\"] = \"http://www.w3.org/1999/xhtml\";\n NS[\"MATHML\"] = \"http://www.w3.org/1998/Math/MathML\";\n NS[\"SVG\"] = \"http://www.w3.org/2000/svg\";\n NS[\"XLINK\"] = \"http://www.w3.org/1999/xlink\";\n NS[\"XML\"] = \"http://www.w3.org/XML/1998/namespace\";\n NS[\"XMLNS\"] = \"http://www.w3.org/2000/xmlns/\";\n})(NS || (NS = {}));\nexport var ATTRS;\n(function (ATTRS) {\n ATTRS[\"TYPE\"] = \"type\";\n ATTRS[\"ACTION\"] = \"action\";\n ATTRS[\"ENCODING\"] = \"encoding\";\n ATTRS[\"PROMPT\"] = \"prompt\";\n ATTRS[\"NAME\"] = \"name\";\n ATTRS[\"COLOR\"] = \"color\";\n ATTRS[\"FACE\"] = \"face\";\n ATTRS[\"SIZE\"] = \"size\";\n})(ATTRS || (ATTRS = {}));\n/**\n * The mode of the document.\n *\n * @see {@link https://dom.spec.whatwg.org/#concept-document-limited-quirks}\n */\nexport var DOCUMENT_MODE;\n(function (DOCUMENT_MODE) {\n DOCUMENT_MODE[\"NO_QUIRKS\"] = \"no-quirks\";\n DOCUMENT_MODE[\"QUIRKS\"] = \"quirks\";\n DOCUMENT_MODE[\"LIMITED_QUIRKS\"] = \"limited-quirks\";\n})(DOCUMENT_MODE || (DOCUMENT_MODE = {}));\nexport var TAG_NAMES;\n(function (TAG_NAMES) {\n TAG_NAMES[\"A\"] = \"a\";\n TAG_NAMES[\"ADDRESS\"] = \"address\";\n TAG_NAMES[\"ANNOTATION_XML\"] = \"annotation-xml\";\n TAG_NAMES[\"APPLET\"] = \"applet\";\n TAG_NAMES[\"AREA\"] = \"area\";\n TAG_NAMES[\"ARTICLE\"] = \"article\";\n TAG_NAMES[\"ASIDE\"] = \"aside\";\n TAG_NAMES[\"B\"] = \"b\";\n TAG_NAMES[\"BASE\"] = \"base\";\n TAG_NAMES[\"BASEFONT\"] = \"basefont\";\n TAG_NAMES[\"BGSOUND\"] = \"bgsound\";\n TAG_NAMES[\"BIG\"] = \"big\";\n TAG_NAMES[\"BLOCKQUOTE\"] = \"blockquote\";\n TAG_NAMES[\"BODY\"] = \"body\";\n TAG_NAMES[\"BR\"] = \"br\";\n TAG_NAMES[\"BUTTON\"] = \"button\";\n TAG_NAMES[\"CAPTION\"] = \"caption\";\n TAG_NAMES[\"CENTER\"] = \"center\";\n TAG_NAMES[\"CODE\"] = \"code\";\n TAG_NAMES[\"COL\"] = \"col\";\n TAG_NAMES[\"COLGROUP\"] = \"colgroup\";\n TAG_NAMES[\"DD\"] = \"dd\";\n TAG_NAMES[\"DESC\"] = \"desc\";\n TAG_NAMES[\"DETAILS\"] = \"details\";\n TAG_NAMES[\"DIALOG\"] = \"dialog\";\n TAG_NAMES[\"DIR\"] = \"dir\";\n TAG_NAMES[\"DIV\"] = \"div\";\n TAG_NAMES[\"DL\"] = \"dl\";\n TAG_NAMES[\"DT\"] = \"dt\";\n TAG_NAMES[\"EM\"] = \"em\";\n TAG_NAMES[\"EMBED\"] = \"embed\";\n TAG_NAMES[\"FIELDSET\"] = \"fieldset\";\n TAG_NAMES[\"FIGCAPTION\"] = \"figcaption\";\n TAG_NAMES[\"FIGURE\"] = \"figure\";\n TAG_NAMES[\"FONT\"] = \"font\";\n TAG_NAMES[\"FOOTER\"] = \"footer\";\n TAG_NAMES[\"FOREIGN_OBJECT\"] = \"foreignObject\";\n TAG_NAMES[\"FORM\"] = \"form\";\n TAG_NAMES[\"FRAME\"] = \"frame\";\n TAG_NAMES[\"FRAMESET\"] = \"frameset\";\n TAG_NAMES[\"H1\"] = \"h1\";\n TAG_NAMES[\"H2\"] = \"h2\";\n TAG_NAMES[\"H3\"] = \"h3\";\n TAG_NAMES[\"H4\"] = \"h4\";\n TAG_NAMES[\"H5\"] = \"h5\";\n TAG_NAMES[\"H6\"] = \"h6\";\n TAG_NAMES[\"HEAD\"] = \"head\";\n TAG_NAMES[\"HEADER\"] = \"header\";\n TAG_NAMES[\"HGROUP\"] = \"hgroup\";\n TAG_NAMES[\"HR\"] = \"hr\";\n TAG_NAMES[\"HTML\"] = \"html\";\n TAG_NAMES[\"I\"] = \"i\";\n TAG_NAMES[\"IMG\"] = \"img\";\n TAG_NAMES[\"IMAGE\"] = \"image\";\n TAG_NAMES[\"INPUT\"] = \"input\";\n TAG_NAMES[\"IFRAME\"] = \"iframe\";\n TAG_NAMES[\"KEYGEN\"] = \"keygen\";\n TAG_NAMES[\"LABEL\"] = \"label\";\n TAG_NAMES[\"LI\"] = \"li\";\n TAG_NAMES[\"LINK\"] = \"link\";\n TAG_NAMES[\"LISTING\"] = \"listing\";\n TAG_NAMES[\"MAIN\"] = \"main\";\n TAG_NAMES[\"MALIGNMARK\"] = \"malignmark\";\n TAG_NAMES[\"MARQUEE\"] = \"marquee\";\n TAG_NAMES[\"MATH\"] = \"math\";\n TAG_NAMES[\"MENU\"] = \"menu\";\n TAG_NAMES[\"META\"] = \"meta\";\n TAG_NAMES[\"MGLYPH\"] = \"mglyph\";\n TAG_NAMES[\"MI\"] = \"mi\";\n TAG_NAMES[\"MO\"] = \"mo\";\n TAG_NAMES[\"MN\"] = \"mn\";\n TAG_NAMES[\"MS\"] = \"ms\";\n TAG_NAMES[\"MTEXT\"] = \"mtext\";\n TAG_NAMES[\"NAV\"] = \"nav\";\n TAG_NAMES[\"NOBR\"] = \"nobr\";\n TAG_NAMES[\"NOFRAMES\"] = \"noframes\";\n TAG_NAMES[\"NOEMBED\"] = \"noembed\";\n TAG_NAMES[\"NOSCRIPT\"] = \"noscript\";\n TAG_NAMES[\"OBJECT\"] = \"object\";\n TAG_NAMES[\"OL\"] = \"ol\";\n TAG_NAMES[\"OPTGROUP\"] = \"optgroup\";\n TAG_NAMES[\"OPTION\"] = \"option\";\n TAG_NAMES[\"P\"] = \"p\";\n TAG_NAMES[\"PARAM\"] = \"param\";\n TAG_NAMES[\"PLAINTEXT\"] = \"plaintext\";\n TAG_NAMES[\"PRE\"] = \"pre\";\n TAG_NAMES[\"RB\"] = \"rb\";\n TAG_NAMES[\"RP\"] = \"rp\";\n TAG_NAMES[\"RT\"] = \"rt\";\n TAG_NAMES[\"RTC\"] = \"rtc\";\n TAG_NAMES[\"RUBY\"] = \"ruby\";\n TAG_NAMES[\"S\"] = \"s\";\n TAG_NAMES[\"SCRIPT\"] = \"script\";\n TAG_NAMES[\"SEARCH\"] = \"search\";\n TAG_NAMES[\"SECTION\"] = \"section\";\n TAG_NAMES[\"SELECT\"] = \"select\";\n TAG_NAMES[\"SOURCE\"] = \"source\";\n TAG_NAMES[\"SMALL\"] = \"small\";\n TAG_NAMES[\"SPAN\"] = \"span\";\n TAG_NAMES[\"STRIKE\"] = \"strike\";\n TAG_NAMES[\"STRONG\"] = \"strong\";\n TAG_NAMES[\"STYLE\"] = \"style\";\n TAG_NAMES[\"SUB\"] = \"sub\";\n TAG_NAMES[\"SUMMARY\"] = \"summary\";\n TAG_NAMES[\"SUP\"] = \"sup\";\n TAG_NAMES[\"TABLE\"] = \"table\";\n TAG_NAMES[\"TBODY\"] = \"tbody\";\n TAG_NAMES[\"TEMPLATE\"] = \"template\";\n TAG_NAMES[\"TEXTAREA\"] = \"textarea\";\n TAG_NAMES[\"TFOOT\"] = \"tfoot\";\n TAG_NAMES[\"TD\"] = \"td\";\n TAG_NAMES[\"TH\"] = \"th\";\n TAG_NAMES[\"THEAD\"] = \"thead\";\n TAG_NAMES[\"TITLE\"] = \"title\";\n TAG_NAMES[\"TR\"] = \"tr\";\n TAG_NAMES[\"TRACK\"] = \"track\";\n TAG_NAMES[\"TT\"] = \"tt\";\n TAG_NAMES[\"U\"] = \"u\";\n TAG_NAMES[\"UL\"] = \"ul\";\n TAG_NAMES[\"SVG\"] = \"svg\";\n TAG_NAMES[\"VAR\"] = \"var\";\n TAG_NAMES[\"WBR\"] = \"wbr\";\n TAG_NAMES[\"XMP\"] = \"xmp\";\n})(TAG_NAMES || (TAG_NAMES = {}));\n/**\n * Tag IDs are numeric IDs for known tag names.\n *\n * We use tag IDs to improve the performance of tag name comparisons.\n */\nexport var TAG_ID;\n(function (TAG_ID) {\n TAG_ID[TAG_ID[\"UNKNOWN\"] = 0] = \"UNKNOWN\";\n TAG_ID[TAG_ID[\"A\"] = 1] = \"A\";\n TAG_ID[TAG_ID[\"ADDRESS\"] = 2] = \"ADDRESS\";\n TAG_ID[TAG_ID[\"ANNOTATION_XML\"] = 3] = \"ANNOTATION_XML\";\n TAG_ID[TAG_ID[\"APPLET\"] = 4] = \"APPLET\";\n TAG_ID[TAG_ID[\"AREA\"] = 5] = \"AREA\";\n TAG_ID[TAG_ID[\"ARTICLE\"] = 6] = \"ARTICLE\";\n TAG_ID[TAG_ID[\"ASIDE\"] = 7] = \"ASIDE\";\n TAG_ID[TAG_ID[\"B\"] = 8] = \"B\";\n TAG_ID[TAG_ID[\"BASE\"] = 9] = \"BASE\";\n TAG_ID[TAG_ID[\"BASEFONT\"] = 10] = \"BASEFONT\";\n TAG_ID[TAG_ID[\"BGSOUND\"] = 11] = \"BGSOUND\";\n TAG_ID[TAG_ID[\"BIG\"] = 12] = \"BIG\";\n TAG_ID[TAG_ID[\"BLOCKQUOTE\"] = 13] = \"BLOCKQUOTE\";\n TAG_ID[TAG_ID[\"BODY\"] = 14] = \"BODY\";\n TAG_ID[TAG_ID[\"BR\"] = 15] = \"BR\";\n TAG_ID[TAG_ID[\"BUTTON\"] = 16] = \"BUTTON\";\n TAG_ID[TAG_ID[\"CAPTION\"] = 17] = \"CAPTION\";\n TAG_ID[TAG_ID[\"CENTER\"] = 18] = \"CENTER\";\n TAG_ID[TAG_ID[\"CODE\"] = 19] = \"CODE\";\n TAG_ID[TAG_ID[\"COL\"] = 20] = \"COL\";\n TAG_ID[TAG_ID[\"COLGROUP\"] = 21] = \"COLGROUP\";\n TAG_ID[TAG_ID[\"DD\"] = 22] = \"DD\";\n TAG_ID[TAG_ID[\"DESC\"] = 23] = \"DESC\";\n TAG_ID[TAG_ID[\"DETAILS\"] = 24] = \"DETAILS\";\n TAG_ID[TAG_ID[\"DIALOG\"] = 25] = \"DIALOG\";\n TAG_ID[TAG_ID[\"DIR\"] = 26] = \"DIR\";\n TAG_ID[TAG_ID[\"DIV\"] = 27] = \"DIV\";\n TAG_ID[TAG_ID[\"DL\"] = 28] = \"DL\";\n TAG_ID[TAG_ID[\"DT\"] = 29] = \"DT\";\n TAG_ID[TAG_ID[\"EM\"] = 30] = \"EM\";\n TAG_ID[TAG_ID[\"EMBED\"] = 31] = \"EMBED\";\n TAG_ID[TAG_ID[\"FIELDSET\"] = 32] = \"FIELDSET\";\n TAG_ID[TAG_ID[\"FIGCAPTION\"] = 33] = \"FIGCAPTION\";\n TAG_ID[TAG_ID[\"FIGURE\"] = 34] = \"FIGURE\";\n TAG_ID[TAG_ID[\"FONT\"] = 35] = \"FONT\";\n TAG_ID[TAG_ID[\"FOOTER\"] = 36] = \"FOOTER\";\n TAG_ID[TAG_ID[\"FOREIGN_OBJECT\"] = 37] = \"FOREIGN_OBJECT\";\n TAG_ID[TAG_ID[\"FORM\"] = 38] = \"FORM\";\n TAG_ID[TAG_ID[\"FRAME\"] = 39] = \"FRAME\";\n TAG_ID[TAG_ID[\"FRAMESET\"] = 40] = \"FRAMESET\";\n TAG_ID[TAG_ID[\"H1\"] = 41] = \"H1\";\n TAG_ID[TAG_ID[\"H2\"] = 42] = \"H2\";\n TAG_ID[TAG_ID[\"H3\"] = 43] = \"H3\";\n TAG_ID[TAG_ID[\"H4\"] = 44] = \"H4\";\n TAG_ID[TAG_ID[\"H5\"] = 45] = \"H5\";\n TAG_ID[TAG_ID[\"H6\"] = 46] = \"H6\";\n TAG_ID[TAG_ID[\"HEAD\"] = 47] = \"HEAD\";\n TAG_ID[TAG_ID[\"HEADER\"] = 48] = \"HEADER\";\n TAG_ID[TAG_ID[\"HGROUP\"] = 49] = \"HGROUP\";\n TAG_ID[TAG_ID[\"HR\"] = 50] = \"HR\";\n TAG_ID[TAG_ID[\"HTML\"] = 51] = \"HTML\";\n TAG_ID[TAG_ID[\"I\"] = 52] = \"I\";\n TAG_ID[TAG_ID[\"IMG\"] = 53] = \"IMG\";\n TAG_ID[TAG_ID[\"IMAGE\"] = 54] = \"IMAGE\";\n TAG_ID[TAG_ID[\"INPUT\"] = 55] = \"INPUT\";\n TAG_ID[TAG_ID[\"IFRAME\"] = 56] = \"IFRAME\";\n TAG_ID[TAG_ID[\"KEYGEN\"] = 57] = \"KEYGEN\";\n TAG_ID[TAG_ID[\"LABEL\"] = 58] = \"LABEL\";\n TAG_ID[TAG_ID[\"LI\"] = 59] = \"LI\";\n TAG_ID[TAG_ID[\"LINK\"] = 60] = \"LINK\";\n TAG_ID[TAG_ID[\"LISTING\"] = 61] = \"LISTING\";\n TAG_ID[TAG_ID[\"MAIN\"] = 62] = \"MAIN\";\n TAG_ID[TAG_ID[\"MALIGNMARK\"] = 63] = \"MALIGNMARK\";\n TAG_ID[TAG_ID[\"MARQUEE\"] = 64] = \"MARQUEE\";\n TAG_ID[TAG_ID[\"MATH\"] = 65] = \"MATH\";\n TAG_ID[TAG_ID[\"MENU\"] = 66] = \"MENU\";\n TAG_ID[TAG_ID[\"META\"] = 67] = \"META\";\n TAG_ID[TAG_ID[\"MGLYPH\"] = 68] = \"MGLYPH\";\n TAG_ID[TAG_ID[\"MI\"] = 69] = \"MI\";\n TAG_ID[TAG_ID[\"MO\"] = 70] = \"MO\";\n TAG_ID[TAG_ID[\"MN\"] = 71] = \"MN\";\n TAG_ID[TAG_ID[\"MS\"] = 72] = \"MS\";\n TAG_ID[TAG_ID[\"MTEXT\"] = 73] = \"MTEXT\";\n TAG_ID[TAG_ID[\"NAV\"] = 74] = \"NAV\";\n TAG_ID[TAG_ID[\"NOBR\"] = 75] = \"NOBR\";\n TAG_ID[TAG_ID[\"NOFRAMES\"] = 76] = \"NOFRAMES\";\n TAG_ID[TAG_ID[\"NOEMBED\"] = 77] = \"NOEMBED\";\n TAG_ID[TAG_ID[\"NOSCRIPT\"] = 78] = \"NOSCRIPT\";\n TAG_ID[TAG_ID[\"OBJECT\"] = 79] = \"OBJECT\";\n TAG_ID[TAG_ID[\"OL\"] = 80] = \"OL\";\n TAG_ID[TAG_ID[\"OPTGROUP\"] = 81] = \"OPTGROUP\";\n TAG_ID[TAG_ID[\"OPTION\"] = 82] = \"OPTION\";\n TAG_ID[TAG_ID[\"P\"] = 83] = \"P\";\n TAG_ID[TAG_ID[\"PARAM\"] = 84] = \"PARAM\";\n TAG_ID[TAG_ID[\"PLAINTEXT\"] = 85] = \"PLAINTEXT\";\n TAG_ID[TAG_ID[\"PRE\"] = 86] = \"PRE\";\n TAG_ID[TAG_ID[\"RB\"] = 87] = \"RB\";\n TAG_ID[TAG_ID[\"RP\"] = 88] = \"RP\";\n TAG_ID[TAG_ID[\"RT\"] = 89] = \"RT\";\n TAG_ID[TAG_ID[\"RTC\"] = 90] = \"RTC\";\n TAG_ID[TAG_ID[\"RUBY\"] = 91] = \"RUBY\";\n TAG_ID[TAG_ID[\"S\"] = 92] = \"S\";\n TAG_ID[TAG_ID[\"SCRIPT\"] = 93] = \"SCRIPT\";\n TAG_ID[TAG_ID[\"SEARCH\"] = 94] = \"SEARCH\";\n TAG_ID[TAG_ID[\"SECTION\"] = 95] = \"SECTION\";\n TAG_ID[TAG_ID[\"SELECT\"] = 96] = \"SELECT\";\n TAG_ID[TAG_ID[\"SOURCE\"] = 97] = \"SOURCE\";\n TAG_ID[TAG_ID[\"SMALL\"] = 98] = \"SMALL\";\n TAG_ID[TAG_ID[\"SPAN\"] = 99] = \"SPAN\";\n TAG_ID[TAG_ID[\"STRIKE\"] = 100] = \"STRIKE\";\n TAG_ID[TAG_ID[\"STRONG\"] = 101] = \"STRONG\";\n TAG_ID[TAG_ID[\"STYLE\"] = 102] = \"STYLE\";\n TAG_ID[TAG_ID[\"SUB\"] = 103] = \"SUB\";\n TAG_ID[TAG_ID[\"SUMMARY\"] = 104] = \"SUMMARY\";\n TAG_ID[TAG_ID[\"SUP\"] = 105] = \"SUP\";\n TAG_ID[TAG_ID[\"TABLE\"] = 106] = \"TABLE\";\n TAG_ID[TAG_ID[\"TBODY\"] = 107] = \"TBODY\";\n TAG_ID[TAG_ID[\"TEMPLATE\"] = 108] = \"TEMPLATE\";\n TAG_ID[TAG_ID[\"TEXTAREA\"] = 109] = \"TEXTAREA\";\n TAG_ID[TAG_ID[\"TFOOT\"] = 110] = \"TFOOT\";\n TAG_ID[TAG_ID[\"TD\"] = 111] = \"TD\";\n TAG_ID[TAG_ID[\"TH\"] = 112] = \"TH\";\n TAG_ID[TAG_ID[\"THEAD\"] = 113] = \"THEAD\";\n TAG_ID[TAG_ID[\"TITLE\"] = 114] = \"TITLE\";\n TAG_ID[TAG_ID[\"TR\"] = 115] = \"TR\";\n TAG_ID[TAG_ID[\"TRACK\"] = 116] = \"TRACK\";\n TAG_ID[TAG_ID[\"TT\"] = 117] = \"TT\";\n TAG_ID[TAG_ID[\"U\"] = 118] = \"U\";\n TAG_ID[TAG_ID[\"UL\"] = 119] = \"UL\";\n TAG_ID[TAG_ID[\"SVG\"] = 120] = \"SVG\";\n TAG_ID[TAG_ID[\"VAR\"] = 121] = \"VAR\";\n TAG_ID[TAG_ID[\"WBR\"] = 122] = \"WBR\";\n TAG_ID[TAG_ID[\"XMP\"] = 123] = \"XMP\";\n})(TAG_ID || (TAG_ID = {}));\nconst TAG_NAME_TO_ID = new Map([\n [TAG_NAMES.A, TAG_ID.A],\n [TAG_NAMES.ADDRESS, TAG_ID.ADDRESS],\n [TAG_NAMES.ANNOTATION_XML, TAG_ID.ANNOTATION_XML],\n [TAG_NAMES.APPLET, TAG_ID.APPLET],\n [TAG_NAMES.AREA, TAG_ID.AREA],\n [TAG_NAMES.ARTICLE, TAG_ID.ARTICLE],\n [TAG_NAMES.ASIDE, TAG_ID.ASIDE],\n [TAG_NAMES.B, TAG_ID.B],\n [TAG_NAMES.BASE, TAG_ID.BASE],\n [TAG_NAMES.BASEFONT, TAG_ID.BASEFONT],\n [TAG_NAMES.BGSOUND, TAG_ID.BGSOUND],\n [TAG_NAMES.BIG, TAG_ID.BIG],\n [TAG_NAMES.BLOCKQUOTE, TAG_ID.BLOCKQUOTE],\n [TAG_NAMES.BODY, TAG_ID.BODY],\n [TAG_NAMES.BR, TAG_ID.BR],\n [TAG_NAMES.BUTTON, TAG_ID.BUTTON],\n [TAG_NAMES.CAPTION, TAG_ID.CAPTION],\n [TAG_NAMES.CENTER, TAG_ID.CENTER],\n [TAG_NAMES.CODE, TAG_ID.CODE],\n [TAG_NAMES.COL, TAG_ID.COL],\n [TAG_NAMES.COLGROUP, TAG_ID.COLGROUP],\n [TAG_NAMES.DD, TAG_ID.DD],\n [TAG_NAMES.DESC, TAG_ID.DESC],\n [TAG_NAMES.DETAILS, TAG_ID.DETAILS],\n [TAG_NAMES.DIALOG, TAG_ID.DIALOG],\n [TAG_NAMES.DIR, TAG_ID.DIR],\n [TAG_NAMES.DIV, TAG_ID.DIV],\n [TAG_NAMES.DL, TAG_ID.DL],\n [TAG_NAMES.DT, TAG_ID.DT],\n [TAG_NAMES.EM, TAG_ID.EM],\n [TAG_NAMES.EMBED, TAG_ID.EMBED],\n [TAG_NAMES.FIELDSET, TAG_ID.FIELDSET],\n [TAG_NAMES.FIGCAPTION, TAG_ID.FIGCAPTION],\n [TAG_NAMES.FIGURE, TAG_ID.FIGURE],\n [TAG_NAMES.FONT, TAG_ID.FONT],\n [TAG_NAMES.FOOTER, TAG_ID.FOOTER],\n [TAG_NAMES.FOREIGN_OBJECT, TAG_ID.FOREIGN_OBJECT],\n [TAG_NAMES.FORM, TAG_ID.FORM],\n [TAG_NAMES.FRAME, TAG_ID.FRAME],\n [TAG_NAMES.FRAMESET, TAG_ID.FRAMESET],\n [TAG_NAMES.H1, TAG_ID.H1],\n [TAG_NAMES.H2, TAG_ID.H2],\n [TAG_NAMES.H3, TAG_ID.H3],\n [TAG_NAMES.H4, TAG_ID.H4],\n [TAG_NAMES.H5, TAG_ID.H5],\n [TAG_NAMES.H6, TAG_ID.H6],\n [TAG_NAMES.HEAD, TAG_ID.HEAD],\n [TAG_NAMES.HEADER, TAG_ID.HEADER],\n [TAG_NAMES.HGROUP, TAG_ID.HGROUP],\n [TAG_NAMES.HR, TAG_ID.HR],\n [TAG_NAMES.HTML, TAG_ID.HTML],\n [TAG_NAMES.I, TAG_ID.I],\n [TAG_NAMES.IMG, TAG_ID.IMG],\n [TAG_NAMES.IMAGE, TAG_ID.IMAGE],\n [TAG_NAMES.INPUT, TAG_ID.INPUT],\n [TAG_NAMES.IFRAME, TAG_ID.IFRAME],\n [TAG_NAMES.KEYGEN, TAG_ID.KEYGEN],\n [TAG_NAMES.LABEL, TAG_ID.LABEL],\n [TAG_NAMES.LI, TAG_ID.LI],\n [TAG_NAMES.LINK, TAG_ID.LINK],\n [TAG_NAMES.LISTING, TAG_ID.LISTING],\n [TAG_NAMES.MAIN, TAG_ID.MAIN],\n [TAG_NAMES.MALIGNMARK, TAG_ID.MALIGNMARK],\n [TAG_NAMES.MARQUEE, TAG_ID.MARQUEE],\n [TAG_NAMES.MATH, TAG_ID.MATH],\n [TAG_NAMES.MENU, TAG_ID.MENU],\n [TAG_NAMES.META, TAG_ID.META],\n [TAG_NAMES.MGLYPH, TAG_ID.MGLYPH],\n [TAG_NAMES.MI, TAG_ID.MI],\n [TAG_NAMES.MO, TAG_ID.MO],\n [TAG_NAMES.MN, TAG_ID.MN],\n [TAG_NAMES.MS, TAG_ID.MS],\n [TAG_NAMES.MTEXT, TAG_ID.MTEXT],\n [TAG_NAMES.NAV, TAG_ID.NAV],\n [TAG_NAMES.NOBR, TAG_ID.NOBR],\n [TAG_NAMES.NOFRAMES, TAG_ID.NOFRAMES],\n [TAG_NAMES.NOEMBED, TAG_ID.NOEMBED],\n [TAG_NAMES.NOSCRIPT, TAG_ID.NOSCRIPT],\n [TAG_NAMES.OBJECT, TAG_ID.OBJECT],\n [TAG_NAMES.OL, TAG_ID.OL],\n [TAG_NAMES.OPTGROUP, TAG_ID.OPTGROUP],\n [TAG_NAMES.OPTION, TAG_ID.OPTION],\n [TAG_NAMES.P, TAG_ID.P],\n [TAG_NAMES.PARAM, TAG_ID.PARAM],\n [TAG_NAMES.PLAINTEXT, TAG_ID.PLAINTEXT],\n [TAG_NAMES.PRE, TAG_ID.PRE],\n [TAG_NAMES.RB, TAG_ID.RB],\n [TAG_NAMES.RP, TAG_ID.RP],\n [TAG_NAMES.RT, TAG_ID.RT],\n [TAG_NAMES.RTC, TAG_ID.RTC],\n [TAG_NAMES.RUBY, TAG_ID.RUBY],\n [TAG_NAMES.S, TAG_ID.S],\n [TAG_NAMES.SCRIPT, TAG_ID.SCRIPT],\n [TAG_NAMES.SEARCH, TAG_ID.SEARCH],\n [TAG_NAMES.SECTION, TAG_ID.SECTION],\n [TAG_NAMES.SELECT, TAG_ID.SELECT],\n [TAG_NAMES.SOURCE, TAG_ID.SOURCE],\n [TAG_NAMES.SMALL, TAG_ID.SMALL],\n [TAG_NAMES.SPAN, TAG_ID.SPAN],\n [TAG_NAMES.STRIKE, TAG_ID.STRIKE],\n [TAG_NAMES.STRONG, TAG_ID.STRONG],\n [TAG_NAMES.STYLE, TAG_ID.STYLE],\n [TAG_NAMES.SUB, TAG_ID.SUB],\n [TAG_NAMES.SUMMARY, TAG_ID.SUMMARY],\n [TAG_NAMES.SUP, TAG_ID.SUP],\n [TAG_NAMES.TABLE, TAG_ID.TABLE],\n [TAG_NAMES.TBODY, TAG_ID.TBODY],\n [TAG_NAMES.TEMPLATE, TAG_ID.TEMPLATE],\n [TAG_NAMES.TEXTAREA, TAG_ID.TEXTAREA],\n [TAG_NAMES.TFOOT, TAG_ID.TFOOT],\n [TAG_NAMES.TD, TAG_ID.TD],\n [TAG_NAMES.TH, TAG_ID.TH],\n [TAG_NAMES.THEAD, TAG_ID.THEAD],\n [TAG_NAMES.TITLE, TAG_ID.TITLE],\n [TAG_NAMES.TR, TAG_ID.TR],\n [TAG_NAMES.TRACK, TAG_ID.TRACK],\n [TAG_NAMES.TT, TAG_ID.TT],\n [TAG_NAMES.U, TAG_ID.U],\n [TAG_NAMES.UL, TAG_ID.UL],\n [TAG_NAMES.SVG, TAG_ID.SVG],\n [TAG_NAMES.VAR, TAG_ID.VAR],\n [TAG_NAMES.WBR, TAG_ID.WBR],\n [TAG_NAMES.XMP, TAG_ID.XMP],\n]);\nexport function getTagID(tagName) {\n var _a;\n return (_a = TAG_NAME_TO_ID.get(tagName)) !== null && _a !== void 0 ? _a : TAG_ID.UNKNOWN;\n}\nconst $ = TAG_ID;\nexport const SPECIAL_ELEMENTS = {\n [NS.HTML]: new Set([\n $.ADDRESS,\n $.APPLET,\n $.AREA,\n $.ARTICLE,\n $.ASIDE,\n $.BASE,\n $.BASEFONT,\n $.BGSOUND,\n $.BLOCKQUOTE,\n $.BODY,\n $.BR,\n $.BUTTON,\n $.CAPTION,\n $.CENTER,\n $.COL,\n $.COLGROUP,\n $.DD,\n $.DETAILS,\n $.DIR,\n $.DIV,\n $.DL,\n $.DT,\n $.EMBED,\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 $.HGROUP,\n $.HR,\n $.HTML,\n $.IFRAME,\n $.IMG,\n $.INPUT,\n $.LI,\n $.LINK,\n $.LISTING,\n $.MAIN,\n $.MARQUEE,\n $.MENU,\n $.META,\n $.NAV,\n $.NOEMBED,\n $.NOFRAMES,\n $.NOSCRIPT,\n $.OBJECT,\n $.OL,\n $.P,\n $.PARAM,\n $.PLAINTEXT,\n $.PRE,\n $.SCRIPT,\n $.SECTION,\n $.SELECT,\n $.SOURCE,\n $.STYLE,\n $.SUMMARY,\n $.TABLE,\n $.TBODY,\n $.TD,\n $.TEMPLATE,\n $.TEXTAREA,\n $.TFOOT,\n $.TH,\n $.THEAD,\n $.TITLE,\n $.TR,\n $.TRACK,\n $.UL,\n $.WBR,\n $.XMP,\n ]),\n [NS.MATHML]: new Set([$.MI, $.MO, $.MN, $.MS, $.MTEXT, $.ANNOTATION_XML]),\n [NS.SVG]: new Set([$.TITLE, $.FOREIGN_OBJECT, $.DESC]),\n [NS.XLINK]: new Set(),\n [NS.XML]: new Set(),\n [NS.XMLNS]: new Set(),\n};\nexport const NUMBERED_HEADERS = new Set([$.H1, $.H2, $.H3, $.H4, $.H5, $.H6]);\nconst UNESCAPED_TEXT = new Set([\n TAG_NAMES.STYLE,\n TAG_NAMES.SCRIPT,\n TAG_NAMES.XMP,\n TAG_NAMES.IFRAME,\n TAG_NAMES.NOEMBED,\n TAG_NAMES.NOFRAMES,\n TAG_NAMES.PLAINTEXT,\n]);\nexport function hasUnescapedText(tn, scriptingEnabled) {\n return UNESCAPED_TEXT.has(tn) || (scriptingEnabled && tn === TAG_NAMES.NOSCRIPT);\n}\n","import { Preprocessor } from './preprocessor.js';\nimport { CODE_POINTS as $, SEQUENCES as $$, REPLACEMENT_CHARACTER, isSurrogate, isUndefinedCodePoint, isControlCodePoint, } from '../common/unicode.js';\nimport { TokenType, getTokenAttr, } from '../common/token.js';\nimport { htmlDecodeTree, EntityDecoder, DecodingMode } from 'entities/decode';\nimport { ERR } from '../common/error-codes.js';\nimport { TAG_ID, getTagID } from '../common/html.js';\n//States\nvar State;\n(function (State) {\n State[State[\"DATA\"] = 0] = \"DATA\";\n State[State[\"RCDATA\"] = 1] = \"RCDATA\";\n State[State[\"RAWTEXT\"] = 2] = \"RAWTEXT\";\n State[State[\"SCRIPT_DATA\"] = 3] = \"SCRIPT_DATA\";\n State[State[\"PLAINTEXT\"] = 4] = \"PLAINTEXT\";\n State[State[\"TAG_OPEN\"] = 5] = \"TAG_OPEN\";\n State[State[\"END_TAG_OPEN\"] = 6] = \"END_TAG_OPEN\";\n State[State[\"TAG_NAME\"] = 7] = \"TAG_NAME\";\n State[State[\"RCDATA_LESS_THAN_SIGN\"] = 8] = \"RCDATA_LESS_THAN_SIGN\";\n State[State[\"RCDATA_END_TAG_OPEN\"] = 9] = \"RCDATA_END_TAG_OPEN\";\n State[State[\"RCDATA_END_TAG_NAME\"] = 10] = \"RCDATA_END_TAG_NAME\";\n State[State[\"RAWTEXT_LESS_THAN_SIGN\"] = 11] = \"RAWTEXT_LESS_THAN_SIGN\";\n State[State[\"RAWTEXT_END_TAG_OPEN\"] = 12] = \"RAWTEXT_END_TAG_OPEN\";\n State[State[\"RAWTEXT_END_TAG_NAME\"] = 13] = \"RAWTEXT_END_TAG_NAME\";\n State[State[\"SCRIPT_DATA_LESS_THAN_SIGN\"] = 14] = \"SCRIPT_DATA_LESS_THAN_SIGN\";\n State[State[\"SCRIPT_DATA_END_TAG_OPEN\"] = 15] = \"SCRIPT_DATA_END_TAG_OPEN\";\n State[State[\"SCRIPT_DATA_END_TAG_NAME\"] = 16] = \"SCRIPT_DATA_END_TAG_NAME\";\n State[State[\"SCRIPT_DATA_ESCAPE_START\"] = 17] = \"SCRIPT_DATA_ESCAPE_START\";\n State[State[\"SCRIPT_DATA_ESCAPE_START_DASH\"] = 18] = \"SCRIPT_DATA_ESCAPE_START_DASH\";\n State[State[\"SCRIPT_DATA_ESCAPED\"] = 19] = \"SCRIPT_DATA_ESCAPED\";\n State[State[\"SCRIPT_DATA_ESCAPED_DASH\"] = 20] = \"SCRIPT_DATA_ESCAPED_DASH\";\n State[State[\"SCRIPT_DATA_ESCAPED_DASH_DASH\"] = 21] = \"SCRIPT_DATA_ESCAPED_DASH_DASH\";\n State[State[\"SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN\"] = 22] = \"SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN\";\n State[State[\"SCRIPT_DATA_ESCAPED_END_TAG_OPEN\"] = 23] = \"SCRIPT_DATA_ESCAPED_END_TAG_OPEN\";\n State[State[\"SCRIPT_DATA_ESCAPED_END_TAG_NAME\"] = 24] = \"SCRIPT_DATA_ESCAPED_END_TAG_NAME\";\n State[State[\"SCRIPT_DATA_DOUBLE_ESCAPE_START\"] = 25] = \"SCRIPT_DATA_DOUBLE_ESCAPE_START\";\n State[State[\"SCRIPT_DATA_DOUBLE_ESCAPED\"] = 26] = \"SCRIPT_DATA_DOUBLE_ESCAPED\";\n State[State[\"SCRIPT_DATA_DOUBLE_ESCAPED_DASH\"] = 27] = \"SCRIPT_DATA_DOUBLE_ESCAPED_DASH\";\n State[State[\"SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH\"] = 28] = \"SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH\";\n State[State[\"SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN\"] = 29] = \"SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN\";\n State[State[\"SCRIPT_DATA_DOUBLE_ESCAPE_END\"] = 30] = \"SCRIPT_DATA_DOUBLE_ESCAPE_END\";\n State[State[\"BEFORE_ATTRIBUTE_NAME\"] = 31] = \"BEFORE_ATTRIBUTE_NAME\";\n State[State[\"ATTRIBUTE_NAME\"] = 32] = \"ATTRIBUTE_NAME\";\n State[State[\"AFTER_ATTRIBUTE_NAME\"] = 33] = \"AFTER_ATTRIBUTE_NAME\";\n State[State[\"BEFORE_ATTRIBUTE_VALUE\"] = 34] = \"BEFORE_ATTRIBUTE_VALUE\";\n State[State[\"ATTRIBUTE_VALUE_DOUBLE_QUOTED\"] = 35] = \"ATTRIBUTE_VALUE_DOUBLE_QUOTED\";\n State[State[\"ATTRIBUTE_VALUE_SINGLE_QUOTED\"] = 36] = \"ATTRIBUTE_VALUE_SINGLE_QUOTED\";\n State[State[\"ATTRIBUTE_VALUE_UNQUOTED\"] = 37] = \"ATTRIBUTE_VALUE_UNQUOTED\";\n State[State[\"AFTER_ATTRIBUTE_VALUE_QUOTED\"] = 38] = \"AFTER_ATTRIBUTE_VALUE_QUOTED\";\n State[State[\"SELF_CLOSING_START_TAG\"] = 39] = \"SELF_CLOSING_START_TAG\";\n State[State[\"BOGUS_COMMENT\"] = 40] = \"BOGUS_COMMENT\";\n State[State[\"MARKUP_DECLARATION_OPEN\"] = 41] = \"MARKUP_DECLARATION_OPEN\";\n State[State[\"COMMENT_START\"] = 42] = \"COMMENT_START\";\n State[State[\"COMMENT_START_DASH\"] = 43] = \"COMMENT_START_DASH\";\n State[State[\"COMMENT\"] = 44] = \"COMMENT\";\n State[State[\"COMMENT_LESS_THAN_SIGN\"] = 45] = \"COMMENT_LESS_THAN_SIGN\";\n State[State[\"COMMENT_LESS_THAN_SIGN_BANG\"] = 46] = \"COMMENT_LESS_THAN_SIGN_BANG\";\n State[State[\"COMMENT_LESS_THAN_SIGN_BANG_DASH\"] = 47] = \"COMMENT_LESS_THAN_SIGN_BANG_DASH\";\n State[State[\"COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH\"] = 48] = \"COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH\";\n State[State[\"COMMENT_END_DASH\"] = 49] = \"COMMENT_END_DASH\";\n State[State[\"COMMENT_END\"] = 50] = \"COMMENT_END\";\n State[State[\"COMMENT_END_BANG\"] = 51] = \"COMMENT_END_BANG\";\n State[State[\"DOCTYPE\"] = 52] = \"DOCTYPE\";\n State[State[\"BEFORE_DOCTYPE_NAME\"] = 53] = \"BEFORE_DOCTYPE_NAME\";\n State[State[\"DOCTYPE_NAME\"] = 54] = \"DOCTYPE_NAME\";\n State[State[\"AFTER_DOCTYPE_NAME\"] = 55] = \"AFTER_DOCTYPE_NAME\";\n State[State[\"AFTER_DOCTYPE_PUBLIC_KEYWORD\"] = 56] = \"AFTER_DOCTYPE_PUBLIC_KEYWORD\";\n State[State[\"BEFORE_DOCTYPE_PUBLIC_IDENTIFIER\"] = 57] = \"BEFORE_DOCTYPE_PUBLIC_IDENTIFIER\";\n State[State[\"DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED\"] = 58] = \"DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED\";\n State[State[\"DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED\"] = 59] = \"DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED\";\n State[State[\"AFTER_DOCTYPE_PUBLIC_IDENTIFIER\"] = 60] = \"AFTER_DOCTYPE_PUBLIC_IDENTIFIER\";\n State[State[\"BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS\"] = 61] = \"BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS\";\n State[State[\"AFTER_DOCTYPE_SYSTEM_KEYWORD\"] = 62] = \"AFTER_DOCTYPE_SYSTEM_KEYWORD\";\n State[State[\"BEFORE_DOCTYPE_SYSTEM_IDENTIFIER\"] = 63] = \"BEFORE_DOCTYPE_SYSTEM_IDENTIFIER\";\n State[State[\"DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED\"] = 64] = \"DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED\";\n State[State[\"DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED\"] = 65] = \"DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED\";\n State[State[\"AFTER_DOCTYPE_SYSTEM_IDENTIFIER\"] = 66] = \"AFTER_DOCTYPE_SYSTEM_IDENTIFIER\";\n State[State[\"BOGUS_DOCTYPE\"] = 67] = \"BOGUS_DOCTYPE\";\n State[State[\"CDATA_SECTION\"] = 68] = \"CDATA_SECTION\";\n State[State[\"CDATA_SECTION_BRACKET\"] = 69] = \"CDATA_SECTION_BRACKET\";\n State[State[\"CDATA_SECTION_END\"] = 70] = \"CDATA_SECTION_END\";\n State[State[\"CHARACTER_REFERENCE\"] = 71] = \"CHARACTER_REFERENCE\";\n State[State[\"AMBIGUOUS_AMPERSAND\"] = 72] = \"AMBIGUOUS_AMPERSAND\";\n})(State || (State = {}));\n//Tokenizer initial states for different modes\nexport const TokenizerMode = {\n DATA: State.DATA,\n RCDATA: State.RCDATA,\n RAWTEXT: State.RAWTEXT,\n SCRIPT_DATA: State.SCRIPT_DATA,\n PLAINTEXT: State.PLAINTEXT,\n CDATA_SECTION: State.CDATA_SECTION,\n};\n//Utils\n//OPTIMIZATION: these utility functions should not be moved out of this module. V8 Crankshaft will not inline\n//this functions if they will be situated in another module due to context switch.\n//Always perform inlining check before modifying this functions ('node --trace-inlining').\nfunction isAsciiDigit(cp) {\n return cp >= $.DIGIT_0 && cp <= $.DIGIT_9;\n}\nfunction isAsciiUpper(cp) {\n return cp >= $.LATIN_CAPITAL_A && cp <= $.LATIN_CAPITAL_Z;\n}\nfunction isAsciiLower(cp) {\n return cp >= $.LATIN_SMALL_A && cp <= $.LATIN_SMALL_Z;\n}\nfunction isAsciiLetter(cp) {\n return isAsciiLower(cp) || isAsciiUpper(cp);\n}\nfunction isAsciiAlphaNumeric(cp) {\n return isAsciiLetter(cp) || isAsciiDigit(cp);\n}\nfunction toAsciiLower(cp) {\n return cp + 32;\n}\nfunction isWhitespace(cp) {\n return cp === $.SPACE || cp === $.LINE_FEED || cp === $.TABULATION || cp === $.FORM_FEED;\n}\nfunction isScriptDataDoubleEscapeSequenceEnd(cp) {\n return isWhitespace(cp) || cp === $.SOLIDUS || cp === $.GREATER_THAN_SIGN;\n}\nfunction getErrorForNumericCharacterReference(code) {\n if (code === $.NULL) {\n return ERR.nullCharacterReference;\n }\n else if (code > 1114111) {\n return ERR.characterReferenceOutsideUnicodeRange;\n }\n else if (isSurrogate(code)) {\n return ERR.surrogateCharacterReference;\n }\n else if (isUndefinedCodePoint(code)) {\n return ERR.noncharacterCharacterReference;\n }\n else if (isControlCodePoint(code) || code === $.CARRIAGE_RETURN) {\n return ERR.controlCharacterReference;\n }\n return null;\n}\n//Tokenizer\nexport class Tokenizer {\n constructor(options, handler) {\n this.options = options;\n this.handler = handler;\n this.paused = false;\n /** Ensures that the parsing loop isn't run multiple times at once. */\n this.inLoop = false;\n /**\n * Indicates that the current adjusted node exists, is not an element in the HTML namespace,\n * and that it is not an integration point for either MathML or HTML.\n *\n * @see {@link https://html.spec.whatwg.org/multipage/parsing.html#tree-construction}\n */\n this.inForeignNode = false;\n this.lastStartTagName = '';\n this.active = false;\n this.state = State.DATA;\n this.returnState = State.DATA;\n this.entityStartPos = 0;\n this.consumedAfterSnapshot = -1;\n this.currentCharacterToken = null;\n this.currentToken = null;\n this.currentAttr = { name: '', value: '' };\n this.preprocessor = new Preprocessor(handler);\n this.currentLocation = this.getCurrentLocation(-1);\n this.entityDecoder = new EntityDecoder(htmlDecodeTree, (cp, consumed) => {\n // Note: Set `pos` _before_ flushing, as flushing might drop\n // the current chunk and invalidate `entityStartPos`.\n this.preprocessor.pos = this.entityStartPos + consumed - 1;\n this._flushCodePointConsumedAsCharacterReference(cp);\n }, handler.onParseError\n ? {\n missingSemicolonAfterCharacterReference: () => {\n this._err(ERR.missingSemicolonAfterCharacterReference, 1);\n },\n absenceOfDigitsInNumericCharacterReference: (consumed) => {\n this._err(ERR.absenceOfDigitsInNumericCharacterReference, this.entityStartPos - this.preprocessor.pos + consumed);\n },\n validateNumericCharacterReference: (code) => {\n const error = getErrorForNumericCharacterReference(code);\n if (error)\n this._err(error, 1);\n },\n }\n : undefined);\n }\n //Errors\n _err(code, cpOffset = 0) {\n var _a, _b;\n (_b = (_a = this.handler).onParseError) === null || _b === void 0 ? void 0 : _b.call(_a, this.preprocessor.getError(code, cpOffset));\n }\n // NOTE: `offset` may never run across line boundaries.\n getCurrentLocation(offset) {\n if (!this.options.sourceCodeLocationInfo) {\n return null;\n }\n return {\n startLine: this.preprocessor.line,\n startCol: this.preprocessor.col - offset,\n startOffset: this.preprocessor.offset - offset,\n endLine: -1,\n endCol: -1,\n endOffset: -1,\n };\n }\n _runParsingLoop() {\n if (this.inLoop)\n return;\n this.inLoop = true;\n while (this.active && !this.paused) {\n this.consumedAfterSnapshot = 0;\n const cp = this._consume();\n if (!this._ensureHibernation()) {\n this._callState(cp);\n }\n }\n this.inLoop = false;\n }\n //API\n pause() {\n this.paused = true;\n }\n resume(writeCallback) {\n if (!this.paused) {\n throw new Error('Parser was already resumed');\n }\n this.paused = false;\n // Necessary for synchronous resume.\n if (this.inLoop)\n return;\n this._runParsingLoop();\n if (!this.paused) {\n writeCallback === null || writeCallback === void 0 ? void 0 : writeCallback();\n }\n }\n write(chunk, isLastChunk, writeCallback) {\n this.active = true;\n this.preprocessor.write(chunk, isLastChunk);\n this._runParsingLoop();\n if (!this.paused) {\n writeCallback === null || writeCallback === void 0 ? void 0 : writeCallback();\n }\n }\n insertHtmlAtCurrentPos(chunk) {\n this.active = true;\n this.preprocessor.insertHtmlAtCurrentPos(chunk);\n this._runParsingLoop();\n }\n //Hibernation\n _ensureHibernation() {\n if (this.preprocessor.endOfChunkHit) {\n this.preprocessor.retreat(this.consumedAfterSnapshot);\n this.consumedAfterSnapshot = 0;\n this.active = false;\n return true;\n }\n return false;\n }\n //Consumption\n _consume() {\n this.consumedAfterSnapshot++;\n return this.preprocessor.advance();\n }\n _advanceBy(count) {\n this.consumedAfterSnapshot += count;\n for (let i = 0; i < count; i++) {\n this.preprocessor.advance();\n }\n }\n _consumeSequenceIfMatch(pattern, caseSensitive) {\n if (this.preprocessor.startsWith(pattern, caseSensitive)) {\n // We will already have consumed one character before calling this method.\n this._advanceBy(pattern.length - 1);\n return true;\n }\n return false;\n }\n //Token creation\n _createStartTagToken() {\n this.currentToken = {\n type: TokenType.START_TAG,\n tagName: '',\n tagID: TAG_ID.UNKNOWN,\n selfClosing: false,\n ackSelfClosing: false,\n attrs: [],\n location: this.getCurrentLocation(1),\n };\n }\n _createEndTagToken() {\n this.currentToken = {\n type: TokenType.END_TAG,\n tagName: '',\n tagID: TAG_ID.UNKNOWN,\n selfClosing: false,\n ackSelfClosing: false,\n attrs: [],\n location: this.getCurrentLocation(2),\n };\n }\n _createCommentToken(offset) {\n this.currentToken = {\n type: TokenType.COMMENT,\n data: '',\n location: this.getCurrentLocation(offset),\n };\n }\n _createDoctypeToken(initialName) {\n this.currentToken = {\n type: TokenType.DOCTYPE,\n name: initialName,\n forceQuirks: false,\n publicId: null,\n systemId: null,\n location: this.currentLocation,\n };\n }\n _createCharacterToken(type, chars) {\n this.currentCharacterToken = {\n type,\n chars,\n location: this.currentLocation,\n };\n }\n //Tag attributes\n _createAttr(attrNameFirstCh) {\n this.currentAttr = {\n name: attrNameFirstCh,\n value: '',\n };\n this.currentLocation = this.getCurrentLocation(0);\n }\n _leaveAttrName() {\n var _a;\n var _b;\n const token = this.currentToken;\n if (getTokenAttr(token, this.currentAttr.name) === null) {\n token.attrs.push(this.currentAttr);\n if (token.location && this.currentLocation) {\n const attrLocations = ((_a = (_b = token.location).attrs) !== null && _a !== void 0 ? _a : (_b.attrs = Object.create(null)));\n attrLocations[this.currentAttr.name] = this.currentLocation;\n // Set end location\n this._leaveAttrValue();\n }\n }\n else {\n this._err(ERR.duplicateAttribute);\n }\n }\n _leaveAttrValue() {\n if (this.currentLocation) {\n this.currentLocation.endLine = this.preprocessor.line;\n this.currentLocation.endCol = this.preprocessor.col;\n this.currentLocation.endOffset = this.preprocessor.offset;\n }\n }\n //Token emission\n prepareToken(ct) {\n this._emitCurrentCharacterToken(ct.location);\n this.currentToken = null;\n if (ct.location) {\n ct.location.endLine = this.preprocessor.line;\n ct.location.endCol = this.preprocessor.col + 1;\n ct.location.endOffset = this.preprocessor.offset + 1;\n }\n this.currentLocation = this.getCurrentLocation(-1);\n }\n emitCurrentTagToken() {\n const ct = this.currentToken;\n this.prepareToken(ct);\n ct.tagID = getTagID(ct.tagName);\n if (ct.type === TokenType.START_TAG) {\n this.lastStartTagName = ct.tagName;\n this.handler.onStartTag(ct);\n }\n else {\n if (ct.attrs.length > 0) {\n this._err(ERR.endTagWithAttributes);\n }\n if (ct.selfClosing) {\n this._err(ERR.endTagWithTrailingSolidus);\n }\n this.handler.onEndTag(ct);\n }\n this.preprocessor.dropParsedChunk();\n }\n emitCurrentComment(ct) {\n this.prepareToken(ct);\n this.handler.onComment(ct);\n this.preprocessor.dropParsedChunk();\n }\n emitCurrentDoctype(ct) {\n this.prepareToken(ct);\n this.handler.onDoctype(ct);\n this.preprocessor.dropParsedChunk();\n }\n _emitCurrentCharacterToken(nextLocation) {\n if (this.currentCharacterToken) {\n //NOTE: if we have a pending character token, make it's end location equal to the\n //current token's start location.\n if (nextLocation && this.currentCharacterToken.location) {\n this.currentCharacterToken.location.endLine = nextLocation.startLine;\n this.currentCharacterToken.location.endCol = nextLocation.startCol;\n this.currentCharacterToken.location.endOffset = nextLocation.startOffset;\n }\n switch (this.currentCharacterToken.type) {\n case TokenType.CHARACTER: {\n this.handler.onCharacter(this.currentCharacterToken);\n break;\n }\n case TokenType.NULL_CHARACTER: {\n this.handler.onNullCharacter(this.currentCharacterToken);\n break;\n }\n case TokenType.WHITESPACE_CHARACTER: {\n this.handler.onWhitespaceCharacter(this.currentCharacterToken);\n break;\n }\n }\n this.currentCharacterToken = null;\n }\n }\n _emitEOFToken() {\n const location = this.getCurrentLocation(0);\n if (location) {\n location.endLine = location.startLine;\n location.endCol = location.startCol;\n location.endOffset = location.startOffset;\n }\n this._emitCurrentCharacterToken(location);\n this.handler.onEof({ type: TokenType.EOF, location });\n this.active = false;\n }\n //Characters emission\n //OPTIMIZATION: The specification uses only one type of character token (one token per character).\n //This causes a huge memory overhead and a lot of unnecessary parser loops. parse5 uses 3 groups of characters.\n //If we have a sequence of characters that belong to the same group, the parser can process it\n //as a single solid character token.\n //So, there are 3 types of character tokens in parse5:\n //1)TokenType.NULL_CHARACTER - \\u0000-character sequences (e.g. '\\u0000\\u0000\\u0000')\n //2)TokenType.WHITESPACE_CHARACTER - any whitespace/new-line character sequences (e.g. '\\n \\r\\t \\f')\n //3)TokenType.CHARACTER - any character sequence which don't belong to groups 1 and 2 (e.g. 'abcdef1234@@#$%^')\n _appendCharToCurrentCharacterToken(type, ch) {\n if (this.currentCharacterToken) {\n if (this.currentCharacterToken.type === type) {\n this.currentCharacterToken.chars += ch;\n return;\n }\n else {\n this.currentLocation = this.getCurrentLocation(0);\n this._emitCurrentCharacterToken(this.currentLocation);\n this.preprocessor.dropParsedChunk();\n }\n }\n this._createCharacterToken(type, ch);\n }\n _emitCodePoint(cp) {\n const type = isWhitespace(cp)\n ? TokenType.WHITESPACE_CHARACTER\n : cp === $.NULL\n ? TokenType.NULL_CHARACTER\n : TokenType.CHARACTER;\n this._appendCharToCurrentCharacterToken(type, String.fromCodePoint(cp));\n }\n //NOTE: used when we emit characters explicitly.\n //This is always for non-whitespace and non-null characters, which allows us to avoid additional checks.\n _emitChars(ch) {\n this._appendCharToCurrentCharacterToken(TokenType.CHARACTER, ch);\n }\n // Character reference helpers\n _startCharacterReference() {\n this.returnState = this.state;\n this.state = State.CHARACTER_REFERENCE;\n this.entityStartPos = this.preprocessor.pos;\n this.entityDecoder.startEntity(this._isCharacterReferenceInAttribute() ? DecodingMode.Attribute : DecodingMode.Legacy);\n }\n _isCharacterReferenceInAttribute() {\n return (this.returnState === State.ATTRIBUTE_VALUE_DOUBLE_QUOTED ||\n this.returnState === State.ATTRIBUTE_VALUE_SINGLE_QUOTED ||\n this.returnState === State.ATTRIBUTE_VALUE_UNQUOTED);\n }\n _flushCodePointConsumedAsCharacterReference(cp) {\n if (this._isCharacterReferenceInAttribute()) {\n this.currentAttr.value += String.fromCodePoint(cp);\n }\n else {\n this._emitCodePoint(cp);\n }\n }\n // Calling states this way turns out to be much faster than any other approach.\n _callState(cp) {\n switch (this.state) {\n case State.DATA: {\n this._stateData(cp);\n break;\n }\n case State.RCDATA: {\n this._stateRcdata(cp);\n break;\n }\n case State.RAWTEXT: {\n this._stateRawtext(cp);\n break;\n }\n case State.SCRIPT_DATA: {\n this._stateScriptData(cp);\n break;\n }\n case State.PLAINTEXT: {\n this._statePlaintext(cp);\n break;\n }\n case State.TAG_OPEN: {\n this._stateTagOpen(cp);\n break;\n }\n case State.END_TAG_OPEN: {\n this._stateEndTagOpen(cp);\n break;\n }\n case State.TAG_NAME: {\n this._stateTagName(cp);\n break;\n }\n case State.RCDATA_LESS_THAN_SIGN: {\n this._stateRcdataLessThanSign(cp);\n break;\n }\n case State.RCDATA_END_TAG_OPEN: {\n this._stateRcdataEndTagOpen(cp);\n break;\n }\n case State.RCDATA_END_TAG_NAME: {\n this._stateRcdataEndTagName(cp);\n break;\n }\n case State.RAWTEXT_LESS_THAN_SIGN: {\n this._stateRawtextLessThanSign(cp);\n break;\n }\n case State.RAWTEXT_END_TAG_OPEN: {\n this._stateRawtextEndTagOpen(cp);\n break;\n }\n case State.RAWTEXT_END_TAG_NAME: {\n this._stateRawtextEndTagName(cp);\n break;\n }\n case State.SCRIPT_DATA_LESS_THAN_SIGN: {\n this._stateScriptDataLessThanSign(cp);\n break;\n }\n case State.SCRIPT_DATA_END_TAG_OPEN: {\n this._stateScriptDataEndTagOpen(cp);\n break;\n }\n case State.SCRIPT_DATA_END_TAG_NAME: {\n this._stateScriptDataEndTagName(cp);\n break;\n }\n case State.SCRIPT_DATA_ESCAPE_START: {\n this._stateScriptDataEscapeStart(cp);\n break;\n }\n case State.SCRIPT_DATA_ESCAPE_START_DASH: {\n this._stateScriptDataEscapeStartDash(cp);\n break;\n }\n case State.SCRIPT_DATA_ESCAPED: {\n this._stateScriptDataEscaped(cp);\n break;\n }\n case State.SCRIPT_DATA_ESCAPED_DASH: {\n this._stateScriptDataEscapedDash(cp);\n break;\n }\n case State.SCRIPT_DATA_ESCAPED_DASH_DASH: {\n this._stateScriptDataEscapedDashDash(cp);\n break;\n }\n case State.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN: {\n this._stateScriptDataEscapedLessThanSign(cp);\n break;\n }\n case State.SCRIPT_DATA_ESCAPED_END_TAG_OPEN: {\n this._stateScriptDataEscapedEndTagOpen(cp);\n break;\n }\n case State.SCRIPT_DATA_ESCAPED_END_TAG_NAME: {\n this._stateScriptDataEscapedEndTagName(cp);\n break;\n }\n case State.SCRIPT_DATA_DOUBLE_ESCAPE_START: {\n this._stateScriptDataDoubleEscapeStart(cp);\n break;\n }\n case State.SCRIPT_DATA_DOUBLE_ESCAPED: {\n this._stateScriptDataDoubleEscaped(cp);\n break;\n }\n case State.SCRIPT_DATA_DOUBLE_ESCAPED_DASH: {\n this._stateScriptDataDoubleEscapedDash(cp);\n break;\n }\n case State.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH: {\n this._stateScriptDataDoubleEscapedDashDash(cp);\n break;\n }\n case State.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN: {\n this._stateScriptDataDoubleEscapedLessThanSign(cp);\n break;\n }\n case State.SCRIPT_DATA_DOUBLE_ESCAPE_END: {\n this._stateScriptDataDoubleEscapeEnd(cp);\n break;\n }\n case State.BEFORE_ATTRIBUTE_NAME: {\n this._stateBeforeAttributeName(cp);\n break;\n }\n case State.ATTRIBUTE_NAME: {\n this._stateAttributeName(cp);\n break;\n }\n case State.AFTER_ATTRIBUTE_NAME: {\n this._stateAfterAttributeName(cp);\n break;\n }\n case State.BEFORE_ATTRIBUTE_VALUE: {\n this._stateBeforeAttributeValue(cp);\n break;\n }\n case State.ATTRIBUTE_VALUE_DOUBLE_QUOTED: {\n this._stateAttributeValueDoubleQuoted(cp);\n break;\n }\n case State.ATTRIBUTE_VALUE_SINGLE_QUOTED: {\n this._stateAttributeValueSingleQuoted(cp);\n break;\n }\n case State.ATTRIBUTE_VALUE_UNQUOTED: {\n this._stateAttributeValueUnquoted(cp);\n break;\n }\n case State.AFTER_ATTRIBUTE_VALUE_QUOTED: {\n this._stateAfterAttributeValueQuoted(cp);\n break;\n }\n case State.SELF_CLOSING_START_TAG: {\n this._stateSelfClosingStartTag(cp);\n break;\n }\n case State.BOGUS_COMMENT: {\n this._stateBogusComment(cp);\n break;\n }\n case State.MARKUP_DECLARATION_OPEN: {\n this._stateMarkupDeclarationOpen(cp);\n break;\n }\n case State.COMMENT_START: {\n this._stateCommentStart(cp);\n break;\n }\n case State.COMMENT_START_DASH: {\n this._stateCommentStartDash(cp);\n break;\n }\n case State.COMMENT: {\n this._stateComment(cp);\n break;\n }\n case State.COMMENT_LESS_THAN_SIGN: {\n this._stateCommentLessThanSign(cp);\n break;\n }\n case State.COMMENT_LESS_THAN_SIGN_BANG: {\n this._stateCommentLessThanSignBang(cp);\n break;\n }\n case State.COMMENT_LESS_THAN_SIGN_BANG_DASH: {\n this._stateCommentLessThanSignBangDash(cp);\n break;\n }\n case State.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH: {\n this._stateCommentLessThanSignBangDashDash(cp);\n break;\n }\n case State.COMMENT_END_DASH: {\n this._stateCommentEndDash(cp);\n break;\n }\n case State.COMMENT_END: {\n this._stateCommentEnd(cp);\n break;\n }\n case State.COMMENT_END_BANG: {\n this._stateCommentEndBang(cp);\n break;\n }\n case State.DOCTYPE: {\n this._stateDoctype(cp);\n break;\n }\n case State.BEFORE_DOCTYPE_NAME: {\n this._stateBeforeDoctypeName(cp);\n break;\n }\n case State.DOCTYPE_NAME: {\n this._stateDoctypeName(cp);\n break;\n }\n case State.AFTER_DOCTYPE_NAME: {\n this._stateAfterDoctypeName(cp);\n break;\n }\n case State.AFTER_DOCTYPE_PUBLIC_KEYWORD: {\n this._stateAfterDoctypePublicKeyword(cp);\n break;\n }\n case State.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER: {\n this._stateBeforeDoctypePublicIdentifier(cp);\n break;\n }\n case State.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED: {\n this._stateDoctypePublicIdentifierDoubleQuoted(cp);\n break;\n }\n case State.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED: {\n this._stateDoctypePublicIdentifierSingleQuoted(cp);\n break;\n }\n case State.AFTER_DOCTYPE_PUBLIC_IDENTIFIER: {\n this._stateAfterDoctypePublicIdentifier(cp);\n break;\n }\n case State.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS: {\n this._stateBetweenDoctypePublicAndSystemIdentifiers(cp);\n break;\n }\n case State.AFTER_DOCTYPE_SYSTEM_KEYWORD: {\n this._stateAfterDoctypeSystemKeyword(cp);\n break;\n }\n case State.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER: {\n this._stateBeforeDoctypeSystemIdentifier(cp);\n break;\n }\n case State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED: {\n this._stateDoctypeSystemIdentifierDoubleQuoted(cp);\n break;\n }\n case State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED: {\n this._stateDoctypeSystemIdentifierSingleQuoted(cp);\n break;\n }\n case State.AFTER_DOCTYPE_SYSTEM_IDENTIFIER: {\n this._stateAfterDoctypeSystemIdentifier(cp);\n break;\n }\n case State.BOGUS_DOCTYPE: {\n this._stateBogusDoctype(cp);\n break;\n }\n case State.CDATA_SECTION: {\n this._stateCdataSection(cp);\n break;\n }\n case State.CDATA_SECTION_BRACKET: {\n this._stateCdataSectionBracket(cp);\n break;\n }\n case State.CDATA_SECTION_END: {\n this._stateCdataSectionEnd(cp);\n break;\n }\n case State.CHARACTER_REFERENCE: {\n this._stateCharacterReference();\n break;\n }\n case State.AMBIGUOUS_AMPERSAND: {\n this._stateAmbiguousAmpersand(cp);\n break;\n }\n default: {\n throw new Error('Unknown state');\n }\n }\n }\n // State machine\n // Data state\n //------------------------------------------------------------------\n _stateData(cp) {\n switch (cp) {\n case $.LESS_THAN_SIGN: {\n this.state = State.TAG_OPEN;\n break;\n }\n case $.AMPERSAND: {\n this._startCharacterReference();\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this._emitCodePoint(cp);\n break;\n }\n case $.EOF: {\n this._emitEOFToken();\n break;\n }\n default: {\n this._emitCodePoint(cp);\n }\n }\n }\n // RCDATA state\n //------------------------------------------------------------------\n _stateRcdata(cp) {\n switch (cp) {\n case $.AMPERSAND: {\n this._startCharacterReference();\n break;\n }\n case $.LESS_THAN_SIGN: {\n this.state = State.RCDATA_LESS_THAN_SIGN;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this._emitChars(REPLACEMENT_CHARACTER);\n break;\n }\n case $.EOF: {\n this._emitEOFToken();\n break;\n }\n default: {\n this._emitCodePoint(cp);\n }\n }\n }\n // RAWTEXT state\n //------------------------------------------------------------------\n _stateRawtext(cp) {\n switch (cp) {\n case $.LESS_THAN_SIGN: {\n this.state = State.RAWTEXT_LESS_THAN_SIGN;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this._emitChars(REPLACEMENT_CHARACTER);\n break;\n }\n case $.EOF: {\n this._emitEOFToken();\n break;\n }\n default: {\n this._emitCodePoint(cp);\n }\n }\n }\n // Script data state\n //------------------------------------------------------------------\n _stateScriptData(cp) {\n switch (cp) {\n case $.LESS_THAN_SIGN: {\n this.state = State.SCRIPT_DATA_LESS_THAN_SIGN;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this._emitChars(REPLACEMENT_CHARACTER);\n break;\n }\n case $.EOF: {\n this._emitEOFToken();\n break;\n }\n default: {\n this._emitCodePoint(cp);\n }\n }\n }\n // PLAINTEXT state\n //------------------------------------------------------------------\n _statePlaintext(cp) {\n switch (cp) {\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this._emitChars(REPLACEMENT_CHARACTER);\n break;\n }\n case $.EOF: {\n this._emitEOFToken();\n break;\n }\n default: {\n this._emitCodePoint(cp);\n }\n }\n }\n // Tag open state\n //------------------------------------------------------------------\n _stateTagOpen(cp) {\n if (isAsciiLetter(cp)) {\n this._createStartTagToken();\n this.state = State.TAG_NAME;\n this._stateTagName(cp);\n }\n else\n switch (cp) {\n case $.EXCLAMATION_MARK: {\n this.state = State.MARKUP_DECLARATION_OPEN;\n break;\n }\n case $.SOLIDUS: {\n this.state = State.END_TAG_OPEN;\n break;\n }\n case $.QUESTION_MARK: {\n this._err(ERR.unexpectedQuestionMarkInsteadOfTagName);\n this._createCommentToken(1);\n this.state = State.BOGUS_COMMENT;\n this._stateBogusComment(cp);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofBeforeTagName);\n this._emitChars('<');\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.invalidFirstCharacterOfTagName);\n this._emitChars('<');\n this.state = State.DATA;\n this._stateData(cp);\n }\n }\n }\n // End tag open state\n //------------------------------------------------------------------\n _stateEndTagOpen(cp) {\n if (isAsciiLetter(cp)) {\n this._createEndTagToken();\n this.state = State.TAG_NAME;\n this._stateTagName(cp);\n }\n else\n switch (cp) {\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.missingEndTagName);\n this.state = State.DATA;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofBeforeTagName);\n this._emitChars('</');\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.invalidFirstCharacterOfTagName);\n this._createCommentToken(2);\n this.state = State.BOGUS_COMMENT;\n this._stateBogusComment(cp);\n }\n }\n }\n // Tag name state\n //------------------------------------------------------------------\n _stateTagName(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n this.state = State.BEFORE_ATTRIBUTE_NAME;\n break;\n }\n case $.SOLIDUS: {\n this.state = State.SELF_CLOSING_START_TAG;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this.state = State.DATA;\n this.emitCurrentTagToken();\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n token.tagName += REPLACEMENT_CHARACTER;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInTag);\n this._emitEOFToken();\n break;\n }\n default: {\n token.tagName += String.fromCodePoint(isAsciiUpper(cp) ? toAsciiLower(cp) : cp);\n }\n }\n }\n // RCDATA less-than sign state\n //------------------------------------------------------------------\n _stateRcdataLessThanSign(cp) {\n if (cp === $.SOLIDUS) {\n this.state = State.RCDATA_END_TAG_OPEN;\n }\n else {\n this._emitChars('<');\n this.state = State.RCDATA;\n this._stateRcdata(cp);\n }\n }\n // RCDATA end tag open state\n //------------------------------------------------------------------\n _stateRcdataEndTagOpen(cp) {\n if (isAsciiLetter(cp)) {\n this.state = State.RCDATA_END_TAG_NAME;\n this._stateRcdataEndTagName(cp);\n }\n else {\n this._emitChars('</');\n this.state = State.RCDATA;\n this._stateRcdata(cp);\n }\n }\n handleSpecialEndTag(_cp) {\n if (!this.preprocessor.startsWith(this.lastStartTagName, false)) {\n return !this._ensureHibernation();\n }\n this._createEndTagToken();\n const token = this.currentToken;\n token.tagName = this.lastStartTagName;\n const cp = this.preprocessor.peek(this.lastStartTagName.length);\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n this._advanceBy(this.lastStartTagName.length);\n this.state = State.BEFORE_ATTRIBUTE_NAME;\n return false;\n }\n case $.SOLIDUS: {\n this._advanceBy(this.lastStartTagName.length);\n this.state = State.SELF_CLOSING_START_TAG;\n return false;\n }\n case $.GREATER_THAN_SIGN: {\n this._advanceBy(this.lastStartTagName.length);\n this.emitCurrentTagToken();\n this.state = State.DATA;\n return false;\n }\n default: {\n return !this._ensureHibernation();\n }\n }\n }\n // RCDATA end tag name state\n //------------------------------------------------------------------\n _stateRcdataEndTagName(cp) {\n if (this.handleSpecialEndTag(cp)) {\n this._emitChars('</');\n this.state = State.RCDATA;\n this._stateRcdata(cp);\n }\n }\n // RAWTEXT less-than sign state\n //------------------------------------------------------------------\n _stateRawtextLessThanSign(cp) {\n if (cp === $.SOLIDUS) {\n this.state = State.RAWTEXT_END_TAG_OPEN;\n }\n else {\n this._emitChars('<');\n this.state = State.RAWTEXT;\n this._stateRawtext(cp);\n }\n }\n // RAWTEXT end tag open state\n //------------------------------------------------------------------\n _stateRawtextEndTagOpen(cp) {\n if (isAsciiLetter(cp)) {\n this.state = State.RAWTEXT_END_TAG_NAME;\n this._stateRawtextEndTagName(cp);\n }\n else {\n this._emitChars('</');\n this.state = State.RAWTEXT;\n this._stateRawtext(cp);\n }\n }\n // RAWTEXT end tag name state\n //------------------------------------------------------------------\n _stateRawtextEndTagName(cp) {\n if (this.handleSpecialEndTag(cp)) {\n this._emitChars('</');\n this.state = State.RAWTEXT;\n this._stateRawtext(cp);\n }\n }\n // Script data less-than sign state\n //------------------------------------------------------------------\n _stateScriptDataLessThanSign(cp) {\n switch (cp) {\n case $.SOLIDUS: {\n this.state = State.SCRIPT_DATA_END_TAG_OPEN;\n break;\n }\n case $.EXCLAMATION_MARK: {\n this.state = State.SCRIPT_DATA_ESCAPE_START;\n this._emitChars('<!');\n break;\n }\n default: {\n this._emitChars('<');\n this.state = State.SCRIPT_DATA;\n this._stateScriptData(cp);\n }\n }\n }\n // Script data end tag open state\n //------------------------------------------------------------------\n _stateScriptDataEndTagOpen(cp) {\n if (isAsciiLetter(cp)) {\n this.state = State.SCRIPT_DATA_END_TAG_NAME;\n this._stateScriptDataEndTagName(cp);\n }\n else {\n this._emitChars('</');\n this.state = State.SCRIPT_DATA;\n this._stateScriptData(cp);\n }\n }\n // Script data end tag name state\n //------------------------------------------------------------------\n _stateScriptDataEndTagName(cp) {\n if (this.handleSpecialEndTag(cp)) {\n this._emitChars('</');\n this.state = State.SCRIPT_DATA;\n this._stateScriptData(cp);\n }\n }\n // Script data escape start state\n //------------------------------------------------------------------\n _stateScriptDataEscapeStart(cp) {\n if (cp === $.HYPHEN_MINUS) {\n this.state = State.SCRIPT_DATA_ESCAPE_START_DASH;\n this._emitChars('-');\n }\n else {\n this.state = State.SCRIPT_DATA;\n this._stateScriptData(cp);\n }\n }\n // Script data escape start dash state\n //------------------------------------------------------------------\n _stateScriptDataEscapeStartDash(cp) {\n if (cp === $.HYPHEN_MINUS) {\n this.state = State.SCRIPT_DATA_ESCAPED_DASH_DASH;\n this._emitChars('-');\n }\n else {\n this.state = State.SCRIPT_DATA;\n this._stateScriptData(cp);\n }\n }\n // Script data escaped state\n //------------------------------------------------------------------\n _stateScriptDataEscaped(cp) {\n switch (cp) {\n case $.HYPHEN_MINUS: {\n this.state = State.SCRIPT_DATA_ESCAPED_DASH;\n this._emitChars('-');\n break;\n }\n case $.LESS_THAN_SIGN: {\n this.state = State.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this._emitChars(REPLACEMENT_CHARACTER);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInScriptHtmlCommentLikeText);\n this._emitEOFToken();\n break;\n }\n default: {\n this._emitCodePoint(cp);\n }\n }\n }\n // Script data escaped dash state\n //------------------------------------------------------------------\n _stateScriptDataEscapedDash(cp) {\n switch (cp) {\n case $.HYPHEN_MINUS: {\n this.state = State.SCRIPT_DATA_ESCAPED_DASH_DASH;\n this._emitChars('-');\n break;\n }\n case $.LESS_THAN_SIGN: {\n this.state = State.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this.state = State.SCRIPT_DATA_ESCAPED;\n this._emitChars(REPLACEMENT_CHARACTER);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInScriptHtmlCommentLikeText);\n this._emitEOFToken();\n break;\n }\n default: {\n this.state = State.SCRIPT_DATA_ESCAPED;\n this._emitCodePoint(cp);\n }\n }\n }\n // Script data escaped dash dash state\n //------------------------------------------------------------------\n _stateScriptDataEscapedDashDash(cp) {\n switch (cp) {\n case $.HYPHEN_MINUS: {\n this._emitChars('-');\n break;\n }\n case $.LESS_THAN_SIGN: {\n this.state = State.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this.state = State.SCRIPT_DATA;\n this._emitChars('>');\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this.state = State.SCRIPT_DATA_ESCAPED;\n this._emitChars(REPLACEMENT_CHARACTER);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInScriptHtmlCommentLikeText);\n this._emitEOFToken();\n break;\n }\n default: {\n this.state = State.SCRIPT_DATA_ESCAPED;\n this._emitCodePoint(cp);\n }\n }\n }\n // Script data escaped less-than sign state\n //------------------------------------------------------------------\n _stateScriptDataEscapedLessThanSign(cp) {\n if (cp === $.SOLIDUS) {\n this.state = State.SCRIPT_DATA_ESCAPED_END_TAG_OPEN;\n }\n else if (isAsciiLetter(cp)) {\n this._emitChars('<');\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPE_START;\n this._stateScriptDataDoubleEscapeStart(cp);\n }\n else {\n this._emitChars('<');\n this.state = State.SCRIPT_DATA_ESCAPED;\n this._stateScriptDataEscaped(cp);\n }\n }\n // Script data escaped end tag open state\n //------------------------------------------------------------------\n _stateScriptDataEscapedEndTagOpen(cp) {\n if (isAsciiLetter(cp)) {\n this.state = State.SCRIPT_DATA_ESCAPED_END_TAG_NAME;\n this._stateScriptDataEscapedEndTagName(cp);\n }\n else {\n this._emitChars('</');\n this.state = State.SCRIPT_DATA_ESCAPED;\n this._stateScriptDataEscaped(cp);\n }\n }\n // Script data escaped end tag name state\n //------------------------------------------------------------------\n _stateScriptDataEscapedEndTagName(cp) {\n if (this.handleSpecialEndTag(cp)) {\n this._emitChars('</');\n this.state = State.SCRIPT_DATA_ESCAPED;\n this._stateScriptDataEscaped(cp);\n }\n }\n // Script data double escape start state\n //------------------------------------------------------------------\n _stateScriptDataDoubleEscapeStart(cp) {\n if (this.preprocessor.startsWith($$.SCRIPT, false) &&\n isScriptDataDoubleEscapeSequenceEnd(this.preprocessor.peek($$.SCRIPT.length))) {\n this._emitCodePoint(cp);\n for (let i = 0; i < $$.SCRIPT.length; i++) {\n this._emitCodePoint(this._consume());\n }\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;\n }\n else if (!this._ensureHibernation()) {\n this.state = State.SCRIPT_DATA_ESCAPED;\n this._stateScriptDataEscaped(cp);\n }\n }\n // Script data double escaped state\n //------------------------------------------------------------------\n _stateScriptDataDoubleEscaped(cp) {\n switch (cp) {\n case $.HYPHEN_MINUS: {\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED_DASH;\n this._emitChars('-');\n break;\n }\n case $.LESS_THAN_SIGN: {\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN;\n this._emitChars('<');\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this._emitChars(REPLACEMENT_CHARACTER);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInScriptHtmlCommentLikeText);\n this._emitEOFToken();\n break;\n }\n default: {\n this._emitCodePoint(cp);\n }\n }\n }\n // Script data double escaped dash state\n //------------------------------------------------------------------\n _stateScriptDataDoubleEscapedDash(cp) {\n switch (cp) {\n case $.HYPHEN_MINUS: {\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH;\n this._emitChars('-');\n break;\n }\n case $.LESS_THAN_SIGN: {\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN;\n this._emitChars('<');\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;\n this._emitChars(REPLACEMENT_CHARACTER);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInScriptHtmlCommentLikeText);\n this._emitEOFToken();\n break;\n }\n default: {\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;\n this._emitCodePoint(cp);\n }\n }\n }\n // Script data double escaped dash dash state\n //------------------------------------------------------------------\n _stateScriptDataDoubleEscapedDashDash(cp) {\n switch (cp) {\n case $.HYPHEN_MINUS: {\n this._emitChars('-');\n break;\n }\n case $.LESS_THAN_SIGN: {\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN;\n this._emitChars('<');\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this.state = State.SCRIPT_DATA;\n this._emitChars('>');\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;\n this._emitChars(REPLACEMENT_CHARACTER);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInScriptHtmlCommentLikeText);\n this._emitEOFToken();\n break;\n }\n default: {\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;\n this._emitCodePoint(cp);\n }\n }\n }\n // Script data double escaped less-than sign state\n //------------------------------------------------------------------\n _stateScriptDataDoubleEscapedLessThanSign(cp) {\n if (cp === $.SOLIDUS) {\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPE_END;\n this._emitChars('/');\n }\n else {\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;\n this._stateScriptDataDoubleEscaped(cp);\n }\n }\n // Script data double escape end state\n //------------------------------------------------------------------\n _stateScriptDataDoubleEscapeEnd(cp) {\n if (this.preprocessor.startsWith($$.SCRIPT, false) &&\n isScriptDataDoubleEscapeSequenceEnd(this.preprocessor.peek($$.SCRIPT.length))) {\n this._emitCodePoint(cp);\n for (let i = 0; i < $$.SCRIPT.length; i++) {\n this._emitCodePoint(this._consume());\n }\n this.state = State.SCRIPT_DATA_ESCAPED;\n }\n else if (!this._ensureHibernation()) {\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;\n this._stateScriptDataDoubleEscaped(cp);\n }\n }\n // Before attribute name state\n //------------------------------------------------------------------\n _stateBeforeAttributeName(cp) {\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n // Ignore whitespace\n break;\n }\n case $.SOLIDUS:\n case $.GREATER_THAN_SIGN:\n case $.EOF: {\n this.state = State.AFTER_ATTRIBUTE_NAME;\n this._stateAfterAttributeName(cp);\n break;\n }\n case $.EQUALS_SIGN: {\n this._err(ERR.unexpectedEqualsSignBeforeAttributeName);\n this._createAttr('=');\n this.state = State.ATTRIBUTE_NAME;\n break;\n }\n default: {\n this._createAttr('');\n this.state = State.ATTRIBUTE_NAME;\n this._stateAttributeName(cp);\n }\n }\n }\n // Attribute name state\n //------------------------------------------------------------------\n _stateAttributeName(cp) {\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED:\n case $.SOLIDUS:\n case $.GREATER_THAN_SIGN:\n case $.EOF: {\n this._leaveAttrName();\n this.state = State.AFTER_ATTRIBUTE_NAME;\n this._stateAfterAttributeName(cp);\n break;\n }\n case $.EQUALS_SIGN: {\n this._leaveAttrName();\n this.state = State.BEFORE_ATTRIBUTE_VALUE;\n break;\n }\n case $.QUOTATION_MARK:\n case $.APOSTROPHE:\n case $.LESS_THAN_SIGN: {\n this._err(ERR.unexpectedCharacterInAttributeName);\n this.currentAttr.name += String.fromCodePoint(cp);\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this.currentAttr.name += REPLACEMENT_CHARACTER;\n break;\n }\n default: {\n this.currentAttr.name += String.fromCodePoint(isAsciiUpper(cp) ? toAsciiLower(cp) : cp);\n }\n }\n }\n // After attribute name state\n //------------------------------------------------------------------\n _stateAfterAttributeName(cp) {\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n // Ignore whitespace\n break;\n }\n case $.SOLIDUS: {\n this.state = State.SELF_CLOSING_START_TAG;\n break;\n }\n case $.EQUALS_SIGN: {\n this.state = State.BEFORE_ATTRIBUTE_VALUE;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this.state = State.DATA;\n this.emitCurrentTagToken();\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInTag);\n this._emitEOFToken();\n break;\n }\n default: {\n this._createAttr('');\n this.state = State.ATTRIBUTE_NAME;\n this._stateAttributeName(cp);\n }\n }\n }\n // Before attribute value state\n //------------------------------------------------------------------\n _stateBeforeAttributeValue(cp) {\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n // Ignore whitespace\n break;\n }\n case $.QUOTATION_MARK: {\n this.state = State.ATTRIBUTE_VALUE_DOUBLE_QUOTED;\n break;\n }\n case $.APOSTROPHE: {\n this.state = State.ATTRIBUTE_VALUE_SINGLE_QUOTED;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.missingAttributeValue);\n this.state = State.DATA;\n this.emitCurrentTagToken();\n break;\n }\n default: {\n this.state = State.ATTRIBUTE_VALUE_UNQUOTED;\n this._stateAttributeValueUnquoted(cp);\n }\n }\n }\n // Attribute value (double-quoted) state\n //------------------------------------------------------------------\n _stateAttributeValueDoubleQuoted(cp) {\n switch (cp) {\n case $.QUOTATION_MARK: {\n this.state = State.AFTER_ATTRIBUTE_VALUE_QUOTED;\n break;\n }\n case $.AMPERSAND: {\n this._startCharacterReference();\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this.currentAttr.value += REPLACEMENT_CHARACTER;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInTag);\n this._emitEOFToken();\n break;\n }\n default: {\n this.currentAttr.value += String.fromCodePoint(cp);\n }\n }\n }\n // Attribute value (single-quoted) state\n //------------------------------------------------------------------\n _stateAttributeValueSingleQuoted(cp) {\n switch (cp) {\n case $.APOSTROPHE: {\n this.state = State.AFTER_ATTRIBUTE_VALUE_QUOTED;\n break;\n }\n case $.AMPERSAND: {\n this._startCharacterReference();\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this.currentAttr.value += REPLACEMENT_CHARACTER;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInTag);\n this._emitEOFToken();\n break;\n }\n default: {\n this.currentAttr.value += String.fromCodePoint(cp);\n }\n }\n }\n // Attribute value (unquoted) state\n //------------------------------------------------------------------\n _stateAttributeValueUnquoted(cp) {\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n this._leaveAttrValue();\n this.state = State.BEFORE_ATTRIBUTE_NAME;\n break;\n }\n case $.AMPERSAND: {\n this._startCharacterReference();\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._leaveAttrValue();\n this.state = State.DATA;\n this.emitCurrentTagToken();\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this.currentAttr.value += REPLACEMENT_CHARACTER;\n break;\n }\n case $.QUOTATION_MARK:\n case $.APOSTROPHE:\n case $.LESS_THAN_SIGN:\n case $.EQUALS_SIGN:\n case $.GRAVE_ACCENT: {\n this._err(ERR.unexpectedCharacterInUnquotedAttributeValue);\n this.currentAttr.value += String.fromCodePoint(cp);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInTag);\n this._emitEOFToken();\n break;\n }\n default: {\n this.currentAttr.value += String.fromCodePoint(cp);\n }\n }\n }\n // After attribute value (quoted) state\n //------------------------------------------------------------------\n _stateAfterAttributeValueQuoted(cp) {\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n this._leaveAttrValue();\n this.state = State.BEFORE_ATTRIBUTE_NAME;\n break;\n }\n case $.SOLIDUS: {\n this._leaveAttrValue();\n this.state = State.SELF_CLOSING_START_TAG;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._leaveAttrValue();\n this.state = State.DATA;\n this.emitCurrentTagToken();\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInTag);\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.missingWhitespaceBetweenAttributes);\n this.state = State.BEFORE_ATTRIBUTE_NAME;\n this._stateBeforeAttributeName(cp);\n }\n }\n }\n // Self-closing start tag state\n //------------------------------------------------------------------\n _stateSelfClosingStartTag(cp) {\n switch (cp) {\n case $.GREATER_THAN_SIGN: {\n const token = this.currentToken;\n token.selfClosing = true;\n this.state = State.DATA;\n this.emitCurrentTagToken();\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInTag);\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.unexpectedSolidusInTag);\n this.state = State.BEFORE_ATTRIBUTE_NAME;\n this._stateBeforeAttributeName(cp);\n }\n }\n }\n // Bogus comment state\n //------------------------------------------------------------------\n _stateBogusComment(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.GREATER_THAN_SIGN: {\n this.state = State.DATA;\n this.emitCurrentComment(token);\n break;\n }\n case $.EOF: {\n this.emitCurrentComment(token);\n this._emitEOFToken();\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n token.data += REPLACEMENT_CHARACTER;\n break;\n }\n default: {\n token.data += String.fromCodePoint(cp);\n }\n }\n }\n // Markup declaration open state\n //------------------------------------------------------------------\n _stateMarkupDeclarationOpen(cp) {\n if (this._consumeSequenceIfMatch($$.DASH_DASH, true)) {\n this._createCommentToken($$.DASH_DASH.length + 1);\n this.state = State.COMMENT_START;\n }\n else if (this._consumeSequenceIfMatch($$.DOCTYPE, false)) {\n // NOTE: Doctypes tokens are created without fixed offsets. We keep track of the moment a doctype *might* start here.\n this.currentLocation = this.getCurrentLocation($$.DOCTYPE.length + 1);\n this.state = State.DOCTYPE;\n }\n else if (this._consumeSequenceIfMatch($$.CDATA_START, true)) {\n if (this.inForeignNode) {\n this.state = State.CDATA_SECTION;\n }\n else {\n this._err(ERR.cdataInHtmlContent);\n this._createCommentToken($$.CDATA_START.length + 1);\n this.currentToken.data = '[CDATA[';\n this.state = State.BOGUS_COMMENT;\n }\n }\n //NOTE: Sequence lookups can be abrupted by hibernation. In that case, lookup\n //results are no longer valid and we will need to start over.\n else if (!this._ensureHibernation()) {\n this._err(ERR.incorrectlyOpenedComment);\n this._createCommentToken(2);\n this.state = State.BOGUS_COMMENT;\n this._stateBogusComment(cp);\n }\n }\n // Comment start state\n //------------------------------------------------------------------\n _stateCommentStart(cp) {\n switch (cp) {\n case $.HYPHEN_MINUS: {\n this.state = State.COMMENT_START_DASH;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.abruptClosingOfEmptyComment);\n this.state = State.DATA;\n const token = this.currentToken;\n this.emitCurrentComment(token);\n break;\n }\n default: {\n this.state = State.COMMENT;\n this._stateComment(cp);\n }\n }\n }\n // Comment start dash state\n //------------------------------------------------------------------\n _stateCommentStartDash(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.HYPHEN_MINUS: {\n this.state = State.COMMENT_END;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.abruptClosingOfEmptyComment);\n this.state = State.DATA;\n this.emitCurrentComment(token);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInComment);\n this.emitCurrentComment(token);\n this._emitEOFToken();\n break;\n }\n default: {\n token.data += '-';\n this.state = State.COMMENT;\n this._stateComment(cp);\n }\n }\n }\n // Comment state\n //------------------------------------------------------------------\n _stateComment(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.HYPHEN_MINUS: {\n this.state = State.COMMENT_END_DASH;\n break;\n }\n case $.LESS_THAN_SIGN: {\n token.data += '<';\n this.state = State.COMMENT_LESS_THAN_SIGN;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n token.data += REPLACEMENT_CHARACTER;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInComment);\n this.emitCurrentComment(token);\n this._emitEOFToken();\n break;\n }\n default: {\n token.data += String.fromCodePoint(cp);\n }\n }\n }\n // Comment less-than sign state\n //------------------------------------------------------------------\n _stateCommentLessThanSign(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.EXCLAMATION_MARK: {\n token.data += '!';\n this.state = State.COMMENT_LESS_THAN_SIGN_BANG;\n break;\n }\n case $.LESS_THAN_SIGN: {\n token.data += '<';\n break;\n }\n default: {\n this.state = State.COMMENT;\n this._stateComment(cp);\n }\n }\n }\n // Comment less-than sign bang state\n //------------------------------------------------------------------\n _stateCommentLessThanSignBang(cp) {\n if (cp === $.HYPHEN_MINUS) {\n this.state = State.COMMENT_LESS_THAN_SIGN_BANG_DASH;\n }\n else {\n this.state = State.COMMENT;\n this._stateComment(cp);\n }\n }\n // Comment less-than sign bang dash state\n //------------------------------------------------------------------\n _stateCommentLessThanSignBangDash(cp) {\n if (cp === $.HYPHEN_MINUS) {\n this.state = State.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH;\n }\n else {\n this.state = State.COMMENT_END_DASH;\n this._stateCommentEndDash(cp);\n }\n }\n // Comment less-than sign bang dash dash state\n //------------------------------------------------------------------\n _stateCommentLessThanSignBangDashDash(cp) {\n if (cp !== $.GREATER_THAN_SIGN && cp !== $.EOF) {\n this._err(ERR.nestedComment);\n }\n this.state = State.COMMENT_END;\n this._stateCommentEnd(cp);\n }\n // Comment end dash state\n //------------------------------------------------------------------\n _stateCommentEndDash(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.HYPHEN_MINUS: {\n this.state = State.COMMENT_END;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInComment);\n this.emitCurrentComment(token);\n this._emitEOFToken();\n break;\n }\n default: {\n token.data += '-';\n this.state = State.COMMENT;\n this._stateComment(cp);\n }\n }\n }\n // Comment end state\n //------------------------------------------------------------------\n _stateCommentEnd(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.GREATER_THAN_SIGN: {\n this.state = State.DATA;\n this.emitCurrentComment(token);\n break;\n }\n case $.EXCLAMATION_MARK: {\n this.state = State.COMMENT_END_BANG;\n break;\n }\n case $.HYPHEN_MINUS: {\n token.data += '-';\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInComment);\n this.emitCurrentComment(token);\n this._emitEOFToken();\n break;\n }\n default: {\n token.data += '--';\n this.state = State.COMMENT;\n this._stateComment(cp);\n }\n }\n }\n // Comment end bang state\n //------------------------------------------------------------------\n _stateCommentEndBang(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.HYPHEN_MINUS: {\n token.data += '--!';\n this.state = State.COMMENT_END_DASH;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.incorrectlyClosedComment);\n this.state = State.DATA;\n this.emitCurrentComment(token);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInComment);\n this.emitCurrentComment(token);\n this._emitEOFToken();\n break;\n }\n default: {\n token.data += '--!';\n this.state = State.COMMENT;\n this._stateComment(cp);\n }\n }\n }\n // DOCTYPE state\n //------------------------------------------------------------------\n _stateDoctype(cp) {\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n this.state = State.BEFORE_DOCTYPE_NAME;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this.state = State.BEFORE_DOCTYPE_NAME;\n this._stateBeforeDoctypeName(cp);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n this._createDoctypeToken(null);\n const token = this.currentToken;\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.missingWhitespaceBeforeDoctypeName);\n this.state = State.BEFORE_DOCTYPE_NAME;\n this._stateBeforeDoctypeName(cp);\n }\n }\n }\n // Before DOCTYPE name state\n //------------------------------------------------------------------\n _stateBeforeDoctypeName(cp) {\n if (isAsciiUpper(cp)) {\n this._createDoctypeToken(String.fromCharCode(toAsciiLower(cp)));\n this.state = State.DOCTYPE_NAME;\n }\n else\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n // Ignore whitespace\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this._createDoctypeToken(REPLACEMENT_CHARACTER);\n this.state = State.DOCTYPE_NAME;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.missingDoctypeName);\n this._createDoctypeToken(null);\n const token = this.currentToken;\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this.state = State.DATA;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n this._createDoctypeToken(null);\n const token = this.currentToken;\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n this._createDoctypeToken(String.fromCodePoint(cp));\n this.state = State.DOCTYPE_NAME;\n }\n }\n }\n // DOCTYPE name state\n //------------------------------------------------------------------\n _stateDoctypeName(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n this.state = State.AFTER_DOCTYPE_NAME;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this.state = State.DATA;\n this.emitCurrentDoctype(token);\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n token.name += REPLACEMENT_CHARACTER;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n token.name += String.fromCodePoint(isAsciiUpper(cp) ? toAsciiLower(cp) : cp);\n }\n }\n }\n // After DOCTYPE name state\n //------------------------------------------------------------------\n _stateAfterDoctypeName(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n // Ignore whitespace\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this.state = State.DATA;\n this.emitCurrentDoctype(token);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n if (this._consumeSequenceIfMatch($$.PUBLIC, false)) {\n this.state = State.AFTER_DOCTYPE_PUBLIC_KEYWORD;\n }\n else if (this._consumeSequenceIfMatch($$.SYSTEM, false)) {\n this.state = State.AFTER_DOCTYPE_SYSTEM_KEYWORD;\n }\n //NOTE: sequence lookup can be abrupted by hibernation. In that case lookup\n //results are no longer valid and we will need to start over.\n else if (!this._ensureHibernation()) {\n this._err(ERR.invalidCharacterSequenceAfterDoctypeName);\n token.forceQuirks = true;\n this.state = State.BOGUS_DOCTYPE;\n this._stateBogusDoctype(cp);\n }\n }\n }\n }\n // After DOCTYPE public keyword state\n //------------------------------------------------------------------\n _stateAfterDoctypePublicKeyword(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n this.state = State.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER;\n break;\n }\n case $.QUOTATION_MARK: {\n this._err(ERR.missingWhitespaceAfterDoctypePublicKeyword);\n token.publicId = '';\n this.state = State.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;\n break;\n }\n case $.APOSTROPHE: {\n this._err(ERR.missingWhitespaceAfterDoctypePublicKeyword);\n token.publicId = '';\n this.state = State.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.missingDoctypePublicIdentifier);\n token.forceQuirks = true;\n this.state = State.DATA;\n this.emitCurrentDoctype(token);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.missingQuoteBeforeDoctypePublicIdentifier);\n token.forceQuirks = true;\n this.state = State.BOGUS_DOCTYPE;\n this._stateBogusDoctype(cp);\n }\n }\n }\n // Before DOCTYPE public identifier state\n //------------------------------------------------------------------\n _stateBeforeDoctypePublicIdentifier(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n // Ignore whitespace\n break;\n }\n case $.QUOTATION_MARK: {\n token.publicId = '';\n this.state = State.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;\n break;\n }\n case $.APOSTROPHE: {\n token.publicId = '';\n this.state = State.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.missingDoctypePublicIdentifier);\n token.forceQuirks = true;\n this.state = State.DATA;\n this.emitCurrentDoctype(token);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.missingQuoteBeforeDoctypePublicIdentifier);\n token.forceQuirks = true;\n this.state = State.BOGUS_DOCTYPE;\n this._stateBogusDoctype(cp);\n }\n }\n }\n // DOCTYPE public identifier (double-quoted) state\n //------------------------------------------------------------------\n _stateDoctypePublicIdentifierDoubleQuoted(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.QUOTATION_MARK: {\n this.state = State.AFTER_DOCTYPE_PUBLIC_IDENTIFIER;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n token.publicId += REPLACEMENT_CHARACTER;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.abruptDoctypePublicIdentifier);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this.state = State.DATA;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n token.publicId += String.fromCodePoint(cp);\n }\n }\n }\n // DOCTYPE public identifier (single-quoted) state\n //------------------------------------------------------------------\n _stateDoctypePublicIdentifierSingleQuoted(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.APOSTROPHE: {\n this.state = State.AFTER_DOCTYPE_PUBLIC_IDENTIFIER;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n token.publicId += REPLACEMENT_CHARACTER;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.abruptDoctypePublicIdentifier);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this.state = State.DATA;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n token.publicId += String.fromCodePoint(cp);\n }\n }\n }\n // After DOCTYPE public identifier state\n //------------------------------------------------------------------\n _stateAfterDoctypePublicIdentifier(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n this.state = State.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this.state = State.DATA;\n this.emitCurrentDoctype(token);\n break;\n }\n case $.QUOTATION_MARK: {\n this._err(ERR.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers);\n token.systemId = '';\n this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;\n break;\n }\n case $.APOSTROPHE: {\n this._err(ERR.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers);\n token.systemId = '';\n this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.missingQuoteBeforeDoctypeSystemIdentifier);\n token.forceQuirks = true;\n this.state = State.BOGUS_DOCTYPE;\n this._stateBogusDoctype(cp);\n }\n }\n }\n // Between DOCTYPE public and system identifiers state\n //------------------------------------------------------------------\n _stateBetweenDoctypePublicAndSystemIdentifiers(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n // Ignore whitespace\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this.emitCurrentDoctype(token);\n this.state = State.DATA;\n break;\n }\n case $.QUOTATION_MARK: {\n token.systemId = '';\n this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;\n break;\n }\n case $.APOSTROPHE: {\n token.systemId = '';\n this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.missingQuoteBeforeDoctypeSystemIdentifier);\n token.forceQuirks = true;\n this.state = State.BOGUS_DOCTYPE;\n this._stateBogusDoctype(cp);\n }\n }\n }\n // After DOCTYPE system keyword state\n //------------------------------------------------------------------\n _stateAfterDoctypeSystemKeyword(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n this.state = State.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER;\n break;\n }\n case $.QUOTATION_MARK: {\n this._err(ERR.missingWhitespaceAfterDoctypeSystemKeyword);\n token.systemId = '';\n this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;\n break;\n }\n case $.APOSTROPHE: {\n this._err(ERR.missingWhitespaceAfterDoctypeSystemKeyword);\n token.systemId = '';\n this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.missingDoctypeSystemIdentifier);\n token.forceQuirks = true;\n this.state = State.DATA;\n this.emitCurrentDoctype(token);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.missingQuoteBeforeDoctypeSystemIdentifier);\n token.forceQuirks = true;\n this.state = State.BOGUS_DOCTYPE;\n this._stateBogusDoctype(cp);\n }\n }\n }\n // Before DOCTYPE system identifier state\n //------------------------------------------------------------------\n _stateBeforeDoctypeSystemIdentifier(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n // Ignore whitespace\n break;\n }\n case $.QUOTATION_MARK: {\n token.systemId = '';\n this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;\n break;\n }\n case $.APOSTROPHE: {\n token.systemId = '';\n this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.missingDoctypeSystemIdentifier);\n token.forceQuirks = true;\n this.state = State.DATA;\n this.emitCurrentDoctype(token);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.missingQuoteBeforeDoctypeSystemIdentifier);\n token.forceQuirks = true;\n this.state = State.BOGUS_DOCTYPE;\n this._stateBogusDoctype(cp);\n }\n }\n }\n // DOCTYPE system identifier (double-quoted) state\n //------------------------------------------------------------------\n _stateDoctypeSystemIdentifierDoubleQuoted(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.QUOTATION_MARK: {\n this.state = State.AFTER_DOCTYPE_SYSTEM_IDENTIFIER;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n token.systemId += REPLACEMENT_CHARACTER;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.abruptDoctypeSystemIdentifier);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this.state = State.DATA;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n token.systemId += String.fromCodePoint(cp);\n }\n }\n }\n // DOCTYPE system identifier (single-quoted) state\n //------------------------------------------------------------------\n _stateDoctypeSystemIdentifierSingleQuoted(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.APOSTROPHE: {\n this.state = State.AFTER_DOCTYPE_SYSTEM_IDENTIFIER;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n token.systemId += REPLACEMENT_CHARACTER;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.abruptDoctypeSystemIdentifier);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this.state = State.DATA;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n token.systemId += String.fromCodePoint(cp);\n }\n }\n }\n // After DOCTYPE system identifier state\n //------------------------------------------------------------------\n _stateAfterDoctypeSystemIdentifier(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n // Ignore whitespace\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this.emitCurrentDoctype(token);\n this.state = State.DATA;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.unexpectedCharacterAfterDoctypeSystemIdentifier);\n this.state = State.BOGUS_DOCTYPE;\n this._stateBogusDoctype(cp);\n }\n }\n }\n // Bogus DOCTYPE state\n //------------------------------------------------------------------\n _stateBogusDoctype(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.GREATER_THAN_SIGN: {\n this.emitCurrentDoctype(token);\n this.state = State.DATA;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n break;\n }\n case $.EOF: {\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default:\n // Do nothing\n }\n }\n // CDATA section state\n //------------------------------------------------------------------\n _stateCdataSection(cp) {\n switch (cp) {\n case $.RIGHT_SQUARE_BRACKET: {\n this.state = State.CDATA_SECTION_BRACKET;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInCdata);\n this._emitEOFToken();\n break;\n }\n default: {\n this._emitCodePoint(cp);\n }\n }\n }\n // CDATA section bracket state\n //------------------------------------------------------------------\n _stateCdataSectionBracket(cp) {\n if (cp === $.RIGHT_SQUARE_BRACKET) {\n this.state = State.CDATA_SECTION_END;\n }\n else {\n this._emitChars(']');\n this.state = State.CDATA_SECTION;\n this._stateCdataSection(cp);\n }\n }\n // CDATA section end state\n //------------------------------------------------------------------\n _stateCdataSectionEnd(cp) {\n switch (cp) {\n case $.GREATER_THAN_SIGN: {\n this.state = State.DATA;\n break;\n }\n case $.RIGHT_SQUARE_BRACKET: {\n this._emitChars(']');\n break;\n }\n default: {\n this._emitChars(']]');\n this.state = State.CDATA_SECTION;\n this._stateCdataSection(cp);\n }\n }\n }\n // Character reference state\n //------------------------------------------------------------------\n _stateCharacterReference() {\n let length = this.entityDecoder.write(this.preprocessor.html, this.preprocessor.pos);\n if (length < 0) {\n if (this.preprocessor.lastChunkWritten) {\n length = this.entityDecoder.end();\n }\n else {\n // Wait for the rest of the entity.\n this.active = false;\n // Mark the entire buffer as read.\n this.preprocessor.pos = this.preprocessor.html.length - 1;\n this.consumedAfterSnapshot = 0;\n this.preprocessor.endOfChunkHit = true;\n return;\n }\n }\n if (length === 0) {\n // This was not a valid entity. Go back to the beginning, and\n // figure out what to do.\n this.preprocessor.pos = this.entityStartPos;\n this._flushCodePointConsumedAsCharacterReference($.AMPERSAND);\n this.state =\n !this._isCharacterReferenceInAttribute() && isAsciiAlphaNumeric(this.preprocessor.peek(1))\n ? State.AMBIGUOUS_AMPERSAND\n : this.returnState;\n }\n else {\n // We successfully parsed an entity. Switch to the return state.\n this.state = this.returnState;\n }\n }\n // Ambiguos ampersand state\n //------------------------------------------------------------------\n _stateAmbiguousAmpersand(cp) {\n if (isAsciiAlphaNumeric(cp)) {\n this._flushCodePointConsumedAsCharacterReference(cp);\n }\n else {\n if (cp === $.SEMICOLON) {\n this._err(ERR.unknownNamedCharacterReference);\n }\n this.state = this.returnState;\n this._callState(cp);\n }\n }\n}\n","import { TAG_ID as $, NS, NUMBERED_HEADERS } from '../common/html.js';\n//Element utils\nconst IMPLICIT_END_TAG_REQUIRED = new Set([$.DD, $.DT, $.LI, $.OPTGROUP, $.OPTION, $.P, $.RB, $.RP, $.RT, $.RTC]);\nconst IMPLICIT_END_TAG_REQUIRED_THOROUGHLY = new Set([\n ...IMPLICIT_END_TAG_REQUIRED,\n $.CAPTION,\n $.COLGROUP,\n $.TBODY,\n $.TD,\n $.TFOOT,\n $.TH,\n $.THEAD,\n $.TR,\n]);\nconst SCOPING_ELEMENTS_HTML = new Set([\n $.APPLET,\n $.CAPTION,\n $.HTML,\n $.MARQUEE,\n $.OBJECT,\n $.TABLE,\n $.TD,\n $.TEMPLATE,\n $.TH,\n]);\nconst SCOPING_ELEMENTS_HTML_LIST = new Set([...SCOPING_ELEMENTS_HTML, $.OL, $.UL]);\nconst SCOPING_ELEMENTS_HTML_BUTTON = new Set([...SCOPING_ELEMENTS_HTML, $.BUTTON]);\nconst SCOPING_ELEMENTS_MATHML = new Set([$.ANNOTATION_XML, $.MI, $.MN, $.MO, $.MS, $.MTEXT]);\nconst SCOPING_ELEMENTS_SVG = new Set([$.DESC, $.FOREIGN_OBJECT, $.TITLE]);\nconst TABLE_ROW_CONTEXT = new Set([$.TR, $.TEMPLATE, $.HTML]);\nconst TABLE_BODY_CONTEXT = new Set([$.TBODY, $.TFOOT, $.THEAD, $.TEMPLATE, $.HTML]);\nconst TABLE_CONTEXT = new Set([$.TABLE, $.TEMPLATE, $.HTML]);\nconst TABLE_CELLS = new Set([$.TD, $.TH]);\n//Stack of open elements\nexport class OpenElementStack {\n get currentTmplContentOrNode() {\n return this._isInTemplate() ? this.treeAdapter.getTemplateContent(this.current) : this.current;\n }\n constructor(document, treeAdapter, handler) {\n this.treeAdapter = treeAdapter;\n this.handler = handler;\n this.items = [];\n this.tagIDs = [];\n this.stackTop = -1;\n this.tmplCount = 0;\n this.currentTagId = $.UNKNOWN;\n this.current = document;\n }\n //Index of element\n _indexOf(element) {\n return this.items.lastIndexOf(element, this.stackTop);\n }\n //Update current element\n _isInTemplate() {\n return this.currentTagId === $.TEMPLATE && this.treeAdapter.getNamespaceURI(this.current) === NS.HTML;\n }\n _updateCurrentElement() {\n this.current = this.items[this.stackTop];\n this.currentTagId = this.tagIDs[this.stackTop];\n }\n //Mutations\n push(element, tagID) {\n this.stackTop++;\n this.items[this.stackTop] = element;\n this.current = element;\n this.tagIDs[this.stackTop] = tagID;\n this.currentTagId = tagID;\n if (this._isInTemplate()) {\n this.tmplCount++;\n }\n this.handler.onItemPush(element, tagID, true);\n }\n pop() {\n const popped = this.current;\n if (this.tmplCount > 0 && this._isInTemplate()) {\n this.tmplCount--;\n }\n this.stackTop--;\n this._updateCurrentElement();\n this.handler.onItemPop(popped, true);\n }\n replace(oldElement, newElement) {\n const idx = this._indexOf(oldElement);\n this.items[idx] = newElement;\n if (idx === this.stackTop) {\n this.current = newElement;\n }\n }\n insertAfter(referenceElement, newElement, newElementID) {\n const insertionIdx = this._indexOf(referenceElement) + 1;\n this.items.splice(insertionIdx, 0, newElement);\n this.tagIDs.splice(insertionIdx, 0, newElementID);\n this.stackTop++;\n if (insertionIdx === this.stackTop) {\n this._updateCurrentElement();\n }\n if (this.current && this.currentTagId !== undefined) {\n this.handler.onItemPush(this.current, this.currentTagId, insertionIdx === this.stackTop);\n }\n }\n popUntilTagNamePopped(tagName) {\n let targetIdx = this.stackTop + 1;\n do {\n targetIdx = this.tagIDs.lastIndexOf(tagName, targetIdx - 1);\n } while (targetIdx > 0 && this.treeAdapter.getNamespaceURI(this.items[targetIdx]) !== NS.HTML);\n this.shortenToLength(Math.max(targetIdx, 0));\n }\n shortenToLength(idx) {\n while (this.stackTop >= idx) {\n const popped = this.current;\n if (this.tmplCount > 0 && this._isInTemplate()) {\n this.tmplCount -= 1;\n }\n this.stackTop--;\n this._updateCurrentElement();\n this.handler.onItemPop(popped, this.stackTop < idx);\n }\n }\n popUntilElementPopped(element) {\n const idx = this._indexOf(element);\n this.shortenToLength(Math.max(idx, 0));\n }\n popUntilPopped(tagNames, targetNS) {\n const idx = this._indexOfTagNames(tagNames, targetNS);\n this.shortenToLength(Math.max(idx, 0));\n }\n popUntilNumberedHeaderPopped() {\n this.popUntilPopped(NUMBERED_HEADERS, NS.HTML);\n }\n popUntilTableCellPopped() {\n this.popUntilPopped(TABLE_CELLS, NS.HTML);\n }\n popAllUpToHtmlElement() {\n //NOTE: here we assume that the root <html> element is always first in the open element stack, so\n //we perform this fast stack clean up.\n this.tmplCount = 0;\n this.shortenToLength(1);\n }\n _indexOfTagNames(tagNames, namespace) {\n for (let i = this.stackTop; i >= 0; i--) {\n if (tagNames.has(this.tagIDs[i]) && this.treeAdapter.getNamespaceURI(this.items[i]) === namespace) {\n return i;\n }\n }\n return -1;\n }\n clearBackTo(tagNames, targetNS) {\n const idx = this._indexOfTagNames(tagNames, targetNS);\n this.shortenToLength(idx + 1);\n }\n clearBackToTableContext() {\n this.clearBackTo(TABLE_CONTEXT, NS.HTML);\n }\n clearBackToTableBodyContext() {\n this.clearBackTo(TABLE_BODY_CONTEXT, NS.HTML);\n }\n clearBackToTableRowContext() {\n this.clearBackTo(TABLE_ROW_CONTEXT, NS.HTML);\n }\n remove(element) {\n const idx = this._indexOf(element);\n if (idx >= 0) {\n if (idx === this.stackTop) {\n this.pop();\n }\n else {\n this.items.splice(idx, 1);\n this.tagIDs.splice(idx, 1);\n this.stackTop--;\n this._updateCurrentElement();\n this.handler.onItemPop(element, false);\n }\n }\n }\n //Search\n tryPeekProperlyNestedBodyElement() {\n //Properly nested <body> element (should be second element in stack).\n return this.stackTop >= 1 && this.tagIDs[1] === $.BODY ? this.items[1] : null;\n }\n contains(element) {\n return this._indexOf(element) > -1;\n }\n getCommonAncestor(element) {\n const elementIdx = this._indexOf(element) - 1;\n return elementIdx >= 0 ? this.items[elementIdx] : null;\n }\n isRootHtmlElementCurrent() {\n return this.stackTop === 0 && this.tagIDs[0] === $.HTML;\n }\n //Element in scope\n hasInDynamicScope(tagName, htmlScope) {\n for (let i = this.stackTop; i >= 0; i--) {\n const tn = this.tagIDs[i];\n switch (this.treeAdapter.getNamespaceURI(this.items[i])) {\n case NS.HTML: {\n if (tn === tagName)\n return true;\n if (htmlScope.has(tn))\n return false;\n break;\n }\n case NS.SVG: {\n if (SCOPING_ELEMENTS_SVG.has(tn))\n return false;\n break;\n }\n case NS.MATHML: {\n if (SCOPING_ELEMENTS_MATHML.has(tn))\n return false;\n break;\n }\n }\n }\n return true;\n }\n hasInScope(tagName) {\n return this.hasInDynamicScope(tagName, SCOPING_ELEMENTS_HTML);\n }\n hasInListItemScope(tagName) {\n return this.hasInDynamicScope(tagName, SCOPING_ELEMENTS_HTML_LIST);\n }\n hasInButtonScope(tagName) {\n return this.hasInDynamicScope(tagName, SCOPING_ELEMENTS_HTML_BUTTON);\n }\n hasNumberedHeaderInScope() {\n for (let i = this.stackTop; i >= 0; i--) {\n const tn = this.tagIDs[i];\n switch (this.treeAdapter.getNamespaceURI(this.items[i])) {\n case NS.HTML: {\n if (NUMBERED_HEADERS.has(tn))\n return true;\n if (SCOPING_ELEMENTS_HTML.has(tn))\n return false;\n break;\n }\n case NS.SVG: {\n if (SCOPING_ELEMENTS_SVG.has(tn))\n return false;\n break;\n }\n case NS.MATHML: {\n if (SCOPING_ELEMENTS_MATHML.has(tn))\n return false;\n break;\n }\n }\n }\n return true;\n }\n hasInTableScope(tagName) {\n for (let i = this.stackTop; i >= 0; i--) {\n if (this.treeAdapter.getNamespaceURI(this.items[i]) !== NS.HTML) {\n continue;\n }\n switch (this.tagIDs[i]) {\n case tagName: {\n return true;\n }\n case $.TABLE:\n case $.HTML: {\n return false;\n }\n }\n }\n return true;\n }\n hasTableBodyContextInTableScope() {\n for (let i = this.stackTop; i >= 0; i--) {\n if (this.treeAdapter.getNamespaceURI(this.items[i]) !== NS.HTML) {\n continue;\n }\n switch (this.tagIDs[i]) {\n case $.TBODY:\n case $.THEAD:\n case $.TFOOT: {\n return true;\n }\n case $.TABLE:\n case $.HTML: {\n return false;\n }\n }\n }\n return true;\n }\n hasInSelectScope(tagName) {\n for (let i = this.stackTop; i >= 0; i--) {\n if (this.treeAdapter.getNamespaceURI(this.items[i]) !== NS.HTML) {\n continue;\n }\n switch (this.tagIDs[i]) {\n case tagName: {\n return true;\n }\n case $.OPTION:\n case $.OPTGROUP: {\n break;\n }\n default: {\n return false;\n }\n }\n }\n return true;\n }\n //Implied end tags\n generateImpliedEndTags() {\n while (this.currentTagId !== undefined && IMPLICIT_END_TAG_REQUIRED.has(this.currentTagId)) {\n this.pop();\n }\n }\n generateImpliedEndTagsThoroughly() {\n while (this.currentTagId !== undefined && IMPLICIT_END_TAG_REQUIRED_THOROUGHLY.has(this.currentTagId)) {\n this.pop();\n }\n }\n generateImpliedEndTagsWithExclusion(exclusionId) {\n while (this.currentTagId !== undefined &&\n this.currentTagId !== exclusionId &&\n IMPLICIT_END_TAG_REQUIRED_THOROUGHLY.has(this.currentTagId)) {\n this.pop();\n }\n }\n}\n","//Const\nconst NOAH_ARK_CAPACITY = 3;\nexport var EntryType;\n(function (EntryType) {\n EntryType[EntryType[\"Marker\"] = 0] = \"Marker\";\n EntryType[EntryType[\"Element\"] = 1] = \"Element\";\n})(EntryType || (EntryType = {}));\nconst MARKER = { type: EntryType.Marker };\n//List of formatting elements\nexport class FormattingElementList {\n constructor(treeAdapter) {\n this.treeAdapter = treeAdapter;\n this.entries = [];\n this.bookmark = null;\n }\n //Noah Ark's condition\n //OPTIMIZATION: at first we try to find possible candidates for exclusion using\n //lightweight heuristics without thorough attributes check.\n _getNoahArkConditionCandidates(newElement, neAttrs) {\n const candidates = [];\n const neAttrsLength = neAttrs.length;\n const neTagName = this.treeAdapter.getTagName(newElement);\n const neNamespaceURI = this.treeAdapter.getNamespaceURI(newElement);\n for (let i = 0; i < this.entries.length; i++) {\n const entry = this.entries[i];\n if (entry.type === EntryType.Marker) {\n break;\n }\n const { element } = entry;\n if (this.treeAdapter.getTagName(element) === neTagName &&\n this.treeAdapter.getNamespaceURI(element) === neNamespaceURI) {\n const elementAttrs = this.treeAdapter.getAttrList(element);\n if (elementAttrs.length === neAttrsLength) {\n candidates.push({ idx: i, attrs: elementAttrs });\n }\n }\n }\n return candidates;\n }\n _ensureNoahArkCondition(newElement) {\n if (this.entries.length < NOAH_ARK_CAPACITY)\n return;\n const neAttrs = this.treeAdapter.getAttrList(newElement);\n const candidates = this._getNoahArkConditionCandidates(newElement, neAttrs);\n if (candidates.length < NOAH_ARK_CAPACITY)\n return;\n //NOTE: build attrs map for the new element, so we can perform fast lookups\n const neAttrsMap = new Map(neAttrs.map((neAttr) => [neAttr.name, neAttr.value]));\n let validCandidates = 0;\n //NOTE: remove bottommost candidates, until Noah's Ark condition will not be met\n for (let i = 0; i < candidates.length; i++) {\n const candidate = candidates[i];\n // We know that `candidate.attrs.length === neAttrs.length`\n if (candidate.attrs.every((cAttr) => neAttrsMap.get(cAttr.name) === cAttr.value)) {\n validCandidates += 1;\n if (validCandidates >= NOAH_ARK_CAPACITY) {\n this.entries.splice(candidate.idx, 1);\n }\n }\n }\n }\n //Mutations\n insertMarker() {\n this.entries.unshift(MARKER);\n }\n pushElement(element, token) {\n this._ensureNoahArkCondition(element);\n this.entries.unshift({\n type: EntryType.Element,\n element,\n token,\n });\n }\n insertElementAfterBookmark(element, token) {\n const bookmarkIdx = this.entries.indexOf(this.bookmark);\n this.entries.splice(bookmarkIdx, 0, {\n type: EntryType.Element,\n element,\n token,\n });\n }\n removeEntry(entry) {\n const entryIndex = this.entries.indexOf(entry);\n if (entryIndex !== -1) {\n this.entries.splice(entryIndex, 1);\n }\n }\n /**\n * Clears the list of formatting elements up to the last marker.\n *\n * @see https://html.spec.whatwg.org/multipage/parsing.html#clear-the-list-of-active-formatting-elements-up-to-the-last-marker\n */\n clearToLastMarker() {\n const markerIdx = this.entries.indexOf(MARKER);\n if (markerIdx === -1) {\n this.entries.length = 0;\n }\n else {\n this.entries.splice(0, markerIdx + 1);\n }\n }\n //Search\n getElementEntryInScopeWithTagName(tagName) {\n const entry = this.entries.find((entry) => entry.type === EntryType.Marker || this.treeAdapter.getTagName(entry.element) === tagName);\n return entry && entry.type === EntryType.Element ? entry : null;\n }\n getElementEntry(element) {\n return this.entries.find((entry) => entry.type === EntryType.Element && entry.element === element);\n }\n}\n","import { DOCUMENT_MODE } from '../common/html.js';\nexport const defaultTreeAdapter = {\n //Node construction\n createDocument() {\n return {\n nodeName: '#document',\n mode: DOCUMENT_MODE.NO_QUIRKS,\n childNodes: [],\n };\n },\n createDocumentFragment() {\n return {\n nodeName: '#document-fragment',\n childNodes: [],\n };\n },\n createElement(tagName, namespaceURI, attrs) {\n return {\n nodeName: tagName,\n tagName,\n attrs,\n namespaceURI,\n childNodes: [],\n parentNode: null,\n };\n },\n createCommentNode(data) {\n return {\n nodeName: '#comment',\n data,\n parentNode: null,\n };\n },\n createTextNode(value) {\n return {\n nodeName: '#text',\n value,\n parentNode: null,\n };\n },\n //Tree mutation\n appendChild(parentNode, newNode) {\n parentNode.childNodes.push(newNode);\n newNode.parentNode = parentNode;\n },\n insertBefore(parentNode, newNode, referenceNode) {\n const insertionIdx = parentNode.childNodes.indexOf(referenceNode);\n parentNode.childNodes.splice(insertionIdx, 0, newNode);\n newNode.parentNode = parentNode;\n },\n setTemplateContent(templateElement, contentElement) {\n templateElement.content = contentElement;\n },\n getTemplateContent(templateElement) {\n return templateElement.content;\n },\n setDocumentType(document, name, publicId, systemId) {\n const doctypeNode = document.childNodes.find((node) => node.nodeName === '#documentType');\n if (doctypeNode) {\n doctypeNode.name = name;\n doctypeNode.publicId = publicId;\n doctypeNode.systemId = systemId;\n }\n else {\n const node = {\n nodeName: '#documentType',\n name,\n publicId,\n systemId,\n parentNode: null,\n };\n defaultTreeAdapter.appendChild(document, node);\n }\n },\n setDocumentMode(document, mode) {\n document.mode = mode;\n },\n getDocumentMode(document) {\n return document.mode;\n },\n detachNode(node) {\n if (node.parentNode) {\n const idx = node.parentNode.childNodes.indexOf(node);\n node.parentNode.childNodes.splice(idx, 1);\n node.parentNode = null;\n }\n },\n insertText(parentNode, text) {\n if (parentNode.childNodes.length > 0) {\n const prevNode = parentNode.childNodes[parentNode.childNodes.length - 1];\n if (defaultTreeAdapter.isTextNode(prevNode)) {\n prevNode.value += text;\n return;\n }\n }\n defaultTreeAdapter.appendChild(parentNode, defaultTreeAdapter.createTextNode(text));\n },\n insertTextBefore(parentNode, text, referenceNode) {\n const prevNode = parentNode.childNodes[parentNode.childNodes.indexOf(referenceNode) - 1];\n if (prevNode && defaultTreeAdapter.isTextNode(prevNode)) {\n prevNode.value += text;\n }\n else {\n defaultTreeAdapter.insertBefore(parentNode, defaultTreeAdapter.createTextNode(text), referenceNode);\n }\n },\n adoptAttributes(recipient, attrs) {\n const recipientAttrsMap = new Set(recipient.attrs.map((attr) => attr.name));\n for (let j = 0; j < attrs.length; j++) {\n if (!recipientAttrsMap.has(attrs[j].name)) {\n recipient.attrs.push(attrs[j]);\n }\n }\n },\n //Tree traversing\n getFirstChild(node) {\n return node.childNodes[0];\n },\n getChildNodes(node) {\n return node.childNodes;\n },\n getParentNode(node) {\n return node.parentNode;\n },\n getAttrList(element) {\n return element.attrs;\n },\n //Node data\n getTagName(element) {\n return element.tagName;\n },\n getNamespaceURI(element) {\n return element.namespaceURI;\n },\n getTextNodeContent(textNode) {\n return textNode.value;\n },\n getCommentNodeContent(commentNode) {\n return commentNode.data;\n },\n getDocumentTypeNodeName(doctypeNode) {\n return doctypeNode.name;\n },\n getDocumentTypeNodePublicId(doctypeNode) {\n return doctypeNode.publicId;\n },\n getDocumentTypeNodeSystemId(doctypeNode) {\n return doctypeNode.systemId;\n },\n //Node types\n isTextNode(node) {\n return node.nodeName === '#text';\n },\n isCommentNode(node) {\n return node.nodeName === '#comment';\n },\n isDocumentTypeNode(node) {\n return node.nodeName === '#documentType';\n },\n isElementNode(node) {\n return Object.prototype.hasOwnProperty.call(node, 'tagName');\n },\n // Source code location\n setNodeSourceCodeLocation(node, location) {\n node.sourceCodeLocation = location;\n },\n getNodeSourceCodeLocation(node) {\n return node.sourceCodeLocation;\n },\n updateNodeSourceCodeLocation(node, endLocation) {\n node.sourceCodeLocation = { ...node.sourceCodeLocation, ...endLocation };\n },\n};\n","import { DOCUMENT_MODE } from './html.js';\n//Const\nconst VALID_DOCTYPE_NAME = 'html';\nconst VALID_SYSTEM_ID = 'about:legacy-compat';\nconst QUIRKS_MODE_SYSTEM_ID = 'http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd';\nconst QUIRKS_MODE_PUBLIC_ID_PREFIXES = [\n '+//silmaril//dtd html pro v0r11 19970101//',\n '-//as//dtd html 3.0 aswedit + extensions//',\n '-//advasoft ltd//dtd html 3.0 aswedit + extensions//',\n '-//ietf//dtd html 2.0 level 1//',\n '-//ietf//dtd html 2.0 level 2//',\n '-//ietf//dtd html 2.0 strict level 1//',\n '-//ietf//dtd html 2.0 strict level 2//',\n '-//ietf//dtd html 2.0 strict//',\n '-//ietf//dtd html 2.0//',\n '-//ietf//dtd html 2.1e//',\n '-//ietf//dtd html 3.0//',\n '-//ietf//dtd html 3.2 final//',\n '-//ietf//dtd html 3.2//',\n '-//ietf//dtd html 3//',\n '-//ietf//dtd html level 0//',\n '-//ietf//dtd html level 1//',\n '-//ietf//dtd html level 2//',\n '-//ietf//dtd html level 3//',\n '-//ietf//dtd html strict level 0//',\n '-//ietf//dtd html strict level 1//',\n '-//ietf//dtd html strict level 2//',\n '-//ietf//dtd html strict level 3//',\n '-//ietf//dtd html strict//',\n '-//ietf//dtd html//',\n '-//metrius//dtd metrius presentational//',\n '-//microsoft//dtd internet explorer 2.0 html strict//',\n '-//microsoft//dtd internet explorer 2.0 html//',\n '-//microsoft//dtd internet explorer 2.0 tables//',\n '-//microsoft//dtd internet explorer 3.0 html strict//',\n '-//microsoft//dtd internet explorer 3.0 html//',\n '-//microsoft//dtd internet explorer 3.0 tables//',\n '-//netscape comm. corp.//dtd html//',\n '-//netscape comm. corp.//dtd strict html//',\n \"-//o'reilly and associates//dtd html 2.0//\",\n \"-//o'reilly and associates//dtd html extended 1.0//\",\n \"-//o'reilly and associates//dtd html extended relaxed 1.0//\",\n '-//sq//dtd html 2.0 hotmetal + extensions//',\n '-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//',\n '-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//',\n '-//spyglass//dtd html 2.0 extended//',\n '-//sun microsystems corp.//dtd hotjava html//',\n '-//sun microsystems corp.//dtd hotjava strict html//',\n '-//w3c//dtd html 3 1995-03-24//',\n '-//w3c//dtd html 3.2 draft//',\n '-//w3c//dtd html 3.2 final//',\n '-//w3c//dtd html 3.2//',\n '-//w3c//dtd html 3.2s draft//',\n '-//w3c//dtd html 4.0 frameset//',\n '-//w3c//dtd html 4.0 transitional//',\n '-//w3c//dtd html experimental 19960712//',\n '-//w3c//dtd html experimental 970421//',\n '-//w3c//dtd w3 html//',\n '-//w3o//dtd w3 html 3.0//',\n '-//webtechs//dtd mozilla html 2.0//',\n '-//webtechs//dtd mozilla html//',\n];\nconst QUIRKS_MODE_NO_SYSTEM_ID_PUBLIC_ID_PREFIXES = [\n ...QUIRKS_MODE_PUBLIC_ID_PREFIXES,\n '-//w3c//dtd html 4.01 frameset//',\n '-//w3c//dtd html 4.01 transitional//',\n];\nconst QUIRKS_MODE_PUBLIC_IDS = new Set([\n '-//w3o//dtd w3 html strict 3.0//en//',\n '-/w3c/dtd html 4.0 transitional/en',\n 'html',\n]);\nconst LIMITED_QUIRKS_PUBLIC_ID_PREFIXES = ['-//w3c//dtd xhtml 1.0 frameset//', '-//w3c//dtd xhtml 1.0 transitional//'];\nconst LIMITED_QUIRKS_WITH_SYSTEM_ID_PUBLIC_ID_PREFIXES = [\n ...LIMITED_QUIRKS_PUBLIC_ID_PREFIXES,\n '-//w3c//dtd html 4.01 frameset//',\n '-//w3c//dtd html 4.01 transitional//',\n];\n//Utils\nfunction hasPrefix(publicId, prefixes) {\n return prefixes.some((prefix) => publicId.startsWith(prefix));\n}\n//API\nexport function isConforming(token) {\n return (token.name === VALID_DOCTYPE_NAME &&\n token.publicId === null &&\n (token.systemId === null || token.systemId === VALID_SYSTEM_ID));\n}\nexport function getDocumentMode(token) {\n if (token.name !== VALID_DOCTYPE_NAME) {\n return DOCUMENT_MODE.QUIRKS;\n }\n const { systemId } = token;\n if (systemId && systemId.toLowerCase() === QUIRKS_MODE_SYSTEM_ID) {\n return DOCUMENT_MODE.QUIRKS;\n }\n let { publicId } = token;\n if (publicId !== null) {\n publicId = publicId.toLowerCase();\n if (QUIRKS_MODE_PUBLIC_IDS.has(publicId)) {\n return DOCUMENT_MODE.QUIRKS;\n }\n let prefixes = systemId === null ? QUIRKS_MODE_NO_SYSTEM_ID_PUBLIC_ID_PREFIXES : QUIRKS_MODE_PUBLIC_ID_PREFIXES;\n if (hasPrefix(publicId, prefixes)) {\n return DOCUMENT_MODE.QUIRKS;\n }\n prefixes =\n systemId === null ? LIMITED_QUIRKS_PUBLIC_ID_PREFIXES : LIMITED_QUIRKS_WITH_SYSTEM_ID_PUBLIC_ID_PREFIXES;\n if (hasPrefix(publicId, prefixes)) {\n return DOCUMENT_MODE.LIMITED_QUIRKS;\n }\n }\n return DOCUMENT_MODE.NO_QUIRKS;\n}\n","import { TAG_ID as $, NS, ATTRS, getTagID } from './html.js';\n//MIME types\nconst MIME_TYPES = {\n TEXT_HTML: 'text/html',\n APPLICATION_XML: 'application/xhtml+xml',\n};\n//Attributes\nconst DEFINITION_URL_ATTR = 'definitionurl';\nconst ADJUSTED_DEFINITION_URL_ATTR = 'definitionURL';\nconst SVG_ATTRS_ADJUSTMENT_MAP = new Map([\n 'attributeName',\n 'attributeType',\n 'baseFrequency',\n 'baseProfile',\n 'calcMode',\n 'clipPathUnits',\n 'diffuseConstant',\n 'edgeMode',\n 'filterUnits',\n 'glyphRef',\n 'gradientTransform',\n 'gradientUnits',\n 'kernelMatrix',\n 'kernelUnitLength',\n 'keyPoints',\n 'keySplines',\n 'keyTimes',\n 'lengthAdjust',\n 'limitingConeAngle',\n 'markerHeight',\n 'markerUnits',\n 'markerWidth',\n 'maskContentUnits',\n 'maskUnits',\n 'numOctaves',\n 'pathLength',\n 'patternContentUnits',\n 'patternTransform',\n 'patternUnits',\n 'pointsAtX',\n 'pointsAtY',\n 'pointsAtZ',\n 'preserveAlpha',\n 'preserveAspectRatio',\n 'primitiveUnits',\n 'refX',\n 'refY',\n 'repeatCount',\n 'repeatDur',\n 'requiredExtensions',\n 'requiredFeatures',\n 'specularConstant',\n 'specularExponent',\n 'spreadMethod',\n 'startOffset',\n 'stdDeviation',\n 'stitchTiles',\n 'surfaceScale',\n 'systemLanguage',\n 'tableValues',\n 'targetX',\n 'targetY',\n 'textLength',\n 'viewBox',\n 'viewTarget',\n 'xChannelSelector',\n 'yChannelSelector',\n 'zoomAndPan',\n].map((attr) => [attr.toLowerCase(), attr]));\nconst XML_ATTRS_ADJUSTMENT_MAP = new Map([\n ['xlink:actuate', { prefix: 'xlink', name: 'actuate', namespace: NS.XLINK }],\n ['xlink:arcrole', { prefix: 'xlink', name: 'arcrole', namespace: NS.XLINK }],\n ['xlink:href', { prefix: 'xlink', name: 'href', namespace: NS.XLINK }],\n ['xlink:role', { prefix: 'xlink', name: 'role', namespace: NS.XLINK }],\n ['xlink:show', { prefix: 'xlink', name: 'show', namespace: NS.XLINK }],\n ['xlink:title', { prefix: 'xlink', name: 'title', namespace: NS.XLINK }],\n ['xlink:type', { prefix: 'xlink', name: 'type', namespace: NS.XLINK }],\n ['xml:lang', { prefix: 'xml', name: 'lang', namespace: NS.XML }],\n ['xml:space', { prefix: 'xml', name: 'space', namespace: NS.XML }],\n ['xmlns', { prefix: '', name: 'xmlns', namespace: NS.XMLNS }],\n ['xmlns:xlink', { prefix: 'xmlns', name: 'xlink', namespace: NS.XMLNS }],\n]);\n//SVG tag names adjustment map\nexport const SVG_TAG_NAMES_ADJUSTMENT_MAP = new Map([\n 'altGlyph',\n 'altGlyphDef',\n 'altGlyphItem',\n 'animateColor',\n 'animateMotion',\n 'animateTransform',\n 'clipPath',\n 'feBlend',\n 'feColorMatrix',\n 'feComponentTransfer',\n 'feComposite',\n 'feConvolveMatrix',\n 'feDiffuseLighting',\n 'feDisplacementMap',\n 'feDistantLight',\n 'feFlood',\n 'feFuncA',\n 'feFuncB',\n 'feFuncG',\n 'feFuncR',\n 'feGaussianBlur',\n 'feImage',\n 'feMerge',\n 'feMergeNode',\n 'feMorphology',\n 'feOffset',\n 'fePointLight',\n 'feSpecularLighting',\n 'feSpotLight',\n 'feTile',\n 'feTurbulence',\n 'foreignObject',\n 'glyphRef',\n 'linearGradient',\n 'radialGradient',\n 'textPath',\n].map((tn) => [tn.toLowerCase(), tn]));\n//Tags that causes exit from foreign content\nconst EXITS_FOREIGN_CONTENT = new Set([\n $.B,\n $.BIG,\n $.BLOCKQUOTE,\n $.BODY,\n $.BR,\n $.CENTER,\n $.CODE,\n $.DD,\n $.DIV,\n $.DL,\n $.DT,\n $.EM,\n $.EMBED,\n $.H1,\n $.H2,\n $.H3,\n $.H4,\n $.H5,\n $.H6,\n $.HEAD,\n $.HR,\n $.I,\n $.IMG,\n $.LI,\n $.LISTING,\n $.MENU,\n $.META,\n $.NOBR,\n $.OL,\n $.P,\n $.PRE,\n $.RUBY,\n $.S,\n $.SMALL,\n $.SPAN,\n $.STRONG,\n $.STRIKE,\n $.SUB,\n $.SUP,\n $.TABLE,\n $.TT,\n $.U,\n $.UL,\n $.VAR,\n]);\n//Check exit from foreign content\nexport function causesExit(startTagToken) {\n const tn = startTagToken.tagID;\n const isFontWithAttrs = tn === $.FONT &&\n startTagToken.attrs.some(({ name }) => name === ATTRS.COLOR || name === ATTRS.SIZE || name === ATTRS.FACE);\n return isFontWithAttrs || EXITS_FOREIGN_CONTENT.has(tn);\n}\n//Token adjustments\nexport function adjustTokenMathMLAttrs(token) {\n for (let i = 0; i < token.attrs.length; i++) {\n if (token.attrs[i].name === DEFINITION_URL_ATTR) {\n token.attrs[i].name = ADJUSTED_DEFINITION_URL_ATTR;\n break;\n }\n }\n}\nexport function adjustTokenSVGAttrs(token) {\n for (let i = 0; i < token.attrs.length; i++) {\n const adjustedAttrName = SVG_ATTRS_ADJUSTMENT_MAP.get(token.attrs[i].name);\n if (adjustedAttrName != null) {\n token.attrs[i].name = adjustedAttrName;\n }\n }\n}\nexport function adjustTokenXMLAttrs(token) {\n for (let i = 0; i < token.attrs.length; i++) {\n const adjustedAttrEntry = XML_ATTRS_ADJUSTMENT_MAP.get(token.attrs[i].name);\n if (adjustedAttrEntry) {\n token.attrs[i].prefix = adjustedAttrEntry.prefix;\n token.attrs[i].name = adjustedAttrEntry.name;\n token.attrs[i].namespace = adjustedAttrEntry.namespace;\n }\n }\n}\nexport function adjustTokenSVGTagName(token) {\n const adjustedTagName = SVG_TAG_NAMES_ADJUSTMENT_MAP.get(token.tagName);\n if (adjustedTagName != null) {\n token.tagName = adjustedTagName;\n token.tagID = getTagID(token.tagName);\n }\n}\n//Integration points\nfunction isMathMLTextIntegrationPoint(tn, ns) {\n return ns === NS.MATHML && (tn === $.MI || tn === $.MO || tn === $.MN || tn === $.MS || tn === $.MTEXT);\n}\nfunction isHtmlIntegrationPoint(tn, ns, attrs) {\n if (ns === NS.MATHML && tn === $.ANNOTATION_XML) {\n for (let i = 0; i < attrs.length; i++) {\n if (attrs[i].name === ATTRS.ENCODING) {\n const value = attrs[i].value.toLowerCase();\n return value === MIME_TYPES.TEXT_HTML || value === MIME_TYPES.APPLICATION_XML;\n }\n }\n }\n return ns === NS.SVG && (tn === $.FOREIGN_OBJECT || tn === $.DESC || tn === $.TITLE);\n}\nexport function isIntegrationPoint(tn, ns, attrs, foreignNS) {\n return (((!foreignNS || foreignNS === NS.HTML) && isHtmlIntegrationPoint(tn, ns, attrs)) ||\n ((!foreignNS || foreignNS === NS.MATHML) && isMathMLTextIntegrationPoint(tn, ns)));\n}\n","import { Tokenizer, TokenizerMode } from '../tokenizer/index.js';\nimport { OpenElementStack } from './open-element-stack.js';\nimport { FormattingElementList, EntryType } from './formatting-element-list.js';\nimport { defaultTreeAdapter } from '../tree-adapters/default.js';\nimport * as doctype from '../common/doctype.js';\nimport * as foreignContent from '../common/foreign-content.js';\nimport { ERR } from '../common/error-codes.js';\nimport * as unicode from '../common/unicode.js';\nimport { TAG_ID as $, TAG_NAMES as TN, NS, ATTRS, SPECIAL_ELEMENTS, DOCUMENT_MODE, NUMBERED_HEADERS, getTagID, } from '../common/html.js';\nimport { TokenType, getTokenAttr, } from '../common/token.js';\n//Misc constants\nconst HIDDEN_INPUT_TYPE = 'hidden';\n//Adoption agency loops iteration count\nconst AA_OUTER_LOOP_ITER = 8;\nconst AA_INNER_LOOP_ITER = 3;\n//Insertion modes\nvar InsertionMode;\n(function (InsertionMode) {\n InsertionMode[InsertionMode[\"INITIAL\"] = 0] = \"INITIAL\";\n InsertionMode[InsertionMode[\"BEFORE_HTML\"] = 1] = \"BEFORE_HTML\";\n InsertionMode[InsertionMode[\"BEFORE_HEAD\"] = 2] = \"BEFORE_HEAD\";\n InsertionMode[InsertionMode[\"IN_HEAD\"] = 3] = \"IN_HEAD\";\n InsertionMode[InsertionMode[\"IN_HEAD_NO_SCRIPT\"] = 4] = \"IN_HEAD_NO_SCRIPT\";\n InsertionMode[InsertionMode[\"AFTER_HEAD\"] = 5] = \"AFTER_HEAD\";\n InsertionMode[InsertionMode[\"IN_BODY\"] = 6] = \"IN_BODY\";\n InsertionMode[InsertionMode[\"TEXT\"] = 7] = \"TEXT\";\n InsertionMode[InsertionMode[\"IN_TABLE\"] = 8] = \"IN_TABLE\";\n InsertionMode[InsertionMode[\"IN_TABLE_TEXT\"] = 9] = \"IN_TABLE_TEXT\";\n InsertionMode[InsertionMode[\"IN_CAPTION\"] = 10] = \"IN_CAPTION\";\n InsertionMode[InsertionMode[\"IN_COLUMN_GROUP\"] = 11] = \"IN_COLUMN_GROUP\";\n InsertionMode[InsertionMode[\"IN_TABLE_BODY\"] = 12] = \"IN_TABLE_BODY\";\n InsertionMode[InsertionMode[\"IN_ROW\"] = 13] = \"IN_ROW\";\n InsertionMode[InsertionMode[\"IN_CELL\"] = 14] = \"IN_CELL\";\n InsertionMode[InsertionMode[\"IN_SELECT\"] = 15] = \"IN_SELECT\";\n InsertionMode[InsertionMode[\"IN_SELECT_IN_TABLE\"] = 16] = \"IN_SELECT_IN_TABLE\";\n InsertionMode[InsertionMode[\"IN_TEMPLATE\"] = 17] = \"IN_TEMPLATE\";\n InsertionMode[InsertionMode[\"AFTER_BODY\"] = 18] = \"AFTER_BODY\";\n InsertionMode[InsertionMode[\"IN_FRAMESET\"] = 19] = \"IN_FRAMESET\";\n InsertionMode[InsertionMode[\"AFTER_FRAMESET\"] = 20] = \"AFTER_FRAMESET\";\n InsertionMode[InsertionMode[\"AFTER_AFTER_BODY\"] = 21] = \"AFTER_AFTER_BODY\";\n InsertionMode[InsertionMode[\"AFTER_AFTER_FRAMESET\"] = 22] = \"AFTER_AFTER_FRAMESET\";\n})(InsertionMode || (InsertionMode = {}));\nconst BASE_LOC = {\n startLine: -1,\n startCol: -1,\n startOffset: -1,\n endLine: -1,\n endCol: -1,\n endOffset: -1,\n};\nconst TABLE_STRUCTURE_TAGS = new Set([$.TABLE, $.TBODY, $.TFOOT, $.THEAD, $.TR]);\nconst defaultParserOptions = {\n scriptingEnabled: true,\n sourceCodeLocationInfo: false,\n treeAdapter: defaultTreeAdapter,\n onParseError: null,\n};\n//Parser\nexport class Parser {\n constructor(options, document, \n /** @internal */\n fragmentContext = null, \n /** @internal */\n scriptHandler = null) {\n this.fragmentContext = fragmentContext;\n this.scriptHandler = scriptHandler;\n this.currentToken = null;\n this.stopped = false;\n /** @internal */\n this.insertionMode = InsertionMode.INITIAL;\n /** @internal */\n this.originalInsertionMode = InsertionMode.INITIAL;\n /** @internal */\n this.headElement = null;\n /** @internal */\n this.formElement = null;\n /** Indicates that the current node is not an element in the HTML namespace */\n this.currentNotInHTML = false;\n /**\n * The template insertion mode stack is maintained from the left.\n * Ie. the topmost element will always have index 0.\n *\n * @internal\n */\n this.tmplInsertionModeStack = [];\n /** @internal */\n this.pendingCharacterTokens = [];\n /** @internal */\n this.hasNonWhitespacePendingCharacterToken = false;\n /** @internal */\n this.framesetOk = true;\n /** @internal */\n this.skipNextNewLine = false;\n /** @internal */\n this.fosterParentingEnabled = false;\n this.options = {\n ...defaultParserOptions,\n ...options,\n };\n this.treeAdapter = this.options.treeAdapter;\n this.onParseError = this.options.onParseError;\n // Always enable location info if we report parse errors.\n if (this.onParseError) {\n this.options.sourceCodeLocationInfo = true;\n }\n this.document = document !== null && document !== void 0 ? document : this.treeAdapter.createDocument();\n this.tokenizer = new Tokenizer(this.options, this);\n this.activeFormattingElements = new FormattingElementList(this.treeAdapter);\n this.fragmentContextID = fragmentContext ? getTagID(this.treeAdapter.getTagName(fragmentContext)) : $.UNKNOWN;\n this._setContextModes(fragmentContext !== null && fragmentContext !== void 0 ? fragmentContext : this.document, this.fragmentContextID);\n this.openElements = new OpenElementStack(this.document, this.treeAdapter, this);\n }\n // API\n static parse(html, options) {\n const parser = new this(options);\n parser.tokenizer.write(html, true);\n return parser.document;\n }\n static getFragmentParser(fragmentContext, options) {\n const opts = {\n ...defaultParserOptions,\n ...options,\n };\n //NOTE: use a <template> element as the fragment context if no context element was provided,\n //so we will parse in a \"forgiving\" manner\n fragmentContext !== null && fragmentContext !== void 0 ? fragmentContext : (fragmentContext = opts.treeAdapter.createElement(TN.TEMPLATE, NS.HTML, []));\n //NOTE: create a fake element which will be used as the `document` for fragment parsing.\n //This is important for jsdom, where a new `document` cannot be created. This led to\n //fragment parsing messing with the main `document`.\n const documentMock = opts.treeAdapter.createElement('documentmock', NS.HTML, []);\n const parser = new this(opts, documentMock, fragmentContext);\n if (parser.fragmentContextID === $.TEMPLATE) {\n parser.tmplInsertionModeStack.unshift(InsertionMode.IN_TEMPLATE);\n }\n parser._initTokenizerForFragmentParsing();\n parser._insertFakeRootElement();\n parser._resetInsertionMode();\n parser._findFormInFragmentContext();\n return parser;\n }\n getFragment() {\n const rootElement = this.treeAdapter.getFirstChild(this.document);\n const fragment = this.treeAdapter.createDocumentFragment();\n this._adoptNodes(rootElement, fragment);\n return fragment;\n }\n //Errors\n /** @internal */\n _err(token, code, beforeToken) {\n var _a;\n if (!this.onParseError)\n return;\n const loc = (_a = token.location) !== null && _a !== void 0 ? _a : BASE_LOC;\n const err = {\n code,\n startLine: loc.startLine,\n startCol: loc.startCol,\n startOffset: loc.startOffset,\n endLine: beforeToken ? loc.startLine : loc.endLine,\n endCol: beforeToken ? loc.startCol : loc.endCol,\n endOffset: beforeToken ? loc.startOffset : loc.endOffset,\n };\n this.onParseError(err);\n }\n //Stack events\n /** @internal */\n onItemPush(node, tid, isTop) {\n var _a, _b;\n (_b = (_a = this.treeAdapter).onItemPush) === null || _b === void 0 ? void 0 : _b.call(_a, node);\n if (isTop && this.openElements.stackTop > 0)\n this._setContextModes(node, tid);\n }\n /** @internal */\n onItemPop(node, isTop) {\n var _a, _b;\n if (this.options.sourceCodeLocationInfo) {\n this._setEndLocation(node, this.currentToken);\n }\n (_b = (_a = this.treeAdapter).onItemPop) === null || _b === void 0 ? void 0 : _b.call(_a, node, this.openElements.current);\n if (isTop) {\n let current;\n let currentTagId;\n if (this.openElements.stackTop === 0 && this.fragmentContext) {\n current = this.fragmentContext;\n currentTagId = this.fragmentContextID;\n }\n else {\n ({ current, currentTagId } = this.openElements);\n }\n this._setContextModes(current, currentTagId);\n }\n }\n _setContextModes(current, tid) {\n const isHTML = current === this.document || (current && this.treeAdapter.getNamespaceURI(current) === NS.HTML);\n this.currentNotInHTML = !isHTML;\n this.tokenizer.inForeignNode =\n !isHTML && current !== undefined && tid !== undefined && !this._isIntegrationPoint(tid, current);\n }\n /** @protected */\n _switchToTextParsing(currentToken, nextTokenizerState) {\n this._insertElement(currentToken, NS.HTML);\n this.tokenizer.state = nextTokenizerState;\n this.originalInsertionMode = this.insertionMode;\n this.insertionMode = InsertionMode.TEXT;\n }\n switchToPlaintextParsing() {\n this.insertionMode = InsertionMode.TEXT;\n this.originalInsertionMode = InsertionMode.IN_BODY;\n this.tokenizer.state = TokenizerMode.PLAINTEXT;\n }\n //Fragment parsing\n /** @protected */\n _getAdjustedCurrentElement() {\n return this.openElements.stackTop === 0 && this.fragmentContext\n ? this.fragmentContext\n : this.openElements.current;\n }\n /** @protected */\n _findFormInFragmentContext() {\n let node = this.fragmentContext;\n while (node) {\n if (this.treeAdapter.getTagName(node) === TN.FORM) {\n this.formElement = node;\n break;\n }\n node = this.treeAdapter.getParentNode(node);\n }\n }\n _initTokenizerForFragmentParsing() {\n if (!this.fragmentContext || this.treeAdapter.getNamespaceURI(this.fragmentContext) !== NS.HTML) {\n return;\n }\n switch (this.fragmentContextID) {\n case $.TITLE:\n case $.TEXTAREA: {\n this.tokenizer.state = TokenizerMode.RCDATA;\n break;\n }\n case $.STYLE:\n case $.XMP:\n case $.IFRAME:\n case $.NOEMBED:\n case $.NOFRAMES:\n case $.NOSCRIPT: {\n this.tokenizer.state = TokenizerMode.RAWTEXT;\n break;\n }\n case $.SCRIPT: {\n this.tokenizer.state = TokenizerMode.SCRIPT_DATA;\n break;\n }\n case $.PLAINTEXT: {\n this.tokenizer.state = TokenizerMode.PLAINTEXT;\n break;\n }\n default:\n // Do nothing\n }\n }\n //Tree mutation\n /** @protected */\n _setDocumentType(token) {\n const name = token.name || '';\n const publicId = token.publicId || '';\n const systemId = token.systemId || '';\n this.treeAdapter.setDocumentType(this.document, name, publicId, systemId);\n if (token.location) {\n const documentChildren = this.treeAdapter.getChildNodes(this.document);\n const docTypeNode = documentChildren.find((node) => this.treeAdapter.isDocumentTypeNode(node));\n if (docTypeNode) {\n this.treeAdapter.setNodeSourceCodeLocation(docTypeNode, token.location);\n }\n }\n }\n /** @protected */\n _attachElementToTree(element, location) {\n if (this.options.sourceCodeLocationInfo) {\n const loc = location && {\n ...location,\n startTag: location,\n };\n this.treeAdapter.setNodeSourceCodeLocation(element, loc);\n }\n if (this._shouldFosterParentOnInsertion()) {\n this._fosterParentElement(element);\n }\n else {\n const parent = this.openElements.currentTmplContentOrNode;\n this.treeAdapter.appendChild(parent !== null && parent !== void 0 ? parent : this.document, element);\n }\n }\n /**\n * For self-closing tags. Add an element to the tree, but skip adding it\n * to the stack.\n */\n /** @protected */\n _appendElement(token, namespaceURI) {\n const element = this.treeAdapter.createElement(token.tagName, namespaceURI, token.attrs);\n this._attachElementToTree(element, token.location);\n }\n /** @protected */\n _insertElement(token, namespaceURI) {\n const element = this.treeAdapter.createElement(token.tagName, namespaceURI, token.attrs);\n this._attachElementToTree(element, token.location);\n this.openElements.push(element, token.tagID);\n }\n /** @protected */\n _insertFakeElement(tagName, tagID) {\n const element = this.treeAdapter.createElement(tagName, NS.HTML, []);\n this._attachElementToTree(element, null);\n this.openElements.push(element, tagID);\n }\n /** @protected */\n _insertTemplate(token) {\n const tmpl = this.treeAdapter.createElement(token.tagName, NS.HTML, token.attrs);\n const content = this.treeAdapter.createDocumentFragment();\n this.treeAdapter.setTemplateContent(tmpl, content);\n this._attachElementToTree(tmpl, token.location);\n this.openElements.push(tmpl, token.tagID);\n if (this.options.sourceCodeLocationInfo)\n this.treeAdapter.setNodeSourceCodeLocation(content, null);\n }\n /** @protected */\n _insertFakeRootElement() {\n const element = this.treeAdapter.createElement(TN.HTML, NS.HTML, []);\n if (this.options.sourceCodeLocationInfo)\n this.treeAdapter.setNodeSourceCodeLocation(element, null);\n this.treeAdapter.appendChild(this.openElements.current, element);\n this.openElements.push(element, $.HTML);\n }\n /** @protected */\n _appendCommentNode(token, parent) {\n const commentNode = this.treeAdapter.createCommentNode(token.data);\n this.treeAdapter.appendChild(parent, commentNode);\n if (this.options.sourceCodeLocationInfo) {\n this.treeAdapter.setNodeSourceCodeLocation(commentNode, token.location);\n }\n }\n /** @protected */\n _insertCharacters(token) {\n let parent;\n let beforeElement;\n if (this._shouldFosterParentOnInsertion()) {\n ({ parent, beforeElement } = this._findFosterParentingLocation());\n if (beforeElement) {\n this.treeAdapter.insertTextBefore(parent, token.chars, beforeElement);\n }\n else {\n this.treeAdapter.insertText(parent, token.chars);\n }\n }\n else {\n parent = this.openElements.currentTmplContentOrNode;\n this.treeAdapter.insertText(parent, token.chars);\n }\n if (!token.location)\n return;\n const siblings = this.treeAdapter.getChildNodes(parent);\n const textNodeIdx = beforeElement ? siblings.lastIndexOf(beforeElement) : siblings.length;\n const textNode = siblings[textNodeIdx - 1];\n //NOTE: if we have a location assigned by another token, then just update the end position\n const tnLoc = this.treeAdapter.getNodeSourceCodeLocation(textNode);\n if (tnLoc) {\n const { endLine, endCol, endOffset } = token.location;\n this.treeAdapter.updateNodeSourceCodeLocation(textNode, { endLine, endCol, endOffset });\n }\n else if (this.options.sourceCodeLocationInfo) {\n this.treeAdapter.setNodeSourceCodeLocation(textNode, token.location);\n }\n }\n /** @protected */\n _adoptNodes(donor, recipient) {\n for (let child = this.treeAdapter.getFirstChild(donor); child; child = this.treeAdapter.getFirstChild(donor)) {\n this.treeAdapter.detachNode(child);\n this.treeAdapter.appendChild(recipient, child);\n }\n }\n /** @protected */\n _setEndLocation(element, closingToken) {\n if (this.treeAdapter.getNodeSourceCodeLocation(element) && closingToken.location) {\n const ctLoc = closingToken.location;\n const tn = this.treeAdapter.getTagName(element);\n const endLoc = \n // NOTE: For cases like <p> <p> </p> - First 'p' closes without a closing\n // tag and for cases like <td> <p> </td> - 'p' closes without a closing tag.\n closingToken.type === TokenType.END_TAG && tn === closingToken.tagName\n ? {\n endTag: { ...ctLoc },\n endLine: ctLoc.endLine,\n endCol: ctLoc.endCol,\n endOffset: ctLoc.endOffset,\n }\n : {\n endLine: ctLoc.startLine,\n endCol: ctLoc.startCol,\n endOffset: ctLoc.startOffset,\n };\n this.treeAdapter.updateNodeSourceCodeLocation(element, endLoc);\n }\n }\n //Token processing\n shouldProcessStartTagTokenInForeignContent(token) {\n // Check that neither current === document, or ns === NS.HTML\n if (!this.currentNotInHTML)\n return false;\n let current;\n let currentTagId;\n if (this.openElements.stackTop === 0 && this.fragmentContext) {\n current = this.fragmentContext;\n currentTagId = this.fragmentContextID;\n }\n else {\n ({ current, currentTagId } = this.openElements);\n }\n if (token.tagID === $.SVG &&\n this.treeAdapter.getTagName(current) === TN.ANNOTATION_XML &&\n this.treeAdapter.getNamespaceURI(current) === NS.MATHML) {\n return false;\n }\n return (\n // Check that `current` is not an integration point for HTML or MathML elements.\n this.tokenizer.inForeignNode ||\n // If it _is_ an integration point, then we might have to check that it is not an HTML\n // integration point.\n ((token.tagID === $.MGLYPH || token.tagID === $.MALIGNMARK) &&\n currentTagId !== undefined &&\n !this._isIntegrationPoint(currentTagId, current, NS.HTML)));\n }\n /** @protected */\n _processToken(token) {\n switch (token.type) {\n case TokenType.CHARACTER: {\n this.onCharacter(token);\n break;\n }\n case TokenType.NULL_CHARACTER: {\n this.onNullCharacter(token);\n break;\n }\n case TokenType.COMMENT: {\n this.onComment(token);\n break;\n }\n case TokenType.DOCTYPE: {\n this.onDoctype(token);\n break;\n }\n case TokenType.START_TAG: {\n this._processStartTag(token);\n break;\n }\n case TokenType.END_TAG: {\n this.onEndTag(token);\n break;\n }\n case TokenType.EOF: {\n this.onEof(token);\n break;\n }\n case TokenType.WHITESPACE_CHARACTER: {\n this.onWhitespaceCharacter(token);\n break;\n }\n }\n }\n //Integration points\n /** @protected */\n _isIntegrationPoint(tid, element, foreignNS) {\n const ns = this.treeAdapter.getNamespaceURI(element);\n const attrs = this.treeAdapter.getAttrList(element);\n return foreignContent.isIntegrationPoint(tid, ns, attrs, foreignNS);\n }\n //Active formatting elements reconstruction\n /** @protected */\n _reconstructActiveFormattingElements() {\n const listLength = this.activeFormattingElements.entries.length;\n if (listLength) {\n const endIndex = this.activeFormattingElements.entries.findIndex((entry) => entry.type === EntryType.Marker || this.openElements.contains(entry.element));\n const unopenIdx = endIndex === -1 ? listLength - 1 : endIndex - 1;\n for (let i = unopenIdx; i >= 0; i--) {\n const entry = this.activeFormattingElements.entries[i];\n this._insertElement(entry.token, this.treeAdapter.getNamespaceURI(entry.element));\n entry.element = this.openElements.current;\n }\n }\n }\n //Close elements\n /** @protected */\n _closeTableCell() {\n this.openElements.generateImpliedEndTags();\n this.openElements.popUntilTableCellPopped();\n this.activeFormattingElements.clearToLastMarker();\n this.insertionMode = InsertionMode.IN_ROW;\n }\n /** @protected */\n _closePElement() {\n this.openElements.generateImpliedEndTagsWithExclusion($.P);\n this.openElements.popUntilTagNamePopped($.P);\n }\n //Insertion modes\n /** @protected */\n _resetInsertionMode() {\n for (let i = this.openElements.stackTop; i >= 0; i--) {\n //Insertion mode reset map\n switch (i === 0 && this.fragmentContext ? this.fragmentContextID : this.openElements.tagIDs[i]) {\n case $.TR: {\n this.insertionMode = InsertionMode.IN_ROW;\n return;\n }\n case $.TBODY:\n case $.THEAD:\n case $.TFOOT: {\n this.insertionMode = InsertionMode.IN_TABLE_BODY;\n return;\n }\n case $.CAPTION: {\n this.insertionMode = InsertionMode.IN_CAPTION;\n return;\n }\n case $.COLGROUP: {\n this.insertionMode = InsertionMode.IN_COLUMN_GROUP;\n return;\n }\n case $.TABLE: {\n this.insertionMode = InsertionMode.IN_TABLE;\n return;\n }\n case $.BODY: {\n this.insertionMode = InsertionMode.IN_BODY;\n return;\n }\n case $.FRAMESET: {\n this.insertionMode = InsertionMode.IN_FRAMESET;\n return;\n }\n case $.SELECT: {\n this._resetInsertionModeForSelect(i);\n return;\n }\n case $.TEMPLATE: {\n this.insertionMode = this.tmplInsertionModeStack[0];\n return;\n }\n case $.HTML: {\n this.insertionMode = this.headElement ? InsertionMode.AFTER_HEAD : InsertionMode.BEFORE_HEAD;\n return;\n }\n case $.TD:\n case $.TH: {\n if (i > 0) {\n this.insertionMode = InsertionMode.IN_CELL;\n return;\n }\n break;\n }\n case $.HEAD: {\n if (i > 0) {\n this.insertionMode = InsertionMode.IN_HEAD;\n return;\n }\n break;\n }\n }\n }\n this.insertionMode = InsertionMode.IN_BODY;\n }\n /** @protected */\n _resetInsertionModeForSelect(selectIdx) {\n if (selectIdx > 0) {\n for (let i = selectIdx - 1; i > 0; i--) {\n const tn = this.openElements.tagIDs[i];\n if (tn === $.TEMPLATE) {\n break;\n }\n else if (tn === $.TABLE) {\n this.insertionMode = InsertionMode.IN_SELECT_IN_TABLE;\n return;\n }\n }\n }\n this.insertionMode = InsertionMode.IN_SELECT;\n }\n //Foster parenting\n /** @protected */\n _isElementCausesFosterParenting(tn) {\n return TABLE_STRUCTURE_TAGS.has(tn);\n }\n /** @protected */\n _shouldFosterParentOnInsertion() {\n return (this.fosterParentingEnabled &&\n this.openElements.currentTagId !== undefined &&\n this._isElementCausesFosterParenting(this.openElements.currentTagId));\n }\n /** @protected */\n _findFosterParentingLocation() {\n for (let i = this.openElements.stackTop; i >= 0; i--) {\n const openElement = this.openElements.items[i];\n switch (this.openElements.tagIDs[i]) {\n case $.TEMPLATE: {\n if (this.treeAdapter.getNamespaceURI(openElement) === NS.HTML) {\n return { parent: this.treeAdapter.getTemplateContent(openElement), beforeElement: null };\n }\n break;\n }\n case $.TABLE: {\n const parent = this.treeAdapter.getParentNode(openElement);\n if (parent) {\n return { parent, beforeElement: openElement };\n }\n return { parent: this.openElements.items[i - 1], beforeElement: null };\n }\n default:\n // Do nothing\n }\n }\n return { parent: this.openElements.items[0], beforeElement: null };\n }\n /** @protected */\n _fosterParentElement(element) {\n const location = this._findFosterParentingLocation();\n if (location.beforeElement) {\n this.treeAdapter.insertBefore(location.parent, element, location.beforeElement);\n }\n else {\n this.treeAdapter.appendChild(location.parent, element);\n }\n }\n //Special elements\n /** @protected */\n _isSpecialElement(element, id) {\n const ns = this.treeAdapter.getNamespaceURI(element);\n return SPECIAL_ELEMENTS[ns].has(id);\n }\n /** @internal */\n onCharacter(token) {\n this.skipNextNewLine = false;\n if (this.tokenizer.inForeignNode) {\n characterInForeignContent(this, token);\n return;\n }\n switch (this.insertionMode) {\n case InsertionMode.INITIAL: {\n tokenInInitialMode(this, token);\n break;\n }\n case InsertionMode.BEFORE_HTML: {\n tokenBeforeHtml(this, token);\n break;\n }\n case InsertionMode.BEFORE_HEAD: {\n tokenBeforeHead(this, token);\n break;\n }\n case InsertionMode.IN_HEAD: {\n tokenInHead(this, token);\n break;\n }\n case InsertionMode.IN_HEAD_NO_SCRIPT: {\n tokenInHeadNoScript(this, token);\n break;\n }\n case InsertionMode.AFTER_HEAD: {\n tokenAfterHead(this, token);\n break;\n }\n case InsertionMode.IN_BODY:\n case InsertionMode.IN_CAPTION:\n case InsertionMode.IN_CELL:\n case InsertionMode.IN_TEMPLATE: {\n characterInBody(this, token);\n break;\n }\n case InsertionMode.TEXT:\n case InsertionMode.IN_SELECT:\n case InsertionMode.IN_SELECT_IN_TABLE: {\n this._insertCharacters(token);\n break;\n }\n case InsertionMode.IN_TABLE:\n case InsertionMode.IN_TABLE_BODY:\n case InsertionMode.IN_ROW: {\n characterInTable(this, token);\n break;\n }\n case InsertionMode.IN_TABLE_TEXT: {\n characterInTableText(this, token);\n break;\n }\n case InsertionMode.IN_COLUMN_GROUP: {\n tokenInColumnGroup(this, token);\n break;\n }\n case InsertionMode.AFTER_BODY: {\n tokenAfterBody(this, token);\n break;\n }\n case InsertionMode.AFTER_AFTER_BODY: {\n tokenAfterAfterBody(this, token);\n break;\n }\n default:\n // Do nothing\n }\n }\n /** @internal */\n onNullCharacter(token) {\n this.skipNextNewLine = false;\n if (this.tokenizer.inForeignNode) {\n nullCharacterInForeignContent(this, token);\n return;\n }\n switch (this.insertionMode) {\n case InsertionMode.INITIAL: {\n tokenInInitialMode(this, token);\n break;\n }\n case InsertionMode.BEFORE_HTML: {\n tokenBeforeHtml(this, token);\n break;\n }\n case InsertionMode.BEFORE_HEAD: {\n tokenBeforeHead(this, token);\n break;\n }\n case InsertionMode.IN_HEAD: {\n tokenInHead(this, token);\n break;\n }\n case InsertionMode.IN_HEAD_NO_SCRIPT: {\n tokenInHeadNoScript(this, token);\n break;\n }\n case InsertionMode.AFTER_HEAD: {\n tokenAfterHead(this, token);\n break;\n }\n case InsertionMode.TEXT: {\n this._insertCharacters(token);\n break;\n }\n case InsertionMode.IN_TABLE:\n case InsertionMode.IN_TABLE_BODY:\n case InsertionMode.IN_ROW: {\n characterInTable(this, token);\n break;\n }\n case InsertionMode.IN_COLUMN_GROUP: {\n tokenInColumnGroup(this, token);\n break;\n }\n case InsertionMode.AFTER_BODY: {\n tokenAfterBody(this, token);\n break;\n }\n case InsertionMode.AFTER_AFTER_BODY: {\n tokenAfterAfterBody(this, token);\n break;\n }\n default:\n // Do nothing\n }\n }\n /** @internal */\n onComment(token) {\n this.skipNextNewLine = false;\n if (this.currentNotInHTML) {\n appendComment(this, token);\n return;\n }\n switch (this.insertionMode) {\n case InsertionMode.INITIAL:\n case InsertionMode.BEFORE_HTML:\n case InsertionMode.BEFORE_HEAD:\n case InsertionMode.IN_HEAD:\n case InsertionMode.IN_HEAD_NO_SCRIPT:\n case InsertionMode.AFTER_HEAD:\n case InsertionMode.IN_BODY:\n case InsertionMode.IN_TABLE:\n case InsertionMode.IN_CAPTION:\n case InsertionMode.IN_COLUMN_GROUP:\n case InsertionMode.IN_TABLE_BODY:\n case InsertionMode.IN_ROW:\n case InsertionMode.IN_CELL:\n case InsertionMode.IN_SELECT:\n case InsertionMode.IN_SELECT_IN_TABLE:\n case InsertionMode.IN_TEMPLATE:\n case InsertionMode.IN_FRAMESET:\n case InsertionMode.AFTER_FRAMESET: {\n appendComment(this, token);\n break;\n }\n case InsertionMode.IN_TABLE_TEXT: {\n tokenInTableText(this, token);\n break;\n }\n case InsertionMode.AFTER_BODY: {\n appendCommentToRootHtmlElement(this, token);\n break;\n }\n case InsertionMode.AFTER_AFTER_BODY:\n case InsertionMode.AFTER_AFTER_FRAMESET: {\n appendCommentToDocument(this, token);\n break;\n }\n default:\n // Do nothing\n }\n }\n /** @internal */\n onDoctype(token) {\n this.skipNextNewLine = false;\n switch (this.insertionMode) {\n case InsertionMode.INITIAL: {\n doctypeInInitialMode(this, token);\n break;\n }\n case InsertionMode.BEFORE_HEAD:\n case InsertionMode.IN_HEAD:\n case InsertionMode.IN_HEAD_NO_SCRIPT:\n case InsertionMode.AFTER_HEAD: {\n this._err(token, ERR.misplacedDoctype);\n break;\n }\n case InsertionMode.IN_TABLE_TEXT: {\n tokenInTableText(this, token);\n break;\n }\n default:\n // Do nothing\n }\n }\n /** @internal */\n onStartTag(token) {\n this.skipNextNewLine = false;\n this.currentToken = token;\n this._processStartTag(token);\n if (token.selfClosing && !token.ackSelfClosing) {\n this._err(token, ERR.nonVoidHtmlElementStartTagWithTrailingSolidus);\n }\n }\n /**\n * Processes a given start tag.\n *\n * `onStartTag` checks if a self-closing tag was recognized. When a token\n * is moved inbetween multiple insertion modes, this check for self-closing\n * could lead to false positives. To avoid this, `_processStartTag` is used\n * for nested calls.\n *\n * @param token The token to process.\n * @protected\n */\n _processStartTag(token) {\n if (this.shouldProcessStartTagTokenInForeignContent(token)) {\n startTagInForeignContent(this, token);\n }\n else {\n this._startTagOutsideForeignContent(token);\n }\n }\n /** @protected */\n _startTagOutsideForeignContent(token) {\n switch (this.insertionMode) {\n case InsertionMode.INITIAL: {\n tokenInInitialMode(this, token);\n break;\n }\n case InsertionMode.BEFORE_HTML: {\n startTagBeforeHtml(this, token);\n break;\n }\n case InsertionMode.BEFORE_HEAD: {\n startTagBeforeHead(this, token);\n break;\n }\n case InsertionMode.IN_HEAD: {\n startTagInHead(this, token);\n break;\n }\n case InsertionMode.IN_HEAD_NO_SCRIPT: {\n startTagInHeadNoScript(this, token);\n break;\n }\n case InsertionMode.AFTER_HEAD: {\n startTagAfterHead(this, token);\n break;\n }\n case InsertionMode.IN_BODY: {\n startTagInBody(this, token);\n break;\n }\n case InsertionMode.IN_TABLE: {\n startTagInTable(this, token);\n break;\n }\n case InsertionMode.IN_TABLE_TEXT: {\n tokenInTableText(this, token);\n break;\n }\n case InsertionMode.IN_CAPTION: {\n startTagInCaption(this, token);\n break;\n }\n case InsertionMode.IN_COLUMN_GROUP: {\n startTagInColumnGroup(this, token);\n break;\n }\n case InsertionMode.IN_TABLE_BODY: {\n startTagInTableBody(this, token);\n break;\n }\n case InsertionMode.IN_ROW: {\n startTagInRow(this, token);\n break;\n }\n case InsertionMode.IN_CELL: {\n startTagInCell(this, token);\n break;\n }\n case InsertionMode.IN_SELECT: {\n startTagInSelect(this, token);\n break;\n }\n case InsertionMode.IN_SELECT_IN_TABLE: {\n startTagInSelectInTable(this, token);\n break;\n }\n case InsertionMode.IN_TEMPLATE: {\n startTagInTemplate(this, token);\n break;\n }\n case InsertionMode.AFTER_BODY: {\n startTagAfterBody(this, token);\n break;\n }\n case InsertionMode.IN_FRAMESET: {\n startTagInFrameset(this, token);\n break;\n }\n case InsertionMode.AFTER_FRAMESET: {\n startTagAfterFrameset(this, token);\n break;\n }\n case InsertionMode.AFTER_AFTER_BODY: {\n startTagAfterAfterBody(this, token);\n break;\n }\n case InsertionMode.AFTER_AFTER_FRAMESET: {\n startTagAfterAfterFrameset(this, token);\n break;\n }\n default:\n // Do nothing\n }\n }\n /** @internal */\n onEndTag(token) {\n this.skipNextNewLine = false;\n this.currentToken = token;\n if (this.currentNotInHTML) {\n endTagInForeignContent(this, token);\n }\n else {\n this._endTagOutsideForeignContent(token);\n }\n }\n /** @protected */\n _endTagOutsideForeignContent(token) {\n switch (this.insertionMode) {\n case InsertionMode.INITIAL: {\n tokenInInitialMode(this, token);\n break;\n }\n case InsertionMode.BEFORE_HTML: {\n endTagBeforeHtml(this, token);\n break;\n }\n case InsertionMode.BEFORE_HEAD: {\n endTagBeforeHead(this, token);\n break;\n }\n case InsertionMode.IN_HEAD: {\n endTagInHead(this, token);\n break;\n }\n case InsertionMode.IN_HEAD_NO_SCRIPT: {\n endTagInHeadNoScript(this, token);\n break;\n }\n case InsertionMode.AFTER_HEAD: {\n endTagAfterHead(this, token);\n break;\n }\n case InsertionMode.IN_BODY: {\n endTagInBody(this, token);\n break;\n }\n case InsertionMode.TEXT: {\n endTagInText(this, token);\n break;\n }\n case InsertionMode.IN_TABLE: {\n endTagInTable(this, token);\n break;\n }\n case InsertionMode.IN_TABLE_TEXT: {\n tokenInTableText(this, token);\n break;\n }\n case InsertionMode.IN_CAPTION: {\n endTagInCaption(this, token);\n break;\n }\n case InsertionMode.IN_COLUMN_GROUP: {\n endTagInColumnGroup(this, token);\n break;\n }\n case InsertionMode.IN_TABLE_BODY: {\n endTagInTableBody(this, token);\n break;\n }\n case InsertionMode.IN_ROW: {\n endTagInRow(this, token);\n break;\n }\n case InsertionMode.IN_CELL: {\n endTagInCell(this, token);\n break;\n }\n case InsertionMode.IN_SELECT: {\n endTagInSelect(this, token);\n break;\n }\n case InsertionMode.IN_SELECT_IN_TABLE: {\n endTagInSelectInTable(this, token);\n break;\n }\n case InsertionMode.IN_TEMPLATE: {\n endTagInTemplate(this, token);\n break;\n }\n case InsertionMode.AFTER_BODY: {\n endTagAfterBody(this, token);\n break;\n }\n case InsertionMode.IN_FRAMESET: {\n endTagInFrameset(this, token);\n break;\n }\n case InsertionMode.AFTER_FRAMESET: {\n endTagAfterFrameset(this, token);\n break;\n }\n case InsertionMode.AFTER_AFTER_BODY: {\n tokenAfterAfterBody(this, token);\n break;\n }\n default:\n // Do nothing\n }\n }\n /** @internal */\n onEof(token) {\n switch (this.insertionMode) {\n case InsertionMode.INITIAL: {\n tokenInInitialMode(this, token);\n break;\n }\n case InsertionMode.BEFORE_HTML: {\n tokenBeforeHtml(this, token);\n break;\n }\n case InsertionMode.BEFORE_HEAD: {\n tokenBeforeHead(this, token);\n break;\n }\n case InsertionMode.IN_HEAD: {\n tokenInHead(this, token);\n break;\n }\n case InsertionMode.IN_HEAD_NO_SCRIPT: {\n tokenInHeadNoScript(this, token);\n break;\n }\n case InsertionMode.AFTER_HEAD: {\n tokenAfterHead(this, token);\n break;\n }\n case InsertionMode.IN_BODY:\n case InsertionMode.IN_TABLE:\n case InsertionMode.IN_CAPTION:\n case InsertionMode.IN_COLUMN_GROUP:\n case InsertionMode.IN_TABLE_BODY:\n case InsertionMode.IN_ROW:\n case InsertionMode.IN_CELL:\n case InsertionMode.IN_SELECT:\n case InsertionMode.IN_SELECT_IN_TABLE: {\n eofInBody(this, token);\n break;\n }\n case InsertionMode.TEXT: {\n eofInText(this, token);\n break;\n }\n case InsertionMode.IN_TABLE_TEXT: {\n tokenInTableText(this, token);\n break;\n }\n case InsertionMode.IN_TEMPLATE: {\n eofInTemplate(this, token);\n break;\n }\n case InsertionMode.AFTER_BODY:\n case InsertionMode.IN_FRAMESET:\n case InsertionMode.AFTER_FRAMESET:\n case InsertionMode.AFTER_AFTER_BODY:\n case InsertionMode.AFTER_AFTER_FRAMESET: {\n stopParsing(this, token);\n break;\n }\n default:\n // Do nothing\n }\n }\n /** @internal */\n onWhitespaceCharacter(token) {\n if (this.skipNextNewLine) {\n this.skipNextNewLine = false;\n if (token.chars.charCodeAt(0) === unicode.CODE_POINTS.LINE_FEED) {\n if (token.chars.length === 1) {\n return;\n }\n token.chars = token.chars.substr(1);\n }\n }\n if (this.tokenizer.inForeignNode) {\n this._insertCharacters(token);\n return;\n }\n switch (this.insertionMode) {\n case InsertionMode.IN_HEAD:\n case InsertionMode.IN_HEAD_NO_SCRIPT:\n case InsertionMode.AFTER_HEAD:\n case InsertionMode.TEXT:\n case InsertionMode.IN_COLUMN_GROUP:\n case InsertionMode.IN_SELECT:\n case InsertionMode.IN_SELECT_IN_TABLE:\n case InsertionMode.IN_FRAMESET:\n case InsertionMode.AFTER_FRAMESET: {\n this._insertCharacters(token);\n break;\n }\n case InsertionMode.IN_BODY:\n case InsertionMode.IN_CAPTION:\n case InsertionMode.IN_CELL:\n case InsertionMode.IN_TEMPLATE:\n case InsertionMode.AFTER_BODY:\n case InsertionMode.AFTER_AFTER_BODY:\n case InsertionMode.AFTER_AFTER_FRAMESET: {\n whitespaceCharacterInBody(this, token);\n break;\n }\n case InsertionMode.IN_TABLE:\n case InsertionMode.IN_TABLE_BODY:\n case InsertionMode.IN_ROW: {\n characterInTable(this, token);\n break;\n }\n case InsertionMode.IN_TABLE_TEXT: {\n whitespaceCharacterInTableText(this, token);\n break;\n }\n default:\n // Do nothing\n }\n }\n}\n//Adoption agency algorithm\n//(see: http://www.whatwg.org/specs/web-apps/current-work/multipage/tree-construction.html#adoptionAgency)\n//------------------------------------------------------------------\n//Steps 5-8 of the algorithm\nfunction aaObtainFormattingElementEntry(p, token) {\n let formattingElementEntry = p.activeFormattingElements.getElementEntryInScopeWithTagName(token.tagName);\n if (formattingElementEntry) {\n if (!p.openElements.contains(formattingElementEntry.element)) {\n p.activeFormattingElements.removeEntry(formattingElementEntry);\n formattingElementEntry = null;\n }\n else if (!p.openElements.hasInScope(token.tagID)) {\n formattingElementEntry = null;\n }\n }\n else {\n genericEndTagInBody(p, token);\n }\n return formattingElementEntry;\n}\n//Steps 9 and 10 of the algorithm\nfunction aaObtainFurthestBlock(p, formattingElementEntry) {\n let furthestBlock = null;\n let idx = p.openElements.stackTop;\n for (; idx >= 0; idx--) {\n const element = p.openElements.items[idx];\n if (element === formattingElementEntry.element) {\n break;\n }\n if (p._isSpecialElement(element, p.openElements.tagIDs[idx])) {\n furthestBlock = element;\n }\n }\n if (!furthestBlock) {\n p.openElements.shortenToLength(Math.max(idx, 0));\n p.activeFormattingElements.removeEntry(formattingElementEntry);\n }\n return furthestBlock;\n}\n//Step 13 of the algorithm\nfunction aaInnerLoop(p, furthestBlock, formattingElement) {\n let lastElement = furthestBlock;\n let nextElement = p.openElements.getCommonAncestor(furthestBlock);\n for (let i = 0, element = nextElement; element !== formattingElement; i++, element = nextElement) {\n //NOTE: store the next element for the next loop iteration (it may be deleted from the stack by step 9.5)\n nextElement = p.openElements.getCommonAncestor(element);\n const elementEntry = p.activeFormattingElements.getElementEntry(element);\n const counterOverflow = elementEntry && i >= AA_INNER_LOOP_ITER;\n const shouldRemoveFromOpenElements = !elementEntry || counterOverflow;\n if (shouldRemoveFromOpenElements) {\n if (counterOverflow) {\n p.activeFormattingElements.removeEntry(elementEntry);\n }\n p.openElements.remove(element);\n }\n else {\n element = aaRecreateElementFromEntry(p, elementEntry);\n if (lastElement === furthestBlock) {\n p.activeFormattingElements.bookmark = elementEntry;\n }\n p.treeAdapter.detachNode(lastElement);\n p.treeAdapter.appendChild(element, lastElement);\n lastElement = element;\n }\n }\n return lastElement;\n}\n//Step 13.7 of the algorithm\nfunction aaRecreateElementFromEntry(p, elementEntry) {\n const ns = p.treeAdapter.getNamespaceURI(elementEntry.element);\n const newElement = p.treeAdapter.createElement(elementEntry.token.tagName, ns, elementEntry.token.attrs);\n p.openElements.replace(elementEntry.element, newElement);\n elementEntry.element = newElement;\n return newElement;\n}\n//Step 14 of the algorithm\nfunction aaInsertLastNodeInCommonAncestor(p, commonAncestor, lastElement) {\n const tn = p.treeAdapter.getTagName(commonAncestor);\n const tid = getTagID(tn);\n if (p._isElementCausesFosterParenting(tid)) {\n p._fosterParentElement(lastElement);\n }\n else {\n const ns = p.treeAdapter.getNamespaceURI(commonAncestor);\n if (tid === $.TEMPLATE && ns === NS.HTML) {\n commonAncestor = p.treeAdapter.getTemplateContent(commonAncestor);\n }\n p.treeAdapter.appendChild(commonAncestor, lastElement);\n }\n}\n//Steps 15-19 of the algorithm\nfunction aaReplaceFormattingElement(p, furthestBlock, formattingElementEntry) {\n const ns = p.treeAdapter.getNamespaceURI(formattingElementEntry.element);\n const { token } = formattingElementEntry;\n const newElement = p.treeAdapter.createElement(token.tagName, ns, token.attrs);\n p._adoptNodes(furthestBlock, newElement);\n p.treeAdapter.appendChild(furthestBlock, newElement);\n p.activeFormattingElements.insertElementAfterBookmark(newElement, token);\n p.activeFormattingElements.removeEntry(formattingElementEntry);\n p.openElements.remove(formattingElementEntry.element);\n p.openElements.insertAfter(furthestBlock, newElement, token.tagID);\n}\n//Algorithm entry point\nfunction callAdoptionAgency(p, token) {\n for (let i = 0; i < AA_OUTER_LOOP_ITER; i++) {\n const formattingElementEntry = aaObtainFormattingElementEntry(p, token);\n if (!formattingElementEntry) {\n break;\n }\n const furthestBlock = aaObtainFurthestBlock(p, formattingElementEntry);\n if (!furthestBlock) {\n break;\n }\n p.activeFormattingElements.bookmark = formattingElementEntry;\n const lastElement = aaInnerLoop(p, furthestBlock, formattingElementEntry.element);\n const commonAncestor = p.openElements.getCommonAncestor(formattingElementEntry.element);\n p.treeAdapter.detachNode(lastElement);\n if (commonAncestor)\n aaInsertLastNodeInCommonAncestor(p, commonAncestor, lastElement);\n aaReplaceFormattingElement(p, furthestBlock, formattingElementEntry);\n }\n}\n//Generic token handlers\n//------------------------------------------------------------------\nfunction appendComment(p, token) {\n p._appendCommentNode(token, p.openElements.currentTmplContentOrNode);\n}\nfunction appendCommentToRootHtmlElement(p, token) {\n p._appendCommentNode(token, p.openElements.items[0]);\n}\nfunction appendCommentToDocument(p, token) {\n p._appendCommentNode(token, p.document);\n}\nfunction stopParsing(p, token) {\n p.stopped = true;\n // NOTE: Set end locations for elements that remain on the open element stack.\n if (token.location) {\n // NOTE: If we are not in a fragment, `html` and `body` will stay on the stack.\n // This is a problem, as we might overwrite their end position here.\n const target = p.fragmentContext ? 0 : 2;\n for (let i = p.openElements.stackTop; i >= target; i--) {\n p._setEndLocation(p.openElements.items[i], token);\n }\n // Handle `html` and `body`\n if (!p.fragmentContext && p.openElements.stackTop >= 0) {\n const htmlElement = p.openElements.items[0];\n const htmlLocation = p.treeAdapter.getNodeSourceCodeLocation(htmlElement);\n if (htmlLocation && !htmlLocation.endTag) {\n p._setEndLocation(htmlElement, token);\n if (p.openElements.stackTop >= 1) {\n const bodyElement = p.openElements.items[1];\n const bodyLocation = p.treeAdapter.getNodeSourceCodeLocation(bodyElement);\n if (bodyLocation && !bodyLocation.endTag) {\n p._setEndLocation(bodyElement, token);\n }\n }\n }\n }\n }\n}\n// The \"initial\" insertion mode\n//------------------------------------------------------------------\nfunction doctypeInInitialMode(p, token) {\n p._setDocumentType(token);\n const mode = token.forceQuirks ? DOCUMENT_MODE.QUIRKS : doctype.getDocumentMode(token);\n if (!doctype.isConforming(token)) {\n p._err(token, ERR.nonConformingDoctype);\n }\n p.treeAdapter.setDocumentMode(p.document, mode);\n p.insertionMode = InsertionMode.BEFORE_HTML;\n}\nfunction tokenInInitialMode(p, token) {\n p._err(token, ERR.missingDoctype, true);\n p.treeAdapter.setDocumentMode(p.document, DOCUMENT_MODE.QUIRKS);\n p.insertionMode = InsertionMode.BEFORE_HTML;\n p._processToken(token);\n}\n// The \"before html\" insertion mode\n//------------------------------------------------------------------\nfunction startTagBeforeHtml(p, token) {\n if (token.tagID === $.HTML) {\n p._insertElement(token, NS.HTML);\n p.insertionMode = InsertionMode.BEFORE_HEAD;\n }\n else {\n tokenBeforeHtml(p, token);\n }\n}\nfunction endTagBeforeHtml(p, token) {\n const tn = token.tagID;\n if (tn === $.HTML || tn === $.HEAD || tn === $.BODY || tn === $.BR) {\n tokenBeforeHtml(p, token);\n }\n}\nfunction tokenBeforeHtml(p, token) {\n p._insertFakeRootElement();\n p.insertionMode = InsertionMode.BEFORE_HEAD;\n p._processToken(token);\n}\n// The \"before head\" insertion mode\n//------------------------------------------------------------------\nfunction startTagBeforeHead(p, token) {\n switch (token.tagID) {\n case $.HTML: {\n startTagInBody(p, token);\n break;\n }\n case $.HEAD: {\n p._insertElement(token, NS.HTML);\n p.headElement = p.openElements.current;\n p.insertionMode = InsertionMode.IN_HEAD;\n break;\n }\n default: {\n tokenBeforeHead(p, token);\n }\n }\n}\nfunction endTagBeforeHead(p, token) {\n const tn = token.tagID;\n if (tn === $.HEAD || tn === $.BODY || tn === $.HTML || tn === $.BR) {\n tokenBeforeHead(p, token);\n }\n else {\n p._err(token, ERR.endTagWithoutMatchingOpenElement);\n }\n}\nfunction tokenBeforeHead(p, token) {\n p._insertFakeElement(TN.HEAD, $.HEAD);\n p.headElement = p.openElements.current;\n p.insertionMode = InsertionMode.IN_HEAD;\n p._processToken(token);\n}\n// The \"in head\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInHead(p, token) {\n switch (token.tagID) {\n case $.HTML: {\n startTagInBody(p, token);\n break;\n }\n case $.BASE:\n case $.BASEFONT:\n case $.BGSOUND:\n case $.LINK:\n case $.META: {\n p._appendElement(token, NS.HTML);\n token.ackSelfClosing = true;\n break;\n }\n case $.TITLE: {\n p._switchToTextParsing(token, TokenizerMode.RCDATA);\n break;\n }\n case $.NOSCRIPT: {\n if (p.options.scriptingEnabled) {\n p._switchToTextParsing(token, TokenizerMode.RAWTEXT);\n }\n else {\n p._insertElement(token, NS.HTML);\n p.insertionMode = InsertionMode.IN_HEAD_NO_SCRIPT;\n }\n break;\n }\n case $.NOFRAMES:\n case $.STYLE: {\n p._switchToTextParsing(token, TokenizerMode.RAWTEXT);\n break;\n }\n case $.SCRIPT: {\n p._switchToTextParsing(token, TokenizerMode.SCRIPT_DATA);\n break;\n }\n case $.TEMPLATE: {\n p._insertTemplate(token);\n p.activeFormattingElements.insertMarker();\n p.framesetOk = false;\n p.insertionMode = InsertionMode.IN_TEMPLATE;\n p.tmplInsertionModeStack.unshift(InsertionMode.IN_TEMPLATE);\n break;\n }\n case $.HEAD: {\n p._err(token, ERR.misplacedStartTagForHeadElement);\n break;\n }\n default: {\n tokenInHead(p, token);\n }\n }\n}\nfunction endTagInHead(p, token) {\n switch (token.tagID) {\n case $.HEAD: {\n p.openElements.pop();\n p.insertionMode = InsertionMode.AFTER_HEAD;\n break;\n }\n case $.BODY:\n case $.BR:\n case $.HTML: {\n tokenInHead(p, token);\n break;\n }\n case $.TEMPLATE: {\n templateEndTagInHead(p, token);\n break;\n }\n default: {\n p._err(token, ERR.endTagWithoutMatchingOpenElement);\n }\n }\n}\nfunction templateEndTagInHead(p, token) {\n if (p.openElements.tmplCount > 0) {\n p.openElements.generateImpliedEndTagsThoroughly();\n if (p.openElements.currentTagId !== $.TEMPLATE) {\n p._err(token, ERR.closingOfElementWithOpenChildElements);\n }\n p.openElements.popUntilTagNamePopped($.TEMPLATE);\n p.activeFormattingElements.clearToLastMarker();\n p.tmplInsertionModeStack.shift();\n p._resetInsertionMode();\n }\n else {\n p._err(token, ERR.endTagWithoutMatchingOpenElement);\n }\n}\nfunction tokenInHead(p, token) {\n p.openElements.pop();\n p.insertionMode = InsertionMode.AFTER_HEAD;\n p._processToken(token);\n}\n// The \"in head no script\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInHeadNoScript(p, token) {\n switch (token.tagID) {\n case $.HTML: {\n startTagInBody(p, token);\n break;\n }\n case $.BASEFONT:\n case $.BGSOUND:\n case $.HEAD:\n case $.LINK:\n case $.META:\n case $.NOFRAMES:\n case $.STYLE: {\n startTagInHead(p, token);\n break;\n }\n case $.NOSCRIPT: {\n p._err(token, ERR.nestedNoscriptInHead);\n break;\n }\n default: {\n tokenInHeadNoScript(p, token);\n }\n }\n}\nfunction endTagInHeadNoScript(p, token) {\n switch (token.tagID) {\n case $.NOSCRIPT: {\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_HEAD;\n break;\n }\n case $.BR: {\n tokenInHeadNoScript(p, token);\n break;\n }\n default: {\n p._err(token, ERR.endTagWithoutMatchingOpenElement);\n }\n }\n}\nfunction tokenInHeadNoScript(p, token) {\n const errCode = token.type === TokenType.EOF ? ERR.openElementsLeftAfterEof : ERR.disallowedContentInNoscriptInHead;\n p._err(token, errCode);\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_HEAD;\n p._processToken(token);\n}\n// The \"after head\" insertion mode\n//------------------------------------------------------------------\nfunction startTagAfterHead(p, token) {\n switch (token.tagID) {\n case $.HTML: {\n startTagInBody(p, token);\n break;\n }\n case $.BODY: {\n p._insertElement(token, NS.HTML);\n p.framesetOk = false;\n p.insertionMode = InsertionMode.IN_BODY;\n break;\n }\n case $.FRAMESET: {\n p._insertElement(token, NS.HTML);\n p.insertionMode = InsertionMode.IN_FRAMESET;\n break;\n }\n case $.BASE:\n case $.BASEFONT:\n case $.BGSOUND:\n case $.LINK:\n case $.META:\n case $.NOFRAMES:\n case $.SCRIPT:\n case $.STYLE:\n case $.TEMPLATE:\n case $.TITLE: {\n p._err(token, ERR.abandonedHeadElementChild);\n p.openElements.push(p.headElement, $.HEAD);\n startTagInHead(p, token);\n p.openElements.remove(p.headElement);\n break;\n }\n case $.HEAD: {\n p._err(token, ERR.misplacedStartTagForHeadElement);\n break;\n }\n default: {\n tokenAfterHead(p, token);\n }\n }\n}\nfunction endTagAfterHead(p, token) {\n switch (token.tagID) {\n case $.BODY:\n case $.HTML:\n case $.BR: {\n tokenAfterHead(p, token);\n break;\n }\n case $.TEMPLATE: {\n templateEndTagInHead(p, token);\n break;\n }\n default: {\n p._err(token, ERR.endTagWithoutMatchingOpenElement);\n }\n }\n}\nfunction tokenAfterHead(p, token) {\n p._insertFakeElement(TN.BODY, $.BODY);\n p.insertionMode = InsertionMode.IN_BODY;\n modeInBody(p, token);\n}\n// The \"in body\" insertion mode\n//------------------------------------------------------------------\nfunction modeInBody(p, token) {\n switch (token.type) {\n case TokenType.CHARACTER: {\n characterInBody(p, token);\n break;\n }\n case TokenType.WHITESPACE_CHARACTER: {\n whitespaceCharacterInBody(p, token);\n break;\n }\n case TokenType.COMMENT: {\n appendComment(p, token);\n break;\n }\n case TokenType.START_TAG: {\n startTagInBody(p, token);\n break;\n }\n case TokenType.END_TAG: {\n endTagInBody(p, token);\n break;\n }\n case TokenType.EOF: {\n eofInBody(p, token);\n break;\n }\n default:\n // Do nothing\n }\n}\nfunction whitespaceCharacterInBody(p, token) {\n p._reconstructActiveFormattingElements();\n p._insertCharacters(token);\n}\nfunction characterInBody(p, token) {\n p._reconstructActiveFormattingElements();\n p._insertCharacters(token);\n p.framesetOk = false;\n}\nfunction htmlStartTagInBody(p, token) {\n if (p.openElements.tmplCount === 0) {\n p.treeAdapter.adoptAttributes(p.openElements.items[0], token.attrs);\n }\n}\nfunction bodyStartTagInBody(p, token) {\n const bodyElement = p.openElements.tryPeekProperlyNestedBodyElement();\n if (bodyElement && p.openElements.tmplCount === 0) {\n p.framesetOk = false;\n p.treeAdapter.adoptAttributes(bodyElement, token.attrs);\n }\n}\nfunction framesetStartTagInBody(p, token) {\n const bodyElement = p.openElements.tryPeekProperlyNestedBodyElement();\n if (p.framesetOk && bodyElement) {\n p.treeAdapter.detachNode(bodyElement);\n p.openElements.popAllUpToHtmlElement();\n p._insertElement(token, NS.HTML);\n p.insertionMode = InsertionMode.IN_FRAMESET;\n }\n}\nfunction addressStartTagInBody(p, token) {\n if (p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n p._insertElement(token, NS.HTML);\n}\nfunction numberedHeaderStartTagInBody(p, token) {\n if (p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n if (p.openElements.currentTagId !== undefined && NUMBERED_HEADERS.has(p.openElements.currentTagId)) {\n p.openElements.pop();\n }\n p._insertElement(token, NS.HTML);\n}\nfunction preStartTagInBody(p, token) {\n if (p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n p._insertElement(token, NS.HTML);\n //NOTE: If the next token is a U+000A LINE FEED (LF) character token, then ignore that token and move\n //on to the next one. (Newlines at the start of pre blocks are ignored as an authoring convenience.)\n p.skipNextNewLine = true;\n p.framesetOk = false;\n}\nfunction formStartTagInBody(p, token) {\n const inTemplate = p.openElements.tmplCount > 0;\n if (!p.formElement || inTemplate) {\n if (p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n p._insertElement(token, NS.HTML);\n if (!inTemplate) {\n p.formElement = p.openElements.current;\n }\n }\n}\nfunction listItemStartTagInBody(p, token) {\n p.framesetOk = false;\n const tn = token.tagID;\n for (let i = p.openElements.stackTop; i >= 0; i--) {\n const elementId = p.openElements.tagIDs[i];\n if ((tn === $.LI && elementId === $.LI) ||\n ((tn === $.DD || tn === $.DT) && (elementId === $.DD || elementId === $.DT))) {\n p.openElements.generateImpliedEndTagsWithExclusion(elementId);\n p.openElements.popUntilTagNamePopped(elementId);\n break;\n }\n if (elementId !== $.ADDRESS &&\n elementId !== $.DIV &&\n elementId !== $.P &&\n p._isSpecialElement(p.openElements.items[i], elementId)) {\n break;\n }\n }\n if (p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n p._insertElement(token, NS.HTML);\n}\nfunction plaintextStartTagInBody(p, token) {\n if (p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n p._insertElement(token, NS.HTML);\n p.tokenizer.state = TokenizerMode.PLAINTEXT;\n}\nfunction buttonStartTagInBody(p, token) {\n if (p.openElements.hasInScope($.BUTTON)) {\n p.openElements.generateImpliedEndTags();\n p.openElements.popUntilTagNamePopped($.BUTTON);\n }\n p._reconstructActiveFormattingElements();\n p._insertElement(token, NS.HTML);\n p.framesetOk = false;\n}\nfunction aStartTagInBody(p, token) {\n const activeElementEntry = p.activeFormattingElements.getElementEntryInScopeWithTagName(TN.A);\n if (activeElementEntry) {\n callAdoptionAgency(p, token);\n p.openElements.remove(activeElementEntry.element);\n p.activeFormattingElements.removeEntry(activeElementEntry);\n }\n p._reconstructActiveFormattingElements();\n p._insertElement(token, NS.HTML);\n p.activeFormattingElements.pushElement(p.openElements.current, token);\n}\nfunction bStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n p._insertElement(token, NS.HTML);\n p.activeFormattingElements.pushElement(p.openElements.current, token);\n}\nfunction nobrStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n if (p.openElements.hasInScope($.NOBR)) {\n callAdoptionAgency(p, token);\n p._reconstructActiveFormattingElements();\n }\n p._insertElement(token, NS.HTML);\n p.activeFormattingElements.pushElement(p.openElements.current, token);\n}\nfunction appletStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n p._insertElement(token, NS.HTML);\n p.activeFormattingElements.insertMarker();\n p.framesetOk = false;\n}\nfunction tableStartTagInBody(p, token) {\n if (p.treeAdapter.getDocumentMode(p.document) !== DOCUMENT_MODE.QUIRKS && p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n p._insertElement(token, NS.HTML);\n p.framesetOk = false;\n p.insertionMode = InsertionMode.IN_TABLE;\n}\nfunction areaStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n p._appendElement(token, NS.HTML);\n p.framesetOk = false;\n token.ackSelfClosing = true;\n}\nfunction isHiddenInput(token) {\n const inputType = getTokenAttr(token, ATTRS.TYPE);\n return inputType != null && inputType.toLowerCase() === HIDDEN_INPUT_TYPE;\n}\nfunction inputStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n p._appendElement(token, NS.HTML);\n if (!isHiddenInput(token)) {\n p.framesetOk = false;\n }\n token.ackSelfClosing = true;\n}\nfunction paramStartTagInBody(p, token) {\n p._appendElement(token, NS.HTML);\n token.ackSelfClosing = true;\n}\nfunction hrStartTagInBody(p, token) {\n if (p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n p._appendElement(token, NS.HTML);\n p.framesetOk = false;\n token.ackSelfClosing = true;\n}\nfunction imageStartTagInBody(p, token) {\n token.tagName = TN.IMG;\n token.tagID = $.IMG;\n areaStartTagInBody(p, token);\n}\nfunction textareaStartTagInBody(p, token) {\n p._insertElement(token, NS.HTML);\n //NOTE: If the next token is a U+000A LINE FEED (LF) character token, then ignore that token and move\n //on to the next one. (Newlines at the start of textarea elements are ignored as an authoring convenience.)\n p.skipNextNewLine = true;\n p.tokenizer.state = TokenizerMode.RCDATA;\n p.originalInsertionMode = p.insertionMode;\n p.framesetOk = false;\n p.insertionMode = InsertionMode.TEXT;\n}\nfunction xmpStartTagInBody(p, token) {\n if (p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n p._reconstructActiveFormattingElements();\n p.framesetOk = false;\n p._switchToTextParsing(token, TokenizerMode.RAWTEXT);\n}\nfunction iframeStartTagInBody(p, token) {\n p.framesetOk = false;\n p._switchToTextParsing(token, TokenizerMode.RAWTEXT);\n}\n//NOTE: here we assume that we always act as a user agent with enabled plugins/frames, so we parse\n//<noembed>/<noframes> as rawtext.\nfunction rawTextStartTagInBody(p, token) {\n p._switchToTextParsing(token, TokenizerMode.RAWTEXT);\n}\nfunction selectStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n p._insertElement(token, NS.HTML);\n p.framesetOk = false;\n p.insertionMode =\n p.insertionMode === InsertionMode.IN_TABLE ||\n p.insertionMode === InsertionMode.IN_CAPTION ||\n p.insertionMode === InsertionMode.IN_TABLE_BODY ||\n p.insertionMode === InsertionMode.IN_ROW ||\n p.insertionMode === InsertionMode.IN_CELL\n ? InsertionMode.IN_SELECT_IN_TABLE\n : InsertionMode.IN_SELECT;\n}\nfunction optgroupStartTagInBody(p, token) {\n if (p.openElements.currentTagId === $.OPTION) {\n p.openElements.pop();\n }\n p._reconstructActiveFormattingElements();\n p._insertElement(token, NS.HTML);\n}\nfunction rbStartTagInBody(p, token) {\n if (p.openElements.hasInScope($.RUBY)) {\n p.openElements.generateImpliedEndTags();\n }\n p._insertElement(token, NS.HTML);\n}\nfunction rtStartTagInBody(p, token) {\n if (p.openElements.hasInScope($.RUBY)) {\n p.openElements.generateImpliedEndTagsWithExclusion($.RTC);\n }\n p._insertElement(token, NS.HTML);\n}\nfunction mathStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n foreignContent.adjustTokenMathMLAttrs(token);\n foreignContent.adjustTokenXMLAttrs(token);\n if (token.selfClosing) {\n p._appendElement(token, NS.MATHML);\n }\n else {\n p._insertElement(token, NS.MATHML);\n }\n token.ackSelfClosing = true;\n}\nfunction svgStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n foreignContent.adjustTokenSVGAttrs(token);\n foreignContent.adjustTokenXMLAttrs(token);\n if (token.selfClosing) {\n p._appendElement(token, NS.SVG);\n }\n else {\n p._insertElement(token, NS.SVG);\n }\n token.ackSelfClosing = true;\n}\nfunction genericStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n p._insertElement(token, NS.HTML);\n}\nfunction startTagInBody(p, token) {\n switch (token.tagID) {\n case $.I:\n case $.S:\n case $.B:\n case $.U:\n case $.EM:\n case $.TT:\n case $.BIG:\n case $.CODE:\n case $.FONT:\n case $.SMALL:\n case $.STRIKE:\n case $.STRONG: {\n bStartTagInBody(p, token);\n break;\n }\n case $.A: {\n aStartTagInBody(p, token);\n break;\n }\n case $.H1:\n case $.H2:\n case $.H3:\n case $.H4:\n case $.H5:\n case $.H6: {\n numberedHeaderStartTagInBody(p, token);\n break;\n }\n case $.P:\n case $.DL:\n case $.OL:\n case $.UL:\n case $.DIV:\n case $.DIR:\n case $.NAV:\n case $.MAIN:\n case $.MENU:\n case $.ASIDE:\n case $.CENTER:\n case $.FIGURE:\n case $.FOOTER:\n case $.HEADER:\n case $.HGROUP:\n case $.DIALOG:\n case $.DETAILS:\n case $.ADDRESS:\n case $.ARTICLE:\n case $.SEARCH:\n case $.SECTION:\n case $.SUMMARY:\n case $.FIELDSET:\n case $.BLOCKQUOTE:\n case $.FIGCAPTION: {\n addressStartTagInBody(p, token);\n break;\n }\n case $.LI:\n case $.DD:\n case $.DT: {\n listItemStartTagInBody(p, token);\n break;\n }\n case $.BR:\n case $.IMG:\n case $.WBR:\n case $.AREA:\n case $.EMBED:\n case $.KEYGEN: {\n areaStartTagInBody(p, token);\n break;\n }\n case $.HR: {\n hrStartTagInBody(p, token);\n break;\n }\n case $.RB:\n case $.RTC: {\n rbStartTagInBody(p, token);\n break;\n }\n case $.RT:\n case $.RP: {\n rtStartTagInBody(p, token);\n break;\n }\n case $.PRE:\n case $.LISTING: {\n preStartTagInBody(p, token);\n break;\n }\n case $.XMP: {\n xmpStartTagInBody(p, token);\n break;\n }\n case $.SVG: {\n svgStartTagInBody(p, token);\n break;\n }\n case $.HTML: {\n htmlStartTagInBody(p, token);\n break;\n }\n case $.BASE:\n case $.LINK:\n case $.META:\n case $.STYLE:\n case $.TITLE:\n case $.SCRIPT:\n case $.BGSOUND:\n case $.BASEFONT:\n case $.TEMPLATE: {\n startTagInHead(p, token);\n break;\n }\n case $.BODY: {\n bodyStartTagInBody(p, token);\n break;\n }\n case $.FORM: {\n formStartTagInBody(p, token);\n break;\n }\n case $.NOBR: {\n nobrStartTagInBody(p, token);\n break;\n }\n case $.MATH: {\n mathStartTagInBody(p, token);\n break;\n }\n case $.TABLE: {\n tableStartTagInBody(p, token);\n break;\n }\n case $.INPUT: {\n inputStartTagInBody(p, token);\n break;\n }\n case $.PARAM:\n case $.TRACK:\n case $.SOURCE: {\n paramStartTagInBody(p, token);\n break;\n }\n case $.IMAGE: {\n imageStartTagInBody(p, token);\n break;\n }\n case $.BUTTON: {\n buttonStartTagInBody(p, token);\n break;\n }\n case $.APPLET:\n case $.OBJECT:\n case $.MARQUEE: {\n appletStartTagInBody(p, token);\n break;\n }\n case $.IFRAME: {\n iframeStartTagInBody(p, token);\n break;\n }\n case $.SELECT: {\n selectStartTagInBody(p, token);\n break;\n }\n case $.OPTION:\n case $.OPTGROUP: {\n optgroupStartTagInBody(p, token);\n break;\n }\n case $.NOEMBED:\n case $.NOFRAMES: {\n rawTextStartTagInBody(p, token);\n break;\n }\n case $.FRAMESET: {\n framesetStartTagInBody(p, token);\n break;\n }\n case $.TEXTAREA: {\n textareaStartTagInBody(p, token);\n break;\n }\n case $.NOSCRIPT: {\n if (p.options.scriptingEnabled) {\n rawTextStartTagInBody(p, token);\n }\n else {\n genericStartTagInBody(p, token);\n }\n break;\n }\n case $.PLAINTEXT: {\n plaintextStartTagInBody(p, token);\n break;\n }\n case $.COL:\n case $.TH:\n case $.TD:\n case $.TR:\n case $.HEAD:\n case $.FRAME:\n case $.TBODY:\n case $.TFOOT:\n case $.THEAD:\n case $.CAPTION:\n case $.COLGROUP: {\n // Ignore token\n break;\n }\n default: {\n genericStartTagInBody(p, token);\n }\n }\n}\nfunction bodyEndTagInBody(p, token) {\n if (p.openElements.hasInScope($.BODY)) {\n p.insertionMode = InsertionMode.AFTER_BODY;\n //NOTE: <body> is never popped from the stack, so we need to updated\n //the end location explicitly.\n if (p.options.sourceCodeLocationInfo) {\n const bodyElement = p.openElements.tryPeekProperlyNestedBodyElement();\n if (bodyElement) {\n p._setEndLocation(bodyElement, token);\n }\n }\n }\n}\nfunction htmlEndTagInBody(p, token) {\n if (p.openElements.hasInScope($.BODY)) {\n p.insertionMode = InsertionMode.AFTER_BODY;\n endTagAfterBody(p, token);\n }\n}\nfunction addressEndTagInBody(p, token) {\n const tn = token.tagID;\n if (p.openElements.hasInScope(tn)) {\n p.openElements.generateImpliedEndTags();\n p.openElements.popUntilTagNamePopped(tn);\n }\n}\nfunction formEndTagInBody(p) {\n const inTemplate = p.openElements.tmplCount > 0;\n const { formElement } = p;\n if (!inTemplate) {\n p.formElement = null;\n }\n if ((formElement || inTemplate) && p.openElements.hasInScope($.FORM)) {\n p.openElements.generateImpliedEndTags();\n if (inTemplate) {\n p.openElements.popUntilTagNamePopped($.FORM);\n }\n else if (formElement) {\n p.openElements.remove(formElement);\n }\n }\n}\nfunction pEndTagInBody(p) {\n if (!p.openElements.hasInButtonScope($.P)) {\n p._insertFakeElement(TN.P, $.P);\n }\n p._closePElement();\n}\nfunction liEndTagInBody(p) {\n if (p.openElements.hasInListItemScope($.LI)) {\n p.openElements.generateImpliedEndTagsWithExclusion($.LI);\n p.openElements.popUntilTagNamePopped($.LI);\n }\n}\nfunction ddEndTagInBody(p, token) {\n const tn = token.tagID;\n if (p.openElements.hasInScope(tn)) {\n p.openElements.generateImpliedEndTagsWithExclusion(tn);\n p.openElements.popUntilTagNamePopped(tn);\n }\n}\nfunction numberedHeaderEndTagInBody(p) {\n if (p.openElements.hasNumberedHeaderInScope()) {\n p.openElements.generateImpliedEndTags();\n p.openElements.popUntilNumberedHeaderPopped();\n }\n}\nfunction appletEndTagInBody(p, token) {\n const tn = token.tagID;\n if (p.openElements.hasInScope(tn)) {\n p.openElements.generateImpliedEndTags();\n p.openElements.popUntilTagNamePopped(tn);\n p.activeFormattingElements.clearToLastMarker();\n }\n}\nfunction brEndTagInBody(p) {\n p._reconstructActiveFormattingElements();\n p._insertFakeElement(TN.BR, $.BR);\n p.openElements.pop();\n p.framesetOk = false;\n}\nfunction genericEndTagInBody(p, token) {\n const tn = token.tagName;\n const tid = token.tagID;\n for (let i = p.openElements.stackTop; i > 0; i--) {\n const element = p.openElements.items[i];\n const elementId = p.openElements.tagIDs[i];\n // Compare the tag name here, as the tag might not be a known tag with an ID.\n if (tid === elementId && (tid !== $.UNKNOWN || p.treeAdapter.getTagName(element) === tn)) {\n p.openElements.generateImpliedEndTagsWithExclusion(tid);\n if (p.openElements.stackTop >= i)\n p.openElements.shortenToLength(i);\n break;\n }\n if (p._isSpecialElement(element, elementId)) {\n break;\n }\n }\n}\nfunction endTagInBody(p, token) {\n switch (token.tagID) {\n case $.A:\n case $.B:\n case $.I:\n case $.S:\n case $.U:\n case $.EM:\n case $.TT:\n case $.BIG:\n case $.CODE:\n case $.FONT:\n case $.NOBR:\n case $.SMALL:\n case $.STRIKE:\n case $.STRONG: {\n callAdoptionAgency(p, token);\n break;\n }\n case $.P: {\n pEndTagInBody(p);\n break;\n }\n case $.DL:\n case $.UL:\n case $.OL:\n case $.DIR:\n case $.DIV:\n case $.NAV:\n case $.PRE:\n case $.MAIN:\n case $.MENU:\n case $.ASIDE:\n case $.BUTTON:\n case $.CENTER:\n case $.FIGURE:\n case $.FOOTER:\n case $.HEADER:\n case $.HGROUP:\n case $.DIALOG:\n case $.ADDRESS:\n case $.ARTICLE:\n case $.DETAILS:\n case $.SEARCH:\n case $.SECTION:\n case $.SUMMARY:\n case $.LISTING:\n case $.FIELDSET:\n case $.BLOCKQUOTE:\n case $.FIGCAPTION: {\n addressEndTagInBody(p, token);\n break;\n }\n case $.LI: {\n liEndTagInBody(p);\n break;\n }\n case $.DD:\n case $.DT: {\n ddEndTagInBody(p, token);\n break;\n }\n case $.H1:\n case $.H2:\n case $.H3:\n case $.H4:\n case $.H5:\n case $.H6: {\n numberedHeaderEndTagInBody(p);\n break;\n }\n case $.BR: {\n brEndTagInBody(p);\n break;\n }\n case $.BODY: {\n bodyEndTagInBody(p, token);\n break;\n }\n case $.HTML: {\n htmlEndTagInBody(p, token);\n break;\n }\n case $.FORM: {\n formEndTagInBody(p);\n break;\n }\n case $.APPLET:\n case $.OBJECT:\n case $.MARQUEE: {\n appletEndTagInBody(p, token);\n break;\n }\n case $.TEMPLATE: {\n templateEndTagInHead(p, token);\n break;\n }\n default: {\n genericEndTagInBody(p, token);\n }\n }\n}\nfunction eofInBody(p, token) {\n if (p.tmplInsertionModeStack.length > 0) {\n eofInTemplate(p, token);\n }\n else {\n stopParsing(p, token);\n }\n}\n// The \"text\" insertion mode\n//------------------------------------------------------------------\nfunction endTagInText(p, token) {\n var _a;\n if (token.tagID === $.SCRIPT) {\n (_a = p.scriptHandler) === null || _a === void 0 ? void 0 : _a.call(p, p.openElements.current);\n }\n p.openElements.pop();\n p.insertionMode = p.originalInsertionMode;\n}\nfunction eofInText(p, token) {\n p._err(token, ERR.eofInElementThatCanContainOnlyText);\n p.openElements.pop();\n p.insertionMode = p.originalInsertionMode;\n p.onEof(token);\n}\n// The \"in table\" insertion mode\n//------------------------------------------------------------------\nfunction characterInTable(p, token) {\n if (p.openElements.currentTagId !== undefined && TABLE_STRUCTURE_TAGS.has(p.openElements.currentTagId)) {\n p.pendingCharacterTokens.length = 0;\n p.hasNonWhitespacePendingCharacterToken = false;\n p.originalInsertionMode = p.insertionMode;\n p.insertionMode = InsertionMode.IN_TABLE_TEXT;\n switch (token.type) {\n case TokenType.CHARACTER: {\n characterInTableText(p, token);\n break;\n }\n case TokenType.WHITESPACE_CHARACTER: {\n whitespaceCharacterInTableText(p, token);\n break;\n }\n // Ignore null\n }\n }\n else {\n tokenInTable(p, token);\n }\n}\nfunction captionStartTagInTable(p, token) {\n p.openElements.clearBackToTableContext();\n p.activeFormattingElements.insertMarker();\n p._insertElement(token, NS.HTML);\n p.insertionMode = InsertionMode.IN_CAPTION;\n}\nfunction colgroupStartTagInTable(p, token) {\n p.openElements.clearBackToTableContext();\n p._insertElement(token, NS.HTML);\n p.insertionMode = InsertionMode.IN_COLUMN_GROUP;\n}\nfunction colStartTagInTable(p, token) {\n p.openElements.clearBackToTableContext();\n p._insertFakeElement(TN.COLGROUP, $.COLGROUP);\n p.insertionMode = InsertionMode.IN_COLUMN_GROUP;\n startTagInColumnGroup(p, token);\n}\nfunction tbodyStartTagInTable(p, token) {\n p.openElements.clearBackToTableContext();\n p._insertElement(token, NS.HTML);\n p.insertionMode = InsertionMode.IN_TABLE_BODY;\n}\nfunction tdStartTagInTable(p, token) {\n p.openElements.clearBackToTableContext();\n p._insertFakeElement(TN.TBODY, $.TBODY);\n p.insertionMode = InsertionMode.IN_TABLE_BODY;\n startTagInTableBody(p, token);\n}\nfunction tableStartTagInTable(p, token) {\n if (p.openElements.hasInTableScope($.TABLE)) {\n p.openElements.popUntilTagNamePopped($.TABLE);\n p._resetInsertionMode();\n p._processStartTag(token);\n }\n}\nfunction inputStartTagInTable(p, token) {\n if (isHiddenInput(token)) {\n p._appendElement(token, NS.HTML);\n }\n else {\n tokenInTable(p, token);\n }\n token.ackSelfClosing = true;\n}\nfunction formStartTagInTable(p, token) {\n if (!p.formElement && p.openElements.tmplCount === 0) {\n p._insertElement(token, NS.HTML);\n p.formElement = p.openElements.current;\n p.openElements.pop();\n }\n}\nfunction startTagInTable(p, token) {\n switch (token.tagID) {\n case $.TD:\n case $.TH:\n case $.TR: {\n tdStartTagInTable(p, token);\n break;\n }\n case $.STYLE:\n case $.SCRIPT:\n case $.TEMPLATE: {\n startTagInHead(p, token);\n break;\n }\n case $.COL: {\n colStartTagInTable(p, token);\n break;\n }\n case $.FORM: {\n formStartTagInTable(p, token);\n break;\n }\n case $.TABLE: {\n tableStartTagInTable(p, token);\n break;\n }\n case $.TBODY:\n case $.TFOOT:\n case $.THEAD: {\n tbodyStartTagInTable(p, token);\n break;\n }\n case $.INPUT: {\n inputStartTagInTable(p, token);\n break;\n }\n case $.CAPTION: {\n captionStartTagInTable(p, token);\n break;\n }\n case $.COLGROUP: {\n colgroupStartTagInTable(p, token);\n break;\n }\n default: {\n tokenInTable(p, token);\n }\n }\n}\nfunction endTagInTable(p, token) {\n switch (token.tagID) {\n case $.TABLE: {\n if (p.openElements.hasInTableScope($.TABLE)) {\n p.openElements.popUntilTagNamePopped($.TABLE);\n p._resetInsertionMode();\n }\n break;\n }\n case $.TEMPLATE: {\n templateEndTagInHead(p, token);\n break;\n }\n case $.BODY:\n case $.CAPTION:\n case $.COL:\n case $.COLGROUP:\n case $.HTML:\n case $.TBODY:\n case $.TD:\n case $.TFOOT:\n case $.TH:\n case $.THEAD:\n case $.TR: {\n // Ignore token\n break;\n }\n default: {\n tokenInTable(p, token);\n }\n }\n}\nfunction tokenInTable(p, token) {\n const savedFosterParentingState = p.fosterParentingEnabled;\n p.fosterParentingEnabled = true;\n // Process token in `In Body` mode\n modeInBody(p, token);\n p.fosterParentingEnabled = savedFosterParentingState;\n}\n// The \"in table text\" insertion mode\n//------------------------------------------------------------------\nfunction whitespaceCharacterInTableText(p, token) {\n p.pendingCharacterTokens.push(token);\n}\nfunction characterInTableText(p, token) {\n p.pendingCharacterTokens.push(token);\n p.hasNonWhitespacePendingCharacterToken = true;\n}\nfunction tokenInTableText(p, token) {\n let i = 0;\n if (p.hasNonWhitespacePendingCharacterToken) {\n for (; i < p.pendingCharacterTokens.length; i++) {\n tokenInTable(p, p.pendingCharacterTokens[i]);\n }\n }\n else {\n for (; i < p.pendingCharacterTokens.length; i++) {\n p._insertCharacters(p.pendingCharacterTokens[i]);\n }\n }\n p.insertionMode = p.originalInsertionMode;\n p._processToken(token);\n}\n// The \"in caption\" insertion mode\n//------------------------------------------------------------------\nconst TABLE_VOID_ELEMENTS = new Set([$.CAPTION, $.COL, $.COLGROUP, $.TBODY, $.TD, $.TFOOT, $.TH, $.THEAD, $.TR]);\nfunction startTagInCaption(p, token) {\n const tn = token.tagID;\n if (TABLE_VOID_ELEMENTS.has(tn)) {\n if (p.openElements.hasInTableScope($.CAPTION)) {\n p.openElements.generateImpliedEndTags();\n p.openElements.popUntilTagNamePopped($.CAPTION);\n p.activeFormattingElements.clearToLastMarker();\n p.insertionMode = InsertionMode.IN_TABLE;\n startTagInTable(p, token);\n }\n }\n else {\n startTagInBody(p, token);\n }\n}\nfunction endTagInCaption(p, token) {\n const tn = token.tagID;\n switch (tn) {\n case $.CAPTION:\n case $.TABLE: {\n if (p.openElements.hasInTableScope($.CAPTION)) {\n p.openElements.generateImpliedEndTags();\n p.openElements.popUntilTagNamePopped($.CAPTION);\n p.activeFormattingElements.clearToLastMarker();\n p.insertionMode = InsertionMode.IN_TABLE;\n if (tn === $.TABLE) {\n endTagInTable(p, token);\n }\n }\n break;\n }\n case $.BODY:\n case $.COL:\n case $.COLGROUP:\n case $.HTML:\n case $.TBODY:\n case $.TD:\n case $.TFOOT:\n case $.TH:\n case $.THEAD:\n case $.TR: {\n // Ignore token\n break;\n }\n default: {\n endTagInBody(p, token);\n }\n }\n}\n// The \"in column group\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInColumnGroup(p, token) {\n switch (token.tagID) {\n case $.HTML: {\n startTagInBody(p, token);\n break;\n }\n case $.COL: {\n p._appendElement(token, NS.HTML);\n token.ackSelfClosing = true;\n break;\n }\n case $.TEMPLATE: {\n startTagInHead(p, token);\n break;\n }\n default: {\n tokenInColumnGroup(p, token);\n }\n }\n}\nfunction endTagInColumnGroup(p, token) {\n switch (token.tagID) {\n case $.COLGROUP: {\n if (p.openElements.currentTagId === $.COLGROUP) {\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_TABLE;\n }\n break;\n }\n case $.TEMPLATE: {\n templateEndTagInHead(p, token);\n break;\n }\n case $.COL: {\n // Ignore token\n break;\n }\n default: {\n tokenInColumnGroup(p, token);\n }\n }\n}\nfunction tokenInColumnGroup(p, token) {\n if (p.openElements.currentTagId === $.COLGROUP) {\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_TABLE;\n p._processToken(token);\n }\n}\n// The \"in table body\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInTableBody(p, token) {\n switch (token.tagID) {\n case $.TR: {\n p.openElements.clearBackToTableBodyContext();\n p._insertElement(token, NS.HTML);\n p.insertionMode = InsertionMode.IN_ROW;\n break;\n }\n case $.TH:\n case $.TD: {\n p.openElements.clearBackToTableBodyContext();\n p._insertFakeElement(TN.TR, $.TR);\n p.insertionMode = InsertionMode.IN_ROW;\n startTagInRow(p, token);\n break;\n }\n case $.CAPTION:\n case $.COL:\n case $.COLGROUP:\n case $.TBODY:\n case $.TFOOT:\n case $.THEAD: {\n if (p.openElements.hasTableBodyContextInTableScope()) {\n p.openElements.clearBackToTableBodyContext();\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_TABLE;\n startTagInTable(p, token);\n }\n break;\n }\n default: {\n startTagInTable(p, token);\n }\n }\n}\nfunction endTagInTableBody(p, token) {\n const tn = token.tagID;\n switch (token.tagID) {\n case $.TBODY:\n case $.TFOOT:\n case $.THEAD: {\n if (p.openElements.hasInTableScope(tn)) {\n p.openElements.clearBackToTableBodyContext();\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_TABLE;\n }\n break;\n }\n case $.TABLE: {\n if (p.openElements.hasTableBodyContextInTableScope()) {\n p.openElements.clearBackToTableBodyContext();\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_TABLE;\n endTagInTable(p, token);\n }\n break;\n }\n case $.BODY:\n case $.CAPTION:\n case $.COL:\n case $.COLGROUP:\n case $.HTML:\n case $.TD:\n case $.TH:\n case $.TR: {\n // Ignore token\n break;\n }\n default: {\n endTagInTable(p, token);\n }\n }\n}\n// The \"in row\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInRow(p, token) {\n switch (token.tagID) {\n case $.TH:\n case $.TD: {\n p.openElements.clearBackToTableRowContext();\n p._insertElement(token, NS.HTML);\n p.insertionMode = InsertionMode.IN_CELL;\n p.activeFormattingElements.insertMarker();\n break;\n }\n case $.CAPTION:\n case $.COL:\n case $.COLGROUP:\n case $.TBODY:\n case $.TFOOT:\n case $.THEAD:\n case $.TR: {\n if (p.openElements.hasInTableScope($.TR)) {\n p.openElements.clearBackToTableRowContext();\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_TABLE_BODY;\n startTagInTableBody(p, token);\n }\n break;\n }\n default: {\n startTagInTable(p, token);\n }\n }\n}\nfunction endTagInRow(p, token) {\n switch (token.tagID) {\n case $.TR: {\n if (p.openElements.hasInTableScope($.TR)) {\n p.openElements.clearBackToTableRowContext();\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_TABLE_BODY;\n }\n break;\n }\n case $.TABLE: {\n if (p.openElements.hasInTableScope($.TR)) {\n p.openElements.clearBackToTableRowContext();\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_TABLE_BODY;\n endTagInTableBody(p, token);\n }\n break;\n }\n case $.TBODY:\n case $.TFOOT:\n case $.THEAD: {\n if (p.openElements.hasInTableScope(token.tagID) || p.openElements.hasInTableScope($.TR)) {\n p.openElements.clearBackToTableRowContext();\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_TABLE_BODY;\n endTagInTableBody(p, token);\n }\n break;\n }\n case $.BODY:\n case $.CAPTION:\n case $.COL:\n case $.COLGROUP:\n case $.HTML:\n case $.TD:\n case $.TH: {\n // Ignore end tag\n break;\n }\n default: {\n endTagInTable(p, token);\n }\n }\n}\n// The \"in cell\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInCell(p, token) {\n const tn = token.tagID;\n if (TABLE_VOID_ELEMENTS.has(tn)) {\n if (p.openElements.hasInTableScope($.TD) || p.openElements.hasInTableScope($.TH)) {\n p._closeTableCell();\n startTagInRow(p, token);\n }\n }\n else {\n startTagInBody(p, token);\n }\n}\nfunction endTagInCell(p, token) {\n const tn = token.tagID;\n switch (tn) {\n case $.TD:\n case $.TH: {\n if (p.openElements.hasInTableScope(tn)) {\n p.openElements.generateImpliedEndTags();\n p.openElements.popUntilTagNamePopped(tn);\n p.activeFormattingElements.clearToLastMarker();\n p.insertionMode = InsertionMode.IN_ROW;\n }\n break;\n }\n case $.TABLE:\n case $.TBODY:\n case $.TFOOT:\n case $.THEAD:\n case $.TR: {\n if (p.openElements.hasInTableScope(tn)) {\n p._closeTableCell();\n endTagInRow(p, token);\n }\n break;\n }\n case $.BODY:\n case $.CAPTION:\n case $.COL:\n case $.COLGROUP:\n case $.HTML: {\n // Ignore token\n break;\n }\n default: {\n endTagInBody(p, token);\n }\n }\n}\n// The \"in select\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInSelect(p, token) {\n switch (token.tagID) {\n case $.HTML: {\n startTagInBody(p, token);\n break;\n }\n case $.OPTION: {\n if (p.openElements.currentTagId === $.OPTION) {\n p.openElements.pop();\n }\n p._insertElement(token, NS.HTML);\n break;\n }\n case $.OPTGROUP: {\n if (p.openElements.currentTagId === $.OPTION) {\n p.openElements.pop();\n }\n if (p.openElements.currentTagId === $.OPTGROUP) {\n p.openElements.pop();\n }\n p._insertElement(token, NS.HTML);\n break;\n }\n case $.HR: {\n if (p.openElements.currentTagId === $.OPTION) {\n p.openElements.pop();\n }\n if (p.openElements.currentTagId === $.OPTGROUP) {\n p.openElements.pop();\n }\n p._appendElement(token, NS.HTML);\n token.ackSelfClosing = true;\n break;\n }\n case $.INPUT:\n case $.KEYGEN:\n case $.TEXTAREA:\n case $.SELECT: {\n if (p.openElements.hasInSelectScope($.SELECT)) {\n p.openElements.popUntilTagNamePopped($.SELECT);\n p._resetInsertionMode();\n if (token.tagID !== $.SELECT) {\n p._processStartTag(token);\n }\n }\n break;\n }\n case $.SCRIPT:\n case $.TEMPLATE: {\n startTagInHead(p, token);\n break;\n }\n default:\n // Do nothing\n }\n}\nfunction endTagInSelect(p, token) {\n switch (token.tagID) {\n case $.OPTGROUP: {\n if (p.openElements.stackTop > 0 &&\n p.openElements.currentTagId === $.OPTION &&\n p.openElements.tagIDs[p.openElements.stackTop - 1] === $.OPTGROUP) {\n p.openElements.pop();\n }\n if (p.openElements.currentTagId === $.OPTGROUP) {\n p.openElements.pop();\n }\n break;\n }\n case $.OPTION: {\n if (p.openElements.currentTagId === $.OPTION) {\n p.openElements.pop();\n }\n break;\n }\n case $.SELECT: {\n if (p.openElements.hasInSelectScope($.SELECT)) {\n p.openElements.popUntilTagNamePopped($.SELECT);\n p._resetInsertionMode();\n }\n break;\n }\n case $.TEMPLATE: {\n templateEndTagInHead(p, token);\n break;\n }\n default:\n // Do nothing\n }\n}\n// The \"in select in table\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInSelectInTable(p, token) {\n const tn = token.tagID;\n if (tn === $.CAPTION ||\n tn === $.TABLE ||\n tn === $.TBODY ||\n tn === $.TFOOT ||\n tn === $.THEAD ||\n tn === $.TR ||\n tn === $.TD ||\n tn === $.TH) {\n p.openElements.popUntilTagNamePopped($.SELECT);\n p._resetInsertionMode();\n p._processStartTag(token);\n }\n else {\n startTagInSelect(p, token);\n }\n}\nfunction endTagInSelectInTable(p, token) {\n const tn = token.tagID;\n if (tn === $.CAPTION ||\n tn === $.TABLE ||\n tn === $.TBODY ||\n tn === $.TFOOT ||\n tn === $.THEAD ||\n tn === $.TR ||\n tn === $.TD ||\n tn === $.TH) {\n if (p.openElements.hasInTableScope(tn)) {\n p.openElements.popUntilTagNamePopped($.SELECT);\n p._resetInsertionMode();\n p.onEndTag(token);\n }\n }\n else {\n endTagInSelect(p, token);\n }\n}\n// The \"in template\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInTemplate(p, token) {\n switch (token.tagID) {\n // First, handle tags that can start without a mode change\n case $.BASE:\n case $.BASEFONT:\n case $.BGSOUND:\n case $.LINK:\n case $.META:\n case $.NOFRAMES:\n case $.SCRIPT:\n case $.STYLE:\n case $.TEMPLATE:\n case $.TITLE: {\n startTagInHead(p, token);\n break;\n }\n // Re-process the token in the appropriate mode\n case $.CAPTION:\n case $.COLGROUP:\n case $.TBODY:\n case $.TFOOT:\n case $.THEAD: {\n p.tmplInsertionModeStack[0] = InsertionMode.IN_TABLE;\n p.insertionMode = InsertionMode.IN_TABLE;\n startTagInTable(p, token);\n break;\n }\n case $.COL: {\n p.tmplInsertionModeStack[0] = InsertionMode.IN_COLUMN_GROUP;\n p.insertionMode = InsertionMode.IN_COLUMN_GROUP;\n startTagInColumnGroup(p, token);\n break;\n }\n case $.TR: {\n p.tmplInsertionModeStack[0] = InsertionMode.IN_TABLE_BODY;\n p.insertionMode = InsertionMode.IN_TABLE_BODY;\n startTagInTableBody(p, token);\n break;\n }\n case $.TD:\n case $.TH: {\n p.tmplInsertionModeStack[0] = InsertionMode.IN_ROW;\n p.insertionMode = InsertionMode.IN_ROW;\n startTagInRow(p, token);\n break;\n }\n default: {\n p.tmplInsertionModeStack[0] = InsertionMode.IN_BODY;\n p.insertionMode = InsertionMode.IN_BODY;\n startTagInBody(p, token);\n }\n }\n}\nfunction endTagInTemplate(p, token) {\n if (token.tagID === $.TEMPLATE) {\n templateEndTagInHead(p, token);\n }\n}\nfunction eofInTemplate(p, token) {\n if (p.openElements.tmplCount > 0) {\n p.openElements.popUntilTagNamePopped($.TEMPLATE);\n p.activeFormattingElements.clearToLastMarker();\n p.tmplInsertionModeStack.shift();\n p._resetInsertionMode();\n p.onEof(token);\n }\n else {\n stopParsing(p, token);\n }\n}\n// The \"after body\" insertion mode\n//------------------------------------------------------------------\nfunction startTagAfterBody(p, token) {\n if (token.tagID === $.HTML) {\n startTagInBody(p, token);\n }\n else {\n tokenAfterBody(p, token);\n }\n}\nfunction endTagAfterBody(p, token) {\n var _a;\n if (token.tagID === $.HTML) {\n if (!p.fragmentContext) {\n p.insertionMode = InsertionMode.AFTER_AFTER_BODY;\n }\n //NOTE: <html> is never popped from the stack, so we need to updated\n //the end location explicitly.\n if (p.options.sourceCodeLocationInfo && p.openElements.tagIDs[0] === $.HTML) {\n p._setEndLocation(p.openElements.items[0], token);\n // Update the body element, if it doesn't have an end tag\n const bodyElement = p.openElements.items[1];\n if (bodyElement && !((_a = p.treeAdapter.getNodeSourceCodeLocation(bodyElement)) === null || _a === void 0 ? void 0 : _a.endTag)) {\n p._setEndLocation(bodyElement, token);\n }\n }\n }\n else {\n tokenAfterBody(p, token);\n }\n}\nfunction tokenAfterBody(p, token) {\n p.insertionMode = InsertionMode.IN_BODY;\n modeInBody(p, token);\n}\n// The \"in frameset\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInFrameset(p, token) {\n switch (token.tagID) {\n case $.HTML: {\n startTagInBody(p, token);\n break;\n }\n case $.FRAMESET: {\n p._insertElement(token, NS.HTML);\n break;\n }\n case $.FRAME: {\n p._appendElement(token, NS.HTML);\n token.ackSelfClosing = true;\n break;\n }\n case $.NOFRAMES: {\n startTagInHead(p, token);\n break;\n }\n default:\n // Do nothing\n }\n}\nfunction endTagInFrameset(p, token) {\n if (token.tagID === $.FRAMESET && !p.openElements.isRootHtmlElementCurrent()) {\n p.openElements.pop();\n if (!p.fragmentContext && p.openElements.currentTagId !== $.FRAMESET) {\n p.insertionMode = InsertionMode.AFTER_FRAMESET;\n }\n }\n}\n// The \"after frameset\" insertion mode\n//------------------------------------------------------------------\nfunction startTagAfterFrameset(p, token) {\n switch (token.tagID) {\n case $.HTML: {\n startTagInBody(p, token);\n break;\n }\n case $.NOFRAMES: {\n startTagInHead(p, token);\n break;\n }\n default:\n // Do nothing\n }\n}\nfunction endTagAfterFrameset(p, token) {\n if (token.tagID === $.HTML) {\n p.insertionMode = InsertionMode.AFTER_AFTER_FRAMESET;\n }\n}\n// The \"after after body\" insertion mode\n//------------------------------------------------------------------\nfunction startTagAfterAfterBody(p, token) {\n if (token.tagID === $.HTML) {\n startTagInBody(p, token);\n }\n else {\n tokenAfterAfterBody(p, token);\n }\n}\nfunction tokenAfterAfterBody(p, token) {\n p.insertionMode = InsertionMode.IN_BODY;\n modeInBody(p, token);\n}\n// The \"after after frameset\" insertion mode\n//------------------------------------------------------------------\nfunction startTagAfterAfterFrameset(p, token) {\n switch (token.tagID) {\n case $.HTML: {\n startTagInBody(p, token);\n break;\n }\n case $.NOFRAMES: {\n startTagInHead(p, token);\n break;\n }\n default:\n // Do nothing\n }\n}\n// The rules for parsing tokens in foreign content\n//------------------------------------------------------------------\nfunction nullCharacterInForeignContent(p, token) {\n token.chars = unicode.REPLACEMENT_CHARACTER;\n p._insertCharacters(token);\n}\nfunction characterInForeignContent(p, token) {\n p._insertCharacters(token);\n p.framesetOk = false;\n}\nfunction popUntilHtmlOrIntegrationPoint(p) {\n while (p.treeAdapter.getNamespaceURI(p.openElements.current) !== NS.HTML &&\n p.openElements.currentTagId !== undefined &&\n !p._isIntegrationPoint(p.openElements.currentTagId, p.openElements.current)) {\n p.openElements.pop();\n }\n}\nfunction startTagInForeignContent(p, token) {\n if (foreignContent.causesExit(token)) {\n popUntilHtmlOrIntegrationPoint(p);\n p._startTagOutsideForeignContent(token);\n }\n else {\n const current = p._getAdjustedCurrentElement();\n const currentNs = p.treeAdapter.getNamespaceURI(current);\n if (currentNs === NS.MATHML) {\n foreignContent.adjustTokenMathMLAttrs(token);\n }\n else if (currentNs === NS.SVG) {\n foreignContent.adjustTokenSVGTagName(token);\n foreignContent.adjustTokenSVGAttrs(token);\n }\n foreignContent.adjustTokenXMLAttrs(token);\n if (token.selfClosing) {\n p._appendElement(token, currentNs);\n }\n else {\n p._insertElement(token, currentNs);\n }\n token.ackSelfClosing = true;\n }\n}\nfunction endTagInForeignContent(p, token) {\n if (token.tagID === $.P || token.tagID === $.BR) {\n popUntilHtmlOrIntegrationPoint(p);\n p._endTagOutsideForeignContent(token);\n return;\n }\n for (let i = p.openElements.stackTop; i > 0; i--) {\n const element = p.openElements.items[i];\n if (p.treeAdapter.getNamespaceURI(element) === NS.HTML) {\n p._endTagOutsideForeignContent(token);\n break;\n }\n const tagName = p.treeAdapter.getTagName(element);\n if (tagName.toLowerCase() === token.tagName) {\n //NOTE: update the token tag name for `_setEndLocation`.\n token.tagName = tagName;\n p.openElements.shortenToLength(i);\n break;\n }\n }\n}\n","import { TAG_NAMES as $, NS, hasUnescapedText } from '../common/html.js';\nimport { escapeText, escapeAttribute } from 'entities/escape';\nimport { defaultTreeAdapter } from '../tree-adapters/default.js';\n// Sets\nconst VOID_ELEMENTS = new Set([\n $.AREA,\n $.BASE,\n $.BASEFONT,\n $.BGSOUND,\n $.BR,\n $.COL,\n $.EMBED,\n $.FRAME,\n $.HR,\n $.IMG,\n $.INPUT,\n $.KEYGEN,\n $.LINK,\n $.META,\n $.PARAM,\n $.SOURCE,\n $.TRACK,\n $.WBR,\n]);\nfunction isVoidElement(node, options) {\n return (options.treeAdapter.isElementNode(node) &&\n options.treeAdapter.getNamespaceURI(node) === NS.HTML &&\n VOID_ELEMENTS.has(options.treeAdapter.getTagName(node)));\n}\nconst defaultOpts = { treeAdapter: defaultTreeAdapter, scriptingEnabled: true };\n/**\n * Serializes an AST node to an HTML string.\n *\n * @example\n *\n * ```js\n * const parse5 = require('parse5');\n *\n * const document = parse5.parse('<!DOCTYPE html><html><head></head><body>Hi there!</body></html>');\n *\n * // Serializes a document.\n * const html = parse5.serialize(document);\n *\n * // Serializes the <html> element content.\n * const str = parse5.serialize(document.childNodes[1]);\n *\n * console.log(str); //> '<head></head><body>Hi there!</body>'\n * ```\n *\n * @param node Node to serialize.\n * @param options Serialization options.\n */\nexport function serialize(node, options) {\n const opts = { ...defaultOpts, ...options };\n if (isVoidElement(node, opts)) {\n return '';\n }\n return serializeChildNodes(node, opts);\n}\n/**\n * Serializes an AST element node to an HTML string, including the element node.\n *\n * @example\n *\n * ```js\n * const parse5 = require('parse5');\n *\n * const document = parse5.parseFragment('<div>Hello, <b>world</b>!</div>');\n *\n * // Serializes the <div> element.\n * const str = parse5.serializeOuter(document.childNodes[0]);\n *\n * console.log(str); //> '<div>Hello, <b>world</b>!</div>'\n * ```\n *\n * @param node Node to serialize.\n * @param options Serialization options.\n */\nexport function serializeOuter(node, options) {\n const opts = { ...defaultOpts, ...options };\n return serializeNode(node, opts);\n}\nfunction serializeChildNodes(parentNode, options) {\n let html = '';\n // Get container of the child nodes\n const container = options.treeAdapter.isElementNode(parentNode) &&\n options.treeAdapter.getTagName(parentNode) === $.TEMPLATE &&\n options.treeAdapter.getNamespaceURI(parentNode) === NS.HTML\n ? options.treeAdapter.getTemplateContent(parentNode)\n : parentNode;\n const childNodes = options.treeAdapter.getChildNodes(container);\n if (childNodes) {\n for (const currentNode of childNodes) {\n html += serializeNode(currentNode, options);\n }\n }\n return html;\n}\nfunction serializeNode(node, options) {\n if (options.treeAdapter.isElementNode(node)) {\n return serializeElement(node, options);\n }\n if (options.treeAdapter.isTextNode(node)) {\n return serializeTextNode(node, options);\n }\n if (options.treeAdapter.isCommentNode(node)) {\n return serializeCommentNode(node, options);\n }\n if (options.treeAdapter.isDocumentTypeNode(node)) {\n return serializeDocumentTypeNode(node, options);\n }\n // Return an empty string for unknown nodes\n return '';\n}\nfunction serializeElement(node, options) {\n const tn = options.treeAdapter.getTagName(node);\n return `<${tn}${serializeAttributes(node, options)}>${isVoidElement(node, options) ? '' : `${serializeChildNodes(node, options)}</${tn}>`}`;\n}\nfunction serializeAttributes(node, { treeAdapter }) {\n let html = '';\n for (const attr of treeAdapter.getAttrList(node)) {\n html += ' ';\n if (attr.namespace) {\n switch (attr.namespace) {\n case NS.XML: {\n html += `xml:${attr.name}`;\n break;\n }\n case NS.XMLNS: {\n if (attr.name !== 'xmlns') {\n html += 'xmlns:';\n }\n html += attr.name;\n break;\n }\n case NS.XLINK: {\n html += `xlink:${attr.name}`;\n break;\n }\n default: {\n html += `${attr.prefix}:${attr.name}`;\n }\n }\n }\n else {\n html += attr.name;\n }\n html += `=\"${escapeAttribute(attr.value)}\"`;\n }\n return html;\n}\nfunction serializeTextNode(node, options) {\n const { treeAdapter } = options;\n const content = treeAdapter.getTextNodeContent(node);\n const parent = treeAdapter.getParentNode(node);\n const parentTn = parent && treeAdapter.isElementNode(parent) && treeAdapter.getTagName(parent);\n return parentTn &&\n treeAdapter.getNamespaceURI(parent) === NS.HTML &&\n hasUnescapedText(parentTn, options.scriptingEnabled)\n ? content\n : escapeText(content);\n}\nfunction serializeCommentNode(node, { treeAdapter }) {\n return `<!--${treeAdapter.getCommentNodeContent(node)}-->`;\n}\nfunction serializeDocumentTypeNode(node, { treeAdapter }) {\n return `<!DOCTYPE ${treeAdapter.getDocumentTypeNodeName(node)}>`;\n}\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Point} Point\n * @typedef {import('unist').Position} Position\n */\n\n/**\n * @typedef NodeLike\n * @property {string} type\n * @property {PositionLike | null | undefined} [position]\n *\n * @typedef PositionLike\n * @property {PointLike | null | undefined} [start]\n * @property {PointLike | null | undefined} [end]\n *\n * @typedef PointLike\n * @property {number | null | undefined} [line]\n * @property {number | null | undefined} [column]\n * @property {number | null | undefined} [offset]\n */\n\n/**\n * 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 * @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 * @param {string} d\n * @returns {string}\n */\nexport function color(d) {\n return '\\u001B[33m' + d + '\\u001B[39m'\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 {Options} from 'hast-util-raw'\n * @import {Comment, Doctype, Element, Nodes, RootContent, Root, Text} from 'hast'\n * @import {Raw} from 'mdast-util-to-hast'\n * @import {DefaultTreeAdapterMap, ParserOptions} from 'parse5'\n * @import {Point} from 'unist'\n */\n\n/**\n * @typedef State\n * Info passed around about the current state.\n * @property {(node: Nodes) => undefined} handle\n * Add a hast node to the parser.\n * @property {Options} options\n * User configuration.\n * @property {Parser<DefaultTreeAdapterMap>} parser\n * Current parser.\n * @property {boolean} stitches\n * Whether there are stitches.\n */\n\n/**\n * @typedef Stitch\n * Custom comment-like value we pass through parse5, which contains a\n * replacement node that we’ll swap back in afterwards.\n * @property {'comment'} type\n * Node type.\n * @property {{stitch: Nodes}} value\n * Replacement value.\n */\n\nimport structuredClone from '@ungap/structured-clone'\nimport {fromParse5} from 'hast-util-from-parse5'\nimport {toParse5} from 'hast-util-to-parse5'\nimport {htmlVoidElements} from 'html-void-elements'\nimport {Parser, Token, TokenizerMode, html} from 'parse5'\nimport {pointEnd, pointStart} from 'unist-util-position'\nimport {visit} from 'unist-util-visit'\nimport {webNamespaces} from 'web-namespaces'\nimport {zwitch} from 'zwitch'\n\nconst gfmTagfilterExpression =\n /<(\\/?)(iframe|noembed|noframes|plaintext|script|style|textarea|title|xmp)(?=[\\t\\n\\f\\r />])/gi\n\n// Node types associated with MDX.\n// <https://github.com/mdx-js/mdx/blob/8a56312/packages/mdx/lib/node-types.js>\nconst knownMdxNames = new Set([\n 'mdxFlowExpression',\n 'mdxJsxFlowElement',\n 'mdxJsxTextElement',\n 'mdxTextExpression',\n 'mdxjsEsm'\n])\n\n/** @type {ParserOptions<DefaultTreeAdapterMap>} */\nconst parseOptions = {sourceCodeLocationInfo: true, scriptingEnabled: false}\n\n/**\n * Pass a hast tree through an HTML parser, which will fix nesting, and turn\n * raw nodes into actual nodes.\n *\n * @param {Nodes} tree\n * Original hast tree to transform.\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {Nodes}\n * Parsed again tree.\n */\nexport function raw(tree, options) {\n const document = documentMode(tree)\n /** @type {(node: Nodes, state: State) => undefined} */\n const one = zwitch('type', {\n handlers: {root, element, text, comment, doctype, raw: handleRaw},\n unknown\n })\n\n /** @type {State} */\n const state = {\n parser: document\n ? new Parser(parseOptions)\n : Parser.getFragmentParser(undefined, parseOptions),\n handle(node) {\n one(node, state)\n },\n stitches: false,\n options: options || {}\n }\n\n one(tree, state)\n resetTokenizer(state, pointStart())\n\n const p5 = document ? state.parser.document : state.parser.getFragment()\n const result = fromParse5(p5, {\n // To do: support `space`?\n file: state.options.file\n })\n\n if (state.stitches) {\n visit(result, 'comment', function (node, index, parent) {\n const stitch = /** @type {Stitch} */ (/** @type {unknown} */ (node))\n if (stitch.value.stitch && parent && index !== undefined) {\n /** @type {Array<RootContent>} */\n const siblings = parent.children\n // @ts-expect-error: assume the stitch is allowed.\n siblings[index] = stitch.value.stitch\n return index\n }\n })\n }\n\n // Unpack if possible and when not given a `root`.\n if (\n result.type === 'root' &&\n result.children.length === 1 &&\n result.children[0].type === tree.type\n ) {\n return result.children[0]\n }\n\n return result\n}\n\n/**\n * Transform all nodes\n *\n * @param {Array<RootContent>} nodes\n * hast content.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {undefined}\n * Nothing.\n */\nfunction all(nodes, state) {\n let index = -1\n\n /* istanbul ignore else - invalid nodes, see rehypejs/rehype-raw#7. */\n if (nodes) {\n while (++index < nodes.length) {\n state.handle(nodes[index])\n }\n }\n}\n\n/**\n * Transform a root.\n *\n * @param {Root} node\n * hast root node.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {undefined}\n * Nothing.\n */\nfunction root(node, state) {\n all(node.children, state)\n}\n\n/**\n * Transform an element.\n *\n * @param {Element} node\n * hast element node.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {undefined}\n * Nothing.\n */\nfunction element(node, state) {\n startTag(node, state)\n\n all(node.children, state)\n\n endTag(node, state)\n}\n\n/**\n * Transform a text.\n *\n * @param {Text} node\n * hast text node.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {undefined}\n * Nothing.\n */\nfunction text(node, state) {\n // Allow `DATA` through `PLAINTEXT`,\n // but when hanging in a tag for example,\n // switch back to `DATA`.\n // Note: `State` is not exposed by `parse5`, so these numbers are fragile.\n // See: <https://github.com/inikulin/parse5/blob/46cba43/packages/parse5/lib/tokenizer/index.ts#L58>\n if (state.parser.tokenizer.state > 4) {\n state.parser.tokenizer.state = 0\n }\n\n /** @type {Token.CharacterToken} */\n const token = {\n type: Token.TokenType.CHARACTER,\n chars: node.value,\n location: createParse5Location(node)\n }\n\n resetTokenizer(state, pointStart(node))\n // @ts-expect-error: private.\n state.parser.currentToken = token\n // @ts-expect-error: private.\n state.parser._processToken(state.parser.currentToken)\n}\n\n/**\n * Transform a doctype.\n *\n * @param {Doctype} node\n * hast doctype node.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {undefined}\n * Nothing.\n */\nfunction doctype(node, state) {\n /** @type {Token.DoctypeToken} */\n const token = {\n type: Token.TokenType.DOCTYPE,\n name: 'html',\n forceQuirks: false,\n publicId: '',\n systemId: '',\n location: createParse5Location(node)\n }\n\n resetTokenizer(state, pointStart(node))\n // @ts-expect-error: private.\n state.parser.currentToken = token\n // @ts-expect-error: private.\n state.parser._processToken(state.parser.currentToken)\n}\n\n/**\n * Transform a stitch.\n *\n * @param {Nodes} node\n * unknown node.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {undefined}\n * Nothing.\n */\nfunction stitch(node, state) {\n // Mark that there are stitches, so we need to walk the tree and revert them.\n state.stitches = true\n\n /** @type {Nodes} */\n const clone = cloneWithoutChildren(node)\n\n // Recurse, because to somewhat handle `[<x>]</x>` (where `[]` denotes the\n // passed through node).\n if ('children' in node && 'children' in clone) {\n // Root in root out.\n const fakeRoot = /** @type {Root} */ (\n raw({type: 'root', children: node.children}, state.options)\n )\n clone.children = fakeRoot.children\n }\n\n // Hack: `value` is supposed to be a string, but as none of the tools\n // (`parse5` or `hast-util-from-parse5`) looks at it, we can pass nodes\n // through.\n comment({type: 'comment', value: {stitch: clone}}, state)\n}\n\n/**\n * Transform a comment (or stitch).\n *\n * @param {Comment | Stitch} node\n * hast comment node.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {undefined}\n * Nothing.\n */\nfunction comment(node, state) {\n /** @type {string} */\n // @ts-expect-error: we pass stitches through.\n const data = node.value\n\n /** @type {Token.CommentToken} */\n const token = {\n type: Token.TokenType.COMMENT,\n data,\n location: createParse5Location(node)\n }\n resetTokenizer(state, pointStart(node))\n // @ts-expect-error: private.\n state.parser.currentToken = token\n // @ts-expect-error: private.\n state.parser._processToken(state.parser.currentToken)\n}\n\n/**\n * Transform a raw node.\n *\n * @param {Raw} node\n * hast raw node.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {undefined}\n * Nothing.\n */\nfunction handleRaw(node, state) {\n // Reset preprocessor:\n // See: <https://github.com/inikulin/parse5/blob/6f7ca60/packages/parse5/lib/tokenizer/preprocessor.ts#L18-L31>.\n state.parser.tokenizer.preprocessor.html = ''\n state.parser.tokenizer.preprocessor.pos = -1\n // @ts-expect-error: private.\n // type-coverage:ignore-next-line\n state.parser.tokenizer.preprocessor.lastGapPos = -2\n // @ts-expect-error: private.\n // type-coverage:ignore-next-line\n state.parser.tokenizer.preprocessor.gapStack = []\n // @ts-expect-error: private.\n // type-coverage:ignore-next-line\n state.parser.tokenizer.preprocessor.skipNextNewLine = false\n state.parser.tokenizer.preprocessor.lastChunkWritten = false\n state.parser.tokenizer.preprocessor.endOfChunkHit = false\n // @ts-expect-error: private.\n // type-coverage:ignore-next-line\n state.parser.tokenizer.preprocessor.isEol = false\n\n // Now pass `node.value`.\n setPoint(state, pointStart(node))\n\n state.parser.tokenizer.write(\n state.options.tagfilter\n ? node.value.replace(gfmTagfilterExpression, '<$1$2')\n : node.value,\n false\n )\n // @ts-expect-error: private.\n state.parser.tokenizer._runParsingLoop()\n\n // Character references hang, so if we ended there, we need to flush\n // those too.\n // We reset the preprocessor as if the document ends here.\n // Then one single call to the relevant state does the trick, parse5\n // consumes the whole token.\n\n // Note: `State` is not exposed by `parse5`, so these numbers are fragile.\n // See: <https://github.com/inikulin/parse5/blob/46cba43/packages/parse5/lib/tokenizer/index.ts#L58>\n // Note: a change to `parse5`, which breaks this, was merged but not released.\n // Investigate when it is.\n // To do: remove next major.\n /* c8 ignore next 12 -- removed in <https://github.com/inikulin/parse5/pull/897> */\n if (\n state.parser.tokenizer.state === 72 /* NAMED_CHARACTER_REFERENCE */ ||\n // @ts-expect-error: removed.\n state.parser.tokenizer.state === 78 /* NUMERIC_CHARACTER_REFERENCE_END */\n ) {\n state.parser.tokenizer.preprocessor.lastChunkWritten = true\n /** @type {number} */\n // @ts-expect-error: private.\n const cp = state.parser.tokenizer._consume()\n // @ts-expect-error: private.\n state.parser.tokenizer._callState(cp)\n }\n}\n\n/**\n * Crash on an unknown node.\n *\n * @param {unknown} node_\n * unknown node.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {undefined}\n * Never.\n */\nfunction unknown(node_, state) {\n const node = /** @type {Nodes} */ (node_)\n\n if (\n state.options.passThrough &&\n state.options.passThrough.includes(node.type)\n ) {\n stitch(node, state)\n } else {\n let extra = ''\n\n if (knownMdxNames.has(node.type)) {\n extra =\n \". It looks like you are using MDX nodes with `hast-util-raw` (or `rehype-raw`). If you use this because you are using remark or rehype plugins that inject `'html'` nodes, then please raise an issue with that plugin, as its a bad and slow idea. If you use this because you are using markdown syntax, then you have to configure this utility (or plugin) to pass through these nodes (see `passThrough` in docs), but you can also migrate to use the MDX syntax\"\n }\n\n throw new Error('Cannot compile `' + node.type + '` node' + extra)\n }\n}\n\n/**\n * Reset the tokenizer of a parser.\n *\n * @param {State} state\n * Info passed around about the current state.\n * @param {Point | undefined} point\n * Point.\n * @returns {undefined}\n * Nothing.\n */\nfunction resetTokenizer(state, point) {\n setPoint(state, point)\n\n // Process final characters if they’re still there after hibernating.\n /** @type {Token.CharacterToken} */\n // @ts-expect-error: private.\n const token = state.parser.tokenizer.currentCharacterToken\n\n if (token && token.location) {\n token.location.endLine = state.parser.tokenizer.preprocessor.line\n token.location.endCol = state.parser.tokenizer.preprocessor.col + 1\n token.location.endOffset = state.parser.tokenizer.preprocessor.offset + 1\n // @ts-expect-error: private.\n state.parser.currentToken = token\n // @ts-expect-error: private.\n state.parser._processToken(state.parser.currentToken)\n }\n\n // Reset tokenizer:\n // See: <https://github.com/inikulin/parse5/blob/6f7ca60/packages/parse5/lib/tokenizer/index.ts#L187-L223>.\n // Especially putting it back in the `data` state is useful: some elements,\n // like textareas and iframes, change the state.\n // See GH-7.\n // But also if broken HTML is in `raw`, and then a correct element is given.\n // See GH-11.\n // @ts-expect-error: private.\n state.parser.tokenizer.paused = false\n // @ts-expect-error: private.\n state.parser.tokenizer.inLoop = false\n\n // Note: don’t reset `state`, `inForeignNode`, or `lastStartTagName`, we\n // manually update those when needed.\n state.parser.tokenizer.active = false\n // @ts-expect-error: private.\n state.parser.tokenizer.returnState = TokenizerMode.DATA\n // @ts-expect-error: private.\n state.parser.tokenizer.charRefCode = -1\n // @ts-expect-error: private.\n state.parser.tokenizer.consumedAfterSnapshot = -1\n // @ts-expect-error: private.\n state.parser.tokenizer.currentLocation = null\n // @ts-expect-error: private.\n state.parser.tokenizer.currentCharacterToken = null\n // @ts-expect-error: private.\n state.parser.tokenizer.currentToken = null\n // @ts-expect-error: private.\n state.parser.tokenizer.currentAttr = {name: '', value: ''}\n}\n\n/**\n * Set current location.\n *\n * @param {State} state\n * Info passed around about the current state.\n * @param {Point | undefined} point\n * Point.\n * @returns {undefined}\n * Nothing.\n */\nfunction setPoint(state, point) {\n if (point && point.offset !== undefined) {\n /** @type {Token.Location} */\n const location = {\n startLine: point.line,\n startCol: point.column,\n startOffset: point.offset,\n endLine: -1,\n endCol: -1,\n endOffset: -1\n }\n\n // @ts-expect-error: private.\n // type-coverage:ignore-next-line\n state.parser.tokenizer.preprocessor.lineStartPos = -point.column + 1 // Looks weird, but ensures we get correct positional info.\n state.parser.tokenizer.preprocessor.droppedBufferSize = point.offset\n state.parser.tokenizer.preprocessor.line = point.line\n // @ts-expect-error: private.\n state.parser.tokenizer.currentLocation = location\n }\n}\n\n/**\n * Emit a start tag.\n *\n * @param {Element} node\n * Element.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {undefined}\n * Nothing.\n */\nfunction startTag(node, state) {\n const tagName = node.tagName.toLowerCase()\n\n // Ignore tags if we’re in plain text.\n if (state.parser.tokenizer.state === TokenizerMode.PLAINTEXT) return\n\n resetTokenizer(state, pointStart(node))\n\n const current = state.parser.openElements.current\n let ns = 'namespaceURI' in current ? current.namespaceURI : webNamespaces.html\n\n if (ns === webNamespaces.html && tagName === 'svg') {\n ns = webNamespaces.svg\n }\n\n const result = toParse5(\n // Shallow clone to not delve into `children`: we only need the attributes.\n {...node, children: []},\n {space: ns === webNamespaces.svg ? 'svg' : 'html'}\n )\n\n /** @type {Token.TagToken} */\n const tag = {\n type: Token.TokenType.START_TAG,\n tagName,\n tagID: html.getTagID(tagName),\n // We always send start and end tags.\n selfClosing: false,\n ackSelfClosing: false,\n // Always element.\n /* c8 ignore next */\n attrs: 'attrs' in result ? result.attrs : [],\n location: createParse5Location(node)\n }\n\n // The HTML parsing algorithm works by doing half of the state management in\n // the tokenizer and half in the parser.\n // We can’t use the tokenizer here, as we don’t have strings.\n // So we act *as if* the tokenizer emits tokens:\n\n // @ts-expect-error: private.\n state.parser.currentToken = tag\n // @ts-expect-error: private.\n state.parser._processToken(state.parser.currentToken)\n\n // …but then we still need a bunch of work that the tokenizer would normally\n // do, such as:\n\n // Set a tag name, similar to how the tokenizer would do it.\n state.parser.tokenizer.lastStartTagName = tagName\n\n // `inForeignNode` is correctly set by the parser.\n}\n\n/**\n * Emit an end tag.\n *\n * @param {Element} node\n * Element.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {undefined}\n * Nothing.\n */\nfunction endTag(node, state) {\n const tagName = node.tagName.toLowerCase()\n // Do not emit closing tags for HTML void elements.\n if (\n !state.parser.tokenizer.inForeignNode &&\n htmlVoidElements.includes(tagName)\n ) {\n return\n }\n\n // Ignore tags if we’re in plain text.\n if (state.parser.tokenizer.state === TokenizerMode.PLAINTEXT) return\n\n resetTokenizer(state, pointEnd(node))\n\n /** @type {Token.TagToken} */\n const tag = {\n type: Token.TokenType.END_TAG,\n tagName,\n tagID: html.getTagID(tagName),\n selfClosing: false,\n ackSelfClosing: false,\n attrs: [],\n location: createParse5Location(node)\n }\n\n // The HTML parsing algorithm works by doing half of the state management in\n // the tokenizer and half in the parser.\n // We can’t use the tokenizer here, as we don’t have strings.\n // So we act *as if* the tokenizer emits tokens:\n\n // @ts-expect-error: private.\n state.parser.currentToken = tag\n // @ts-expect-error: private.\n state.parser._processToken(state.parser.currentToken)\n\n // …but then we still need a bunch of work that the tokenizer would normally\n // do, such as:\n\n // Switch back to the data state after alternative states that don’t accept\n // tags:\n if (\n // Current element is closed.\n tagName === state.parser.tokenizer.lastStartTagName &&\n // `<textarea>` and `<title>`\n (state.parser.tokenizer.state === TokenizerMode.RCDATA ||\n // `<iframe>`, `<noembed>`, `<noframes>`, `<style>`, `<xmp>`\n state.parser.tokenizer.state === TokenizerMode.RAWTEXT ||\n // `<script>`\n state.parser.tokenizer.state === TokenizerMode.SCRIPT_DATA)\n // Note: `<plaintext>` not needed, as it’s the last element.\n ) {\n state.parser.tokenizer.state = TokenizerMode.DATA\n }\n}\n\n/**\n * Check if `node` represents a whole document or a fragment.\n *\n * @param {Nodes} node\n * hast node.\n * @returns {boolean}\n * Whether this represents a whole document or a fragment.\n */\nfunction documentMode(node) {\n const head = node.type === 'root' ? node.children[0] : node\n return Boolean(\n head &&\n (head.type === 'doctype' ||\n (head.type === 'element' && head.tagName.toLowerCase() === 'html'))\n )\n}\n\n/**\n * Get a `parse5` location from a node.\n *\n * @param {Nodes | Stitch} node\n * hast node.\n * @returns {Token.Location}\n * `parse5` location.\n */\nfunction createParse5Location(node) {\n const start = pointStart(node) || {\n line: undefined,\n column: undefined,\n offset: undefined\n }\n const end = pointEnd(node) || {\n line: undefined,\n column: undefined,\n offset: undefined\n }\n\n /** @type {Record<keyof Token.Location, number | undefined>} */\n const location = {\n startLine: start.line,\n startCol: start.column,\n startOffset: start.offset,\n endLine: end.line,\n endCol: end.column,\n endOffset: end.offset\n }\n\n // @ts-expect-error: unist point values can be `undefined` in hast, which\n // `parse5` types don’t want.\n return location\n}\n\n/**\n * @template {Nodes} NodeType\n * Node type.\n * @param {NodeType} node\n * Node to clone.\n * @returns {NodeType}\n * Cloned node, without children.\n */\nfunction cloneWithoutChildren(node) {\n return 'children' in node\n ? structuredClone({...node, children: []})\n : structuredClone(node)\n}\n","/**\n * @typedef {import('hast').Root} Root\n * @typedef {import('hast-util-raw').Options} RawOptions\n * @typedef {import('vfile').VFile} VFile\n */\n\n/**\n * @typedef {Omit<RawOptions, 'file'>} Options\n * Configuration.\n */\n\nimport {raw} from 'hast-util-raw'\n\n/**\n * Parse the tree (and raw nodes) again, keeping positional info okay.\n *\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns\n * Transform.\n */\nexport default function rehypeRaw(options) {\n /**\n * @param {Root} tree\n * Tree.\n * @param {VFile} file\n * File.\n * @returns {Root}\n * New tree.\n */\n return function (tree, file) {\n // Assume root in -> root out.\n const result = /** @type {Root} */ (raw(tree, {...options, file}))\n return result\n }\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","/**\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 {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}","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 * @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 * 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 {\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 {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 {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 * @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 * @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 * 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 * @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, 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 {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 * 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 {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 type { Html, Root, Text } from 'mdast';\nimport type { Plugin } from 'unified';\nimport type { Node, Parent } from 'unist';\nimport { visit } from 'unist-util-visit';\n\n// Matches the same `[[file:<id>|<label>]]` syntax that the Milkdown\n// `fileTag` extension authors. The `id` accepts anything except `|` and `]`\n// to keep the brace-pair as the boundary. The `label` accepts anything\n// except `]`. Both groups must be non-empty.\nconst FILE_TAG_RE = /\\[\\[file:([^|\\]]+)\\|([^\\]]+)\\]\\]/g;\n\nconst escapeHtml = (s: string): string =>\n s\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n\nconst renderFileTag = (id: string, label: string): string =>\n `<span class=\"file-tag\" data-file-tag data-id=\"${escapeHtml(\n id\n )}\">${escapeHtml(label)}</span>`;\n\n/**\n * Remark plugin that rewrites inline `[[file:<id>|<label>]]` tokens in text\n * nodes into raw-HTML mdast nodes wrapping the same `<span class=\"file-tag\">`\n * markup that the Milkdown `fileTag` extension produces. Lets backend-emitted\n * file references render as styled inline tags in read-only messages while\n * keeping the DOM contract identical to the editor side.\n */\nexport const remarkFileTag: Plugin<[], Root> = () => (tree) => {\n visit(tree, 'text', (node: Text, index, parent) => {\n if (!parent || index == null) return;\n const value = node.value;\n if (!value.includes('[[file:')) return;\n\n FILE_TAG_RE.lastIndex = 0;\n const replacements: Array<Text | Html> = [];\n let cursor = 0;\n let match: RegExpExecArray | null;\n\n while ((match = FILE_TAG_RE.exec(value)) !== null) {\n if (match.index > cursor) {\n replacements.push({\n type: 'text',\n value: value.slice(cursor, match.index),\n });\n }\n replacements.push({\n type: 'html',\n value: renderFileTag(match[1], match[2]),\n });\n cursor = match.index + match[0].length;\n }\n\n if (replacements.length === 0) return;\n\n if (cursor < value.length) {\n replacements.push({ type: 'text', value: value.slice(cursor) });\n }\n\n (parent as Parent).children.splice(\n index,\n 1,\n ...(replacements as unknown as Node[])\n );\n return index + replacements.length;\n });\n};\n","import { useEffect, useRef, useState } from 'react';\n\nimport { copyText } from '../htmlPreviewShared';\n\ntype CodeBlockProps = {\n language: string;\n source: string;\n};\n\nexport function CodeBlock({ language, source }: CodeBlockProps) {\n const [copyLabel, setCopyLabel] = useState<'Copy' | 'Copied' | 'Failed'>(\n 'Copy'\n );\n const resetTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(() => {\n return () => {\n if (resetTimerRef.current) {\n clearTimeout(resetTimerRef.current);\n resetTimerRef.current = null;\n }\n };\n }, []);\n\n const handleCopy = async () => {\n const ok = await copyText(source);\n setCopyLabel(ok ? 'Copied' : 'Failed');\n if (resetTimerRef.current) clearTimeout(resetTimerRef.current);\n resetTimerRef.current = setTimeout(() => {\n setCopyLabel('Copy');\n resetTimerRef.current = null;\n }, 1500);\n };\n\n const codeClass = language ? `language-${language}` : undefined;\n\n return (\n <div className=\"ss-code-block\">\n <div className=\"ss-code-block__header\">\n <span className=\"ss-code-block__lang\">{language || 'text'}</span>\n <div className=\"ss-code-block__actions\">\n <button\n type=\"button\"\n className=\"ss-code-block__copy\"\n onMouseDown={(e) => {\n e.preventDefault();\n e.stopPropagation();\n }}\n onClick={handleCopy}\n >\n {copyLabel}\n </button>\n </div>\n </div>\n <pre {...(language ? { 'data-language': language } : {})}>\n <code className={codeClass}>{source}</code>\n </pre>\n </div>\n );\n}\n","import { useEffect, useRef, useState } from 'react';\n\nimport {\n copyText,\n ensureGlobalListener,\n iframeHandlers,\n injectHeightReporter,\n MAX_IFRAME_HEIGHT,\n} from '../htmlPreviewShared';\n\ntype HtmlPreviewProps = {\n source: string;\n};\n\n// While a message streams in, react-markdown re-renders this component on every\n// token, so the `source` grows piece by piece. Reloading the iframe on each\n// change makes it measure (and lock in) a height against half-arrived HTML —\n// leaving a few-px-tall chart that only fixes itself on a manual refresh. We\n// debounce instead: the iframe only reloads once the source has been stable for\n// this long, so it renders and measures the *complete* document. An\n// already-complete message (history) renders immediately because the debounced\n// value is seeded from the first source.\nconst STREAM_SETTLE_MS = 250;\n\nexport function HtmlPreview({ source }: HtmlPreviewProps) {\n const [showingPreview, setShowingPreview] = useState(true);\n const [copyLabel, setCopyLabel] = useState<'Copy' | 'Copied' | 'Failed'>(\n 'Copy'\n );\n const [iframeHeight, setIframeHeight] = useState<number | null>(null);\n const [settledSource, setSettledSource] = useState(source);\n // Whether the iframe for the *current* settled source has reported a height\n // yet. Drives the loading overlay so we don't show a half-measured preview.\n const [measured, setMeasured] = useState(false);\n\n // Content is still arriving (debounce pending) or the settled document hasn't\n // measured yet — show the loading shimmer instead of a partial/tiny preview.\n const loading = showingPreview && (source !== settledSource || !measured);\n\n const iframeRef = useRef<HTMLIFrameElement | null>(null);\n const rafIdRef = useRef<number | null>(null);\n const pendingHeightRef = useRef<number | null>(null);\n const copyResetTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const srcdoc = injectHeightReporter(settledSource);\n\n // Trailing-debounce the source feeding the iframe (see STREAM_SETTLE_MS).\n useEffect(() => {\n if (source === settledSource) return;\n const id = setTimeout(() => setSettledSource(source), STREAM_SETTLE_MS);\n return () => clearTimeout(id);\n }, [source, settledSource]);\n\n // A new settled document needs a fresh measurement before we trust its size.\n useEffect(() => {\n setMeasured(false);\n }, [settledSource]);\n\n useEffect(() => {\n ensureGlobalListener();\n }, []);\n\n // Register a height handler keyed on the iframe's contentWindow.\n useEffect(() => {\n const iframe = iframeRef.current;\n if (!iframe) return;\n\n const flushPendingHeight = () => {\n rafIdRef.current = null;\n const h = pendingHeightRef.current;\n if (h == null) return;\n const next = Math.min(h, MAX_IFRAME_HEIGHT);\n pendingHeightRef.current = null;\n if (next <= 0) return;\n setIframeHeight(next);\n setMeasured(true);\n };\n\n const scheduleHeight = (height: number) => {\n pendingHeightRef.current = height;\n if (rafIdRef.current != null) return;\n if (typeof requestAnimationFrame === 'function') {\n rafIdRef.current = requestAnimationFrame(flushPendingHeight);\n } else {\n rafIdRef.current = window.setTimeout(\n flushPendingHeight,\n 16\n ) as unknown as number;\n }\n };\n\n const onLoad = () => {\n if (!iframe.contentWindow) return;\n iframeHandlers.set(iframe.contentWindow, {\n onHeight: scheduleHeight,\n // Auto-flip to source if the previewed HTML throws (e.g. an LLM\n // emitted a JS-only snippet referencing a missing canvas, leaving\n // the iframe blank). Don't fight the user if they've manually\n // toggled back to preview already.\n onError: () => {\n setShowingPreview((current) => (current ? false : current));\n },\n });\n };\n\n iframe.addEventListener('load', onLoad);\n\n return () => {\n iframe.removeEventListener('load', onLoad);\n if (rafIdRef.current != null) {\n if (typeof cancelAnimationFrame === 'function') {\n cancelAnimationFrame(rafIdRef.current);\n } else {\n clearTimeout(rafIdRef.current);\n }\n rafIdRef.current = null;\n }\n if (iframe.contentWindow) {\n iframeHandlers.delete(iframe.contentWindow);\n }\n };\n }, [srcdoc]);\n\n useEffect(() => {\n return () => {\n if (copyResetTimerRef.current) {\n clearTimeout(copyResetTimerRef.current);\n copyResetTimerRef.current = null;\n }\n };\n }, []);\n\n const handleCopy = async () => {\n const ok = await copyText(source);\n setCopyLabel(ok ? 'Copied' : 'Failed');\n if (copyResetTimerRef.current) clearTimeout(copyResetTimerRef.current);\n copyResetTimerRef.current = setTimeout(() => {\n setCopyLabel('Copy');\n copyResetTimerRef.current = null;\n }, 1500);\n };\n\n return (\n <div className=\"ss-code-block ss-code-block--previewable\">\n <div className=\"ss-code-block__header\">\n <span className=\"ss-code-block__lang\">html</span>\n <div className=\"ss-code-block__actions\">\n {!showingPreview && (\n <button\n type=\"button\"\n className=\"ss-code-block__copy\"\n onMouseDown={(e) => {\n e.preventDefault();\n e.stopPropagation();\n }}\n onClick={handleCopy}\n >\n {copyLabel}\n </button>\n )}\n <button\n type=\"button\"\n className=\"ss-code-block__toggle\"\n onMouseDown={(e) => {\n e.preventDefault();\n e.stopPropagation();\n }}\n onClick={() => setShowingPreview((v) => !v)}\n >\n {showingPreview ? 'Source' : 'Preview'}\n </button>\n </div>\n </div>\n <div\n className=\"ss-code-block__preview\"\n style={{\n display: showingPreview ? 'block' : 'none',\n ...(loading ? { minHeight: 180 } : {}),\n }}\n >\n {loading && (\n <div className=\"ss-code-block__loading\">\n <div className=\"ss-code-block__spinner\" />\n <span>Rendering preview…</span>\n </div>\n )}\n <iframe\n ref={iframeRef}\n className=\"ss-code-block__iframe\"\n sandbox=\"allow-scripts\"\n loading=\"lazy\"\n title=\"HTML preview\"\n srcDoc={srcdoc}\n style={{\n opacity: loading ? 0 : 1,\n ...(loading\n ? { position: 'absolute', inset: 0, height: '100%' }\n : iframeHeight != null\n ? { height: `${iframeHeight}px` }\n : {}),\n }}\n />\n </div>\n <pre\n data-language=\"html\"\n style={{ display: showingPreview ? 'none' : 'block' }}\n >\n <code className=\"language-html\">{source}</code>\n </pre>\n </div>\n );\n}\n","import { useEffect, useState } from 'react';\n\ntype ImgProps = React.ImgHTMLAttributes<HTMLImageElement>;\n\ntype DownloadHook = (id: string) => Promise<string>;\n\nfunction getDownloadHook(): DownloadHook | null {\n if (typeof window === 'undefined') return null;\n const w = window as unknown as { __ssDownloadFile?: DownloadHook };\n return w.__ssDownloadFile ?? null;\n}\n\nfunction parseSsFile(src: string): {\n fileId: string;\n w?: string;\n h?: string;\n fit?: string;\n align?: string;\n caption?: string;\n} | null {\n if (!src.startsWith('ss-file:')) return null;\n const withoutScheme = src.substring('ss-file:'.length);\n const [fileId, query = ''] = withoutScheme.split('?');\n const params = new URLSearchParams(query);\n return {\n fileId,\n w: params.get('w') ?? undefined,\n h: params.get('h') ?? undefined,\n fit: params.get('fit') ?? undefined,\n align: params.get('align') ?? undefined,\n caption: params.get('caption') ?? undefined,\n };\n}\n\n/** react-markdown `img` component. Routes `ss-file:` URLs through the\n * same `window.__ssDownloadFile` hook the Milkdown node view uses, so both\n * paths resolve images via the app API. Non-`ss-file` srcs render as a\n * plain `<img>`. */\nexport function SsImage(props: ImgProps) {\n const { src, alt, title, width, height } = props;\n const parsed = typeof src === 'string' ? parseSsFile(src) : null;\n\n const [resolvedSrc, setResolvedSrc] = useState<string | null>(null);\n const [errored, setErrored] = useState(false);\n const fileId = parsed?.fileId;\n\n useEffect(() => {\n if (!fileId) return;\n let cancelled = false;\n const hook = getDownloadHook();\n if (!hook) return;\n hook(fileId)\n .then((url) => {\n if (!cancelled) setResolvedSrc(url);\n })\n .catch(() => {\n if (!cancelled) setErrored(true);\n });\n return () => {\n cancelled = true;\n };\n }, [fileId]);\n\n if (!parsed) {\n return (\n <img\n src={src}\n alt={alt ?? ''}\n title={title}\n width={width}\n height={height}\n />\n );\n }\n\n const finalWidth = parsed.w ?? width;\n const finalHeight = parsed.h ?? height;\n\n return (\n <span\n className=\"ss-attach ss-attach--image\"\n style={{ position: 'relative', display: 'inline-block' }}\n data-fit={parsed.fit}\n data-align={parsed.align}\n data-caption={parsed.caption}\n >\n {!resolvedSrc && !errored && <span className=\"ss-attach__spinner\" />}\n <img\n className=\"ss-attach__img\"\n data-ss-image=\"\"\n data-file-id={parsed.fileId}\n data-error={errored ? '' : undefined}\n src={resolvedSrc ?? undefined}\n alt={alt ?? ''}\n title={title}\n width={finalWidth as number | string | undefined}\n height={finalHeight as number | string | undefined}\n style={!resolvedSrc && !errored ? { visibility: 'hidden' } : undefined}\n />\n </span>\n );\n}\n","import type { Schema } from 'hast-util-sanitize';\nimport { defaultSchema } from 'rehype-sanitize';\n\nconst base = defaultSchema;\n\ntype AttrList = NonNullable<NonNullable<Schema['attributes']>[string]>;\n\n// Permissive schema for LLM-generated message content. Starts from\n// rehype-sanitize's default (already allows `details`, `summary`, and\n// `code className=language-*`) and re-permits a few attributes our chat\n// backend commonly emits: `<a target rel>`, image metadata, data-* markers\n// used by the ssImage renderer. `<script>`, `<iframe>`, `<object>`, and\n// event handlers remain stripped. Note: the HTML preview iframe is rendered\n// via the `code` component override, which bypasses the sanitize pass.\nexport const messageSanitizeSchema: Schema = {\n ...base,\n attributes: {\n ...(base.attributes ?? {}),\n a: [...((base.attributes?.a as AttrList) ?? []), 'target', 'rel'],\n img: [\n ...((base.attributes?.img as AttrList) ?? []),\n 'alt',\n 'title',\n 'width',\n 'height',\n 'dataSsImage',\n 'dataFileId',\n 'dataFit',\n 'dataAlign',\n 'dataCaption',\n ],\n // Permits the `<span class=\"file-tag\" data-file-tag data-id>` markup\n // emitted by `remarkFileTag` for inline `[[file:id|name]]` references.\n span: [\n ...((base.attributes?.span as AttrList) ?? []),\n 'className',\n 'dataFileTag',\n 'dataId',\n ],\n },\n // Re-permit the custom `ss-file:` URI scheme so file attachments embedded\n // as `` or `[name](ss-file:id)` survive sanitization.\n // Without this the default schema strips them (it only allows http/https).\n protocols: {\n ...(base.protocols ?? {}),\n src: [...(base.protocols?.src ?? []), 'ss-file'],\n href: [...(base.protocols?.href ?? []), 'ss-file'],\n },\n};\n","import ReactMarkdown, {\n type Components,\n defaultUrlTransform,\n} from 'react-markdown';\nimport rehypeRaw from 'rehype-raw';\nimport rehypeSanitize from 'rehype-sanitize';\nimport remarkGfm from 'remark-gfm';\n\nimport { remarkFileTag } from './plugins/remarkFileTag';\nimport { CodeBlock } from './renderers/CodeBlock';\nimport { HtmlPreview } from './renderers/HtmlPreview';\nimport { SsImage } from './renderers/SsImage';\nimport { messageSanitizeSchema } from './sanitizeSchema';\nimport './styles.css';\n\nconst rehypePlugins: React.ComponentProps<\n typeof ReactMarkdown\n>['rehypePlugins'] = [rehypeRaw, [rehypeSanitize, messageSanitizeSchema]];\n\nconst remarkPlugins: React.ComponentProps<\n typeof ReactMarkdown\n>['remarkPlugins'] = [remarkGfm, remarkFileTag];\n\n// react-markdown's default urlTransform strips any URL whose protocol isn't\n// in its built-in safelist (http, https, mailto, etc). The chat backend uses\n// a custom `ss-file:` scheme for inline file references — without this\n// override the src is replaced with an empty string and the SsImage renderer\n// never sees the file id.\nconst urlTransform: React.ComponentProps<\n typeof ReactMarkdown\n>['urlTransform'] = (value) => {\n if (typeof value === 'string' && value.startsWith('ss-file:')) {\n return value;\n }\n return defaultUrlTransform(value);\n};\n\nconst components: Components = {\n code({ className, children }) {\n const source = String(children ?? '').replace(/\\n$/, '');\n const match = /language-(\\w+)/.exec(className ?? '');\n const language = match?.[1] ?? '';\n // react-markdown v9 dropped the `inline` prop. A fenced/indented code\n // block in hast is always `<pre><code>`, so we detect \"block\" by the\n // presence of a language class or a newline in the source. Bare inline\n // `<code>` without either renders via the default inline code path.\n const isBlock = !!language || source.includes('\\n');\n if (!isBlock) {\n return <code className={className}>{children}</code>;\n }\n if (language === 'html') {\n return <HtmlPreview source={source} />;\n }\n return <CodeBlock language={language} source={source} />;\n },\n // Override the default `pre` wrapper so our `code` component can emit its\n // own wrapper. Without this, react-markdown wraps our CodeBlock/HtmlPreview\n // in an extra `<pre>` element from its default renderer.\n pre({ children }) {\n return <>{children}</>;\n },\n a({ href, children, ...rest }) {\n return (\n <a href={href} target=\"_blank\" rel=\"noreferrer noopener\" {...rest}>\n {children}\n </a>\n );\n },\n img: SsImage,\n};\n\ntype MessageMarkdownProps = {\n value: string;\n className?: string;\n};\n\n/** Read-only markdown renderer for chat messages. Uses react-markdown +\n * rehype-raw so mixed markdown/HTML rebalances via parse5, which fixes\n * cases like `<details>` wrapping a fenced code block. Shares the\n * `ss-code-block` CSS scope with the Milkdown editor via the\n * `ss-markdown` wrapper class (see `styles.css`). */\nexport function MessageMarkdown({ value, className }: MessageMarkdownProps) {\n return (\n <div className={className ? `ss-markdown ${className}` : 'ss-markdown'}>\n <ReactMarkdown\n remarkPlugins={remarkPlugins}\n rehypePlugins={rehypePlugins}\n urlTransform={urlTransform}\n components={components}\n >\n {value}\n </ReactMarkdown>\n </div>\n );\n}\n","import MuiSkeleton from '@mui/material/Skeleton';\nimport * as React from 'react';\n\nimport { cn } from '@/shared/utils/utils';\n\ntype LegacyDivProps = React.HTMLAttributes<HTMLDivElement>;\n\nfunction Skeleton({ className, ...props }: LegacyDivProps) {\n return (\n <MuiSkeleton\n variant=\"rectangular\"\n animation=\"pulse\"\n className={cn('rounded-md bg-muted', className)}\n sx={{ backgroundColor: 'hsl(var(--muted))' }}\n component=\"div\"\n // Spread legacy div props for compatibility\n {...(props as unknown as Record<string, unknown>)}\n />\n );\n}\n\nexport { Skeleton };\n","// Centralized tag and background gradient styles for the public UI.\n// Extend TAG_STYLES or NAME_BACKGROUND_STYLES to customize behavior.\n\nconst TAG_STYLES: Record<string, { chip: string; gradient?: string }> = {\n safe: {\n chip: 'bg-emerald-100 text-emerald-700 border-emerald-200',\n // Include dark-mode variants so Teams dark/contrast theme keeps the intended tag tint.\n gradient:\n 'via-emerald-500/5 to-emerald-500/10 dark:via-emerald-400/10 dark:to-emerald-400/20',\n },\n unsafe: {\n chip: 'bg-red-100 text-red-700 border-red-200',\n gradient:\n 'via-red-500/5 to-red-500/10 dark:via-red-400/10 dark:to-red-400/20',\n },\n internal: {\n chip: 'bg-emerald-100 text-emerald-700 border-emerald-200',\n gradient:\n 'via-emerald-500/5 to-emerald-500/10 dark:via-emerald-400/10 dark:to-emerald-400/20',\n },\n external: {\n chip: 'bg-red-100 text-red-700 border-red-200',\n gradient:\n 'via-red-500/5 to-red-500/10 dark:via-red-400/10 dark:to-red-400/20',\n },\n};\n\n// Optional: name-based background overrides (workspace/chatbot names)\nconst NAME_BACKGROUND_STYLES: Record<string, string> = {\n // 'my special workspace': 'via-blue-500/5 to-blue-500/10',\n};\n\nconst DEFAULT_CHIP = 'bg-gray-100 text-gray-700 border-gray-200';\nconst DEFAULT_GRADIENT =\n 'via-primary/5 to-primary/10 dark:via-primary/10 dark:to-primary/20';\n\nfunction normalize(value?: string): string {\n return (value || '').toString().trim().toLowerCase();\n}\n\nexport function getTagChipClasses(tag: string): string {\n const key = normalize(tag);\n return TAG_STYLES[key]?.chip ?? DEFAULT_CHIP;\n}\n\nexport function getBackgroundGradientClasses({\n tags,\n name,\n}: {\n tags?: string[];\n name?: string;\n}): string {\n const nameKey = normalize(name);\n if (nameKey && NAME_BACKGROUND_STYLES[nameKey]) {\n return NAME_BACKGROUND_STYLES[nameKey];\n }\n\n const tagKeys = (tags || []).map(normalize);\n for (const key of tagKeys) {\n const style = TAG_STYLES[key]?.gradient;\n if (style) return style;\n }\n\n return DEFAULT_GRADIENT;\n}\n","export const getMessageErrorText = (code: number): string => {\n switch (code) {\n case 429:\n return \"⚠️**Rate Limit Exceeded**\\n\\nI'm receiving too many requests right now. Please wait a moment and try again.\";\n\n default:\n return '⚠️**Error**\\n\\nAn unexpected error occurred. Please try again.';\n }\n};\n","// Centralized public UI config for name/ordering decisions\n\nexport const DEFAULT_CHATBOT_NAME = 'Chatbot';\n\n// Set to false to always show DEFAULT_CHATBOT_NAME instead of the workspace name\nexport const USE_WORKSPACE_NAME_AS_CHATBOT_NAME = true;\n\nexport function getChatbotName(workspaceName?: string): string {\n const trimmed = workspaceName?.trim();\n if (USE_WORKSPACE_NAME_AS_CHATBOT_NAME && trimmed) {\n return trimmed;\n }\n return DEFAULT_CHATBOT_NAME;\n}\n","import {\n FileArchive,\n FileAudio,\n FileCode,\n FileImage,\n FileSpreadsheet,\n FileText,\n FileVideo,\n Presentation,\n} from 'lucide-react';\n\nexport const getFileIcon = (fileName: string) => {\n const ext = fileName.split('.').pop()?.toLowerCase();\n if (['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'svg'].includes(ext || ''))\n return FileImage;\n if (['mp4', 'avi', 'mov', 'wmv', 'flv', 'webm', 'mkv'].includes(ext || ''))\n return FileVideo;\n if (['mp3', 'wav', 'flac', 'aac', 'ogg', 'wma'].includes(ext || ''))\n return FileAudio;\n if (['zip', 'rar', '7z', 'tar', 'gz', 'bz2'].includes(ext || ''))\n return FileArchive;\n if (\n [\n 'js',\n 'ts',\n 'jsx',\n 'tsx',\n 'py',\n 'java',\n 'cpp',\n 'c',\n 'cs',\n 'php',\n 'html',\n 'css',\n 'json',\n 'xml',\n 'md',\n ].includes(ext || '')\n )\n return FileCode;\n if (['xlsx', 'xls', 'csv'].includes(ext || '')) return FileSpreadsheet;\n if (['pptx', 'ppt'].includes(ext || '')) return Presentation;\n return FileText;\n};\n","import { JsonSchema } from '@jsonforms/core';\n\ntype JsonSchemaWithProps = JsonSchema & {\n properties?: Record<string, JsonSchema>;\n};\n\nconst isType = (t: JsonSchema['type'] | undefined, n: string) =>\n Array.isArray(t) ? t.includes(n) : t === n;\n\nconst hasDefault = (x: unknown): x is { default: unknown } =>\n !!x && typeof x === 'object' && 'default' in x;\n\n/**\n * Build a shallow default-value object for JSONForms schemas.\n * - Objects: recurse into properties\n * - Arrays: default to []\n * - Other primitives: default to null unless schema specifies `default`\n */\nexport const getDefaultValues = (\n schema: JsonSchema\n): Record<string, unknown> | null => {\n const s = schema as JsonSchemaWithProps;\n if (isType(s.type, 'object') && s.properties) {\n const defaults: Record<string, unknown> = {};\n for (const [k, prop] of Object.entries(s.properties)) {\n if (hasDefault(prop)) defaults[k] = prop.default;\n else if (\n isType(prop.type, 'object') &&\n (prop as JsonSchemaWithProps).properties\n )\n defaults[k] = getDefaultValues(prop) ?? {};\n else if (\n isType(prop.type, 'array') &&\n (prop as { items?: unknown }).items\n )\n defaults[k] = [];\n else defaults[k] = null;\n }\n return defaults;\n }\n return null;\n};\n","export function getInitials(name: string): string {\n if (typeof name !== 'string' || !name) return '?';\n if (name === 'You') return 'Y';\n\n const parts = name.trim().split(/\\s+/).filter(Boolean);\n if (parts.length === 0) return '?';\n\n if (parts.length === 1) {\n return parts[0].substring(0, 2).toUpperCase();\n }\n\n return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();\n}\n","import { getInitials } from './initials';\n\nfunction djb2Hash(str: string): number {\n let hash = 5381;\n for (let i = 0; i < str.length; i++) {\n hash = (hash * 33) ^ str.charCodeAt(i);\n }\n return hash >>> 0;\n}\n\nfunction hashToHSL(hash: number): string {\n const h = hash % 360;\n const s = 70 + (hash % 30); // Saturation between 70-100%\n const l = 50 + (hash % 20); // Lightness between 50-70%\n return `hsl(${h}, ${s}%, ${l}%)`;\n}\n\nfunction hslToRgb(hsl: string): { r: number; g: number; b: number } {\n const parts = hsl.match(/\\d+/g);\n if (!parts || parts.length < 3) {\n return { r: 0, g: 0, b: 0 };\n }\n const [h, s, l] = parts.map(Number);\n const a = (s * Math.min(l, 100 - l)) / 100;\n const f = (n: number) => {\n const k = (n + h / 30) % 12;\n const color = l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n return Math.round((255 * color) / 100);\n };\n return { r: f(0), g: f(8), b: f(4) };\n}\n\nfunction getBrightness({\n r,\n g,\n b,\n}: {\n r: number;\n g: number;\n b: number;\n}): number {\n return (r * 299 + g * 587 + b * 114) / 1000;\n}\n\nexport function getAvatarColour(name: string): {\n backgroundColor: string;\n textColor: string;\n} {\n const initials = getInitials(name);\n const hash = djb2Hash(initials);\n const hslColor = hashToHSL(hash);\n const rgbColor = hslToRgb(hslColor);\n const brightness = getBrightness(rgbColor);\n\n const backgroundColor = hslColor;\n const textColor = brightness > 128 ? '#000000' : '#FFFFFF';\n\n return { backgroundColor, textColor };\n}\n","import MuiAvatar from '@mui/material/Avatar';\nimport * as React from 'react';\n\nimport { getAvatarColour } from '@/shared/utils/avatarColour';\nimport { cn } from '@/shared/utils/utils';\n\nconst Avatar = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<'div'>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n 'relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full',\n className\n )}\n {...props}\n />\n));\nAvatar.displayName = 'Avatar';\n\nconst AvatarImage = React.forwardRef<\n HTMLImageElement,\n React.ImgHTMLAttributes<HTMLImageElement> & { children?: React.ReactNode }\n>(({ className, alt, src, children, ...props }, _ref) => (\n <MuiAvatar\n className={cn('aspect-square h-full w-full', className)}\n alt={alt}\n src={src}\n imgProps={{ ...props }}\n >\n {children}\n </MuiAvatar>\n));\nAvatarImage.displayName = 'AvatarImage';\n\ntype AvatarFallbackProps = React.HTMLAttributes<HTMLDivElement> & {\n colored?: boolean;\n};\n\nconst AvatarFallback = React.forwardRef<HTMLDivElement, AvatarFallbackProps>(\n ({ className, colored = true, ...props }, ref) => {\n const childText = String(props.children ?? '');\n const colours = colored ? getAvatarColour(childText) : undefined;\n return (\n <div\n ref={ref}\n style={\n colored && colours\n ? {\n backgroundColor: colours.backgroundColor,\n color: colours.textColor,\n }\n : undefined\n }\n className={cn(\n 'flex h-full w-full items-center justify-center rounded-full',\n className\n )}\n {...props}\n />\n );\n }\n);\nAvatarFallback.displayName = 'AvatarFallback';\n\nexport { Avatar, AvatarFallback, AvatarImage };\n","import dayjs from 'dayjs';\nimport advancedFormat from 'dayjs/plugin/advancedFormat';\nimport relativeTime from 'dayjs/plugin/relativeTime';\nimport utc from 'dayjs/plugin/utc';\n\n// `eslint-plugin-import` can incorrectly warn that `extend` should be a named import.\n// Dayjs exposes it as a method on the default export.\n// eslint-disable-next-line import/no-named-as-default-member\ndayjs.extend(utc);\n// eslint-disable-next-line import/no-named-as-default-member\ndayjs.extend(relativeTime);\n// eslint-disable-next-line import/no-named-as-default-member\ndayjs.extend(advancedFormat);\n\nexport function parseDateTime(\n date: Date | string,\n customFormat?: string\n): string {\n const d = dayjs.utc(date).local();\n\n // Keep compatibility with moment's common unix tokens.\n if (customFormat === 'X') return Math.floor(d.valueOf() / 1000).toString();\n if (customFormat === 'x') return d.valueOf().toString();\n\n return d.format(customFormat ?? 'YYYY-MM-DD HH:mm:ss');\n}\n\nexport function parseDateTimeHuman(date: Date | string): string {\n return dayjs.utc(date).local().fromNow();\n}\n\nexport default parseDateTime;\n","type SsWindow = Window & {\n ssconfig?: { Chat_Api_Uri?: unknown };\n};\n\ntype ViteImportMeta = ImportMeta & { env?: Record<string, unknown> };\n\nfunction getChatApiBaseUrl(): string {\n try {\n const w = window as unknown as SsWindow;\n const env = (import.meta as ViteImportMeta).env;\n const cfg = w?.ssconfig?.Chat_Api_Uri ?? env?.VITE_CHAT_API_URI;\n return typeof cfg === 'string' && cfg.trim() ? cfg.trim() : '';\n } catch {\n return '';\n }\n}\n\nexport function getUserPhotoUrl(\n userId: string | null | undefined\n): string | undefined {\n if (!userId) return undefined;\n const base = getChatApiBaseUrl();\n if (!base) return undefined;\n return `${base}/users/${userId}/photo`;\n}\n","import {\n copyText,\n encodeMarkdownMarker,\n snapshotIframe,\n SS_MARKDOWN_CLIPBOARD_TYPE,\n type SnapshotImage,\n} from '@/shared/markdown/htmlPreviewShared';\n\nexport { SS_MARKDOWN_CLIPBOARD_TYPE };\n\n/**\n * \"Smart copy\" for a chat message. Writes several representations to the\n * clipboard at once so a single Copy click does the right thing in every\n * paste target:\n *\n * - `text/html` — the message with each client-side chart rasterized to an\n * `<img>`, so it pastes into Word/Docs as a real image\n * instead of dead `<canvas>`/`<script>` source.\n * - `text/plain` — the raw markdown (universal fallback).\n * - `image/png` — the chart bitmap, when the message is a single chart, for\n * image-only paste targets.\n * - `web text/markdown` — the raw markdown, for round-tripping back into\n * SmartSpace with live charts intact (Chromium only).\n *\n * `container` is the live, rendered message element (its preview iframes are\n * snapshotted in place). `markdown` is the original message source.\n *\n * Returns `true` on success. Falls back to a plain-text copy (and still\n * returns its result) if the rich write isn't supported or fails.\n */\nexport async function copyMessageRich(\n container: HTMLElement,\n markdown: string\n): Promise<boolean> {\n try {\n const canRichWrite =\n typeof ClipboardItem !== 'undefined' && !!navigator.clipboard?.write;\n if (!canRichWrite) return copyText(markdown);\n\n const { html, images } = await buildHtmlPayload(container);\n\n // Embed the live markdown as a hidden comment so pasting back into the\n // SmartSpace composer recovers the source (charts re-render) while external\n // apps still see only the image HTML.\n const htmlWithMarker = `${html}${encodeMarkdownMarker(markdown)}`;\n\n const parts: Record<string, Blob> = {\n 'text/html': new Blob([htmlWithMarker], { type: 'text/html' }),\n 'text/plain': new Blob([markdown], { type: 'text/plain' }),\n };\n\n // Only attach a top-level image when the message is essentially one chart —\n // otherwise an image-only paste target can't tell which chart was meant.\n if (images.length === 1) {\n const pngBlob = await dataUrlToBlob(images[0].dataUrl);\n if (pngBlob) parts['image/png'] = pngBlob;\n }\n\n // Try with the custom format first; retry without it for browsers that\n // reject unknown `web ` formats; fall back to plain text as a last resort.\n const withCustom: Record<string, Blob> = {\n ...parts,\n [SS_MARKDOWN_CLIPBOARD_TYPE]: new Blob([markdown], {\n type: SS_MARKDOWN_CLIPBOARD_TYPE,\n }),\n };\n\n if (await tryWrite(withCustom)) return true;\n if (await tryWrite(parts)) return true;\n return copyText(markdown);\n } catch {\n return copyText(markdown);\n }\n}\n\nasync function tryWrite(parts: Record<string, Blob>): Promise<boolean> {\n try {\n await navigator.clipboard.write([new ClipboardItem(parts)]);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Clone the rendered message, swap each previewable HTML block for its\n * rasterized chart (or inline static HTML), strip interactive chrome, and\n * serialize to an HTML string suitable for the clipboard.\n */\nasync function buildHtmlPayload(\n container: HTMLElement\n): Promise<{ html: string; images: SnapshotImage[] }> {\n // Snapshot the LIVE iframes (the clone's iframes have no contentWindow).\n const liveBlocks = Array.from(\n container.querySelectorAll<HTMLElement>('.ss-code-block--previewable')\n );\n const snapshots = await Promise.all(\n liveBlocks.map((block) => {\n const iframe = block.querySelector('iframe');\n return iframe ? snapshotIframe(iframe) : Promise.resolve([]);\n })\n );\n\n const clone = container.cloneNode(true) as HTMLElement;\n const cloneBlocks = Array.from(\n clone.querySelectorAll<HTMLElement>('.ss-code-block--previewable')\n );\n\n const allImages: SnapshotImage[] = [];\n\n cloneBlocks.forEach((block, i) => {\n const images = snapshots[i] ?? [];\n if (images.length > 0) {\n allImages.push(...images);\n const frag = block.ownerDocument.createElement('div');\n for (const img of images) {\n const el = block.ownerDocument.createElement('img');\n el.src = img.dataUrl;\n el.setAttribute('width', String(img.cssWidth));\n el.setAttribute('height', String(img.cssHeight));\n el.style.maxWidth = '100%';\n frag.appendChild(el);\n }\n block.replaceWith(frag);\n } else {\n // No usable canvas — inline the static HTML source (tables, divs) minus\n // any scripts, so Word still gets real formatted content.\n const source = block.querySelector('code')?.textContent ?? '';\n const div = block.ownerDocument.createElement('div');\n div.innerHTML = stripScripts(source);\n block.replaceWith(div);\n }\n });\n\n // Drop interactive chrome that has no meaning on the clipboard.\n clone\n .querySelectorAll(\n 'iframe, button, .ss-code-block__header, .ss-code-block__copy, .ss-code-block__toggle'\n )\n .forEach((el) => el.remove());\n\n const html = `<meta charset=\"utf-8\">${clone.innerHTML}`;\n return { html, images: allImages };\n}\n\nfunction stripScripts(html: string): string {\n return html.replace(/<script\\b[^>]*>[\\s\\S]*?<\\/script>/gi, '');\n}\n\nasync function dataUrlToBlob(dataUrl: string): Promise<Blob | null> {\n try {\n const res = await fetch(dataUrl);\n return await res.blob();\n } catch {\n return null;\n }\n}\n","import { Check, Copy } from 'lucide-react';\nimport { RefObject, useState } from 'react';\n\nimport { MessageContentItem } from '@/domains/messages';\n\nimport { copyText } from '@/shared/markdown/htmlPreviewShared';\nimport { Button } from '@/shared/mui-compat/button';\n\nimport { copyMessageRich } from './smartCopy';\n\nenum CopyState {\n IDLE = 'idle',\n SUCCESS = 'success',\n}\n\nconst RESET_DELAY = 1000;\n\nexport function ChatMessageCopyButton({\n content,\n contentRef,\n}: {\n content: MessageContentItem[];\n /** Live rendered message element — its chart iframes are rasterized so the\n * copy pastes into Word as images. Falls back to plain text when absent. */\n contentRef?: RefObject<HTMLElement | null>;\n}) {\n const [state, setState] = useState<CopyState>(CopyState.IDLE);\n\n const handleCopy = async () => {\n if (!content) return;\n\n const textToCopy = content\n .filter((item) => !!item.text)\n .map((item) => item.text)\n .join('\\n');\n\n if (!textToCopy) return;\n\n const container = contentRef?.current;\n const ok = container\n ? await copyMessageRich(container, textToCopy)\n : await copyText(textToCopy);\n\n if (ok) {\n setState(CopyState.SUCCESS);\n setTimeout(() => {\n setState(CopyState.IDLE);\n }, RESET_DELAY);\n } else {\n console.error('Failed to copy message content');\n }\n };\n\n const getIcon = () => {\n return state === CopyState.SUCCESS ? (\n <Check className=\"h-3.5 w-3.5 text-green-500\" />\n ) : (\n <Copy className=\"h-3.5 w-3.5\" />\n );\n };\n\n return (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n aria-label=\"Copy message content\"\n className=\"h-7 w-7 text-muted-foreground hover:text-foreground transition-opacity\"\n onClick={handleCopy}\n disabled={state === CopyState.SUCCESS}\n >\n {getIcon()}\n </Button>\n );\n}\n\nexport default ChatMessageCopyButton;\n","import { Check, Download, Loader2, X } from 'lucide-react';\n\nimport { useChatContext } from '@/platform/chat';\n\nimport { FileInfo } from '@/domains/files';\nimport { useFileMutations } from '@/domains/files/mutations';\n\nimport { Button } from '@/shared/mui-compat/button';\n\nexport function ChatMessageFileDownload({ file }: { file: FileInfo }) {\n const { workspaceId, threadId } = useChatContext();\n const { downloadFileMutation } = useFileMutations({ workspaceId, threadId });\n\n const getIcon = () => {\n if (downloadFileMutation.isPending) {\n return <Loader2 className=\"h-4 w-4 animate-spin\" />;\n } else if (downloadFileMutation.isSuccess) {\n return <Check className=\"h-4 w-4 text-green-500\" />;\n } else if (downloadFileMutation.isError) {\n return <X className=\"h-4 w-4 text-red-500\" />;\n } else {\n return <Download className=\"h-4 w-4\" />;\n }\n };\n\n return (\n <Button\n size=\"icon\"\n aria-label=\"Download file\"\n variant=\"ghost\"\n className=\"h-7 w-7 text-muted-foreground hover:text-foreground transition-opacity\"\n onClick={() => downloadFileMutation.mutateAsync(file)}\n disabled={downloadFileMutation.isPending}\n >\n {getIcon()}\n </Button>\n );\n}\n\nexport default ChatMessageFileDownload;\n","import { queryOptions, useQuery } from '@tanstack/react-query';\n\nimport { useChatService } from '@/platform/chat';\nimport type { ChatService } from '@/platform/chat';\n\nimport { FileScope } from './model';\nimport { filesKeys } from './queryKeys';\n\nexport const downloadFileBlobOptions = (\n service: ChatService,\n fileId: string,\n scope: FileScope\n) =>\n queryOptions({\n queryKey: filesKeys.downloadBlob(fileId),\n queryFn: () => service.downloadFile(fileId, scope),\n gcTime: 0,\n staleTime: 0,\n retry: 1,\n });\n\nexport const useDownloadFileBlobQuery = (fileId: string, scope: FileScope) => {\n const service = useChatService();\n return useQuery(downloadFileBlobOptions(service, fileId, scope));\n};\n","import Skeleton from '@mui/material/Skeleton';\nimport { FC, useEffect, useMemo } from 'react';\n\nimport { useChatContext } from '@/platform/chat';\n\nimport { FileInfo } from '@/domains/files';\nimport { useDownloadFileBlobQuery } from '@/domains/files/queries';\n\nexport const ChatMessageImage: FC<{ image: FileInfo }> = ({ image }) => {\n const { workspaceId, threadId } = useChatContext();\n const { data: imageBlob, isPending } = useDownloadFileBlobQuery(image.id, {\n workspaceId,\n threadId,\n });\n\n const objectUrl = useMemo(\n () => (imageBlob ? URL.createObjectURL(imageBlob) : null),\n [imageBlob]\n );\n useEffect(() => {\n return () => {\n if (objectUrl) URL.revokeObjectURL(objectUrl);\n };\n }, [objectUrl]);\n\n return (\n <div\n style={{\n padding: '0.5em',\n alignContent: 'center',\n }}\n >\n {!image?.id && <Skeleton className=\"h-10 w-10\" />}\n {isPending && 'Loading...'}\n {!isPending && !imageBlob && (\n <span style={{ fontSize: '0.75em' }}>Failed to load image</span>\n )}\n {!isPending && imageBlob && (\n <img\n style={{\n maxWidth: '100%',\n maxHeight: '20em',\n }}\n alt={image.name ?? 'Image'}\n src={objectUrl || undefined}\n />\n )}\n </div>\n );\n};\n","import {\n ChevronUp,\n ExternalLink,\n FileArchive,\n FileAudio,\n FileCode,\n FileImage,\n FileSpreadsheet,\n FileText,\n FileVideo,\n Presentation,\n} from 'lucide-react';\nimport { useState } from 'react';\n\nimport { useChatContext } from '@/platform/chat';\n\nimport { useFileMutations } from '@/domains/files/mutations';\nimport { MessageResponseSourceType } from '@/domains/messages/enums';\n// Keeping this component generic; adjust type if needed in the future\n\nimport { cn } from '@/shared/utils/utils';\n\nexport type MessageResponseSource = {\n index: number;\n datasetItemId?: string;\n containerItemId?: string | null;\n flowRunId?: string;\n file?: { id: string; name: string } | null;\n url?: string | null;\n sourceType: MessageResponseSourceType;\n};\n\n// Utility function to get file type icon (mirrors Spencers-Ui behavior)\nconst getFileIcon = (fileName: string) => {\n const extension = fileName.split('.').pop()?.toLowerCase();\n\n // Image files\n if (\n ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'svg'].includes(\n extension || ''\n )\n ) {\n return FileImage;\n }\n\n // Video files\n if (\n ['mp4', 'avi', 'mov', 'wmv', 'flv', 'webm', 'mkv'].includes(extension || '')\n ) {\n return FileVideo;\n }\n\n // Audio files\n if (['mp3', 'wav', 'flac', 'aac', 'ogg', 'wma'].includes(extension || '')) {\n return FileAudio;\n }\n\n // Archive files\n if (['zip', 'rar', '7z', 'tar', 'gz', 'bz2'].includes(extension || '')) {\n return FileArchive;\n }\n\n // Code files\n if (\n [\n 'js',\n 'ts',\n 'jsx',\n 'tsx',\n 'py',\n 'java',\n 'cpp',\n 'c',\n 'cs',\n 'php',\n 'html',\n 'css',\n 'json',\n 'xml',\n 'md',\n ].includes(extension || '')\n ) {\n return FileCode;\n }\n\n // Spreadsheet files\n if (['xlsx', 'xls', 'csv'].includes(extension || '')) {\n return FileSpreadsheet;\n }\n\n // Presentation files\n if (['pptx', 'ppt'].includes(extension || '')) {\n return Presentation;\n }\n\n // Default document icon\n return FileText;\n};\n\nfunction getSafeUrl(url: string): string | null {\n try {\n const parsed = new URL(url);\n if (parsed.protocol === 'https:' || parsed.protocol === 'http:') {\n return parsed.href;\n }\n return null;\n } catch {\n return null;\n }\n}\n\nfunction getDisplayName(source: MessageResponseSource): string {\n if (source.file?.name) return source.file.name;\n if (source.url) {\n try {\n const parsed = new URL(source.url);\n return parsed.hostname + (parsed.pathname !== '/' ? parsed.pathname : '');\n } catch {\n return source.url;\n }\n }\n return `Source ${source.index}`;\n}\n\nfunction isFileSource(\n s: MessageResponseSource\n): s is MessageResponseSource & { file: { id: string; name: string } } {\n return s.sourceType === MessageResponseSourceType.File && !!s.file;\n}\n\nfunction isLinkSource(s: MessageResponseSource): boolean {\n return (\n (s.sourceType === MessageResponseSourceType.URL ||\n s.sourceType === MessageResponseSourceType.WebExternal) &&\n !!s.url\n );\n}\n\nexport function ChatMessageSources({\n sources,\n}: {\n sources: MessageResponseSource[];\n}) {\n const { workspaceId, threadId } = useChatContext();\n const { downloadFileMutation } = useFileMutations({ workspaceId, threadId });\n const [isExpanded, setIsExpanded] = useState(true);\n\n const displaySources = (sources ?? []).filter(\n (s) => isFileSource(s) || isLinkSource(s)\n );\n\n if (displaySources.length === 0) return null;\n\n return (\n <div className=\"mt-4 rounded-lg border border-border bg-muted/30 overflow-hidden\">\n {/* Header bar */}\n <button\n type=\"button\"\n onClick={() => setIsExpanded(!isExpanded)}\n className=\"w-full flex items-center justify-between px-3 py-2 bg-muted/50 hover:bg-muted/70 transition-colors\"\n >\n <div className=\"flex items-center gap-1.5\">\n <span className=\"text-sm font-medium text-foreground\">Sources</span>\n <span className=\"flex items-center justify-center min-w-[16px] h-3.5 px-0.5 rounded-full bg-background text-[10px] font-medium text-foreground leading-none\">\n {displaySources.length}\n </span>\n </div>\n <ChevronUp\n className={cn(\n 'h-4 w-4 text-muted-foreground transition-transform',\n !isExpanded && 'rotate-180'\n )}\n />\n </button>\n\n {/* Content area */}\n {isExpanded && (\n <div className=\"bg-background px-3 py-0.5\">\n <ul\n className=\"list-none space-y-1 m-0 p-0\"\n style={{ paddingLeft: 0, marginLeft: 0 }}\n >\n {displaySources.map((source) => {\n const displayName = getDisplayName(source);\n\n if (isFileSource(source)) {\n const Icon = getFileIcon(source.file.name);\n return (\n <li\n key={`${source.file.id}-${source.index}`}\n className=\"list-none text-sm text-foreground m-0 p-0 flex items-center gap-1.5\"\n style={{ paddingLeft: 0, marginLeft: 0 }}\n >\n <span>{`(${source.index})`} : </span>\n {Icon && (\n <Icon className=\"h-3.5 w-3.5 text-muted-foreground flex-shrink-0\" />\n )}\n <button\n type=\"button\"\n title={displayName}\n onClick={() => downloadFileMutation.mutate(source.file)}\n className=\"text-foreground hover:bg-muted/50 rounded px-1 py-0.5 cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed\"\n disabled={downloadFileMutation.isPending}\n >\n {displayName}\n </button>\n </li>\n );\n }\n\n const safeHref = source.url ? getSafeUrl(source.url) : null;\n\n return (\n <li\n key={`url-${source.index}`}\n className=\"list-none text-sm text-foreground m-0 p-0 flex items-center gap-1.5\"\n style={{ paddingLeft: 0, marginLeft: 0 }}\n >\n <span>{`(${source.index})`} : </span>\n <ExternalLink className=\"h-3.5 w-3.5 text-muted-foreground flex-shrink-0\" />\n {safeHref ? (\n <a\n title={source.url ?? displayName}\n href={safeHref}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"text-foreground hover:bg-muted/50 rounded px-1 py-0.5 underline underline-offset-2\"\n >\n {displayName}\n </a>\n ) : (\n <span className=\"text-foreground rounded px-1 py-0.5\">\n {displayName}\n </span>\n )}\n </li>\n );\n })}\n </ul>\n </div>\n )}\n </div>\n );\n}\n","// src/ui/messages/MessageList/MessageBubble.tsx\nimport { JsonSchema } from '@jsonforms/core';\nimport { JsonForms } from '@jsonforms/react';\nimport Button from '@mui/material/Button';\nimport { FC, useEffect, useRef, useState } from 'react';\n\nimport { FileInfo } from '@/domains/files';\nimport { getFileIcon } from '@/domains/files/utils';\nimport { getDefaultValues } from '@/domains/json_forms/utils';\nimport { MessageContentItem } from '@/domains/messages';\nimport { MessageValueType } from '@/domains/messages/enums';\n\nimport { MessageMarkdown } from '@/shared/markdown/MessageMarkdown';\nimport {\n Avatar,\n AvatarFallback,\n AvatarImage,\n} from '@/shared/mui-compat/avatar';\nimport { getInitials } from '@/shared/utils/initials';\nimport { parseDateTime } from '@/shared/utils/parseDateTime';\nimport { getUserPhotoUrl } from '@/shared/utils/userPhoto';\nimport { cn } from '@/shared/utils/utils';\n\nimport { cells, renderers } from '@/chat-variables/renders';\n\nimport { ChatMessageCopyButton } from './MessageCopyButton';\nimport { ChatMessageFileDownload } from './MessageFileDownload';\nimport { ChatMessageImage } from './MessageImage';\nimport type { MessageResponseSource } from './MessageSources';\nimport { ChatMessageSources } from './MessageSources';\n\ntype UserOutputPayload = {\n message: string;\n schema: unknown;\n};\n\nexport interface MessageBubbleProps {\n createdBy: string;\n createdAt: Date;\n type: MessageValueType;\n content: MessageContentItem[];\n sources: MessageResponseSource[];\n userOutput: UserOutputPayload | null;\n userInput?: unknown;\n files: FileInfo[];\n createdByUserId?: string | null;\n chatbotName?: string;\n onSubmitUserForm?: (name: string, value: unknown) => void;\n}\n\nexport const MessageBubble: FC<MessageBubbleProps> = (props) => {\n const {\n createdBy,\n createdAt,\n type,\n content,\n sources,\n files,\n createdByUserId,\n chatbotName = 'Chatbot',\n userOutput,\n userInput,\n onSubmitUserForm,\n } = props;\n const [responseFormData, setResponseFormData] = useState<unknown>(userInput);\n const [responseFormValid, setResponseFormValid] = useState<boolean>(false);\n const contentRef = useRef<HTMLDivElement>(null);\n const isBotResponse = type === MessageValueType.OUTPUT;\n const showForm = userOutput;\n\n useEffect(() => {\n if (!userOutput || userInput !== undefined) return;\n setResponseFormData(getDefaultValues(userOutput.schema as JsonSchema));\n }, [userOutput, userInput]);\n\n const contentIsList =\n Array.isArray(content) && content.every((it) => it?.text || it?.image);\n\n return (\n <div\n className={cn(\n isBotResponse ? 'border bg-background shadow-md' : '',\n 'rounded-lg mb-4 group'\n )}\n >\n <div\n className={cn(\n isBotResponse ? 'border-b' : '',\n 'flex items-center justify-between p-3'\n )}\n >\n <div className=\"flex items-center gap-2\">\n <Avatar className=\"h-7 w-7 mt-0.5\">\n {!isBotResponse && createdByUserId ? (\n <AvatarImage\n src={getUserPhotoUrl(createdByUserId)}\n alt={createdBy}\n >\n <AvatarFallback className=\"text-xs\">\n {getInitials(createdBy)}\n </AvatarFallback>\n </AvatarImage>\n ) : (\n <AvatarFallback className=\"text-xs\">\n {getInitials(isBotResponse ? chatbotName : createdBy)}\n </AvatarFallback>\n )}\n </Avatar>\n <div className=\"flex flex-col\">\n <span className=\"text-xs font-medium\">\n {isBotResponse ? chatbotName : createdBy}\n </span>\n <span className=\"text-xs text-muted-foreground\">\n {createdAt\n ? parseDateTime(createdAt, 'Do MMMM YYYY, h:mm a')\n : ''}\n </span>\n </div>\n </div>\n <ChatMessageCopyButton content={content} contentRef={contentRef} />\n </div>\n\n <div className={cn(isBotResponse ? 'p-4' : 'px-4 py-2')}>\n <div ref={contentRef}>\n {contentIsList &&\n content?.map((item, i) =>\n item.text ? (\n <div\n key={`content-${i}`}\n className=\"prose prose-sm max-w-none dark:prose-invert text-sm leading-relaxed mb-3 last:mb-0\"\n >\n <MessageMarkdown value={item.text} />\n </div>\n ) : item.image ? (\n <div key={`image-${i}`} className=\"mb-3 last:mb-0\">\n <ChatMessageImage image={item.image} />\n </div>\n ) : null\n )}\n </div>\n\n {files.length > 0 && (\n <div className=\"ss-chat-message__attachments mt-4 space-y-2\">\n <h4 className=\"text-xs font-semibold text-muted-foreground mb-1\">\n Attachments\n </h4>\n {files.map((file, idx) => {\n const Icon = getFileIcon(file.name || '');\n return (\n <div\n key={file.id || idx}\n className=\"flex items-center justify-between gap-3 p-1 bg-muted/60 border border-muted rounded-lg shadow-sm hover:shadow-md transition-shadow\"\n >\n <div className=\"flex items-center gap-3 overflow-hidden\">\n <div className=\"bg-muted rounded-md p-1.5\">\n <Icon className=\"h-4 w-4 text-muted-foreground\" />\n </div>\n <div className=\"flex flex-col\">\n <span className=\"text-sm font-medium text-foreground truncate max-w-[220px] sm:max-w-xs\">\n {file.name || 'Untitled'}\n </span>\n </div>\n </div>\n <ChatMessageFileDownload file={file} />\n </div>\n );\n })}\n </div>\n )}\n\n {showForm && (\n <div className=\"mt-4 pt-4 border-t border-border\">\n <JsonForms\n schema={userOutput.schema as JsonSchema}\n data={responseFormData}\n renderers={renderers}\n cells={cells}\n readonly={userInput !== undefined}\n onChange={({ data, errors }) => {\n setResponseFormData(data);\n setResponseFormValid(!errors?.length);\n }}\n />\n <div className=\"flex justify-end mt-2\">\n <Button\n variant=\"outlined\"\n size=\"small\"\n disabled={userInput !== undefined || !responseFormValid}\n className={cn(\n userInput !== undefined && 'opacity-60 cursor-not-allowed'\n )}\n onClick={() => onSubmitUserForm?.('_user', responseFormData)}\n >\n Send\n </Button>\n </div>\n </div>\n )}\n\n {sources.length > 0 && <ChatMessageSources sources={sources} />}\n </div>\n </div>\n );\n};\n","import { Loader2 } from 'lucide-react';\nimport { FC } from 'react';\n\nimport { cn } from '@/shared/utils/utils';\n\ninterface MessageStatusProps {\n text: string;\n}\n\nexport const MessageStatus: FC<MessageStatusProps> = ({ text }) => (\n <div className={cn('flex items-center gap-2 py-2 px-3')}>\n <Loader2 className=\"h-3.5 w-3.5 animate-spin text-muted-foreground\" />\n <span className=\"text-sm italic text-muted-foreground\">{text}</span>\n </div>\n);\n","// src/ui/messages/MessageList/MessageItem.tsx\n\nimport { FC, ReactNode } from 'react';\n\nimport { useChatContext } from '@/platform/chat';\n\nimport { FileInfo } from '@/domains/files';\nimport { Message, MessageContentItem } from '@/domains/messages';\nimport { MessageValueType } from '@/domains/messages/enums';\nimport { getMessageErrorText } from '@/domains/messages/errors';\nimport { useAddInputToMessage } from '@/domains/messages/mutations';\nimport { useWorkspace } from '@/domains/workspaces';\n\nimport { getChatbotName } from '@/theme/public-config';\n\n// local UI\nimport { MessageBubble } from './MessageBubble';\nimport type { MessageResponseSource } from './MessageSources';\nimport { MessageStatus } from './MessageStatus';\n\ninterface MessageItemProps {\n message: Message;\n /**\n * True when this is the most recent message in the thread AND the flow\n * is still running. Gates the trailing transient status node — without\n * this, a stuck `status` value in `message.values` (e.g. one tool's\n * \"running\" status that arrived after another tool's content during a\n * parallel-tool-call run, with no clearing frame from the backend)\n * would render as a permanent bubble below the response.\n */\n isLive?: boolean;\n}\n\n/** shallow-enough equality for small channel maps like { stream: 0 } */\nfunction channelsEqual(\n a: Record<string, number> = {},\n b: Record<string, number> = {}\n) {\n const aKeys = Object.keys(a);\n const bKeys = Object.keys(b);\n if (aKeys.length !== bKeys.length) return false;\n for (const k of aKeys) {\n if (a[k] !== b[k]) return false;\n }\n return true;\n}\n\n/** push value(s) into content items, normalizing shapes */\nfunction pushContent(items: MessageContentItem[], value: unknown) {\n if (value == null) return;\n if (typeof value === 'string') {\n items.push({ text: value });\n return;\n }\n if (Array.isArray(value)) {\n // assume already MessageContentItem[]\n items.push(...(value as MessageContentItem[]));\n return;\n }\n if (typeof value === 'object') {\n const v = value as Record<string, unknown>;\n const text = typeof v.text === 'string' ? v.text : undefined;\n const imageRaw = v.image;\n const image =\n imageRaw &&\n typeof imageRaw === 'object' &&\n typeof (imageRaw as Record<string, unknown>).id === 'string' &&\n typeof (imageRaw as Record<string, unknown>).name === 'string'\n ? (imageRaw as { id: string; name: string })\n : undefined;\n\n if (text !== undefined || image !== undefined) {\n items.push({\n ...(text !== undefined ? { text } : {}),\n ...(image ? { image } : {}),\n });\n return;\n }\n items.push({ text: JSON.stringify(value) });\n return;\n }\n items.push({ text: String(value) });\n}\n\nfunction isMessageResponseSource(x: unknown): x is MessageResponseSource {\n if (!x || typeof x !== 'object') return false;\n const obj = x as Record<string, unknown>;\n return typeof obj.index === 'number' && typeof obj.sourceType === 'string';\n}\n\nfunction coerceSources(x: unknown): MessageResponseSource[] {\n if (!Array.isArray(x)) return [];\n return x.filter(isMessageResponseSource);\n}\n\nexport const MessageItem: FC<MessageItemProps> = ({\n message,\n isLive = false,\n}) => {\n const { workspaceId, threadId } = useChatContext();\n const { data: workspace } = useWorkspace(workspaceId);\n const chatbotName = getChatbotName(workspace?.name);\n const { addInputToMessageMutation } = useAddInputToMessage();\n\n const onSubmitUserForm =\n (messageId: string) => (name: string, value: unknown) => {\n if (!threadId || !messageId) return;\n addInputToMessageMutation.mutate({\n threadId,\n messageId,\n name,\n value,\n channels: {},\n });\n };\n\n const safeTime = (d: Date) => {\n const t = d.getTime();\n return Number.isFinite(t) ? t : 0;\n };\n\n // Sort and collapse duplicate (name, type) entries, retaining the LAST\n // occurrence of each. Streaming responses can produce one OUTPUT value\n // per chunk under the same (name, type); without this, each chunk\n // renders as its own bubble (cumulative-text ladder).\n const sortedValues = (message.values ?? [])\n .slice()\n .sort((a, b) => safeTime(a.createdAt) - safeTime(b.createdAt));\n const slotByKey = new Map<string, number>();\n const values: typeof sortedValues = [];\n for (const v of sortedValues) {\n const key = `${v.name}|${v.type}`;\n const existing = slotByKey.get(key);\n if (existing !== undefined) {\n values[existing] = v;\n } else {\n slotByKey.set(key, values.length);\n values.push(v);\n }\n }\n\n const bubbles: ReactNode[] = [];\n\n // current aggregation group\n let groupContent: MessageContentItem[] = [];\n let groupSources: MessageResponseSource[] = [];\n let groupFiles: FileInfo[] = [];\n let groupType: MessageValueType = MessageValueType.INPUT;\n let lastCreatedAt: Date = message.createdAt;\n let lastCreatedBy = '';\n let lastCreatedByUserId: string | null | undefined = message.createdByUserId;\n\n // whether we have a pending group that hasn't been flushed to bubbles\n let groupOpen = false;\n let keyCounter = 0;\n\n // transient status: only the last status is kept, cleared when content follows\n let lastStatusNode: ReactNode | null = null;\n\n const flush = (nextType: MessageValueType) => {\n bubbles.push(\n <MessageBubble\n key={`bubble-${message.id ?? 'msg'}-${keyCounter++}`}\n createdBy={lastCreatedBy}\n createdByUserId={lastCreatedByUserId}\n createdAt={lastCreatedAt}\n type={groupType}\n content={groupContent}\n files={groupFiles}\n sources={groupSources}\n chatbotName={chatbotName}\n userOutput={null}\n userInput={null}\n />\n );\n groupContent = [];\n groupFiles = [];\n groupSources = [];\n groupType = nextType;\n groupOpen = false;\n };\n\n for (const v of values) {\n // If the value's type changes and there's a pending group → flush first\n if (groupOpen && groupType !== v.type) {\n flush(v.type);\n }\n\n groupType = v.type;\n const name = v.name.toLowerCase();\n\n switch (name) {\n case 'variables':\n case 'userinfo': {\n // Internal system inputs — never render\n continue;\n }\n case 'status': {\n if (groupOpen) flush(v.type);\n lastStatusNode = (\n <MessageStatus\n key={`status-${message.id ?? 'msg'}-${keyCounter++}`}\n text={String(v.value ?? '')}\n />\n );\n continue;\n }\n case 'prompt':\n case 'response':\n case 'content': {\n lastStatusNode = null;\n // These start a “fresh” content section\n if (groupContent.length > 0) flush(v.type);\n\n if (v.value == null) {\n pushContent(groupContent, {\n text: `<span style=\"color:red\">🐞 Failed to generate response</span>`,\n });\n } else if (\n name === 'response' &&\n typeof v.value === 'object' &&\n v.value !== null &&\n 'content' in (v.value as Record<string, unknown>)\n ) {\n const resp = v.value as Record<string, unknown>;\n pushContent(groupContent, resp.content);\n groupSources = coerceSources(resp.sources);\n } else {\n pushContent(groupContent, v.value);\n }\n\n groupOpen = true;\n break;\n }\n\n case '_user': {\n // user interaction packets are rendered as their own bubble\n // try to find the matching INPUT user value in the same channel map\n if (v.type !== MessageValueType.INPUT) {\n const userInput = values.find(\n (u) =>\n u.name === '_user' &&\n u.type === MessageValueType.INPUT &&\n channelsEqual(u.channels, v.channels)\n );\n\n bubbles.push(\n <MessageBubble\n key={`user-${message.id ?? 'msg'}-${keyCounter++}`}\n createdBy={v.createdBy}\n createdByUserId={v.createdByUserId}\n createdAt={v.createdAt}\n type={v.type}\n content={[\n {\n text:\n typeof (v.value as Record<string, unknown> | null)\n ?.message === 'string'\n ? String((v.value as Record<string, unknown>).message)\n : '',\n },\n ]}\n files={[]}\n sources={[]}\n userOutput={\n v.value && typeof v.value === 'object'\n ? (v.value as unknown as { message: string; schema: unknown })\n : null\n }\n chatbotName={chatbotName}\n userInput={userInput?.value}\n onSubmitUserForm={onSubmitUserForm(message.id ?? '')}\n />\n );\n }\n // do not mark groupOpen; this stands alone\n break;\n }\n\n case 'files': {\n groupFiles = Array.isArray(v.value)\n ? (v.value as FileInfo[])\n : [v.value as FileInfo];\n groupOpen = true;\n break;\n }\n\n case 'sources': {\n groupSources = coerceSources(v.value);\n groupOpen = true;\n break;\n }\n\n default: {\n lastStatusNode = null;\n // any other named value: append to current content,\n // but if we already have content from previous, keep grouping by type\n pushContent(groupContent, v.value);\n groupOpen = true;\n break;\n }\n }\n\n lastCreatedAt = v.createdAt;\n lastCreatedBy = v.createdBy;\n lastCreatedByUserId = v.createdByUserId;\n }\n\n // Final pending group\n if (groupOpen) {\n bubbles.push(\n <MessageBubble\n key={`bubble-final-${message.id ?? 'msg'}-${keyCounter++}`}\n createdBy={lastCreatedBy}\n createdByUserId={lastCreatedByUserId}\n createdAt={lastCreatedAt}\n type={groupType}\n content={groupContent}\n files={groupFiles}\n sources={groupSources}\n chatbotName={chatbotName}\n userOutput={null}\n userInput={null}\n />\n );\n }\n\n // Show the trailing transient status only while this message is live\n // (last in the thread + flow still running). Once the flow ends, any\n // status value left over in `message.values` is stale — typically from\n // parallel tool calls where one tool's status arrived after another's\n // content and there was no clearing frame to overwrite it. Without this\n // gate that stale status would render as a permanent bubble.\n if (lastStatusNode && isLive) {\n bubbles.push(lastStatusNode);\n }\n\n // Domain errors → system bubbles at the end\n for (const error of message.errors ?? []) {\n bubbles.push(\n <MessageBubble\n key={`error-${message.id ?? 'msg'}-${error.code}`}\n createdBy={chatbotName}\n createdAt={message.createdAt}\n type={MessageValueType.OUTPUT}\n content={[{ text: getMessageErrorText(error.code) }]}\n files={[]}\n sources={[]}\n chatbotName={chatbotName}\n userOutput={null}\n userInput={null}\n />\n );\n }\n\n return bubbles;\n};\n\nexport default MessageItem;\n","import * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area';\nimport { AlertTriangle } from 'lucide-react';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { useChatContext } from '@/platform/chat';\n\nimport { useMessages } from '@/domains/messages';\nimport { useThread, useThreadIsRunning } from '@/domains/threads/queries';\nimport { useWorkspace } from '@/domains/workspaces/queries';\n\nimport { useIsMobile } from '@/shared/hooks/useIsMobile';\nimport { MessageMarkdown } from '@/shared/markdown/MessageMarkdown';\nimport { Skeleton } from '@/shared/mui-compat/skeleton';\n\nimport { getBackgroundGradientClasses } from '@/theme/tag-styles';\n\nimport { MessageItem } from './MessageItem';\n\nexport type MessageListProps = {\n /**\n * Apply a solid-base + tag-driven gradient to the message body. Set this\n * when embedding inside a host whose default page background can show\n * through and skew the perceived chat color (e.g. Microsoft Teams web\n * client). Defaults to false — the standard browser app doesn't need it.\n */\n applyHostBackgroundOverride?: boolean;\n /**\n * Use the wider desktop max-width (90% instead of 70%). Set this when the\n * chat is rendered in a layout where horizontal room is constrained by\n * other panels (e.g. a sidebar is open beside it). Standalone fork passes\n * `leftOpen || rightOpen` from `useSidebar()`; the sandbox doesn't have\n * sidebars, so it omits the prop and gets the natural 70% width.\n */\n expandedLayout?: boolean;\n /**\n * Set to `true` while the host is mid-redirect from a \"no thread selected\"\n * route to the first thread of a workspace — the message list shows a\n * loading skeleton instead of the empty-state during that brief window so\n * users don't see a \"No messages yet\" flash.\n *\n * Standalone web fork passes this from `useMatch('/.../_layout/')` to\n * detect the workspace-index route specifically. The sandbox/admin doesn't\n * have multi-thread navigation, so it omits the prop entirely (defaults\n * `false` — no router coupling).\n */\n isChoosingThread?: boolean;\n};\n\nexport function MessageList({\n applyHostBackgroundOverride = false,\n expandedLayout = false,\n isChoosingThread = false,\n}: MessageListProps = {}) {\n const { workspaceId, threadId } = useChatContext();\n const contentRef = useRef<HTMLDivElement | null>(null);\n const viewportRef = useRef<HTMLDivElement | null>(null);\n const scrollTopRef = useRef<number>(0);\n const messagesEndRef = useRef<HTMLDivElement | null>(null);\n const prevMessageCountRef = useRef<number>(0);\n const hasInitialScrollRef = useRef<boolean>(false);\n // Per-thread high-water mark of \"have we ever rendered messages?\". Once\n // true, the loading / error / empty fallback branches stop returning a\n // different DOM tree — instead we fall through to the ScrollArea with\n // whatever's currently in cache (possibly empty for a frame). This both\n // hides the transient \"Failed to load messages\" flash that surfaces from\n // SSE/SignalR/mutation cache races at flow completion, and preserves the\n // viewport's scrollTop across those blips so the user doesn't get\n // bounced back to the top of the conversation. Reset on threadId change\n // so a brand-new draft thread still gets its welcome screen on first\n // paint.\n const everHadMessagesRef = useRef<{ threadId: string; had: boolean }>({\n threadId: '',\n had: false,\n });\n const isMobile = useIsMobile();\n\n const { data: activeWorkspace } = useWorkspace(workspaceId);\n\n const [isAtBottom, setIsAtBottom] = useState(true);\n\n const {\n data: thread,\n isPending: threadPending,\n isFetching: threadFetching,\n error: threadError,\n } = useThread({ workspaceId, threadId });\n const isRunning = useThreadIsRunning(workspaceId, threadId);\n const {\n data: messages,\n isPending: messagesPending,\n isFetching: messagesFetching,\n error: messagesError,\n } = useMessages(threadId);\n\n // When the host page can bleed a dark background through (e.g. Teams web),\n // render our own solid base + tag-driven gradient on the message body so\n // the perceived chat color matches the standalone web UI. Driven by the\n // `applyHostBackgroundOverride` prop — the chat tree itself stays\n // host-agnostic.\n const hostBg = useMemo(() => {\n if (!applyHostBackgroundOverride) return '';\n const grad = getBackgroundGradientClasses({\n tags: activeWorkspace?.tags,\n name: activeWorkspace?.name,\n });\n return `bg-white bg-gradient-to-b from-white from-10% ${grad} via-40% to-100%`;\n }, [\n applyHostBackgroundOverride,\n activeWorkspace?.tags,\n activeWorkspace?.name,\n ]);\n\n const scrollToBottom = useCallback((behavior: ScrollBehavior = 'auto') => {\n const viewport = viewportRef.current;\n if (!viewport) return;\n const maxScrollTop = Math.max(\n 0,\n viewport.scrollHeight - viewport.clientHeight\n );\n viewport.scrollTo({ top: maxScrollTop, behavior });\n }, []);\n\n // Initial: if we have messages, start at the bottom.\n useEffect(() => {\n if (hasInitialScrollRef.current) return;\n if (!viewportRef.current) return;\n if (!messages?.length) return;\n hasInitialScrollRef.current = true;\n requestAnimationFrame(() => scrollToBottom('auto'));\n }, [messages?.length, scrollToBottom]);\n\n // When new messages arrive and user is already at bottom, keep them pinned to bottom.\n useEffect(() => {\n const count = messages?.length ?? 0;\n const prev = prevMessageCountRef.current;\n prevMessageCountRef.current = count;\n\n if (!viewportRef.current) return;\n if (!count) return;\n\n // Only auto-scroll if user hasn't scrolled up.\n if (!isAtBottom) return;\n\n // Smooth for incremental growth, auto for initial/large jumps.\n const behavior: ScrollBehavior =\n prev > 0 && count > prev ? 'smooth' : 'auto';\n requestAnimationFrame(() => scrollToBottom(behavior));\n }, [messages?.length, isAtBottom, scrollToBottom]);\n\n // When the thread starts \"running\" (typing indicator appears) but message count doesn't change,\n // still ensure we reveal the loading dots if the user is at the bottom.\n useEffect(() => {\n if (!isRunning) return;\n if (!isAtBottom) return;\n requestAnimationFrame(() => scrollToBottom('smooth'));\n }, [isRunning, isAtBottom, scrollToBottom]);\n\n // Also keep pinned when content height changes (streaming tokens, images, typing indicator).\n useEffect(() => {\n const viewport = viewportRef.current;\n const content = contentRef.current;\n if (!viewport || !content) return;\n if (typeof ResizeObserver === 'undefined') return;\n\n const ro = new ResizeObserver(() => {\n if (!isAtBottom) return;\n scrollToBottom('auto');\n });\n ro.observe(content);\n return () => ro.disconnect();\n }, [isAtBottom, scrollToBottom]);\n\n const safeMessages = messages ?? [];\n\n // Track per-thread whether we've ever rendered ≥1 message. Once true, fall\n // through to the ScrollArea below for the rest of the thread's lifetime so\n // transient cache states (refetch error, momentarily empty cache from a\n // stale write at flow completion) don't unmount the viewport and bounce\n // the user back to the top.\n if (everHadMessagesRef.current.threadId !== threadId) {\n everHadMessagesRef.current = { threadId, had: safeMessages.length > 0 };\n } else if (safeMessages.length > 0) {\n everHadMessagesRef.current.had = true;\n }\n const hadMessagesBefore = everHadMessagesRef.current.had;\n\n // Avoid flicker: if we already have data, keep rendering it while refetching.\n // `isChoosingThread` is opt-in via prop — see MessageListProps for usage.\n const isLoading =\n isChoosingThread ||\n ((threadPending || threadFetching) && !thread) ||\n ((messagesPending || messagesFetching) && messages === undefined);\n\n if (isLoading && !hadMessagesBefore) {\n return (\n <div\n className={`ss-chat__body flex-shrink-10 flex-1 overflow-y-auto ${hostBg}`}\n data-ss-layer=\"message-list\"\n >\n <div className=\"space-y-8 p-4\">\n {[1, 2, 3].map((i) => (\n <div key={i} className=\"flex gap-3\">\n <Skeleton className=\"h-8 w-8 rounded-full\" />\n <div className=\"space-y-2 flex-1\">\n <Skeleton className=\"h-4 w-24\" />\n <Skeleton className=\"h-20 w-full\" />\n </div>\n </div>\n ))}\n </div>\n </div>\n );\n }\n if ((threadError || messagesError) && !hadMessagesBefore) {\n return (\n <div className=\"flex flex-1 items-center justify-center p-6\">\n <div className=\"w-full max-w-md space-y-3\">\n {threadError && (\n <div className=\"flex items-center gap-2 rounded-md border border-destructive/30 bg-destructive/10 px-3 py-2 text-destructive\">\n <AlertTriangle className=\"h-4 w-4\" />\n <span className=\"text-sm font-medium\">Failed to load thread</span>\n </div>\n )}\n {messagesError && (\n <div className=\"flex items-center gap-2 rounded-md border border-destructive/30 bg-destructive/10 px-3 py-2 text-destructive\">\n <AlertTriangle className=\"h-4 w-4\" />\n <span className=\"text-sm font-medium\">\n Failed to load messages\n </span>\n </div>\n )}\n </div>\n </div>\n );\n }\n\n if (safeMessages.length === 0 && !hadMessagesBefore) {\n return (\n <div className=\"flex overflow-auto flex-shrink-10 flex-col p-8 text-center\">\n <h3 className=\"text-lg font-medium mb-2\">\n {activeWorkspace?.name ?? 'No messages yet'}\n </h3>\n {activeWorkspace?.firstPrompt && (\n <div className=\"max-w-3xl mx-auto p-4\">\n <MessageMarkdown value={activeWorkspace.firstPrompt} />\n </div>\n )}\n </div>\n );\n }\n\n return (\n <div\n className={`ss-chat__body ${hostBg}`}\n data-ss-layer=\"message-list\"\n style={{\n flex: 1,\n minHeight: 0,\n minWidth: 0,\n height: '100%',\n width: '100%',\n overflow: 'hidden',\n }}\n >\n <ScrollAreaPrimitive.Root\n data-ss-layer=\"scroll-root\"\n className=\"relative overflow-hidden h-full w-full\"\n >\n <ScrollAreaPrimitive.Viewport\n ref={viewportRef}\n data-ss-layer=\"scroll-viewport\"\n className=\"h-full w-full rounded-[inherit] overflow-y-auto\"\n onScroll={() => {\n if (!viewportRef.current) return;\n const viewport = viewportRef.current;\n\n scrollTopRef.current = viewport.scrollTop;\n\n const threshold = 60; // px from bottom to still count as 'at bottom'\n const distanceFromBottom =\n viewport.scrollHeight -\n viewport.scrollTop -\n viewport.clientHeight;\n setIsAtBottom(distanceFromBottom < threshold);\n }}\n >\n <div\n ref={contentRef}\n className={`flex flex-col w-full ${\n !isMobile\n ? `${expandedLayout ? 'max-w-[90%]' : 'max-w-[70%]'} mx-auto`\n : ''\n } px-2 sm:px-3 md:px-4 transition-[max-width] duration-300 ease-in-out`}\n >\n {safeMessages.map((message, index) => {\n const isLastMessage = index === safeMessages.length - 1;\n const isLive = isLastMessage && isRunning;\n return (\n <div\n className=\"ss-chat__message w-full\"\n key={message.id || index}\n >\n <MessageItem message={message} isLive={isLive} />\n\n {isLastMessage && isRunning && (\n <div className=\"p-3 min-h-3\">\n <div className=\"flex space-x-2 p-1\">\n {[0, 300, 600].map((delay) => (\n <div\n key={delay}\n className=\"h-2 w-2 rounded-full bg-primary/40 animate-bounce\"\n style={{ animationDelay: `${delay}ms` }}\n />\n ))}\n </div>\n </div>\n )}\n\n <div ref={messagesEndRef} className=\"h-1\" />\n </div>\n );\n })}\n </div>\n </ScrollAreaPrimitive.Viewport>\n\n <ScrollAreaPrimitive.Scrollbar\n orientation=\"vertical\"\n className=\"flex touch-none select-none transition-colors h-full w-2.5 border-l border-l-transparent p-[1px]\"\n >\n <ScrollAreaPrimitive.Thumb className=\"relative flex-1 rounded-full bg-border\" />\n </ScrollAreaPrimitive.Scrollbar>\n\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n </div>\n );\n}\n","/**\n * Skeleton for the message list loading state.\n * Three message-shaped rows; use theme tokens only (no px, no Tailwind).\n */\n\nimport { Box, Skeleton, useTheme } from '@mui/material';\n\nexport function MessageListSkeleton() {\n const theme = useTheme();\n const s = theme.spacing;\n\n return (\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 2, p: 2 }}>\n {[1, 2, 3].map((i) => (\n <Box\n key={i}\n sx={{\n display: 'flex',\n gap: 1.5,\n alignItems: 'flex-start',\n }}\n >\n <Skeleton\n variant=\"circular\"\n sx={{ width: s(4), height: s(4), flexShrink: 0 }}\n />\n <Box\n sx={{ flex: 1, display: 'flex', flexDirection: 'column', gap: 1 }}\n >\n <Skeleton variant=\"text\" sx={{ width: '25%', height: s(2) }} />\n <Skeleton\n variant=\"rectangular\"\n sx={{ width: '100%', height: s(10), borderRadius: 1 }}\n />\n </Box>\n </Box>\n ))}\n </Box>\n );\n}\n","import { ChatZod } from '@smartspace/api-client';\nimport type { z } from 'zod';\n\nimport { utcDate } from '@/shared/utils/dateFromApi';\n\nimport { MessageValueType } from './enums';\nimport { Message, MessageValue } from './model';\n\nconst {\n messageThreadsThreadMessagesIdMessagesResponse: messagesResponseSchema,\n} = ChatZod;\n\ntype MessagesResponseDto = z.infer<typeof messagesResponseSchema>;\ntype MessageDto = MessagesResponseDto['data'][number];\ntype MessageValueDto = NonNullable<MessageDto['values']>[number];\ntype MessageErrorDto = NonNullable<MessageDto['errors']>[number];\n\nexport type MessageError = NonNullable<Message['errors']>[number];\n\nconst toChannelNumber = (value: unknown): number => {\n if (typeof value === 'number') return value;\n if (typeof value === 'string') {\n const parsed = Number(value);\n return Number.isNaN(parsed) ? 0 : parsed;\n }\n return 0;\n};\n\nconst normalizeChannels = (\n channels: Record<string, unknown>\n): Record<string, number> =>\n Object.fromEntries(\n Object.entries(channels).map(([key, val]) => [key, toChannelNumber(val)])\n );\n\nexport function mapMessageValueDtoToModel(dto: MessageValueDto): MessageValue {\n return {\n id: dto.id,\n name: dto.name,\n type: dto.type as unknown as MessageValueType,\n value: dto.value,\n channels: normalizeChannels(dto.channels ?? {}),\n createdAt: utcDate(dto.createdAt),\n createdBy: dto.createdBy ?? '',\n createdByUserId: dto.createdByUserId ?? undefined,\n };\n}\n\nexport function mapMessageErrorDtoToModel(dto: MessageErrorDto): MessageError {\n return {\n ...dto,\n data: dto.data as string | null | undefined,\n };\n}\n\nexport function mapMessageDtoToModel(dto: MessageDto): Message {\n return {\n id: dto.id ?? undefined,\n createdAt: utcDate(dto.createdAt),\n createdBy: dto.createdBy ?? undefined,\n hasComments: dto.hasComments ?? false,\n createdByUserId: dto.createdByUserId ?? undefined,\n messageThreadId: dto.messageThreadId ?? undefined,\n errors: dto.errors?.map(mapMessageErrorDtoToModel) ?? undefined,\n values: dto.values?.map(mapMessageValueDtoToModel),\n };\n}\n\nexport function mapMessagesDtoToModels(dto: MessageDto[]): Message[] {\n return dto.map(mapMessageDtoToModel);\n}\n\n/**\n * Merge a streaming delta into a message. `outputs` is a cumulative snapshot\n * keyed by `(name, type)` per the SSE protocol — when an output streams from\n * \"He\" → \"Hel\" → \"Hello\" we receive three deltas each carrying the full\n * text-so-far, so we replace by key rather than appending. Errors aren't\n * documented as cumulative, so we append them.\n */\nexport function applyDeltaToMessage(\n target: Message,\n delta: { outputs: MessageValue[]; errors: MessageError[] }\n): Message {\n if (!delta.outputs.length && !delta.errors.length) return target;\n const nextValues = (target.values ?? []).slice();\n for (const incoming of delta.outputs) {\n const idx = nextValues.findIndex(\n (v) => v.name === incoming.name && v.type === incoming.type\n );\n if (idx === -1) nextValues.push(incoming);\n else nextValues[idx] = incoming;\n }\n return {\n ...target,\n values: nextValues,\n errors: delta.errors.length\n ? [...(target.errors ?? []), ...delta.errors]\n : target.errors,\n };\n}\n","import { ChatZod } from '@smartspace/api-client';\nimport type { z } from 'zod';\n\nimport { FileInfo } from './model';\n\nconst {\n filesGetFileInfoResponse: fileInfoResponseSchema,\n filesUploadFilesResponseItem: fileInfoItemSchema,\n} = ChatZod;\n\ntype FileInfoDto = z.infer<typeof fileInfoResponseSchema>;\ntype FileInfoItemDto = z.infer<typeof fileInfoItemSchema>;\n\nexport function mapFileInfoDtoToModel(\n dto: FileInfoDto | FileInfoItemDto\n): FileInfo {\n return {\n id: dto.id,\n name: dto.name,\n };\n}\n","import { ChatZod } from '@smartspace/api-client';\nimport type { z } from 'zod';\n\nimport { utcDate } from '@/shared/utils/dateFromApi';\nimport { getInitials } from '@/shared/utils/initials';\n\nimport { MentionUser, Variables, Workspace } from './model';\n\nconst {\n workSpacesGetIdResponse: workspaceResponseSchema,\n workSpacesGetUsersResponse: workspaceUsersResponseSchema,\n workSpacesGetGetResponse: workspacesListResponseSchema,\n} = ChatZod;\n\ntype WorkspaceDto = z.infer<typeof workspaceResponseSchema>;\ntype WorkspacesListResponseDto = z.infer<typeof workspacesListResponseSchema>;\ntype WorkspacesListItemDto = WorkspacesListResponseDto['data'][number];\ntype MentionUserDto = z.infer<typeof workspaceUsersResponseSchema>[number];\n\nconst truthy = (b: unknown): boolean => Boolean(b);\n\nconst toAccess = (raw: unknown): 'Read' | 'Write' => {\n if (raw === 'Write' || raw === 1) return 'Write';\n return 'Read';\n};\n\nconst computeAvatar = (name: string, fallback?: string): string => {\n if (fallback && fallback.trim().length > 0) return fallback;\n const parts = (name || '').trim().split(/\\s+/);\n if (parts.length === 0) return '?';\n if (parts.length === 1) return parts[0].charAt(0).toUpperCase();\n return (parts[0].charAt(0) + parts[parts.length - 1].charAt(0)).toUpperCase();\n};\n\nexport function mapMentionUserDtoToModel(dto: MentionUserDto): MentionUser {\n return {\n id: dto.id,\n userId: dto.userId,\n displayName: dto.displayName ?? '',\n initials: getInitials(dto.displayName ?? ''),\n };\n}\n\nexport function mapVariablesDtoToModel(dto: unknown): Variables {\n if (!dto || typeof dto !== 'object') return {};\n const out: Variables = {};\n for (const [key, val] of Object.entries(dto as Record<string, unknown>)) {\n if (!val || typeof val !== 'object') continue;\n const v = val as Record<string, unknown>;\n const schemaRaw = v['schema'];\n const schema =\n schemaRaw && typeof schemaRaw === 'object'\n ? (schemaRaw as Record<string, unknown>)\n : {};\n\n const accessRaw = v['access'];\n out[key] = { schema, access: toAccess(accessRaw) };\n }\n return out;\n}\n\nexport function mapWorkspaceDtoToModel(dto: WorkspaceDto): Workspace {\n const variables = mapVariablesDtoToModel(dto.variables);\n\n return {\n id: dto.id ?? '',\n name: dto.name ?? '',\n tags: dto.tags ?? [],\n showSources: truthy(dto.showSources),\n dataSpaces: Array.isArray(dto.dataSpaces) ? dto.dataSpaces : [],\n\n createdByUserId: dto.createdByUserId ?? undefined,\n createdAt: dto.createdAt != null ? utcDate(dto.createdAt) : undefined,\n\n modifiedByUserId: dto.modifiedByUserId ?? undefined,\n modifiedAt: dto.modifiedAt != null ? utcDate(dto.modifiedAt) : undefined,\n\n favorited: truthy(dto.favorited),\n\n summary: dto.summary ?? '',\n firstPrompt: dto.firstPrompt ?? '',\n\n outputSchema: dto.outputSchema ?? undefined,\n inputs: dto.inputs ?? undefined,\n\n variables,\n\n sandBoxThreadId: dto.sandBoxThreadId ?? undefined,\n supportsFiles: truthy(dto.supportsFiles),\n\n avatarName: computeAvatar(dto.name ?? ''),\n };\n}\n\nexport const mapWorkspacesDtoToModels = (arr: WorkspacesListItemDto[]) =>\n arr.map(mapWorkspaceDtoToModel);\n"]}
|