@waniwani/sdk 0.8.2 → 0.8.5

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/chat/web/layouts/chat-bar.tsx","../../node_modules/shared/src/utils/mergeClasses.ts","../../node_modules/shared/src/utils/toKebabCase.ts","../../node_modules/shared/src/utils/toCamelCase.ts","../../node_modules/shared/src/utils/toPascalCase.ts","../../node_modules/lucide-react/src/defaultAttributes.ts","../../node_modules/shared/src/utils/hasA11yProp.ts","../../node_modules/lucide-react/src/Icon.ts","../../node_modules/lucide-react/src/createLucideIcon.ts","../../node_modules/lucide-react/src/icons/arrow-down.ts","../../node_modules/lucide-react/src/icons/arrow-up.ts","../../node_modules/lucide-react/src/icons/braces.ts","../../node_modules/lucide-react/src/icons/check.ts","../../node_modules/lucide-react/src/icons/chevron-down.ts","../../node_modules/lucide-react/src/icons/chevron-right.ts","../../node_modules/lucide-react/src/icons/clipboard-copy.ts","../../node_modules/lucide-react/src/icons/file.ts","../../node_modules/lucide-react/src/icons/loader.ts","../../node_modules/lucide-react/src/icons/paperclip.ts","../../node_modules/lucide-react/src/icons/square.ts","../../node_modules/lucide-react/src/icons/x.ts","../../src/chat/web/ai-elements/conversation.tsx","../../node_modules/use-stick-to-bottom/dist/useStickToBottom.js","../../node_modules/use-stick-to-bottom/dist/StickToBottom.js","../../src/chat/web/lib/utils.ts","../../src/chat/web/ui/button.tsx","../../node_modules/nanoid/index.js","../../node_modules/nanoid/url-alphabet/index.js","../../src/chat/web/ai-elements/prompt-input.tsx","../../src/chat/web/components/chat-queue.tsx","../../src/chat/web/ai-elements/queue.tsx","../../src/chat/web/components/export-session.tsx","../../src/chat/web/ai-elements/attachments.tsx","../../src/chat/web/ai-elements/loader.tsx","../../node_modules/micromark-util-symbol/lib/codes.js","../../node_modules/micromark-util-symbol/lib/constants.js","../../node_modules/micromark-util-symbol/lib/types.js","../../node_modules/get-east-asian-width/lookup.js","../../node_modules/get-east-asian-width/index.js","../../node_modules/micromark-extension-cjk-friendly-util/dist/index.js","../../node_modules/micromark-extension-cjk-friendly/dist/index.js","../../node_modules/remark-cjk-friendly/dist/index.js","../../node_modules/micromark-extension-cjk-friendly-gfm-strikethrough/dist/index.js","../../node_modules/remark-cjk-friendly-gfm-strikethrough/dist/index.js","../../node_modules/@streamdown/cjk/dist/index.js","../../node_modules/@shikijs/types/dist/index.mjs","../../node_modules/@shikijs/vscode-textmate/dist/index.js","../../node_modules/stringify-entities/lib/core.js","../../node_modules/stringify-entities/lib/util/to-hexadecimal.js","../../node_modules/stringify-entities/lib/util/to-decimal.js","../../node_modules/character-entities-legacy/index.js","../../node_modules/character-entities-html4/index.js","../../node_modules/stringify-entities/lib/constant/dangerous.js","../../node_modules/stringify-entities/lib/util/to-named.js","../../node_modules/stringify-entities/lib/util/format-smart.js","../../node_modules/stringify-entities/lib/index.js","../../node_modules/hast-util-to-html/lib/handle/comment.js","../../node_modules/hast-util-to-html/lib/handle/doctype.js","../../node_modules/hast-util-to-html/lib/omission/util/siblings.js","../../node_modules/hast-util-to-html/lib/omission/omission.js","../../node_modules/hast-util-to-html/lib/omission/closing.js","../../node_modules/hast-util-to-html/lib/omission/opening.js","../../node_modules/hast-util-to-html/lib/handle/element.js","../../node_modules/hast-util-to-html/lib/handle/text.js","../../node_modules/hast-util-to-html/lib/handle/raw.js","../../node_modules/hast-util-to-html/lib/handle/root.js","../../node_modules/hast-util-to-html/lib/handle/index.js","../../node_modules/hast-util-to-html/lib/index.js","../../node_modules/@shikijs/core/dist/index.mjs","../../node_modules/shiki/dist/langs.mjs","../../node_modules/shiki/dist/themes.mjs","../../node_modules/@shikijs/engine-oniguruma/dist/index.mjs","../../node_modules/shiki/dist/bundle-full.mjs","../../node_modules/@streamdown/code/dist/index.js","../../src/chat/web/ai-elements/message.tsx","../../src/chat/web/ai-elements/reasoning.tsx","../../src/chat/web/ai-elements/tool.tsx","../../src/chat/web/components/mcp-app-frame.tsx","../../src/shared/model-context.ts","../../src/chat/web/components/welcome-screen.tsx","../../src/chat/web/components/widget-error-boundary.tsx","../../src/chat/web/components/message-list.tsx","../../src/chat/web/components/suggestions.tsx","../../src/chat/web/hooks/use-call-tool.ts","../../src/chat/web/hooks/use-chat-engine.ts","../../src/chat/web/lib/visitor-context.ts","../../src/chat/web/hooks/use-config.ts","../../src/chat/web/hooks/use-suggestions.ts","../../src/chat/web/hooks/use-typing-placeholder.ts","../../src/chat/web/theme.ts","../../src/chat/web/components/eval-panel.tsx","../../src/chat/web/hooks/use-scenarios.ts","../../src/chat/web/layouts/chat-card.tsx","../../src/chat/web/layouts/chat-embed.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n\tforwardRef,\n\tuseCallback,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseRef,\n\tuseState,\n} from \"react\";\nimport type { ModelContextUpdate } from \"../../../shared/model-context\";\nimport type { ChatBarProps, ChatHandle } from \"../@types\";\nimport {\n\tConversation,\n\tConversationContent,\n\tConversationScrollButton,\n} from \"../ai-elements/conversation\";\nimport {\n\tPromptInput,\n\tPromptInputAddAttachments,\n\tPromptInputSubmit,\n\tPromptInputTextarea,\n} from \"../ai-elements/prompt-input\";\nimport { ChatQueue } from \"../components/chat-queue\";\nimport { ExportSessionButton } from \"../components/export-session\";\nimport { MessageList } from \"../components/message-list\";\nimport { Suggestions } from \"../components/suggestions\";\nimport { useCallTool } from \"../hooks/use-call-tool\";\nimport { useChatEngine } from \"../hooks/use-chat-engine\";\nimport { useConfig } from \"../hooks/use-config\";\nimport { useSuggestions } from \"../hooks/use-suggestions\";\nimport { useTypingPlaceholder } from \"../hooks/use-typing-placeholder\";\nimport { cn } from \"../lib/utils\";\nimport { isDarkTheme, mergeTheme, themeToCSSProperties } from \"../theme\";\n\nexport const ChatBar = forwardRef<ChatHandle, ChatBarProps>(\n\tfunction ChatBar(props, ref) {\n\t\tconst {\n\t\t\ttheme: userTheme,\n\t\t\ttitle = \"Assistant\",\n\t\t\twidth = 600,\n\t\t\texpandedWidth: userExpandedWidth,\n\t\t\texpandedHeight = 400,\n\t\t\tallowAttachments = false,\n\t\t\twelcomeMessage,\n\t\t\twelcome,\n\t\t\tplaceholder = \"Ask me anything...\",\n\t\t\ttriggerEvent = \"triggerDemoRequest\",\n\t\t\tapi,\n\t\t} = props;\n\n\t\tconst expandedWidth =\n\t\t\tuserExpandedWidth ??\n\t\t\tMath.round((typeof width === \"number\" ? width : 600) * 1.2);\n\n\t\tconst effectiveApi = api ?? \"/api/waniwani\";\n\t\tconst effectiveResourceEndpoint = `${effectiveApi}/resource`;\n\n\t\tconst resolvedTheme = mergeTheme(userTheme);\n\t\tconst cssVars = themeToCSSProperties(resolvedTheme);\n\t\tconst isDark = isDarkTheme(resolvedTheme);\n\n\t\tconst config = useConfig(api);\n\t\tconst engine = useChatEngine(props);\n\t\tconst handleCallTool = useCallTool({\n\t\t\t...props,\n\t\t\tsessionId: engine.sessionId,\n\t\t});\n\n\t\tconst suggestionsState = useSuggestions({\n\t\t\tmessages: engine.messages,\n\t\t\tstatus: engine.status,\n\t\t\tconfig: props.suggestions,\n\t\t});\n\n\t\tconst handleWidgetMessage = useCallback(\n\t\t\t(message: {\n\t\t\t\trole: string;\n\t\t\t\tcontent: Array<{ type: string; text?: string }>;\n\t\t\t\tmodelContext?: ModelContextUpdate;\n\t\t\t}) => {\n\t\t\t\tconst text = message.content\n\t\t\t\t\t.map((c) => c.text ?? \"\")\n\t\t\t\t\t.join(\"\")\n\t\t\t\t\t.trim();\n\t\t\t\tif (text) {\n\t\t\t\t\tengine.handleSubmit({\n\t\t\t\t\t\ttext,\n\t\t\t\t\t\tfiles: [],\n\t\t\t\t\t\tmodelContext: message.modelContext,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t\t[engine.handleSubmit],\n\t\t);\n\n\t\tconst handleSuggestionSelect = useCallback(\n\t\t\t(suggestion: string) => {\n\t\t\t\tsuggestionsState.clear();\n\t\t\t\tengine.handleSubmit({ text: suggestion, files: [] });\n\t\t\t},\n\t\t\t[suggestionsState.clear, engine.handleSubmit],\n\t\t);\n\n\t\tconst animatedPlaceholder = useTypingPlaceholder(placeholder, !engine.text);\n\n\t\tconst [isFocused, setIsFocused] = useState(false);\n\t\tconst [isHighlighted, setIsHighlighted] = useState(false);\n\t\tconst [fullscreenToolCallId, setFullscreenToolCallId] = useState<\n\t\t\tstring | null\n\t\t>(null);\n\t\tconst containerRef = useRef<HTMLDivElement>(null);\n\t\tconst highlightTimerRef = useRef<ReturnType<typeof setTimeout>>(undefined);\n\n\t\tconst focusInput = useCallback(() => {\n\t\t\tconst container = containerRef.current;\n\t\t\tif (!container) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcontainer.scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n\t\t\tconst textarea = container.querySelector(\"textarea\");\n\t\t\tif (textarea) {\n\t\t\t\tsetTimeout(() => textarea.focus(), 300);\n\t\t\t}\n\t\t\tsetIsFocused(true);\n\t\t\tsetIsHighlighted(true);\n\t\t\tclearTimeout(highlightTimerRef.current);\n\t\t\thighlightTimerRef.current = setTimeout(\n\t\t\t\t() => setIsHighlighted(false),\n\t\t\t\t2000,\n\t\t\t);\n\t\t}, []);\n\n\t\tuseImperativeHandle(\n\t\t\tref,\n\t\t\t() => ({\n\t\t\t\tsendMessage: (text: string) => {\n\t\t\t\t\tengine.handleSubmit({ text, files: [] });\n\t\t\t\t\tfocusInput();\n\t\t\t\t},\n\t\t\t\tsendMessageAndWait: (text: string) => engine.sendMessageAndWait(text),\n\t\t\t\treset: engine.reset,\n\t\t\t\tfocus: focusInput,\n\t\t\t\tget messages() {\n\t\t\t\t\treturn engine.messages;\n\t\t\t\t},\n\t\t\t}),\n\t\t\t[\n\t\t\t\tengine.handleSubmit,\n\t\t\t\tengine.sendMessageAndWait,\n\t\t\t\tengine.reset,\n\t\t\t\tengine.messages,\n\t\t\t\tfocusInput,\n\t\t\t],\n\t\t);\n\n\t\t// Listen for custom trigger event (e.g. \"triggerDemoRequest\")\n\t\tuseEffect(() => {\n\t\t\tif (!triggerEvent) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst handler = (e: Event) => {\n\t\t\t\tconst detail = (e as CustomEvent).detail;\n\t\t\t\tconst message =\n\t\t\t\t\ttypeof detail?.message === \"string\" ? detail.message : undefined;\n\t\t\t\tif (message) {\n\t\t\t\t\tengine.handleSubmit({ text: message, files: [] });\n\t\t\t\t}\n\t\t\t\tfocusInput();\n\t\t\t};\n\t\t\twindow.addEventListener(triggerEvent, handler);\n\t\t\treturn () => window.removeEventListener(triggerEvent, handler);\n\t\t}, [triggerEvent, engine.handleSubmit, focusInput]);\n\n\t\tconst isExpanded = isFocused || fullscreenToolCallId !== null;\n\n\t\t// Close on outside click\n\t\tuseEffect(() => {\n\t\t\tif (!isFocused) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst handleClickOutside = (e: MouseEvent) => {\n\t\t\t\tif (\n\t\t\t\t\tcontainerRef.current &&\n\t\t\t\t\t!containerRef.current.contains(e.target as Node)\n\t\t\t\t) {\n\t\t\t\t\tsetIsFocused(false);\n\t\t\t\t}\n\t\t\t};\n\t\t\tdocument.addEventListener(\"mousedown\", handleClickOutside);\n\t\t\treturn () =>\n\t\t\t\tdocument.removeEventListener(\"mousedown\", handleClickOutside);\n\t\t}, [isFocused]);\n\n\t\tconst handleFocus = useCallback(() => {\n\t\t\tsetIsFocused(true);\n\t\t}, []);\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={containerRef}\n\t\t\t\tstyle={{\n\t\t\t\t\t...cssVars,\n\t\t\t\t\twidth: isExpanded ? expandedWidth : width,\n\t\t\t\t\ttransition: \"width 0.4s cubic-bezier(0.16, 1, 0.3, 1)\",\n\t\t\t\t}}\n\t\t\t\tdata-waniwani-chat=\"\"\n\t\t\t\tdata-waniwani-layout=\"bar\"\n\t\t\t\t{...(isDark ? { \"data-waniwani-dark\": \"\" } : {})}\n\t\t\t\tclassName=\"ww:flex ww:flex-col ww:font-[family-name:var(--ww-font)] ww:text-foreground\"\n\t\t\t>\n\t\t\t\t{/* Card section — grows from nothing on focus */}\n\t\t\t\t<div\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\toverflow: \"hidden\",\n\t\t\t\t\t\tbackgroundColor: resolvedTheme.backgroundColor,\n\t\t\t\t\t\tborderRadius: \"var(--ww-radius) var(--ww-radius) 0 0\",\n\t\t\t\t\t\tmaxHeight: isExpanded ? expandedHeight + 200 : 0,\n\t\t\t\t\t\topacity: isExpanded ? 1 : 0,\n\t\t\t\t\t\ttransform: isExpanded ? \"scaleX(1)\" : \"scaleX(0.88)\",\n\t\t\t\t\t\ttransformOrigin: \"center bottom\",\n\t\t\t\t\t\ttransition:\n\t\t\t\t\t\t\t\"max-height 0.4s cubic-bezier(0.16, 1, 0.3, 1), opacity 0.25s ease-out, transform 0.4s cubic-bezier(0.16, 1, 0.3, 1)\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{/* Header */}\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"ww:shrink-0 ww:flex ww:items-center ww:px-6 ww:py-3\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tbackgroundColor: resolvedTheme.headerBackgroundColor,\n\t\t\t\t\t\t\tcolor: resolvedTheme.headerTextColor,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<div className=\"ww:text-sm ww:font-semibold ww:truncate\">\n\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<ExportSessionButton\n\t\t\t\t\t\t\tmessages={engine.messages}\n\t\t\t\t\t\t\tevalEnabled={config.eval}\n\t\t\t\t\t\t\tapi={effectiveApi}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t{/* Messages */}\n\t\t\t\t\t<Conversation\n\t\t\t\t\t\tclassName=\"ww:flex-1\"\n\t\t\t\t\t\tstyle={{ height: expandedHeight }}\n\t\t\t\t\t>\n\t\t\t\t\t\t<ConversationContent\n\t\t\t\t\t\t\tscrollClassName={\n\t\t\t\t\t\t\t\tfullscreenToolCallId\n\t\t\t\t\t\t\t\t\t? \"ww:!relative ww:!overflow-hidden\"\n\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<MessageList\n\t\t\t\t\t\t\t\tmessages={engine.messages}\n\t\t\t\t\t\t\t\tstatus={engine.status}\n\t\t\t\t\t\t\t\twelcomeMessage={welcomeMessage}\n\t\t\t\t\t\t\t\twelcome={welcome}\n\t\t\t\t\t\t\t\tonSuggestionSelect={handleSuggestionSelect}\n\t\t\t\t\t\t\t\tresourceEndpoint={effectiveResourceEndpoint}\n\t\t\t\t\t\t\t\tchatSessionId={engine.sessionId}\n\t\t\t\t\t\t\t\tisDark={isDark}\n\t\t\t\t\t\t\t\tonFollowUp={handleWidgetMessage}\n\t\t\t\t\t\t\t\tonCallTool={handleCallTool}\n\t\t\t\t\t\t\t\tfullscreenToolCallId={fullscreenToolCallId}\n\t\t\t\t\t\t\t\tonWidgetDisplayModeChange={(mode, widget) => {\n\t\t\t\t\t\t\t\t\tsetFullscreenToolCallId(\n\t\t\t\t\t\t\t\t\t\tmode === \"fullscreen\" ? widget.toolCallId : null,\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</ConversationContent>\n\t\t\t\t\t\t<ConversationScrollButton />\n\t\t\t\t\t</Conversation>\n\n\t\t\t\t\t{/* Suggestions */}\n\t\t\t\t\t<div style={fullscreenToolCallId ? { display: \"none\" } : undefined}>\n\t\t\t\t\t\t<Suggestions\n\t\t\t\t\t\t\tsuggestions={suggestionsState.suggestions}\n\t\t\t\t\t\t\tisLoading={suggestionsState.isLoading}\n\t\t\t\t\t\t\tonSelect={handleSuggestionSelect}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t{/* Queue */}\n\t\t\t\t\t<div style={fullscreenToolCallId ? { display: \"none\" } : undefined}>\n\t\t\t\t\t\t<ChatQueue\n\t\t\t\t\t\t\tqueuedMessages={engine.queuedMessages}\n\t\t\t\t\t\t\tonRemove={engine.removeQueuedMessage}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t{/* Input section — always visible, joins card when expanded */}\n\t\t\t\t<div\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tbackgroundColor: isExpanded\n\t\t\t\t\t\t\t? resolvedTheme.backgroundColor\n\t\t\t\t\t\t\t: \"transparent\",\n\t\t\t\t\t\tborderRadius: isExpanded\n\t\t\t\t\t\t\t? \"0 0 var(--ww-radius) var(--ww-radius)\"\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\tboxShadow: isExpanded ? \"0 8px 24px rgba(0,0,0,0.1)\" : \"none\",\n\t\t\t\t\t\ttransition:\n\t\t\t\t\t\t\t\"background-color 0.2s ease, border-radius 0.3s ease, box-shadow 0.35s ease, padding 0.3s ease\",\n\t\t\t\t\t\tpadding: isExpanded ? \"8px 16px 16px\" : \"0\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<PromptInput\n\t\t\t\t\t\tonSubmit={engine.handleSubmit}\n\t\t\t\t\t\tglobalDrop={allowAttachments}\n\t\t\t\t\t\tmultiple={allowAttachments}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"ww:rounded-2xl ww:border-border ww:bg-input ww:transition-all ww:duration-300\",\n\t\t\t\t\t\t\t!isExpanded && \"ww:shadow-sm\",\n\t\t\t\t\t\t\tisHighlighted &&\n\t\t\t\t\t\t\t\t\"ww:ring-2 ww:ring-blue-400/70 ww:ring-offset-2 ww:ring-offset-background\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<div className=\"ww:flex ww:items-center ww:gap-1 ww:pl-4 ww:pr-3 ww:py-2.5\">\n\t\t\t\t\t\t\t{allowAttachments && <PromptInputAddAttachments />}\n\t\t\t\t\t\t\t<PromptInputTextarea\n\t\t\t\t\t\t\t\tonChange={engine.handleTextChange}\n\t\t\t\t\t\t\t\tvalue={engine.text}\n\t\t\t\t\t\t\t\tplaceholder={animatedPlaceholder}\n\t\t\t\t\t\t\t\tonFocus={handleFocus}\n\t\t\t\t\t\t\t\tclassName=\"ww:min-h-0 ww:py-1 ww:px-0\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<PromptInputSubmit\n\t\t\t\t\t\t\t\tstatus={engine.status}\n\t\t\t\t\t\t\t\tdisabled={engine.queueFull}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</PromptInput>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t},\n);\n","/**\n * Merges classes into a single string\n *\n * @param {array} classes\n * @returns {string} A string of classes\n */\nexport const mergeClasses = <ClassType = string | undefined | null>(...classes: ClassType[]) =>\n classes\n .filter((className, index, array) => {\n return (\n Boolean(className) &&\n (className as string).trim() !== '' &&\n array.indexOf(className) === index\n );\n })\n .join(' ')\n .trim();\n","/**\n * Converts string to kebab case\n *\n * @param {string} string\n * @returns {string} A kebabized string\n */\nexport const toKebabCase = (string: string) =>\n string.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n","/**\n * Converts string to camel case\n *\n * @param {string} string\n * @returns {string} A camelized string\n */\nexport const toCamelCase = <T extends string>(string: T) =>\n string.replace(/^([A-Z])|[\\s-_]+(\\w)/g, (match, p1, p2) =>\n p2 ? p2.toUpperCase() : p1.toLowerCase(),\n );\n","import { CamelToPascal } from '../utility-types';\nimport { toCamelCase } from './toCamelCase';\n\n/**\n * Converts string to pascal case\n *\n * @param {string} string\n * @returns {string} A pascalized string\n */\nexport const toPascalCase = <T extends string>(string: T): CamelToPascal<T> => {\n const camelCase = toCamelCase(string);\n\n return (camelCase.charAt(0).toUpperCase() + camelCase.slice(1)) as CamelToPascal<T>;\n};\n","export default {\n xmlns: 'http://www.w3.org/2000/svg',\n width: 24,\n height: 24,\n viewBox: '0 0 24 24',\n fill: 'none',\n stroke: 'currentColor',\n strokeWidth: 2,\n strokeLinecap: 'round',\n strokeLinejoin: 'round',\n};\n","/**\n * Check if a component has an accessibility prop\n *\n * @param {object} props\n * @returns {boolean} Whether the component has an accessibility prop\n */\nexport const hasA11yProp = (props: Record<string, any>) => {\n for (const prop in props) {\n if (prop.startsWith('aria-') || prop === 'role' || prop === 'title') {\n return true;\n }\n }\n\n return false;\n};\n","import { createElement, forwardRef } from 'react';\nimport defaultAttributes from './defaultAttributes';\nimport { IconNode, LucideProps } from './types';\nimport { mergeClasses, hasA11yProp } from '@lucide/shared';\n\ninterface IconComponentProps extends LucideProps {\n iconNode: IconNode;\n}\n\n/**\n * Lucide icon component\n *\n * @component Icon\n * @param {object} props\n * @param {string} props.color - The color of the icon\n * @param {number} props.size - The size of the icon\n * @param {number} props.strokeWidth - The stroke width of the icon\n * @param {boolean} props.absoluteStrokeWidth - Whether to use absolute stroke width\n * @param {string} props.className - The class name of the icon\n * @param {IconNode} props.children - The children of the icon\n * @param {IconNode} props.iconNode - The icon node of the icon\n *\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst Icon = forwardRef<SVGSVGElement, IconComponentProps>(\n (\n {\n color = 'currentColor',\n size = 24,\n strokeWidth = 2,\n absoluteStrokeWidth,\n className = '',\n children,\n iconNode,\n ...rest\n },\n ref,\n ) =>\n createElement(\n 'svg',\n {\n ref,\n ...defaultAttributes,\n width: size,\n height: size,\n stroke: color,\n strokeWidth: absoluteStrokeWidth ? (Number(strokeWidth) * 24) / Number(size) : strokeWidth,\n className: mergeClasses('lucide', className),\n ...(!children && !hasA11yProp(rest) && { 'aria-hidden': 'true' }),\n ...rest,\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...(Array.isArray(children) ? children : [children]),\n ],\n ),\n);\n\nexport default Icon;\n","import { createElement, forwardRef } from 'react';\nimport { mergeClasses, toKebabCase, toPascalCase } from '@lucide/shared';\nimport { IconNode, LucideProps } from './types';\nimport Icon from './Icon';\n\n/**\n * Create a Lucide icon component\n * @param {string} iconName\n * @param {array} iconNode\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst createLucideIcon = (iconName: string, iconNode: IconNode) => {\n const Component = forwardRef<SVGSVGElement, LucideProps>(({ className, ...props }, ref) =>\n createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className,\n ),\n ...props,\n }),\n );\n\n Component.displayName = toPascalCase(iconName);\n\n return Component;\n};\n\nexport default createLucideIcon;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M12 5v14', key: 's699le' }],\n ['path', { d: 'm19 12-7 7-7-7', key: '1idqje' }],\n];\n\n/**\n * @component @name ArrowDown\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTIgNXYxNCIgLz4KICA8cGF0aCBkPSJtMTkgMTItNyA3LTctNyIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/arrow-down\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ArrowDown = createLucideIcon('arrow-down', __iconNode);\n\nexport default ArrowDown;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'm5 12 7-7 7 7', key: 'hav0vg' }],\n ['path', { d: 'M12 19V5', key: 'x0mq9r' }],\n];\n\n/**\n * @component @name ArrowUp\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtNSAxMiA3LTcgNyA3IiAvPgogIDxwYXRoIGQ9Ik0xMiAxOVY1IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/arrow-up\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ArrowUp = createLucideIcon('arrow-up', __iconNode);\n\nexport default ArrowUp;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n { d: 'M8 3H7a2 2 0 0 0-2 2v5a2 2 0 0 1-2 2 2 2 0 0 1 2 2v5c0 1.1.9 2 2 2h1', key: 'ezmyqa' },\n ],\n [\n 'path',\n {\n d: 'M16 21h1a2 2 0 0 0 2-2v-5c0-1.1.9-2 2-2a2 2 0 0 1-2-2V5a2 2 0 0 0-2-2h-1',\n key: 'e1hn23',\n },\n ],\n];\n\n/**\n * @component @name Braces\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNOCAzSDdhMiAyIDAgMCAwLTIgMnY1YTIgMiAwIDAgMS0yIDIgMiAyIDAgMCAxIDIgMnY1YzAgMS4xLjkgMiAyIDJoMSIgLz4KICA8cGF0aCBkPSJNMTYgMjFoMWEyIDIgMCAwIDAgMi0ydi01YzAtMS4xLjktMiAyLTJhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMC0yLTJoLTEiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/braces\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Braces = createLucideIcon('braces', __iconNode);\n\nexport default Braces;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'M20 6 9 17l-5-5', key: '1gmf2c' }]];\n\n/**\n * @component @name Check\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMjAgNiA5IDE3bC01LTUiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/check\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Check = createLucideIcon('check', __iconNode);\n\nexport default Check;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'm6 9 6 6 6-6', key: 'qrunsl' }]];\n\n/**\n * @component @name ChevronDown\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtNiA5IDYgNiA2LTYiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/chevron-down\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronDown = createLucideIcon('chevron-down', __iconNode);\n\nexport default ChevronDown;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'm9 18 6-6-6-6', key: 'mthhwq' }]];\n\n/**\n * @component @name ChevronRight\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtOSAxOCA2LTYtNi02IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/chevron-right\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronRight = createLucideIcon('chevron-right', __iconNode);\n\nexport default ChevronRight;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['rect', { width: '8', height: '4', x: '8', y: '2', rx: '1', ry: '1', key: 'tgr4d6' }],\n ['path', { d: 'M8 4H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-2', key: '4jdomd' }],\n ['path', { d: 'M16 4h2a2 2 0 0 1 2 2v4', key: '3hqy98' }],\n ['path', { d: 'M21 14H11', key: '1bme5i' }],\n ['path', { d: 'm15 10-4 4 4 4', key: '5dvupr' }],\n];\n\n/**\n * @component @name ClipboardCopy\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cmVjdCB3aWR0aD0iOCIgaGVpZ2h0PSI0IiB4PSI4IiB5PSIyIiByeD0iMSIgcnk9IjEiIC8+CiAgPHBhdGggZD0iTTggNEg2YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmgxMmEyIDIgMCAwIDAgMi0ydi0yIiAvPgogIDxwYXRoIGQ9Ik0xNiA0aDJhMiAyIDAgMCAxIDIgMnY0IiAvPgogIDxwYXRoIGQ9Ik0yMSAxNEgxMSIgLz4KICA8cGF0aCBkPSJtMTUgMTAtNCA0IDQgNCIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/clipboard-copy\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ClipboardCopy = createLucideIcon('clipboard-copy', __iconNode);\n\nexport default ClipboardCopy;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z',\n key: '1oefj6',\n },\n ],\n ['path', { d: 'M14 2v5a1 1 0 0 0 1 1h5', key: 'wfsgrz' }],\n];\n\n/**\n * @component @name File\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIgLz4KICA8cGF0aCBkPSJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/file\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst File = createLucideIcon('file', __iconNode);\n\nexport default File;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M12 2v4', key: '3427ic' }],\n ['path', { d: 'm16.2 7.8 2.9-2.9', key: 'r700ao' }],\n ['path', { d: 'M18 12h4', key: 'wj9ykh' }],\n ['path', { d: 'm16.2 16.2 2.9 2.9', key: '1bxg5t' }],\n ['path', { d: 'M12 18v4', key: 'jadmvz' }],\n ['path', { d: 'm4.9 19.1 2.9-2.9', key: 'bwix9q' }],\n ['path', { d: 'M2 12h4', key: 'j09sii' }],\n ['path', { d: 'm4.9 4.9 2.9 2.9', key: 'giyufr' }],\n];\n\n/**\n * @component @name Loader\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTIgMnY0IiAvPgogIDxwYXRoIGQ9Im0xNi4yIDcuOCAyLjktMi45IiAvPgogIDxwYXRoIGQ9Ik0xOCAxMmg0IiAvPgogIDxwYXRoIGQ9Im0xNi4yIDE2LjIgMi45IDIuOSIgLz4KICA8cGF0aCBkPSJNMTIgMTh2NCIgLz4KICA8cGF0aCBkPSJtNC45IDE5LjEgMi45LTIuOSIgLz4KICA8cGF0aCBkPSJNMiAxMmg0IiAvPgogIDxwYXRoIGQ9Im00LjkgNC45IDIuOSAyLjkiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/loader\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Loader = createLucideIcon('loader', __iconNode);\n\nexport default Loader;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'm16 6-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551',\n key: '1miecu',\n },\n ],\n];\n\n/**\n * @component @name Paperclip\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtMTYgNi04LjQxNCA4LjU4NmEyIDIgMCAwIDAgMi44MjkgMi44MjlsOC40MTQtOC41ODZhNCA0IDAgMSAwLTUuNjU3LTUuNjU3bC04LjM3OSA4LjU1MWE2IDYgMCAxIDAgOC40ODUgOC40ODVsOC4zNzktOC41NTEiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/paperclip\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Paperclip = createLucideIcon('paperclip', __iconNode);\n\nexport default Paperclip;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['rect', { width: '18', height: '18', x: '3', y: '3', rx: '2', key: 'afitv7' }],\n];\n\n/**\n * @component @name Square\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cmVjdCB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHg9IjMiIHk9IjMiIHJ4PSIyIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/square\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Square = createLucideIcon('square', __iconNode);\n\nexport default Square;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M18 6 6 18', key: '1bl5f8' }],\n ['path', { d: 'm6 6 12 12', key: 'd8bk6v' }],\n];\n\n/**\n * @component @name X\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTggNiA2IDE4IiAvPgogIDxwYXRoIGQ9Im02IDYgMTIgMTIiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/x\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst X = createLucideIcon('x', __iconNode);\n\nexport default X;\n","\"use client\";\n\nimport { ArrowDownIcon } from \"lucide-react\";\nimport type { ComponentProps } from \"react\";\nimport { useCallback } from \"react\";\nimport { StickToBottom, useStickToBottomContext } from \"use-stick-to-bottom\";\nimport { cn } from \"../lib/utils\";\nimport { Button } from \"../ui/button\";\n\nexport type ConversationProps = ComponentProps<typeof StickToBottom>;\n\nexport const Conversation = ({ className, ...props }: ConversationProps) => (\n\t<StickToBottom\n\t\tclassName={cn(\"ww:relative ww:flex-1 ww:overflow-y-hidden\", className)}\n\t\tinitial=\"smooth\"\n\t\tresize=\"smooth\"\n\t\trole=\"log\"\n\t\t{...props}\n\t/>\n);\n\nexport type ConversationContentProps = ComponentProps<\n\ttypeof StickToBottom.Content\n>;\n\nexport const ConversationContent = ({\n\tclassName,\n\t...props\n}: ConversationContentProps) => (\n\t<StickToBottom.Content\n\t\tclassName={cn(\n\t\t\t\"ww:flex ww:flex-col ww:gap-6 ww:px-4 ww:py-6 ww:mx-auto ww:w-full ww:max-w-3xl\",\n\t\t\tclassName,\n\t\t)}\n\t\t{...props}\n\t/>\n);\n\nexport type ConversationScrollButtonProps = ComponentProps<typeof Button>;\n\nexport const ConversationScrollButton = ({\n\tclassName,\n\t...props\n}: ConversationScrollButtonProps) => {\n\tconst { isAtBottom, scrollToBottom } = useStickToBottomContext();\n\n\tconst handleScrollToBottom = useCallback(() => {\n\t\tscrollToBottom();\n\t}, [scrollToBottom]);\n\n\treturn (\n\t\t!isAtBottom && (\n\t\t\t<Button\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"ww:absolute ww:bottom-4 ww:left-[50%] ww:translate-x-[-50%] ww:rounded-full\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\tonClick={handleScrollToBottom}\n\t\t\t\tsize=\"icon\"\n\t\t\t\tvariant=\"outline\"\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t<ArrowDownIcon className=\"ww:size-4\" />\n\t\t\t</Button>\n\t\t)\n\t);\n};\n","/*!---------------------------------------------------------------------------------------------\n * Copyright (c) StackBlitz. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { useCallback, useMemo, useRef, useState, } from \"react\";\nconst DEFAULT_SPRING_ANIMATION = {\n /**\n * A value from 0 to 1, on how much to damp the animation.\n * 0 means no damping, 1 means full damping.\n *\n * @default 0.7\n */\n damping: 0.7,\n /**\n * The stiffness of how fast/slow the animation gets up to speed.\n *\n * @default 0.05\n */\n stiffness: 0.05,\n /**\n * The inertial mass associated with the animation.\n * Higher numbers make the animation slower.\n *\n * @default 1.25\n */\n mass: 1.25,\n};\nconst STICK_TO_BOTTOM_OFFSET_PX = 70;\nconst SIXTY_FPS_INTERVAL_MS = 1000 / 60;\nconst RETAIN_ANIMATION_DURATION_MS = 350;\nlet mouseDown = false;\nglobalThis.document?.addEventListener(\"mousedown\", () => {\n mouseDown = true;\n});\nglobalThis.document?.addEventListener(\"mouseup\", () => {\n mouseDown = false;\n});\nglobalThis.document?.addEventListener(\"click\", () => {\n mouseDown = false;\n});\nexport const useStickToBottom = (options = {}) => {\n const [escapedFromLock, updateEscapedFromLock] = useState(false);\n const [isAtBottom, updateIsAtBottom] = useState(options.initial !== false);\n const [isNearBottom, setIsNearBottom] = useState(false);\n const optionsRef = useRef(null);\n optionsRef.current = options;\n const isSelecting = useCallback(() => {\n if (!mouseDown) {\n return false;\n }\n const selection = window.getSelection();\n if (!selection || !selection.rangeCount) {\n return false;\n }\n const range = selection.getRangeAt(0);\n return (range.commonAncestorContainer.contains(scrollRef.current) ||\n scrollRef.current?.contains(range.commonAncestorContainer));\n }, []);\n const setIsAtBottom = useCallback((isAtBottom) => {\n state.isAtBottom = isAtBottom;\n updateIsAtBottom(isAtBottom);\n }, []);\n const setEscapedFromLock = useCallback((escapedFromLock) => {\n state.escapedFromLock = escapedFromLock;\n updateEscapedFromLock(escapedFromLock);\n }, []);\n // biome-ignore lint/correctness/useExhaustiveDependencies: not needed\n const state = useMemo(() => {\n let lastCalculation;\n return {\n escapedFromLock,\n isAtBottom,\n resizeDifference: 0,\n accumulated: 0,\n velocity: 0,\n listeners: new Set(),\n get scrollTop() {\n return scrollRef.current?.scrollTop ?? 0;\n },\n set scrollTop(scrollTop) {\n if (scrollRef.current) {\n scrollRef.current.scrollTop = scrollTop;\n state.ignoreScrollToTop = scrollRef.current.scrollTop;\n }\n },\n get targetScrollTop() {\n if (!scrollRef.current || !contentRef.current) {\n return 0;\n }\n return (scrollRef.current.scrollHeight - 1 - scrollRef.current.clientHeight);\n },\n get calculatedTargetScrollTop() {\n if (!scrollRef.current || !contentRef.current) {\n return 0;\n }\n const { targetScrollTop } = this;\n if (!options.targetScrollTop) {\n return targetScrollTop;\n }\n if (lastCalculation?.targetScrollTop === targetScrollTop) {\n return lastCalculation.calculatedScrollTop;\n }\n const calculatedScrollTop = Math.max(Math.min(options.targetScrollTop(targetScrollTop, {\n scrollElement: scrollRef.current,\n contentElement: contentRef.current,\n }), targetScrollTop), 0);\n lastCalculation = { targetScrollTop, calculatedScrollTop };\n requestAnimationFrame(() => {\n lastCalculation = undefined;\n });\n return calculatedScrollTop;\n },\n get scrollDifference() {\n return this.calculatedTargetScrollTop - this.scrollTop;\n },\n get isNearBottom() {\n return this.scrollDifference <= STICK_TO_BOTTOM_OFFSET_PX;\n },\n };\n }, []);\n const scrollToBottom = useCallback((scrollOptions = {}) => {\n if (typeof scrollOptions === \"string\") {\n scrollOptions = { animation: scrollOptions };\n }\n if (!scrollOptions.preserveScrollPosition) {\n setIsAtBottom(true);\n }\n const waitElapsed = Date.now() + (Number(scrollOptions.wait) || 0);\n const behavior = mergeAnimations(optionsRef.current, scrollOptions.animation);\n const { ignoreEscapes = false } = scrollOptions;\n let durationElapsed;\n let startTarget = state.calculatedTargetScrollTop;\n if (scrollOptions.duration instanceof Promise) {\n scrollOptions.duration.finally(() => {\n durationElapsed = Date.now();\n });\n }\n else {\n durationElapsed = waitElapsed + (scrollOptions.duration ?? 0);\n }\n const next = async () => {\n const promise = new Promise(requestAnimationFrame).then(() => {\n if (!state.isAtBottom) {\n state.animation = undefined;\n return false;\n }\n const { scrollTop } = state;\n const tick = performance.now();\n const tickDelta = (tick - (state.lastTick ?? tick)) / SIXTY_FPS_INTERVAL_MS;\n state.animation || (state.animation = { behavior, promise, ignoreEscapes });\n if (state.animation.behavior === behavior) {\n state.lastTick = tick;\n }\n if (isSelecting()) {\n return next();\n }\n if (waitElapsed > Date.now()) {\n return next();\n }\n if (scrollTop < Math.min(startTarget, state.calculatedTargetScrollTop)) {\n if (state.animation?.behavior === behavior) {\n if (behavior === \"instant\") {\n state.scrollTop = state.calculatedTargetScrollTop;\n return next();\n }\n state.velocity =\n (behavior.damping * state.velocity +\n behavior.stiffness * state.scrollDifference) /\n behavior.mass;\n state.accumulated += state.velocity * tickDelta;\n state.scrollTop += state.accumulated;\n if (state.scrollTop !== scrollTop) {\n state.accumulated = 0;\n }\n }\n return next();\n }\n if (durationElapsed > Date.now()) {\n startTarget = state.calculatedTargetScrollTop;\n return next();\n }\n state.animation = undefined;\n /**\n * If we're still below the target, then queue\n * up another scroll to the bottom with the last\n * requested animatino.\n */\n if (state.scrollTop < state.calculatedTargetScrollTop) {\n return scrollToBottom({\n animation: mergeAnimations(optionsRef.current, optionsRef.current.resize),\n ignoreEscapes,\n duration: Math.max(0, durationElapsed - Date.now()) || undefined,\n });\n }\n return state.isAtBottom;\n });\n return promise.then((isAtBottom) => {\n requestAnimationFrame(() => {\n if (!state.animation) {\n state.lastTick = undefined;\n state.velocity = 0;\n }\n });\n return isAtBottom;\n });\n };\n if (scrollOptions.wait !== true) {\n state.animation = undefined;\n }\n if (state.animation?.behavior === behavior) {\n return state.animation.promise;\n }\n return next();\n }, [setIsAtBottom, isSelecting, state]);\n const stopScroll = useCallback(() => {\n setEscapedFromLock(true);\n setIsAtBottom(false);\n }, [setEscapedFromLock, setIsAtBottom]);\n const handleScroll = useCallback(({ target }) => {\n if (target !== scrollRef.current) {\n return;\n }\n const { scrollTop, ignoreScrollToTop } = state;\n let { lastScrollTop = scrollTop } = state;\n state.lastScrollTop = scrollTop;\n state.ignoreScrollToTop = undefined;\n if (ignoreScrollToTop && ignoreScrollToTop > scrollTop) {\n /**\n * When the user scrolls up while the animation plays, the `scrollTop` may\n * not come in separate events; if this happens, to make sure `isScrollingUp`\n * is correct, set the lastScrollTop to the ignored event.\n */\n lastScrollTop = ignoreScrollToTop;\n }\n setIsNearBottom(state.isNearBottom);\n /**\n * Scroll events may come before a ResizeObserver event,\n * so in order to ignore resize events correctly we use a\n * timeout.\n *\n * @see https://github.com/WICG/resize-observer/issues/25#issuecomment-248757228\n */\n setTimeout(() => {\n /**\n * When theres a resize difference ignore the resize event.\n */\n if (state.resizeDifference || scrollTop === ignoreScrollToTop) {\n return;\n }\n if (isSelecting()) {\n setEscapedFromLock(true);\n setIsAtBottom(false);\n return;\n }\n const isScrollingDown = scrollTop > lastScrollTop;\n const isScrollingUp = scrollTop < lastScrollTop;\n if (state.animation?.ignoreEscapes) {\n state.scrollTop = lastScrollTop;\n return;\n }\n if (isScrollingUp) {\n setEscapedFromLock(true);\n setIsAtBottom(false);\n }\n if (isScrollingDown) {\n setEscapedFromLock(false);\n }\n if (!state.escapedFromLock && state.isNearBottom) {\n setIsAtBottom(true);\n }\n }, 1);\n }, [setEscapedFromLock, setIsAtBottom, isSelecting, state]);\n const handleWheel = useCallback(({ target, deltaY }) => {\n let element = target;\n while (![\"scroll\", \"auto\"].includes(getComputedStyle(element).overflow)) {\n if (!element.parentElement) {\n return;\n }\n element = element.parentElement;\n }\n /**\n * The browser may cancel the scrolling from the mouse wheel\n * if we update it from the animation in meantime.\n * To prevent this, always escape when the wheel is scrolled up.\n */\n if (element === scrollRef.current &&\n deltaY < 0 &&\n scrollRef.current.scrollHeight > scrollRef.current.clientHeight &&\n !state.animation?.ignoreEscapes) {\n setEscapedFromLock(true);\n setIsAtBottom(false);\n }\n }, [setEscapedFromLock, setIsAtBottom, state]);\n const scrollRef = useRefCallback((scroll) => {\n scrollRef.current?.removeEventListener(\"scroll\", handleScroll);\n scrollRef.current?.removeEventListener(\"wheel\", handleWheel);\n scroll?.addEventListener(\"scroll\", handleScroll, { passive: true });\n scroll?.addEventListener(\"wheel\", handleWheel, { passive: true });\n }, []);\n const contentRef = useRefCallback((content) => {\n state.resizeObserver?.disconnect();\n if (!content) {\n return;\n }\n let previousHeight;\n state.resizeObserver = new ResizeObserver(([entry]) => {\n const { height } = entry.contentRect;\n const difference = height - (previousHeight ?? height);\n state.resizeDifference = difference;\n /**\n * Sometimes the browser can overscroll past the target,\n * so check for this and adjust appropriately.\n */\n if (state.scrollTop > state.targetScrollTop) {\n state.scrollTop = state.targetScrollTop;\n }\n setIsNearBottom(state.isNearBottom);\n if (difference >= 0) {\n /**\n * If it's a positive resize, scroll to the bottom when\n * we're already at the bottom.\n */\n const animation = mergeAnimations(optionsRef.current, previousHeight\n ? optionsRef.current.resize\n : optionsRef.current.initial);\n scrollToBottom({\n animation,\n wait: true,\n preserveScrollPosition: true,\n duration: animation === \"instant\" ? undefined : RETAIN_ANIMATION_DURATION_MS,\n });\n }\n else {\n /**\n * Else if it's a negative resize, check if we're near the bottom\n * if we are want to un-escape from the lock, because the resize\n * could have caused the container to be at the bottom.\n */\n if (state.isNearBottom) {\n setEscapedFromLock(false);\n setIsAtBottom(true);\n }\n }\n previousHeight = height;\n /**\n * Reset the resize difference after the scroll event\n * has fired. Requires a rAF to wait for the scroll event,\n * and a setTimeout to wait for the other timeout we have in\n * resizeObserver in case the scroll event happens after the\n * resize event.\n */\n requestAnimationFrame(() => {\n setTimeout(() => {\n if (state.resizeDifference === difference) {\n state.resizeDifference = 0;\n }\n }, 1);\n });\n });\n state.resizeObserver?.observe(content);\n }, []);\n return {\n contentRef,\n scrollRef,\n scrollToBottom,\n stopScroll,\n isAtBottom: isAtBottom || isNearBottom,\n isNearBottom,\n escapedFromLock,\n state,\n };\n};\nfunction useRefCallback(callback, deps) {\n // biome-ignore lint/correctness/useExhaustiveDependencies: not needed\n const result = useCallback((ref) => {\n result.current = ref;\n return callback(ref);\n }, deps);\n return result;\n}\nconst animationCache = new Map();\nfunction mergeAnimations(...animations) {\n const result = { ...DEFAULT_SPRING_ANIMATION };\n let instant = false;\n for (const animation of animations) {\n if (animation === \"instant\") {\n instant = true;\n continue;\n }\n if (typeof animation !== \"object\") {\n continue;\n }\n instant = false;\n result.damping = animation.damping ?? result.damping;\n result.stiffness = animation.stiffness ?? result.stiffness;\n result.mass = animation.mass ?? result.mass;\n }\n const key = JSON.stringify(result);\n if (!animationCache.has(key)) {\n animationCache.set(key, Object.freeze(result));\n }\n return instant ? \"instant\" : animationCache.get(key);\n}\n","/*!---------------------------------------------------------------------------------------------\n * Copyright (c) StackBlitz. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as React from \"react\";\nimport { createContext, useContext, useEffect, useImperativeHandle, useLayoutEffect, useMemo, useRef, } from \"react\";\nimport { useStickToBottom, } from \"./useStickToBottom.js\";\nconst StickToBottomContext = createContext(null);\nconst useIsomorphicLayoutEffect = typeof window !== \"undefined\" ? useLayoutEffect : useEffect;\nexport function StickToBottom({ instance, children, resize, initial, mass, damping, stiffness, targetScrollTop: currentTargetScrollTop, contextRef, ...props }) {\n const customTargetScrollTop = useRef(null);\n const targetScrollTop = React.useCallback((target, elements) => {\n const get = context?.targetScrollTop ?? currentTargetScrollTop;\n return get?.(target, elements) ?? target;\n }, [currentTargetScrollTop]);\n const defaultInstance = useStickToBottom({\n mass,\n damping,\n stiffness,\n resize,\n initial,\n targetScrollTop,\n });\n const { scrollRef, contentRef, scrollToBottom, stopScroll, isAtBottom, escapedFromLock, state, } = instance ?? defaultInstance;\n const context = useMemo(() => ({\n scrollToBottom,\n stopScroll,\n scrollRef,\n isAtBottom,\n escapedFromLock,\n contentRef,\n state,\n get targetScrollTop() {\n return customTargetScrollTop.current;\n },\n set targetScrollTop(targetScrollTop) {\n customTargetScrollTop.current = targetScrollTop;\n },\n }), [\n scrollToBottom,\n isAtBottom,\n contentRef,\n scrollRef,\n stopScroll,\n escapedFromLock,\n state,\n ]);\n useImperativeHandle(contextRef, () => context, [context]);\n useIsomorphicLayoutEffect(() => {\n if (!scrollRef.current) {\n return;\n }\n if (getComputedStyle(scrollRef.current).overflow === \"visible\") {\n scrollRef.current.style.overflow = \"auto\";\n }\n }, []);\n return (React.createElement(StickToBottomContext.Provider, { value: context },\n React.createElement(\"div\", { ...props }, typeof children === \"function\" ? children(context) : children)));\n}\n(function (StickToBottom) {\n function Content({ children, scrollClassName, ...props }) {\n const context = useStickToBottomContext();\n return (React.createElement(\"div\", { ref: context.scrollRef, style: {\n height: \"100%\",\n width: \"100%\",\n scrollbarGutter: \"stable both-edges\",\n }, className: scrollClassName },\n React.createElement(\"div\", { ...props, ref: context.contentRef }, typeof children === \"function\" ? children(context) : children)));\n }\n StickToBottom.Content = Content;\n})(StickToBottom || (StickToBottom = {}));\n/**\n * Use this hook inside a <StickToBottom> component to gain access to whether the component is at the bottom of the scrollable area.\n */\nexport function useStickToBottomContext() {\n const context = useContext(StickToBottomContext);\n if (!context) {\n throw new Error(\"use-stick-to-bottom component context must be used within a StickToBottom component\");\n }\n return context;\n}\n","import { type ClassValue, clsx } from \"clsx\";\nimport { extendTailwindMerge } from \"tailwind-merge\";\n\nconst twMerge = extendTailwindMerge({ prefix: \"ww\" });\n\nexport function cn(...inputs: ClassValue[]) {\n\treturn twMerge(clsx(inputs));\n}\n","\"use client\";\n\nimport type { ComponentProps } from \"react\";\nimport { cn } from \"../lib/utils\";\n\nexport type ButtonProps = ComponentProps<\"button\"> & {\n\tvariant?: \"default\" | \"outline\" | \"ghost\";\n\tsize?: \"default\" | \"sm\" | \"icon\" | \"icon-sm\";\n};\n\nexport const Button = ({\n\tclassName,\n\tvariant = \"default\",\n\tsize = \"default\",\n\ttype = \"button\",\n\t...props\n}: ButtonProps) => (\n\t<button\n\t\ttype={type}\n\t\tclassName={cn(\n\t\t\t\"ww:inline-flex ww:cursor-pointer ww:items-center ww:justify-center ww:rounded-md ww:font-medium ww:transition-colors ww:disabled:pointer-events-none ww:disabled:opacity-50\",\n\t\t\tvariant === \"default\" &&\n\t\t\t\t\"ww:bg-primary ww:text-primary-foreground ww:hover:bg-primary/90\",\n\t\t\tvariant === \"outline\" &&\n\t\t\t\t\"ww:border ww:border-border ww:bg-background ww:hover:bg-accent ww:hover:text-accent-foreground\",\n\t\t\tvariant === \"ghost\" &&\n\t\t\t\t\"ww:hover:bg-accent ww:hover:text-accent-foreground\",\n\t\t\tsize === \"default\" && \"ww:h-9 ww:px-4 ww:py-2 ww:text-sm\",\n\t\t\tsize === \"sm\" && \"ww:h-8 ww:px-3 ww:text-xs\",\n\t\t\tsize === \"icon\" && \"ww:size-9 ww:rounded-full\",\n\t\t\tsize === \"icon-sm\" && \"ww:size-7 ww:rounded-full\",\n\t\t\tclassName,\n\t\t)}\n\t\t{...props}\n\t/>\n);\n","import crypto from 'crypto'\nimport { urlAlphabet } from './url-alphabet/index.js'\nconst POOL_SIZE_MULTIPLIER = 128\nlet pool, poolOffset\nlet fillPool = bytes => {\n if (!pool || pool.length < bytes) {\n pool = Buffer.allocUnsafe(bytes * POOL_SIZE_MULTIPLIER)\n crypto.randomFillSync(pool)\n poolOffset = 0\n } else if (poolOffset + bytes > pool.length) {\n crypto.randomFillSync(pool)\n poolOffset = 0\n }\n poolOffset += bytes\n}\nlet random = bytes => {\n fillPool((bytes |= 0))\n return pool.subarray(poolOffset - bytes, poolOffset)\n}\nlet customRandom = (alphabet, defaultSize, getRandom) => {\n let mask = (2 << (31 - Math.clz32((alphabet.length - 1) | 1))) - 1\n let step = Math.ceil((1.6 * mask * defaultSize) / alphabet.length)\n return (size = defaultSize) => {\n let id = ''\n while (true) {\n let bytes = getRandom(step)\n let i = step\n while (i--) {\n id += alphabet[bytes[i] & mask] || ''\n if (id.length === size) return id\n }\n }\n }\n}\nlet customAlphabet = (alphabet, size = 21) =>\n customRandom(alphabet, size, random)\nlet nanoid = (size = 21) => {\n fillPool((size |= 0))\n let id = ''\n for (let i = poolOffset - size; i < poolOffset; i++) {\n id += urlAlphabet[pool[i] & 63]\n }\n return id\n}\nexport { nanoid, customAlphabet, customRandom, urlAlphabet, random }\n","let urlAlphabet =\n 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'\nexport { urlAlphabet }\n","\"use client\";\n\nimport type { ChatStatus, FileUIPart } from \"ai\";\nimport {\n\tArrowUpIcon,\n\tLoaderIcon,\n\tPaperclipIcon,\n\tSquareIcon,\n\tXIcon,\n} from \"lucide-react\";\nimport { nanoid } from \"nanoid\";\nimport type {\n\tChangeEvent,\n\tClipboardEventHandler,\n\tComponentProps,\n\tFormEvent,\n\tFormEventHandler,\n\tHTMLAttributes,\n\tKeyboardEventHandler,\n} from \"react\";\nimport {\n\tcreateContext,\n\tuseCallback,\n\tuseContext,\n\tuseEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Button } from \"../ui/button\";\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nconst convertBlobUrlToDataUrl = async (url: string): Promise<string | null> => {\n\ttry {\n\t\tconst response = await fetch(url);\n\t\tconst blob = await response.blob();\n\t\treturn new Promise((resolve) => {\n\t\t\tconst reader = new FileReader();\n\t\t\treader.onloadend = () => resolve(reader.result as string);\n\t\t\treader.onerror = () => resolve(null);\n\t\t\treader.readAsDataURL(blob);\n\t\t});\n\t} catch {\n\t\treturn null;\n\t}\n};\n\n// ============================================================================\n// Attachments Context\n// ============================================================================\n\nexport interface AttachmentsContext {\n\tfiles: (FileUIPart & { id: string })[];\n\tadd: (files: File[] | FileList) => void;\n\tremove: (id: string) => void;\n\tclear: () => void;\n\topenFileDialog: () => void;\n}\n\nconst LocalAttachmentsContext = createContext<AttachmentsContext | null>(null);\n\nexport const usePromptInputAttachments = () => {\n\tconst context = useContext(LocalAttachmentsContext);\n\tif (!context) {\n\t\tthrow new Error(\n\t\t\t\"usePromptInputAttachments must be used within a PromptInput\",\n\t\t);\n\t}\n\treturn context;\n};\n\n// ============================================================================\n// PromptInput Message Type\n// ============================================================================\n\nexport interface PromptInputMessage {\n\ttext: string;\n\tfiles: FileUIPart[];\n}\n\n// ============================================================================\n// PromptInput\n// ============================================================================\n\nexport type PromptInputProps = Omit<\n\tHTMLAttributes<HTMLFormElement>,\n\t\"onSubmit\"\n> & {\n\taccept?: string;\n\tmultiple?: boolean;\n\tglobalDrop?: boolean;\n\tmaxFiles?: number;\n\tmaxFileSize?: number;\n\tonSubmit: (\n\t\tmessage: PromptInputMessage,\n\t\tevent: FormEvent<HTMLFormElement>,\n\t) => void | Promise<void>;\n};\n\nexport const PromptInput = ({\n\tclassName,\n\taccept,\n\tmultiple,\n\tglobalDrop,\n\tmaxFiles,\n\tmaxFileSize,\n\tonSubmit,\n\tchildren,\n\t...props\n}: PromptInputProps) => {\n\tconst inputRef = useRef<HTMLInputElement | null>(null);\n\tconst formRef = useRef<HTMLFormElement | null>(null);\n\tconst [items, setItems] = useState<(FileUIPart & { id: string })[]>([]);\n\tconst filesRef = useRef(items);\n\n\tuseEffect(() => {\n\t\tfilesRef.current = items;\n\t}, [items]);\n\n\tconst openFileDialog = useCallback(() => {\n\t\tinputRef.current?.click();\n\t}, []);\n\n\tconst add = useCallback(\n\t\t(fileList: File[] | FileList) => {\n\t\t\tconst incoming = [...fileList];\n\t\t\tif (incoming.length === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst withinSize = (f: File) =>\n\t\t\t\tmaxFileSize ? f.size <= maxFileSize : true;\n\t\t\tconst valid = incoming.filter(withinSize);\n\n\t\t\tsetItems((prev) => {\n\t\t\t\tconst capacity =\n\t\t\t\t\ttypeof maxFiles === \"number\"\n\t\t\t\t\t\t? Math.max(0, maxFiles - prev.length)\n\t\t\t\t\t\t: undefined;\n\t\t\t\tconst capped =\n\t\t\t\t\ttypeof capacity === \"number\" ? valid.slice(0, capacity) : valid;\n\t\t\t\treturn [\n\t\t\t\t\t...prev,\n\t\t\t\t\t...capped.map((file) => ({\n\t\t\t\t\t\tfilename: file.name,\n\t\t\t\t\t\tid: nanoid(),\n\t\t\t\t\t\tmediaType: file.type,\n\t\t\t\t\t\ttype: \"file\" as const,\n\t\t\t\t\t\turl: URL.createObjectURL(file),\n\t\t\t\t\t})),\n\t\t\t\t];\n\t\t\t});\n\t\t},\n\t\t[maxFiles, maxFileSize],\n\t);\n\n\tconst remove = useCallback((id: string) => {\n\t\tsetItems((prev) => {\n\t\t\tconst found = prev.find((f) => f.id === id);\n\t\t\tif (found?.url) {\n\t\t\t\tURL.revokeObjectURL(found.url);\n\t\t\t}\n\t\t\treturn prev.filter((f) => f.id !== id);\n\t\t});\n\t}, []);\n\n\tconst clear = useCallback(() => {\n\t\tsetItems((prev) => {\n\t\t\tfor (const f of prev) {\n\t\t\t\tif (f.url) {\n\t\t\t\t\tURL.revokeObjectURL(f.url);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn [];\n\t\t});\n\t}, []);\n\n\t// Cleanup blob URLs on unmount\n\tuseEffect(\n\t\t() => () => {\n\t\t\tfor (const f of filesRef.current) {\n\t\t\t\tif (f.url) {\n\t\t\t\t\tURL.revokeObjectURL(f.url);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[],\n\t);\n\n\tconst handleChange = useCallback(\n\t\t(event: ChangeEvent<HTMLInputElement>) => {\n\t\t\tif (event.currentTarget.files) {\n\t\t\t\tadd(event.currentTarget.files);\n\t\t\t}\n\t\t\tevent.currentTarget.value = \"\";\n\t\t},\n\t\t[add],\n\t);\n\n\t// Global drop support\n\tuseEffect(() => {\n\t\tif (!globalDrop) {\n\t\t\treturn;\n\t\t}\n\t\tconst onDragOver = (e: DragEvent) => {\n\t\t\tif (e.dataTransfer?.types?.includes(\"Files\")) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t};\n\t\tconst onDrop = (e: DragEvent) => {\n\t\t\tif (e.dataTransfer?.types?.includes(\"Files\")) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t\tif (e.dataTransfer?.files && e.dataTransfer.files.length > 0) {\n\t\t\t\tadd(e.dataTransfer.files);\n\t\t\t}\n\t\t};\n\t\tdocument.addEventListener(\"dragover\", onDragOver);\n\t\tdocument.addEventListener(\"drop\", onDrop);\n\t\treturn () => {\n\t\t\tdocument.removeEventListener(\"dragover\", onDragOver);\n\t\t\tdocument.removeEventListener(\"drop\", onDrop);\n\t\t};\n\t}, [add, globalDrop]);\n\n\tconst handleSubmit: FormEventHandler<HTMLFormElement> = useCallback(\n\t\tasync (event) => {\n\t\t\tevent.preventDefault();\n\t\t\tconst form = event.currentTarget;\n\t\t\tconst formData = new FormData(form);\n\t\t\tconst text = (formData.get(\"message\") as string) || \"\";\n\n\t\t\tform.reset();\n\n\t\t\tconst convertedFiles: FileUIPart[] = await Promise.all(\n\t\t\t\titems.map(async ({ id: _id, ...item }) => {\n\t\t\t\t\tif (item.url?.startsWith(\"blob:\")) {\n\t\t\t\t\t\tconst dataUrl = await convertBlobUrlToDataUrl(item.url);\n\t\t\t\t\t\treturn { ...item, url: dataUrl ?? item.url };\n\t\t\t\t\t}\n\t\t\t\t\treturn item;\n\t\t\t\t}),\n\t\t\t);\n\n\t\t\ttry {\n\t\t\t\tconst result = onSubmit({ files: convertedFiles, text }, event);\n\t\t\t\tif (result instanceof Promise) {\n\t\t\t\t\tawait result;\n\t\t\t\t}\n\t\t\t\tclear();\n\t\t\t} catch {\n\t\t\t\t// Don't clear on error\n\t\t\t}\n\t\t},\n\t\t[items, onSubmit, clear],\n\t);\n\n\tconst attachmentsCtx = useMemo<AttachmentsContext>(\n\t\t() => ({\n\t\t\tadd,\n\t\t\tclear,\n\t\t\tfiles: items,\n\t\t\topenFileDialog,\n\t\t\tremove,\n\t\t}),\n\t\t[items, add, remove, clear, openFileDialog],\n\t);\n\n\treturn (\n\t\t<LocalAttachmentsContext.Provider value={attachmentsCtx}>\n\t\t\t<input\n\t\t\t\taccept={accept}\n\t\t\t\taria-label=\"Upload files\"\n\t\t\t\tclassName=\"ww:hidden\"\n\t\t\t\tmultiple={multiple}\n\t\t\t\tonChange={handleChange}\n\t\t\t\tref={inputRef}\n\t\t\t\ttitle=\"Upload files\"\n\t\t\t\ttype=\"file\"\n\t\t\t/>\n\t\t\t<form\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"ww:flex ww:w-full ww:flex-col ww:rounded-lg ww:border ww:border-border ww:bg-background\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\tonSubmit={handleSubmit}\n\t\t\t\tref={formRef}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</form>\n\t\t</LocalAttachmentsContext.Provider>\n\t);\n};\n\n// ============================================================================\n// Layout Components\n// ============================================================================\n\nexport type PromptInputHeaderProps = HTMLAttributes<HTMLDivElement>;\n\nexport const PromptInputHeader = ({\n\tclassName,\n\t...props\n}: PromptInputHeaderProps) => (\n\t<div\n\t\tclassName={cn(\"ww:flex ww:flex-wrap ww:gap-1 ww:px-3 ww:pt-3\", className)}\n\t\t{...props}\n\t/>\n);\n\nexport type PromptInputBodyProps = HTMLAttributes<HTMLDivElement>;\n\nexport const PromptInputBody = ({\n\tclassName,\n\t...props\n}: PromptInputBodyProps) => (\n\t<div className={cn(\"ww:contents\", className)} {...props} />\n);\n\nexport type PromptInputFooterProps = HTMLAttributes<HTMLDivElement>;\n\nexport const PromptInputFooter = ({\n\tclassName,\n\t...props\n}: PromptInputFooterProps) => (\n\t<div\n\t\tclassName={cn(\n\t\t\t\"ww:flex ww:items-center ww:justify-between ww:gap-1 ww:px-3 ww:pb-3\",\n\t\t\tclassName,\n\t\t)}\n\t\t{...props}\n\t/>\n);\n\nexport type PromptInputToolsProps = HTMLAttributes<HTMLDivElement>;\n\nexport const PromptInputTools = ({\n\tclassName,\n\t...props\n}: PromptInputToolsProps) => (\n\t<div\n\t\tclassName={cn(\"ww:flex ww:min-w-0 ww:items-center ww:gap-1\", className)}\n\t\t{...props}\n\t/>\n);\n\n// ============================================================================\n// Textarea\n// ============================================================================\n\nexport type PromptInputTextareaProps = ComponentProps<\"textarea\">;\n\nexport const PromptInputTextarea = ({\n\tonChange,\n\tonKeyDown,\n\tclassName,\n\tplaceholder = \"What would you like to know?\",\n\t...props\n}: PromptInputTextareaProps) => {\n\tconst attachments = usePromptInputAttachments();\n\tconst [isComposing, setIsComposing] = useState(false);\n\n\tconst handleKeyDown: KeyboardEventHandler<HTMLTextAreaElement> = useCallback(\n\t\t(e) => {\n\t\t\tonKeyDown?.(e);\n\t\t\tif (e.defaultPrevented) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (e.key === \"Enter\") {\n\t\t\t\tif (isComposing || e.nativeEvent.isComposing) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (e.shiftKey) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\te.preventDefault();\n\n\t\t\t\tconst { form } = e.currentTarget;\n\t\t\t\tconst submitButton = form?.querySelector(\n\t\t\t\t\t'button[type=\"submit\"]',\n\t\t\t\t) as HTMLButtonElement | null;\n\t\t\t\tif (submitButton?.disabled) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tform?.requestSubmit();\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\te.key === \"Backspace\" &&\n\t\t\t\te.currentTarget.value === \"\" &&\n\t\t\t\tattachments.files.length > 0\n\t\t\t) {\n\t\t\t\te.preventDefault();\n\t\t\t\tconst lastAttachment = attachments.files.at(-1);\n\t\t\t\tif (lastAttachment) {\n\t\t\t\t\tattachments.remove(lastAttachment.id);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[onKeyDown, isComposing, attachments],\n\t);\n\n\tconst handlePaste: ClipboardEventHandler<HTMLTextAreaElement> = useCallback(\n\t\t(event) => {\n\t\t\tconst items = event.clipboardData?.items;\n\t\t\tif (!items) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst files: File[] = [];\n\t\t\tfor (const item of items) {\n\t\t\t\tif (item.kind === \"file\") {\n\t\t\t\t\tconst file = item.getAsFile();\n\t\t\t\t\tif (file) {\n\t\t\t\t\t\tfiles.push(file);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (files.length > 0) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tattachments.add(files);\n\t\t\t}\n\t\t},\n\t\t[attachments],\n\t);\n\n\treturn (\n\t\t<textarea\n\t\t\tclassName={cn(\n\t\t\t\t\"ww:field-sizing-content ww:max-h-48 ww:min-h-16 ww:w-full ww:resize-none ww:border-0 ww:bg-transparent ww:px-3 ww:py-3 ww:text-sm ww:outline-none ww:placeholder:text-muted-foreground\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tname=\"message\"\n\t\t\tonCompositionEnd={() => setIsComposing(false)}\n\t\t\tonCompositionStart={() => setIsComposing(true)}\n\t\t\tonKeyDown={handleKeyDown}\n\t\t\tonPaste={handlePaste}\n\t\t\tplaceholder={placeholder}\n\t\t\tonChange={onChange}\n\t\t\t{...props}\n\t\t/>\n\t);\n};\n\n// ============================================================================\n// Submit Button\n// ============================================================================\n\nexport type PromptInputSubmitProps = ComponentProps<typeof Button> & {\n\tstatus?: ChatStatus;\n\tonStop?: () => void;\n};\n\nexport const PromptInputSubmit = ({\n\tclassName,\n\tstatus,\n\tonStop,\n\tonClick,\n\tchildren,\n\t...props\n}: PromptInputSubmitProps) => {\n\tconst isGenerating = status === \"submitted\" || status === \"streaming\";\n\n\tlet Icon = <ArrowUpIcon className=\"ww:size-4\" />;\n\tif (status === \"submitted\") {\n\t\tIcon = <LoaderIcon className=\"ww:size-4 ww:animate-spin\" />;\n\t} else if (status === \"streaming\") {\n\t\tIcon = <SquareIcon className=\"ww:size-4\" />;\n\t}\n\n\tconst handleClick = useCallback(\n\t\t(e: React.MouseEvent<HTMLButtonElement>) => {\n\t\t\tif (isGenerating && onStop) {\n\t\t\t\te.preventDefault();\n\t\t\t\tonStop();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tonClick?.(e);\n\t\t},\n\t\t[isGenerating, onStop, onClick],\n\t);\n\n\treturn (\n\t\t<Button\n\t\t\taria-label={isGenerating ? \"Stop\" : \"Submit\"}\n\t\t\tclassName={cn(\n\t\t\t\t\"ww:bg-foreground ww:text-background ww:hover:bg-foreground ww:rounded-full\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tonClick={handleClick}\n\t\t\tsize=\"icon-sm\"\n\t\t\ttype={isGenerating && onStop ? \"button\" : \"submit\"}\n\t\t\tvariant=\"ghost\"\n\t\t\t{...props}\n\t\t>\n\t\t\t{children ?? Icon}\n\t\t</Button>\n\t);\n};\n\n// ============================================================================\n// Attachment Add Button (simple file picker, no Radix dropdown)\n// ============================================================================\n\nexport type PromptInputAddAttachmentsProps = ComponentProps<typeof Button>;\n\nexport const PromptInputAddAttachments = ({\n\tclassName,\n\tchildren,\n\t...props\n}: PromptInputAddAttachmentsProps) => {\n\tconst attachments = usePromptInputAttachments();\n\tconst hasFiles = attachments.files.length > 0;\n\n\tif (hasFiles) {\n\t\treturn (\n\t\t\t<Button\n\t\t\t\tclassName={cn(\"ww:group ww:relative\", className)}\n\t\t\t\tonClick={() => attachments.clear()}\n\t\t\t\tsize=\"icon-sm\"\n\t\t\t\ttype=\"button\"\n\t\t\t\tvariant=\"ghost\"\n\t\t\t\taria-label=\"Remove all attachments\"\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t<span className=\"ww:flex ww:size-5 ww:items-center ww:justify-center ww:rounded-full ww:bg-primary ww:text-[10px] ww:font-medium ww:text-primary-foreground ww:transition-opacity ww:group-hover:opacity-0\">\n\t\t\t\t\t{attachments.files.length}\n\t\t\t\t</span>\n\t\t\t\t<XIcon className=\"ww:absolute ww:size-4 ww:opacity-0 ww:transition-opacity ww:group-hover:opacity-100\" />\n\t\t\t</Button>\n\t\t);\n\t}\n\n\treturn (\n\t\t<Button\n\t\t\tclassName={cn(className)}\n\t\t\tonClick={() => attachments.openFileDialog()}\n\t\t\tsize=\"icon-sm\"\n\t\t\ttype=\"button\"\n\t\t\tvariant=\"ghost\"\n\t\t\t{...props}\n\t\t>\n\t\t\t{children ?? <PaperclipIcon className=\"ww:size-4\" />}\n\t\t</Button>\n\t);\n};\n","\"use client\";\n\nimport { XIcon } from \"lucide-react\";\nimport { memo, useCallback } from \"react\";\nimport {\n\tQueue,\n\tQueueItem,\n\tQueueItemAction,\n\tQueueItemActions,\n\tQueueItemContent,\n\tQueueItemIndicator,\n} from \"../ai-elements/queue\";\nimport type { QueuedMessage } from \"../hooks/use-chat-engine\";\nimport { cn } from \"../lib/utils\";\n\ninterface ChatQueueItemProps {\n\tmessage: QueuedMessage;\n\tonRemove: (id: string) => void;\n}\n\nconst ChatQueueItem = memo(({ message, onRemove }: ChatQueueItemProps) => {\n\tconst handleRemove = useCallback(\n\t\t() => onRemove(message.id),\n\t\t[onRemove, message.id],\n\t);\n\n\treturn (\n\t\t<QueueItem>\n\t\t\t<QueueItemIndicator />\n\t\t\t<QueueItemContent>{message.text || \"(attachment)\"}</QueueItemContent>\n\t\t\t<QueueItemActions>\n\t\t\t\t<QueueItemAction aria-label=\"Remove from queue\" onClick={handleRemove}>\n\t\t\t\t\t<XIcon className=\"ww:size-3\" />\n\t\t\t\t</QueueItemAction>\n\t\t\t</QueueItemActions>\n\t\t</QueueItem>\n\t);\n});\n\nChatQueueItem.displayName = \"ChatQueueItem\";\n\ninterface ChatQueueProps {\n\tqueuedMessages: QueuedMessage[];\n\tonRemove: (id: string) => void;\n\tclassName?: string;\n}\n\nexport function ChatQueue({\n\tqueuedMessages,\n\tonRemove,\n\tclassName,\n}: ChatQueueProps) {\n\tif (queuedMessages.length === 0) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<Queue className={cn(\"ww:border-t ww:border-border\", className)}>\n\t\t\t<div className=\"ww:text-[11px] ww:font-medium ww:text-muted-foreground ww:px-2\">\n\t\t\t\t{queuedMessages.length} queued\n\t\t\t</div>\n\t\t\t<ul>\n\t\t\t\t{queuedMessages.map((msg) => (\n\t\t\t\t\t<ChatQueueItem key={msg.id} message={msg} onRemove={onRemove} />\n\t\t\t\t))}\n\t\t\t</ul>\n\t\t</Queue>\n\t);\n}\n","\"use client\";\n\nimport type { ComponentProps } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Button } from \"../ui/button\";\n\nexport type QueueProps = ComponentProps<\"div\">;\n\nexport const Queue = ({ className, ...props }: QueueProps) => (\n\t<div\n\t\tclassName={cn(\"ww:flex ww:flex-col ww:gap-1 ww:px-3 ww:py-2\", className)}\n\t\t{...props}\n\t/>\n);\n\nexport type QueueItemProps = ComponentProps<\"li\">;\n\nexport const QueueItem = ({ className, ...props }: QueueItemProps) => (\n\t<li\n\t\tclassName={cn(\n\t\t\t\"ww:group ww:flex ww:items-center ww:gap-2 ww:rounded-md ww:px-2 ww:py-1 ww:text-sm ww:transition-colors ww:hover:bg-muted\",\n\t\t\tclassName,\n\t\t)}\n\t\t{...props}\n\t/>\n);\n\nexport type QueueItemIndicatorProps = ComponentProps<\"span\">;\n\nexport const QueueItemIndicator = ({\n\tclassName,\n\t...props\n}: QueueItemIndicatorProps) => (\n\t<span\n\t\tclassName={cn(\n\t\t\t\"ww:inline-block ww:size-2 ww:shrink-0 ww:rounded-full ww:border ww:border-muted-foreground/50\",\n\t\t\tclassName,\n\t\t)}\n\t\t{...props}\n\t/>\n);\n\nexport type QueueItemContentProps = ComponentProps<\"span\">;\n\nexport const QueueItemContent = ({\n\tclassName,\n\t...props\n}: QueueItemContentProps) => (\n\t<span\n\t\tclassName={cn(\n\t\t\t\"ww:line-clamp-1 ww:grow ww:break-words ww:text-muted-foreground\",\n\t\t\tclassName,\n\t\t)}\n\t\t{...props}\n\t/>\n);\n\nexport type QueueItemActionsProps = ComponentProps<\"div\">;\n\nexport const QueueItemActions = ({\n\tclassName,\n\t...props\n}: QueueItemActionsProps) => (\n\t<div\n\t\tclassName={cn(\n\t\t\t\"ww:flex ww:shrink-0 ww:gap-1 ww:opacity-0 ww:transition-opacity ww:group-hover:opacity-100\",\n\t\t\tclassName,\n\t\t)}\n\t\t{...props}\n\t/>\n);\n\nexport type QueueItemActionProps = Omit<\n\tComponentProps<typeof Button>,\n\t\"variant\" | \"size\"\n>;\n\nexport const QueueItemAction = ({\n\tclassName,\n\t...props\n}: QueueItemActionProps) => (\n\t<Button\n\t\tclassName={cn(\n\t\t\t\"ww:size-auto ww:rounded ww:p-1 ww:text-muted-foreground ww:hover:bg-muted-foreground/10 ww:hover:text-foreground\",\n\t\t\tclassName,\n\t\t)}\n\t\tsize=\"icon\"\n\t\ttype=\"button\"\n\t\tvariant=\"ghost\"\n\t\t{...props}\n\t/>\n);\n","\"use client\";\n\nimport type { UIMessage } from \"@ai-sdk/react\";\nimport { useState } from \"react\";\n\ninterface ExportSessionButtonProps {\n\tmessages: UIMessage[];\n\tevalEnabled: boolean;\n\tapi?: string;\n}\n\nexport function ExportSessionButton({\n\tmessages,\n\tevalEnabled,\n\tapi = \"/api/waniwani\",\n}: ExportSessionButtonProps) {\n\tconst [saving, setSaving] = useState(false);\n\tconst [feedback, setFeedback] = useState<\"saved\" | \"error\" | null>(null);\n\n\tconst handleExport = async () => {\n\t\tconst session = {\n\t\t\tname: `session-${new Date().toISOString().slice(0, 19)}`,\n\t\t\ttype: \"functional\" as const,\n\t\t\tmessages,\n\t\t\tmode: \"manual\" as const,\n\t\t};\n\n\t\tsetSaving(true);\n\t\tsetFeedback(null);\n\n\t\ttry {\n\t\t\tconst res = await fetch(`${api}/scenarios`, {\n\t\t\t\tmethod: \"POST\",\n\t\t\t\theaders: { \"Content-Type\": \"application/json\" },\n\t\t\t\tbody: JSON.stringify(session),\n\t\t\t});\n\t\t\tif (!res.ok) {\n\t\t\t\tthrow new Error(`${res.status}`);\n\t\t\t}\n\t\t\tsetFeedback(\"saved\");\n\t\t} catch {\n\t\t\tsetFeedback(\"error\");\n\t\t} finally {\n\t\t\tsetSaving(false);\n\t\t\tsetTimeout(() => setFeedback(null), 2000);\n\t\t}\n\t};\n\n\tif (!evalEnabled || messages.length === 0) {\n\t\treturn null;\n\t}\n\n\tconst label = saving\n\t\t? \"saving...\"\n\t\t: feedback === \"saved\"\n\t\t\t? \"saved\"\n\t\t\t: feedback === \"error\"\n\t\t\t\t? \"error\"\n\t\t\t\t: \"export\";\n\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tonClick={handleExport}\n\t\t\tdisabled={saving}\n\t\t\ttitle=\"Save scenario to WaniWani\"\n\t\t\tclassName=\"ww:ml-auto ww:text-[10px] ww:font-mono ww:uppercase ww:tracking-wider ww:text-muted-foreground hover:ww:text-foreground ww:cursor-pointer ww:transition-colors ww:disabled:opacity-40\"\n\t\t>\n\t\t\t{label}\n\t\t</button>\n\t);\n}\n","\"use client\";\n\nimport type { FileUIPart } from \"ai\";\nimport { FileIcon } from \"lucide-react\";\nimport type { HTMLAttributes } from \"react\";\nimport { cn } from \"../lib/utils\";\n\n// ============================================================================\n// Attachments (inline list for chat bubbles)\n// ============================================================================\n\nexport type AttachmentsProps = HTMLAttributes<HTMLDivElement> & {\n\tfiles: FileUIPart[];\n};\n\nexport const Attachments = ({\n\tfiles,\n\tclassName,\n\t...props\n}: AttachmentsProps) => {\n\tif (files.length === 0) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\"ww:flex ww:flex-wrap ww:gap-1.5\", className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{files.map((file, i) => (\n\t\t\t\t<AttachmentItem key={i} file={file} />\n\t\t\t))}\n\t\t</div>\n\t);\n};\n\n// ============================================================================\n// AttachmentItem\n// ============================================================================\n\nfunction AttachmentItem({ file }: { file: FileUIPart }) {\n\tconst isImage = file.mediaType?.startsWith(\"image/\");\n\n\tif (isImage && file.url) {\n\t\treturn (\n\t\t\t<img\n\t\t\t\tsrc={file.url}\n\t\t\t\talt={file.filename ?? \"attachment\"}\n\t\t\t\tclassName=\"ww:h-16 ww:max-w-32 ww:rounded ww:object-cover\"\n\t\t\t/>\n\t\t);\n\t}\n\n\treturn (\n\t\t<span className=\"ww:inline-flex ww:items-center ww:gap-1.5 ww:rounded ww:bg-background/20 ww:px-2 ww:py-1 ww:text-xs\">\n\t\t\t<FileIcon className=\"ww:size-3 ww:shrink-0\" />\n\t\t\t<span className=\"ww:max-w-24 ww:truncate\">{file.filename ?? \"file\"}</span>\n\t\t</span>\n\t);\n}\n","\"use client\";\n\nimport type { HTMLAttributes } from \"react\";\nimport { cn } from \"../lib/utils\";\n\nexport type LoaderProps = HTMLAttributes<HTMLDivElement> & {\n\tsize?: number;\n};\n\nexport const Loader = ({ className, size = 5, ...props }: LoaderProps) => (\n\t<div className={cn(\"ww:flex ww:items-center ww:gap-1\", className)} {...props}>\n\t\t{[0, 1, 2].map((i) => (\n\t\t\t<div\n\t\t\t\tkey={i}\n\t\t\t\tclassName=\"ww:rounded-full ww:bg-muted-foreground/60\"\n\t\t\t\tstyle={{\n\t\t\t\t\twidth: size,\n\t\t\t\t\theight: size,\n\t\t\t\t\tanimation: \"ww-pulse 1.4s ease-in-out infinite\",\n\t\t\t\t\tanimationDelay: `${i * 0.2}s`,\n\t\t\t\t}}\n\t\t\t/>\n\t\t))}\n\t</div>\n);\n","/**\n * Character codes.\n *\n * This module is compiled away!\n *\n * micromark works based on character codes.\n * This module contains constants for the ASCII block and the replacement\n * character.\n * A couple of them are handled in a special way, such as the line endings\n * (CR, LF, and CR+LF, commonly known as end-of-line: EOLs), the tab (horizontal\n * tab) and its expansion based on what column it’s at (virtual space),\n * and the end-of-file (eof) character.\n * As values are preprocessed before handling them, the actual characters LF,\n * CR, HT, and NUL (which is present as the replacement character), are\n * guaranteed to not exist.\n *\n * Unicode basic latin block.\n */\nexport const codes = /** @type {const} */ ({\n carriageReturn: -5,\n lineFeed: -4,\n carriageReturnLineFeed: -3,\n horizontalTab: -2,\n virtualSpace: -1,\n eof: null,\n nul: 0,\n soh: 1,\n stx: 2,\n etx: 3,\n eot: 4,\n enq: 5,\n ack: 6,\n bel: 7,\n bs: 8,\n ht: 9, // `\\t`\n lf: 10, // `\\n`\n vt: 11, // `\\v`\n ff: 12, // `\\f`\n cr: 13, // `\\r`\n so: 14,\n si: 15,\n dle: 16,\n dc1: 17,\n dc2: 18,\n dc3: 19,\n dc4: 20,\n nak: 21,\n syn: 22,\n etb: 23,\n can: 24,\n em: 25,\n sub: 26,\n esc: 27,\n fs: 28,\n gs: 29,\n rs: 30,\n us: 31,\n space: 32,\n exclamationMark: 33, // `!`\n quotationMark: 34, // `\"`\n numberSign: 35, // `#`\n dollarSign: 36, // `$`\n percentSign: 37, // `%`\n ampersand: 38, // `&`\n apostrophe: 39, // `'`\n leftParenthesis: 40, // `(`\n rightParenthesis: 41, // `)`\n asterisk: 42, // `*`\n plusSign: 43, // `+`\n comma: 44, // `,`\n dash: 45, // `-`\n dot: 46, // `.`\n slash: 47, // `/`\n digit0: 48, // `0`\n digit1: 49, // `1`\n digit2: 50, // `2`\n digit3: 51, // `3`\n digit4: 52, // `4`\n digit5: 53, // `5`\n digit6: 54, // `6`\n digit7: 55, // `7`\n digit8: 56, // `8`\n digit9: 57, // `9`\n colon: 58, // `:`\n semicolon: 59, // `;`\n lessThan: 60, // `<`\n equalsTo: 61, // `=`\n greaterThan: 62, // `>`\n questionMark: 63, // `?`\n atSign: 64, // `@`\n uppercaseA: 65, // `A`\n uppercaseB: 66, // `B`\n uppercaseC: 67, // `C`\n uppercaseD: 68, // `D`\n uppercaseE: 69, // `E`\n uppercaseF: 70, // `F`\n uppercaseG: 71, // `G`\n uppercaseH: 72, // `H`\n uppercaseI: 73, // `I`\n uppercaseJ: 74, // `J`\n uppercaseK: 75, // `K`\n uppercaseL: 76, // `L`\n uppercaseM: 77, // `M`\n uppercaseN: 78, // `N`\n uppercaseO: 79, // `O`\n uppercaseP: 80, // `P`\n uppercaseQ: 81, // `Q`\n uppercaseR: 82, // `R`\n uppercaseS: 83, // `S`\n uppercaseT: 84, // `T`\n uppercaseU: 85, // `U`\n uppercaseV: 86, // `V`\n uppercaseW: 87, // `W`\n uppercaseX: 88, // `X`\n uppercaseY: 89, // `Y`\n uppercaseZ: 90, // `Z`\n leftSquareBracket: 91, // `[`\n backslash: 92, // `\\`\n rightSquareBracket: 93, // `]`\n caret: 94, // `^`\n underscore: 95, // `_`\n graveAccent: 96, // `` ` ``\n lowercaseA: 97, // `a`\n lowercaseB: 98, // `b`\n lowercaseC: 99, // `c`\n lowercaseD: 100, // `d`\n lowercaseE: 101, // `e`\n lowercaseF: 102, // `f`\n lowercaseG: 103, // `g`\n lowercaseH: 104, // `h`\n lowercaseI: 105, // `i`\n lowercaseJ: 106, // `j`\n lowercaseK: 107, // `k`\n lowercaseL: 108, // `l`\n lowercaseM: 109, // `m`\n lowercaseN: 110, // `n`\n lowercaseO: 111, // `o`\n lowercaseP: 112, // `p`\n lowercaseQ: 113, // `q`\n lowercaseR: 114, // `r`\n lowercaseS: 115, // `s`\n lowercaseT: 116, // `t`\n lowercaseU: 117, // `u`\n lowercaseV: 118, // `v`\n lowercaseW: 119, // `w`\n lowercaseX: 120, // `x`\n lowercaseY: 121, // `y`\n lowercaseZ: 122, // `z`\n leftCurlyBrace: 123, // `{`\n verticalBar: 124, // `|`\n rightCurlyBrace: 125, // `}`\n tilde: 126, // `~`\n del: 127,\n // Unicode Specials block.\n byteOrderMarker: 65_279,\n // Unicode Specials block.\n replacementCharacter: 65_533 // `�`\n})\n","/**\n * This module is compiled away!\n *\n * Parsing markdown comes with a couple of constants, such as minimum or maximum\n * sizes of certain sequences.\n * Additionally, there are a couple symbols used inside micromark.\n * These are all defined here, but compiled away by scripts.\n */\nexport const constants = /** @type {const} */ ({\n attentionSideAfter: 2, // Symbol to mark an attention sequence as after content: `a*`\n attentionSideBefore: 1, // Symbol to mark an attention sequence as before content: `*a`\n atxHeadingOpeningFenceSizeMax: 6, // 6 number signs is fine, 7 isn’t.\n autolinkDomainSizeMax: 63, // 63 characters is fine, 64 is too many.\n autolinkSchemeSizeMax: 32, // 32 characters is fine, 33 is too many.\n cdataOpeningString: 'CDATA[', // And preceded by `<![`.\n characterGroupPunctuation: 2, // Symbol used to indicate a character is punctuation\n characterGroupWhitespace: 1, // Symbol used to indicate a character is whitespace\n characterReferenceDecimalSizeMax: 7, // `&#9999999;`.\n characterReferenceHexadecimalSizeMax: 6, // `&#xff9999;`.\n characterReferenceNamedSizeMax: 31, // `&CounterClockwiseContourIntegral;`.\n codeFencedSequenceSizeMin: 3, // At least 3 ticks or tildes are needed.\n contentTypeContent: 'content',\n contentTypeDocument: 'document',\n contentTypeFlow: 'flow',\n contentTypeString: 'string',\n contentTypeText: 'text',\n hardBreakPrefixSizeMin: 2, // At least 2 trailing spaces are needed.\n htmlBasic: 6, // Symbol for `<div`\n htmlCdata: 5, // Symbol for `<![CDATA[]]>`\n htmlComment: 2, // Symbol for `<!---->`\n htmlComplete: 7, // Symbol for `<x>`\n htmlDeclaration: 4, // Symbol for `<!doctype>`\n htmlInstruction: 3, // Symbol for `<?php?>`\n htmlRawSizeMax: 8, // Length of `textarea`.\n htmlRaw: 1, // Symbol for `<script>`\n linkResourceDestinationBalanceMax: 32, // See: <https://spec.commonmark.org/0.30/#link-destination>, <https://github.com/remarkjs/react-markdown/issues/658#issuecomment-984345577>\n linkReferenceSizeMax: 999, // See: <https://spec.commonmark.org/0.30/#link-label>\n listItemValueSizeMax: 10, // See: <https://spec.commonmark.org/0.30/#ordered-list-marker>\n numericBaseDecimal: 10,\n numericBaseHexadecimal: 0x10,\n tabSize: 4, // Tabs have a hard-coded size of 4, per CommonMark.\n thematicBreakMarkerCountMin: 3, // At least 3 asterisks, dashes, or underscores are needed.\n v8MaxSafeChunkSize: 10_000 // V8 (and potentially others) have problems injecting giant arrays into other arrays, hence we operate in chunks.\n})\n","/**\n * This module is compiled away!\n *\n * Here is the list of all types of tokens exposed by micromark, with a short\n * explanation of what they include and where they are found.\n * In picking names, generally, the rule is to be as explicit as possible\n * instead of reusing names.\n * For example, there is a `definitionDestination` and a `resourceDestination`,\n * instead of one shared name.\n */\n\n// Note: when changing the next record, you must also change `TokenTypeMap`\n// in `micromark-util-types/index.d.ts`.\nexport const types = /** @type {const} */ ({\n // Generic type for data, such as in a title, a destination, etc.\n data: 'data',\n\n // Generic type for syntactic whitespace (tabs, virtual spaces, spaces).\n // Such as, between a fenced code fence and an info string.\n whitespace: 'whitespace',\n\n // Generic type for line endings (line feed, carriage return, carriage return +\n // line feed).\n lineEnding: 'lineEnding',\n\n // A line ending, but ending a blank line.\n lineEndingBlank: 'lineEndingBlank',\n\n // Generic type for whitespace (tabs, virtual spaces, spaces) at the start of a\n // line.\n linePrefix: 'linePrefix',\n\n // Generic type for whitespace (tabs, virtual spaces, spaces) at the end of a\n // line.\n lineSuffix: 'lineSuffix',\n\n // Whole ATX heading:\n //\n // ```markdown\n // #\n // ## Alpha\n // ### Bravo ###\n // ```\n //\n // Includes `atxHeadingSequence`, `whitespace`, `atxHeadingText`.\n atxHeading: 'atxHeading',\n\n // Sequence of number signs in an ATX heading (`###`).\n atxHeadingSequence: 'atxHeadingSequence',\n\n // Content in an ATX heading (`alpha`).\n // Includes text.\n atxHeadingText: 'atxHeadingText',\n\n // Whole autolink (`<https://example.com>` or `<admin@example.com>`)\n // Includes `autolinkMarker` and `autolinkProtocol` or `autolinkEmail`.\n autolink: 'autolink',\n\n // Email autolink w/o markers (`admin@example.com`)\n autolinkEmail: 'autolinkEmail',\n\n // Marker around an `autolinkProtocol` or `autolinkEmail` (`<` or `>`).\n autolinkMarker: 'autolinkMarker',\n\n // Protocol autolink w/o markers (`https://example.com`)\n autolinkProtocol: 'autolinkProtocol',\n\n // A whole character escape (`\\-`).\n // Includes `escapeMarker` and `characterEscapeValue`.\n characterEscape: 'characterEscape',\n\n // The escaped character (`-`).\n characterEscapeValue: 'characterEscapeValue',\n\n // A whole character reference (`&amp;`, `&#8800;`, or `&#x1D306;`).\n // Includes `characterReferenceMarker`, an optional\n // `characterReferenceMarkerNumeric`, in which case an optional\n // `characterReferenceMarkerHexadecimal`, and a `characterReferenceValue`.\n characterReference: 'characterReference',\n\n // The start or end marker (`&` or `;`).\n characterReferenceMarker: 'characterReferenceMarker',\n\n // Mark reference as numeric (`#`).\n characterReferenceMarkerNumeric: 'characterReferenceMarkerNumeric',\n\n // Mark reference as numeric (`x` or `X`).\n characterReferenceMarkerHexadecimal: 'characterReferenceMarkerHexadecimal',\n\n // Value of character reference w/o markers (`amp`, `8800`, or `1D306`).\n characterReferenceValue: 'characterReferenceValue',\n\n // Whole fenced code:\n //\n // ````markdown\n // ```js\n // alert(1)\n // ```\n // ````\n codeFenced: 'codeFenced',\n\n // A fenced code fence, including whitespace, sequence, info, and meta\n // (` ```js `).\n codeFencedFence: 'codeFencedFence',\n\n // Sequence of grave accent or tilde characters (` ``` `) in a fence.\n codeFencedFenceSequence: 'codeFencedFenceSequence',\n\n // Info word (`js`) in a fence.\n // Includes string.\n codeFencedFenceInfo: 'codeFencedFenceInfo',\n\n // Meta words (`highlight=\"1\"`) in a fence.\n // Includes string.\n codeFencedFenceMeta: 'codeFencedFenceMeta',\n\n // A line of code.\n codeFlowValue: 'codeFlowValue',\n\n // Whole indented code:\n //\n // ```markdown\n // alert(1)\n // ```\n //\n // Includes `lineEnding`, `linePrefix`, and `codeFlowValue`.\n codeIndented: 'codeIndented',\n\n // A text code (``` `alpha` ```).\n // Includes `codeTextSequence`, `codeTextData`, `lineEnding`, and can include\n // `codeTextPadding`.\n codeText: 'codeText',\n\n codeTextData: 'codeTextData',\n\n // A space or line ending right after or before a tick.\n codeTextPadding: 'codeTextPadding',\n\n // A text code fence (` `` `).\n codeTextSequence: 'codeTextSequence',\n\n // Whole content:\n //\n // ```markdown\n // [a]: b\n // c\n // =\n // d\n // ```\n //\n // Includes `paragraph` and `definition`.\n content: 'content',\n // Whole definition:\n //\n // ```markdown\n // [micromark]: https://github.com/micromark/micromark\n // ```\n //\n // Includes `definitionLabel`, `definitionMarker`, `whitespace`,\n // `definitionDestination`, and optionally `lineEnding` and `definitionTitle`.\n definition: 'definition',\n\n // Destination of a definition (`https://github.com/micromark/micromark` or\n // `<https://github.com/micromark/micromark>`).\n // Includes `definitionDestinationLiteral` or `definitionDestinationRaw`.\n definitionDestination: 'definitionDestination',\n\n // Enclosed destination of a definition\n // (`<https://github.com/micromark/micromark>`).\n // Includes `definitionDestinationLiteralMarker` and optionally\n // `definitionDestinationString`.\n definitionDestinationLiteral: 'definitionDestinationLiteral',\n\n // Markers of an enclosed definition destination (`<` or `>`).\n definitionDestinationLiteralMarker: 'definitionDestinationLiteralMarker',\n\n // Unenclosed destination of a definition\n // (`https://github.com/micromark/micromark`).\n // Includes `definitionDestinationString`.\n definitionDestinationRaw: 'definitionDestinationRaw',\n\n // Text in an destination (`https://github.com/micromark/micromark`).\n // Includes string.\n definitionDestinationString: 'definitionDestinationString',\n\n // Label of a definition (`[micromark]`).\n // Includes `definitionLabelMarker` and `definitionLabelString`.\n definitionLabel: 'definitionLabel',\n\n // Markers of a definition label (`[` or `]`).\n definitionLabelMarker: 'definitionLabelMarker',\n\n // Value of a definition label (`micromark`).\n // Includes string.\n definitionLabelString: 'definitionLabelString',\n\n // Marker between a label and a destination (`:`).\n definitionMarker: 'definitionMarker',\n\n // Title of a definition (`\"x\"`, `'y'`, or `(z)`).\n // Includes `definitionTitleMarker` and optionally `definitionTitleString`.\n definitionTitle: 'definitionTitle',\n\n // Marker around a title of a definition (`\"`, `'`, `(`, or `)`).\n definitionTitleMarker: 'definitionTitleMarker',\n\n // Data without markers in a title (`z`).\n // Includes string.\n definitionTitleString: 'definitionTitleString',\n\n // Emphasis (`*alpha*`).\n // Includes `emphasisSequence` and `emphasisText`.\n emphasis: 'emphasis',\n\n // Sequence of emphasis markers (`*` or `_`).\n emphasisSequence: 'emphasisSequence',\n\n // Emphasis text (`alpha`).\n // Includes text.\n emphasisText: 'emphasisText',\n\n // The character escape marker (`\\`).\n escapeMarker: 'escapeMarker',\n\n // A hard break created with a backslash (`\\\\n`).\n // Note: does not include the line ending.\n hardBreakEscape: 'hardBreakEscape',\n\n // A hard break created with trailing spaces (` \\n`).\n // Does not include the line ending.\n hardBreakTrailing: 'hardBreakTrailing',\n\n // Flow HTML:\n //\n // ```markdown\n // <div\n // ```\n //\n // Inlcudes `lineEnding`, `htmlFlowData`.\n htmlFlow: 'htmlFlow',\n\n htmlFlowData: 'htmlFlowData',\n\n // HTML in text (the tag in `a <i> b`).\n // Includes `lineEnding`, `htmlTextData`.\n htmlText: 'htmlText',\n\n htmlTextData: 'htmlTextData',\n\n // Whole image (`![alpha](bravo)`, `![alpha][bravo]`, `![alpha][]`, or\n // `![alpha]`).\n // Includes `label` and an optional `resource` or `reference`.\n image: 'image',\n\n // Whole link label (`[*alpha*]`).\n // Includes `labelLink` or `labelImage`, `labelText`, and `labelEnd`.\n label: 'label',\n\n // Text in an label (`*alpha*`).\n // Includes text.\n labelText: 'labelText',\n\n // Start a link label (`[`).\n // Includes a `labelMarker`.\n labelLink: 'labelLink',\n\n // Start an image label (`![`).\n // Includes `labelImageMarker` and `labelMarker`.\n labelImage: 'labelImage',\n\n // Marker of a label (`[` or `]`).\n labelMarker: 'labelMarker',\n\n // Marker to start an image (`!`).\n labelImageMarker: 'labelImageMarker',\n\n // End a label (`]`).\n // Includes `labelMarker`.\n labelEnd: 'labelEnd',\n\n // Whole link (`[alpha](bravo)`, `[alpha][bravo]`, `[alpha][]`, or `[alpha]`).\n // Includes `label` and an optional `resource` or `reference`.\n link: 'link',\n\n // Whole paragraph:\n //\n // ```markdown\n // alpha\n // bravo.\n // ```\n //\n // Includes text.\n paragraph: 'paragraph',\n\n // A reference (`[alpha]` or `[]`).\n // Includes `referenceMarker` and an optional `referenceString`.\n reference: 'reference',\n\n // A reference marker (`[` or `]`).\n referenceMarker: 'referenceMarker',\n\n // Reference text (`alpha`).\n // Includes string.\n referenceString: 'referenceString',\n\n // A resource (`(https://example.com \"alpha\")`).\n // Includes `resourceMarker`, an optional `resourceDestination` with an optional\n // `whitespace` and `resourceTitle`.\n resource: 'resource',\n\n // A resource destination (`https://example.com`).\n // Includes `resourceDestinationLiteral` or `resourceDestinationRaw`.\n resourceDestination: 'resourceDestination',\n\n // A literal resource destination (`<https://example.com>`).\n // Includes `resourceDestinationLiteralMarker` and optionally\n // `resourceDestinationString`.\n resourceDestinationLiteral: 'resourceDestinationLiteral',\n\n // A resource destination marker (`<` or `>`).\n resourceDestinationLiteralMarker: 'resourceDestinationLiteralMarker',\n\n // A raw resource destination (`https://example.com`).\n // Includes `resourceDestinationString`.\n resourceDestinationRaw: 'resourceDestinationRaw',\n\n // Resource destination text (`https://example.com`).\n // Includes string.\n resourceDestinationString: 'resourceDestinationString',\n\n // A resource marker (`(` or `)`).\n resourceMarker: 'resourceMarker',\n\n // A resource title (`\"alpha\"`, `'alpha'`, or `(alpha)`).\n // Includes `resourceTitleMarker` and optionally `resourceTitleString`.\n resourceTitle: 'resourceTitle',\n\n // A resource title marker (`\"`, `'`, `(`, or `)`).\n resourceTitleMarker: 'resourceTitleMarker',\n\n // Resource destination title (`alpha`).\n // Includes string.\n resourceTitleString: 'resourceTitleString',\n\n // Whole setext heading:\n //\n // ```markdown\n // alpha\n // bravo\n // =====\n // ```\n //\n // Includes `setextHeadingText`, `lineEnding`, `linePrefix`, and\n // `setextHeadingLine`.\n setextHeading: 'setextHeading',\n\n // Content in a setext heading (`alpha\\nbravo`).\n // Includes text.\n setextHeadingText: 'setextHeadingText',\n\n // Underline in a setext heading, including whitespace suffix (`==`).\n // Includes `setextHeadingLineSequence`.\n setextHeadingLine: 'setextHeadingLine',\n\n // Sequence of equals or dash characters in underline in a setext heading (`-`).\n setextHeadingLineSequence: 'setextHeadingLineSequence',\n\n // Strong (`**alpha**`).\n // Includes `strongSequence` and `strongText`.\n strong: 'strong',\n\n // Sequence of strong markers (`**` or `__`).\n strongSequence: 'strongSequence',\n\n // Strong text (`alpha`).\n // Includes text.\n strongText: 'strongText',\n\n // Whole thematic break:\n //\n // ```markdown\n // * * *\n // ```\n //\n // Includes `thematicBreakSequence` and `whitespace`.\n thematicBreak: 'thematicBreak',\n\n // A sequence of one or more thematic break markers (`***`).\n thematicBreakSequence: 'thematicBreakSequence',\n\n // Whole block quote:\n //\n // ```markdown\n // > a\n // >\n // > b\n // ```\n //\n // Includes `blockQuotePrefix` and flow.\n blockQuote: 'blockQuote',\n // The `>` or `> ` of a block quote.\n blockQuotePrefix: 'blockQuotePrefix',\n // The `>` of a block quote prefix.\n blockQuoteMarker: 'blockQuoteMarker',\n // The optional ` ` of a block quote prefix.\n blockQuotePrefixWhitespace: 'blockQuotePrefixWhitespace',\n\n // Whole ordered list:\n //\n // ```markdown\n // 1. a\n // b\n // ```\n //\n // Includes `listItemPrefix`, flow, and optionally `listItemIndent` on further\n // lines.\n listOrdered: 'listOrdered',\n\n // Whole unordered list:\n //\n // ```markdown\n // - a\n // b\n // ```\n //\n // Includes `listItemPrefix`, flow, and optionally `listItemIndent` on further\n // lines.\n listUnordered: 'listUnordered',\n\n // The indent of further list item lines.\n listItemIndent: 'listItemIndent',\n\n // A marker, as in, `*`, `+`, `-`, `.`, or `)`.\n listItemMarker: 'listItemMarker',\n\n // The thing that starts a list item, such as `1. `.\n // Includes `listItemValue` if ordered, `listItemMarker`, and\n // `listItemPrefixWhitespace` (unless followed by a line ending).\n listItemPrefix: 'listItemPrefix',\n\n // The whitespace after a marker.\n listItemPrefixWhitespace: 'listItemPrefixWhitespace',\n\n // The numerical value of an ordered item.\n listItemValue: 'listItemValue',\n\n // Internal types used for subtokenizers, compiled away\n chunkDocument: 'chunkDocument',\n chunkContent: 'chunkContent',\n chunkFlow: 'chunkFlow',\n chunkText: 'chunkText',\n chunkString: 'chunkString'\n})\n","// Generated code.\n\nfunction isAmbiguous(x) {\n\treturn x === 0xA1\n\t\t|| x === 0xA4\n\t\t|| x === 0xA7\n\t\t|| x === 0xA8\n\t\t|| x === 0xAA\n\t\t|| x === 0xAD\n\t\t|| x === 0xAE\n\t\t|| x >= 0xB0 && x <= 0xB4\n\t\t|| x >= 0xB6 && x <= 0xBA\n\t\t|| x >= 0xBC && x <= 0xBF\n\t\t|| x === 0xC6\n\t\t|| x === 0xD0\n\t\t|| x === 0xD7\n\t\t|| x === 0xD8\n\t\t|| x >= 0xDE && x <= 0xE1\n\t\t|| x === 0xE6\n\t\t|| x >= 0xE8 && x <= 0xEA\n\t\t|| x === 0xEC\n\t\t|| x === 0xED\n\t\t|| x === 0xF0\n\t\t|| x === 0xF2\n\t\t|| x === 0xF3\n\t\t|| x >= 0xF7 && x <= 0xFA\n\t\t|| x === 0xFC\n\t\t|| x === 0xFE\n\t\t|| x === 0x101\n\t\t|| x === 0x111\n\t\t|| x === 0x113\n\t\t|| x === 0x11B\n\t\t|| x === 0x126\n\t\t|| x === 0x127\n\t\t|| x === 0x12B\n\t\t|| x >= 0x131 && x <= 0x133\n\t\t|| x === 0x138\n\t\t|| x >= 0x13F && x <= 0x142\n\t\t|| x === 0x144\n\t\t|| x >= 0x148 && x <= 0x14B\n\t\t|| x === 0x14D\n\t\t|| x === 0x152\n\t\t|| x === 0x153\n\t\t|| x === 0x166\n\t\t|| x === 0x167\n\t\t|| x === 0x16B\n\t\t|| x === 0x1CE\n\t\t|| x === 0x1D0\n\t\t|| x === 0x1D2\n\t\t|| x === 0x1D4\n\t\t|| x === 0x1D6\n\t\t|| x === 0x1D8\n\t\t|| x === 0x1DA\n\t\t|| x === 0x1DC\n\t\t|| x === 0x251\n\t\t|| x === 0x261\n\t\t|| x === 0x2C4\n\t\t|| x === 0x2C7\n\t\t|| x >= 0x2C9 && x <= 0x2CB\n\t\t|| x === 0x2CD\n\t\t|| x === 0x2D0\n\t\t|| x >= 0x2D8 && x <= 0x2DB\n\t\t|| x === 0x2DD\n\t\t|| x === 0x2DF\n\t\t|| x >= 0x300 && x <= 0x36F\n\t\t|| x >= 0x391 && x <= 0x3A1\n\t\t|| x >= 0x3A3 && x <= 0x3A9\n\t\t|| x >= 0x3B1 && x <= 0x3C1\n\t\t|| x >= 0x3C3 && x <= 0x3C9\n\t\t|| x === 0x401\n\t\t|| x >= 0x410 && x <= 0x44F\n\t\t|| x === 0x451\n\t\t|| x === 0x2010\n\t\t|| x >= 0x2013 && x <= 0x2016\n\t\t|| x === 0x2018\n\t\t|| x === 0x2019\n\t\t|| x === 0x201C\n\t\t|| x === 0x201D\n\t\t|| x >= 0x2020 && x <= 0x2022\n\t\t|| x >= 0x2024 && x <= 0x2027\n\t\t|| x === 0x2030\n\t\t|| x === 0x2032\n\t\t|| x === 0x2033\n\t\t|| x === 0x2035\n\t\t|| x === 0x203B\n\t\t|| x === 0x203E\n\t\t|| x === 0x2074\n\t\t|| x === 0x207F\n\t\t|| x >= 0x2081 && x <= 0x2084\n\t\t|| x === 0x20AC\n\t\t|| x === 0x2103\n\t\t|| x === 0x2105\n\t\t|| x === 0x2109\n\t\t|| x === 0x2113\n\t\t|| x === 0x2116\n\t\t|| x === 0x2121\n\t\t|| x === 0x2122\n\t\t|| x === 0x2126\n\t\t|| x === 0x212B\n\t\t|| x === 0x2153\n\t\t|| x === 0x2154\n\t\t|| x >= 0x215B && x <= 0x215E\n\t\t|| x >= 0x2160 && x <= 0x216B\n\t\t|| x >= 0x2170 && x <= 0x2179\n\t\t|| x === 0x2189\n\t\t|| x >= 0x2190 && x <= 0x2199\n\t\t|| x === 0x21B8\n\t\t|| x === 0x21B9\n\t\t|| x === 0x21D2\n\t\t|| x === 0x21D4\n\t\t|| x === 0x21E7\n\t\t|| x === 0x2200\n\t\t|| x === 0x2202\n\t\t|| x === 0x2203\n\t\t|| x === 0x2207\n\t\t|| x === 0x2208\n\t\t|| x === 0x220B\n\t\t|| x === 0x220F\n\t\t|| x === 0x2211\n\t\t|| x === 0x2215\n\t\t|| x === 0x221A\n\t\t|| x >= 0x221D && x <= 0x2220\n\t\t|| x === 0x2223\n\t\t|| x === 0x2225\n\t\t|| x >= 0x2227 && x <= 0x222C\n\t\t|| x === 0x222E\n\t\t|| x >= 0x2234 && x <= 0x2237\n\t\t|| x === 0x223C\n\t\t|| x === 0x223D\n\t\t|| x === 0x2248\n\t\t|| x === 0x224C\n\t\t|| x === 0x2252\n\t\t|| x === 0x2260\n\t\t|| x === 0x2261\n\t\t|| x >= 0x2264 && x <= 0x2267\n\t\t|| x === 0x226A\n\t\t|| x === 0x226B\n\t\t|| x === 0x226E\n\t\t|| x === 0x226F\n\t\t|| x === 0x2282\n\t\t|| x === 0x2283\n\t\t|| x === 0x2286\n\t\t|| x === 0x2287\n\t\t|| x === 0x2295\n\t\t|| x === 0x2299\n\t\t|| x === 0x22A5\n\t\t|| x === 0x22BF\n\t\t|| x === 0x2312\n\t\t|| x >= 0x2460 && x <= 0x24E9\n\t\t|| x >= 0x24EB && x <= 0x254B\n\t\t|| x >= 0x2550 && x <= 0x2573\n\t\t|| x >= 0x2580 && x <= 0x258F\n\t\t|| x >= 0x2592 && x <= 0x2595\n\t\t|| x === 0x25A0\n\t\t|| x === 0x25A1\n\t\t|| x >= 0x25A3 && x <= 0x25A9\n\t\t|| x === 0x25B2\n\t\t|| x === 0x25B3\n\t\t|| x === 0x25B6\n\t\t|| x === 0x25B7\n\t\t|| x === 0x25BC\n\t\t|| x === 0x25BD\n\t\t|| x === 0x25C0\n\t\t|| x === 0x25C1\n\t\t|| x >= 0x25C6 && x <= 0x25C8\n\t\t|| x === 0x25CB\n\t\t|| x >= 0x25CE && x <= 0x25D1\n\t\t|| x >= 0x25E2 && x <= 0x25E5\n\t\t|| x === 0x25EF\n\t\t|| x === 0x2605\n\t\t|| x === 0x2606\n\t\t|| x === 0x2609\n\t\t|| x === 0x260E\n\t\t|| x === 0x260F\n\t\t|| x === 0x261C\n\t\t|| x === 0x261E\n\t\t|| x === 0x2640\n\t\t|| x === 0x2642\n\t\t|| x === 0x2660\n\t\t|| x === 0x2661\n\t\t|| x >= 0x2663 && x <= 0x2665\n\t\t|| x >= 0x2667 && x <= 0x266A\n\t\t|| x === 0x266C\n\t\t|| x === 0x266D\n\t\t|| x === 0x266F\n\t\t|| x === 0x269E\n\t\t|| x === 0x269F\n\t\t|| x === 0x26BF\n\t\t|| x >= 0x26C6 && x <= 0x26CD\n\t\t|| x >= 0x26CF && x <= 0x26D3\n\t\t|| x >= 0x26D5 && x <= 0x26E1\n\t\t|| x === 0x26E3\n\t\t|| x === 0x26E8\n\t\t|| x === 0x26E9\n\t\t|| x >= 0x26EB && x <= 0x26F1\n\t\t|| x === 0x26F4\n\t\t|| x >= 0x26F6 && x <= 0x26F9\n\t\t|| x === 0x26FB\n\t\t|| x === 0x26FC\n\t\t|| x === 0x26FE\n\t\t|| x === 0x26FF\n\t\t|| x === 0x273D\n\t\t|| x >= 0x2776 && x <= 0x277F\n\t\t|| x >= 0x2B56 && x <= 0x2B59\n\t\t|| x >= 0x3248 && x <= 0x324F\n\t\t|| x >= 0xE000 && x <= 0xF8FF\n\t\t|| x >= 0xFE00 && x <= 0xFE0F\n\t\t|| x === 0xFFFD\n\t\t|| x >= 0x1F100 && x <= 0x1F10A\n\t\t|| x >= 0x1F110 && x <= 0x1F12D\n\t\t|| x >= 0x1F130 && x <= 0x1F169\n\t\t|| x >= 0x1F170 && x <= 0x1F18D\n\t\t|| x === 0x1F18F\n\t\t|| x === 0x1F190\n\t\t|| x >= 0x1F19B && x <= 0x1F1AC\n\t\t|| x >= 0xE0100 && x <= 0xE01EF\n\t\t|| x >= 0xF0000 && x <= 0xFFFFD\n\t\t|| x >= 0x100000 && x <= 0x10FFFD;\n}\n\nfunction isFullWidth(x) {\n\treturn x === 0x3000\n\t\t|| x >= 0xFF01 && x <= 0xFF60\n\t\t|| x >= 0xFFE0 && x <= 0xFFE6;\n}\n\nfunction isWide(x) {\n\treturn x >= 0x1100 && x <= 0x115F\n\t\t|| x === 0x231A\n\t\t|| x === 0x231B\n\t\t|| x === 0x2329\n\t\t|| x === 0x232A\n\t\t|| x >= 0x23E9 && x <= 0x23EC\n\t\t|| x === 0x23F0\n\t\t|| x === 0x23F3\n\t\t|| x === 0x25FD\n\t\t|| x === 0x25FE\n\t\t|| x === 0x2614\n\t\t|| x === 0x2615\n\t\t|| x >= 0x2630 && x <= 0x2637\n\t\t|| x >= 0x2648 && x <= 0x2653\n\t\t|| x === 0x267F\n\t\t|| x >= 0x268A && x <= 0x268F\n\t\t|| x === 0x2693\n\t\t|| x === 0x26A1\n\t\t|| x === 0x26AA\n\t\t|| x === 0x26AB\n\t\t|| x === 0x26BD\n\t\t|| x === 0x26BE\n\t\t|| x === 0x26C4\n\t\t|| x === 0x26C5\n\t\t|| x === 0x26CE\n\t\t|| x === 0x26D4\n\t\t|| x === 0x26EA\n\t\t|| x === 0x26F2\n\t\t|| x === 0x26F3\n\t\t|| x === 0x26F5\n\t\t|| x === 0x26FA\n\t\t|| x === 0x26FD\n\t\t|| x === 0x2705\n\t\t|| x === 0x270A\n\t\t|| x === 0x270B\n\t\t|| x === 0x2728\n\t\t|| x === 0x274C\n\t\t|| x === 0x274E\n\t\t|| x >= 0x2753 && x <= 0x2755\n\t\t|| x === 0x2757\n\t\t|| x >= 0x2795 && x <= 0x2797\n\t\t|| x === 0x27B0\n\t\t|| x === 0x27BF\n\t\t|| x === 0x2B1B\n\t\t|| x === 0x2B1C\n\t\t|| x === 0x2B50\n\t\t|| x === 0x2B55\n\t\t|| x >= 0x2E80 && x <= 0x2E99\n\t\t|| x >= 0x2E9B && x <= 0x2EF3\n\t\t|| x >= 0x2F00 && x <= 0x2FD5\n\t\t|| x >= 0x2FF0 && x <= 0x2FFF\n\t\t|| x >= 0x3001 && x <= 0x303E\n\t\t|| x >= 0x3041 && x <= 0x3096\n\t\t|| x >= 0x3099 && x <= 0x30FF\n\t\t|| x >= 0x3105 && x <= 0x312F\n\t\t|| x >= 0x3131 && x <= 0x318E\n\t\t|| x >= 0x3190 && x <= 0x31E5\n\t\t|| x >= 0x31EF && x <= 0x321E\n\t\t|| x >= 0x3220 && x <= 0x3247\n\t\t|| x >= 0x3250 && x <= 0xA48C\n\t\t|| x >= 0xA490 && x <= 0xA4C6\n\t\t|| x >= 0xA960 && x <= 0xA97C\n\t\t|| x >= 0xAC00 && x <= 0xD7A3\n\t\t|| x >= 0xF900 && x <= 0xFAFF\n\t\t|| x >= 0xFE10 && x <= 0xFE19\n\t\t|| x >= 0xFE30 && x <= 0xFE52\n\t\t|| x >= 0xFE54 && x <= 0xFE66\n\t\t|| x >= 0xFE68 && x <= 0xFE6B\n\t\t|| x >= 0x16FE0 && x <= 0x16FE4\n\t\t|| x >= 0x16FF0 && x <= 0x16FF6\n\t\t|| x >= 0x17000 && x <= 0x18CD5\n\t\t|| x >= 0x18CFF && x <= 0x18D1E\n\t\t|| x >= 0x18D80 && x <= 0x18DF2\n\t\t|| x >= 0x1AFF0 && x <= 0x1AFF3\n\t\t|| x >= 0x1AFF5 && x <= 0x1AFFB\n\t\t|| x === 0x1AFFD\n\t\t|| x === 0x1AFFE\n\t\t|| x >= 0x1B000 && x <= 0x1B122\n\t\t|| x === 0x1B132\n\t\t|| x >= 0x1B150 && x <= 0x1B152\n\t\t|| x === 0x1B155\n\t\t|| x >= 0x1B164 && x <= 0x1B167\n\t\t|| x >= 0x1B170 && x <= 0x1B2FB\n\t\t|| x >= 0x1D300 && x <= 0x1D356\n\t\t|| x >= 0x1D360 && x <= 0x1D376\n\t\t|| x === 0x1F004\n\t\t|| x === 0x1F0CF\n\t\t|| x === 0x1F18E\n\t\t|| x >= 0x1F191 && x <= 0x1F19A\n\t\t|| x >= 0x1F200 && x <= 0x1F202\n\t\t|| x >= 0x1F210 && x <= 0x1F23B\n\t\t|| x >= 0x1F240 && x <= 0x1F248\n\t\t|| x === 0x1F250\n\t\t|| x === 0x1F251\n\t\t|| x >= 0x1F260 && x <= 0x1F265\n\t\t|| x >= 0x1F300 && x <= 0x1F320\n\t\t|| x >= 0x1F32D && x <= 0x1F335\n\t\t|| x >= 0x1F337 && x <= 0x1F37C\n\t\t|| x >= 0x1F37E && x <= 0x1F393\n\t\t|| x >= 0x1F3A0 && x <= 0x1F3CA\n\t\t|| x >= 0x1F3CF && x <= 0x1F3D3\n\t\t|| x >= 0x1F3E0 && x <= 0x1F3F0\n\t\t|| x === 0x1F3F4\n\t\t|| x >= 0x1F3F8 && x <= 0x1F43E\n\t\t|| x === 0x1F440\n\t\t|| x >= 0x1F442 && x <= 0x1F4FC\n\t\t|| x >= 0x1F4FF && x <= 0x1F53D\n\t\t|| x >= 0x1F54B && x <= 0x1F54E\n\t\t|| x >= 0x1F550 && x <= 0x1F567\n\t\t|| x === 0x1F57A\n\t\t|| x === 0x1F595\n\t\t|| x === 0x1F596\n\t\t|| x === 0x1F5A4\n\t\t|| x >= 0x1F5FB && x <= 0x1F64F\n\t\t|| x >= 0x1F680 && x <= 0x1F6C5\n\t\t|| x === 0x1F6CC\n\t\t|| x >= 0x1F6D0 && x <= 0x1F6D2\n\t\t|| x >= 0x1F6D5 && x <= 0x1F6D8\n\t\t|| x >= 0x1F6DC && x <= 0x1F6DF\n\t\t|| x === 0x1F6EB\n\t\t|| x === 0x1F6EC\n\t\t|| x >= 0x1F6F4 && x <= 0x1F6FC\n\t\t|| x >= 0x1F7E0 && x <= 0x1F7EB\n\t\t|| x === 0x1F7F0\n\t\t|| x >= 0x1F90C && x <= 0x1F93A\n\t\t|| x >= 0x1F93C && x <= 0x1F945\n\t\t|| x >= 0x1F947 && x <= 0x1F9FF\n\t\t|| x >= 0x1FA70 && x <= 0x1FA7C\n\t\t|| x >= 0x1FA80 && x <= 0x1FA8A\n\t\t|| x >= 0x1FA8E && x <= 0x1FAC6\n\t\t|| x === 0x1FAC8\n\t\t|| x >= 0x1FACD && x <= 0x1FADC\n\t\t|| x >= 0x1FADF && x <= 0x1FAEA\n\t\t|| x >= 0x1FAEF && x <= 0x1FAF8\n\t\t|| x >= 0x20000 && x <= 0x2FFFD\n\t\t|| x >= 0x30000 && x <= 0x3FFFD;\n}\n\nfunction getCategory(x) {\n\tif (isAmbiguous(x)) return 'ambiguous';\n\n\tif (isFullWidth(x)) return 'fullwidth';\n\n\tif (\n\t\tx === 0x20A9\n\t\t|| x >= 0xFF61 && x <= 0xFFBE\n\t\t|| x >= 0xFFC2 && x <= 0xFFC7\n\t\t|| x >= 0xFFCA && x <= 0xFFCF\n\t\t|| x >= 0xFFD2 && x <= 0xFFD7\n\t\t|| x >= 0xFFDA && x <= 0xFFDC\n\t\t|| x >= 0xFFE8 && x <= 0xFFEE\n\t) {\n\t\treturn 'halfwidth';\n\t}\n\n\tif (\n\t\tx >= 0x20 && x <= 0x7E\n\t\t|| x === 0xA2\n\t\t|| x === 0xA3\n\t\t|| x === 0xA5\n\t\t|| x === 0xA6\n\t\t|| x === 0xAC\n\t\t|| x === 0xAF\n\t\t|| x >= 0x27E6 && x <= 0x27ED\n\t\t|| x === 0x2985\n\t\t|| x === 0x2986\n\t) {\n\t\treturn 'narrow';\n\t}\n\n\tif (isWide(x)) return 'wide';\n\n\treturn 'neutral';\n}\n\nexport {isAmbiguous, isFullWidth, isWide, getCategory};\n","import {getCategory, isAmbiguous, isFullWidth, isWide} from './lookup.js';\n\nfunction validate(codePoint) {\n\tif (!Number.isSafeInteger(codePoint)) {\n\t\tthrow new TypeError(`Expected a code point, got \\`${typeof codePoint}\\`.`);\n\t}\n}\n\nexport function eastAsianWidthType(codePoint) {\n\tvalidate(codePoint);\n\n\treturn getCategory(codePoint);\n}\n\nexport function eastAsianWidth(codePoint, {ambiguousAsWide = false} = {}) {\n\tvalidate(codePoint);\n\n\tif (\n\t\tisFullWidth(codePoint)\n\t\t|| isWide(codePoint)\n\t\t|| (ambiguousAsWide && isAmbiguous(codePoint))\n\t) {\n\t\treturn 2;\n\t}\n\n\treturn 1;\n}\n\n// Private exports for https://github.com/sindresorhus/is-fullwidth-code-point\nexport {isFullWidth as _isFullWidth, isWide as _isWide} from './lookup.js';\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n\n// src/categoryUtil.ts\nimport { constants as constants2 } from \"micromark-util-symbol\";\n\n// src/classifyCharacter.ts\nimport { markdownLineEndingOrSpace } from \"micromark-util-character\";\nimport { codes, constants } from \"micromark-util-symbol\";\n\n// src/characterWithNonBmp.ts\nimport { eastAsianWidthType } from \"get-east-asian-width\";\nfunction isEmoji(uc) {\n return /^\\p{Emoji_Presentation}/u.test(String.fromCodePoint(uc));\n}\nfunction cjkOrIvs(uc) {\n if (!uc || uc < 4352) {\n return false;\n }\n const eaw = eastAsianWidthType(uc);\n switch (eaw) {\n case \"fullwidth\":\n case \"halfwidth\":\n return true;\n // never be emoji\n case \"wide\":\n return !isEmoji(uc);\n case \"narrow\":\n return false;\n case \"ambiguous\":\n return 917760 <= uc && uc <= 917999 ? null : false;\n case \"neutral\":\n return /^\\p{sc=Hangul}/u.test(String.fromCodePoint(uc));\n }\n}\nfunction isCjkAmbiguousPunctuation(main, vs) {\n if (vs !== 65025 || !main || main < 8216) return false;\n return main === 8216 || main === 8217 || main === 8220 || main === 8221;\n}\nfunction nonEmojiGeneralUseVS(code) {\n return code !== null && code >= 65024 && code <= 65038;\n}\nvar unicodePunctuation = regexCheck(/\\p{P}|\\p{S}/u);\nvar unicodeWhitespace = regexCheck(/\\s/);\nfunction regexCheck(regex) {\n return check;\n function check(code) {\n return code !== null && code > -1 && regex.test(String.fromCodePoint(code));\n }\n}\n\n// src/classifyCharacter.ts\nvar constantsEx;\n((constantsEx2) => {\n constantsEx2.spaceOrPunctuation = 3;\n constantsEx2.cjk = 4096;\n constantsEx2.cjkPunctuation = 4098;\n constantsEx2.ivs = 8192;\n constantsEx2.cjkOrIvs = 12288;\n constantsEx2.nonEmojiGeneralUseVS = 16384;\n constantsEx2.variationSelector = 24576;\n constantsEx2.ivsToCjkRightShift = 1;\n})(constantsEx || (constantsEx = {}));\nfunction classifyCharacter(code) {\n if (code === codes.eof || markdownLineEndingOrSpace(code) || unicodeWhitespace(code)) {\n return constants.characterGroupWhitespace;\n }\n let value = 0;\n if (code >= 4352) {\n if (nonEmojiGeneralUseVS(code)) {\n return constantsEx.nonEmojiGeneralUseVS;\n }\n switch (cjkOrIvs(code)) {\n case null:\n return constantsEx.ivs;\n case true:\n value |= constantsEx.cjk;\n break;\n }\n }\n if (unicodePunctuation(code)) {\n value |= constants.characterGroupPunctuation;\n }\n return value;\n}\nfunction classifyPrecedingCharacter(before, get2Previous, previous) {\n if (!isNonEmojiGeneralUseVS(before)) {\n return before;\n }\n const twoPrevious = get2Previous();\n const twoBefore = classifyCharacter(twoPrevious);\n return !twoPrevious || isUnicodeWhitespace(twoBefore) ? before : isCjkAmbiguousPunctuation(twoPrevious, previous) ? constantsEx.cjkPunctuation : stripIvs(twoBefore);\n}\nfunction stripIvs(twoBefore) {\n return twoBefore & ~constantsEx.ivs;\n}\n\n// src/categoryUtil.ts\nfunction isUnicodeWhitespace(category) {\n return Boolean(category & constants2.characterGroupWhitespace);\n}\nfunction isNonCjkPunctuation(category) {\n return (category & constantsEx.cjkPunctuation) === constants2.characterGroupPunctuation;\n}\nfunction isCjk(category) {\n return Boolean(category & constantsEx.cjk);\n}\nfunction isIvs(category) {\n return category === constantsEx.ivs;\n}\nfunction isCjkOrIvs(category) {\n return Boolean(category & constantsEx.cjkOrIvs);\n}\nfunction isNonEmojiGeneralUseVS(category) {\n return category === constantsEx.nonEmojiGeneralUseVS;\n}\nfunction isSpaceOrPunctuation(category) {\n return Boolean(category & constantsEx.spaceOrPunctuation);\n}\n\n// src/codeUtil.ts\nfunction isCodeHighSurrogate(code) {\n return Boolean(code && code >= 55296 && code <= 56319);\n}\nfunction isCodeLowSurrogate(code) {\n return Boolean(code && code >= 56320 && code <= 57343);\n}\nfunction tryGetGenuinePreviousCode(code, nowPoint, sliceSerialize) {\n if (nowPoint._bufferIndex < 2) {\n return code;\n }\n const previousBuffer = sliceSerialize({\n // take 2 characters (code units)\n start: { ...nowPoint, _bufferIndex: nowPoint._bufferIndex - 2 },\n end: nowPoint\n });\n const previousCandidate = previousBuffer.codePointAt(0);\n return previousCandidate && previousCandidate >= 65536 ? previousCandidate : code;\n}\nfunction tryGetCodeTwoBefore(previousCode, nowPoint, sliceSerialize) {\n const previousWidth = previousCode >= 65536 ? 2 : 1;\n if (nowPoint._bufferIndex < 1 + previousWidth) {\n return null;\n }\n const idealStart = nowPoint._bufferIndex - previousWidth - 2;\n const twoPreviousBuffer = sliceSerialize({\n // take 1--2 character\n start: {\n ...nowPoint,\n _bufferIndex: idealStart >= 0 ? idealStart : 0\n },\n end: {\n ...nowPoint,\n _bufferIndex: nowPoint._bufferIndex - previousWidth\n }\n });\n const twoPreviousLast = twoPreviousBuffer.charCodeAt(\n twoPreviousBuffer.length - 1\n );\n if (Number.isNaN(twoPreviousLast)) {\n return null;\n }\n if (twoPreviousBuffer.length < 2 || twoPreviousLast < 56320 || 57343 < twoPreviousLast) {\n return twoPreviousLast;\n }\n const twoPreviousCandidate = twoPreviousBuffer.codePointAt(0);\n if (twoPreviousCandidate && twoPreviousCandidate >= 65536) {\n return twoPreviousCandidate;\n }\n return twoPreviousLast;\n}\nvar TwoPreviousCode = class {\n /**\n * @see {@link tryGetCodeTwoBefore}\n *\n * @param previousCode a previous code point. Should be greater than 65,535 if it represents a [Supplementary Character](https://www.unicode.org/glossary/#supplementary_character).\n * @param nowPoint `this.now()` (`this` = `TokenizeContext`)\n * @param sliceSerialize `this.sliceSerialize` (`this` = `TokenizeContext`)\n */\n constructor(previousCode, nowPoint, sliceSerialize) {\n this.previousCode = previousCode;\n this.nowPoint = nowPoint;\n this.sliceSerialize = sliceSerialize;\n __publicField(this, \"cachedValue\");\n }\n /**\n * Returns the return value of {@link tryGetCodeTwoBefore}.\n *\n * If the value has not been computed yet, it will be computed and cached.\n *\n * @see {@link tryGetCodeTwoBefore}\n *\n * @returns a value greater than 65,535 if the code point two positions before represents a [Supplementary Character](https://www.unicode.org/glossary/#supplementary_character), a value less than 65,536 for a [BMP Character](https://www.unicode.org/glossary/#bmp_character), or `null` if not found\n */\n value() {\n if (this.cachedValue === void 0) {\n this.cachedValue = tryGetCodeTwoBefore(\n this.previousCode,\n this.nowPoint,\n this.sliceSerialize\n );\n }\n return this.cachedValue;\n }\n};\nfunction tryGetGenuineNextCode(code, nowPoint, sliceSerialize) {\n const nextCandidate = sliceSerialize({\n start: nowPoint,\n end: { ...nowPoint, _bufferIndex: nowPoint._bufferIndex + 2 }\n }).codePointAt(0);\n return nextCandidate && nextCandidate >= 65536 ? nextCandidate : code;\n}\nexport {\n TwoPreviousCode,\n classifyCharacter,\n classifyPrecedingCharacter,\n constantsEx,\n isCjk,\n isCjkOrIvs,\n isCodeHighSurrogate,\n isCodeLowSurrogate,\n isIvs,\n isNonCjkPunctuation,\n isNonEmojiGeneralUseVS,\n isSpaceOrPunctuation,\n isUnicodeWhitespace,\n tryGetCodeTwoBefore,\n tryGetGenuineNextCode,\n tryGetGenuinePreviousCode\n};\n","// src/index.ts\nimport { codes as codes2 } from \"micromark-util-symbol\";\n\n// src/ext/attention.ts\nimport { ok as assert } from \"devlop\";\nimport {\n classifyCharacter,\n classifyPrecedingCharacter,\n isCjk,\n isCjkOrIvs,\n isCodeHighSurrogate,\n isCodeLowSurrogate,\n isNonCjkPunctuation,\n isSpaceOrPunctuation,\n isUnicodeWhitespace,\n TwoPreviousCode,\n tryGetGenuineNextCode,\n tryGetGenuinePreviousCode\n} from \"micromark-extension-cjk-friendly-util\";\nimport { push, splice } from \"micromark-util-chunked\";\nimport { resolveAll } from \"micromark-util-resolve-all\";\nimport { codes, types } from \"micromark-util-symbol\";\nvar attention = {\n name: \"attention\",\n resolveAll: resolveAllAttention,\n tokenize: tokenizeAttention\n};\nfunction resolveAllAttention(events, context) {\n let index = -1;\n let open;\n let group;\n let text;\n let openingSequence;\n let closingSequence;\n let use;\n let nextEvents;\n let offset;\n while (++index < events.length) {\n if (events[index][0] === \"enter\" && events[index][1].type === \"attentionSequence\" && events[index][1]._close) {\n open = index;\n while (open--) {\n if (events[open][0] === \"exit\" && events[open][1].type === \"attentionSequence\" && events[open][1]._open && // If the markers are the same:\n context.sliceSerialize(events[open][1]).charCodeAt(0) === context.sliceSerialize(events[index][1]).charCodeAt(0)) {\n if ((events[open][1]._close || events[index][1]._open) && (events[index][1].end.offset - events[index][1].start.offset) % 3 && !((events[open][1].end.offset - events[open][1].start.offset + events[index][1].end.offset - events[index][1].start.offset) % 3)) {\n continue;\n }\n use = events[open][1].end.offset - events[open][1].start.offset > 1 && events[index][1].end.offset - events[index][1].start.offset > 1 ? 2 : 1;\n const start = { ...events[open][1].end };\n const end = { ...events[index][1].start };\n movePoint(start, -use);\n movePoint(end, use);\n openingSequence = {\n type: use > 1 ? types.strongSequence : types.emphasisSequence,\n start,\n end: { ...events[open][1].end }\n };\n closingSequence = {\n type: use > 1 ? types.strongSequence : types.emphasisSequence,\n start: { ...events[index][1].start },\n end\n };\n text = {\n type: use > 1 ? types.strongText : types.emphasisText,\n start: { ...events[open][1].end },\n end: { ...events[index][1].start }\n };\n group = {\n type: use > 1 ? types.strong : types.emphasis,\n start: { ...openingSequence.start },\n end: { ...closingSequence.end }\n };\n events[open][1].end = { ...openingSequence.start };\n events[index][1].start = { ...closingSequence.end };\n nextEvents = [];\n if (events[open][1].end.offset - events[open][1].start.offset) {\n nextEvents = push(nextEvents, [\n [\"enter\", events[open][1], context],\n [\"exit\", events[open][1], context]\n ]);\n }\n nextEvents = push(nextEvents, [\n [\"enter\", group, context],\n [\"enter\", openingSequence, context],\n [\"exit\", openingSequence, context],\n [\"enter\", text, context]\n ]);\n assert(\n context.parser.constructs.insideSpan.null,\n \"expected `insideSpan` to be populated\"\n );\n nextEvents = push(\n nextEvents,\n resolveAll(\n context.parser.constructs.insideSpan.null,\n events.slice(open + 1, index),\n context\n )\n );\n nextEvents = push(nextEvents, [\n [\"exit\", text, context],\n [\"enter\", closingSequence, context],\n [\"exit\", closingSequence, context],\n [\"exit\", group, context]\n ]);\n if (events[index][1].end.offset - events[index][1].start.offset) {\n offset = 2;\n nextEvents = push(nextEvents, [\n [\"enter\", events[index][1], context],\n [\"exit\", events[index][1], context]\n ]);\n } else {\n offset = 0;\n }\n splice(events, open - 1, index - open + 3, nextEvents);\n index = open + nextEvents.length - offset - 2;\n break;\n }\n }\n }\n }\n index = -1;\n while (++index < events.length) {\n if (events[index][1].type === \"attentionSequence\") {\n events[index][1].type = \"data\";\n }\n }\n return events;\n}\nfunction tokenizeAttention(effects, ok) {\n const attentionMarkers = this.parser.constructs.attentionMarkers.null;\n const { now, sliceSerialize, previous: tentativePrevious } = this;\n const previous = isCodeLowSurrogate(tentativePrevious) ? (\n // second (lower) surrogate likely to be preceded by first (higher) surrogate\n tryGetGenuinePreviousCode(tentativePrevious, now(), sliceSerialize)\n ) : tentativePrevious;\n const before = classifyCharacter(previous);\n const twoPrevious = new TwoPreviousCode(previous, now(), sliceSerialize);\n const beforePrimary = classifyPrecedingCharacter(\n before,\n twoPrevious.value.bind(twoPrevious),\n previous\n );\n let marker;\n return start;\n function start(code) {\n assert(\n code === codes.asterisk || code === codes.underscore,\n \"expected asterisk or underscore\"\n );\n marker = code;\n effects.enter(\"attentionSequence\");\n return inside(code);\n }\n function inside(code) {\n if (code === marker) {\n effects.consume(code);\n return inside;\n }\n const token = effects.exit(\"attentionSequence\");\n const next = isCodeHighSurrogate(code) ? tryGetGenuineNextCode(code, now(), sliceSerialize) : code;\n const after = classifyCharacter(next);\n assert(attentionMarkers, \"expected `attentionMarkers` to be populated\");\n const beforeNonCjkPunctuation = isNonCjkPunctuation(beforePrimary);\n const beforeSpaceOrNonCjkPunctuation = beforeNonCjkPunctuation || isUnicodeWhitespace(beforePrimary);\n const afterNonCjkPunctuation = isNonCjkPunctuation(after);\n const afterSpaceOrNonCjkPunctuation = afterNonCjkPunctuation || isUnicodeWhitespace(after);\n const beforeCjkOrIvs = isCjkOrIvs(beforePrimary);\n const open = !afterSpaceOrNonCjkPunctuation || afterNonCjkPunctuation && (beforeSpaceOrNonCjkPunctuation || beforeCjkOrIvs) || attentionMarkers.includes(code);\n const close = !beforeSpaceOrNonCjkPunctuation || beforeNonCjkPunctuation && (afterSpaceOrNonCjkPunctuation || isCjk(after)) || attentionMarkers.includes(previous);\n token._open = Boolean(\n marker === codes.asterisk ? open : open && (isSpaceOrPunctuation(beforePrimary) || !close)\n );\n token._close = Boolean(\n marker === codes.asterisk ? close : close && (isSpaceOrPunctuation(after) || !open)\n );\n return ok(code);\n }\n}\nfunction movePoint(point, offset) {\n point.column += offset;\n point.offset += offset;\n point._bufferIndex += offset;\n}\n\n// src/index.ts\nfunction cjkFriendlyExtension() {\n return {\n text: {\n [codes2.asterisk]: attention,\n [codes2.underscore]: attention\n },\n insideSpan: { null: [attention] }\n };\n}\nexport {\n cjkFriendlyExtension\n};\n","// src/index.ts\nimport { cjkFriendlyExtension } from \"micromark-extension-cjk-friendly\";\nfunction remarkCjkFriendly() {\n const data = this.data();\n const micromarkExtensions = (\n // biome-ignore lint/suspicious/noAssignInExpressions: base plugin (remark-gfm) already does this\n data.micromarkExtensions || (data.micromarkExtensions = [])\n );\n micromarkExtensions.push(cjkFriendlyExtension());\n}\nexport {\n remarkCjkFriendly as default\n};\n","// src/strikethrough.ts\nimport { ok as assert } from \"devlop\";\nimport {\n classifyCharacter,\n classifyPrecedingCharacter,\n isCjk,\n isCodeHighSurrogate,\n isCodeLowSurrogate,\n isIvs,\n isNonCjkPunctuation,\n isUnicodeWhitespace,\n TwoPreviousCode,\n tryGetGenuineNextCode,\n tryGetGenuinePreviousCode\n} from \"micromark-extension-cjk-friendly-util\";\nimport { splice } from \"micromark-util-chunked\";\nimport { resolveAll } from \"micromark-util-resolve-all\";\nimport { codes, constants, types } from \"micromark-util-symbol\";\nfunction gfmStrikethroughCjkFriendly(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 === void 0) {\n single = true;\n }\n return {\n text: { [codes.tilde]: tokenizer },\n insideSpan: { null: [tokenizer] },\n attentionMarkers: { null: [codes.tilde] }\n };\n function resolveAllStrikethrough(events, context) {\n let index = -1;\n while (++index < events.length) {\n if (events[index][0] === \"enter\" && events[index][1].type === \"strikethroughSequenceTemporary\" && events[index][1]._close) {\n let open = index;\n while (open--) {\n if (events[open][0] === \"exit\" && events[open][1].type === \"strikethroughSequenceTemporary\" && events[open][1]._open && // 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 const strikethrough = {\n type: \"strikethrough\",\n start: Object.assign({}, events[open][1].start),\n end: Object.assign({}, events[index][1].end)\n };\n const text = {\n type: \"strikethroughText\",\n start: Object.assign({}, events[open][1].end),\n end: Object.assign({}, events[index][1].start)\n };\n const nextEvents = [\n [\"enter\", strikethrough, context],\n [\"enter\", events[open][1], context],\n [\"exit\", events[open][1], context],\n [\"enter\", text, context]\n ];\n const insideSpan = context.parser.constructs.insideSpan.null;\n if (insideSpan) {\n splice(\n nextEvents,\n nextEvents.length,\n 0,\n resolveAll(insideSpan, events.slice(open + 1, index), context)\n );\n }\n splice(nextEvents, nextEvents.length, 0, [\n [\"exit\", text, context],\n [\"enter\", events[index][1], context],\n [\"exit\", events[index][1], context],\n [\"exit\", strikethrough, context]\n ]);\n splice(events, open - 1, index - open + 3, nextEvents);\n index = open + nextEvents.length - 2;\n break;\n }\n }\n }\n }\n index = -1;\n while (++index < events.length) {\n if (events[index][1].type === \"strikethroughSequenceTemporary\") {\n events[index][1].type = types.data;\n }\n }\n return events;\n }\n function tokenizeStrikethrough(effects, ok, nok) {\n const { now, sliceSerialize, previous: tentativePrevious } = this;\n const previous = isCodeLowSurrogate(tentativePrevious) ? (\n // second (lower) surrogate likely to be preceded by first (higher) surrogate\n tryGetGenuinePreviousCode(tentativePrevious, now(), sliceSerialize)\n ) : tentativePrevious;\n const before = classifyCharacter(previous);\n const twoPrevious = new TwoPreviousCode(previous, now(), sliceSerialize);\n const beforePrimary = classifyPrecedingCharacter(\n before,\n twoPrevious.value.bind(twoPrevious),\n previous\n );\n const events = this.events;\n let size = 0;\n return start;\n function start(code) {\n assert(code === codes.tilde, \"expected `~`\");\n if (previous === codes.tilde && events[events.length - 1][1].type !== types.characterEscape) {\n return nok(code);\n }\n effects.enter(\"strikethroughSequenceTemporary\");\n return more(code);\n }\n function more(code) {\n const before2 = classifyCharacter(previous);\n if (code === codes.tilde) {\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 next = isCodeHighSurrogate(code) ? tryGetGenuineNextCode(code, now(), sliceSerialize) : code;\n const after = classifyCharacter(next);\n const beforeNonCjkPunctuation = isNonCjkPunctuation(beforePrimary);\n const beforeSpaceOrNonCjkPunctuation = beforeNonCjkPunctuation || isUnicodeWhitespace(beforePrimary);\n const afterNonCjkPunctuation = isNonCjkPunctuation(after);\n const afterSpaceOrNonCjkPunctuation = afterNonCjkPunctuation || isUnicodeWhitespace(after);\n const beforeCjkOrIvs = isCjk(beforePrimary) || isIvs(before2);\n token._open = !afterSpaceOrNonCjkPunctuation || after === constants.attentionSideAfter && (beforeSpaceOrNonCjkPunctuation || beforeCjkOrIvs);\n token._close = !beforeSpaceOrNonCjkPunctuation || before2 === constants.attentionSideAfter && (afterSpaceOrNonCjkPunctuation || isCjk(after));\n return ok(code);\n }\n }\n}\nexport {\n gfmStrikethroughCjkFriendly\n};\n","// src/index.ts\nimport {\n gfmStrikethroughCjkFriendly\n} from \"micromark-extension-cjk-friendly-gfm-strikethrough\";\nfunction remarkGfmStrikethroughCjkFriendly(options) {\n const data = this.data();\n const micromarkExtensions = (\n // biome-ignore lint/suspicious/noAssignInExpressions: base plugin (remark-gfm) already does this\n data.micromarkExtensions || (data.micromarkExtensions = [])\n );\n micromarkExtensions.push(gfmStrikethroughCjkFriendly(options));\n}\nexport {\n remarkGfmStrikethroughCjkFriendly as default\n};\n","import c from'remark-cjk-friendly';import a from'remark-cjk-friendly-gfm-strikethrough';import {visit}from'unist-util-visit';var k=new Set([\"\\u3002\",\"\\uFF0E\",\"\\uFF0C\",\"\\u3001\",\"\\uFF1F\",\"\\uFF01\",\"\\uFF1A\",\"\\uFF1B\",\"\\uFF08\",\"\\uFF09\",\"\\u3010\",\"\\u3011\",\"\\u300C\",\"\\u300D\",\"\\u300E\",\"\\u300F\",\"\\u3008\",\"\\u3009\",\"\\u300A\",\"\\u300B\"]),m=/^(https?:\\/\\/|mailto:|www\\.)/i,f=t=>{if(t.children.length!==1)return false;let r=t.children[0];return r.type===\"text\"&&r.value===t.url},P=t=>{let r=0;for(let e of t){if(k.has(e))return r;r+=e.length;}return null},p=(t,r)=>({...r,url:t,children:[{type:\"text\",value:t}]}),d=t=>({type:\"text\",value:t}),y=()=>t=>{visit(t,\"link\",(r,e,i)=>{if(!i||typeof e!=\"number\"||!f(r)||!m.test(r.url))return;let n=P(r.url);if(n===null||n===0)return;let l=r.url.slice(0,n),u=r.url.slice(n),o=p(l,r),s=d(u);return i.children.splice(e,1,o,s),e+1});};function b(){let t=[c],r=[y,a],e=[...t,...r];return {name:\"cjk\",type:\"cjk\",remarkPluginsBefore:t,remarkPluginsAfter:r,remarkPlugins:e}}var A=b();export{A as cjk,b as createCjkPlugin};","class ShikiError extends Error {\n constructor(message) {\n super(message);\n this.name = \"ShikiError\";\n }\n}\n\nexport { ShikiError };\n","// src/utils.ts\nfunction clone(something) {\n return doClone(something);\n}\nfunction doClone(something) {\n if (Array.isArray(something)) {\n return cloneArray(something);\n }\n if (something instanceof RegExp) {\n return something;\n }\n if (typeof something === \"object\") {\n return cloneObj(something);\n }\n return something;\n}\nfunction cloneArray(arr) {\n let r = [];\n for (let i = 0, len = arr.length; i < len; i++) {\n r[i] = doClone(arr[i]);\n }\n return r;\n}\nfunction cloneObj(obj) {\n let r = {};\n for (let key in obj) {\n r[key] = doClone(obj[key]);\n }\n return r;\n}\nfunction mergeObjects(target, ...sources) {\n sources.forEach((source) => {\n for (let key in source) {\n target[key] = source[key];\n }\n });\n return target;\n}\nfunction basename(path) {\n const idx = ~path.lastIndexOf(\"/\") || ~path.lastIndexOf(\"\\\\\");\n if (idx === 0) {\n return path;\n } else if (~idx === path.length - 1) {\n return basename(path.substring(0, path.length - 1));\n } else {\n return path.substr(~idx + 1);\n }\n}\nvar CAPTURING_REGEX_SOURCE = /\\$(\\d+)|\\${(\\d+):\\/(downcase|upcase)}/g;\nvar RegexSource = class {\n static hasCaptures(regexSource) {\n if (regexSource === null) {\n return false;\n }\n CAPTURING_REGEX_SOURCE.lastIndex = 0;\n return CAPTURING_REGEX_SOURCE.test(regexSource);\n }\n static replaceCaptures(regexSource, captureSource, captureIndices) {\n return regexSource.replace(CAPTURING_REGEX_SOURCE, (match, index, commandIndex, command) => {\n let capture = captureIndices[parseInt(index || commandIndex, 10)];\n if (capture) {\n let result = captureSource.substring(capture.start, capture.end);\n while (result[0] === \".\") {\n result = result.substring(1);\n }\n switch (command) {\n case \"downcase\":\n return result.toLowerCase();\n case \"upcase\":\n return result.toUpperCase();\n default:\n return result;\n }\n } else {\n return match;\n }\n });\n }\n};\nfunction strcmp(a, b) {\n if (a < b) {\n return -1;\n }\n if (a > b) {\n return 1;\n }\n return 0;\n}\nfunction strArrCmp(a, b) {\n if (a === null && b === null) {\n return 0;\n }\n if (!a) {\n return -1;\n }\n if (!b) {\n return 1;\n }\n let len1 = a.length;\n let len2 = b.length;\n if (len1 === len2) {\n for (let i = 0; i < len1; i++) {\n let res = strcmp(a[i], b[i]);\n if (res !== 0) {\n return res;\n }\n }\n return 0;\n }\n return len1 - len2;\n}\nfunction isValidHexColor(hex) {\n if (/^#[0-9a-f]{6}$/i.test(hex)) {\n return true;\n }\n if (/^#[0-9a-f]{8}$/i.test(hex)) {\n return true;\n }\n if (/^#[0-9a-f]{3}$/i.test(hex)) {\n return true;\n }\n if (/^#[0-9a-f]{4}$/i.test(hex)) {\n return true;\n }\n return false;\n}\nfunction escapeRegExpCharacters(value) {\n return value.replace(/[\\-\\\\\\{\\}\\*\\+\\?\\|\\^\\$\\.\\,\\[\\]\\(\\)\\#\\s]/g, \"\\\\$&\");\n}\nvar CachedFn = class {\n constructor(fn) {\n this.fn = fn;\n }\n cache = /* @__PURE__ */ new Map();\n get(key) {\n if (this.cache.has(key)) {\n return this.cache.get(key);\n }\n const value = this.fn(key);\n this.cache.set(key, value);\n return value;\n }\n};\n\n// src/theme.ts\nvar Theme = class {\n constructor(_colorMap, _defaults, _root) {\n this._colorMap = _colorMap;\n this._defaults = _defaults;\n this._root = _root;\n }\n static createFromRawTheme(source, colorMap) {\n return this.createFromParsedTheme(parseTheme(source), colorMap);\n }\n static createFromParsedTheme(source, colorMap) {\n return resolveParsedThemeRules(source, colorMap);\n }\n _cachedMatchRoot = new CachedFn(\n (scopeName) => this._root.match(scopeName)\n );\n getColorMap() {\n return this._colorMap.getColorMap();\n }\n getDefaults() {\n return this._defaults;\n }\n match(scopePath) {\n if (scopePath === null) {\n return this._defaults;\n }\n const scopeName = scopePath.scopeName;\n const matchingTrieElements = this._cachedMatchRoot.get(scopeName);\n const effectiveRule = matchingTrieElements.find(\n (v) => _scopePathMatchesParentScopes(scopePath.parent, v.parentScopes)\n );\n if (!effectiveRule) {\n return null;\n }\n return new StyleAttributes(\n effectiveRule.fontStyle,\n effectiveRule.foreground,\n effectiveRule.background\n );\n }\n};\nvar ScopeStack = class _ScopeStack {\n constructor(parent, scopeName) {\n this.parent = parent;\n this.scopeName = scopeName;\n }\n static push(path, scopeNames) {\n for (const name of scopeNames) {\n path = new _ScopeStack(path, name);\n }\n return path;\n }\n static from(...segments) {\n let result = null;\n for (let i = 0; i < segments.length; i++) {\n result = new _ScopeStack(result, segments[i]);\n }\n return result;\n }\n push(scopeName) {\n return new _ScopeStack(this, scopeName);\n }\n getSegments() {\n let item = this;\n const result = [];\n while (item) {\n result.push(item.scopeName);\n item = item.parent;\n }\n result.reverse();\n return result;\n }\n toString() {\n return this.getSegments().join(\" \");\n }\n extends(other) {\n if (this === other) {\n return true;\n }\n if (this.parent === null) {\n return false;\n }\n return this.parent.extends(other);\n }\n getExtensionIfDefined(base) {\n const result = [];\n let item = this;\n while (item && item !== base) {\n result.push(item.scopeName);\n item = item.parent;\n }\n return item === base ? result.reverse() : void 0;\n }\n};\nfunction _scopePathMatchesParentScopes(scopePath, parentScopes) {\n if (parentScopes.length === 0) {\n return true;\n }\n for (let index = 0; index < parentScopes.length; index++) {\n let scopePattern = parentScopes[index];\n let scopeMustMatch = false;\n if (scopePattern === \">\") {\n if (index === parentScopes.length - 1) {\n return false;\n }\n scopePattern = parentScopes[++index];\n scopeMustMatch = true;\n }\n while (scopePath) {\n if (_matchesScope(scopePath.scopeName, scopePattern)) {\n break;\n }\n if (scopeMustMatch) {\n return false;\n }\n scopePath = scopePath.parent;\n }\n if (!scopePath) {\n return false;\n }\n scopePath = scopePath.parent;\n }\n return true;\n}\nfunction _matchesScope(scopeName, scopePattern) {\n return scopePattern === scopeName || scopeName.startsWith(scopePattern) && scopeName[scopePattern.length] === \".\";\n}\nvar StyleAttributes = class {\n constructor(fontStyle, foregroundId, backgroundId) {\n this.fontStyle = fontStyle;\n this.foregroundId = foregroundId;\n this.backgroundId = backgroundId;\n }\n};\nfunction parseTheme(source) {\n if (!source) {\n return [];\n }\n if (!source.settings || !Array.isArray(source.settings)) {\n return [];\n }\n let settings = source.settings;\n let result = [], resultLen = 0;\n for (let i = 0, len = settings.length; i < len; i++) {\n let entry = settings[i];\n if (!entry.settings) {\n continue;\n }\n let scopes;\n if (typeof entry.scope === \"string\") {\n let _scope = entry.scope;\n _scope = _scope.replace(/^[,]+/, \"\");\n _scope = _scope.replace(/[,]+$/, \"\");\n scopes = _scope.split(\",\");\n } else if (Array.isArray(entry.scope)) {\n scopes = entry.scope;\n } else {\n scopes = [\"\"];\n }\n let fontStyle = -1 /* NotSet */;\n if (typeof entry.settings.fontStyle === \"string\") {\n fontStyle = 0 /* None */;\n let segments = entry.settings.fontStyle.split(\" \");\n for (let j = 0, lenJ = segments.length; j < lenJ; j++) {\n let segment = segments[j];\n switch (segment) {\n case \"italic\":\n fontStyle = fontStyle | 1 /* Italic */;\n break;\n case \"bold\":\n fontStyle = fontStyle | 2 /* Bold */;\n break;\n case \"underline\":\n fontStyle = fontStyle | 4 /* Underline */;\n break;\n case \"strikethrough\":\n fontStyle = fontStyle | 8 /* Strikethrough */;\n break;\n }\n }\n }\n let foreground = null;\n if (typeof entry.settings.foreground === \"string\" && isValidHexColor(entry.settings.foreground)) {\n foreground = entry.settings.foreground;\n }\n let background = null;\n if (typeof entry.settings.background === \"string\" && isValidHexColor(entry.settings.background)) {\n background = entry.settings.background;\n }\n for (let j = 0, lenJ = scopes.length; j < lenJ; j++) {\n let _scope = scopes[j].trim();\n let segments = _scope.split(\" \");\n let scope = segments[segments.length - 1];\n let parentScopes = null;\n if (segments.length > 1) {\n parentScopes = segments.slice(0, segments.length - 1);\n parentScopes.reverse();\n }\n result[resultLen++] = new ParsedThemeRule(\n scope,\n parentScopes,\n i,\n fontStyle,\n foreground,\n background\n );\n }\n }\n return result;\n}\nvar ParsedThemeRule = class {\n constructor(scope, parentScopes, index, fontStyle, foreground, background) {\n this.scope = scope;\n this.parentScopes = parentScopes;\n this.index = index;\n this.fontStyle = fontStyle;\n this.foreground = foreground;\n this.background = background;\n }\n};\nvar FontStyle = /* @__PURE__ */ ((FontStyle2) => {\n FontStyle2[FontStyle2[\"NotSet\"] = -1] = \"NotSet\";\n FontStyle2[FontStyle2[\"None\"] = 0] = \"None\";\n FontStyle2[FontStyle2[\"Italic\"] = 1] = \"Italic\";\n FontStyle2[FontStyle2[\"Bold\"] = 2] = \"Bold\";\n FontStyle2[FontStyle2[\"Underline\"] = 4] = \"Underline\";\n FontStyle2[FontStyle2[\"Strikethrough\"] = 8] = \"Strikethrough\";\n return FontStyle2;\n})(FontStyle || {});\nfunction resolveParsedThemeRules(parsedThemeRules, _colorMap) {\n parsedThemeRules.sort((a, b) => {\n let r = strcmp(a.scope, b.scope);\n if (r !== 0) {\n return r;\n }\n r = strArrCmp(a.parentScopes, b.parentScopes);\n if (r !== 0) {\n return r;\n }\n return a.index - b.index;\n });\n let defaultFontStyle = 0 /* None */;\n let defaultForeground = \"#000000\";\n let defaultBackground = \"#ffffff\";\n while (parsedThemeRules.length >= 1 && parsedThemeRules[0].scope === \"\") {\n let incomingDefaults = parsedThemeRules.shift();\n if (incomingDefaults.fontStyle !== -1 /* NotSet */) {\n defaultFontStyle = incomingDefaults.fontStyle;\n }\n if (incomingDefaults.foreground !== null) {\n defaultForeground = incomingDefaults.foreground;\n }\n if (incomingDefaults.background !== null) {\n defaultBackground = incomingDefaults.background;\n }\n }\n let colorMap = new ColorMap(_colorMap);\n let defaults = new StyleAttributes(defaultFontStyle, colorMap.getId(defaultForeground), colorMap.getId(defaultBackground));\n let root = new ThemeTrieElement(new ThemeTrieElementRule(0, null, -1 /* NotSet */, 0, 0), []);\n for (let i = 0, len = parsedThemeRules.length; i < len; i++) {\n let rule = parsedThemeRules[i];\n root.insert(0, rule.scope, rule.parentScopes, rule.fontStyle, colorMap.getId(rule.foreground), colorMap.getId(rule.background));\n }\n return new Theme(colorMap, defaults, root);\n}\nvar ColorMap = class {\n _isFrozen;\n _lastColorId;\n _id2color;\n _color2id;\n constructor(_colorMap) {\n this._lastColorId = 0;\n this._id2color = [];\n this._color2id = /* @__PURE__ */ Object.create(null);\n if (Array.isArray(_colorMap)) {\n this._isFrozen = true;\n for (let i = 0, len = _colorMap.length; i < len; i++) {\n this._color2id[_colorMap[i]] = i;\n this._id2color[i] = _colorMap[i];\n }\n } else {\n this._isFrozen = false;\n }\n }\n getId(color) {\n if (color === null) {\n return 0;\n }\n color = color.toUpperCase();\n let value = this._color2id[color];\n if (value) {\n return value;\n }\n if (this._isFrozen) {\n throw new Error(`Missing color in color map - ${color}`);\n }\n value = ++this._lastColorId;\n this._color2id[color] = value;\n this._id2color[value] = color;\n return value;\n }\n getColorMap() {\n return this._id2color.slice(0);\n }\n};\nvar emptyParentScopes = Object.freeze([]);\nvar ThemeTrieElementRule = class _ThemeTrieElementRule {\n scopeDepth;\n parentScopes;\n fontStyle;\n foreground;\n background;\n constructor(scopeDepth, parentScopes, fontStyle, foreground, background) {\n this.scopeDepth = scopeDepth;\n this.parentScopes = parentScopes || emptyParentScopes;\n this.fontStyle = fontStyle;\n this.foreground = foreground;\n this.background = background;\n }\n clone() {\n return new _ThemeTrieElementRule(this.scopeDepth, this.parentScopes, this.fontStyle, this.foreground, this.background);\n }\n static cloneArr(arr) {\n let r = [];\n for (let i = 0, len = arr.length; i < len; i++) {\n r[i] = arr[i].clone();\n }\n return r;\n }\n acceptOverwrite(scopeDepth, fontStyle, foreground, background) {\n if (this.scopeDepth > scopeDepth) {\n console.log(\"how did this happen?\");\n } else {\n this.scopeDepth = scopeDepth;\n }\n if (fontStyle !== -1 /* NotSet */) {\n this.fontStyle = fontStyle;\n }\n if (foreground !== 0) {\n this.foreground = foreground;\n }\n if (background !== 0) {\n this.background = background;\n }\n }\n};\nvar ThemeTrieElement = class _ThemeTrieElement {\n constructor(_mainRule, rulesWithParentScopes = [], _children = {}) {\n this._mainRule = _mainRule;\n this._children = _children;\n this._rulesWithParentScopes = rulesWithParentScopes;\n }\n _rulesWithParentScopes;\n static _cmpBySpecificity(a, b) {\n if (a.scopeDepth !== b.scopeDepth) {\n return b.scopeDepth - a.scopeDepth;\n }\n let aParentIndex = 0;\n let bParentIndex = 0;\n while (true) {\n if (a.parentScopes[aParentIndex] === \">\") {\n aParentIndex++;\n }\n if (b.parentScopes[bParentIndex] === \">\") {\n bParentIndex++;\n }\n if (aParentIndex >= a.parentScopes.length || bParentIndex >= b.parentScopes.length) {\n break;\n }\n const parentScopeLengthDiff = b.parentScopes[bParentIndex].length - a.parentScopes[aParentIndex].length;\n if (parentScopeLengthDiff !== 0) {\n return parentScopeLengthDiff;\n }\n aParentIndex++;\n bParentIndex++;\n }\n return b.parentScopes.length - a.parentScopes.length;\n }\n match(scope) {\n if (scope !== \"\") {\n let dotIndex = scope.indexOf(\".\");\n let head;\n let tail;\n if (dotIndex === -1) {\n head = scope;\n tail = \"\";\n } else {\n head = scope.substring(0, dotIndex);\n tail = scope.substring(dotIndex + 1);\n }\n if (this._children.hasOwnProperty(head)) {\n return this._children[head].match(tail);\n }\n }\n const rules = this._rulesWithParentScopes.concat(this._mainRule);\n rules.sort(_ThemeTrieElement._cmpBySpecificity);\n return rules;\n }\n insert(scopeDepth, scope, parentScopes, fontStyle, foreground, background) {\n if (scope === \"\") {\n this._doInsertHere(scopeDepth, parentScopes, fontStyle, foreground, background);\n return;\n }\n let dotIndex = scope.indexOf(\".\");\n let head;\n let tail;\n if (dotIndex === -1) {\n head = scope;\n tail = \"\";\n } else {\n head = scope.substring(0, dotIndex);\n tail = scope.substring(dotIndex + 1);\n }\n let child;\n if (this._children.hasOwnProperty(head)) {\n child = this._children[head];\n } else {\n child = new _ThemeTrieElement(this._mainRule.clone(), ThemeTrieElementRule.cloneArr(this._rulesWithParentScopes));\n this._children[head] = child;\n }\n child.insert(scopeDepth + 1, tail, parentScopes, fontStyle, foreground, background);\n }\n _doInsertHere(scopeDepth, parentScopes, fontStyle, foreground, background) {\n if (parentScopes === null) {\n this._mainRule.acceptOverwrite(scopeDepth, fontStyle, foreground, background);\n return;\n }\n for (let i = 0, len = this._rulesWithParentScopes.length; i < len; i++) {\n let rule = this._rulesWithParentScopes[i];\n if (strArrCmp(rule.parentScopes, parentScopes) === 0) {\n rule.acceptOverwrite(scopeDepth, fontStyle, foreground, background);\n return;\n }\n }\n if (fontStyle === -1 /* NotSet */) {\n fontStyle = this._mainRule.fontStyle;\n }\n if (foreground === 0) {\n foreground = this._mainRule.foreground;\n }\n if (background === 0) {\n background = this._mainRule.background;\n }\n this._rulesWithParentScopes.push(new ThemeTrieElementRule(scopeDepth, parentScopes, fontStyle, foreground, background));\n }\n};\n\n// src/encodedTokenAttributes.ts\nvar EncodedTokenMetadata = class _EncodedTokenMetadata {\n static toBinaryStr(encodedTokenAttributes) {\n return encodedTokenAttributes.toString(2).padStart(32, \"0\");\n }\n static print(encodedTokenAttributes) {\n const languageId = _EncodedTokenMetadata.getLanguageId(encodedTokenAttributes);\n const tokenType = _EncodedTokenMetadata.getTokenType(encodedTokenAttributes);\n const fontStyle = _EncodedTokenMetadata.getFontStyle(encodedTokenAttributes);\n const foreground = _EncodedTokenMetadata.getForeground(encodedTokenAttributes);\n const background = _EncodedTokenMetadata.getBackground(encodedTokenAttributes);\n console.log({\n languageId,\n tokenType,\n fontStyle,\n foreground,\n background\n });\n }\n static getLanguageId(encodedTokenAttributes) {\n return (encodedTokenAttributes & 255 /* LANGUAGEID_MASK */) >>> 0 /* LANGUAGEID_OFFSET */;\n }\n static getTokenType(encodedTokenAttributes) {\n return (encodedTokenAttributes & 768 /* TOKEN_TYPE_MASK */) >>> 8 /* TOKEN_TYPE_OFFSET */;\n }\n static containsBalancedBrackets(encodedTokenAttributes) {\n return (encodedTokenAttributes & 1024 /* BALANCED_BRACKETS_MASK */) !== 0;\n }\n static getFontStyle(encodedTokenAttributes) {\n return (encodedTokenAttributes & 30720 /* FONT_STYLE_MASK */) >>> 11 /* FONT_STYLE_OFFSET */;\n }\n static getForeground(encodedTokenAttributes) {\n return (encodedTokenAttributes & 16744448 /* FOREGROUND_MASK */) >>> 15 /* FOREGROUND_OFFSET */;\n }\n static getBackground(encodedTokenAttributes) {\n return (encodedTokenAttributes & 4278190080 /* BACKGROUND_MASK */) >>> 24 /* BACKGROUND_OFFSET */;\n }\n /**\n * Updates the fields in `metadata`.\n * A value of `0`, `NotSet` or `null` indicates that the corresponding field should be left as is.\n */\n static set(encodedTokenAttributes, languageId, tokenType, containsBalancedBrackets, fontStyle, foreground, background) {\n let _languageId = _EncodedTokenMetadata.getLanguageId(encodedTokenAttributes);\n let _tokenType = _EncodedTokenMetadata.getTokenType(encodedTokenAttributes);\n let _containsBalancedBracketsBit = _EncodedTokenMetadata.containsBalancedBrackets(encodedTokenAttributes) ? 1 : 0;\n let _fontStyle = _EncodedTokenMetadata.getFontStyle(encodedTokenAttributes);\n let _foreground = _EncodedTokenMetadata.getForeground(encodedTokenAttributes);\n let _background = _EncodedTokenMetadata.getBackground(encodedTokenAttributes);\n if (languageId !== 0) {\n _languageId = languageId;\n }\n if (tokenType !== 8 /* NotSet */) {\n _tokenType = fromOptionalTokenType(tokenType);\n }\n if (containsBalancedBrackets !== null) {\n _containsBalancedBracketsBit = containsBalancedBrackets ? 1 : 0;\n }\n if (fontStyle !== -1 /* NotSet */) {\n _fontStyle = fontStyle;\n }\n if (foreground !== 0) {\n _foreground = foreground;\n }\n if (background !== 0) {\n _background = background;\n }\n return (_languageId << 0 /* LANGUAGEID_OFFSET */ | _tokenType << 8 /* TOKEN_TYPE_OFFSET */ | _containsBalancedBracketsBit << 10 /* BALANCED_BRACKETS_OFFSET */ | _fontStyle << 11 /* FONT_STYLE_OFFSET */ | _foreground << 15 /* FOREGROUND_OFFSET */ | _background << 24 /* BACKGROUND_OFFSET */) >>> 0;\n }\n};\nfunction toOptionalTokenType(standardType) {\n return standardType;\n}\nfunction fromOptionalTokenType(standardType) {\n return standardType;\n}\n\n// src/matcher.ts\nfunction createMatchers(selector, matchesName) {\n const results = [];\n const tokenizer = newTokenizer(selector);\n let token = tokenizer.next();\n while (token !== null) {\n let priority = 0;\n if (token.length === 2 && token.charAt(1) === \":\") {\n switch (token.charAt(0)) {\n case \"R\":\n priority = 1;\n break;\n case \"L\":\n priority = -1;\n break;\n default:\n console.log(`Unknown priority ${token} in scope selector`);\n }\n token = tokenizer.next();\n }\n let matcher = parseConjunction();\n results.push({ matcher, priority });\n if (token !== \",\") {\n break;\n }\n token = tokenizer.next();\n }\n return results;\n function parseOperand() {\n if (token === \"-\") {\n token = tokenizer.next();\n const expressionToNegate = parseOperand();\n return (matcherInput) => !!expressionToNegate && !expressionToNegate(matcherInput);\n }\n if (token === \"(\") {\n token = tokenizer.next();\n const expressionInParents = parseInnerExpression();\n if (token === \")\") {\n token = tokenizer.next();\n }\n return expressionInParents;\n }\n if (isIdentifier(token)) {\n const identifiers = [];\n do {\n identifiers.push(token);\n token = tokenizer.next();\n } while (isIdentifier(token));\n return (matcherInput) => matchesName(identifiers, matcherInput);\n }\n return null;\n }\n function parseConjunction() {\n const matchers = [];\n let matcher = parseOperand();\n while (matcher) {\n matchers.push(matcher);\n matcher = parseOperand();\n }\n return (matcherInput) => matchers.every((matcher2) => matcher2(matcherInput));\n }\n function parseInnerExpression() {\n const matchers = [];\n let matcher = parseConjunction();\n while (matcher) {\n matchers.push(matcher);\n if (token === \"|\" || token === \",\") {\n do {\n token = tokenizer.next();\n } while (token === \"|\" || token === \",\");\n } else {\n break;\n }\n matcher = parseConjunction();\n }\n return (matcherInput) => matchers.some((matcher2) => matcher2(matcherInput));\n }\n}\nfunction isIdentifier(token) {\n return !!token && !!token.match(/[\\w\\.:]+/);\n}\nfunction newTokenizer(input) {\n let regex = /([LR]:|[\\w\\.:][\\w\\.:\\-]*|[\\,\\|\\-\\(\\)])/g;\n let match = regex.exec(input);\n return {\n next: () => {\n if (!match) {\n return null;\n }\n const res = match[0];\n match = regex.exec(input);\n return res;\n }\n };\n}\n\n// src/onigLib.ts\nvar FindOption = /* @__PURE__ */ ((FindOption2) => {\n FindOption2[FindOption2[\"None\"] = 0] = \"None\";\n FindOption2[FindOption2[\"NotBeginString\"] = 1] = \"NotBeginString\";\n FindOption2[FindOption2[\"NotEndString\"] = 2] = \"NotEndString\";\n FindOption2[FindOption2[\"NotBeginPosition\"] = 4] = \"NotBeginPosition\";\n FindOption2[FindOption2[\"DebugCall\"] = 8] = \"DebugCall\";\n return FindOption2;\n})(FindOption || {});\nfunction disposeOnigString(str) {\n if (typeof str.dispose === \"function\") {\n str.dispose();\n }\n}\n\n// src/grammar/grammarDependencies.ts\nvar TopLevelRuleReference = class {\n constructor(scopeName) {\n this.scopeName = scopeName;\n }\n toKey() {\n return this.scopeName;\n }\n};\nvar TopLevelRepositoryRuleReference = class {\n constructor(scopeName, ruleName) {\n this.scopeName = scopeName;\n this.ruleName = ruleName;\n }\n toKey() {\n return `${this.scopeName}#${this.ruleName}`;\n }\n};\nvar ExternalReferenceCollector = class {\n _references = [];\n _seenReferenceKeys = /* @__PURE__ */ new Set();\n get references() {\n return this._references;\n }\n visitedRule = /* @__PURE__ */ new Set();\n add(reference) {\n const key = reference.toKey();\n if (this._seenReferenceKeys.has(key)) {\n return;\n }\n this._seenReferenceKeys.add(key);\n this._references.push(reference);\n }\n};\nvar ScopeDependencyProcessor = class {\n constructor(repo, initialScopeName) {\n this.repo = repo;\n this.initialScopeName = initialScopeName;\n this.seenFullScopeRequests.add(this.initialScopeName);\n this.Q = [new TopLevelRuleReference(this.initialScopeName)];\n }\n seenFullScopeRequests = /* @__PURE__ */ new Set();\n seenPartialScopeRequests = /* @__PURE__ */ new Set();\n Q;\n processQueue() {\n const q = this.Q;\n this.Q = [];\n const deps = new ExternalReferenceCollector();\n for (const dep of q) {\n collectReferencesOfReference(dep, this.initialScopeName, this.repo, deps);\n }\n for (const dep of deps.references) {\n if (dep instanceof TopLevelRuleReference) {\n if (this.seenFullScopeRequests.has(dep.scopeName)) {\n continue;\n }\n this.seenFullScopeRequests.add(dep.scopeName);\n this.Q.push(dep);\n } else {\n if (this.seenFullScopeRequests.has(dep.scopeName)) {\n continue;\n }\n if (this.seenPartialScopeRequests.has(dep.toKey())) {\n continue;\n }\n this.seenPartialScopeRequests.add(dep.toKey());\n this.Q.push(dep);\n }\n }\n }\n};\nfunction collectReferencesOfReference(reference, baseGrammarScopeName, repo, result) {\n const selfGrammar = repo.lookup(reference.scopeName);\n if (!selfGrammar) {\n if (reference.scopeName === baseGrammarScopeName) {\n throw new Error(`No grammar provided for <${baseGrammarScopeName}>`);\n }\n return;\n }\n const baseGrammar = repo.lookup(baseGrammarScopeName);\n if (reference instanceof TopLevelRuleReference) {\n collectExternalReferencesInTopLevelRule({ baseGrammar, selfGrammar }, result);\n } else {\n collectExternalReferencesInTopLevelRepositoryRule(\n reference.ruleName,\n { baseGrammar, selfGrammar, repository: selfGrammar.repository },\n result\n );\n }\n const injections = repo.injections(reference.scopeName);\n if (injections) {\n for (const injection of injections) {\n result.add(new TopLevelRuleReference(injection));\n }\n }\n}\nfunction collectExternalReferencesInTopLevelRepositoryRule(ruleName, context, result) {\n if (context.repository && context.repository[ruleName]) {\n const rule = context.repository[ruleName];\n collectExternalReferencesInRules([rule], context, result);\n }\n}\nfunction collectExternalReferencesInTopLevelRule(context, result) {\n if (context.selfGrammar.patterns && Array.isArray(context.selfGrammar.patterns)) {\n collectExternalReferencesInRules(\n context.selfGrammar.patterns,\n { ...context, repository: context.selfGrammar.repository },\n result\n );\n }\n if (context.selfGrammar.injections) {\n collectExternalReferencesInRules(\n Object.values(context.selfGrammar.injections),\n { ...context, repository: context.selfGrammar.repository },\n result\n );\n }\n}\nfunction collectExternalReferencesInRules(rules, context, result) {\n for (const rule of rules) {\n if (result.visitedRule.has(rule)) {\n continue;\n }\n result.visitedRule.add(rule);\n const patternRepository = rule.repository ? mergeObjects({}, context.repository, rule.repository) : context.repository;\n if (Array.isArray(rule.patterns)) {\n collectExternalReferencesInRules(rule.patterns, { ...context, repository: patternRepository }, result);\n }\n const include = rule.include;\n if (!include) {\n continue;\n }\n const reference = parseInclude(include);\n switch (reference.kind) {\n case 0 /* Base */:\n collectExternalReferencesInTopLevelRule({ ...context, selfGrammar: context.baseGrammar }, result);\n break;\n case 1 /* Self */:\n collectExternalReferencesInTopLevelRule(context, result);\n break;\n case 2 /* RelativeReference */:\n collectExternalReferencesInTopLevelRepositoryRule(reference.ruleName, { ...context, repository: patternRepository }, result);\n break;\n case 3 /* TopLevelReference */:\n case 4 /* TopLevelRepositoryReference */:\n const selfGrammar = reference.scopeName === context.selfGrammar.scopeName ? context.selfGrammar : reference.scopeName === context.baseGrammar.scopeName ? context.baseGrammar : void 0;\n if (selfGrammar) {\n const newContext = { baseGrammar: context.baseGrammar, selfGrammar, repository: patternRepository };\n if (reference.kind === 4 /* TopLevelRepositoryReference */) {\n collectExternalReferencesInTopLevelRepositoryRule(reference.ruleName, newContext, result);\n } else {\n collectExternalReferencesInTopLevelRule(newContext, result);\n }\n } else {\n if (reference.kind === 4 /* TopLevelRepositoryReference */) {\n result.add(new TopLevelRepositoryRuleReference(reference.scopeName, reference.ruleName));\n } else {\n result.add(new TopLevelRuleReference(reference.scopeName));\n }\n }\n break;\n }\n }\n}\nvar BaseReference = class {\n kind = 0 /* Base */;\n};\nvar SelfReference = class {\n kind = 1 /* Self */;\n};\nvar RelativeReference = class {\n constructor(ruleName) {\n this.ruleName = ruleName;\n }\n kind = 2 /* RelativeReference */;\n};\nvar TopLevelReference = class {\n constructor(scopeName) {\n this.scopeName = scopeName;\n }\n kind = 3 /* TopLevelReference */;\n};\nvar TopLevelRepositoryReference = class {\n constructor(scopeName, ruleName) {\n this.scopeName = scopeName;\n this.ruleName = ruleName;\n }\n kind = 4 /* TopLevelRepositoryReference */;\n};\nfunction parseInclude(include) {\n if (include === \"$base\") {\n return new BaseReference();\n } else if (include === \"$self\") {\n return new SelfReference();\n }\n const indexOfSharp = include.indexOf(\"#\");\n if (indexOfSharp === -1) {\n return new TopLevelReference(include);\n } else if (indexOfSharp === 0) {\n return new RelativeReference(include.substring(1));\n } else {\n const scopeName = include.substring(0, indexOfSharp);\n const ruleName = include.substring(indexOfSharp + 1);\n return new TopLevelRepositoryReference(scopeName, ruleName);\n }\n}\n\n// src/rule.ts\nvar HAS_BACK_REFERENCES = /\\\\(\\d+)/;\nvar BACK_REFERENCING_END = /\\\\(\\d+)/g;\nvar ruleIdSymbol = Symbol(\"RuleId\");\nvar endRuleId = -1;\nvar whileRuleId = -2;\nfunction ruleIdFromNumber(id) {\n return id;\n}\nfunction ruleIdToNumber(id) {\n return id;\n}\nvar Rule = class {\n $location;\n id;\n _nameIsCapturing;\n _name;\n _contentNameIsCapturing;\n _contentName;\n constructor($location, id, name, contentName) {\n this.$location = $location;\n this.id = id;\n this._name = name || null;\n this._nameIsCapturing = RegexSource.hasCaptures(this._name);\n this._contentName = contentName || null;\n this._contentNameIsCapturing = RegexSource.hasCaptures(this._contentName);\n }\n get debugName() {\n const location = this.$location ? `${basename(this.$location.filename)}:${this.$location.line}` : \"unknown\";\n return `${this.constructor.name}#${this.id} @ ${location}`;\n }\n getName(lineText, captureIndices) {\n if (!this._nameIsCapturing || this._name === null || lineText === null || captureIndices === null) {\n return this._name;\n }\n return RegexSource.replaceCaptures(this._name, lineText, captureIndices);\n }\n getContentName(lineText, captureIndices) {\n if (!this._contentNameIsCapturing || this._contentName === null) {\n return this._contentName;\n }\n return RegexSource.replaceCaptures(this._contentName, lineText, captureIndices);\n }\n};\nvar CaptureRule = class extends Rule {\n retokenizeCapturedWithRuleId;\n constructor($location, id, name, contentName, retokenizeCapturedWithRuleId) {\n super($location, id, name, contentName);\n this.retokenizeCapturedWithRuleId = retokenizeCapturedWithRuleId;\n }\n dispose() {\n }\n collectPatterns(grammar, out) {\n throw new Error(\"Not supported!\");\n }\n compile(grammar, endRegexSource) {\n throw new Error(\"Not supported!\");\n }\n compileAG(grammar, endRegexSource, allowA, allowG) {\n throw new Error(\"Not supported!\");\n }\n};\nvar MatchRule = class extends Rule {\n _match;\n captures;\n _cachedCompiledPatterns;\n constructor($location, id, name, match, captures) {\n super($location, id, name, null);\n this._match = new RegExpSource(match, this.id);\n this.captures = captures;\n this._cachedCompiledPatterns = null;\n }\n dispose() {\n if (this._cachedCompiledPatterns) {\n this._cachedCompiledPatterns.dispose();\n this._cachedCompiledPatterns = null;\n }\n }\n get debugMatchRegExp() {\n return `${this._match.source}`;\n }\n collectPatterns(grammar, out) {\n out.push(this._match);\n }\n compile(grammar, endRegexSource) {\n return this._getCachedCompiledPatterns(grammar).compile(grammar);\n }\n compileAG(grammar, endRegexSource, allowA, allowG) {\n return this._getCachedCompiledPatterns(grammar).compileAG(grammar, allowA, allowG);\n }\n _getCachedCompiledPatterns(grammar) {\n if (!this._cachedCompiledPatterns) {\n this._cachedCompiledPatterns = new RegExpSourceList();\n this.collectPatterns(grammar, this._cachedCompiledPatterns);\n }\n return this._cachedCompiledPatterns;\n }\n};\nvar IncludeOnlyRule = class extends Rule {\n hasMissingPatterns;\n patterns;\n _cachedCompiledPatterns;\n constructor($location, id, name, contentName, patterns) {\n super($location, id, name, contentName);\n this.patterns = patterns.patterns;\n this.hasMissingPatterns = patterns.hasMissingPatterns;\n this._cachedCompiledPatterns = null;\n }\n dispose() {\n if (this._cachedCompiledPatterns) {\n this._cachedCompiledPatterns.dispose();\n this._cachedCompiledPatterns = null;\n }\n }\n collectPatterns(grammar, out) {\n for (const pattern of this.patterns) {\n const rule = grammar.getRule(pattern);\n rule.collectPatterns(grammar, out);\n }\n }\n compile(grammar, endRegexSource) {\n return this._getCachedCompiledPatterns(grammar).compile(grammar);\n }\n compileAG(grammar, endRegexSource, allowA, allowG) {\n return this._getCachedCompiledPatterns(grammar).compileAG(grammar, allowA, allowG);\n }\n _getCachedCompiledPatterns(grammar) {\n if (!this._cachedCompiledPatterns) {\n this._cachedCompiledPatterns = new RegExpSourceList();\n this.collectPatterns(grammar, this._cachedCompiledPatterns);\n }\n return this._cachedCompiledPatterns;\n }\n};\nvar BeginEndRule = class extends Rule {\n _begin;\n beginCaptures;\n _end;\n endHasBackReferences;\n endCaptures;\n applyEndPatternLast;\n hasMissingPatterns;\n patterns;\n _cachedCompiledPatterns;\n constructor($location, id, name, contentName, begin, beginCaptures, end, endCaptures, applyEndPatternLast, patterns) {\n super($location, id, name, contentName);\n this._begin = new RegExpSource(begin, this.id);\n this.beginCaptures = beginCaptures;\n this._end = new RegExpSource(end ? end : \"\\uFFFF\", -1);\n this.endHasBackReferences = this._end.hasBackReferences;\n this.endCaptures = endCaptures;\n this.applyEndPatternLast = applyEndPatternLast || false;\n this.patterns = patterns.patterns;\n this.hasMissingPatterns = patterns.hasMissingPatterns;\n this._cachedCompiledPatterns = null;\n }\n dispose() {\n if (this._cachedCompiledPatterns) {\n this._cachedCompiledPatterns.dispose();\n this._cachedCompiledPatterns = null;\n }\n }\n get debugBeginRegExp() {\n return `${this._begin.source}`;\n }\n get debugEndRegExp() {\n return `${this._end.source}`;\n }\n getEndWithResolvedBackReferences(lineText, captureIndices) {\n return this._end.resolveBackReferences(lineText, captureIndices);\n }\n collectPatterns(grammar, out) {\n out.push(this._begin);\n }\n compile(grammar, endRegexSource) {\n return this._getCachedCompiledPatterns(grammar, endRegexSource).compile(grammar);\n }\n compileAG(grammar, endRegexSource, allowA, allowG) {\n return this._getCachedCompiledPatterns(grammar, endRegexSource).compileAG(grammar, allowA, allowG);\n }\n _getCachedCompiledPatterns(grammar, endRegexSource) {\n if (!this._cachedCompiledPatterns) {\n this._cachedCompiledPatterns = new RegExpSourceList();\n for (const pattern of this.patterns) {\n const rule = grammar.getRule(pattern);\n rule.collectPatterns(grammar, this._cachedCompiledPatterns);\n }\n if (this.applyEndPatternLast) {\n this._cachedCompiledPatterns.push(this._end.hasBackReferences ? this._end.clone() : this._end);\n } else {\n this._cachedCompiledPatterns.unshift(this._end.hasBackReferences ? this._end.clone() : this._end);\n }\n }\n if (this._end.hasBackReferences) {\n if (this.applyEndPatternLast) {\n this._cachedCompiledPatterns.setSource(this._cachedCompiledPatterns.length() - 1, endRegexSource);\n } else {\n this._cachedCompiledPatterns.setSource(0, endRegexSource);\n }\n }\n return this._cachedCompiledPatterns;\n }\n};\nvar BeginWhileRule = class extends Rule {\n _begin;\n beginCaptures;\n whileCaptures;\n _while;\n whileHasBackReferences;\n hasMissingPatterns;\n patterns;\n _cachedCompiledPatterns;\n _cachedCompiledWhilePatterns;\n constructor($location, id, name, contentName, begin, beginCaptures, _while, whileCaptures, patterns) {\n super($location, id, name, contentName);\n this._begin = new RegExpSource(begin, this.id);\n this.beginCaptures = beginCaptures;\n this.whileCaptures = whileCaptures;\n this._while = new RegExpSource(_while, whileRuleId);\n this.whileHasBackReferences = this._while.hasBackReferences;\n this.patterns = patterns.patterns;\n this.hasMissingPatterns = patterns.hasMissingPatterns;\n this._cachedCompiledPatterns = null;\n this._cachedCompiledWhilePatterns = null;\n }\n dispose() {\n if (this._cachedCompiledPatterns) {\n this._cachedCompiledPatterns.dispose();\n this._cachedCompiledPatterns = null;\n }\n if (this._cachedCompiledWhilePatterns) {\n this._cachedCompiledWhilePatterns.dispose();\n this._cachedCompiledWhilePatterns = null;\n }\n }\n get debugBeginRegExp() {\n return `${this._begin.source}`;\n }\n get debugWhileRegExp() {\n return `${this._while.source}`;\n }\n getWhileWithResolvedBackReferences(lineText, captureIndices) {\n return this._while.resolveBackReferences(lineText, captureIndices);\n }\n collectPatterns(grammar, out) {\n out.push(this._begin);\n }\n compile(grammar, endRegexSource) {\n return this._getCachedCompiledPatterns(grammar).compile(grammar);\n }\n compileAG(grammar, endRegexSource, allowA, allowG) {\n return this._getCachedCompiledPatterns(grammar).compileAG(grammar, allowA, allowG);\n }\n _getCachedCompiledPatterns(grammar) {\n if (!this._cachedCompiledPatterns) {\n this._cachedCompiledPatterns = new RegExpSourceList();\n for (const pattern of this.patterns) {\n const rule = grammar.getRule(pattern);\n rule.collectPatterns(grammar, this._cachedCompiledPatterns);\n }\n }\n return this._cachedCompiledPatterns;\n }\n compileWhile(grammar, endRegexSource) {\n return this._getCachedCompiledWhilePatterns(grammar, endRegexSource).compile(grammar);\n }\n compileWhileAG(grammar, endRegexSource, allowA, allowG) {\n return this._getCachedCompiledWhilePatterns(grammar, endRegexSource).compileAG(grammar, allowA, allowG);\n }\n _getCachedCompiledWhilePatterns(grammar, endRegexSource) {\n if (!this._cachedCompiledWhilePatterns) {\n this._cachedCompiledWhilePatterns = new RegExpSourceList();\n this._cachedCompiledWhilePatterns.push(this._while.hasBackReferences ? this._while.clone() : this._while);\n }\n if (this._while.hasBackReferences) {\n this._cachedCompiledWhilePatterns.setSource(0, endRegexSource ? endRegexSource : \"\\uFFFF\");\n }\n return this._cachedCompiledWhilePatterns;\n }\n};\nvar RuleFactory = class _RuleFactory {\n static createCaptureRule(helper, $location, name, contentName, retokenizeCapturedWithRuleId) {\n return helper.registerRule((id) => {\n return new CaptureRule($location, id, name, contentName, retokenizeCapturedWithRuleId);\n });\n }\n static getCompiledRuleId(desc, helper, repository) {\n if (!desc.id) {\n helper.registerRule((id) => {\n desc.id = id;\n if (desc.match) {\n return new MatchRule(\n desc.$vscodeTextmateLocation,\n desc.id,\n desc.name,\n desc.match,\n _RuleFactory._compileCaptures(desc.captures, helper, repository)\n );\n }\n if (typeof desc.begin === \"undefined\") {\n if (desc.repository) {\n repository = mergeObjects({}, repository, desc.repository);\n }\n let patterns = desc.patterns;\n if (typeof patterns === \"undefined\" && desc.include) {\n patterns = [{ include: desc.include }];\n }\n return new IncludeOnlyRule(\n desc.$vscodeTextmateLocation,\n desc.id,\n desc.name,\n desc.contentName,\n _RuleFactory._compilePatterns(patterns, helper, repository)\n );\n }\n if (desc.while) {\n return new BeginWhileRule(\n desc.$vscodeTextmateLocation,\n desc.id,\n desc.name,\n desc.contentName,\n desc.begin,\n _RuleFactory._compileCaptures(desc.beginCaptures || desc.captures, helper, repository),\n desc.while,\n _RuleFactory._compileCaptures(desc.whileCaptures || desc.captures, helper, repository),\n _RuleFactory._compilePatterns(desc.patterns, helper, repository)\n );\n }\n return new BeginEndRule(\n desc.$vscodeTextmateLocation,\n desc.id,\n desc.name,\n desc.contentName,\n desc.begin,\n _RuleFactory._compileCaptures(desc.beginCaptures || desc.captures, helper, repository),\n desc.end,\n _RuleFactory._compileCaptures(desc.endCaptures || desc.captures, helper, repository),\n desc.applyEndPatternLast,\n _RuleFactory._compilePatterns(desc.patterns, helper, repository)\n );\n });\n }\n return desc.id;\n }\n static _compileCaptures(captures, helper, repository) {\n let r = [];\n if (captures) {\n let maximumCaptureId = 0;\n for (const captureId in captures) {\n if (captureId === \"$vscodeTextmateLocation\") {\n continue;\n }\n const numericCaptureId = parseInt(captureId, 10);\n if (numericCaptureId > maximumCaptureId) {\n maximumCaptureId = numericCaptureId;\n }\n }\n for (let i = 0; i <= maximumCaptureId; i++) {\n r[i] = null;\n }\n for (const captureId in captures) {\n if (captureId === \"$vscodeTextmateLocation\") {\n continue;\n }\n const numericCaptureId = parseInt(captureId, 10);\n let retokenizeCapturedWithRuleId = 0;\n if (captures[captureId].patterns) {\n retokenizeCapturedWithRuleId = _RuleFactory.getCompiledRuleId(captures[captureId], helper, repository);\n }\n r[numericCaptureId] = _RuleFactory.createCaptureRule(helper, captures[captureId].$vscodeTextmateLocation, captures[captureId].name, captures[captureId].contentName, retokenizeCapturedWithRuleId);\n }\n }\n return r;\n }\n static _compilePatterns(patterns, helper, repository) {\n let r = [];\n if (patterns) {\n for (let i = 0, len = patterns.length; i < len; i++) {\n const pattern = patterns[i];\n let ruleId = -1;\n if (pattern.include) {\n const reference = parseInclude(pattern.include);\n switch (reference.kind) {\n case 0 /* Base */:\n case 1 /* Self */:\n ruleId = _RuleFactory.getCompiledRuleId(repository[pattern.include], helper, repository);\n break;\n case 2 /* RelativeReference */:\n let localIncludedRule = repository[reference.ruleName];\n if (localIncludedRule) {\n ruleId = _RuleFactory.getCompiledRuleId(localIncludedRule, helper, repository);\n } else {\n }\n break;\n case 3 /* TopLevelReference */:\n case 4 /* TopLevelRepositoryReference */:\n const externalGrammarName = reference.scopeName;\n const externalGrammarInclude = reference.kind === 4 /* TopLevelRepositoryReference */ ? reference.ruleName : null;\n const externalGrammar = helper.getExternalGrammar(externalGrammarName, repository);\n if (externalGrammar) {\n if (externalGrammarInclude) {\n let externalIncludedRule = externalGrammar.repository[externalGrammarInclude];\n if (externalIncludedRule) {\n ruleId = _RuleFactory.getCompiledRuleId(externalIncludedRule, helper, externalGrammar.repository);\n } else {\n }\n } else {\n ruleId = _RuleFactory.getCompiledRuleId(externalGrammar.repository.$self, helper, externalGrammar.repository);\n }\n } else {\n }\n break;\n }\n } else {\n ruleId = _RuleFactory.getCompiledRuleId(pattern, helper, repository);\n }\n if (ruleId !== -1) {\n const rule = helper.getRule(ruleId);\n let skipRule = false;\n if (rule instanceof IncludeOnlyRule || rule instanceof BeginEndRule || rule instanceof BeginWhileRule) {\n if (rule.hasMissingPatterns && rule.patterns.length === 0) {\n skipRule = true;\n }\n }\n if (skipRule) {\n continue;\n }\n r.push(ruleId);\n }\n }\n }\n return {\n patterns: r,\n hasMissingPatterns: (patterns ? patterns.length : 0) !== r.length\n };\n }\n};\nvar RegExpSource = class _RegExpSource {\n source;\n ruleId;\n hasAnchor;\n hasBackReferences;\n _anchorCache;\n constructor(regExpSource, ruleId) {\n if (regExpSource && typeof regExpSource === \"string\") {\n const len = regExpSource.length;\n let lastPushedPos = 0;\n let output = [];\n let hasAnchor = false;\n for (let pos = 0; pos < len; pos++) {\n const ch = regExpSource.charAt(pos);\n if (ch === \"\\\\\") {\n if (pos + 1 < len) {\n const nextCh = regExpSource.charAt(pos + 1);\n if (nextCh === \"z\") {\n output.push(regExpSource.substring(lastPushedPos, pos));\n output.push(\"$(?!\\\\n)(?<!\\\\n)\");\n lastPushedPos = pos + 2;\n } else if (nextCh === \"A\" || nextCh === \"G\") {\n hasAnchor = true;\n }\n pos++;\n }\n }\n }\n this.hasAnchor = hasAnchor;\n if (lastPushedPos === 0) {\n this.source = regExpSource;\n } else {\n output.push(regExpSource.substring(lastPushedPos, len));\n this.source = output.join(\"\");\n }\n } else {\n this.hasAnchor = false;\n this.source = regExpSource;\n }\n if (this.hasAnchor) {\n this._anchorCache = this._buildAnchorCache();\n } else {\n this._anchorCache = null;\n }\n this.ruleId = ruleId;\n if (typeof this.source === \"string\") {\n this.hasBackReferences = HAS_BACK_REFERENCES.test(this.source);\n } else {\n this.hasBackReferences = false;\n }\n }\n clone() {\n return new _RegExpSource(this.source, this.ruleId);\n }\n setSource(newSource) {\n if (this.source === newSource) {\n return;\n }\n this.source = newSource;\n if (this.hasAnchor) {\n this._anchorCache = this._buildAnchorCache();\n }\n }\n resolveBackReferences(lineText, captureIndices) {\n if (typeof this.source !== \"string\") {\n throw new Error(\"This method should only be called if the source is a string\");\n }\n let capturedValues = captureIndices.map((capture) => {\n return lineText.substring(capture.start, capture.end);\n });\n BACK_REFERENCING_END.lastIndex = 0;\n return this.source.replace(BACK_REFERENCING_END, (match, g1) => {\n return escapeRegExpCharacters(capturedValues[parseInt(g1, 10)] || \"\");\n });\n }\n _buildAnchorCache() {\n if (typeof this.source !== \"string\") {\n throw new Error(\"This method should only be called if the source is a string\");\n }\n let A0_G0_result = [];\n let A0_G1_result = [];\n let A1_G0_result = [];\n let A1_G1_result = [];\n let pos, len, ch, nextCh;\n for (pos = 0, len = this.source.length; pos < len; pos++) {\n ch = this.source.charAt(pos);\n A0_G0_result[pos] = ch;\n A0_G1_result[pos] = ch;\n A1_G0_result[pos] = ch;\n A1_G1_result[pos] = ch;\n if (ch === \"\\\\\") {\n if (pos + 1 < len) {\n nextCh = this.source.charAt(pos + 1);\n if (nextCh === \"A\") {\n A0_G0_result[pos + 1] = \"\\uFFFF\";\n A0_G1_result[pos + 1] = \"\\uFFFF\";\n A1_G0_result[pos + 1] = \"A\";\n A1_G1_result[pos + 1] = \"A\";\n } else if (nextCh === \"G\") {\n A0_G0_result[pos + 1] = \"\\uFFFF\";\n A0_G1_result[pos + 1] = \"G\";\n A1_G0_result[pos + 1] = \"\\uFFFF\";\n A1_G1_result[pos + 1] = \"G\";\n } else {\n A0_G0_result[pos + 1] = nextCh;\n A0_G1_result[pos + 1] = nextCh;\n A1_G0_result[pos + 1] = nextCh;\n A1_G1_result[pos + 1] = nextCh;\n }\n pos++;\n }\n }\n }\n return {\n A0_G0: A0_G0_result.join(\"\"),\n A0_G1: A0_G1_result.join(\"\"),\n A1_G0: A1_G0_result.join(\"\"),\n A1_G1: A1_G1_result.join(\"\")\n };\n }\n resolveAnchors(allowA, allowG) {\n if (!this.hasAnchor || !this._anchorCache || typeof this.source !== \"string\") {\n return this.source;\n }\n if (allowA) {\n if (allowG) {\n return this._anchorCache.A1_G1;\n } else {\n return this._anchorCache.A1_G0;\n }\n } else {\n if (allowG) {\n return this._anchorCache.A0_G1;\n } else {\n return this._anchorCache.A0_G0;\n }\n }\n }\n};\nvar RegExpSourceList = class {\n _items;\n _hasAnchors;\n _cached;\n _anchorCache;\n constructor() {\n this._items = [];\n this._hasAnchors = false;\n this._cached = null;\n this._anchorCache = {\n A0_G0: null,\n A0_G1: null,\n A1_G0: null,\n A1_G1: null\n };\n }\n dispose() {\n this._disposeCaches();\n }\n _disposeCaches() {\n if (this._cached) {\n this._cached.dispose();\n this._cached = null;\n }\n if (this._anchorCache.A0_G0) {\n this._anchorCache.A0_G0.dispose();\n this._anchorCache.A0_G0 = null;\n }\n if (this._anchorCache.A0_G1) {\n this._anchorCache.A0_G1.dispose();\n this._anchorCache.A0_G1 = null;\n }\n if (this._anchorCache.A1_G0) {\n this._anchorCache.A1_G0.dispose();\n this._anchorCache.A1_G0 = null;\n }\n if (this._anchorCache.A1_G1) {\n this._anchorCache.A1_G1.dispose();\n this._anchorCache.A1_G1 = null;\n }\n }\n push(item) {\n this._items.push(item);\n this._hasAnchors = this._hasAnchors || item.hasAnchor;\n }\n unshift(item) {\n this._items.unshift(item);\n this._hasAnchors = this._hasAnchors || item.hasAnchor;\n }\n length() {\n return this._items.length;\n }\n setSource(index, newSource) {\n if (this._items[index].source !== newSource) {\n this._disposeCaches();\n this._items[index].setSource(newSource);\n }\n }\n compile(onigLib) {\n if (!this._cached) {\n let regExps = this._items.map((e) => e.source);\n this._cached = new CompiledRule(onigLib, regExps, this._items.map((e) => e.ruleId));\n }\n return this._cached;\n }\n compileAG(onigLib, allowA, allowG) {\n if (!this._hasAnchors) {\n return this.compile(onigLib);\n } else {\n if (allowA) {\n if (allowG) {\n if (!this._anchorCache.A1_G1) {\n this._anchorCache.A1_G1 = this._resolveAnchors(onigLib, allowA, allowG);\n }\n return this._anchorCache.A1_G1;\n } else {\n if (!this._anchorCache.A1_G0) {\n this._anchorCache.A1_G0 = this._resolveAnchors(onigLib, allowA, allowG);\n }\n return this._anchorCache.A1_G0;\n }\n } else {\n if (allowG) {\n if (!this._anchorCache.A0_G1) {\n this._anchorCache.A0_G1 = this._resolveAnchors(onigLib, allowA, allowG);\n }\n return this._anchorCache.A0_G1;\n } else {\n if (!this._anchorCache.A0_G0) {\n this._anchorCache.A0_G0 = this._resolveAnchors(onigLib, allowA, allowG);\n }\n return this._anchorCache.A0_G0;\n }\n }\n }\n }\n _resolveAnchors(onigLib, allowA, allowG) {\n let regExps = this._items.map((e) => e.resolveAnchors(allowA, allowG));\n return new CompiledRule(onigLib, regExps, this._items.map((e) => e.ruleId));\n }\n};\nvar CompiledRule = class {\n constructor(onigLib, regExps, rules) {\n this.regExps = regExps;\n this.rules = rules;\n this.scanner = onigLib.createOnigScanner(regExps);\n }\n scanner;\n dispose() {\n if (typeof this.scanner.dispose === \"function\") {\n this.scanner.dispose();\n }\n }\n toString() {\n const r = [];\n for (let i = 0, len = this.rules.length; i < len; i++) {\n r.push(\" - \" + this.rules[i] + \": \" + this.regExps[i]);\n }\n return r.join(\"\\n\");\n }\n findNextMatchSync(string, startPosition, options) {\n const result = this.scanner.findNextMatchSync(string, startPosition, options);\n if (!result) {\n return null;\n }\n return {\n ruleId: this.rules[result.index],\n captureIndices: result.captureIndices\n };\n }\n};\n\n// src/grammar/basicScopesAttributeProvider.ts\nvar BasicScopeAttributes = class {\n constructor(languageId, tokenType) {\n this.languageId = languageId;\n this.tokenType = tokenType;\n }\n};\nvar BasicScopeAttributesProvider = class _BasicScopeAttributesProvider {\n _defaultAttributes;\n _embeddedLanguagesMatcher;\n constructor(initialLanguageId, embeddedLanguages) {\n this._defaultAttributes = new BasicScopeAttributes(initialLanguageId, 8 /* NotSet */);\n this._embeddedLanguagesMatcher = new ScopeMatcher(Object.entries(embeddedLanguages || {}));\n }\n getDefaultAttributes() {\n return this._defaultAttributes;\n }\n getBasicScopeAttributes(scopeName) {\n if (scopeName === null) {\n return _BasicScopeAttributesProvider._NULL_SCOPE_METADATA;\n }\n return this._getBasicScopeAttributes.get(scopeName);\n }\n static _NULL_SCOPE_METADATA = new BasicScopeAttributes(0, 0);\n _getBasicScopeAttributes = new CachedFn((scopeName) => {\n const languageId = this._scopeToLanguage(scopeName);\n const standardTokenType = this._toStandardTokenType(scopeName);\n return new BasicScopeAttributes(languageId, standardTokenType);\n });\n /**\n * Given a produced TM scope, return the language that token describes or null if unknown.\n * e.g. source.html => html, source.css.embedded.html => css, punctuation.definition.tag.html => null\n */\n _scopeToLanguage(scope) {\n return this._embeddedLanguagesMatcher.match(scope) || 0;\n }\n _toStandardTokenType(scopeName) {\n const m = scopeName.match(_BasicScopeAttributesProvider.STANDARD_TOKEN_TYPE_REGEXP);\n if (!m) {\n return 8 /* NotSet */;\n }\n switch (m[1]) {\n case \"comment\":\n return 1 /* Comment */;\n case \"string\":\n return 2 /* String */;\n case \"regex\":\n return 3 /* RegEx */;\n case \"meta.embedded\":\n return 0 /* Other */;\n }\n throw new Error(\"Unexpected match for standard token type!\");\n }\n static STANDARD_TOKEN_TYPE_REGEXP = /\\b(comment|string|regex|meta\\.embedded)\\b/;\n};\nvar ScopeMatcher = class {\n values;\n scopesRegExp;\n constructor(values) {\n if (values.length === 0) {\n this.values = null;\n this.scopesRegExp = null;\n } else {\n this.values = new Map(values);\n const escapedScopes = values.map(\n ([scopeName, value]) => escapeRegExpCharacters(scopeName)\n );\n escapedScopes.sort();\n escapedScopes.reverse();\n this.scopesRegExp = new RegExp(\n `^((${escapedScopes.join(\")|(\")}))($|\\\\.)`,\n \"\"\n );\n }\n }\n match(scope) {\n if (!this.scopesRegExp) {\n return void 0;\n }\n const m = scope.match(this.scopesRegExp);\n if (!m) {\n return void 0;\n }\n return this.values.get(m[1]);\n }\n};\n\n// src/debug.ts\nvar DebugFlags = {\n InDebugMode: typeof process !== \"undefined\" && !!process.env[\"VSCODE_TEXTMATE_DEBUG\"]\n};\nvar UseOnigurumaFindOptions = false;\n\n// src/grammar/tokenizeString.ts\nvar TokenizeStringResult = class {\n constructor(stack, stoppedEarly) {\n this.stack = stack;\n this.stoppedEarly = stoppedEarly;\n }\n};\nfunction _tokenizeString(grammar, lineText, isFirstLine, linePos, stack, lineTokens, checkWhileConditions, timeLimit) {\n const lineLength = lineText.content.length;\n let STOP = false;\n let anchorPosition = -1;\n if (checkWhileConditions) {\n const whileCheckResult = _checkWhileConditions(\n grammar,\n lineText,\n isFirstLine,\n linePos,\n stack,\n lineTokens\n );\n stack = whileCheckResult.stack;\n linePos = whileCheckResult.linePos;\n isFirstLine = whileCheckResult.isFirstLine;\n anchorPosition = whileCheckResult.anchorPosition;\n }\n const startTime = Date.now();\n while (!STOP) {\n if (timeLimit !== 0) {\n const elapsedTime = Date.now() - startTime;\n if (elapsedTime > timeLimit) {\n return new TokenizeStringResult(stack, true);\n }\n }\n scanNext();\n }\n return new TokenizeStringResult(stack, false);\n function scanNext() {\n if (false) {\n console.log(\"\");\n console.log(\n `@@scanNext ${linePos}: |${lineText.content.substr(linePos).replace(/\\n$/, \"\\\\n\")}|`\n );\n }\n const r = matchRuleOrInjections(\n grammar,\n lineText,\n isFirstLine,\n linePos,\n stack,\n anchorPosition\n );\n if (!r) {\n lineTokens.produce(stack, lineLength);\n STOP = true;\n return;\n }\n const captureIndices = r.captureIndices;\n const matchedRuleId = r.matchedRuleId;\n const hasAdvanced = captureIndices && captureIndices.length > 0 ? captureIndices[0].end > linePos : false;\n if (matchedRuleId === endRuleId) {\n const poppedRule = stack.getRule(grammar);\n if (false) {\n console.log(\n \" popping \" + poppedRule.debugName + \" - \" + poppedRule.debugEndRegExp\n );\n }\n lineTokens.produce(stack, captureIndices[0].start);\n stack = stack.withContentNameScopesList(stack.nameScopesList);\n handleCaptures(\n grammar,\n lineText,\n isFirstLine,\n stack,\n lineTokens,\n poppedRule.endCaptures,\n captureIndices\n );\n lineTokens.produce(stack, captureIndices[0].end);\n const popped = stack;\n stack = stack.parent;\n anchorPosition = popped.getAnchorPos();\n if (!hasAdvanced && popped.getEnterPos() === linePos) {\n if (false) {\n console.error(\n \"[1] - Grammar is in an endless loop - Grammar pushed & popped a rule without advancing\"\n );\n }\n stack = popped;\n lineTokens.produce(stack, lineLength);\n STOP = true;\n return;\n }\n } else {\n const _rule = grammar.getRule(matchedRuleId);\n lineTokens.produce(stack, captureIndices[0].start);\n const beforePush = stack;\n const scopeName = _rule.getName(lineText.content, captureIndices);\n const nameScopesList = stack.contentNameScopesList.pushAttributed(\n scopeName,\n grammar\n );\n stack = stack.push(\n matchedRuleId,\n linePos,\n anchorPosition,\n captureIndices[0].end === lineLength,\n null,\n nameScopesList,\n nameScopesList\n );\n if (_rule instanceof BeginEndRule) {\n const pushedRule = _rule;\n if (false) {\n console.log(\n \" pushing \" + pushedRule.debugName + \" - \" + pushedRule.debugBeginRegExp\n );\n }\n handleCaptures(\n grammar,\n lineText,\n isFirstLine,\n stack,\n lineTokens,\n pushedRule.beginCaptures,\n captureIndices\n );\n lineTokens.produce(stack, captureIndices[0].end);\n anchorPosition = captureIndices[0].end;\n const contentName = pushedRule.getContentName(\n lineText.content,\n captureIndices\n );\n const contentNameScopesList = nameScopesList.pushAttributed(\n contentName,\n grammar\n );\n stack = stack.withContentNameScopesList(contentNameScopesList);\n if (pushedRule.endHasBackReferences) {\n stack = stack.withEndRule(\n pushedRule.getEndWithResolvedBackReferences(\n lineText.content,\n captureIndices\n )\n );\n }\n if (!hasAdvanced && beforePush.hasSameRuleAs(stack)) {\n if (false) {\n console.error(\n \"[2] - Grammar is in an endless loop - Grammar pushed the same rule without advancing\"\n );\n }\n stack = stack.pop();\n lineTokens.produce(stack, lineLength);\n STOP = true;\n return;\n }\n } else if (_rule instanceof BeginWhileRule) {\n const pushedRule = _rule;\n if (false) {\n console.log(\" pushing \" + pushedRule.debugName);\n }\n handleCaptures(\n grammar,\n lineText,\n isFirstLine,\n stack,\n lineTokens,\n pushedRule.beginCaptures,\n captureIndices\n );\n lineTokens.produce(stack, captureIndices[0].end);\n anchorPosition = captureIndices[0].end;\n const contentName = pushedRule.getContentName(\n lineText.content,\n captureIndices\n );\n const contentNameScopesList = nameScopesList.pushAttributed(\n contentName,\n grammar\n );\n stack = stack.withContentNameScopesList(contentNameScopesList);\n if (pushedRule.whileHasBackReferences) {\n stack = stack.withEndRule(\n pushedRule.getWhileWithResolvedBackReferences(\n lineText.content,\n captureIndices\n )\n );\n }\n if (!hasAdvanced && beforePush.hasSameRuleAs(stack)) {\n if (false) {\n console.error(\n \"[3] - Grammar is in an endless loop - Grammar pushed the same rule without advancing\"\n );\n }\n stack = stack.pop();\n lineTokens.produce(stack, lineLength);\n STOP = true;\n return;\n }\n } else {\n const matchingRule = _rule;\n if (false) {\n console.log(\n \" matched \" + matchingRule.debugName + \" - \" + matchingRule.debugMatchRegExp\n );\n }\n handleCaptures(\n grammar,\n lineText,\n isFirstLine,\n stack,\n lineTokens,\n matchingRule.captures,\n captureIndices\n );\n lineTokens.produce(stack, captureIndices[0].end);\n stack = stack.pop();\n if (!hasAdvanced) {\n if (false) {\n console.error(\n \"[4] - Grammar is in an endless loop - Grammar is not advancing, nor is it pushing/popping\"\n );\n }\n stack = stack.safePop();\n lineTokens.produce(stack, lineLength);\n STOP = true;\n return;\n }\n }\n }\n if (captureIndices[0].end > linePos) {\n linePos = captureIndices[0].end;\n isFirstLine = false;\n }\n }\n}\nfunction _checkWhileConditions(grammar, lineText, isFirstLine, linePos, stack, lineTokens) {\n let anchorPosition = stack.beginRuleCapturedEOL ? 0 : -1;\n const whileRules = [];\n for (let node = stack; node; node = node.pop()) {\n const nodeRule = node.getRule(grammar);\n if (nodeRule instanceof BeginWhileRule) {\n whileRules.push({\n rule: nodeRule,\n stack: node\n });\n }\n }\n for (let whileRule = whileRules.pop(); whileRule; whileRule = whileRules.pop()) {\n const { ruleScanner, findOptions } = prepareRuleWhileSearch(whileRule.rule, grammar, whileRule.stack.endRule, isFirstLine, linePos === anchorPosition);\n const r = ruleScanner.findNextMatchSync(lineText, linePos, findOptions);\n if (false) {\n console.log(\" scanning for while rule\");\n console.log(ruleScanner.toString());\n }\n if (r) {\n const matchedRuleId = r.ruleId;\n if (matchedRuleId !== whileRuleId) {\n stack = whileRule.stack.pop();\n break;\n }\n if (r.captureIndices && r.captureIndices.length) {\n lineTokens.produce(whileRule.stack, r.captureIndices[0].start);\n handleCaptures(grammar, lineText, isFirstLine, whileRule.stack, lineTokens, whileRule.rule.whileCaptures, r.captureIndices);\n lineTokens.produce(whileRule.stack, r.captureIndices[0].end);\n anchorPosition = r.captureIndices[0].end;\n if (r.captureIndices[0].end > linePos) {\n linePos = r.captureIndices[0].end;\n isFirstLine = false;\n }\n }\n } else {\n if (false) {\n console.log(\" popping \" + whileRule.rule.debugName + \" - \" + whileRule.rule.debugWhileRegExp);\n }\n stack = whileRule.stack.pop();\n break;\n }\n }\n return { stack, linePos, anchorPosition, isFirstLine };\n}\nfunction matchRuleOrInjections(grammar, lineText, isFirstLine, linePos, stack, anchorPosition) {\n const matchResult = matchRule(grammar, lineText, isFirstLine, linePos, stack, anchorPosition);\n const injections = grammar.getInjections();\n if (injections.length === 0) {\n return matchResult;\n }\n const injectionResult = matchInjections(injections, grammar, lineText, isFirstLine, linePos, stack, anchorPosition);\n if (!injectionResult) {\n return matchResult;\n }\n if (!matchResult) {\n return injectionResult;\n }\n const matchResultScore = matchResult.captureIndices[0].start;\n const injectionResultScore = injectionResult.captureIndices[0].start;\n if (injectionResultScore < matchResultScore || injectionResult.priorityMatch && injectionResultScore === matchResultScore) {\n return injectionResult;\n }\n return matchResult;\n}\nfunction matchRule(grammar, lineText, isFirstLine, linePos, stack, anchorPosition) {\n const rule = stack.getRule(grammar);\n const { ruleScanner, findOptions } = prepareRuleSearch(rule, grammar, stack.endRule, isFirstLine, linePos === anchorPosition);\n const r = ruleScanner.findNextMatchSync(lineText, linePos, findOptions);\n if (r) {\n return {\n captureIndices: r.captureIndices,\n matchedRuleId: r.ruleId\n };\n }\n return null;\n}\nfunction matchInjections(injections, grammar, lineText, isFirstLine, linePos, stack, anchorPosition) {\n let bestMatchRating = Number.MAX_VALUE;\n let bestMatchCaptureIndices = null;\n let bestMatchRuleId;\n let bestMatchResultPriority = 0;\n const scopes = stack.contentNameScopesList.getScopeNames();\n for (let i = 0, len = injections.length; i < len; i++) {\n const injection = injections[i];\n if (!injection.matcher(scopes)) {\n continue;\n }\n const rule = grammar.getRule(injection.ruleId);\n const { ruleScanner, findOptions } = prepareRuleSearch(rule, grammar, null, isFirstLine, linePos === anchorPosition);\n const matchResult = ruleScanner.findNextMatchSync(lineText, linePos, findOptions);\n if (!matchResult) {\n continue;\n }\n if (false) {\n console.log(` matched injection: ${injection.debugSelector}`);\n console.log(ruleScanner.toString());\n }\n const matchRating = matchResult.captureIndices[0].start;\n if (matchRating >= bestMatchRating) {\n continue;\n }\n bestMatchRating = matchRating;\n bestMatchCaptureIndices = matchResult.captureIndices;\n bestMatchRuleId = matchResult.ruleId;\n bestMatchResultPriority = injection.priority;\n if (bestMatchRating === linePos) {\n break;\n }\n }\n if (bestMatchCaptureIndices) {\n return {\n priorityMatch: bestMatchResultPriority === -1,\n captureIndices: bestMatchCaptureIndices,\n matchedRuleId: bestMatchRuleId\n };\n }\n return null;\n}\nfunction prepareRuleSearch(rule, grammar, endRegexSource, allowA, allowG) {\n if (UseOnigurumaFindOptions) {\n const ruleScanner2 = rule.compile(grammar, endRegexSource);\n const findOptions = getFindOptions(allowA, allowG);\n return { ruleScanner: ruleScanner2, findOptions };\n }\n const ruleScanner = rule.compileAG(grammar, endRegexSource, allowA, allowG);\n return { ruleScanner, findOptions: 0 /* None */ };\n}\nfunction prepareRuleWhileSearch(rule, grammar, endRegexSource, allowA, allowG) {\n if (UseOnigurumaFindOptions) {\n const ruleScanner2 = rule.compileWhile(grammar, endRegexSource);\n const findOptions = getFindOptions(allowA, allowG);\n return { ruleScanner: ruleScanner2, findOptions };\n }\n const ruleScanner = rule.compileWhileAG(grammar, endRegexSource, allowA, allowG);\n return { ruleScanner, findOptions: 0 /* None */ };\n}\nfunction getFindOptions(allowA, allowG) {\n let options = 0 /* None */;\n if (!allowA) {\n options |= 1 /* NotBeginString */;\n }\n if (!allowG) {\n options |= 4 /* NotBeginPosition */;\n }\n return options;\n}\nfunction handleCaptures(grammar, lineText, isFirstLine, stack, lineTokens, captures, captureIndices) {\n if (captures.length === 0) {\n return;\n }\n const lineTextContent = lineText.content;\n const len = Math.min(captures.length, captureIndices.length);\n const localStack = [];\n const maxEnd = captureIndices[0].end;\n for (let i = 0; i < len; i++) {\n const captureRule = captures[i];\n if (captureRule === null) {\n continue;\n }\n const captureIndex = captureIndices[i];\n if (captureIndex.length === 0) {\n continue;\n }\n if (captureIndex.start > maxEnd) {\n break;\n }\n while (localStack.length > 0 && localStack[localStack.length - 1].endPos <= captureIndex.start) {\n lineTokens.produceFromScopes(localStack[localStack.length - 1].scopes, localStack[localStack.length - 1].endPos);\n localStack.pop();\n }\n if (localStack.length > 0) {\n lineTokens.produceFromScopes(localStack[localStack.length - 1].scopes, captureIndex.start);\n } else {\n lineTokens.produce(stack, captureIndex.start);\n }\n if (captureRule.retokenizeCapturedWithRuleId) {\n const scopeName = captureRule.getName(lineTextContent, captureIndices);\n const nameScopesList = stack.contentNameScopesList.pushAttributed(scopeName, grammar);\n const contentName = captureRule.getContentName(lineTextContent, captureIndices);\n const contentNameScopesList = nameScopesList.pushAttributed(contentName, grammar);\n const stackClone = stack.push(captureRule.retokenizeCapturedWithRuleId, captureIndex.start, -1, false, null, nameScopesList, contentNameScopesList);\n const onigSubStr = grammar.createOnigString(lineTextContent.substring(0, captureIndex.end));\n _tokenizeString(\n grammar,\n onigSubStr,\n isFirstLine && captureIndex.start === 0,\n captureIndex.start,\n stackClone,\n lineTokens,\n false,\n /* no time limit */\n 0\n );\n disposeOnigString(onigSubStr);\n continue;\n }\n const captureRuleScopeName = captureRule.getName(lineTextContent, captureIndices);\n if (captureRuleScopeName !== null) {\n const base = localStack.length > 0 ? localStack[localStack.length - 1].scopes : stack.contentNameScopesList;\n const captureRuleScopesList = base.pushAttributed(captureRuleScopeName, grammar);\n localStack.push(new LocalStackElement(captureRuleScopesList, captureIndex.end));\n }\n }\n while (localStack.length > 0) {\n lineTokens.produceFromScopes(localStack[localStack.length - 1].scopes, localStack[localStack.length - 1].endPos);\n localStack.pop();\n }\n}\nvar LocalStackElement = class {\n scopes;\n endPos;\n constructor(scopes, endPos) {\n this.scopes = scopes;\n this.endPos = endPos;\n }\n};\n\n// src/grammar/grammar.ts\nfunction createGrammar(scopeName, grammar, initialLanguage, embeddedLanguages, tokenTypes, balancedBracketSelectors, grammarRepository, onigLib) {\n return new Grammar(\n scopeName,\n grammar,\n initialLanguage,\n embeddedLanguages,\n tokenTypes,\n balancedBracketSelectors,\n grammarRepository,\n onigLib\n );\n}\nfunction collectInjections(result, selector, rule, ruleFactoryHelper, grammar) {\n const matchers = createMatchers(selector, nameMatcher);\n const ruleId = RuleFactory.getCompiledRuleId(rule, ruleFactoryHelper, grammar.repository);\n for (const matcher of matchers) {\n result.push({\n debugSelector: selector,\n matcher: matcher.matcher,\n ruleId,\n grammar,\n priority: matcher.priority\n });\n }\n}\nfunction nameMatcher(identifers, scopes) {\n if (scopes.length < identifers.length) {\n return false;\n }\n let lastIndex = 0;\n return identifers.every((identifier) => {\n for (let i = lastIndex; i < scopes.length; i++) {\n if (scopesAreMatching(scopes[i], identifier)) {\n lastIndex = i + 1;\n return true;\n }\n }\n return false;\n });\n}\nfunction scopesAreMatching(thisScopeName, scopeName) {\n if (!thisScopeName) {\n return false;\n }\n if (thisScopeName === scopeName) {\n return true;\n }\n const len = scopeName.length;\n return thisScopeName.length > len && thisScopeName.substr(0, len) === scopeName && thisScopeName[len] === \".\";\n}\nvar Grammar = class {\n constructor(_rootScopeName, grammar, initialLanguage, embeddedLanguages, tokenTypes, balancedBracketSelectors, grammarRepository, _onigLib) {\n this._rootScopeName = _rootScopeName;\n this.balancedBracketSelectors = balancedBracketSelectors;\n this._onigLib = _onigLib;\n this._basicScopeAttributesProvider = new BasicScopeAttributesProvider(\n initialLanguage,\n embeddedLanguages\n );\n this._rootId = -1;\n this._lastRuleId = 0;\n this._ruleId2desc = [null];\n this._includedGrammars = {};\n this._grammarRepository = grammarRepository;\n this._grammar = initGrammar(grammar, null);\n this._injections = null;\n this._tokenTypeMatchers = [];\n if (tokenTypes) {\n for (const selector of Object.keys(tokenTypes)) {\n const matchers = createMatchers(selector, nameMatcher);\n for (const matcher of matchers) {\n this._tokenTypeMatchers.push({\n matcher: matcher.matcher,\n type: tokenTypes[selector]\n });\n }\n }\n }\n }\n _rootId;\n _lastRuleId;\n _ruleId2desc;\n _includedGrammars;\n _grammarRepository;\n _grammar;\n _injections;\n _basicScopeAttributesProvider;\n _tokenTypeMatchers;\n get themeProvider() {\n return this._grammarRepository;\n }\n dispose() {\n for (const rule of this._ruleId2desc) {\n if (rule) {\n rule.dispose();\n }\n }\n }\n createOnigScanner(sources) {\n return this._onigLib.createOnigScanner(sources);\n }\n createOnigString(sources) {\n return this._onigLib.createOnigString(sources);\n }\n getMetadataForScope(scope) {\n return this._basicScopeAttributesProvider.getBasicScopeAttributes(scope);\n }\n _collectInjections() {\n const grammarRepository = {\n lookup: (scopeName2) => {\n if (scopeName2 === this._rootScopeName) {\n return this._grammar;\n }\n return this.getExternalGrammar(scopeName2);\n },\n injections: (scopeName2) => {\n return this._grammarRepository.injections(scopeName2);\n }\n };\n const result = [];\n const scopeName = this._rootScopeName;\n const grammar = grammarRepository.lookup(scopeName);\n if (grammar) {\n const rawInjections = grammar.injections;\n if (rawInjections) {\n for (let expression in rawInjections) {\n collectInjections(\n result,\n expression,\n rawInjections[expression],\n this,\n grammar\n );\n }\n }\n const injectionScopeNames = this._grammarRepository.injections(scopeName);\n if (injectionScopeNames) {\n injectionScopeNames.forEach((injectionScopeName) => {\n const injectionGrammar = this.getExternalGrammar(injectionScopeName);\n if (injectionGrammar) {\n const selector = injectionGrammar.injectionSelector;\n if (selector) {\n collectInjections(\n result,\n selector,\n injectionGrammar,\n this,\n injectionGrammar\n );\n }\n }\n });\n }\n }\n result.sort((i1, i2) => i1.priority - i2.priority);\n return result;\n }\n getInjections() {\n if (this._injections === null) {\n this._injections = this._collectInjections();\n }\n return this._injections;\n }\n registerRule(factory) {\n const id = ++this._lastRuleId;\n const result = factory(ruleIdFromNumber(id));\n this._ruleId2desc[id] = result;\n return result;\n }\n getRule(ruleId) {\n return this._ruleId2desc[ruleIdToNumber(ruleId)];\n }\n getExternalGrammar(scopeName, repository) {\n if (this._includedGrammars[scopeName]) {\n return this._includedGrammars[scopeName];\n } else if (this._grammarRepository) {\n const rawIncludedGrammar = this._grammarRepository.lookup(scopeName);\n if (rawIncludedGrammar) {\n this._includedGrammars[scopeName] = initGrammar(\n rawIncludedGrammar,\n repository && repository.$base\n );\n return this._includedGrammars[scopeName];\n }\n }\n return void 0;\n }\n tokenizeLine(lineText, prevState, timeLimit = 0) {\n const r = this._tokenize(lineText, prevState, false, timeLimit);\n return {\n tokens: r.lineTokens.getResult(r.ruleStack, r.lineLength),\n ruleStack: r.ruleStack,\n stoppedEarly: r.stoppedEarly\n };\n }\n tokenizeLine2(lineText, prevState, timeLimit = 0) {\n const r = this._tokenize(lineText, prevState, true, timeLimit);\n return {\n tokens: r.lineTokens.getBinaryResult(r.ruleStack, r.lineLength),\n ruleStack: r.ruleStack,\n stoppedEarly: r.stoppedEarly\n };\n }\n _tokenize(lineText, prevState, emitBinaryTokens, timeLimit) {\n if (this._rootId === -1) {\n this._rootId = RuleFactory.getCompiledRuleId(\n this._grammar.repository.$self,\n this,\n this._grammar.repository\n );\n this.getInjections();\n }\n let isFirstLine;\n if (!prevState || prevState === StateStackImpl.NULL) {\n isFirstLine = true;\n const rawDefaultMetadata = this._basicScopeAttributesProvider.getDefaultAttributes();\n const defaultStyle = this.themeProvider.getDefaults();\n const defaultMetadata = EncodedTokenMetadata.set(\n 0,\n rawDefaultMetadata.languageId,\n rawDefaultMetadata.tokenType,\n null,\n defaultStyle.fontStyle,\n defaultStyle.foregroundId,\n defaultStyle.backgroundId\n );\n const rootScopeName = this.getRule(this._rootId).getName(\n null,\n null\n );\n let scopeList;\n if (rootScopeName) {\n scopeList = AttributedScopeStack.createRootAndLookUpScopeName(\n rootScopeName,\n defaultMetadata,\n this\n );\n } else {\n scopeList = AttributedScopeStack.createRoot(\n \"unknown\",\n defaultMetadata\n );\n }\n prevState = new StateStackImpl(\n null,\n this._rootId,\n -1,\n -1,\n false,\n null,\n scopeList,\n scopeList\n );\n } else {\n isFirstLine = false;\n prevState.reset();\n }\n lineText = lineText + \"\\n\";\n const onigLineText = this.createOnigString(lineText);\n const lineLength = onigLineText.content.length;\n const lineTokens = new LineTokens(\n emitBinaryTokens,\n lineText,\n this._tokenTypeMatchers,\n this.balancedBracketSelectors\n );\n const r = _tokenizeString(\n this,\n onigLineText,\n isFirstLine,\n 0,\n prevState,\n lineTokens,\n true,\n timeLimit\n );\n disposeOnigString(onigLineText);\n return {\n lineLength,\n lineTokens,\n ruleStack: r.stack,\n stoppedEarly: r.stoppedEarly\n };\n }\n};\nfunction initGrammar(grammar, base) {\n grammar = clone(grammar);\n grammar.repository = grammar.repository || {};\n grammar.repository.$self = {\n $vscodeTextmateLocation: grammar.$vscodeTextmateLocation,\n patterns: grammar.patterns,\n name: grammar.scopeName\n };\n grammar.repository.$base = base || grammar.repository.$self;\n return grammar;\n}\nvar AttributedScopeStack = class _AttributedScopeStack {\n /**\n * Invariant:\n * ```\n * if (parent && !scopePath.extends(parent.scopePath)) {\n * \tthrow new Error();\n * }\n * ```\n */\n constructor(parent, scopePath, tokenAttributes) {\n this.parent = parent;\n this.scopePath = scopePath;\n this.tokenAttributes = tokenAttributes;\n }\n static fromExtension(namesScopeList, contentNameScopesList) {\n let current = namesScopeList;\n let scopeNames = namesScopeList?.scopePath ?? null;\n for (const frame of contentNameScopesList) {\n scopeNames = ScopeStack.push(scopeNames, frame.scopeNames);\n current = new _AttributedScopeStack(current, scopeNames, frame.encodedTokenAttributes);\n }\n return current;\n }\n static createRoot(scopeName, tokenAttributes) {\n return new _AttributedScopeStack(null, new ScopeStack(null, scopeName), tokenAttributes);\n }\n static createRootAndLookUpScopeName(scopeName, tokenAttributes, grammar) {\n const rawRootMetadata = grammar.getMetadataForScope(scopeName);\n const scopePath = new ScopeStack(null, scopeName);\n const rootStyle = grammar.themeProvider.themeMatch(scopePath);\n const resolvedTokenAttributes = _AttributedScopeStack.mergeAttributes(\n tokenAttributes,\n rawRootMetadata,\n rootStyle\n );\n return new _AttributedScopeStack(null, scopePath, resolvedTokenAttributes);\n }\n get scopeName() {\n return this.scopePath.scopeName;\n }\n toString() {\n return this.getScopeNames().join(\" \");\n }\n equals(other) {\n return _AttributedScopeStack.equals(this, other);\n }\n static equals(a, b) {\n do {\n if (a === b) {\n return true;\n }\n if (!a && !b) {\n return true;\n }\n if (!a || !b) {\n return false;\n }\n if (a.scopeName !== b.scopeName || a.tokenAttributes !== b.tokenAttributes) {\n return false;\n }\n a = a.parent;\n b = b.parent;\n } while (true);\n }\n static mergeAttributes(existingTokenAttributes, basicScopeAttributes, styleAttributes) {\n let fontStyle = -1 /* NotSet */;\n let foreground = 0;\n let background = 0;\n if (styleAttributes !== null) {\n fontStyle = styleAttributes.fontStyle;\n foreground = styleAttributes.foregroundId;\n background = styleAttributes.backgroundId;\n }\n return EncodedTokenMetadata.set(\n existingTokenAttributes,\n basicScopeAttributes.languageId,\n basicScopeAttributes.tokenType,\n null,\n fontStyle,\n foreground,\n background\n );\n }\n pushAttributed(scopePath, grammar) {\n if (scopePath === null) {\n return this;\n }\n if (scopePath.indexOf(\" \") === -1) {\n return _AttributedScopeStack._pushAttributed(this, scopePath, grammar);\n }\n const scopes = scopePath.split(/ /g);\n let result = this;\n for (const scope of scopes) {\n result = _AttributedScopeStack._pushAttributed(result, scope, grammar);\n }\n return result;\n }\n static _pushAttributed(target, scopeName, grammar) {\n const rawMetadata = grammar.getMetadataForScope(scopeName);\n const newPath = target.scopePath.push(scopeName);\n const scopeThemeMatchResult = grammar.themeProvider.themeMatch(newPath);\n const metadata = _AttributedScopeStack.mergeAttributes(\n target.tokenAttributes,\n rawMetadata,\n scopeThemeMatchResult\n );\n return new _AttributedScopeStack(target, newPath, metadata);\n }\n getScopeNames() {\n return this.scopePath.getSegments();\n }\n getExtensionIfDefined(base) {\n const result = [];\n let self = this;\n while (self && self !== base) {\n result.push({\n encodedTokenAttributes: self.tokenAttributes,\n scopeNames: self.scopePath.getExtensionIfDefined(self.parent?.scopePath ?? null)\n });\n self = self.parent;\n }\n return self === base ? result.reverse() : void 0;\n }\n};\nvar StateStackImpl = class _StateStackImpl {\n /**\n * Invariant:\n * ```\n * if (contentNameScopesList !== nameScopesList && contentNameScopesList?.parent !== nameScopesList) {\n * \tthrow new Error();\n * }\n * if (this.parent && !nameScopesList.extends(this.parent.contentNameScopesList)) {\n * \tthrow new Error();\n * }\n * ```\n */\n constructor(parent, ruleId, enterPos, anchorPos, beginRuleCapturedEOL, endRule, nameScopesList, contentNameScopesList) {\n this.parent = parent;\n this.ruleId = ruleId;\n this.beginRuleCapturedEOL = beginRuleCapturedEOL;\n this.endRule = endRule;\n this.nameScopesList = nameScopesList;\n this.contentNameScopesList = contentNameScopesList;\n this.depth = this.parent ? this.parent.depth + 1 : 1;\n this._enterPos = enterPos;\n this._anchorPos = anchorPos;\n }\n _stackElementBrand = void 0;\n // TODO remove me\n static NULL = new _StateStackImpl(\n null,\n 0,\n 0,\n 0,\n false,\n null,\n null,\n null\n );\n /**\n * The position on the current line where this state was pushed.\n * This is relevant only while tokenizing a line, to detect endless loops.\n * Its value is meaningless across lines.\n */\n _enterPos;\n /**\n * The captured anchor position when this stack element was pushed.\n * This is relevant only while tokenizing a line, to restore the anchor position when popping.\n * Its value is meaningless across lines.\n */\n _anchorPos;\n /**\n * The depth of the stack.\n */\n depth;\n equals(other) {\n if (other === null) {\n return false;\n }\n return _StateStackImpl._equals(this, other);\n }\n static _equals(a, b) {\n if (a === b) {\n return true;\n }\n if (!this._structuralEquals(a, b)) {\n return false;\n }\n return AttributedScopeStack.equals(a.contentNameScopesList, b.contentNameScopesList);\n }\n /**\n * A structural equals check. Does not take into account `scopes`.\n */\n static _structuralEquals(a, b) {\n do {\n if (a === b) {\n return true;\n }\n if (!a && !b) {\n return true;\n }\n if (!a || !b) {\n return false;\n }\n if (a.depth !== b.depth || a.ruleId !== b.ruleId || a.endRule !== b.endRule) {\n return false;\n }\n a = a.parent;\n b = b.parent;\n } while (true);\n }\n clone() {\n return this;\n }\n static _reset(el) {\n while (el) {\n el._enterPos = -1;\n el._anchorPos = -1;\n el = el.parent;\n }\n }\n reset() {\n _StateStackImpl._reset(this);\n }\n pop() {\n return this.parent;\n }\n safePop() {\n if (this.parent) {\n return this.parent;\n }\n return this;\n }\n push(ruleId, enterPos, anchorPos, beginRuleCapturedEOL, endRule, nameScopesList, contentNameScopesList) {\n return new _StateStackImpl(\n this,\n ruleId,\n enterPos,\n anchorPos,\n beginRuleCapturedEOL,\n endRule,\n nameScopesList,\n contentNameScopesList\n );\n }\n getEnterPos() {\n return this._enterPos;\n }\n getAnchorPos() {\n return this._anchorPos;\n }\n getRule(grammar) {\n return grammar.getRule(this.ruleId);\n }\n toString() {\n const r = [];\n this._writeString(r, 0);\n return \"[\" + r.join(\",\") + \"]\";\n }\n _writeString(res, outIndex) {\n if (this.parent) {\n outIndex = this.parent._writeString(res, outIndex);\n }\n res[outIndex++] = `(${this.ruleId}, ${this.nameScopesList?.toString()}, ${this.contentNameScopesList?.toString()})`;\n return outIndex;\n }\n withContentNameScopesList(contentNameScopeStack) {\n if (this.contentNameScopesList === contentNameScopeStack) {\n return this;\n }\n return this.parent.push(\n this.ruleId,\n this._enterPos,\n this._anchorPos,\n this.beginRuleCapturedEOL,\n this.endRule,\n this.nameScopesList,\n contentNameScopeStack\n );\n }\n withEndRule(endRule) {\n if (this.endRule === endRule) {\n return this;\n }\n return new _StateStackImpl(\n this.parent,\n this.ruleId,\n this._enterPos,\n this._anchorPos,\n this.beginRuleCapturedEOL,\n endRule,\n this.nameScopesList,\n this.contentNameScopesList\n );\n }\n // Used to warn of endless loops\n hasSameRuleAs(other) {\n let el = this;\n while (el && el._enterPos === other._enterPos) {\n if (el.ruleId === other.ruleId) {\n return true;\n }\n el = el.parent;\n }\n return false;\n }\n toStateStackFrame() {\n return {\n ruleId: ruleIdToNumber(this.ruleId),\n beginRuleCapturedEOL: this.beginRuleCapturedEOL,\n endRule: this.endRule,\n nameScopesList: this.nameScopesList?.getExtensionIfDefined(this.parent?.nameScopesList ?? null) ?? [],\n contentNameScopesList: this.contentNameScopesList?.getExtensionIfDefined(this.nameScopesList) ?? []\n };\n }\n static pushFrame(self, frame) {\n const namesScopeList = AttributedScopeStack.fromExtension(self?.nameScopesList ?? null, frame.nameScopesList);\n return new _StateStackImpl(\n self,\n ruleIdFromNumber(frame.ruleId),\n frame.enterPos ?? -1,\n frame.anchorPos ?? -1,\n frame.beginRuleCapturedEOL,\n frame.endRule,\n namesScopeList,\n AttributedScopeStack.fromExtension(namesScopeList, frame.contentNameScopesList)\n );\n }\n};\nvar BalancedBracketSelectors = class {\n balancedBracketScopes;\n unbalancedBracketScopes;\n allowAny = false;\n constructor(balancedBracketScopes, unbalancedBracketScopes) {\n this.balancedBracketScopes = balancedBracketScopes.flatMap(\n (selector) => {\n if (selector === \"*\") {\n this.allowAny = true;\n return [];\n }\n return createMatchers(selector, nameMatcher).map((m) => m.matcher);\n }\n );\n this.unbalancedBracketScopes = unbalancedBracketScopes.flatMap(\n (selector) => createMatchers(selector, nameMatcher).map((m) => m.matcher)\n );\n }\n get matchesAlways() {\n return this.allowAny && this.unbalancedBracketScopes.length === 0;\n }\n get matchesNever() {\n return this.balancedBracketScopes.length === 0 && !this.allowAny;\n }\n match(scopes) {\n for (const excluder of this.unbalancedBracketScopes) {\n if (excluder(scopes)) {\n return false;\n }\n }\n for (const includer of this.balancedBracketScopes) {\n if (includer(scopes)) {\n return true;\n }\n }\n return this.allowAny;\n }\n};\nvar LineTokens = class {\n constructor(emitBinaryTokens, lineText, tokenTypeOverrides, balancedBracketSelectors) {\n this.balancedBracketSelectors = balancedBracketSelectors;\n this._emitBinaryTokens = emitBinaryTokens;\n this._tokenTypeOverrides = tokenTypeOverrides;\n if (false) {\n this._lineText = lineText;\n } else {\n this._lineText = null;\n }\n this._tokens = [];\n this._binaryTokens = [];\n this._lastTokenEndIndex = 0;\n }\n _emitBinaryTokens;\n /**\n * defined only if `false`.\n */\n _lineText;\n /**\n * used only if `_emitBinaryTokens` is false.\n */\n _tokens;\n /**\n * used only if `_emitBinaryTokens` is true.\n */\n _binaryTokens;\n _lastTokenEndIndex;\n _tokenTypeOverrides;\n produce(stack, endIndex) {\n this.produceFromScopes(stack.contentNameScopesList, endIndex);\n }\n produceFromScopes(scopesList, endIndex) {\n if (this._lastTokenEndIndex >= endIndex) {\n return;\n }\n if (this._emitBinaryTokens) {\n let metadata = scopesList?.tokenAttributes ?? 0;\n let containsBalancedBrackets = false;\n if (this.balancedBracketSelectors?.matchesAlways) {\n containsBalancedBrackets = true;\n }\n if (this._tokenTypeOverrides.length > 0 || this.balancedBracketSelectors && !this.balancedBracketSelectors.matchesAlways && !this.balancedBracketSelectors.matchesNever) {\n const scopes2 = scopesList?.getScopeNames() ?? [];\n for (const tokenType of this._tokenTypeOverrides) {\n if (tokenType.matcher(scopes2)) {\n metadata = EncodedTokenMetadata.set(\n metadata,\n 0,\n toOptionalTokenType(tokenType.type),\n null,\n -1 /* NotSet */,\n 0,\n 0\n );\n }\n }\n if (this.balancedBracketSelectors) {\n containsBalancedBrackets = this.balancedBracketSelectors.match(scopes2);\n }\n }\n if (containsBalancedBrackets) {\n metadata = EncodedTokenMetadata.set(\n metadata,\n 0,\n 8 /* NotSet */,\n containsBalancedBrackets,\n -1 /* NotSet */,\n 0,\n 0\n );\n }\n if (this._binaryTokens.length > 0 && this._binaryTokens[this._binaryTokens.length - 1] === metadata) {\n this._lastTokenEndIndex = endIndex;\n return;\n }\n this._binaryTokens.push(this._lastTokenEndIndex);\n this._binaryTokens.push(metadata);\n this._lastTokenEndIndex = endIndex;\n return;\n }\n const scopes = scopesList?.getScopeNames() ?? [];\n this._tokens.push({\n startIndex: this._lastTokenEndIndex,\n endIndex,\n // value: lineText.substring(lastTokenEndIndex, endIndex),\n scopes\n });\n this._lastTokenEndIndex = endIndex;\n }\n getResult(stack, lineLength) {\n if (this._tokens.length > 0 && this._tokens[this._tokens.length - 1].startIndex === lineLength - 1) {\n this._tokens.pop();\n }\n if (this._tokens.length === 0) {\n this._lastTokenEndIndex = -1;\n this.produce(stack, lineLength);\n this._tokens[this._tokens.length - 1].startIndex = 0;\n }\n return this._tokens;\n }\n getBinaryResult(stack, lineLength) {\n if (this._binaryTokens.length > 0 && this._binaryTokens[this._binaryTokens.length - 2] === lineLength - 1) {\n this._binaryTokens.pop();\n this._binaryTokens.pop();\n }\n if (this._binaryTokens.length === 0) {\n this._lastTokenEndIndex = -1;\n this.produce(stack, lineLength);\n this._binaryTokens[this._binaryTokens.length - 2] = 0;\n }\n const result = new Uint32Array(this._binaryTokens.length);\n for (let i = 0, len = this._binaryTokens.length; i < len; i++) {\n result[i] = this._binaryTokens[i];\n }\n return result;\n }\n};\n\n// src/registry.ts\nvar SyncRegistry = class {\n constructor(theme, _onigLib) {\n this._onigLib = _onigLib;\n this._theme = theme;\n }\n _grammars = /* @__PURE__ */ new Map();\n _rawGrammars = /* @__PURE__ */ new Map();\n _injectionGrammars = /* @__PURE__ */ new Map();\n _theme;\n dispose() {\n for (const grammar of this._grammars.values()) {\n grammar.dispose();\n }\n }\n setTheme(theme) {\n this._theme = theme;\n }\n getColorMap() {\n return this._theme.getColorMap();\n }\n /**\n * Add `grammar` to registry and return a list of referenced scope names\n */\n addGrammar(grammar, injectionScopeNames) {\n this._rawGrammars.set(grammar.scopeName, grammar);\n if (injectionScopeNames) {\n this._injectionGrammars.set(grammar.scopeName, injectionScopeNames);\n }\n }\n /**\n * Lookup a raw grammar.\n */\n lookup(scopeName) {\n return this._rawGrammars.get(scopeName);\n }\n /**\n * Returns the injections for the given grammar\n */\n injections(targetScope) {\n return this._injectionGrammars.get(targetScope);\n }\n /**\n * Get the default theme settings\n */\n getDefaults() {\n return this._theme.getDefaults();\n }\n /**\n * Match a scope in the theme.\n */\n themeMatch(scopePath) {\n return this._theme.match(scopePath);\n }\n /**\n * Lookup a grammar.\n */\n grammarForScopeName(scopeName, initialLanguage, embeddedLanguages, tokenTypes, balancedBracketSelectors) {\n if (!this._grammars.has(scopeName)) {\n let rawGrammar = this._rawGrammars.get(scopeName);\n if (!rawGrammar) {\n return null;\n }\n this._grammars.set(scopeName, createGrammar(\n scopeName,\n rawGrammar,\n initialLanguage,\n embeddedLanguages,\n tokenTypes,\n balancedBracketSelectors,\n this,\n this._onigLib\n ));\n }\n return this._grammars.get(scopeName);\n }\n};\n\n// src/index.ts\nvar Registry = class {\n _options;\n _syncRegistry;\n _ensureGrammarCache;\n constructor(options) {\n this._options = options;\n this._syncRegistry = new SyncRegistry(\n Theme.createFromRawTheme(options.theme, options.colorMap),\n options.onigLib\n );\n this._ensureGrammarCache = /* @__PURE__ */ new Map();\n }\n dispose() {\n this._syncRegistry.dispose();\n }\n /**\n * Change the theme. Once called, no previous `ruleStack` should be used anymore.\n */\n setTheme(theme, colorMap) {\n this._syncRegistry.setTheme(Theme.createFromRawTheme(theme, colorMap));\n }\n /**\n * Returns a lookup array for color ids.\n */\n getColorMap() {\n return this._syncRegistry.getColorMap();\n }\n /**\n * Load the grammar for `scopeName` and all referenced included grammars asynchronously.\n * Please do not use language id 0.\n */\n loadGrammarWithEmbeddedLanguages(initialScopeName, initialLanguage, embeddedLanguages) {\n return this.loadGrammarWithConfiguration(initialScopeName, initialLanguage, { embeddedLanguages });\n }\n /**\n * Load the grammar for `scopeName` and all referenced included grammars asynchronously.\n * Please do not use language id 0.\n */\n loadGrammarWithConfiguration(initialScopeName, initialLanguage, configuration) {\n return this._loadGrammar(\n initialScopeName,\n initialLanguage,\n configuration.embeddedLanguages,\n configuration.tokenTypes,\n new BalancedBracketSelectors(\n configuration.balancedBracketSelectors || [],\n configuration.unbalancedBracketSelectors || []\n )\n );\n }\n /**\n * Load the grammar for `scopeName` and all referenced included grammars asynchronously.\n */\n loadGrammar(initialScopeName) {\n return this._loadGrammar(initialScopeName, 0, null, null, null);\n }\n _loadGrammar(initialScopeName, initialLanguage, embeddedLanguages, tokenTypes, balancedBracketSelectors) {\n const dependencyProcessor = new ScopeDependencyProcessor(this._syncRegistry, initialScopeName);\n while (dependencyProcessor.Q.length > 0) {\n dependencyProcessor.Q.map((request) => this._loadSingleGrammar(request.scopeName));\n dependencyProcessor.processQueue();\n }\n return this._grammarForScopeName(\n initialScopeName,\n initialLanguage,\n embeddedLanguages,\n tokenTypes,\n balancedBracketSelectors\n );\n }\n _loadSingleGrammar(scopeName) {\n if (!this._ensureGrammarCache.has(scopeName)) {\n this._doLoadSingleGrammar(scopeName);\n this._ensureGrammarCache.set(scopeName, true);\n }\n }\n _doLoadSingleGrammar(scopeName) {\n const grammar = this._options.loadGrammar(scopeName);\n if (grammar) {\n const injections = typeof this._options.getInjections === \"function\" ? this._options.getInjections(scopeName) : void 0;\n this._syncRegistry.addGrammar(grammar, injections);\n }\n }\n /**\n * Adds a rawGrammar.\n */\n addGrammar(rawGrammar, injections = [], initialLanguage = 0, embeddedLanguages = null) {\n this._syncRegistry.addGrammar(rawGrammar, injections);\n return this._grammarForScopeName(rawGrammar.scopeName, initialLanguage, embeddedLanguages);\n }\n /**\n * Get the grammar for `scopeName`. The grammar must first be created via `loadGrammar` or `addGrammar`.\n */\n _grammarForScopeName(scopeName, initialLanguage = 0, embeddedLanguages = null, tokenTypes = null, balancedBracketSelectors = null) {\n return this._syncRegistry.grammarForScopeName(\n scopeName,\n initialLanguage,\n embeddedLanguages,\n tokenTypes,\n balancedBracketSelectors\n );\n }\n};\nvar INITIAL = StateStackImpl.NULL;\nexport {\n EncodedTokenMetadata,\n FindOption,\n FontStyle,\n INITIAL,\n Registry,\n Theme,\n disposeOnigString\n};\n","/**\n * @typedef CoreOptions\n * @property {ReadonlyArray<string>} [subset=[]]\n * Whether to only escape the given subset of characters.\n * @property {boolean} [escapeOnly=false]\n * Whether to only escape possibly dangerous characters.\n * Those characters are `\"`, `&`, `'`, `<`, `>`, and `` ` ``.\n *\n * @typedef FormatOptions\n * @property {(code: number, next: number, options: CoreWithFormatOptions) => string} format\n * Format strategy.\n *\n * @typedef {CoreOptions & FormatOptions & import('./util/format-smart.js').FormatSmartOptions} CoreWithFormatOptions\n */\n\nconst defaultSubsetRegex = /[\"&'<>`]/g\nconst surrogatePairsRegex = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g\nconst controlCharactersRegex =\n // eslint-disable-next-line no-control-regex, unicorn/no-hex-escape\n /[\\x01-\\t\\v\\f\\x0E-\\x1F\\x7F\\x81\\x8D\\x8F\\x90\\x9D\\xA0-\\uFFFF]/g\nconst regexEscapeRegex = /[|\\\\{}()[\\]^$+*?.]/g\n\n/** @type {WeakMap<ReadonlyArray<string>, RegExp>} */\nconst subsetToRegexCache = new WeakMap()\n\n/**\n * Encode certain characters in `value`.\n *\n * @param {string} value\n * @param {CoreWithFormatOptions} options\n * @returns {string}\n */\nexport function core(value, options) {\n value = value.replace(\n options.subset\n ? charactersToExpressionCached(options.subset)\n : defaultSubsetRegex,\n basic\n )\n\n if (options.subset || options.escapeOnly) {\n return value\n }\n\n return (\n value\n // Surrogate pairs.\n .replace(surrogatePairsRegex, surrogate)\n // BMP control characters (C0 except for LF, CR, SP; DEL; and some more\n // non-ASCII ones).\n .replace(controlCharactersRegex, basic)\n )\n\n /**\n * @param {string} pair\n * @param {number} index\n * @param {string} all\n */\n function surrogate(pair, index, all) {\n return options.format(\n (pair.charCodeAt(0) - 0xd800) * 0x400 +\n pair.charCodeAt(1) -\n 0xdc00 +\n 0x10000,\n all.charCodeAt(index + 2),\n options\n )\n }\n\n /**\n * @param {string} character\n * @param {number} index\n * @param {string} all\n */\n function basic(character, index, all) {\n return options.format(\n character.charCodeAt(0),\n all.charCodeAt(index + 1),\n options\n )\n }\n}\n\n/**\n * A wrapper function that caches the result of `charactersToExpression` with a WeakMap.\n * This can improve performance when tooling calls `charactersToExpression` repeatedly\n * with the same subset.\n *\n * @param {ReadonlyArray<string>} subset\n * @returns {RegExp}\n */\nfunction charactersToExpressionCached(subset) {\n let cached = subsetToRegexCache.get(subset)\n\n if (!cached) {\n cached = charactersToExpression(subset)\n subsetToRegexCache.set(subset, cached)\n }\n\n return cached\n}\n\n/**\n * @param {ReadonlyArray<string>} subset\n * @returns {RegExp}\n */\nfunction charactersToExpression(subset) {\n /** @type {Array<string>} */\n const groups = []\n let index = -1\n\n while (++index < subset.length) {\n groups.push(subset[index].replace(regexEscapeRegex, '\\\\$&'))\n }\n\n return new RegExp('(?:' + groups.join('|') + ')', 'g')\n}\n","const hexadecimalRegex = /[\\dA-Fa-f]/\n\n/**\n * Configurable ways to encode characters as hexadecimal references.\n *\n * @param {number} code\n * @param {number} next\n * @param {boolean|undefined} omit\n * @returns {string}\n */\nexport function toHexadecimal(code, next, omit) {\n const value = '&#x' + code.toString(16).toUpperCase()\n return omit && next && !hexadecimalRegex.test(String.fromCharCode(next))\n ? value\n : value + ';'\n}\n","const decimalRegex = /\\d/\n\n/**\n * Configurable ways to encode characters as decimal references.\n *\n * @param {number} code\n * @param {number} next\n * @param {boolean|undefined} omit\n * @returns {string}\n */\nexport function toDecimal(code, next, omit) {\n const value = '&#' + String(code)\n return omit && next && !decimalRegex.test(String.fromCharCode(next))\n ? value\n : value + ';'\n}\n","/**\n * List of legacy HTML named character references that don’t need a trailing semicolon.\n *\n * @type {Array<string>}\n */\nexport const characterEntitiesLegacy = [\n 'AElig',\n 'AMP',\n 'Aacute',\n 'Acirc',\n 'Agrave',\n 'Aring',\n 'Atilde',\n 'Auml',\n 'COPY',\n 'Ccedil',\n 'ETH',\n 'Eacute',\n 'Ecirc',\n 'Egrave',\n 'Euml',\n 'GT',\n 'Iacute',\n 'Icirc',\n 'Igrave',\n 'Iuml',\n 'LT',\n 'Ntilde',\n 'Oacute',\n 'Ocirc',\n 'Ograve',\n 'Oslash',\n 'Otilde',\n 'Ouml',\n 'QUOT',\n 'REG',\n 'THORN',\n 'Uacute',\n 'Ucirc',\n 'Ugrave',\n 'Uuml',\n 'Yacute',\n 'aacute',\n 'acirc',\n 'acute',\n 'aelig',\n 'agrave',\n 'amp',\n 'aring',\n 'atilde',\n 'auml',\n 'brvbar',\n 'ccedil',\n 'cedil',\n 'cent',\n 'copy',\n 'curren',\n 'deg',\n 'divide',\n 'eacute',\n 'ecirc',\n 'egrave',\n 'eth',\n 'euml',\n 'frac12',\n 'frac14',\n 'frac34',\n 'gt',\n 'iacute',\n 'icirc',\n 'iexcl',\n 'igrave',\n 'iquest',\n 'iuml',\n 'laquo',\n 'lt',\n 'macr',\n 'micro',\n 'middot',\n 'nbsp',\n 'not',\n 'ntilde',\n 'oacute',\n 'ocirc',\n 'ograve',\n 'ordf',\n 'ordm',\n 'oslash',\n 'otilde',\n 'ouml',\n 'para',\n 'plusmn',\n 'pound',\n 'quot',\n 'raquo',\n 'reg',\n 'sect',\n 'shy',\n 'sup1',\n 'sup2',\n 'sup3',\n 'szlig',\n 'thorn',\n 'times',\n 'uacute',\n 'ucirc',\n 'ugrave',\n 'uml',\n 'uuml',\n 'yacute',\n 'yen',\n 'yuml'\n]\n","/**\n * Map of named character references from HTML 4.\n *\n * @type {Record<string, string>}\n */\nexport const characterEntitiesHtml4 = {\n nbsp: ' ',\n iexcl: '¡',\n cent: '¢',\n pound: '£',\n curren: '¤',\n yen: '¥',\n brvbar: '¦',\n sect: '§',\n uml: '¨',\n copy: '©',\n ordf: 'ª',\n laquo: '«',\n not: '¬',\n shy: '­',\n reg: '®',\n macr: '¯',\n deg: '°',\n plusmn: '±',\n sup2: '²',\n sup3: '³',\n acute: '´',\n micro: 'µ',\n para: '¶',\n middot: '·',\n cedil: '¸',\n sup1: '¹',\n ordm: 'º',\n raquo: '»',\n frac14: '¼',\n frac12: '½',\n frac34: '¾',\n iquest: '¿',\n Agrave: 'À',\n Aacute: 'Á',\n Acirc: 'Â',\n Atilde: 'Ã',\n Auml: 'Ä',\n Aring: 'Å',\n AElig: 'Æ',\n Ccedil: 'Ç',\n Egrave: 'È',\n Eacute: 'É',\n Ecirc: 'Ê',\n Euml: 'Ë',\n Igrave: 'Ì',\n Iacute: 'Í',\n Icirc: 'Î',\n Iuml: 'Ï',\n ETH: 'Ð',\n Ntilde: 'Ñ',\n Ograve: 'Ò',\n Oacute: 'Ó',\n Ocirc: 'Ô',\n Otilde: 'Õ',\n Ouml: 'Ö',\n times: '×',\n Oslash: 'Ø',\n Ugrave: 'Ù',\n Uacute: 'Ú',\n Ucirc: 'Û',\n Uuml: 'Ü',\n Yacute: 'Ý',\n THORN: 'Þ',\n szlig: 'ß',\n agrave: 'à',\n aacute: 'á',\n acirc: 'â',\n atilde: 'ã',\n auml: 'ä',\n aring: 'å',\n aelig: 'æ',\n ccedil: 'ç',\n egrave: 'è',\n eacute: 'é',\n ecirc: 'ê',\n euml: 'ë',\n igrave: 'ì',\n iacute: 'í',\n icirc: 'î',\n iuml: 'ï',\n eth: 'ð',\n ntilde: 'ñ',\n ograve: 'ò',\n oacute: 'ó',\n ocirc: 'ô',\n otilde: 'õ',\n ouml: 'ö',\n divide: '÷',\n oslash: 'ø',\n ugrave: 'ù',\n uacute: 'ú',\n ucirc: 'û',\n uuml: 'ü',\n yacute: 'ý',\n thorn: 'þ',\n yuml: 'ÿ',\n fnof: 'ƒ',\n Alpha: 'Α',\n Beta: 'Β',\n Gamma: 'Γ',\n Delta: 'Δ',\n Epsilon: 'Ε',\n Zeta: 'Ζ',\n Eta: 'Η',\n Theta: 'Θ',\n Iota: 'Ι',\n Kappa: 'Κ',\n Lambda: 'Λ',\n Mu: 'Μ',\n Nu: 'Ν',\n Xi: 'Ξ',\n Omicron: 'Ο',\n Pi: 'Π',\n Rho: 'Ρ',\n Sigma: 'Σ',\n Tau: 'Τ',\n Upsilon: 'Υ',\n Phi: 'Φ',\n Chi: 'Χ',\n Psi: 'Ψ',\n Omega: 'Ω',\n alpha: 'α',\n beta: 'β',\n gamma: 'γ',\n delta: 'δ',\n epsilon: 'ε',\n zeta: 'ζ',\n eta: 'η',\n theta: 'θ',\n iota: 'ι',\n kappa: 'κ',\n lambda: 'λ',\n mu: 'μ',\n nu: 'ν',\n xi: 'ξ',\n omicron: 'ο',\n pi: 'π',\n rho: 'ρ',\n sigmaf: 'ς',\n sigma: 'σ',\n tau: 'τ',\n upsilon: 'υ',\n phi: 'φ',\n chi: 'χ',\n psi: 'ψ',\n omega: 'ω',\n thetasym: 'ϑ',\n upsih: 'ϒ',\n piv: 'ϖ',\n bull: '•',\n hellip: '…',\n prime: '′',\n Prime: '″',\n oline: '‾',\n frasl: '⁄',\n weierp: '℘',\n image: 'ℑ',\n real: 'ℜ',\n trade: '™',\n alefsym: 'ℵ',\n larr: '←',\n uarr: '↑',\n rarr: '→',\n darr: '↓',\n harr: '↔',\n crarr: '↵',\n lArr: '⇐',\n uArr: '⇑',\n rArr: '⇒',\n dArr: '⇓',\n hArr: '⇔',\n forall: '∀',\n part: '∂',\n exist: '∃',\n empty: '∅',\n nabla: '∇',\n isin: '∈',\n notin: '∉',\n ni: '∋',\n prod: '∏',\n sum: '∑',\n minus: '−',\n lowast: '∗',\n radic: '√',\n prop: '∝',\n infin: '∞',\n ang: '∠',\n and: '∧',\n or: '∨',\n cap: '∩',\n cup: '∪',\n int: '∫',\n there4: '∴',\n sim: '∼',\n cong: '≅',\n asymp: '≈',\n ne: '≠',\n equiv: '≡',\n le: '≤',\n ge: '≥',\n sub: '⊂',\n sup: '⊃',\n nsub: '⊄',\n sube: '⊆',\n supe: '⊇',\n oplus: '⊕',\n otimes: '⊗',\n perp: '⊥',\n sdot: '⋅',\n lceil: '⌈',\n rceil: '⌉',\n lfloor: '⌊',\n rfloor: '⌋',\n lang: '〈',\n rang: '〉',\n loz: '◊',\n spades: '♠',\n clubs: '♣',\n hearts: '♥',\n diams: '♦',\n quot: '\"',\n amp: '&',\n lt: '<',\n gt: '>',\n OElig: 'Œ',\n oelig: 'œ',\n Scaron: 'Š',\n scaron: 'š',\n Yuml: 'Ÿ',\n circ: 'ˆ',\n tilde: '˜',\n ensp: ' ',\n emsp: ' ',\n thinsp: ' ',\n zwnj: '‌',\n zwj: '‍',\n lrm: '‎',\n rlm: '‏',\n ndash: '–',\n mdash: '—',\n lsquo: '‘',\n rsquo: '’',\n sbquo: '‚',\n ldquo: '“',\n rdquo: '”',\n bdquo: '„',\n dagger: '†',\n Dagger: '‡',\n permil: '‰',\n lsaquo: '‹',\n rsaquo: '›',\n euro: '€'\n}\n","/**\n * List of legacy (that don’t need a trailing `;`) named references which could,\n * depending on what follows them, turn into a different meaning\n *\n * @type {Array<string>}\n */\nexport const dangerous = [\n 'cent',\n 'copy',\n 'divide',\n 'gt',\n 'lt',\n 'not',\n 'para',\n 'times'\n]\n","import {characterEntitiesLegacy} from 'character-entities-legacy'\nimport {characterEntitiesHtml4} from 'character-entities-html4'\nimport {dangerous} from '../constant/dangerous.js'\n\nconst own = {}.hasOwnProperty\n\n/**\n * `characterEntitiesHtml4` but inverted.\n *\n * @type {Record<string, string>}\n */\nconst characters = {}\n\n/** @type {string} */\nlet key\n\nfor (key in characterEntitiesHtml4) {\n if (own.call(characterEntitiesHtml4, key)) {\n characters[characterEntitiesHtml4[key]] = key\n }\n}\n\nconst notAlphanumericRegex = /[^\\dA-Za-z]/\n\n/**\n * Configurable ways to encode characters as named references.\n *\n * @param {number} code\n * @param {number} next\n * @param {boolean|undefined} omit\n * @param {boolean|undefined} attribute\n * @returns {string}\n */\nexport function toNamed(code, next, omit, attribute) {\n const character = String.fromCharCode(code)\n\n if (own.call(characters, character)) {\n const name = characters[character]\n const value = '&' + name\n\n if (\n omit &&\n characterEntitiesLegacy.includes(name) &&\n !dangerous.includes(name) &&\n (!attribute ||\n (next &&\n next !== 61 /* `=` */ &&\n notAlphanumericRegex.test(String.fromCharCode(next))))\n ) {\n return value\n }\n\n return value + ';'\n }\n\n return ''\n}\n","/**\n * @typedef FormatSmartOptions\n * @property {boolean} [useNamedReferences=false]\n * Prefer named character references (`&amp;`) where possible.\n * @property {boolean} [useShortestReferences=false]\n * Prefer the shortest possible reference, if that results in less bytes.\n * **Note**: `useNamedReferences` can be omitted when using `useShortestReferences`.\n * @property {boolean} [omitOptionalSemicolons=false]\n * Whether to omit semicolons when possible.\n * **Note**: This creates what HTML calls “parse errors” but is otherwise still valid HTML — don’t use this except when building a minifier.\n * Omitting semicolons is possible for certain named and numeric references in some cases.\n * @property {boolean} [attribute=false]\n * Create character references which don’t fail in attributes.\n * **Note**: `attribute` only applies when operating dangerously with\n * `omitOptionalSemicolons: true`.\n */\n\nimport {toHexadecimal} from './to-hexadecimal.js'\nimport {toDecimal} from './to-decimal.js'\nimport {toNamed} from './to-named.js'\n\n/**\n * Configurable ways to encode a character yielding pretty or small results.\n *\n * @param {number} code\n * @param {number} next\n * @param {FormatSmartOptions} options\n * @returns {string}\n */\nexport function formatSmart(code, next, options) {\n let numeric = toHexadecimal(code, next, options.omitOptionalSemicolons)\n /** @type {string|undefined} */\n let named\n\n if (options.useNamedReferences || options.useShortestReferences) {\n named = toNamed(\n code,\n next,\n options.omitOptionalSemicolons,\n options.attribute\n )\n }\n\n // Use the shortest numeric reference when requested.\n // A simple algorithm would use decimal for all code points under 100, as\n // those are shorter than hexadecimal:\n //\n // * `&#99;` vs `&#x63;` (decimal shorter)\n // * `&#100;` vs `&#x64;` (equal)\n //\n // However, because we take `next` into consideration when `omit` is used,\n // And it would be possible that decimals are shorter on bigger values as\n // well if `next` is hexadecimal but not decimal, we instead compare both.\n if (\n (options.useShortestReferences || !named) &&\n options.useShortestReferences\n ) {\n const decimal = toDecimal(code, next, options.omitOptionalSemicolons)\n\n if (decimal.length < numeric.length) {\n numeric = decimal\n }\n }\n\n return named &&\n (!options.useShortestReferences || named.length < numeric.length)\n ? named\n : numeric\n}\n","/**\n * @typedef {import('./core.js').CoreOptions & import('./util/format-smart.js').FormatSmartOptions} Options\n * @typedef {import('./core.js').CoreOptions} LightOptions\n */\n\nimport {core} from './core.js'\nimport {formatSmart} from './util/format-smart.js'\nimport {formatBasic} from './util/format-basic.js'\n\n/**\n * Encode special characters in `value`.\n *\n * @param {string} value\n * Value to encode.\n * @param {Options} [options]\n * Configuration.\n * @returns {string}\n * Encoded value.\n */\nexport function stringifyEntities(value, options) {\n return core(value, Object.assign({format: formatSmart}, options))\n}\n\n/**\n * Encode special characters in `value` as hexadecimals.\n *\n * @param {string} value\n * Value to encode.\n * @param {LightOptions} [options]\n * Configuration.\n * @returns {string}\n * Encoded value.\n */\nexport function stringifyEntitiesLight(value, options) {\n return core(value, Object.assign({format: formatBasic}, options))\n}\n","/**\n * @import {Comment, Parents} from 'hast'\n * @import {State} from '../index.js'\n */\n\nimport {stringifyEntities} from 'stringify-entities'\n\nconst htmlCommentRegex = /^>|^->|<!--|-->|--!>|<!-$/g\n\n// Declare arrays as variables so it can be cached by `stringifyEntities`\nconst bogusCommentEntitySubset = ['>']\nconst commentEntitySubset = ['<', '>']\n\n/**\n * Serialize a comment.\n *\n * @param {Comment} node\n * Node to handle.\n * @param {number | undefined} _1\n * Index of `node` in `parent.\n * @param {Parents | undefined} _2\n * Parent of `node`.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {string}\n * Serialized node.\n */\nexport function comment(node, _1, _2, state) {\n // See: <https://html.spec.whatwg.org/multipage/syntax.html#comments>\n return state.settings.bogusComments\n ? '<?' +\n stringifyEntities(\n node.value,\n Object.assign({}, state.settings.characterReferences, {\n subset: bogusCommentEntitySubset\n })\n ) +\n '>'\n : '<!--' + node.value.replace(htmlCommentRegex, encode) + '-->'\n\n /**\n * @param {string} $0\n */\n function encode($0) {\n return stringifyEntities(\n $0,\n Object.assign({}, state.settings.characterReferences, {\n subset: commentEntitySubset\n })\n )\n }\n}\n","/**\n * @import {Doctype, Parents} from 'hast'\n * @import {State} from '../index.js'\n */\n\n/**\n * Serialize a doctype.\n *\n * @param {Doctype} _1\n * Node to handle.\n * @param {number | undefined} _2\n * Index of `node` in `parent.\n * @param {Parents | undefined} _3\n * Parent of `node`.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {string}\n * Serialized node.\n */\nexport function doctype(_1, _2, _3, state) {\n return (\n '<!' +\n (state.settings.upperDoctype ? 'DOCTYPE' : 'doctype') +\n (state.settings.tightDoctype ? '' : ' ') +\n 'html>'\n )\n}\n","/**\n * @import {Parents, RootContent} from 'hast'\n */\n\nimport {whitespace} from 'hast-util-whitespace'\n\nexport const siblingAfter = siblings(1)\nexport const siblingBefore = siblings(-1)\n\n/** @type {Array<RootContent>} */\nconst emptyChildren = []\n\n/**\n * Factory to check siblings in a direction.\n *\n * @param {number} increment\n */\nfunction siblings(increment) {\n return sibling\n\n /**\n * Find applicable siblings in a direction.\n *\n * @template {Parents} Parent\n * Parent type.\n * @param {Parent | undefined} parent\n * Parent.\n * @param {number | undefined} index\n * Index of child in `parent`.\n * @param {boolean | undefined} [includeWhitespace=false]\n * Whether to include whitespace (default: `false`).\n * @returns {Parent extends {children: Array<infer Child>} ? Child | undefined : never}\n * Child of parent.\n */\n function sibling(parent, index, includeWhitespace) {\n const siblings = parent ? parent.children : emptyChildren\n let offset = (index || 0) + increment\n let next = siblings[offset]\n\n if (!includeWhitespace) {\n while (next && whitespace(next)) {\n offset += increment\n next = siblings[offset]\n }\n }\n\n // @ts-expect-error: it’s a correct child.\n return next\n }\n}\n","/**\n * @import {Element, Parents} from 'hast'\n */\n\n/**\n * @callback OmitHandle\n * Check if a tag can be omitted.\n * @param {Element} element\n * Element to check.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether to omit a tag.\n *\n */\n\nconst own = {}.hasOwnProperty\n\n/**\n * Factory to check if a given node can have a tag omitted.\n *\n * @param {Record<string, OmitHandle>} handlers\n * Omission handlers, where each key is a tag name, and each value is the\n * corresponding handler.\n * @returns {OmitHandle}\n * Whether to omit a tag of an element.\n */\nexport function omission(handlers) {\n return omit\n\n /**\n * Check if a given node can have a tag omitted.\n *\n * @type {OmitHandle}\n */\n function omit(node, index, parent) {\n return (\n own.call(handlers, node.tagName) &&\n handlers[node.tagName](node, index, parent)\n )\n }\n}\n","/**\n * @import {Element, Parents} from 'hast'\n */\n\nimport {whitespace} from 'hast-util-whitespace'\nimport {siblingAfter} from './util/siblings.js'\nimport {omission} from './omission.js'\n\nexport const closing = omission({\n body,\n caption: headOrColgroupOrCaption,\n colgroup: headOrColgroupOrCaption,\n dd,\n dt,\n head: headOrColgroupOrCaption,\n html,\n li,\n optgroup,\n option,\n p,\n rp: rubyElement,\n rt: rubyElement,\n tbody,\n td: cells,\n tfoot,\n th: cells,\n thead,\n tr\n})\n\n/**\n * Macro for `</head>`, `</colgroup>`, and `</caption>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction headOrColgroupOrCaption(_, index, parent) {\n const next = siblingAfter(parent, index, true)\n return (\n !next ||\n (next.type !== 'comment' &&\n !(next.type === 'text' && whitespace(next.value.charAt(0))))\n )\n}\n\n/**\n * Whether to omit `</html>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction html(_, index, parent) {\n const next = siblingAfter(parent, index)\n return !next || next.type !== 'comment'\n}\n\n/**\n * Whether to omit `</body>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction body(_, index, parent) {\n const next = siblingAfter(parent, index)\n return !next || next.type !== 'comment'\n}\n\n/**\n * Whether to omit `</p>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction p(_, index, parent) {\n const next = siblingAfter(parent, index)\n return next\n ? next.type === 'element' &&\n (next.tagName === 'address' ||\n next.tagName === 'article' ||\n next.tagName === 'aside' ||\n next.tagName === 'blockquote' ||\n next.tagName === 'details' ||\n next.tagName === 'div' ||\n next.tagName === 'dl' ||\n next.tagName === 'fieldset' ||\n next.tagName === 'figcaption' ||\n next.tagName === 'figure' ||\n next.tagName === 'footer' ||\n next.tagName === 'form' ||\n next.tagName === 'h1' ||\n next.tagName === 'h2' ||\n next.tagName === 'h3' ||\n next.tagName === 'h4' ||\n next.tagName === 'h5' ||\n next.tagName === 'h6' ||\n next.tagName === 'header' ||\n next.tagName === 'hgroup' ||\n next.tagName === 'hr' ||\n next.tagName === 'main' ||\n next.tagName === 'menu' ||\n next.tagName === 'nav' ||\n next.tagName === 'ol' ||\n next.tagName === 'p' ||\n next.tagName === 'pre' ||\n next.tagName === 'section' ||\n next.tagName === 'table' ||\n next.tagName === 'ul')\n : !parent ||\n // Confusing parent.\n !(\n parent.type === 'element' &&\n (parent.tagName === 'a' ||\n parent.tagName === 'audio' ||\n parent.tagName === 'del' ||\n parent.tagName === 'ins' ||\n parent.tagName === 'map' ||\n parent.tagName === 'noscript' ||\n parent.tagName === 'video')\n )\n}\n\n/**\n * Whether to omit `</li>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction li(_, index, parent) {\n const next = siblingAfter(parent, index)\n return !next || (next.type === 'element' && next.tagName === 'li')\n}\n\n/**\n * Whether to omit `</dt>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction dt(_, index, parent) {\n const next = siblingAfter(parent, index)\n return Boolean(\n next &&\n next.type === 'element' &&\n (next.tagName === 'dt' || next.tagName === 'dd')\n )\n}\n\n/**\n * Whether to omit `</dd>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction dd(_, index, parent) {\n const next = siblingAfter(parent, index)\n return (\n !next ||\n (next.type === 'element' &&\n (next.tagName === 'dt' || next.tagName === 'dd'))\n )\n}\n\n/**\n * Whether to omit `</rt>` or `</rp>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction rubyElement(_, index, parent) {\n const next = siblingAfter(parent, index)\n return (\n !next ||\n (next.type === 'element' &&\n (next.tagName === 'rp' || next.tagName === 'rt'))\n )\n}\n\n/**\n * Whether to omit `</optgroup>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction optgroup(_, index, parent) {\n const next = siblingAfter(parent, index)\n return !next || (next.type === 'element' && next.tagName === 'optgroup')\n}\n\n/**\n * Whether to omit `</option>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction option(_, index, parent) {\n const next = siblingAfter(parent, index)\n return (\n !next ||\n (next.type === 'element' &&\n (next.tagName === 'option' || next.tagName === 'optgroup'))\n )\n}\n\n/**\n * Whether to omit `</thead>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction thead(_, index, parent) {\n const next = siblingAfter(parent, index)\n return Boolean(\n next &&\n next.type === 'element' &&\n (next.tagName === 'tbody' || next.tagName === 'tfoot')\n )\n}\n\n/**\n * Whether to omit `</tbody>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction tbody(_, index, parent) {\n const next = siblingAfter(parent, index)\n return (\n !next ||\n (next.type === 'element' &&\n (next.tagName === 'tbody' || next.tagName === 'tfoot'))\n )\n}\n\n/**\n * Whether to omit `</tfoot>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction tfoot(_, index, parent) {\n return !siblingAfter(parent, index)\n}\n\n/**\n * Whether to omit `</tr>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction tr(_, index, parent) {\n const next = siblingAfter(parent, index)\n return !next || (next.type === 'element' && next.tagName === 'tr')\n}\n\n/**\n * Whether to omit `</td>` or `</th>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction cells(_, index, parent) {\n const next = siblingAfter(parent, index)\n return (\n !next ||\n (next.type === 'element' &&\n (next.tagName === 'td' || next.tagName === 'th'))\n )\n}\n","/**\n * @import {Element, Parents} from 'hast'\n */\n\nimport {whitespace} from 'hast-util-whitespace'\nimport {siblingAfter, siblingBefore} from './util/siblings.js'\nimport {closing} from './closing.js'\nimport {omission} from './omission.js'\n\nexport const opening = omission({\n body,\n colgroup,\n head,\n html,\n tbody\n})\n\n/**\n * Whether to omit `<html>`.\n *\n * @param {Element} node\n * Element.\n * @returns {boolean}\n * Whether the opening tag can be omitted.\n */\nfunction html(node) {\n const head = siblingAfter(node, -1)\n return !head || head.type !== 'comment'\n}\n\n/**\n * Whether to omit `<head>`.\n *\n * @param {Element} node\n * Element.\n * @returns {boolean}\n * Whether the opening tag can be omitted.\n */\nfunction head(node) {\n /** @type {Set<string>} */\n const seen = new Set()\n\n // Whether `srcdoc` or not,\n // make sure the content model at least doesn’t have too many `base`s/`title`s.\n for (const child of node.children) {\n if (\n child.type === 'element' &&\n (child.tagName === 'base' || child.tagName === 'title')\n ) {\n if (seen.has(child.tagName)) return false\n seen.add(child.tagName)\n }\n }\n\n // “May be omitted if the element is empty,\n // or if the first thing inside the head element is an element.”\n const child = node.children[0]\n return !child || child.type === 'element'\n}\n\n/**\n * Whether to omit `<body>`.\n *\n * @param {Element} node\n * Element.\n * @returns {boolean}\n * Whether the opening tag can be omitted.\n */\nfunction body(node) {\n const head = siblingAfter(node, -1, true)\n\n return (\n !head ||\n (head.type !== 'comment' &&\n !(head.type === 'text' && whitespace(head.value.charAt(0))) &&\n !(\n head.type === 'element' &&\n (head.tagName === 'meta' ||\n head.tagName === 'link' ||\n head.tagName === 'script' ||\n head.tagName === 'style' ||\n head.tagName === 'template')\n ))\n )\n}\n\n/**\n * Whether to omit `<colgroup>`.\n * The spec describes some logic for the opening tag, but it’s easier to\n * implement in the closing tag, to the same effect, so we handle it there\n * instead.\n *\n * @param {Element} node\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the opening tag can be omitted.\n */\nfunction colgroup(node, index, parent) {\n const previous = siblingBefore(parent, index)\n const head = siblingAfter(node, -1, true)\n\n // Previous colgroup was already omitted.\n if (\n parent &&\n previous &&\n previous.type === 'element' &&\n previous.tagName === 'colgroup' &&\n closing(previous, parent.children.indexOf(previous), parent)\n ) {\n return false\n }\n\n return Boolean(head && head.type === 'element' && head.tagName === 'col')\n}\n\n/**\n * Whether to omit `<tbody>`.\n *\n * @param {Element} node\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the opening tag can be omitted.\n */\nfunction tbody(node, index, parent) {\n const previous = siblingBefore(parent, index)\n const head = siblingAfter(node, -1)\n\n // Previous table section was already omitted.\n if (\n parent &&\n previous &&\n previous.type === 'element' &&\n (previous.tagName === 'thead' || previous.tagName === 'tbody') &&\n closing(previous, parent.children.indexOf(previous), parent)\n ) {\n return false\n }\n\n return Boolean(head && head.type === 'element' && head.tagName === 'tr')\n}\n","/**\n * @import {Element, Parents, Properties} from 'hast'\n * @import {State} from '../index.js'\n */\n\nimport {ccount} from 'ccount'\nimport {stringify as commas} from 'comma-separated-tokens'\nimport {find, svg} from 'property-information'\nimport {stringify as spaces} from 'space-separated-tokens'\nimport {stringifyEntities} from 'stringify-entities'\nimport {closing} from '../omission/closing.js'\nimport {opening} from '../omission/opening.js'\n\n/**\n * Maps of subsets.\n *\n * Each value is a matrix of tuples.\n * The value at `0` causes parse errors, the value at `1` is valid.\n * Of both, the value at `0` is unsafe, and the value at `1` is safe.\n *\n * @type {Record<'double' | 'name' | 'single' | 'unquoted', Array<[Array<string>, Array<string>]>>}\n */\nconst constants = {\n // See: <https://html.spec.whatwg.org/#attribute-name-state>.\n name: [\n ['\\t\\n\\f\\r &/=>'.split(''), '\\t\\n\\f\\r \"&\\'/=>`'.split('')],\n ['\\0\\t\\n\\f\\r \"&\\'/<=>'.split(''), '\\0\\t\\n\\f\\r \"&\\'/<=>`'.split('')]\n ],\n // See: <https://html.spec.whatwg.org/#attribute-value-(unquoted)-state>.\n unquoted: [\n ['\\t\\n\\f\\r &>'.split(''), '\\0\\t\\n\\f\\r \"&\\'<=>`'.split('')],\n ['\\0\\t\\n\\f\\r \"&\\'<=>`'.split(''), '\\0\\t\\n\\f\\r \"&\\'<=>`'.split('')]\n ],\n // See: <https://html.spec.whatwg.org/#attribute-value-(single-quoted)-state>.\n single: [\n [\"&'\".split(''), '\"&\\'`'.split('')],\n [\"\\0&'\".split(''), '\\0\"&\\'`'.split('')]\n ],\n // See: <https://html.spec.whatwg.org/#attribute-value-(double-quoted)-state>.\n double: [\n ['\"&'.split(''), '\"&\\'`'.split('')],\n ['\\0\"&'.split(''), '\\0\"&\\'`'.split('')]\n ]\n}\n\n/**\n * Serialize an element node.\n *\n * @param {Element} node\n * Node to handle.\n * @param {number | undefined} index\n * Index of `node` in `parent.\n * @param {Parents | undefined} parent\n * Parent of `node`.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {string}\n * Serialized node.\n */\nexport function element(node, index, parent, state) {\n const schema = state.schema\n const omit = schema.space === 'svg' ? false : state.settings.omitOptionalTags\n let selfClosing =\n schema.space === 'svg'\n ? state.settings.closeEmptyElements\n : state.settings.voids.includes(node.tagName.toLowerCase())\n /** @type {Array<string>} */\n const parts = []\n /** @type {string} */\n let last\n\n if (schema.space === 'html' && node.tagName === 'svg') {\n state.schema = svg\n }\n\n const attributes = serializeAttributes(state, node.properties)\n\n const content = state.all(\n schema.space === 'html' && node.tagName === 'template' ? node.content : node\n )\n\n state.schema = schema\n\n // If the node is categorised as void, but it has children, remove the\n // categorisation.\n // This enables for example `menuitem`s, which are void in W3C HTML but not\n // void in WHATWG HTML, to be stringified properly.\n // Note: `menuitem` has since been removed from the HTML spec, and so is no\n // longer void.\n if (content) selfClosing = false\n\n if (attributes || !omit || !opening(node, index, parent)) {\n parts.push('<', node.tagName, attributes ? ' ' + attributes : '')\n\n if (\n selfClosing &&\n (schema.space === 'svg' || state.settings.closeSelfClosing)\n ) {\n last = attributes.charAt(attributes.length - 1)\n if (\n !state.settings.tightSelfClosing ||\n last === '/' ||\n (last && last !== '\"' && last !== \"'\")\n ) {\n parts.push(' ')\n }\n\n parts.push('/')\n }\n\n parts.push('>')\n }\n\n parts.push(content)\n\n if (!selfClosing && (!omit || !closing(node, index, parent))) {\n parts.push('</' + node.tagName + '>')\n }\n\n return parts.join('')\n}\n\n/**\n * @param {State} state\n * @param {Properties | null | undefined} properties\n * @returns {string}\n */\nfunction serializeAttributes(state, properties) {\n /** @type {Array<string>} */\n const values = []\n let index = -1\n /** @type {string} */\n let key\n\n if (properties) {\n for (key in properties) {\n if (properties[key] !== null && properties[key] !== undefined) {\n const value = serializeAttribute(state, key, properties[key])\n if (value) values.push(value)\n }\n }\n }\n\n while (++index < values.length) {\n const last = state.settings.tightAttributes\n ? values[index].charAt(values[index].length - 1)\n : undefined\n\n // In tight mode, don’t add a space after quoted attributes.\n if (index !== values.length - 1 && last !== '\"' && last !== \"'\") {\n values[index] += ' '\n }\n }\n\n return values.join('')\n}\n\n/**\n * @param {State} state\n * @param {string} key\n * @param {Properties[keyof Properties]} value\n * @returns {string}\n */\nfunction serializeAttribute(state, key, value) {\n const info = find(state.schema, key)\n const x =\n state.settings.allowParseErrors && state.schema.space === 'html' ? 0 : 1\n const y = state.settings.allowDangerousCharacters ? 0 : 1\n let quote = state.quote\n /** @type {string | undefined} */\n let result\n\n if (info.overloadedBoolean && (value === info.attribute || value === '')) {\n value = true\n } else if (\n (info.boolean || info.overloadedBoolean) &&\n (typeof value !== 'string' || value === info.attribute || value === '')\n ) {\n value = Boolean(value)\n }\n\n if (\n value === null ||\n value === undefined ||\n value === false ||\n (typeof value === 'number' && Number.isNaN(value))\n ) {\n return ''\n }\n\n const name = stringifyEntities(\n info.attribute,\n Object.assign({}, state.settings.characterReferences, {\n // Always encode without parse errors in non-HTML.\n subset: constants.name[x][y]\n })\n )\n\n // No value.\n // There is currently only one boolean property in SVG: `[download]` on\n // `<a>`.\n // This property does not seem to work in browsers (Firefox, Safari, Chrome),\n // so I can’t test if dropping the value works.\n // But I assume that it should:\n //\n // ```html\n // <!doctype html>\n // <svg viewBox=\"0 0 100 100\">\n // <a href=https://example.com download>\n // <circle cx=50 cy=40 r=35 />\n // </a>\n // </svg>\n // ```\n //\n // See: <https://github.com/wooorm/property-information/blob/main/lib/svg.js>\n if (value === true) return name\n\n // `spaces` doesn’t accept a second argument, but it’s given here just to\n // keep the code cleaner.\n value = Array.isArray(value)\n ? (info.commaSeparated ? commas : spaces)(value, {\n padLeft: !state.settings.tightCommaSeparatedLists\n })\n : String(value)\n\n if (state.settings.collapseEmptyAttributes && !value) return name\n\n // Check unquoted value.\n if (state.settings.preferUnquoted) {\n result = stringifyEntities(\n value,\n Object.assign({}, state.settings.characterReferences, {\n attribute: true,\n subset: constants.unquoted[x][y]\n })\n )\n }\n\n // If we don’t want unquoted, or if `value` contains character references when\n // unquoted…\n if (result !== value) {\n // If the alternative is less common than `quote`, switch.\n if (\n state.settings.quoteSmart &&\n ccount(value, quote) > ccount(value, state.alternative)\n ) {\n quote = state.alternative\n }\n\n result =\n quote +\n stringifyEntities(\n value,\n Object.assign({}, state.settings.characterReferences, {\n // Always encode without parse errors in non-HTML.\n subset: (quote === \"'\" ? constants.single : constants.double)[x][y],\n attribute: true\n })\n ) +\n quote\n }\n\n // Don’t add a `=` for unquoted empties.\n return name + (result ? '=' + result : result)\n}\n","/**\n * @import {Parents, Text} from 'hast'\n * @import {Raw} from 'mdast-util-to-hast'\n * @import {State} from '../index.js'\n */\n\nimport {stringifyEntities} from 'stringify-entities'\n\n// Declare array as variable so it can be cached by `stringifyEntities`\nconst textEntitySubset = ['<', '&']\n\n/**\n * Serialize a text node.\n *\n * @param {Raw | Text} node\n * Node to handle.\n * @param {number | undefined} _\n * Index of `node` in `parent.\n * @param {Parents | undefined} parent\n * Parent of `node`.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {string}\n * Serialized node.\n */\nexport function text(node, _, parent, state) {\n // Check if content of `node` should be escaped.\n return parent &&\n parent.type === 'element' &&\n (parent.tagName === 'script' || parent.tagName === 'style')\n ? node.value\n : stringifyEntities(\n node.value,\n Object.assign({}, state.settings.characterReferences, {\n subset: textEntitySubset\n })\n )\n}\n","/**\n * @import {Parents} from 'hast'\n * @import {Raw} from 'mdast-util-to-hast'\n * @import {State} from '../index.js'\n */\n\nimport {text} from './text.js'\n\n/**\n * Serialize a raw node.\n *\n * @param {Raw} node\n * Node to handle.\n * @param {number | undefined} index\n * Index of `node` in `parent.\n * @param {Parents | undefined} parent\n * Parent of `node`.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {string}\n * Serialized node.\n */\nexport function raw(node, index, parent, state) {\n return state.settings.allowDangerousHtml\n ? node.value\n : text(node, index, parent, state)\n}\n","/**\n * @import {Parents, Root} from 'hast'\n * @import {State} from '../index.js'\n */\n\n/**\n * Serialize a root.\n *\n * @param {Root} node\n * Node to handle.\n * @param {number | undefined} _1\n * Index of `node` in `parent.\n * @param {Parents | undefined} _2\n * Parent of `node`.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {string}\n * Serialized node.\n */\nexport function root(node, _1, _2, state) {\n return state.all(node)\n}\n","/**\n * @import {Nodes, Parents} from 'hast'\n * @import {State} from '../index.js'\n */\n\nimport {zwitch} from 'zwitch'\nimport {comment} from './comment.js'\nimport {doctype} from './doctype.js'\nimport {element} from './element.js'\nimport {raw} from './raw.js'\nimport {root} from './root.js'\nimport {text} from './text.js'\n\n/**\n * @type {(node: Nodes, index: number | undefined, parent: Parents | undefined, state: State) => string}\n */\nexport const handle = zwitch('type', {\n invalid,\n unknown,\n handlers: {comment, doctype, element, raw, root, text}\n})\n\n/**\n * Fail when a non-node is found in the tree.\n *\n * @param {unknown} node\n * Unknown value.\n * @returns {never}\n * Never.\n */\nfunction invalid(node) {\n throw new Error('Expected node, not `' + node + '`')\n}\n\n/**\n * Fail when a node with an unknown type is found in the tree.\n *\n * @param {unknown} node_\n * Unknown node.\n * @returns {never}\n * Never.\n */\nfunction unknown(node_) {\n // `type` is guaranteed by runtime JS.\n const node = /** @type {Nodes} */ (node_)\n throw new Error('Cannot compile unknown node `' + node.type + '`')\n}\n","/**\n * @import {Nodes, Parents, RootContent} from 'hast'\n * @import {Schema} from 'property-information'\n * @import {Options as StringifyEntitiesOptions} from 'stringify-entities'\n */\n\n/**\n * @typedef {Omit<StringifyEntitiesOptions, 'attribute' | 'escapeOnly' | 'subset'>} CharacterReferences\n *\n * @typedef Options\n * Configuration.\n * @property {boolean | null | undefined} [allowDangerousCharacters=false]\n * Do not encode some characters which cause XSS vulnerabilities in older\n * browsers (default: `false`).\n *\n * > ⚠️ **Danger**: only set this if you completely trust the content.\n * @property {boolean | null | undefined} [allowDangerousHtml=false]\n * Allow `raw` nodes and insert them as raw HTML (default: `false`).\n *\n * When `false`, `Raw` nodes are encoded.\n *\n * > ⚠️ **Danger**: only set this if you completely trust the content.\n * @property {boolean | null | undefined} [allowParseErrors=false]\n * Do not encode characters which cause parse errors (even though they work),\n * to save bytes (default: `false`).\n *\n * Not used in the SVG space.\n *\n * > 👉 **Note**: intentionally creates parse errors in markup (how parse\n * > errors are handled is well defined, so this works but isn’t pretty).\n * @property {boolean | null | undefined} [bogusComments=false]\n * Use “bogus comments” instead of comments to save byes: `<?charlie>`\n * instead of `<!--charlie-->` (default: `false`).\n *\n * > 👉 **Note**: intentionally creates parse errors in markup (how parse\n * > errors are handled is well defined, so this works but isn’t pretty).\n * @property {CharacterReferences | null | undefined} [characterReferences]\n * Configure how to serialize character references (optional).\n * @property {boolean | null | undefined} [closeEmptyElements=false]\n * Close SVG elements without any content with slash (`/`) on the opening tag\n * instead of an end tag: `<circle />` instead of `<circle></circle>`\n * (default: `false`).\n *\n * See `tightSelfClosing` to control whether a space is used before the\n * slash.\n *\n * Not used in the HTML space.\n * @property {boolean | null | undefined} [closeSelfClosing=false]\n * Close self-closing nodes with an extra slash (`/`): `<img />` instead of\n * `<img>` (default: `false`).\n *\n * See `tightSelfClosing` to control whether a space is used before the\n * slash.\n *\n * Not used in the SVG space.\n * @property {boolean | null | undefined} [collapseEmptyAttributes=false]\n * Collapse empty attributes: get `class` instead of `class=\"\"` (default:\n * `false`).\n *\n * Not used in the SVG space.\n *\n * > 👉 **Note**: boolean attributes (such as `hidden`) are always collapsed.\n * @property {boolean | null | undefined} [omitOptionalTags=false]\n * Omit optional opening and closing tags (default: `false`).\n *\n * For example, in `<ol><li>one</li><li>two</li></ol>`, both `</li>` closing\n * tags can be omitted.\n * The first because it’s followed by another `li`, the last because it’s\n * followed by nothing.\n *\n * Not used in the SVG space.\n * @property {boolean | null | undefined} [preferUnquoted=false]\n * Leave attributes unquoted if that results in less bytes (default: `false`).\n *\n * Not used in the SVG space.\n * @property {boolean | null | undefined} [quoteSmart=false]\n * Use the other quote if that results in less bytes (default: `false`).\n * @property {Quote | null | undefined} [quote='\"']\n * Preferred quote to use (default: `'\"'`).\n * @property {Space | null | undefined} [space='html']\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 (default: `'html'`).\n *\n * > 👉 **Note**: hast is not XML.\n * > It supports SVG as embedded in HTML.\n * > It does not support the features available in XML.\n * > Passing SVG might break but fragments of modern SVG should be fine.\n * > Use [`xast`][xast] if you need to support SVG as XML.\n * @property {boolean | null | undefined} [tightAttributes=false]\n * Join attributes together, without whitespace, if possible: get\n * `class=\"a b\"title=\"c d\"` instead of `class=\"a b\" title=\"c d\"` to save\n * bytes (default: `false`).\n *\n * Not used in the SVG space.\n *\n * > 👉 **Note**: intentionally creates parse errors in markup (how parse\n * > errors are handled is well defined, so this works but isn’t pretty).\n * @property {boolean | null | undefined} [tightCommaSeparatedLists=false]\n * Join known comma-separated attribute values with just a comma (`,`),\n * instead of padding them on the right as well (`,␠`, where `␠` represents a\n * space) (default: `false`).\n * @property {boolean | null | undefined} [tightDoctype=false]\n * Drop unneeded spaces in doctypes: `<!doctypehtml>` instead of\n * `<!doctype html>` to save bytes (default: `false`).\n *\n * > 👉 **Note**: intentionally creates parse errors in markup (how parse\n * > errors are handled is well defined, so this works but isn’t pretty).\n * @property {boolean | null | undefined} [tightSelfClosing=false]\n * Do not use an extra space when closing self-closing elements: `<img/>`\n * instead of `<img />` (default: `false`).\n *\n * > 👉 **Note**: only used if `closeSelfClosing: true` or\n * > `closeEmptyElements: true`.\n * @property {boolean | null | undefined} [upperDoctype=false]\n * Use a `<!DOCTYPE…` instead of `<!doctype…` (default: `false`).\n *\n * Useless except for XHTML.\n * @property {ReadonlyArray<string> | null | undefined} [voids]\n * Tag names of elements to serialize without closing tag (default: `html-void-elements`).\n *\n * Not used in the SVG space.\n *\n * > 👉 **Note**: It’s highly unlikely that you want to pass this, because\n * > hast is not for XML, and HTML will not add more void elements.\n *\n * @typedef {'\"' | \"'\"} Quote\n * HTML quotes for attribute values.\n *\n * @typedef {Omit<Required<{[key in keyof Options]: Exclude<Options[key], null | undefined>}>, 'space' | 'quote'>} Settings\n *\n * @typedef {'html' | 'svg'} Space\n * Namespace.\n *\n * @typedef State\n * Info passed around about the current state.\n * @property {(node: Parents | undefined) => string} all\n * Serialize the children of a parent node.\n * @property {Quote} alternative\n * Alternative quote.\n * @property {(node: Nodes, index: number | undefined, parent: Parents | undefined) => string} one\n * Serialize one node.\n * @property {Quote} quote\n * Preferred quote.\n * @property {Schema} schema\n * Current schema.\n * @property {Settings} settings\n * User configuration.\n */\n\nimport {htmlVoidElements} from 'html-void-elements'\nimport {html, svg} from 'property-information'\nimport {handle} from './handle/index.js'\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/** @type {CharacterReferences} */\nconst emptyCharacterReferences = {}\n\n/** @type {Array<never>} */\nconst emptyChildren = []\n\n/**\n * Serialize hast as HTML.\n *\n * @param {Array<RootContent> | Nodes} tree\n * Tree to serialize.\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {string}\n * Serialized HTML.\n */\nexport function toHtml(tree, options) {\n const options_ = options || emptyOptions\n const quote = options_.quote || '\"'\n const alternative = quote === '\"' ? \"'\" : '\"'\n\n if (quote !== '\"' && quote !== \"'\") {\n throw new Error('Invalid quote `' + quote + '`, expected `\\'` or `\"`')\n }\n\n /** @type {State} */\n const state = {\n one,\n all,\n settings: {\n omitOptionalTags: options_.omitOptionalTags || false,\n allowParseErrors: options_.allowParseErrors || false,\n allowDangerousCharacters: options_.allowDangerousCharacters || false,\n quoteSmart: options_.quoteSmart || false,\n preferUnquoted: options_.preferUnquoted || false,\n tightAttributes: options_.tightAttributes || false,\n upperDoctype: options_.upperDoctype || false,\n tightDoctype: options_.tightDoctype || false,\n bogusComments: options_.bogusComments || false,\n tightCommaSeparatedLists: options_.tightCommaSeparatedLists || false,\n tightSelfClosing: options_.tightSelfClosing || false,\n collapseEmptyAttributes: options_.collapseEmptyAttributes || false,\n allowDangerousHtml: options_.allowDangerousHtml || false,\n voids: options_.voids || htmlVoidElements,\n characterReferences:\n options_.characterReferences || emptyCharacterReferences,\n closeSelfClosing: options_.closeSelfClosing || false,\n closeEmptyElements: options_.closeEmptyElements || false\n },\n schema: options_.space === 'svg' ? svg : html,\n quote,\n alternative\n }\n\n return state.one(\n Array.isArray(tree) ? {type: 'root', children: tree} : tree,\n undefined,\n undefined\n )\n}\n\n/**\n * Serialize a node.\n *\n * @this {State}\n * Info passed around about the current state.\n * @param {Nodes} node\n * Node to handle.\n * @param {number | undefined} index\n * Index of `node` in `parent.\n * @param {Parents | undefined} parent\n * Parent of `node`.\n * @returns {string}\n * Serialized node.\n */\nfunction one(node, index, parent) {\n return handle(node, index, parent, this)\n}\n\n/**\n * Serialize all children of `parent`.\n *\n * @this {State}\n * Info passed around about the current state.\n * @param {Parents | undefined} parent\n * Parent whose children to serialize.\n * @returns {string}\n */\nexport function all(parent) {\n /** @type {Array<string>} */\n const results = []\n const children = (parent && parent.children) || emptyChildren\n let index = -1\n\n while (++index < children.length) {\n results[index] = this.one(children[index], index, parent)\n }\n\n return results.join('')\n}\n","import { ShikiError as ShikiError$1 } from '@shikijs/types';\nexport * from '@shikijs/types';\nimport { FontStyle, INITIAL, EncodedTokenMetadata, Registry as Registry$1, Theme } from '@shikijs/vscode-textmate';\nimport { toHtml } from 'hast-util-to-html';\n\nfunction resolveColorReplacements(theme, options) {\n const replacements = typeof theme === \"string\" ? {} : { ...theme.colorReplacements };\n const themeName = typeof theme === \"string\" ? theme : theme.name;\n for (const [key, value] of Object.entries(options?.colorReplacements || {})) {\n if (typeof value === \"string\")\n replacements[key] = value;\n else if (key === themeName)\n Object.assign(replacements, value);\n }\n return replacements;\n}\nfunction applyColorReplacements(color, replacements) {\n if (!color)\n return color;\n return replacements?.[color?.toLowerCase()] || color;\n}\n\nfunction toArray(x) {\n return Array.isArray(x) ? x : [x];\n}\nasync function normalizeGetter(p) {\n return Promise.resolve(typeof p === \"function\" ? p() : p).then((r) => r.default || r);\n}\nfunction isPlainLang(lang) {\n return !lang || [\"plaintext\", \"txt\", \"text\", \"plain\"].includes(lang);\n}\nfunction isSpecialLang(lang) {\n return lang === \"ansi\" || isPlainLang(lang);\n}\nfunction isNoneTheme(theme) {\n return theme === \"none\";\n}\nfunction isSpecialTheme(theme) {\n return isNoneTheme(theme);\n}\n\nfunction addClassToHast(node, className) {\n if (!className)\n return node;\n node.properties ||= {};\n node.properties.class ||= [];\n if (typeof node.properties.class === \"string\")\n node.properties.class = node.properties.class.split(/\\s+/g);\n if (!Array.isArray(node.properties.class))\n node.properties.class = [];\n const targets = Array.isArray(className) ? className : className.split(/\\s+/g);\n for (const c of targets) {\n if (c && !node.properties.class.includes(c))\n node.properties.class.push(c);\n }\n return node;\n}\n\nfunction splitLines(code, preserveEnding = false) {\n if (code.length === 0) {\n return [[\"\", 0]];\n }\n const parts = code.split(/(\\r?\\n)/g);\n let index = 0;\n const lines = [];\n for (let i = 0; i < parts.length; i += 2) {\n const line = preserveEnding ? parts[i] + (parts[i + 1] || \"\") : parts[i];\n lines.push([line, index]);\n index += parts[i].length;\n index += parts[i + 1]?.length || 0;\n }\n return lines;\n}\nfunction createPositionConverter(code) {\n const lines = splitLines(code, true).map(([line]) => line);\n function indexToPos(index) {\n if (index === code.length) {\n return {\n line: lines.length - 1,\n character: lines[lines.length - 1].length\n };\n }\n let character = index;\n let line = 0;\n for (const lineText of lines) {\n if (character < lineText.length)\n break;\n character -= lineText.length;\n line++;\n }\n return { line, character };\n }\n function posToIndex(line, character) {\n let index = 0;\n for (let i = 0; i < line; i++)\n index += lines[i].length;\n index += character;\n return index;\n }\n return {\n lines,\n indexToPos,\n posToIndex\n };\n}\nfunction guessEmbeddedLanguages(code, _lang, highlighter) {\n const langs = /* @__PURE__ */ new Set();\n for (const match of code.matchAll(/:?lang=[\"']([^\"']+)[\"']/g)) {\n const lang = match[1].toLowerCase().trim();\n if (lang)\n langs.add(lang);\n }\n for (const match of code.matchAll(/(?:```|~~~)([\\w-]+)/g)) {\n const lang = match[1].toLowerCase().trim();\n if (lang)\n langs.add(lang);\n }\n for (const match of code.matchAll(/\\\\begin\\{([\\w-]+)\\}/g)) {\n const lang = match[1].toLowerCase().trim();\n if (lang)\n langs.add(lang);\n }\n for (const match of code.matchAll(/<script\\s+(?:type|lang)=[\"']([^\"']+)[\"']/gi)) {\n const fullType = match[1].toLowerCase().trim();\n const lang = fullType.includes(\"/\") ? fullType.split(\"/\").pop() : fullType;\n if (lang)\n langs.add(lang);\n }\n if (!highlighter)\n return Array.from(langs);\n const bundle = highlighter.getBundledLanguages();\n return Array.from(langs).filter((l) => l && bundle[l]);\n}\n\nconst DEFAULT_COLOR_LIGHT_DARK = \"light-dark()\";\nconst COLOR_KEYS = [\"color\", \"background-color\"];\n\nfunction splitToken(token, offsets) {\n let lastOffset = 0;\n const tokens = [];\n for (const offset of offsets) {\n if (offset > lastOffset) {\n tokens.push({\n ...token,\n content: token.content.slice(lastOffset, offset),\n offset: token.offset + lastOffset\n });\n }\n lastOffset = offset;\n }\n if (lastOffset < token.content.length) {\n tokens.push({\n ...token,\n content: token.content.slice(lastOffset),\n offset: token.offset + lastOffset\n });\n }\n return tokens;\n}\nfunction splitTokens(tokens, breakpoints) {\n const sorted = Array.from(breakpoints instanceof Set ? breakpoints : new Set(breakpoints)).sort((a, b) => a - b);\n if (!sorted.length)\n return tokens;\n return tokens.map((line) => {\n return line.flatMap((token) => {\n const breakpointsInToken = sorted.filter((i) => token.offset < i && i < token.offset + token.content.length).map((i) => i - token.offset).sort((a, b) => a - b);\n if (!breakpointsInToken.length)\n return token;\n return splitToken(token, breakpointsInToken);\n });\n });\n}\nfunction flatTokenVariants(merged, variantsOrder, cssVariablePrefix, defaultColor, colorsRendering = \"css-vars\") {\n const token = {\n content: merged.content,\n explanation: merged.explanation,\n offset: merged.offset\n };\n const styles = variantsOrder.map((t) => getTokenStyleObject(merged.variants[t]));\n const styleKeys = new Set(styles.flatMap((t) => Object.keys(t)));\n const mergedStyles = {};\n const varKey = (idx, key) => {\n const keyName = key === \"color\" ? \"\" : key === \"background-color\" ? \"-bg\" : `-${key}`;\n return cssVariablePrefix + variantsOrder[idx] + (key === \"color\" ? \"\" : keyName);\n };\n styles.forEach((cur, idx) => {\n for (const key of styleKeys) {\n const value = cur[key] || \"inherit\";\n if (idx === 0 && defaultColor && COLOR_KEYS.includes(key)) {\n if (defaultColor === DEFAULT_COLOR_LIGHT_DARK && styles.length > 1) {\n const lightIndex = variantsOrder.findIndex((t) => t === \"light\");\n const darkIndex = variantsOrder.findIndex((t) => t === \"dark\");\n if (lightIndex === -1 || darkIndex === -1)\n throw new ShikiError$1('When using `defaultColor: \"light-dark()\"`, you must provide both `light` and `dark` themes');\n const lightValue = styles[lightIndex][key] || \"inherit\";\n const darkValue = styles[darkIndex][key] || \"inherit\";\n mergedStyles[key] = `light-dark(${lightValue}, ${darkValue})`;\n if (colorsRendering === \"css-vars\")\n mergedStyles[varKey(idx, key)] = value;\n } else {\n mergedStyles[key] = value;\n }\n } else {\n if (colorsRendering === \"css-vars\")\n mergedStyles[varKey(idx, key)] = value;\n }\n }\n });\n token.htmlStyle = mergedStyles;\n return token;\n}\nfunction getTokenStyleObject(token) {\n const styles = {};\n if (token.color)\n styles.color = token.color;\n if (token.bgColor)\n styles[\"background-color\"] = token.bgColor;\n if (token.fontStyle) {\n if (token.fontStyle & FontStyle.Italic)\n styles[\"font-style\"] = \"italic\";\n if (token.fontStyle & FontStyle.Bold)\n styles[\"font-weight\"] = \"bold\";\n const decorations = [];\n if (token.fontStyle & FontStyle.Underline)\n decorations.push(\"underline\");\n if (token.fontStyle & FontStyle.Strikethrough)\n decorations.push(\"line-through\");\n if (decorations.length)\n styles[\"text-decoration\"] = decorations.join(\" \");\n }\n return styles;\n}\nfunction stringifyTokenStyle(token) {\n if (typeof token === \"string\")\n return token;\n return Object.entries(token).map(([key, value]) => `${key}:${value}`).join(\";\");\n}\n\nconst _grammarStateMap = /* @__PURE__ */ new WeakMap();\nfunction setLastGrammarStateToMap(keys, state) {\n _grammarStateMap.set(keys, state);\n}\nfunction getLastGrammarStateFromMap(keys) {\n return _grammarStateMap.get(keys);\n}\nclass GrammarState {\n /**\n * Theme to Stack mapping\n */\n _stacks = {};\n lang;\n get themes() {\n return Object.keys(this._stacks);\n }\n get theme() {\n return this.themes[0];\n }\n get _stack() {\n return this._stacks[this.theme];\n }\n /**\n * Static method to create a initial grammar state.\n */\n static initial(lang, themes) {\n return new GrammarState(\n Object.fromEntries(toArray(themes).map((theme) => [theme, INITIAL])),\n lang\n );\n }\n constructor(...args) {\n if (args.length === 2) {\n const [stacksMap, lang] = args;\n this.lang = lang;\n this._stacks = stacksMap;\n } else {\n const [stack, lang, theme] = args;\n this.lang = lang;\n this._stacks = { [theme]: stack };\n }\n }\n /**\n * Get the internal stack object.\n * @internal\n */\n getInternalStack(theme = this.theme) {\n return this._stacks[theme];\n }\n getScopes(theme = this.theme) {\n return getScopes(this._stacks[theme]);\n }\n toJSON() {\n return {\n lang: this.lang,\n theme: this.theme,\n themes: this.themes,\n scopes: this.getScopes()\n };\n }\n}\nfunction getScopes(stack) {\n const scopes = [];\n const visited = /* @__PURE__ */ new Set();\n function pushScope(stack2) {\n if (visited.has(stack2))\n return;\n visited.add(stack2);\n const name = stack2?.nameScopesList?.scopeName;\n if (name)\n scopes.push(name);\n if (stack2.parent)\n pushScope(stack2.parent);\n }\n pushScope(stack);\n return scopes;\n}\nfunction getGrammarStack(state, theme) {\n if (!(state instanceof GrammarState))\n throw new ShikiError$1(\"Invalid grammar state\");\n return state.getInternalStack(theme);\n}\n\nfunction transformerDecorations() {\n const map = /* @__PURE__ */ new WeakMap();\n function getContext(shiki) {\n if (!map.has(shiki.meta)) {\n let normalizePosition = function(p) {\n if (typeof p === \"number\") {\n if (p < 0 || p > shiki.source.length)\n throw new ShikiError$1(`Invalid decoration offset: ${p}. Code length: ${shiki.source.length}`);\n return {\n ...converter.indexToPos(p),\n offset: p\n };\n } else {\n const line = converter.lines[p.line];\n if (line === void 0)\n throw new ShikiError$1(`Invalid decoration position ${JSON.stringify(p)}. Lines length: ${converter.lines.length}`);\n let character = p.character;\n if (character < 0)\n character = line.length + character;\n if (character < 0 || character > line.length)\n throw new ShikiError$1(`Invalid decoration position ${JSON.stringify(p)}. Line ${p.line} length: ${line.length}`);\n return {\n ...p,\n character,\n offset: converter.posToIndex(p.line, character)\n };\n }\n };\n const converter = createPositionConverter(shiki.source);\n const decorations = (shiki.options.decorations || []).map((d) => ({\n ...d,\n start: normalizePosition(d.start),\n end: normalizePosition(d.end)\n }));\n verifyIntersections(decorations);\n map.set(shiki.meta, {\n decorations,\n converter,\n source: shiki.source\n });\n }\n return map.get(shiki.meta);\n }\n return {\n name: \"shiki:decorations\",\n tokens(tokens) {\n if (!this.options.decorations?.length)\n return;\n const ctx = getContext(this);\n const breakpoints = ctx.decorations.flatMap((d) => [d.start.offset, d.end.offset]);\n const splitted = splitTokens(tokens, breakpoints);\n return splitted;\n },\n code(codeEl) {\n if (!this.options.decorations?.length)\n return;\n const ctx = getContext(this);\n const lines = Array.from(codeEl.children).filter((i) => i.type === \"element\" && i.tagName === \"span\");\n if (lines.length !== ctx.converter.lines.length)\n throw new ShikiError$1(`Number of lines in code element (${lines.length}) does not match the number of lines in the source (${ctx.converter.lines.length}). Failed to apply decorations.`);\n function applyLineSection(line, start, end, decoration) {\n const lineEl = lines[line];\n let text = \"\";\n let startIndex = -1;\n let endIndex = -1;\n if (start === 0)\n startIndex = 0;\n if (end === 0)\n endIndex = 0;\n if (end === Number.POSITIVE_INFINITY)\n endIndex = lineEl.children.length;\n if (startIndex === -1 || endIndex === -1) {\n for (let i = 0; i < lineEl.children.length; i++) {\n text += stringify(lineEl.children[i]);\n if (startIndex === -1 && text.length === start)\n startIndex = i + 1;\n if (endIndex === -1 && text.length === end)\n endIndex = i + 1;\n }\n }\n if (startIndex === -1)\n throw new ShikiError$1(`Failed to find start index for decoration ${JSON.stringify(decoration.start)}`);\n if (endIndex === -1)\n throw new ShikiError$1(`Failed to find end index for decoration ${JSON.stringify(decoration.end)}`);\n const children = lineEl.children.slice(startIndex, endIndex);\n if (!decoration.alwaysWrap && children.length === lineEl.children.length) {\n applyDecoration(lineEl, decoration, \"line\");\n } else if (!decoration.alwaysWrap && children.length === 1 && children[0].type === \"element\") {\n applyDecoration(children[0], decoration, \"token\");\n } else {\n const wrapper = {\n type: \"element\",\n tagName: \"span\",\n properties: {},\n children\n };\n applyDecoration(wrapper, decoration, \"wrapper\");\n lineEl.children.splice(startIndex, children.length, wrapper);\n }\n }\n function applyLine(line, decoration) {\n lines[line] = applyDecoration(lines[line], decoration, \"line\");\n }\n function applyDecoration(el, decoration, type) {\n const properties = decoration.properties || {};\n const transform = decoration.transform || ((i) => i);\n el.tagName = decoration.tagName || \"span\";\n el.properties = {\n ...el.properties,\n ...properties,\n class: el.properties.class\n };\n if (decoration.properties?.class)\n addClassToHast(el, decoration.properties.class);\n el = transform(el, type) || el;\n return el;\n }\n const lineApplies = [];\n const sorted = ctx.decorations.sort((a, b) => b.start.offset - a.start.offset || a.end.offset - b.end.offset);\n for (const decoration of sorted) {\n const { start, end } = decoration;\n if (start.line === end.line) {\n applyLineSection(start.line, start.character, end.character, decoration);\n } else if (start.line < end.line) {\n applyLineSection(start.line, start.character, Number.POSITIVE_INFINITY, decoration);\n for (let i = start.line + 1; i < end.line; i++)\n lineApplies.unshift(() => applyLine(i, decoration));\n applyLineSection(end.line, 0, end.character, decoration);\n }\n }\n lineApplies.forEach((i) => i());\n }\n };\n}\nfunction verifyIntersections(items) {\n for (let i = 0; i < items.length; i++) {\n const foo = items[i];\n if (foo.start.offset > foo.end.offset)\n throw new ShikiError$1(`Invalid decoration range: ${JSON.stringify(foo.start)} - ${JSON.stringify(foo.end)}`);\n for (let j = i + 1; j < items.length; j++) {\n const bar = items[j];\n const isFooHasBarStart = foo.start.offset <= bar.start.offset && bar.start.offset < foo.end.offset;\n const isFooHasBarEnd = foo.start.offset < bar.end.offset && bar.end.offset <= foo.end.offset;\n const isBarHasFooStart = bar.start.offset <= foo.start.offset && foo.start.offset < bar.end.offset;\n const isBarHasFooEnd = bar.start.offset < foo.end.offset && foo.end.offset <= bar.end.offset;\n if (isFooHasBarStart || isFooHasBarEnd || isBarHasFooStart || isBarHasFooEnd) {\n if (isFooHasBarStart && isFooHasBarEnd)\n continue;\n if (isBarHasFooStart && isBarHasFooEnd)\n continue;\n if (isBarHasFooStart && foo.start.offset === foo.end.offset)\n continue;\n if (isFooHasBarEnd && bar.start.offset === bar.end.offset)\n continue;\n throw new ShikiError$1(`Decorations ${JSON.stringify(foo.start)} and ${JSON.stringify(bar.start)} intersect.`);\n }\n }\n }\n}\nfunction stringify(el) {\n if (el.type === \"text\")\n return el.value;\n if (el.type === \"element\")\n return el.children.map(stringify).join(\"\");\n return \"\";\n}\n\nconst builtInTransformers = [\n /* @__PURE__ */ transformerDecorations()\n];\nfunction getTransformers(options) {\n const transformers = sortTransformersByEnforcement(options.transformers || []);\n return [\n ...transformers.pre,\n ...transformers.normal,\n ...transformers.post,\n ...builtInTransformers\n ];\n}\nfunction sortTransformersByEnforcement(transformers) {\n const pre = [];\n const post = [];\n const normal = [];\n for (const transformer of transformers) {\n switch (transformer.enforce) {\n case \"pre\":\n pre.push(transformer);\n break;\n case \"post\":\n post.push(transformer);\n break;\n default:\n normal.push(transformer);\n }\n }\n return { pre, post, normal };\n}\n\n// src/colors.ts\nvar namedColors = [\n \"black\",\n \"red\",\n \"green\",\n \"yellow\",\n \"blue\",\n \"magenta\",\n \"cyan\",\n \"white\",\n \"brightBlack\",\n \"brightRed\",\n \"brightGreen\",\n \"brightYellow\",\n \"brightBlue\",\n \"brightMagenta\",\n \"brightCyan\",\n \"brightWhite\"\n];\n\n// src/decorations.ts\nvar decorations = {\n 1: \"bold\",\n 2: \"dim\",\n 3: \"italic\",\n 4: \"underline\",\n 7: \"reverse\",\n 8: \"hidden\",\n 9: \"strikethrough\"\n};\n\n// src/parser.ts\nfunction findSequence(value, position) {\n const nextEscape = value.indexOf(\"\\x1B\", position);\n if (nextEscape !== -1) {\n if (value[nextEscape + 1] === \"[\") {\n const nextClose = value.indexOf(\"m\", nextEscape);\n if (nextClose !== -1) {\n return {\n sequence: value.substring(nextEscape + 2, nextClose).split(\";\"),\n startPosition: nextEscape,\n position: nextClose + 1\n };\n }\n }\n }\n return {\n position: value.length\n };\n}\nfunction parseColor(sequence) {\n const colorMode = sequence.shift();\n if (colorMode === \"2\") {\n const rgb = sequence.splice(0, 3).map((x) => Number.parseInt(x));\n if (rgb.length !== 3 || rgb.some((x) => Number.isNaN(x)))\n return;\n return {\n type: \"rgb\",\n rgb\n };\n } else if (colorMode === \"5\") {\n const index = sequence.shift();\n if (index) {\n return { type: \"table\", index: Number(index) };\n }\n }\n}\nfunction parseSequence(sequence) {\n const commands = [];\n while (sequence.length > 0) {\n const code = sequence.shift();\n if (!code)\n continue;\n const codeInt = Number.parseInt(code);\n if (Number.isNaN(codeInt))\n continue;\n if (codeInt === 0) {\n commands.push({ type: \"resetAll\" });\n } else if (codeInt <= 9) {\n const decoration = decorations[codeInt];\n if (decoration) {\n commands.push({\n type: \"setDecoration\",\n value: decorations[codeInt]\n });\n }\n } else if (codeInt <= 29) {\n const decoration = decorations[codeInt - 20];\n if (decoration) {\n commands.push({\n type: \"resetDecoration\",\n value: decoration\n });\n if (decoration === \"dim\") {\n commands.push({\n type: \"resetDecoration\",\n value: \"bold\"\n });\n }\n }\n } else if (codeInt <= 37) {\n commands.push({\n type: \"setForegroundColor\",\n value: { type: \"named\", name: namedColors[codeInt - 30] }\n });\n } else if (codeInt === 38) {\n const color = parseColor(sequence);\n if (color) {\n commands.push({\n type: \"setForegroundColor\",\n value: color\n });\n }\n } else if (codeInt === 39) {\n commands.push({\n type: \"resetForegroundColor\"\n });\n } else if (codeInt <= 47) {\n commands.push({\n type: \"setBackgroundColor\",\n value: { type: \"named\", name: namedColors[codeInt - 40] }\n });\n } else if (codeInt === 48) {\n const color = parseColor(sequence);\n if (color) {\n commands.push({\n type: \"setBackgroundColor\",\n value: color\n });\n }\n } else if (codeInt === 49) {\n commands.push({\n type: \"resetBackgroundColor\"\n });\n } else if (codeInt === 53) {\n commands.push({\n type: \"setDecoration\",\n value: \"overline\"\n });\n } else if (codeInt === 55) {\n commands.push({\n type: \"resetDecoration\",\n value: \"overline\"\n });\n } else if (codeInt >= 90 && codeInt <= 97) {\n commands.push({\n type: \"setForegroundColor\",\n value: { type: \"named\", name: namedColors[codeInt - 90 + 8] }\n });\n } else if (codeInt >= 100 && codeInt <= 107) {\n commands.push({\n type: \"setBackgroundColor\",\n value: { type: \"named\", name: namedColors[codeInt - 100 + 8] }\n });\n }\n }\n return commands;\n}\nfunction createAnsiSequenceParser() {\n let foreground = null;\n let background = null;\n let decorations2 = /* @__PURE__ */ new Set();\n return {\n parse(value) {\n const tokens = [];\n let position = 0;\n do {\n const findResult = findSequence(value, position);\n const text = findResult.sequence ? value.substring(position, findResult.startPosition) : value.substring(position);\n if (text.length > 0) {\n tokens.push({\n value: text,\n foreground,\n background,\n decorations: new Set(decorations2)\n });\n }\n if (findResult.sequence) {\n const commands = parseSequence(findResult.sequence);\n for (const styleToken of commands) {\n if (styleToken.type === \"resetAll\") {\n foreground = null;\n background = null;\n decorations2.clear();\n } else if (styleToken.type === \"resetForegroundColor\") {\n foreground = null;\n } else if (styleToken.type === \"resetBackgroundColor\") {\n background = null;\n } else if (styleToken.type === \"resetDecoration\") {\n decorations2.delete(styleToken.value);\n }\n }\n for (const styleToken of commands) {\n if (styleToken.type === \"setForegroundColor\") {\n foreground = styleToken.value;\n } else if (styleToken.type === \"setBackgroundColor\") {\n background = styleToken.value;\n } else if (styleToken.type === \"setDecoration\") {\n decorations2.add(styleToken.value);\n }\n }\n }\n position = findResult.position;\n } while (position < value.length);\n return tokens;\n }\n };\n}\n\n// src/palette.ts\nvar defaultNamedColorsMap = {\n black: \"#000000\",\n red: \"#bb0000\",\n green: \"#00bb00\",\n yellow: \"#bbbb00\",\n blue: \"#0000bb\",\n magenta: \"#ff00ff\",\n cyan: \"#00bbbb\",\n white: \"#eeeeee\",\n brightBlack: \"#555555\",\n brightRed: \"#ff5555\",\n brightGreen: \"#00ff00\",\n brightYellow: \"#ffff55\",\n brightBlue: \"#5555ff\",\n brightMagenta: \"#ff55ff\",\n brightCyan: \"#55ffff\",\n brightWhite: \"#ffffff\"\n};\nfunction createColorPalette(namedColorsMap = defaultNamedColorsMap) {\n function namedColor(name) {\n return namedColorsMap[name];\n }\n function rgbColor(rgb) {\n return `#${rgb.map((x) => Math.max(0, Math.min(x, 255)).toString(16).padStart(2, \"0\")).join(\"\")}`;\n }\n let colorTable;\n function getColorTable() {\n if (colorTable) {\n return colorTable;\n }\n colorTable = [];\n for (let i = 0; i < namedColors.length; i++) {\n colorTable.push(namedColor(namedColors[i]));\n }\n let levels = [0, 95, 135, 175, 215, 255];\n for (let r = 0; r < 6; r++) {\n for (let g = 0; g < 6; g++) {\n for (let b = 0; b < 6; b++) {\n colorTable.push(rgbColor([levels[r], levels[g], levels[b]]));\n }\n }\n }\n let level = 8;\n for (let i = 0; i < 24; i++, level += 10) {\n colorTable.push(rgbColor([level, level, level]));\n }\n return colorTable;\n }\n function tableColor(index) {\n return getColorTable()[index];\n }\n function value(color) {\n switch (color.type) {\n case \"named\":\n return namedColor(color.name);\n case \"rgb\":\n return rgbColor(color.rgb);\n case \"table\":\n return tableColor(color.index);\n }\n }\n return {\n value\n };\n}\n\nconst defaultAnsiColors = {\n black: \"#000000\",\n red: \"#cd3131\",\n green: \"#0DBC79\",\n yellow: \"#E5E510\",\n blue: \"#2472C8\",\n magenta: \"#BC3FBC\",\n cyan: \"#11A8CD\",\n white: \"#E5E5E5\",\n brightBlack: \"#666666\",\n brightRed: \"#F14C4C\",\n brightGreen: \"#23D18B\",\n brightYellow: \"#F5F543\",\n brightBlue: \"#3B8EEA\",\n brightMagenta: \"#D670D6\",\n brightCyan: \"#29B8DB\",\n brightWhite: \"#FFFFFF\"\n};\nfunction tokenizeAnsiWithTheme(theme, fileContents, options) {\n const colorReplacements = resolveColorReplacements(theme, options);\n const lines = splitLines(fileContents);\n const ansiPalette = Object.fromEntries(\n namedColors.map((name) => {\n const key = `terminal.ansi${name[0].toUpperCase()}${name.substring(1)}`;\n const themeColor = theme.colors?.[key];\n return [name, themeColor || defaultAnsiColors[name]];\n })\n );\n const colorPalette = createColorPalette(ansiPalette);\n const parser = createAnsiSequenceParser();\n return lines.map(\n (line) => parser.parse(line[0]).map((token) => {\n let color;\n let bgColor;\n if (token.decorations.has(\"reverse\")) {\n color = token.background ? colorPalette.value(token.background) : theme.bg;\n bgColor = token.foreground ? colorPalette.value(token.foreground) : theme.fg;\n } else {\n color = token.foreground ? colorPalette.value(token.foreground) : theme.fg;\n bgColor = token.background ? colorPalette.value(token.background) : void 0;\n }\n color = applyColorReplacements(color, colorReplacements);\n bgColor = applyColorReplacements(bgColor, colorReplacements);\n if (token.decorations.has(\"dim\"))\n color = dimColor(color);\n let fontStyle = FontStyle.None;\n if (token.decorations.has(\"bold\"))\n fontStyle |= FontStyle.Bold;\n if (token.decorations.has(\"italic\"))\n fontStyle |= FontStyle.Italic;\n if (token.decorations.has(\"underline\"))\n fontStyle |= FontStyle.Underline;\n if (token.decorations.has(\"strikethrough\"))\n fontStyle |= FontStyle.Strikethrough;\n return {\n content: token.value,\n offset: line[1],\n // TODO: more accurate offset? might need to fork ansi-sequence-parser\n color,\n bgColor,\n fontStyle\n };\n })\n );\n}\nfunction dimColor(color) {\n const hexMatch = color.match(/#([0-9a-f]{3,8})/i);\n if (hexMatch) {\n const hex = hexMatch[1];\n if (hex.length === 8) {\n const alpha = Math.round(Number.parseInt(hex.slice(6, 8), 16) / 2).toString(16).padStart(2, \"0\");\n return `#${hex.slice(0, 6)}${alpha}`;\n } else if (hex.length === 6) {\n return `#${hex}80`;\n } else if (hex.length === 4) {\n const r = hex[0];\n const g = hex[1];\n const b = hex[2];\n const a = hex[3];\n const alpha = Math.round(Number.parseInt(`${a}${a}`, 16) / 2).toString(16).padStart(2, \"0\");\n return `#${r}${r}${g}${g}${b}${b}${alpha}`;\n } else if (hex.length === 3) {\n const r = hex[0];\n const g = hex[1];\n const b = hex[2];\n return `#${r}${r}${g}${g}${b}${b}80`;\n }\n }\n const cssVarMatch = color.match(/var\\((--[\\w-]+-ansi-[\\w-]+)\\)/);\n if (cssVarMatch)\n return `var(${cssVarMatch[1]}-dim)`;\n return color;\n}\n\nfunction codeToTokensBase(internal, code, options = {}) {\n const {\n theme: themeName = internal.getLoadedThemes()[0]\n } = options;\n const lang = internal.resolveLangAlias(options.lang || \"text\");\n if (isPlainLang(lang) || isNoneTheme(themeName))\n return splitLines(code).map((line) => [{ content: line[0], offset: line[1] }]);\n const { theme, colorMap } = internal.setTheme(themeName);\n if (lang === \"ansi\")\n return tokenizeAnsiWithTheme(theme, code, options);\n const _grammar = internal.getLanguage(options.lang || \"text\");\n if (options.grammarState) {\n if (options.grammarState.lang !== _grammar.name) {\n throw new ShikiError$1(`Grammar state language \"${options.grammarState.lang}\" does not match highlight language \"${_grammar.name}\"`);\n }\n if (!options.grammarState.themes.includes(theme.name)) {\n throw new ShikiError$1(`Grammar state themes \"${options.grammarState.themes}\" do not contain highlight theme \"${theme.name}\"`);\n }\n }\n return tokenizeWithTheme(code, _grammar, theme, colorMap, options);\n}\nfunction getLastGrammarState(...args) {\n if (args.length === 2) {\n return getLastGrammarStateFromMap(args[1]);\n }\n const [internal, code, options = {}] = args;\n const {\n lang = \"text\",\n theme: themeName = internal.getLoadedThemes()[0]\n } = options;\n if (isPlainLang(lang) || isNoneTheme(themeName))\n throw new ShikiError$1(\"Plain language does not have grammar state\");\n if (lang === \"ansi\")\n throw new ShikiError$1(\"ANSI language does not have grammar state\");\n const { theme, colorMap } = internal.setTheme(themeName);\n const _grammar = internal.getLanguage(lang);\n return new GrammarState(\n _tokenizeWithTheme(code, _grammar, theme, colorMap, options).stateStack,\n _grammar.name,\n theme.name\n );\n}\nfunction tokenizeWithTheme(code, grammar, theme, colorMap, options) {\n const result = _tokenizeWithTheme(code, grammar, theme, colorMap, options);\n const grammarState = new GrammarState(\n result.stateStack,\n grammar.name,\n theme.name\n );\n setLastGrammarStateToMap(result.tokens, grammarState);\n return result.tokens;\n}\nfunction _tokenizeWithTheme(code, grammar, theme, colorMap, options) {\n const colorReplacements = resolveColorReplacements(theme, options);\n const {\n tokenizeMaxLineLength = 0,\n tokenizeTimeLimit = 500\n } = options;\n const lines = splitLines(code);\n let stateStack = options.grammarState ? getGrammarStack(options.grammarState, theme.name) ?? INITIAL : options.grammarContextCode != null ? _tokenizeWithTheme(\n options.grammarContextCode,\n grammar,\n theme,\n colorMap,\n {\n ...options,\n grammarState: void 0,\n grammarContextCode: void 0\n }\n ).stateStack : INITIAL;\n let actual = [];\n const final = [];\n for (let i = 0, len = lines.length; i < len; i++) {\n const [line, lineOffset] = lines[i];\n if (line === \"\") {\n actual = [];\n final.push([]);\n continue;\n }\n if (tokenizeMaxLineLength > 0 && line.length >= tokenizeMaxLineLength) {\n actual = [];\n final.push([{\n content: line,\n offset: lineOffset,\n color: \"\",\n fontStyle: 0\n }]);\n continue;\n }\n let resultWithScopes;\n let tokensWithScopes;\n let tokensWithScopesIndex;\n if (options.includeExplanation) {\n resultWithScopes = grammar.tokenizeLine(line, stateStack, tokenizeTimeLimit);\n tokensWithScopes = resultWithScopes.tokens;\n tokensWithScopesIndex = 0;\n }\n const result = grammar.tokenizeLine2(line, stateStack, tokenizeTimeLimit);\n const tokensLength = result.tokens.length / 2;\n for (let j = 0; j < tokensLength; j++) {\n const startIndex = result.tokens[2 * j];\n const nextStartIndex = j + 1 < tokensLength ? result.tokens[2 * j + 2] : line.length;\n if (startIndex === nextStartIndex)\n continue;\n const metadata = result.tokens[2 * j + 1];\n const color = applyColorReplacements(\n colorMap[EncodedTokenMetadata.getForeground(metadata)],\n colorReplacements\n );\n const fontStyle = EncodedTokenMetadata.getFontStyle(metadata);\n const token = {\n content: line.substring(startIndex, nextStartIndex),\n offset: lineOffset + startIndex,\n color,\n fontStyle\n };\n if (options.includeExplanation) {\n const themeSettingsSelectors = [];\n if (options.includeExplanation !== \"scopeName\") {\n for (const setting of theme.settings) {\n let selectors;\n switch (typeof setting.scope) {\n case \"string\":\n selectors = setting.scope.split(/,/).map((scope) => scope.trim());\n break;\n case \"object\":\n selectors = setting.scope;\n break;\n default:\n continue;\n }\n themeSettingsSelectors.push({\n settings: setting,\n selectors: selectors.map((selector) => selector.split(/ /))\n });\n }\n }\n token.explanation = [];\n let offset = 0;\n while (startIndex + offset < nextStartIndex) {\n const tokenWithScopes = tokensWithScopes[tokensWithScopesIndex];\n const tokenWithScopesText = line.substring(\n tokenWithScopes.startIndex,\n tokenWithScopes.endIndex\n );\n offset += tokenWithScopesText.length;\n token.explanation.push({\n content: tokenWithScopesText,\n scopes: options.includeExplanation === \"scopeName\" ? explainThemeScopesNameOnly(\n tokenWithScopes.scopes\n ) : explainThemeScopesFull(\n themeSettingsSelectors,\n tokenWithScopes.scopes\n )\n });\n tokensWithScopesIndex += 1;\n }\n }\n actual.push(token);\n }\n final.push(actual);\n actual = [];\n stateStack = result.ruleStack;\n }\n return {\n tokens: final,\n stateStack\n };\n}\nfunction explainThemeScopesNameOnly(scopes) {\n return scopes.map((scope) => ({ scopeName: scope }));\n}\nfunction explainThemeScopesFull(themeSelectors, scopes) {\n const result = [];\n for (let i = 0, len = scopes.length; i < len; i++) {\n const scope = scopes[i];\n result[i] = {\n scopeName: scope,\n themeMatches: explainThemeScope(themeSelectors, scope, scopes.slice(0, i))\n };\n }\n return result;\n}\nfunction matchesOne(selector, scope) {\n return selector === scope || scope.substring(0, selector.length) === selector && scope[selector.length] === \".\";\n}\nfunction matches(selectors, scope, parentScopes) {\n if (!matchesOne(selectors[selectors.length - 1], scope))\n return false;\n let selectorParentIndex = selectors.length - 2;\n let parentIndex = parentScopes.length - 1;\n while (selectorParentIndex >= 0 && parentIndex >= 0) {\n if (matchesOne(selectors[selectorParentIndex], parentScopes[parentIndex]))\n selectorParentIndex -= 1;\n parentIndex -= 1;\n }\n if (selectorParentIndex === -1)\n return true;\n return false;\n}\nfunction explainThemeScope(themeSettingsSelectors, scope, parentScopes) {\n const result = [];\n for (const { selectors, settings } of themeSettingsSelectors) {\n for (const selectorPieces of selectors) {\n if (matches(selectorPieces, scope, parentScopes)) {\n result.push(settings);\n break;\n }\n }\n }\n return result;\n}\n\nfunction codeToTokensWithThemes(internal, code, options) {\n const themes = Object.entries(options.themes).filter((i) => i[1]).map((i) => ({ color: i[0], theme: i[1] }));\n const themedTokens = themes.map((t) => {\n const tokens2 = codeToTokensBase(internal, code, {\n ...options,\n theme: t.theme\n });\n const state = getLastGrammarStateFromMap(tokens2);\n const theme = typeof t.theme === \"string\" ? t.theme : t.theme.name;\n return {\n tokens: tokens2,\n state,\n theme\n };\n });\n const tokens = syncThemesTokenization(\n ...themedTokens.map((i) => i.tokens)\n );\n const mergedTokens = tokens[0].map(\n (line, lineIdx) => line.map((_token, tokenIdx) => {\n const mergedToken = {\n content: _token.content,\n variants: {},\n offset: _token.offset\n };\n if (\"includeExplanation\" in options && options.includeExplanation) {\n mergedToken.explanation = _token.explanation;\n }\n tokens.forEach((t, themeIdx) => {\n const {\n content: _,\n explanation: __,\n offset: ___,\n ...styles\n } = t[lineIdx][tokenIdx];\n mergedToken.variants[themes[themeIdx].color] = styles;\n });\n return mergedToken;\n })\n );\n const mergedGrammarState = themedTokens[0].state ? new GrammarState(\n Object.fromEntries(themedTokens.map((s) => [s.theme, s.state?.getInternalStack(s.theme)])),\n themedTokens[0].state.lang\n ) : void 0;\n if (mergedGrammarState)\n setLastGrammarStateToMap(mergedTokens, mergedGrammarState);\n return mergedTokens;\n}\nfunction syncThemesTokenization(...themes) {\n const outThemes = themes.map(() => []);\n const count = themes.length;\n for (let i = 0; i < themes[0].length; i++) {\n const lines = themes.map((t) => t[i]);\n const outLines = outThemes.map(() => []);\n outThemes.forEach((t, i2) => t.push(outLines[i2]));\n const indexes = lines.map(() => 0);\n const current = lines.map((l) => l[0]);\n while (current.every((t) => t)) {\n const minLength = Math.min(...current.map((t) => t.content.length));\n for (let n = 0; n < count; n++) {\n const token = current[n];\n if (token.content.length === minLength) {\n outLines[n].push(token);\n indexes[n] += 1;\n current[n] = lines[n][indexes[n]];\n } else {\n outLines[n].push({\n ...token,\n content: token.content.slice(0, minLength)\n });\n current[n] = {\n ...token,\n content: token.content.slice(minLength),\n offset: token.offset + minLength\n };\n }\n }\n }\n }\n return outThemes;\n}\n\nfunction codeToTokens(internal, code, options) {\n let bg;\n let fg;\n let tokens;\n let themeName;\n let rootStyle;\n let grammarState;\n if (\"themes\" in options) {\n const {\n defaultColor = \"light\",\n cssVariablePrefix = \"--shiki-\",\n colorsRendering = \"css-vars\"\n } = options;\n const themes = Object.entries(options.themes).filter((i) => i[1]).map((i) => ({ color: i[0], theme: i[1] })).sort((a, b) => a.color === defaultColor ? -1 : b.color === defaultColor ? 1 : 0);\n if (themes.length === 0)\n throw new ShikiError$1(\"`themes` option must not be empty\");\n const themeTokens = codeToTokensWithThemes(\n internal,\n code,\n options\n );\n grammarState = getLastGrammarStateFromMap(themeTokens);\n if (defaultColor && DEFAULT_COLOR_LIGHT_DARK !== defaultColor && !themes.find((t) => t.color === defaultColor))\n throw new ShikiError$1(`\\`themes\\` option must contain the defaultColor key \\`${defaultColor}\\``);\n const themeRegs = themes.map((t) => internal.getTheme(t.theme));\n const themesOrder = themes.map((t) => t.color);\n tokens = themeTokens.map((line) => line.map((token) => flatTokenVariants(token, themesOrder, cssVariablePrefix, defaultColor, colorsRendering)));\n if (grammarState)\n setLastGrammarStateToMap(tokens, grammarState);\n const themeColorReplacements = themes.map((t) => resolveColorReplacements(t.theme, options));\n fg = mapThemeColors(themes, themeRegs, themeColorReplacements, cssVariablePrefix, defaultColor, \"fg\", colorsRendering);\n bg = mapThemeColors(themes, themeRegs, themeColorReplacements, cssVariablePrefix, defaultColor, \"bg\", colorsRendering);\n themeName = `shiki-themes ${themeRegs.map((t) => t.name).join(\" \")}`;\n rootStyle = defaultColor ? void 0 : [fg, bg].join(\";\");\n } else if (\"theme\" in options) {\n const colorReplacements = resolveColorReplacements(options.theme, options);\n tokens = codeToTokensBase(\n internal,\n code,\n options\n );\n const _theme = internal.getTheme(options.theme);\n bg = applyColorReplacements(_theme.bg, colorReplacements);\n fg = applyColorReplacements(_theme.fg, colorReplacements);\n themeName = _theme.name;\n grammarState = getLastGrammarStateFromMap(tokens);\n } else {\n throw new ShikiError$1(\"Invalid options, either `theme` or `themes` must be provided\");\n }\n return {\n tokens,\n fg,\n bg,\n themeName,\n rootStyle,\n grammarState\n };\n}\nfunction mapThemeColors(themes, themeRegs, themeColorReplacements, cssVariablePrefix, defaultColor, property, colorsRendering) {\n return themes.map((t, idx) => {\n const value = applyColorReplacements(themeRegs[idx][property], themeColorReplacements[idx]) || \"inherit\";\n const cssVar = `${cssVariablePrefix + t.color}${property === \"bg\" ? \"-bg\" : \"\"}:${value}`;\n if (idx === 0 && defaultColor) {\n if (defaultColor === DEFAULT_COLOR_LIGHT_DARK && themes.length > 1) {\n const lightIndex = themes.findIndex((t2) => t2.color === \"light\");\n const darkIndex = themes.findIndex((t2) => t2.color === \"dark\");\n if (lightIndex === -1 || darkIndex === -1)\n throw new ShikiError$1('When using `defaultColor: \"light-dark()\"`, you must provide both `light` and `dark` themes');\n const lightValue = applyColorReplacements(themeRegs[lightIndex][property], themeColorReplacements[lightIndex]) || \"inherit\";\n const darkValue = applyColorReplacements(themeRegs[darkIndex][property], themeColorReplacements[darkIndex]) || \"inherit\";\n return `light-dark(${lightValue}, ${darkValue});${cssVar}`;\n }\n return value;\n }\n if (colorsRendering === \"css-vars\") {\n return cssVar;\n }\n return null;\n }).filter((i) => !!i).join(\";\");\n}\n\nfunction codeToHast(internal, code, options, transformerContext = {\n meta: {},\n options,\n codeToHast: (_code, _options) => codeToHast(internal, _code, _options),\n codeToTokens: (_code, _options) => codeToTokens(internal, _code, _options)\n}) {\n let input = code;\n for (const transformer of getTransformers(options))\n input = transformer.preprocess?.call(transformerContext, input, options) || input;\n let {\n tokens,\n fg,\n bg,\n themeName,\n rootStyle,\n grammarState\n } = codeToTokens(internal, input, options);\n const {\n mergeWhitespaces = true,\n mergeSameStyleTokens = false\n } = options;\n if (mergeWhitespaces === true)\n tokens = mergeWhitespaceTokens(tokens);\n else if (mergeWhitespaces === \"never\")\n tokens = splitWhitespaceTokens(tokens);\n if (mergeSameStyleTokens) {\n tokens = mergeAdjacentStyledTokens(tokens);\n }\n const contextSource = {\n ...transformerContext,\n get source() {\n return input;\n }\n };\n for (const transformer of getTransformers(options))\n tokens = transformer.tokens?.call(contextSource, tokens) || tokens;\n return tokensToHast(\n tokens,\n {\n ...options,\n fg,\n bg,\n themeName,\n rootStyle: options.rootStyle === false ? false : options.rootStyle ?? rootStyle\n },\n contextSource,\n grammarState\n );\n}\nfunction tokensToHast(tokens, options, transformerContext, grammarState = getLastGrammarStateFromMap(tokens)) {\n const transformers = getTransformers(options);\n const lines = [];\n const root = {\n type: \"root\",\n children: []\n };\n const {\n structure = \"classic\",\n tabindex = \"0\"\n } = options;\n const properties = {\n class: `shiki ${options.themeName || \"\"}`\n };\n if (options.rootStyle !== false) {\n if (options.rootStyle != null)\n properties.style = options.rootStyle;\n else\n properties.style = `background-color:${options.bg};color:${options.fg}`;\n }\n if (tabindex !== false && tabindex != null)\n properties.tabindex = tabindex.toString();\n for (const [key, value] of Object.entries(options.meta || {})) {\n if (!key.startsWith(\"_\"))\n properties[key] = value;\n }\n let preNode = {\n type: \"element\",\n tagName: \"pre\",\n properties,\n children: [],\n data: options.data\n };\n let codeNode = {\n type: \"element\",\n tagName: \"code\",\n properties: {},\n children: lines\n };\n const lineNodes = [];\n const context = {\n ...transformerContext,\n structure,\n addClassToHast,\n get source() {\n return transformerContext.source;\n },\n get tokens() {\n return tokens;\n },\n get options() {\n return options;\n },\n get root() {\n return root;\n },\n get pre() {\n return preNode;\n },\n get code() {\n return codeNode;\n },\n get lines() {\n return lineNodes;\n }\n };\n tokens.forEach((line, idx) => {\n if (idx) {\n if (structure === \"inline\")\n root.children.push({ type: \"element\", tagName: \"br\", properties: {}, children: [] });\n else if (structure === \"classic\")\n lines.push({ type: \"text\", value: \"\\n\" });\n }\n let lineNode = {\n type: \"element\",\n tagName: \"span\",\n properties: { class: \"line\" },\n children: []\n };\n let col = 0;\n for (const token of line) {\n let tokenNode = {\n type: \"element\",\n tagName: \"span\",\n properties: {\n ...token.htmlAttrs\n },\n children: [{ type: \"text\", value: token.content }]\n };\n const style = stringifyTokenStyle(token.htmlStyle || getTokenStyleObject(token));\n if (style)\n tokenNode.properties.style = style;\n for (const transformer of transformers)\n tokenNode = transformer?.span?.call(context, tokenNode, idx + 1, col, lineNode, token) || tokenNode;\n if (structure === \"inline\")\n root.children.push(tokenNode);\n else if (structure === \"classic\")\n lineNode.children.push(tokenNode);\n col += token.content.length;\n }\n if (structure === \"classic\") {\n for (const transformer of transformers)\n lineNode = transformer?.line?.call(context, lineNode, idx + 1) || lineNode;\n lineNodes.push(lineNode);\n lines.push(lineNode);\n } else if (structure === \"inline\") {\n lineNodes.push(lineNode);\n }\n });\n if (structure === \"classic\") {\n for (const transformer of transformers)\n codeNode = transformer?.code?.call(context, codeNode) || codeNode;\n preNode.children.push(codeNode);\n for (const transformer of transformers)\n preNode = transformer?.pre?.call(context, preNode) || preNode;\n root.children.push(preNode);\n } else if (structure === \"inline\") {\n const syntheticLines = [];\n let currentLine = {\n type: \"element\",\n tagName: \"span\",\n properties: { class: \"line\" },\n children: []\n };\n for (const child of root.children) {\n if (child.type === \"element\" && child.tagName === \"br\") {\n syntheticLines.push(currentLine);\n currentLine = {\n type: \"element\",\n tagName: \"span\",\n properties: { class: \"line\" },\n children: []\n };\n } else if (child.type === \"element\" || child.type === \"text\") {\n currentLine.children.push(child);\n }\n }\n syntheticLines.push(currentLine);\n const syntheticCode = {\n type: \"element\",\n tagName: \"code\",\n properties: {},\n children: syntheticLines\n };\n let transformedCode = syntheticCode;\n for (const transformer of transformers)\n transformedCode = transformer?.code?.call(context, transformedCode) || transformedCode;\n root.children = [];\n for (let i = 0; i < transformedCode.children.length; i++) {\n if (i > 0)\n root.children.push({ type: \"element\", tagName: \"br\", properties: {}, children: [] });\n const line = transformedCode.children[i];\n if (line.type === \"element\")\n root.children.push(...line.children);\n }\n }\n let result = root;\n for (const transformer of transformers)\n result = transformer?.root?.call(context, result) || result;\n if (grammarState)\n setLastGrammarStateToMap(result, grammarState);\n return result;\n}\nfunction mergeWhitespaceTokens(tokens) {\n return tokens.map((line) => {\n const newLine = [];\n let carryOnContent = \"\";\n let firstOffset;\n line.forEach((token, idx) => {\n const isDecorated = token.fontStyle && (token.fontStyle & FontStyle.Underline || token.fontStyle & FontStyle.Strikethrough);\n const couldMerge = !isDecorated;\n if (couldMerge && token.content.match(/^\\s+$/) && line[idx + 1]) {\n if (firstOffset === void 0)\n firstOffset = token.offset;\n carryOnContent += token.content;\n } else {\n if (carryOnContent) {\n if (couldMerge) {\n newLine.push({\n ...token,\n offset: firstOffset,\n content: carryOnContent + token.content\n });\n } else {\n newLine.push(\n {\n content: carryOnContent,\n offset: firstOffset\n },\n token\n );\n }\n firstOffset = void 0;\n carryOnContent = \"\";\n } else {\n newLine.push(token);\n }\n }\n });\n return newLine;\n });\n}\nfunction splitWhitespaceTokens(tokens) {\n return tokens.map((line) => {\n return line.flatMap((token) => {\n if (token.content.match(/^\\s+$/))\n return token;\n const match = token.content.match(/^(\\s*)(.*?)(\\s*)$/);\n if (!match)\n return token;\n const [, leading, content, trailing] = match;\n if (!leading && !trailing)\n return token;\n const expanded = [{\n ...token,\n offset: token.offset + leading.length,\n content\n }];\n if (leading) {\n expanded.unshift({\n content: leading,\n offset: token.offset\n });\n }\n if (trailing) {\n expanded.push({\n content: trailing,\n offset: token.offset + leading.length + content.length\n });\n }\n return expanded;\n });\n });\n}\nfunction mergeAdjacentStyledTokens(tokens) {\n return tokens.map((line) => {\n const newLine = [];\n for (const token of line) {\n if (newLine.length === 0) {\n newLine.push({ ...token });\n continue;\n }\n const prevToken = newLine[newLine.length - 1];\n const prevStyle = stringifyTokenStyle(prevToken.htmlStyle || getTokenStyleObject(prevToken));\n const currentStyle = stringifyTokenStyle(token.htmlStyle || getTokenStyleObject(token));\n const isPrevDecorated = prevToken.fontStyle && (prevToken.fontStyle & FontStyle.Underline || prevToken.fontStyle & FontStyle.Strikethrough);\n const isDecorated = token.fontStyle && (token.fontStyle & FontStyle.Underline || token.fontStyle & FontStyle.Strikethrough);\n if (!isPrevDecorated && !isDecorated && prevStyle === currentStyle) {\n prevToken.content += token.content;\n } else {\n newLine.push({ ...token });\n }\n }\n return newLine;\n });\n}\n\nconst hastToHtml = toHtml;\nfunction codeToHtml(internal, code, options) {\n const context = {\n meta: {},\n options,\n codeToHast: (_code, _options) => codeToHast(internal, _code, _options),\n codeToTokens: (_code, _options) => codeToTokens(internal, _code, _options)\n };\n let result = hastToHtml(codeToHast(internal, code, options, context));\n for (const transformer of getTransformers(options))\n result = transformer.postprocess?.call(context, result, options) || result;\n return result;\n}\n\nconst VSCODE_FALLBACK_EDITOR_FG = { light: \"#333333\", dark: \"#bbbbbb\" };\nconst VSCODE_FALLBACK_EDITOR_BG = { light: \"#fffffe\", dark: \"#1e1e1e\" };\nconst RESOLVED_KEY = \"__shiki_resolved\";\nfunction normalizeTheme(rawTheme) {\n if (rawTheme?.[RESOLVED_KEY])\n return rawTheme;\n const theme = {\n ...rawTheme\n };\n if (theme.tokenColors && !theme.settings) {\n theme.settings = theme.tokenColors;\n delete theme.tokenColors;\n }\n theme.type ||= \"dark\";\n theme.colorReplacements = { ...theme.colorReplacements };\n theme.settings ||= [];\n let { bg, fg } = theme;\n if (!bg || !fg) {\n const globalSetting = theme.settings ? theme.settings.find((s) => !s.name && !s.scope) : void 0;\n if (globalSetting?.settings?.foreground)\n fg = globalSetting.settings.foreground;\n if (globalSetting?.settings?.background)\n bg = globalSetting.settings.background;\n if (!fg && theme?.colors?.[\"editor.foreground\"])\n fg = theme.colors[\"editor.foreground\"];\n if (!bg && theme?.colors?.[\"editor.background\"])\n bg = theme.colors[\"editor.background\"];\n if (!fg)\n fg = theme.type === \"light\" ? VSCODE_FALLBACK_EDITOR_FG.light : VSCODE_FALLBACK_EDITOR_FG.dark;\n if (!bg)\n bg = theme.type === \"light\" ? VSCODE_FALLBACK_EDITOR_BG.light : VSCODE_FALLBACK_EDITOR_BG.dark;\n theme.fg = fg;\n theme.bg = bg;\n }\n if (!(theme.settings[0] && theme.settings[0].settings && !theme.settings[0].scope)) {\n theme.settings.unshift({\n settings: {\n foreground: theme.fg,\n background: theme.bg\n }\n });\n }\n let replacementCount = 0;\n const replacementMap = /* @__PURE__ */ new Map();\n function getReplacementColor(value) {\n if (replacementMap.has(value))\n return replacementMap.get(value);\n replacementCount += 1;\n const hex = `#${replacementCount.toString(16).padStart(8, \"0\").toLowerCase()}`;\n if (theme.colorReplacements?.[`#${hex}`])\n return getReplacementColor(value);\n replacementMap.set(value, hex);\n return hex;\n }\n theme.settings = theme.settings.map((setting) => {\n const replaceFg = setting.settings?.foreground && !setting.settings.foreground.startsWith(\"#\");\n const replaceBg = setting.settings?.background && !setting.settings.background.startsWith(\"#\");\n if (!replaceFg && !replaceBg)\n return setting;\n const clone = {\n ...setting,\n settings: {\n ...setting.settings\n }\n };\n if (replaceFg) {\n const replacement = getReplacementColor(setting.settings.foreground);\n theme.colorReplacements[replacement] = setting.settings.foreground;\n clone.settings.foreground = replacement;\n }\n if (replaceBg) {\n const replacement = getReplacementColor(setting.settings.background);\n theme.colorReplacements[replacement] = setting.settings.background;\n clone.settings.background = replacement;\n }\n return clone;\n });\n for (const key of Object.keys(theme.colors || {})) {\n if (key === \"editor.foreground\" || key === \"editor.background\" || key.startsWith(\"terminal.ansi\")) {\n if (!theme.colors[key]?.startsWith(\"#\")) {\n const replacement = getReplacementColor(theme.colors[key]);\n theme.colorReplacements[replacement] = theme.colors[key];\n theme.colors[key] = replacement;\n }\n }\n }\n Object.defineProperty(theme, RESOLVED_KEY, {\n enumerable: false,\n writable: false,\n value: true\n });\n return theme;\n}\n\nasync function resolveLangs(langs) {\n return Array.from(new Set((await Promise.all(\n langs.filter((l) => !isSpecialLang(l)).map(async (lang) => await normalizeGetter(lang).then((r) => Array.isArray(r) ? r : [r]))\n )).flat()));\n}\nasync function resolveThemes(themes) {\n const resolved = await Promise.all(\n themes.map(\n async (theme) => isSpecialTheme(theme) ? null : normalizeTheme(await normalizeGetter(theme))\n )\n );\n return resolved.filter((i) => !!i);\n}\n\nlet _emitDeprecation = 3;\nlet _emitError = false;\nfunction enableDeprecationWarnings(emitDeprecation = true, emitError = false) {\n _emitDeprecation = emitDeprecation;\n _emitError = emitError;\n}\nfunction warnDeprecated(message, version = 3) {\n if (!_emitDeprecation)\n return;\n if (typeof _emitDeprecation === \"number\" && version > _emitDeprecation)\n return;\n if (_emitError) {\n throw new Error(`[SHIKI DEPRECATE]: ${message}`);\n } else {\n console.trace(`[SHIKI DEPRECATE]: ${message}`);\n }\n}\n\nclass ShikiError extends Error {\n constructor(message) {\n super(message);\n this.name = \"ShikiError\";\n }\n}\n\nfunction resolveLangAlias(name, alias) {\n if (!alias)\n return name;\n if (alias[name]) {\n const resolved = /* @__PURE__ */ new Set([name]);\n while (alias[name]) {\n name = alias[name];\n if (resolved.has(name))\n throw new ShikiError(`Circular alias \\`${Array.from(resolved).join(\" -> \")} -> ${name}\\``);\n resolved.add(name);\n }\n }\n return name;\n}\n\nclass Registry extends Registry$1 {\n constructor(_resolver, _themes, _langs, _alias = {}) {\n super(_resolver);\n this._resolver = _resolver;\n this._themes = _themes;\n this._langs = _langs;\n this._alias = _alias;\n this._themes.map((t) => this.loadTheme(t));\n this.loadLanguages(this._langs);\n }\n _resolvedThemes = /* @__PURE__ */ new Map();\n _resolvedGrammars = /* @__PURE__ */ new Map();\n _langMap = /* @__PURE__ */ new Map();\n _langGraph = /* @__PURE__ */ new Map();\n _textmateThemeCache = /* @__PURE__ */ new WeakMap();\n _loadedThemesCache = null;\n _loadedLanguagesCache = null;\n getTheme(theme) {\n if (typeof theme === \"string\")\n return this._resolvedThemes.get(theme);\n else\n return this.loadTheme(theme);\n }\n loadTheme(theme) {\n const _theme = normalizeTheme(theme);\n if (_theme.name) {\n this._resolvedThemes.set(_theme.name, _theme);\n this._loadedThemesCache = null;\n }\n return _theme;\n }\n getLoadedThemes() {\n if (!this._loadedThemesCache)\n this._loadedThemesCache = [...this._resolvedThemes.keys()];\n return this._loadedThemesCache;\n }\n // Override and re-implement this method to cache the textmate themes as `TextMateTheme.createFromRawTheme`\n // is expensive. Themes can switch often especially for dual-theme support.\n //\n // The parent class also accepts `colorMap` as the second parameter, but since we don't use that,\n // we omit here so it's easier to cache the themes.\n setTheme(theme) {\n let textmateTheme = this._textmateThemeCache.get(theme);\n if (!textmateTheme) {\n textmateTheme = Theme.createFromRawTheme(theme);\n this._textmateThemeCache.set(theme, textmateTheme);\n }\n this._syncRegistry.setTheme(textmateTheme);\n }\n getGrammar(name) {\n name = resolveLangAlias(name, this._alias);\n return this._resolvedGrammars.get(name);\n }\n loadLanguage(lang) {\n if (this.getGrammar(lang.name))\n return;\n const embeddedLazilyBy = new Set(\n [...this._langMap.values()].filter((i) => i.embeddedLangsLazy?.includes(lang.name))\n );\n this._resolver.addLanguage(lang);\n const grammarConfig = {\n balancedBracketSelectors: lang.balancedBracketSelectors || [\"*\"],\n unbalancedBracketSelectors: lang.unbalancedBracketSelectors || []\n };\n this._syncRegistry._rawGrammars.set(lang.scopeName, lang);\n const g = this.loadGrammarWithConfiguration(lang.scopeName, 1, grammarConfig);\n g.name = lang.name;\n this._resolvedGrammars.set(lang.name, g);\n if (lang.aliases) {\n lang.aliases.forEach((alias) => {\n this._alias[alias] = lang.name;\n });\n }\n this._loadedLanguagesCache = null;\n if (embeddedLazilyBy.size) {\n for (const e of embeddedLazilyBy) {\n this._resolvedGrammars.delete(e.name);\n this._loadedLanguagesCache = null;\n this._syncRegistry?._injectionGrammars?.delete(e.scopeName);\n this._syncRegistry?._grammars?.delete(e.scopeName);\n this.loadLanguage(this._langMap.get(e.name));\n }\n }\n }\n dispose() {\n super.dispose();\n this._resolvedThemes.clear();\n this._resolvedGrammars.clear();\n this._langMap.clear();\n this._langGraph.clear();\n this._loadedThemesCache = null;\n }\n loadLanguages(langs) {\n for (const lang of langs)\n this.resolveEmbeddedLanguages(lang);\n const langsGraphArray = Array.from(this._langGraph.entries());\n const missingLangs = langsGraphArray.filter(([_, lang]) => !lang);\n if (missingLangs.length) {\n const dependents = langsGraphArray.filter(([_, lang]) => {\n if (!lang)\n return false;\n const embedded = lang.embeddedLanguages || lang.embeddedLangs;\n return embedded?.some((l) => missingLangs.map(([name]) => name).includes(l));\n }).filter((lang) => !missingLangs.includes(lang));\n throw new ShikiError(`Missing languages ${missingLangs.map(([name]) => `\\`${name}\\``).join(\", \")}, required by ${dependents.map(([name]) => `\\`${name}\\``).join(\", \")}`);\n }\n for (const [_, lang] of langsGraphArray)\n this._resolver.addLanguage(lang);\n for (const [_, lang] of langsGraphArray)\n this.loadLanguage(lang);\n }\n getLoadedLanguages() {\n if (!this._loadedLanguagesCache) {\n this._loadedLanguagesCache = [\n .../* @__PURE__ */ new Set([...this._resolvedGrammars.keys(), ...Object.keys(this._alias)])\n ];\n }\n return this._loadedLanguagesCache;\n }\n resolveEmbeddedLanguages(lang) {\n this._langMap.set(lang.name, lang);\n this._langGraph.set(lang.name, lang);\n const embedded = lang.embeddedLanguages ?? lang.embeddedLangs;\n if (embedded) {\n for (const embeddedLang of embedded)\n this._langGraph.set(embeddedLang, this._langMap.get(embeddedLang));\n }\n }\n}\n\nclass Resolver {\n _langs = /* @__PURE__ */ new Map();\n _scopeToLang = /* @__PURE__ */ new Map();\n _injections = /* @__PURE__ */ new Map();\n _onigLib;\n constructor(engine, langs) {\n this._onigLib = {\n createOnigScanner: (patterns) => engine.createScanner(patterns),\n createOnigString: (s) => engine.createString(s)\n };\n langs.forEach((i) => this.addLanguage(i));\n }\n get onigLib() {\n return this._onigLib;\n }\n getLangRegistration(langIdOrAlias) {\n return this._langs.get(langIdOrAlias);\n }\n loadGrammar(scopeName) {\n return this._scopeToLang.get(scopeName);\n }\n addLanguage(l) {\n this._langs.set(l.name, l);\n if (l.aliases) {\n l.aliases.forEach((a) => {\n this._langs.set(a, l);\n });\n }\n this._scopeToLang.set(l.scopeName, l);\n if (l.injectTo) {\n l.injectTo.forEach((i) => {\n if (!this._injections.get(i))\n this._injections.set(i, []);\n this._injections.get(i).push(l.scopeName);\n });\n }\n }\n getInjections(scopeName) {\n const scopeParts = scopeName.split(\".\");\n let injections = [];\n for (let i = 1; i <= scopeParts.length; i++) {\n const subScopeName = scopeParts.slice(0, i).join(\".\");\n injections = [...injections, ...this._injections.get(subScopeName) || []];\n }\n return injections;\n }\n}\n\nlet instancesCount = 0;\nfunction createShikiInternalSync(options) {\n instancesCount += 1;\n if (options.warnings !== false && instancesCount >= 10 && instancesCount % 10 === 0)\n console.warn(`[Shiki] ${instancesCount} instances have been created. Shiki is supposed to be used as a singleton, consider refactoring your code to cache your highlighter instance; Or call \\`highlighter.dispose()\\` to release unused instances.`);\n let isDisposed = false;\n if (!options.engine)\n throw new ShikiError(\"`engine` option is required for synchronous mode\");\n const langs = (options.langs || []).flat(1);\n const themes = (options.themes || []).flat(1).map(normalizeTheme);\n const resolver = new Resolver(options.engine, langs);\n const _registry = new Registry(resolver, themes, langs, options.langAlias);\n let _lastTheme;\n function resolveLangAlias$1(name) {\n return resolveLangAlias(name, options.langAlias);\n }\n function getLanguage(name) {\n ensureNotDisposed();\n const _lang = _registry.getGrammar(typeof name === \"string\" ? name : name.name);\n if (!_lang)\n throw new ShikiError(`Language \\`${name}\\` not found, you may need to load it first`);\n return _lang;\n }\n function getTheme(name) {\n if (name === \"none\")\n return { bg: \"\", fg: \"\", name: \"none\", settings: [], type: \"dark\" };\n ensureNotDisposed();\n const _theme = _registry.getTheme(name);\n if (!_theme)\n throw new ShikiError(`Theme \\`${name}\\` not found, you may need to load it first`);\n return _theme;\n }\n function setTheme(name) {\n ensureNotDisposed();\n const theme = getTheme(name);\n if (_lastTheme !== name) {\n _registry.setTheme(theme);\n _lastTheme = name;\n }\n const colorMap = _registry.getColorMap();\n return {\n theme,\n colorMap\n };\n }\n function getLoadedThemes() {\n ensureNotDisposed();\n return _registry.getLoadedThemes();\n }\n function getLoadedLanguages() {\n ensureNotDisposed();\n return _registry.getLoadedLanguages();\n }\n function loadLanguageSync(...langs2) {\n ensureNotDisposed();\n _registry.loadLanguages(langs2.flat(1));\n }\n async function loadLanguage(...langs2) {\n return loadLanguageSync(await resolveLangs(langs2));\n }\n function loadThemeSync(...themes2) {\n ensureNotDisposed();\n for (const theme of themes2.flat(1)) {\n _registry.loadTheme(theme);\n }\n }\n async function loadTheme(...themes2) {\n ensureNotDisposed();\n return loadThemeSync(await resolveThemes(themes2));\n }\n function ensureNotDisposed() {\n if (isDisposed)\n throw new ShikiError(\"Shiki instance has been disposed\");\n }\n function dispose() {\n if (isDisposed)\n return;\n isDisposed = true;\n _registry.dispose();\n instancesCount -= 1;\n }\n return {\n setTheme,\n getTheme,\n getLanguage,\n getLoadedThemes,\n getLoadedLanguages,\n resolveLangAlias: resolveLangAlias$1,\n loadLanguage,\n loadLanguageSync,\n loadTheme,\n loadThemeSync,\n dispose,\n [Symbol.dispose]: dispose\n };\n}\n\nasync function createShikiInternal(options) {\n if (!options.engine) {\n warnDeprecated(\"`engine` option is required. Use `createOnigurumaEngine` or `createJavaScriptRegexEngine` to create an engine.\");\n }\n const [\n themes,\n langs,\n engine\n ] = await Promise.all([\n resolveThemes(options.themes || []),\n resolveLangs(options.langs || []),\n options.engine\n ]);\n return createShikiInternalSync({\n ...options,\n themes,\n langs,\n engine\n });\n}\n\nasync function createHighlighterCore(options) {\n const internal = await createShikiInternal(options);\n return {\n getLastGrammarState: (...args) => getLastGrammarState(internal, ...args),\n codeToTokensBase: (code, options2) => codeToTokensBase(internal, code, options2),\n codeToTokensWithThemes: (code, options2) => codeToTokensWithThemes(internal, code, options2),\n codeToTokens: (code, options2) => codeToTokens(internal, code, options2),\n codeToHast: (code, options2) => codeToHast(internal, code, options2),\n codeToHtml: (code, options2) => codeToHtml(internal, code, options2),\n getBundledLanguages: () => ({}),\n getBundledThemes: () => ({}),\n ...internal,\n getInternalContext: () => internal\n };\n}\nfunction createHighlighterCoreSync(options) {\n const internal = createShikiInternalSync(options);\n return {\n getLastGrammarState: (...args) => getLastGrammarState(internal, ...args),\n codeToTokensBase: (code, options2) => codeToTokensBase(internal, code, options2),\n codeToTokensWithThemes: (code, options2) => codeToTokensWithThemes(internal, code, options2),\n codeToTokens: (code, options2) => codeToTokens(internal, code, options2),\n codeToHast: (code, options2) => codeToHast(internal, code, options2),\n codeToHtml: (code, options2) => codeToHtml(internal, code, options2),\n getBundledLanguages: () => ({}),\n getBundledThemes: () => ({}),\n ...internal,\n getInternalContext: () => internal\n };\n}\nfunction makeSingletonHighlighterCore(createHighlighter) {\n let _shiki;\n async function getSingletonHighlighterCore2(options) {\n if (!_shiki) {\n _shiki = createHighlighter({\n ...options,\n themes: options.themes || [],\n langs: options.langs || []\n });\n return _shiki;\n } else {\n const s = await _shiki;\n await Promise.all([\n s.loadTheme(...options.themes || []),\n s.loadLanguage(...options.langs || [])\n ]);\n return s;\n }\n }\n return getSingletonHighlighterCore2;\n}\nconst getSingletonHighlighterCore = /* @__PURE__ */ makeSingletonHighlighterCore(createHighlighterCore);\n\nfunction createBundledHighlighter(options) {\n const bundledLanguages = options.langs;\n const bundledThemes = options.themes;\n const engine = options.engine;\n async function createHighlighter(options2) {\n function resolveLang(lang) {\n if (typeof lang === \"string\") {\n lang = options2.langAlias?.[lang] || lang;\n if (isSpecialLang(lang))\n return [];\n const bundle = bundledLanguages[lang];\n if (!bundle)\n throw new ShikiError$1(`Language \\`${lang}\\` is not included in this bundle. You may want to load it from external source.`);\n return bundle;\n }\n return lang;\n }\n function resolveTheme(theme) {\n if (isSpecialTheme(theme))\n return \"none\";\n if (typeof theme === \"string\") {\n const bundle = bundledThemes[theme];\n if (!bundle)\n throw new ShikiError$1(`Theme \\`${theme}\\` is not included in this bundle. You may want to load it from external source.`);\n return bundle;\n }\n return theme;\n }\n const _themes = (options2.themes ?? []).map((i) => resolveTheme(i));\n const langs = (options2.langs ?? []).map((i) => resolveLang(i));\n const core = await createHighlighterCore({\n engine: options2.engine ?? engine(),\n ...options2,\n themes: _themes,\n langs\n });\n return {\n ...core,\n loadLanguage(...langs2) {\n return core.loadLanguage(...langs2.map(resolveLang));\n },\n loadTheme(...themes) {\n return core.loadTheme(...themes.map(resolveTheme));\n },\n getBundledLanguages() {\n return bundledLanguages;\n },\n getBundledThemes() {\n return bundledThemes;\n }\n };\n }\n return createHighlighter;\n}\nfunction makeSingletonHighlighter(createHighlighter) {\n let _shiki;\n async function getSingletonHighlighter(options = {}) {\n if (!_shiki) {\n _shiki = createHighlighter({\n ...options,\n themes: [],\n langs: []\n });\n const s = await _shiki;\n await Promise.all([\n s.loadTheme(...options.themes || []),\n s.loadLanguage(...options.langs || [])\n ]);\n return s;\n } else {\n const s = await _shiki;\n await Promise.all([\n s.loadTheme(...options.themes || []),\n s.loadLanguage(...options.langs || [])\n ]);\n return s;\n }\n }\n return getSingletonHighlighter;\n}\nfunction createSingletonShorthands(createHighlighter, config) {\n const getSingletonHighlighter = makeSingletonHighlighter(createHighlighter);\n async function get(code, options) {\n const shiki = await getSingletonHighlighter({\n langs: [options.lang],\n themes: \"theme\" in options ? [options.theme] : Object.values(options.themes)\n });\n const langs = await config?.guessEmbeddedLanguages?.(code, options.lang, shiki);\n if (langs) {\n await shiki.loadLanguage(...langs);\n }\n return shiki;\n }\n return {\n getSingletonHighlighter(options) {\n return getSingletonHighlighter(options);\n },\n async codeToHtml(code, options) {\n const shiki = await get(code, options);\n return shiki.codeToHtml(code, options);\n },\n async codeToHast(code, options) {\n const shiki = await get(code, options);\n return shiki.codeToHast(code, options);\n },\n async codeToTokens(code, options) {\n const shiki = await get(code, options);\n return shiki.codeToTokens(code, options);\n },\n async codeToTokensBase(code, options) {\n const shiki = await get(code, options);\n return shiki.codeToTokensBase(code, options);\n },\n async codeToTokensWithThemes(code, options) {\n const shiki = await get(code, options);\n return shiki.codeToTokensWithThemes(code, options);\n },\n async getLastGrammarState(code, options) {\n const shiki = await getSingletonHighlighter({\n langs: [options.lang],\n themes: [options.theme]\n });\n return shiki.getLastGrammarState(code, options);\n }\n };\n}\nconst createdBundledHighlighter = createBundledHighlighter;\n\nfunction createCssVariablesTheme(options = {}) {\n const {\n name = \"css-variables\",\n variablePrefix = \"--shiki-\",\n fontStyle = true\n } = options;\n const variable = (name2) => {\n if (options.variableDefaults?.[name2])\n return `var(${variablePrefix}${name2}, ${options.variableDefaults[name2]})`;\n return `var(${variablePrefix}${name2})`;\n };\n const theme = {\n name,\n type: \"dark\",\n colors: {\n \"editor.foreground\": variable(\"foreground\"),\n \"editor.background\": variable(\"background\"),\n \"terminal.ansiBlack\": variable(\"ansi-black\"),\n \"terminal.ansiRed\": variable(\"ansi-red\"),\n \"terminal.ansiGreen\": variable(\"ansi-green\"),\n \"terminal.ansiYellow\": variable(\"ansi-yellow\"),\n \"terminal.ansiBlue\": variable(\"ansi-blue\"),\n \"terminal.ansiMagenta\": variable(\"ansi-magenta\"),\n \"terminal.ansiCyan\": variable(\"ansi-cyan\"),\n \"terminal.ansiWhite\": variable(\"ansi-white\"),\n \"terminal.ansiBrightBlack\": variable(\"ansi-bright-black\"),\n \"terminal.ansiBrightRed\": variable(\"ansi-bright-red\"),\n \"terminal.ansiBrightGreen\": variable(\"ansi-bright-green\"),\n \"terminal.ansiBrightYellow\": variable(\"ansi-bright-yellow\"),\n \"terminal.ansiBrightBlue\": variable(\"ansi-bright-blue\"),\n \"terminal.ansiBrightMagenta\": variable(\"ansi-bright-magenta\"),\n \"terminal.ansiBrightCyan\": variable(\"ansi-bright-cyan\"),\n \"terminal.ansiBrightWhite\": variable(\"ansi-bright-white\")\n },\n tokenColors: [\n {\n scope: [\n \"keyword.operator.accessor\",\n \"meta.group.braces.round.function.arguments\",\n \"meta.template.expression\",\n \"markup.fenced_code meta.embedded.block\"\n ],\n settings: {\n foreground: variable(\"foreground\")\n }\n },\n {\n scope: \"emphasis\",\n settings: {\n fontStyle: \"italic\"\n }\n },\n {\n scope: [\"strong\", \"markup.heading.markdown\", \"markup.bold.markdown\"],\n settings: {\n fontStyle: \"bold\"\n }\n },\n {\n scope: [\"markup.italic.markdown\"],\n settings: {\n fontStyle: \"italic\"\n }\n },\n {\n scope: \"meta.link.inline.markdown\",\n settings: {\n fontStyle: \"underline\",\n foreground: variable(\"token-link\")\n }\n },\n {\n scope: [\"string\", \"markup.fenced_code\", \"markup.inline\"],\n settings: {\n foreground: variable(\"token-string\")\n }\n },\n {\n scope: [\"comment\", \"string.quoted.docstring.multi\"],\n settings: {\n foreground: variable(\"token-comment\")\n }\n },\n {\n scope: [\n \"constant.numeric\",\n \"constant.language\",\n \"constant.other.placeholder\",\n \"constant.character.format.placeholder\",\n \"variable.language.this\",\n \"variable.other.object\",\n \"variable.other.class\",\n \"variable.other.constant\",\n \"meta.property-name\",\n \"meta.property-value\",\n \"support\"\n ],\n settings: {\n foreground: variable(\"token-constant\")\n }\n },\n {\n scope: [\n \"keyword\",\n \"storage.modifier\",\n \"storage.type\",\n \"storage.control.clojure\",\n \"entity.name.function.clojure\",\n \"entity.name.tag.yaml\",\n \"support.function.node\",\n \"support.type.property-name.json\",\n \"punctuation.separator.key-value\",\n \"punctuation.definition.template-expression\"\n ],\n settings: {\n foreground: variable(\"token-keyword\")\n }\n },\n {\n scope: \"variable.parameter.function\",\n settings: {\n foreground: variable(\"token-parameter\")\n }\n },\n {\n scope: [\n \"support.function\",\n \"entity.name.type\",\n \"entity.other.inherited-class\",\n \"meta.function-call\",\n \"meta.instance.constructor\",\n \"entity.other.attribute-name\",\n \"entity.name.function\",\n \"constant.keyword.clojure\"\n ],\n settings: {\n foreground: variable(\"token-function\")\n }\n },\n {\n scope: [\n \"entity.name.tag\",\n \"string.quoted\",\n \"string.regexp\",\n \"string.interpolated\",\n \"string.template\",\n \"string.unquoted.plain.out.yaml\",\n \"keyword.other.template\"\n ],\n settings: {\n foreground: variable(\"token-string-expression\")\n }\n },\n {\n scope: [\n \"punctuation.definition.arguments\",\n \"punctuation.definition.dict\",\n \"punctuation.separator\",\n \"meta.function-call.arguments\"\n ],\n settings: {\n foreground: variable(\"token-punctuation\")\n }\n },\n {\n // [Custom] Markdown links\n scope: [\n \"markup.underline.link\",\n \"punctuation.definition.metadata.markdown\"\n ],\n settings: {\n foreground: variable(\"token-link\")\n }\n },\n {\n // [Custom] Markdown list\n scope: [\"beginning.punctuation.definition.list.markdown\"],\n settings: {\n foreground: variable(\"token-string\")\n }\n },\n {\n // [Custom] Markdown punctuation definition brackets\n scope: [\n \"punctuation.definition.string.begin.markdown\",\n \"punctuation.definition.string.end.markdown\",\n \"string.other.link.title.markdown\",\n \"string.other.link.description.markdown\"\n ],\n settings: {\n foreground: variable(\"token-keyword\")\n }\n },\n {\n // [Custom] Diff\n scope: [\n \"markup.inserted\",\n \"meta.diff.header.to-file\",\n \"punctuation.definition.inserted\"\n ],\n settings: {\n foreground: variable(\"token-inserted\")\n }\n },\n {\n scope: [\n \"markup.deleted\",\n \"meta.diff.header.from-file\",\n \"punctuation.definition.deleted\"\n ],\n settings: {\n foreground: variable(\"token-deleted\")\n }\n },\n {\n scope: [\n \"markup.changed\",\n \"punctuation.definition.changed\"\n ],\n settings: {\n foreground: variable(\"token-changed\")\n }\n }\n ]\n };\n if (!fontStyle) {\n theme.tokenColors = theme.tokenColors?.map((tokenColor) => {\n if (tokenColor.settings?.fontStyle)\n delete tokenColor.settings.fontStyle;\n return tokenColor;\n });\n }\n return theme;\n}\n\nexport { addClassToHast, applyColorReplacements, codeToHast, codeToHtml, codeToTokens, codeToTokensBase, codeToTokensWithThemes, createBundledHighlighter, createCssVariablesTheme, createHighlighterCore, createHighlighterCoreSync, createPositionConverter, createShikiInternal, createShikiInternalSync, createSingletonShorthands, createdBundledHighlighter, enableDeprecationWarnings, flatTokenVariants, getSingletonHighlighterCore, getTokenStyleObject, guessEmbeddedLanguages, hastToHtml, isNoneTheme, isPlainLang, isSpecialLang, isSpecialTheme, makeSingletonHighlighter, makeSingletonHighlighterCore, normalizeGetter, normalizeTheme, resolveColorReplacements, splitLines, splitToken, splitTokens, stringifyTokenStyle, toArray, tokenizeAnsiWithTheme, tokenizeWithTheme, tokensToHast, transformerDecorations, warnDeprecated };\n","const bundledLanguagesInfo = [\n {\n \"id\": \"abap\",\n \"name\": \"ABAP\",\n \"import\": (() => import('@shikijs/langs/abap'))\n },\n {\n \"id\": \"actionscript-3\",\n \"name\": \"ActionScript\",\n \"import\": (() => import('@shikijs/langs/actionscript-3'))\n },\n {\n \"id\": \"ada\",\n \"name\": \"Ada\",\n \"import\": (() => import('@shikijs/langs/ada'))\n },\n {\n \"id\": \"angular-html\",\n \"name\": \"Angular HTML\",\n \"import\": (() => import('@shikijs/langs/angular-html'))\n },\n {\n \"id\": \"angular-ts\",\n \"name\": \"Angular TypeScript\",\n \"import\": (() => import('@shikijs/langs/angular-ts'))\n },\n {\n \"id\": \"apache\",\n \"name\": \"Apache Conf\",\n \"import\": (() => import('@shikijs/langs/apache'))\n },\n {\n \"id\": \"apex\",\n \"name\": \"Apex\",\n \"import\": (() => import('@shikijs/langs/apex'))\n },\n {\n \"id\": \"apl\",\n \"name\": \"APL\",\n \"import\": (() => import('@shikijs/langs/apl'))\n },\n {\n \"id\": \"applescript\",\n \"name\": \"AppleScript\",\n \"import\": (() => import('@shikijs/langs/applescript'))\n },\n {\n \"id\": \"ara\",\n \"name\": \"Ara\",\n \"import\": (() => import('@shikijs/langs/ara'))\n },\n {\n \"id\": \"asciidoc\",\n \"name\": \"AsciiDoc\",\n \"aliases\": [\n \"adoc\"\n ],\n \"import\": (() => import('@shikijs/langs/asciidoc'))\n },\n {\n \"id\": \"asm\",\n \"name\": \"Assembly\",\n \"import\": (() => import('@shikijs/langs/asm'))\n },\n {\n \"id\": \"astro\",\n \"name\": \"Astro\",\n \"import\": (() => import('@shikijs/langs/astro'))\n },\n {\n \"id\": \"awk\",\n \"name\": \"AWK\",\n \"import\": (() => import('@shikijs/langs/awk'))\n },\n {\n \"id\": \"ballerina\",\n \"name\": \"Ballerina\",\n \"import\": (() => import('@shikijs/langs/ballerina'))\n },\n {\n \"id\": \"bat\",\n \"name\": \"Batch File\",\n \"aliases\": [\n \"batch\"\n ],\n \"import\": (() => import('@shikijs/langs/bat'))\n },\n {\n \"id\": \"beancount\",\n \"name\": \"Beancount\",\n \"import\": (() => import('@shikijs/langs/beancount'))\n },\n {\n \"id\": \"berry\",\n \"name\": \"Berry\",\n \"aliases\": [\n \"be\"\n ],\n \"import\": (() => import('@shikijs/langs/berry'))\n },\n {\n \"id\": \"bibtex\",\n \"name\": \"BibTeX\",\n \"import\": (() => import('@shikijs/langs/bibtex'))\n },\n {\n \"id\": \"bicep\",\n \"name\": \"Bicep\",\n \"import\": (() => import('@shikijs/langs/bicep'))\n },\n {\n \"id\": \"blade\",\n \"name\": \"Blade\",\n \"import\": (() => import('@shikijs/langs/blade'))\n },\n {\n \"id\": \"bsl\",\n \"name\": \"1C (Enterprise)\",\n \"aliases\": [\n \"1c\"\n ],\n \"import\": (() => import('@shikijs/langs/bsl'))\n },\n {\n \"id\": \"c\",\n \"name\": \"C\",\n \"import\": (() => import('@shikijs/langs/c'))\n },\n {\n \"id\": \"c3\",\n \"name\": \"C3\",\n \"import\": (() => import('@shikijs/langs/c3'))\n },\n {\n \"id\": \"cadence\",\n \"name\": \"Cadence\",\n \"aliases\": [\n \"cdc\"\n ],\n \"import\": (() => import('@shikijs/langs/cadence'))\n },\n {\n \"id\": \"cairo\",\n \"name\": \"Cairo\",\n \"import\": (() => import('@shikijs/langs/cairo'))\n },\n {\n \"id\": \"clarity\",\n \"name\": \"Clarity\",\n \"import\": (() => import('@shikijs/langs/clarity'))\n },\n {\n \"id\": \"clojure\",\n \"name\": \"Clojure\",\n \"aliases\": [\n \"clj\"\n ],\n \"import\": (() => import('@shikijs/langs/clojure'))\n },\n {\n \"id\": \"cmake\",\n \"name\": \"CMake\",\n \"import\": (() => import('@shikijs/langs/cmake'))\n },\n {\n \"id\": \"cobol\",\n \"name\": \"COBOL\",\n \"import\": (() => import('@shikijs/langs/cobol'))\n },\n {\n \"id\": \"codeowners\",\n \"name\": \"CODEOWNERS\",\n \"import\": (() => import('@shikijs/langs/codeowners'))\n },\n {\n \"id\": \"codeql\",\n \"name\": \"CodeQL\",\n \"aliases\": [\n \"ql\"\n ],\n \"import\": (() => import('@shikijs/langs/codeql'))\n },\n {\n \"id\": \"coffee\",\n \"name\": \"CoffeeScript\",\n \"aliases\": [\n \"coffeescript\"\n ],\n \"import\": (() => import('@shikijs/langs/coffee'))\n },\n {\n \"id\": \"common-lisp\",\n \"name\": \"Common Lisp\",\n \"aliases\": [\n \"lisp\"\n ],\n \"import\": (() => import('@shikijs/langs/common-lisp'))\n },\n {\n \"id\": \"coq\",\n \"name\": \"Coq\",\n \"import\": (() => import('@shikijs/langs/coq'))\n },\n {\n \"id\": \"cpp\",\n \"name\": \"C++\",\n \"aliases\": [\n \"c++\"\n ],\n \"import\": (() => import('@shikijs/langs/cpp'))\n },\n {\n \"id\": \"crystal\",\n \"name\": \"Crystal\",\n \"import\": (() => import('@shikijs/langs/crystal'))\n },\n {\n \"id\": \"csharp\",\n \"name\": \"C#\",\n \"aliases\": [\n \"c#\",\n \"cs\"\n ],\n \"import\": (() => import('@shikijs/langs/csharp'))\n },\n {\n \"id\": \"css\",\n \"name\": \"CSS\",\n \"import\": (() => import('@shikijs/langs/css'))\n },\n {\n \"id\": \"csv\",\n \"name\": \"CSV\",\n \"import\": (() => import('@shikijs/langs/csv'))\n },\n {\n \"id\": \"cue\",\n \"name\": \"CUE\",\n \"import\": (() => import('@shikijs/langs/cue'))\n },\n {\n \"id\": \"cypher\",\n \"name\": \"Cypher\",\n \"aliases\": [\n \"cql\"\n ],\n \"import\": (() => import('@shikijs/langs/cypher'))\n },\n {\n \"id\": \"d\",\n \"name\": \"D\",\n \"import\": (() => import('@shikijs/langs/d'))\n },\n {\n \"id\": \"dart\",\n \"name\": \"Dart\",\n \"import\": (() => import('@shikijs/langs/dart'))\n },\n {\n \"id\": \"dax\",\n \"name\": \"DAX\",\n \"import\": (() => import('@shikijs/langs/dax'))\n },\n {\n \"id\": \"desktop\",\n \"name\": \"Desktop\",\n \"import\": (() => import('@shikijs/langs/desktop'))\n },\n {\n \"id\": \"diff\",\n \"name\": \"Diff\",\n \"import\": (() => import('@shikijs/langs/diff'))\n },\n {\n \"id\": \"docker\",\n \"name\": \"Dockerfile\",\n \"aliases\": [\n \"dockerfile\"\n ],\n \"import\": (() => import('@shikijs/langs/docker'))\n },\n {\n \"id\": \"dotenv\",\n \"name\": \"dotEnv\",\n \"import\": (() => import('@shikijs/langs/dotenv'))\n },\n {\n \"id\": \"dream-maker\",\n \"name\": \"Dream Maker\",\n \"import\": (() => import('@shikijs/langs/dream-maker'))\n },\n {\n \"id\": \"edge\",\n \"name\": \"Edge\",\n \"import\": (() => import('@shikijs/langs/edge'))\n },\n {\n \"id\": \"elixir\",\n \"name\": \"Elixir\",\n \"import\": (() => import('@shikijs/langs/elixir'))\n },\n {\n \"id\": \"elm\",\n \"name\": \"Elm\",\n \"import\": (() => import('@shikijs/langs/elm'))\n },\n {\n \"id\": \"emacs-lisp\",\n \"name\": \"Emacs Lisp\",\n \"aliases\": [\n \"elisp\"\n ],\n \"import\": (() => import('@shikijs/langs/emacs-lisp'))\n },\n {\n \"id\": \"erb\",\n \"name\": \"ERB\",\n \"import\": (() => import('@shikijs/langs/erb'))\n },\n {\n \"id\": \"erlang\",\n \"name\": \"Erlang\",\n \"aliases\": [\n \"erl\"\n ],\n \"import\": (() => import('@shikijs/langs/erlang'))\n },\n {\n \"id\": \"fennel\",\n \"name\": \"Fennel\",\n \"import\": (() => import('@shikijs/langs/fennel'))\n },\n {\n \"id\": \"fish\",\n \"name\": \"Fish\",\n \"import\": (() => import('@shikijs/langs/fish'))\n },\n {\n \"id\": \"fluent\",\n \"name\": \"Fluent\",\n \"aliases\": [\n \"ftl\"\n ],\n \"import\": (() => import('@shikijs/langs/fluent'))\n },\n {\n \"id\": \"fortran-fixed-form\",\n \"name\": \"Fortran (Fixed Form)\",\n \"aliases\": [\n \"f\",\n \"for\",\n \"f77\"\n ],\n \"import\": (() => import('@shikijs/langs/fortran-fixed-form'))\n },\n {\n \"id\": \"fortran-free-form\",\n \"name\": \"Fortran (Free Form)\",\n \"aliases\": [\n \"f90\",\n \"f95\",\n \"f03\",\n \"f08\",\n \"f18\"\n ],\n \"import\": (() => import('@shikijs/langs/fortran-free-form'))\n },\n {\n \"id\": \"fsharp\",\n \"name\": \"F#\",\n \"aliases\": [\n \"f#\",\n \"fs\"\n ],\n \"import\": (() => import('@shikijs/langs/fsharp'))\n },\n {\n \"id\": \"gdresource\",\n \"name\": \"GDResource\",\n \"aliases\": [\n \"tscn\",\n \"tres\"\n ],\n \"import\": (() => import('@shikijs/langs/gdresource'))\n },\n {\n \"id\": \"gdscript\",\n \"name\": \"GDScript\",\n \"aliases\": [\n \"gd\"\n ],\n \"import\": (() => import('@shikijs/langs/gdscript'))\n },\n {\n \"id\": \"gdshader\",\n \"name\": \"GDShader\",\n \"import\": (() => import('@shikijs/langs/gdshader'))\n },\n {\n \"id\": \"genie\",\n \"name\": \"Genie\",\n \"import\": (() => import('@shikijs/langs/genie'))\n },\n {\n \"id\": \"gherkin\",\n \"name\": \"Gherkin\",\n \"import\": (() => import('@shikijs/langs/gherkin'))\n },\n {\n \"id\": \"git-commit\",\n \"name\": \"Git Commit Message\",\n \"import\": (() => import('@shikijs/langs/git-commit'))\n },\n {\n \"id\": \"git-rebase\",\n \"name\": \"Git Rebase Message\",\n \"import\": (() => import('@shikijs/langs/git-rebase'))\n },\n {\n \"id\": \"gleam\",\n \"name\": \"Gleam\",\n \"import\": (() => import('@shikijs/langs/gleam'))\n },\n {\n \"id\": \"glimmer-js\",\n \"name\": \"Glimmer JS\",\n \"aliases\": [\n \"gjs\"\n ],\n \"import\": (() => import('@shikijs/langs/glimmer-js'))\n },\n {\n \"id\": \"glimmer-ts\",\n \"name\": \"Glimmer TS\",\n \"aliases\": [\n \"gts\"\n ],\n \"import\": (() => import('@shikijs/langs/glimmer-ts'))\n },\n {\n \"id\": \"glsl\",\n \"name\": \"GLSL\",\n \"import\": (() => import('@shikijs/langs/glsl'))\n },\n {\n \"id\": \"gn\",\n \"name\": \"GN\",\n \"import\": (() => import('@shikijs/langs/gn'))\n },\n {\n \"id\": \"gnuplot\",\n \"name\": \"Gnuplot\",\n \"import\": (() => import('@shikijs/langs/gnuplot'))\n },\n {\n \"id\": \"go\",\n \"name\": \"Go\",\n \"import\": (() => import('@shikijs/langs/go'))\n },\n {\n \"id\": \"graphql\",\n \"name\": \"GraphQL\",\n \"aliases\": [\n \"gql\"\n ],\n \"import\": (() => import('@shikijs/langs/graphql'))\n },\n {\n \"id\": \"groovy\",\n \"name\": \"Groovy\",\n \"import\": (() => import('@shikijs/langs/groovy'))\n },\n {\n \"id\": \"hack\",\n \"name\": \"Hack\",\n \"import\": (() => import('@shikijs/langs/hack'))\n },\n {\n \"id\": \"haml\",\n \"name\": \"Ruby Haml\",\n \"import\": (() => import('@shikijs/langs/haml'))\n },\n {\n \"id\": \"handlebars\",\n \"name\": \"Handlebars\",\n \"aliases\": [\n \"hbs\"\n ],\n \"import\": (() => import('@shikijs/langs/handlebars'))\n },\n {\n \"id\": \"haskell\",\n \"name\": \"Haskell\",\n \"aliases\": [\n \"hs\"\n ],\n \"import\": (() => import('@shikijs/langs/haskell'))\n },\n {\n \"id\": \"haxe\",\n \"name\": \"Haxe\",\n \"import\": (() => import('@shikijs/langs/haxe'))\n },\n {\n \"id\": \"hcl\",\n \"name\": \"HashiCorp HCL\",\n \"import\": (() => import('@shikijs/langs/hcl'))\n },\n {\n \"id\": \"hjson\",\n \"name\": \"Hjson\",\n \"import\": (() => import('@shikijs/langs/hjson'))\n },\n {\n \"id\": \"hlsl\",\n \"name\": \"HLSL\",\n \"import\": (() => import('@shikijs/langs/hlsl'))\n },\n {\n \"id\": \"html\",\n \"name\": \"HTML\",\n \"import\": (() => import('@shikijs/langs/html'))\n },\n {\n \"id\": \"html-derivative\",\n \"name\": \"HTML (Derivative)\",\n \"import\": (() => import('@shikijs/langs/html-derivative'))\n },\n {\n \"id\": \"http\",\n \"name\": \"HTTP\",\n \"import\": (() => import('@shikijs/langs/http'))\n },\n {\n \"id\": \"hurl\",\n \"name\": \"Hurl\",\n \"import\": (() => import('@shikijs/langs/hurl'))\n },\n {\n \"id\": \"hxml\",\n \"name\": \"HXML\",\n \"import\": (() => import('@shikijs/langs/hxml'))\n },\n {\n \"id\": \"hy\",\n \"name\": \"Hy\",\n \"import\": (() => import('@shikijs/langs/hy'))\n },\n {\n \"id\": \"imba\",\n \"name\": \"Imba\",\n \"import\": (() => import('@shikijs/langs/imba'))\n },\n {\n \"id\": \"ini\",\n \"name\": \"INI\",\n \"aliases\": [\n \"properties\"\n ],\n \"import\": (() => import('@shikijs/langs/ini'))\n },\n {\n \"id\": \"java\",\n \"name\": \"Java\",\n \"import\": (() => import('@shikijs/langs/java'))\n },\n {\n \"id\": \"javascript\",\n \"name\": \"JavaScript\",\n \"aliases\": [\n \"js\",\n \"cjs\",\n \"mjs\"\n ],\n \"import\": (() => import('@shikijs/langs/javascript'))\n },\n {\n \"id\": \"jinja\",\n \"name\": \"Jinja\",\n \"import\": (() => import('@shikijs/langs/jinja'))\n },\n {\n \"id\": \"jison\",\n \"name\": \"Jison\",\n \"import\": (() => import('@shikijs/langs/jison'))\n },\n {\n \"id\": \"json\",\n \"name\": \"JSON\",\n \"import\": (() => import('@shikijs/langs/json'))\n },\n {\n \"id\": \"json5\",\n \"name\": \"JSON5\",\n \"import\": (() => import('@shikijs/langs/json5'))\n },\n {\n \"id\": \"jsonc\",\n \"name\": \"JSON with Comments\",\n \"import\": (() => import('@shikijs/langs/jsonc'))\n },\n {\n \"id\": \"jsonl\",\n \"name\": \"JSON Lines\",\n \"import\": (() => import('@shikijs/langs/jsonl'))\n },\n {\n \"id\": \"jsonnet\",\n \"name\": \"Jsonnet\",\n \"import\": (() => import('@shikijs/langs/jsonnet'))\n },\n {\n \"id\": \"jssm\",\n \"name\": \"JSSM\",\n \"aliases\": [\n \"fsl\"\n ],\n \"import\": (() => import('@shikijs/langs/jssm'))\n },\n {\n \"id\": \"jsx\",\n \"name\": \"JSX\",\n \"import\": (() => import('@shikijs/langs/jsx'))\n },\n {\n \"id\": \"julia\",\n \"name\": \"Julia\",\n \"aliases\": [\n \"jl\"\n ],\n \"import\": (() => import('@shikijs/langs/julia'))\n },\n {\n \"id\": \"kdl\",\n \"name\": \"KDL\",\n \"import\": (() => import('@shikijs/langs/kdl'))\n },\n {\n \"id\": \"kotlin\",\n \"name\": \"Kotlin\",\n \"aliases\": [\n \"kt\",\n \"kts\"\n ],\n \"import\": (() => import('@shikijs/langs/kotlin'))\n },\n {\n \"id\": \"kusto\",\n \"name\": \"Kusto\",\n \"aliases\": [\n \"kql\"\n ],\n \"import\": (() => import('@shikijs/langs/kusto'))\n },\n {\n \"id\": \"latex\",\n \"name\": \"LaTeX\",\n \"import\": (() => import('@shikijs/langs/latex'))\n },\n {\n \"id\": \"lean\",\n \"name\": \"Lean 4\",\n \"aliases\": [\n \"lean4\"\n ],\n \"import\": (() => import('@shikijs/langs/lean'))\n },\n {\n \"id\": \"less\",\n \"name\": \"Less\",\n \"import\": (() => import('@shikijs/langs/less'))\n },\n {\n \"id\": \"liquid\",\n \"name\": \"Liquid\",\n \"import\": (() => import('@shikijs/langs/liquid'))\n },\n {\n \"id\": \"llvm\",\n \"name\": \"LLVM IR\",\n \"import\": (() => import('@shikijs/langs/llvm'))\n },\n {\n \"id\": \"log\",\n \"name\": \"Log file\",\n \"import\": (() => import('@shikijs/langs/log'))\n },\n {\n \"id\": \"logo\",\n \"name\": \"Logo\",\n \"import\": (() => import('@shikijs/langs/logo'))\n },\n {\n \"id\": \"lua\",\n \"name\": \"Lua\",\n \"import\": (() => import('@shikijs/langs/lua'))\n },\n {\n \"id\": \"luau\",\n \"name\": \"Luau\",\n \"import\": (() => import('@shikijs/langs/luau'))\n },\n {\n \"id\": \"make\",\n \"name\": \"Makefile\",\n \"aliases\": [\n \"makefile\"\n ],\n \"import\": (() => import('@shikijs/langs/make'))\n },\n {\n \"id\": \"markdown\",\n \"name\": \"Markdown\",\n \"aliases\": [\n \"md\"\n ],\n \"import\": (() => import('@shikijs/langs/markdown'))\n },\n {\n \"id\": \"marko\",\n \"name\": \"Marko\",\n \"import\": (() => import('@shikijs/langs/marko'))\n },\n {\n \"id\": \"matlab\",\n \"name\": \"MATLAB\",\n \"import\": (() => import('@shikijs/langs/matlab'))\n },\n {\n \"id\": \"mdc\",\n \"name\": \"MDC\",\n \"import\": (() => import('@shikijs/langs/mdc'))\n },\n {\n \"id\": \"mdx\",\n \"name\": \"MDX\",\n \"import\": (() => import('@shikijs/langs/mdx'))\n },\n {\n \"id\": \"mermaid\",\n \"name\": \"Mermaid\",\n \"aliases\": [\n \"mmd\"\n ],\n \"import\": (() => import('@shikijs/langs/mermaid'))\n },\n {\n \"id\": \"mipsasm\",\n \"name\": \"MIPS Assembly\",\n \"aliases\": [\n \"mips\"\n ],\n \"import\": (() => import('@shikijs/langs/mipsasm'))\n },\n {\n \"id\": \"mojo\",\n \"name\": \"Mojo\",\n \"import\": (() => import('@shikijs/langs/mojo'))\n },\n {\n \"id\": \"moonbit\",\n \"name\": \"MoonBit\",\n \"aliases\": [\n \"mbt\",\n \"mbti\"\n ],\n \"import\": (() => import('@shikijs/langs/moonbit'))\n },\n {\n \"id\": \"move\",\n \"name\": \"Move\",\n \"import\": (() => import('@shikijs/langs/move'))\n },\n {\n \"id\": \"narrat\",\n \"name\": \"Narrat Language\",\n \"aliases\": [\n \"nar\"\n ],\n \"import\": (() => import('@shikijs/langs/narrat'))\n },\n {\n \"id\": \"nextflow\",\n \"name\": \"Nextflow\",\n \"aliases\": [\n \"nf\"\n ],\n \"import\": (() => import('@shikijs/langs/nextflow'))\n },\n {\n \"id\": \"nginx\",\n \"name\": \"Nginx\",\n \"import\": (() => import('@shikijs/langs/nginx'))\n },\n {\n \"id\": \"nim\",\n \"name\": \"Nim\",\n \"import\": (() => import('@shikijs/langs/nim'))\n },\n {\n \"id\": \"nix\",\n \"name\": \"Nix\",\n \"import\": (() => import('@shikijs/langs/nix'))\n },\n {\n \"id\": \"nushell\",\n \"name\": \"nushell\",\n \"aliases\": [\n \"nu\"\n ],\n \"import\": (() => import('@shikijs/langs/nushell'))\n },\n {\n \"id\": \"objective-c\",\n \"name\": \"Objective-C\",\n \"aliases\": [\n \"objc\"\n ],\n \"import\": (() => import('@shikijs/langs/objective-c'))\n },\n {\n \"id\": \"objective-cpp\",\n \"name\": \"Objective-C++\",\n \"import\": (() => import('@shikijs/langs/objective-cpp'))\n },\n {\n \"id\": \"ocaml\",\n \"name\": \"OCaml\",\n \"import\": (() => import('@shikijs/langs/ocaml'))\n },\n {\n \"id\": \"odin\",\n \"name\": \"Odin\",\n \"import\": (() => import('@shikijs/langs/odin'))\n },\n {\n \"id\": \"openscad\",\n \"name\": \"OpenSCAD\",\n \"aliases\": [\n \"scad\"\n ],\n \"import\": (() => import('@shikijs/langs/openscad'))\n },\n {\n \"id\": \"pascal\",\n \"name\": \"Pascal\",\n \"import\": (() => import('@shikijs/langs/pascal'))\n },\n {\n \"id\": \"perl\",\n \"name\": \"Perl\",\n \"import\": (() => import('@shikijs/langs/perl'))\n },\n {\n \"id\": \"php\",\n \"name\": \"PHP\",\n \"import\": (() => import('@shikijs/langs/php'))\n },\n {\n \"id\": \"pkl\",\n \"name\": \"Pkl\",\n \"import\": (() => import('@shikijs/langs/pkl'))\n },\n {\n \"id\": \"plsql\",\n \"name\": \"PL/SQL\",\n \"import\": (() => import('@shikijs/langs/plsql'))\n },\n {\n \"id\": \"po\",\n \"name\": \"Gettext PO\",\n \"aliases\": [\n \"pot\",\n \"potx\"\n ],\n \"import\": (() => import('@shikijs/langs/po'))\n },\n {\n \"id\": \"polar\",\n \"name\": \"Polar\",\n \"import\": (() => import('@shikijs/langs/polar'))\n },\n {\n \"id\": \"postcss\",\n \"name\": \"PostCSS\",\n \"import\": (() => import('@shikijs/langs/postcss'))\n },\n {\n \"id\": \"powerquery\",\n \"name\": \"PowerQuery\",\n \"import\": (() => import('@shikijs/langs/powerquery'))\n },\n {\n \"id\": \"powershell\",\n \"name\": \"PowerShell\",\n \"aliases\": [\n \"ps\",\n \"ps1\"\n ],\n \"import\": (() => import('@shikijs/langs/powershell'))\n },\n {\n \"id\": \"prisma\",\n \"name\": \"Prisma\",\n \"import\": (() => import('@shikijs/langs/prisma'))\n },\n {\n \"id\": \"prolog\",\n \"name\": \"Prolog\",\n \"import\": (() => import('@shikijs/langs/prolog'))\n },\n {\n \"id\": \"proto\",\n \"name\": \"Protocol Buffer 3\",\n \"aliases\": [\n \"protobuf\"\n ],\n \"import\": (() => import('@shikijs/langs/proto'))\n },\n {\n \"id\": \"pug\",\n \"name\": \"Pug\",\n \"aliases\": [\n \"jade\"\n ],\n \"import\": (() => import('@shikijs/langs/pug'))\n },\n {\n \"id\": \"puppet\",\n \"name\": \"Puppet\",\n \"import\": (() => import('@shikijs/langs/puppet'))\n },\n {\n \"id\": \"purescript\",\n \"name\": \"PureScript\",\n \"import\": (() => import('@shikijs/langs/purescript'))\n },\n {\n \"id\": \"python\",\n \"name\": \"Python\",\n \"aliases\": [\n \"py\"\n ],\n \"import\": (() => import('@shikijs/langs/python'))\n },\n {\n \"id\": \"qml\",\n \"name\": \"QML\",\n \"import\": (() => import('@shikijs/langs/qml'))\n },\n {\n \"id\": \"qmldir\",\n \"name\": \"QML Directory\",\n \"import\": (() => import('@shikijs/langs/qmldir'))\n },\n {\n \"id\": \"qss\",\n \"name\": \"Qt Style Sheets\",\n \"import\": (() => import('@shikijs/langs/qss'))\n },\n {\n \"id\": \"r\",\n \"name\": \"R\",\n \"import\": (() => import('@shikijs/langs/r'))\n },\n {\n \"id\": \"racket\",\n \"name\": \"Racket\",\n \"import\": (() => import('@shikijs/langs/racket'))\n },\n {\n \"id\": \"raku\",\n \"name\": \"Raku\",\n \"aliases\": [\n \"perl6\"\n ],\n \"import\": (() => import('@shikijs/langs/raku'))\n },\n {\n \"id\": \"razor\",\n \"name\": \"ASP.NET Razor\",\n \"import\": (() => import('@shikijs/langs/razor'))\n },\n {\n \"id\": \"reg\",\n \"name\": \"Windows Registry Script\",\n \"import\": (() => import('@shikijs/langs/reg'))\n },\n {\n \"id\": \"regexp\",\n \"name\": \"RegExp\",\n \"aliases\": [\n \"regex\"\n ],\n \"import\": (() => import('@shikijs/langs/regexp'))\n },\n {\n \"id\": \"rel\",\n \"name\": \"Rel\",\n \"import\": (() => import('@shikijs/langs/rel'))\n },\n {\n \"id\": \"riscv\",\n \"name\": \"RISC-V\",\n \"import\": (() => import('@shikijs/langs/riscv'))\n },\n {\n \"id\": \"ron\",\n \"name\": \"RON\",\n \"import\": (() => import('@shikijs/langs/ron'))\n },\n {\n \"id\": \"rosmsg\",\n \"name\": \"ROS Interface\",\n \"import\": (() => import('@shikijs/langs/rosmsg'))\n },\n {\n \"id\": \"rst\",\n \"name\": \"reStructuredText\",\n \"import\": (() => import('@shikijs/langs/rst'))\n },\n {\n \"id\": \"ruby\",\n \"name\": \"Ruby\",\n \"aliases\": [\n \"rb\"\n ],\n \"import\": (() => import('@shikijs/langs/ruby'))\n },\n {\n \"id\": \"rust\",\n \"name\": \"Rust\",\n \"aliases\": [\n \"rs\"\n ],\n \"import\": (() => import('@shikijs/langs/rust'))\n },\n {\n \"id\": \"sas\",\n \"name\": \"SAS\",\n \"import\": (() => import('@shikijs/langs/sas'))\n },\n {\n \"id\": \"sass\",\n \"name\": \"Sass\",\n \"import\": (() => import('@shikijs/langs/sass'))\n },\n {\n \"id\": \"scala\",\n \"name\": \"Scala\",\n \"import\": (() => import('@shikijs/langs/scala'))\n },\n {\n \"id\": \"scheme\",\n \"name\": \"Scheme\",\n \"import\": (() => import('@shikijs/langs/scheme'))\n },\n {\n \"id\": \"scss\",\n \"name\": \"SCSS\",\n \"import\": (() => import('@shikijs/langs/scss'))\n },\n {\n \"id\": \"sdbl\",\n \"name\": \"1C (Query)\",\n \"aliases\": [\n \"1c-query\"\n ],\n \"import\": (() => import('@shikijs/langs/sdbl'))\n },\n {\n \"id\": \"shaderlab\",\n \"name\": \"ShaderLab\",\n \"aliases\": [\n \"shader\"\n ],\n \"import\": (() => import('@shikijs/langs/shaderlab'))\n },\n {\n \"id\": \"shellscript\",\n \"name\": \"Shell\",\n \"aliases\": [\n \"bash\",\n \"sh\",\n \"shell\",\n \"zsh\"\n ],\n \"import\": (() => import('@shikijs/langs/shellscript'))\n },\n {\n \"id\": \"shellsession\",\n \"name\": \"Shell Session\",\n \"aliases\": [\n \"console\"\n ],\n \"import\": (() => import('@shikijs/langs/shellsession'))\n },\n {\n \"id\": \"smalltalk\",\n \"name\": \"Smalltalk\",\n \"import\": (() => import('@shikijs/langs/smalltalk'))\n },\n {\n \"id\": \"solidity\",\n \"name\": \"Solidity\",\n \"import\": (() => import('@shikijs/langs/solidity'))\n },\n {\n \"id\": \"soy\",\n \"name\": \"Closure Templates\",\n \"aliases\": [\n \"closure-templates\"\n ],\n \"import\": (() => import('@shikijs/langs/soy'))\n },\n {\n \"id\": \"sparql\",\n \"name\": \"SPARQL\",\n \"import\": (() => import('@shikijs/langs/sparql'))\n },\n {\n \"id\": \"splunk\",\n \"name\": \"Splunk Query Language\",\n \"aliases\": [\n \"spl\"\n ],\n \"import\": (() => import('@shikijs/langs/splunk'))\n },\n {\n \"id\": \"sql\",\n \"name\": \"SQL\",\n \"import\": (() => import('@shikijs/langs/sql'))\n },\n {\n \"id\": \"ssh-config\",\n \"name\": \"SSH Config\",\n \"import\": (() => import('@shikijs/langs/ssh-config'))\n },\n {\n \"id\": \"stata\",\n \"name\": \"Stata\",\n \"import\": (() => import('@shikijs/langs/stata'))\n },\n {\n \"id\": \"stylus\",\n \"name\": \"Stylus\",\n \"aliases\": [\n \"styl\"\n ],\n \"import\": (() => import('@shikijs/langs/stylus'))\n },\n {\n \"id\": \"surrealql\",\n \"name\": \"SurrealQL\",\n \"aliases\": [\n \"surql\"\n ],\n \"import\": (() => import('@shikijs/langs/surrealql'))\n },\n {\n \"id\": \"svelte\",\n \"name\": \"Svelte\",\n \"import\": (() => import('@shikijs/langs/svelte'))\n },\n {\n \"id\": \"swift\",\n \"name\": \"Swift\",\n \"import\": (() => import('@shikijs/langs/swift'))\n },\n {\n \"id\": \"system-verilog\",\n \"name\": \"SystemVerilog\",\n \"import\": (() => import('@shikijs/langs/system-verilog'))\n },\n {\n \"id\": \"systemd\",\n \"name\": \"Systemd Units\",\n \"import\": (() => import('@shikijs/langs/systemd'))\n },\n {\n \"id\": \"talonscript\",\n \"name\": \"TalonScript\",\n \"aliases\": [\n \"talon\"\n ],\n \"import\": (() => import('@shikijs/langs/talonscript'))\n },\n {\n \"id\": \"tasl\",\n \"name\": \"Tasl\",\n \"import\": (() => import('@shikijs/langs/tasl'))\n },\n {\n \"id\": \"tcl\",\n \"name\": \"Tcl\",\n \"import\": (() => import('@shikijs/langs/tcl'))\n },\n {\n \"id\": \"templ\",\n \"name\": \"Templ\",\n \"import\": (() => import('@shikijs/langs/templ'))\n },\n {\n \"id\": \"terraform\",\n \"name\": \"Terraform\",\n \"aliases\": [\n \"tf\",\n \"tfvars\"\n ],\n \"import\": (() => import('@shikijs/langs/terraform'))\n },\n {\n \"id\": \"tex\",\n \"name\": \"TeX\",\n \"import\": (() => import('@shikijs/langs/tex'))\n },\n {\n \"id\": \"toml\",\n \"name\": \"TOML\",\n \"import\": (() => import('@shikijs/langs/toml'))\n },\n {\n \"id\": \"ts-tags\",\n \"name\": \"TypeScript with Tags\",\n \"aliases\": [\n \"lit\"\n ],\n \"import\": (() => import('@shikijs/langs/ts-tags'))\n },\n {\n \"id\": \"tsv\",\n \"name\": \"TSV\",\n \"import\": (() => import('@shikijs/langs/tsv'))\n },\n {\n \"id\": \"tsx\",\n \"name\": \"TSX\",\n \"import\": (() => import('@shikijs/langs/tsx'))\n },\n {\n \"id\": \"turtle\",\n \"name\": \"Turtle\",\n \"import\": (() => import('@shikijs/langs/turtle'))\n },\n {\n \"id\": \"twig\",\n \"name\": \"Twig\",\n \"import\": (() => import('@shikijs/langs/twig'))\n },\n {\n \"id\": \"typescript\",\n \"name\": \"TypeScript\",\n \"aliases\": [\n \"ts\",\n \"cts\",\n \"mts\"\n ],\n \"import\": (() => import('@shikijs/langs/typescript'))\n },\n {\n \"id\": \"typespec\",\n \"name\": \"TypeSpec\",\n \"aliases\": [\n \"tsp\"\n ],\n \"import\": (() => import('@shikijs/langs/typespec'))\n },\n {\n \"id\": \"typst\",\n \"name\": \"Typst\",\n \"aliases\": [\n \"typ\"\n ],\n \"import\": (() => import('@shikijs/langs/typst'))\n },\n {\n \"id\": \"v\",\n \"name\": \"V\",\n \"import\": (() => import('@shikijs/langs/v'))\n },\n {\n \"id\": \"vala\",\n \"name\": \"Vala\",\n \"import\": (() => import('@shikijs/langs/vala'))\n },\n {\n \"id\": \"vb\",\n \"name\": \"Visual Basic\",\n \"aliases\": [\n \"cmd\"\n ],\n \"import\": (() => import('@shikijs/langs/vb'))\n },\n {\n \"id\": \"verilog\",\n \"name\": \"Verilog\",\n \"import\": (() => import('@shikijs/langs/verilog'))\n },\n {\n \"id\": \"vhdl\",\n \"name\": \"VHDL\",\n \"import\": (() => import('@shikijs/langs/vhdl'))\n },\n {\n \"id\": \"viml\",\n \"name\": \"Vim Script\",\n \"aliases\": [\n \"vim\",\n \"vimscript\"\n ],\n \"import\": (() => import('@shikijs/langs/viml'))\n },\n {\n \"id\": \"vue\",\n \"name\": \"Vue\",\n \"import\": (() => import('@shikijs/langs/vue'))\n },\n {\n \"id\": \"vue-html\",\n \"name\": \"Vue HTML\",\n \"import\": (() => import('@shikijs/langs/vue-html'))\n },\n {\n \"id\": \"vue-vine\",\n \"name\": \"Vue Vine\",\n \"import\": (() => import('@shikijs/langs/vue-vine'))\n },\n {\n \"id\": \"vyper\",\n \"name\": \"Vyper\",\n \"aliases\": [\n \"vy\"\n ],\n \"import\": (() => import('@shikijs/langs/vyper'))\n },\n {\n \"id\": \"wasm\",\n \"name\": \"WebAssembly\",\n \"import\": (() => import('@shikijs/langs/wasm'))\n },\n {\n \"id\": \"wenyan\",\n \"name\": \"Wenyan\",\n \"aliases\": [\n \"\\u6587\\u8A00\"\n ],\n \"import\": (() => import('@shikijs/langs/wenyan'))\n },\n {\n \"id\": \"wgsl\",\n \"name\": \"WGSL\",\n \"import\": (() => import('@shikijs/langs/wgsl'))\n },\n {\n \"id\": \"wikitext\",\n \"name\": \"Wikitext\",\n \"aliases\": [\n \"mediawiki\",\n \"wiki\"\n ],\n \"import\": (() => import('@shikijs/langs/wikitext'))\n },\n {\n \"id\": \"wit\",\n \"name\": \"WebAssembly Interface Types\",\n \"import\": (() => import('@shikijs/langs/wit'))\n },\n {\n \"id\": \"wolfram\",\n \"name\": \"Wolfram\",\n \"aliases\": [\n \"wl\"\n ],\n \"import\": (() => import('@shikijs/langs/wolfram'))\n },\n {\n \"id\": \"xml\",\n \"name\": \"XML\",\n \"import\": (() => import('@shikijs/langs/xml'))\n },\n {\n \"id\": \"xsl\",\n \"name\": \"XSL\",\n \"import\": (() => import('@shikijs/langs/xsl'))\n },\n {\n \"id\": \"yaml\",\n \"name\": \"YAML\",\n \"aliases\": [\n \"yml\"\n ],\n \"import\": (() => import('@shikijs/langs/yaml'))\n },\n {\n \"id\": \"zenscript\",\n \"name\": \"ZenScript\",\n \"import\": (() => import('@shikijs/langs/zenscript'))\n },\n {\n \"id\": \"zig\",\n \"name\": \"Zig\",\n \"import\": (() => import('@shikijs/langs/zig'))\n }\n];\nconst bundledLanguagesBase = Object.fromEntries(bundledLanguagesInfo.map((i) => [i.id, i.import]));\nconst bundledLanguagesAlias = Object.fromEntries(bundledLanguagesInfo.flatMap((i) => i.aliases?.map((a) => [a, i.import]) || []));\nconst bundledLanguages = {\n ...bundledLanguagesBase,\n ...bundledLanguagesAlias\n};\n\nexport { bundledLanguages, bundledLanguagesAlias, bundledLanguagesBase, bundledLanguagesInfo };\n","const bundledThemesInfo = [\n {\n \"id\": \"andromeeda\",\n \"displayName\": \"Andromeeda\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/andromeeda'))\n },\n {\n \"id\": \"aurora-x\",\n \"displayName\": \"Aurora X\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/aurora-x'))\n },\n {\n \"id\": \"ayu-dark\",\n \"displayName\": \"Ayu Dark\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/ayu-dark'))\n },\n {\n \"id\": \"ayu-light\",\n \"displayName\": \"Ayu Light\",\n \"type\": \"light\",\n \"import\": (() => import('@shikijs/themes/ayu-light'))\n },\n {\n \"id\": \"ayu-mirage\",\n \"displayName\": \"Ayu Mirage\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/ayu-mirage'))\n },\n {\n \"id\": \"catppuccin-frappe\",\n \"displayName\": \"Catppuccin Frapp\\xE9\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/catppuccin-frappe'))\n },\n {\n \"id\": \"catppuccin-latte\",\n \"displayName\": \"Catppuccin Latte\",\n \"type\": \"light\",\n \"import\": (() => import('@shikijs/themes/catppuccin-latte'))\n },\n {\n \"id\": \"catppuccin-macchiato\",\n \"displayName\": \"Catppuccin Macchiato\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/catppuccin-macchiato'))\n },\n {\n \"id\": \"catppuccin-mocha\",\n \"displayName\": \"Catppuccin Mocha\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/catppuccin-mocha'))\n },\n {\n \"id\": \"dark-plus\",\n \"displayName\": \"Dark Plus\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/dark-plus'))\n },\n {\n \"id\": \"dracula\",\n \"displayName\": \"Dracula Theme\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/dracula'))\n },\n {\n \"id\": \"dracula-soft\",\n \"displayName\": \"Dracula Theme Soft\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/dracula-soft'))\n },\n {\n \"id\": \"everforest-dark\",\n \"displayName\": \"Everforest Dark\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/everforest-dark'))\n },\n {\n \"id\": \"everforest-light\",\n \"displayName\": \"Everforest Light\",\n \"type\": \"light\",\n \"import\": (() => import('@shikijs/themes/everforest-light'))\n },\n {\n \"id\": \"github-dark\",\n \"displayName\": \"GitHub Dark\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/github-dark'))\n },\n {\n \"id\": \"github-dark-default\",\n \"displayName\": \"GitHub Dark Default\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/github-dark-default'))\n },\n {\n \"id\": \"github-dark-dimmed\",\n \"displayName\": \"GitHub Dark Dimmed\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/github-dark-dimmed'))\n },\n {\n \"id\": \"github-dark-high-contrast\",\n \"displayName\": \"GitHub Dark High Contrast\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/github-dark-high-contrast'))\n },\n {\n \"id\": \"github-light\",\n \"displayName\": \"GitHub Light\",\n \"type\": \"light\",\n \"import\": (() => import('@shikijs/themes/github-light'))\n },\n {\n \"id\": \"github-light-default\",\n \"displayName\": \"GitHub Light Default\",\n \"type\": \"light\",\n \"import\": (() => import('@shikijs/themes/github-light-default'))\n },\n {\n \"id\": \"github-light-high-contrast\",\n \"displayName\": \"GitHub Light High Contrast\",\n \"type\": \"light\",\n \"import\": (() => import('@shikijs/themes/github-light-high-contrast'))\n },\n {\n \"id\": \"gruvbox-dark-hard\",\n \"displayName\": \"Gruvbox Dark Hard\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/gruvbox-dark-hard'))\n },\n {\n \"id\": \"gruvbox-dark-medium\",\n \"displayName\": \"Gruvbox Dark Medium\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/gruvbox-dark-medium'))\n },\n {\n \"id\": \"gruvbox-dark-soft\",\n \"displayName\": \"Gruvbox Dark Soft\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/gruvbox-dark-soft'))\n },\n {\n \"id\": \"gruvbox-light-hard\",\n \"displayName\": \"Gruvbox Light Hard\",\n \"type\": \"light\",\n \"import\": (() => import('@shikijs/themes/gruvbox-light-hard'))\n },\n {\n \"id\": \"gruvbox-light-medium\",\n \"displayName\": \"Gruvbox Light Medium\",\n \"type\": \"light\",\n \"import\": (() => import('@shikijs/themes/gruvbox-light-medium'))\n },\n {\n \"id\": \"gruvbox-light-soft\",\n \"displayName\": \"Gruvbox Light Soft\",\n \"type\": \"light\",\n \"import\": (() => import('@shikijs/themes/gruvbox-light-soft'))\n },\n {\n \"id\": \"horizon\",\n \"displayName\": \"Horizon\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/horizon'))\n },\n {\n \"id\": \"houston\",\n \"displayName\": \"Houston\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/houston'))\n },\n {\n \"id\": \"kanagawa-dragon\",\n \"displayName\": \"Kanagawa Dragon\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/kanagawa-dragon'))\n },\n {\n \"id\": \"kanagawa-lotus\",\n \"displayName\": \"Kanagawa Lotus\",\n \"type\": \"light\",\n \"import\": (() => import('@shikijs/themes/kanagawa-lotus'))\n },\n {\n \"id\": \"kanagawa-wave\",\n \"displayName\": \"Kanagawa Wave\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/kanagawa-wave'))\n },\n {\n \"id\": \"laserwave\",\n \"displayName\": \"LaserWave\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/laserwave'))\n },\n {\n \"id\": \"light-plus\",\n \"displayName\": \"Light Plus\",\n \"type\": \"light\",\n \"import\": (() => import('@shikijs/themes/light-plus'))\n },\n {\n \"id\": \"material-theme\",\n \"displayName\": \"Material Theme\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/material-theme'))\n },\n {\n \"id\": \"material-theme-darker\",\n \"displayName\": \"Material Theme Darker\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/material-theme-darker'))\n },\n {\n \"id\": \"material-theme-lighter\",\n \"displayName\": \"Material Theme Lighter\",\n \"type\": \"light\",\n \"import\": (() => import('@shikijs/themes/material-theme-lighter'))\n },\n {\n \"id\": \"material-theme-ocean\",\n \"displayName\": \"Material Theme Ocean\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/material-theme-ocean'))\n },\n {\n \"id\": \"material-theme-palenight\",\n \"displayName\": \"Material Theme Palenight\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/material-theme-palenight'))\n },\n {\n \"id\": \"min-dark\",\n \"displayName\": \"Min Dark\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/min-dark'))\n },\n {\n \"id\": \"min-light\",\n \"displayName\": \"Min Light\",\n \"type\": \"light\",\n \"import\": (() => import('@shikijs/themes/min-light'))\n },\n {\n \"id\": \"monokai\",\n \"displayName\": \"Monokai\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/monokai'))\n },\n {\n \"id\": \"night-owl\",\n \"displayName\": \"Night Owl\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/night-owl'))\n },\n {\n \"id\": \"night-owl-light\",\n \"displayName\": \"Night Owl Light\",\n \"type\": \"light\",\n \"import\": (() => import('@shikijs/themes/night-owl-light'))\n },\n {\n \"id\": \"nord\",\n \"displayName\": \"Nord\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/nord'))\n },\n {\n \"id\": \"one-dark-pro\",\n \"displayName\": \"One Dark Pro\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/one-dark-pro'))\n },\n {\n \"id\": \"one-light\",\n \"displayName\": \"One Light\",\n \"type\": \"light\",\n \"import\": (() => import('@shikijs/themes/one-light'))\n },\n {\n \"id\": \"plastic\",\n \"displayName\": \"Plastic\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/plastic'))\n },\n {\n \"id\": \"poimandres\",\n \"displayName\": \"Poimandres\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/poimandres'))\n },\n {\n \"id\": \"red\",\n \"displayName\": \"Red\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/red'))\n },\n {\n \"id\": \"rose-pine\",\n \"displayName\": \"Ros\\xE9 Pine\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/rose-pine'))\n },\n {\n \"id\": \"rose-pine-dawn\",\n \"displayName\": \"Ros\\xE9 Pine Dawn\",\n \"type\": \"light\",\n \"import\": (() => import('@shikijs/themes/rose-pine-dawn'))\n },\n {\n \"id\": \"rose-pine-moon\",\n \"displayName\": \"Ros\\xE9 Pine Moon\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/rose-pine-moon'))\n },\n {\n \"id\": \"slack-dark\",\n \"displayName\": \"Slack Dark\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/slack-dark'))\n },\n {\n \"id\": \"slack-ochin\",\n \"displayName\": \"Slack Ochin\",\n \"type\": \"light\",\n \"import\": (() => import('@shikijs/themes/slack-ochin'))\n },\n {\n \"id\": \"snazzy-light\",\n \"displayName\": \"Snazzy Light\",\n \"type\": \"light\",\n \"import\": (() => import('@shikijs/themes/snazzy-light'))\n },\n {\n \"id\": \"solarized-dark\",\n \"displayName\": \"Solarized Dark\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/solarized-dark'))\n },\n {\n \"id\": \"solarized-light\",\n \"displayName\": \"Solarized Light\",\n \"type\": \"light\",\n \"import\": (() => import('@shikijs/themes/solarized-light'))\n },\n {\n \"id\": \"synthwave-84\",\n \"displayName\": \"Synthwave '84\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/synthwave-84'))\n },\n {\n \"id\": \"tokyo-night\",\n \"displayName\": \"Tokyo Night\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/tokyo-night'))\n },\n {\n \"id\": \"vesper\",\n \"displayName\": \"Vesper\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/vesper'))\n },\n {\n \"id\": \"vitesse-black\",\n \"displayName\": \"Vitesse Black\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/vitesse-black'))\n },\n {\n \"id\": \"vitesse-dark\",\n \"displayName\": \"Vitesse Dark\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/vitesse-dark'))\n },\n {\n \"id\": \"vitesse-light\",\n \"displayName\": \"Vitesse Light\",\n \"type\": \"light\",\n \"import\": (() => import('@shikijs/themes/vitesse-light'))\n }\n];\nconst bundledThemes = Object.fromEntries(bundledThemesInfo.map((i) => [i.id, i.import]));\n\nexport { bundledThemes, bundledThemesInfo };\n","class ShikiError extends Error {\n constructor(message) {\n super(message);\n this.name = \"ShikiError\";\n }\n}\n\nfunction getHeapMax() {\n return 2147483648;\n}\nfunction _emscripten_get_now() {\n return typeof performance !== \"undefined\" ? performance.now() : Date.now();\n}\nconst alignUp = (x, multiple) => x + (multiple - x % multiple) % multiple;\nasync function main(init) {\n let wasmMemory;\n let buffer;\n const binding = {};\n function updateGlobalBufferAndViews(buf) {\n buffer = buf;\n binding.HEAPU8 = new Uint8Array(buf);\n binding.HEAPU32 = new Uint32Array(buf);\n }\n function _emscripten_memcpy_big(dest, src, num) {\n binding.HEAPU8.copyWithin(dest, src, src + num);\n }\n function emscripten_realloc_buffer(size) {\n try {\n wasmMemory.grow(size - buffer.byteLength + 65535 >>> 16);\n updateGlobalBufferAndViews(wasmMemory.buffer);\n return 1;\n } catch {\n }\n }\n function _emscripten_resize_heap(requestedSize) {\n const oldSize = binding.HEAPU8.length;\n requestedSize = requestedSize >>> 0;\n const maxHeapSize = getHeapMax();\n if (requestedSize > maxHeapSize)\n return false;\n for (let cutDown = 1; cutDown <= 4; cutDown *= 2) {\n let overGrownHeapSize = oldSize * (1 + 0.2 / cutDown);\n overGrownHeapSize = Math.min(overGrownHeapSize, requestedSize + 100663296);\n const newSize = Math.min(maxHeapSize, alignUp(Math.max(requestedSize, overGrownHeapSize), 65536));\n const replacement = emscripten_realloc_buffer(newSize);\n if (replacement)\n return true;\n }\n return false;\n }\n const UTF8Decoder = typeof TextDecoder != \"undefined\" ? new TextDecoder(\"utf8\") : void 0;\n function UTF8ArrayToString(heapOrArray, idx, maxBytesToRead = 1024) {\n const endIdx = idx + maxBytesToRead;\n let endPtr = idx;\n while (heapOrArray[endPtr] && !(endPtr >= endIdx)) ++endPtr;\n if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) {\n return UTF8Decoder.decode(heapOrArray.subarray(idx, endPtr));\n }\n let str = \"\";\n while (idx < endPtr) {\n let u0 = heapOrArray[idx++];\n if (!(u0 & 128)) {\n str += String.fromCharCode(u0);\n continue;\n }\n const u1 = heapOrArray[idx++] & 63;\n if ((u0 & 224) === 192) {\n str += String.fromCharCode((u0 & 31) << 6 | u1);\n continue;\n }\n const u2 = heapOrArray[idx++] & 63;\n if ((u0 & 240) === 224) {\n u0 = (u0 & 15) << 12 | u1 << 6 | u2;\n } else {\n u0 = (u0 & 7) << 18 | u1 << 12 | u2 << 6 | heapOrArray[idx++] & 63;\n }\n if (u0 < 65536) {\n str += String.fromCharCode(u0);\n } else {\n const ch = u0 - 65536;\n str += String.fromCharCode(55296 | ch >> 10, 56320 | ch & 1023);\n }\n }\n return str;\n }\n function UTF8ToString(ptr, maxBytesToRead) {\n return ptr ? UTF8ArrayToString(binding.HEAPU8, ptr, maxBytesToRead) : \"\";\n }\n const asmLibraryArg = {\n emscripten_get_now: _emscripten_get_now,\n emscripten_memcpy_big: _emscripten_memcpy_big,\n emscripten_resize_heap: _emscripten_resize_heap,\n fd_write: () => 0\n };\n async function createWasm() {\n const info = {\n env: asmLibraryArg,\n wasi_snapshot_preview1: asmLibraryArg\n };\n const exports$1 = await init(info);\n wasmMemory = exports$1.memory;\n updateGlobalBufferAndViews(wasmMemory.buffer);\n Object.assign(binding, exports$1);\n binding.UTF8ToString = UTF8ToString;\n }\n await createWasm();\n return binding;\n}\n\nvar __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\nlet onigBinding = null;\nfunction throwLastOnigError(onigBinding2) {\n throw new ShikiError(onigBinding2.UTF8ToString(onigBinding2.getLastOnigError()));\n}\nclass UtfString {\n constructor(str) {\n __publicField(this, \"utf16Length\");\n __publicField(this, \"utf8Length\");\n __publicField(this, \"utf16Value\");\n __publicField(this, \"utf8Value\");\n __publicField(this, \"utf16OffsetToUtf8\");\n __publicField(this, \"utf8OffsetToUtf16\");\n const utf16Length = str.length;\n const utf8Length = UtfString._utf8ByteLength(str);\n const computeIndicesMapping = utf8Length !== utf16Length;\n const utf16OffsetToUtf8 = computeIndicesMapping ? new Uint32Array(utf16Length + 1) : null;\n if (computeIndicesMapping)\n utf16OffsetToUtf8[utf16Length] = utf8Length;\n const utf8OffsetToUtf16 = computeIndicesMapping ? new Uint32Array(utf8Length + 1) : null;\n if (computeIndicesMapping)\n utf8OffsetToUtf16[utf8Length] = utf16Length;\n const utf8Value = new Uint8Array(utf8Length);\n let i8 = 0;\n for (let i16 = 0; i16 < utf16Length; i16++) {\n const charCode = str.charCodeAt(i16);\n let codePoint = charCode;\n let wasSurrogatePair = false;\n if (charCode >= 55296 && charCode <= 56319) {\n if (i16 + 1 < utf16Length) {\n const nextCharCode = str.charCodeAt(i16 + 1);\n if (nextCharCode >= 56320 && nextCharCode <= 57343) {\n codePoint = (charCode - 55296 << 10) + 65536 | nextCharCode - 56320;\n wasSurrogatePair = true;\n }\n }\n }\n if (computeIndicesMapping) {\n utf16OffsetToUtf8[i16] = i8;\n if (wasSurrogatePair)\n utf16OffsetToUtf8[i16 + 1] = i8;\n if (codePoint <= 127) {\n utf8OffsetToUtf16[i8 + 0] = i16;\n } else if (codePoint <= 2047) {\n utf8OffsetToUtf16[i8 + 0] = i16;\n utf8OffsetToUtf16[i8 + 1] = i16;\n } else if (codePoint <= 65535) {\n utf8OffsetToUtf16[i8 + 0] = i16;\n utf8OffsetToUtf16[i8 + 1] = i16;\n utf8OffsetToUtf16[i8 + 2] = i16;\n } else {\n utf8OffsetToUtf16[i8 + 0] = i16;\n utf8OffsetToUtf16[i8 + 1] = i16;\n utf8OffsetToUtf16[i8 + 2] = i16;\n utf8OffsetToUtf16[i8 + 3] = i16;\n }\n }\n if (codePoint <= 127) {\n utf8Value[i8++] = codePoint;\n } else if (codePoint <= 2047) {\n utf8Value[i8++] = 192 | (codePoint & 1984) >>> 6;\n utf8Value[i8++] = 128 | (codePoint & 63) >>> 0;\n } else if (codePoint <= 65535) {\n utf8Value[i8++] = 224 | (codePoint & 61440) >>> 12;\n utf8Value[i8++] = 128 | (codePoint & 4032) >>> 6;\n utf8Value[i8++] = 128 | (codePoint & 63) >>> 0;\n } else {\n utf8Value[i8++] = 240 | (codePoint & 1835008) >>> 18;\n utf8Value[i8++] = 128 | (codePoint & 258048) >>> 12;\n utf8Value[i8++] = 128 | (codePoint & 4032) >>> 6;\n utf8Value[i8++] = 128 | (codePoint & 63) >>> 0;\n }\n if (wasSurrogatePair)\n i16++;\n }\n this.utf16Length = utf16Length;\n this.utf8Length = utf8Length;\n this.utf16Value = str;\n this.utf8Value = utf8Value;\n this.utf16OffsetToUtf8 = utf16OffsetToUtf8;\n this.utf8OffsetToUtf16 = utf8OffsetToUtf16;\n }\n static _utf8ByteLength(str) {\n let result = 0;\n for (let i = 0, len = str.length; i < len; i++) {\n const charCode = str.charCodeAt(i);\n let codepoint = charCode;\n let wasSurrogatePair = false;\n if (charCode >= 55296 && charCode <= 56319) {\n if (i + 1 < len) {\n const nextCharCode = str.charCodeAt(i + 1);\n if (nextCharCode >= 56320 && nextCharCode <= 57343) {\n codepoint = (charCode - 55296 << 10) + 65536 | nextCharCode - 56320;\n wasSurrogatePair = true;\n }\n }\n }\n if (codepoint <= 127)\n result += 1;\n else if (codepoint <= 2047)\n result += 2;\n else if (codepoint <= 65535)\n result += 3;\n else\n result += 4;\n if (wasSurrogatePair)\n i++;\n }\n return result;\n }\n createString(onigBinding2) {\n const result = onigBinding2.omalloc(this.utf8Length);\n onigBinding2.HEAPU8.set(this.utf8Value, result);\n return result;\n }\n}\nconst _OnigString = class _OnigString {\n constructor(str) {\n __publicField(this, \"id\", ++_OnigString.LAST_ID);\n __publicField(this, \"_onigBinding\");\n __publicField(this, \"content\");\n __publicField(this, \"utf16Length\");\n __publicField(this, \"utf8Length\");\n __publicField(this, \"utf16OffsetToUtf8\");\n __publicField(this, \"utf8OffsetToUtf16\");\n __publicField(this, \"ptr\");\n if (!onigBinding)\n throw new ShikiError(\"Must invoke loadWasm first.\");\n this._onigBinding = onigBinding;\n this.content = str;\n const utfString = new UtfString(str);\n this.utf16Length = utfString.utf16Length;\n this.utf8Length = utfString.utf8Length;\n this.utf16OffsetToUtf8 = utfString.utf16OffsetToUtf8;\n this.utf8OffsetToUtf16 = utfString.utf8OffsetToUtf16;\n if (this.utf8Length < 1e4 && !_OnigString._sharedPtrInUse) {\n if (!_OnigString._sharedPtr)\n _OnigString._sharedPtr = onigBinding.omalloc(1e4);\n _OnigString._sharedPtrInUse = true;\n onigBinding.HEAPU8.set(utfString.utf8Value, _OnigString._sharedPtr);\n this.ptr = _OnigString._sharedPtr;\n } else {\n this.ptr = utfString.createString(onigBinding);\n }\n }\n convertUtf8OffsetToUtf16(utf8Offset) {\n if (this.utf8OffsetToUtf16) {\n if (utf8Offset < 0)\n return 0;\n if (utf8Offset > this.utf8Length)\n return this.utf16Length;\n return this.utf8OffsetToUtf16[utf8Offset];\n }\n return utf8Offset;\n }\n convertUtf16OffsetToUtf8(utf16Offset) {\n if (this.utf16OffsetToUtf8) {\n if (utf16Offset < 0)\n return 0;\n if (utf16Offset > this.utf16Length)\n return this.utf8Length;\n return this.utf16OffsetToUtf8[utf16Offset];\n }\n return utf16Offset;\n }\n dispose() {\n if (this.ptr === _OnigString._sharedPtr)\n _OnigString._sharedPtrInUse = false;\n else\n this._onigBinding.ofree(this.ptr);\n }\n};\n__publicField(_OnigString, \"LAST_ID\", 0);\n__publicField(_OnigString, \"_sharedPtr\", 0);\n// a pointer to a string of 10000 bytes\n__publicField(_OnigString, \"_sharedPtrInUse\", false);\nlet OnigString = _OnigString;\nclass OnigScanner {\n constructor(patterns) {\n __publicField(this, \"_onigBinding\");\n __publicField(this, \"_ptr\");\n if (!onigBinding)\n throw new ShikiError(\"Must invoke loadWasm first.\");\n const strPtrsArr = [];\n const strLenArr = [];\n for (let i = 0, len = patterns.length; i < len; i++) {\n const utfString = new UtfString(patterns[i]);\n strPtrsArr[i] = utfString.createString(onigBinding);\n strLenArr[i] = utfString.utf8Length;\n }\n const strPtrsPtr = onigBinding.omalloc(4 * patterns.length);\n onigBinding.HEAPU32.set(strPtrsArr, strPtrsPtr / 4);\n const strLenPtr = onigBinding.omalloc(4 * patterns.length);\n onigBinding.HEAPU32.set(strLenArr, strLenPtr / 4);\n const scannerPtr = onigBinding.createOnigScanner(strPtrsPtr, strLenPtr, patterns.length);\n for (let i = 0, len = patterns.length; i < len; i++)\n onigBinding.ofree(strPtrsArr[i]);\n onigBinding.ofree(strLenPtr);\n onigBinding.ofree(strPtrsPtr);\n if (scannerPtr === 0)\n throwLastOnigError(onigBinding);\n this._onigBinding = onigBinding;\n this._ptr = scannerPtr;\n }\n dispose() {\n this._onigBinding.freeOnigScanner(this._ptr);\n }\n findNextMatchSync(string, startPosition, arg) {\n let options = 0 /* None */;\n if (typeof arg === \"number\") {\n options = arg;\n }\n if (typeof string === \"string\") {\n string = new OnigString(string);\n const result = this._findNextMatchSync(string, startPosition, false, options);\n string.dispose();\n return result;\n }\n return this._findNextMatchSync(string, startPosition, false, options);\n }\n _findNextMatchSync(string, startPosition, debugCall, options) {\n const onigBinding2 = this._onigBinding;\n const resultPtr = onigBinding2.findNextOnigScannerMatch(this._ptr, string.id, string.ptr, string.utf8Length, string.convertUtf16OffsetToUtf8(startPosition), options);\n if (resultPtr === 0) {\n return null;\n }\n const HEAPU32 = onigBinding2.HEAPU32;\n let offset = resultPtr / 4;\n const index = HEAPU32[offset++];\n const count = HEAPU32[offset++];\n const captureIndices = [];\n for (let i = 0; i < count; i++) {\n const beg = string.convertUtf8OffsetToUtf16(HEAPU32[offset++]);\n const end = string.convertUtf8OffsetToUtf16(HEAPU32[offset++]);\n captureIndices[i] = {\n start: beg,\n end,\n length: end - beg\n };\n }\n return {\n index,\n captureIndices\n };\n }\n}\nfunction isInstantiatorOptionsObject(dataOrOptions) {\n return typeof dataOrOptions.instantiator === \"function\";\n}\nfunction isInstantiatorModule(dataOrOptions) {\n return typeof dataOrOptions.default === \"function\";\n}\nfunction isDataOptionsObject(dataOrOptions) {\n return typeof dataOrOptions.data !== \"undefined\";\n}\nfunction isResponse(dataOrOptions) {\n return typeof Response !== \"undefined\" && dataOrOptions instanceof Response;\n}\nfunction isArrayBuffer(data) {\n return typeof ArrayBuffer !== \"undefined\" && (data instanceof ArrayBuffer || ArrayBuffer.isView(data)) || typeof Buffer !== \"undefined\" && Buffer.isBuffer?.(data) || typeof SharedArrayBuffer !== \"undefined\" && data instanceof SharedArrayBuffer || typeof Uint32Array !== \"undefined\" && data instanceof Uint32Array;\n}\nlet initPromise;\nfunction loadWasm(options) {\n if (initPromise)\n return initPromise;\n async function _load() {\n onigBinding = await main(async (info) => {\n let instance = options;\n instance = await instance;\n if (typeof instance === \"function\")\n instance = await instance(info);\n if (typeof instance === \"function\")\n instance = await instance(info);\n if (isInstantiatorOptionsObject(instance)) {\n instance = await instance.instantiator(info);\n } else if (isInstantiatorModule(instance)) {\n instance = await instance.default(info);\n } else {\n if (isDataOptionsObject(instance))\n instance = instance.data;\n if (isResponse(instance)) {\n if (typeof WebAssembly.instantiateStreaming === \"function\")\n instance = await _makeResponseStreamingLoader(instance)(info);\n else\n instance = await _makeResponseNonStreamingLoader(instance)(info);\n } else if (isArrayBuffer(instance)) {\n instance = await _makeArrayBufferLoader(instance)(info);\n } else if (instance instanceof WebAssembly.Module) {\n instance = await _makeArrayBufferLoader(instance)(info);\n } else if (\"default\" in instance && instance.default instanceof WebAssembly.Module) {\n instance = await _makeArrayBufferLoader(instance.default)(info);\n }\n }\n if (\"instance\" in instance)\n instance = instance.instance;\n if (\"exports\" in instance)\n instance = instance.exports;\n return instance;\n });\n }\n initPromise = _load();\n return initPromise;\n}\nfunction _makeArrayBufferLoader(data) {\n return (importObject) => WebAssembly.instantiate(data, importObject);\n}\nfunction _makeResponseStreamingLoader(data) {\n return (importObject) => WebAssembly.instantiateStreaming(data, importObject);\n}\nfunction _makeResponseNonStreamingLoader(data) {\n return async (importObject) => {\n const arrayBuffer = await data.arrayBuffer();\n return WebAssembly.instantiate(arrayBuffer, importObject);\n };\n}\n\nlet _defaultWasmLoader;\nfunction setDefaultWasmLoader(_loader) {\n _defaultWasmLoader = _loader;\n}\nfunction getDefaultWasmLoader() {\n return _defaultWasmLoader;\n}\nasync function createOnigurumaEngine(options) {\n if (options)\n await loadWasm(options);\n return {\n createScanner(patterns) {\n return new OnigScanner(patterns.map((p) => typeof p === \"string\" ? p : p.source));\n },\n createString(s) {\n return new OnigString(s);\n }\n };\n}\n\nexport { createOnigurumaEngine, getDefaultWasmLoader, loadWasm, setDefaultWasmLoader };\n","import { createSingletonShorthands, guessEmbeddedLanguages, createBundledHighlighter } from '@shikijs/core';\nexport * from '@shikijs/core';\nimport { bundledLanguages } from './langs.mjs';\nexport { bundledLanguagesAlias, bundledLanguagesBase, bundledLanguagesInfo } from './langs.mjs';\nimport { bundledThemes } from './themes.mjs';\nexport { bundledThemesInfo } from './themes.mjs';\nimport { createOnigurumaEngine } from '@shikijs/engine-oniguruma';\n\nconst createHighlighter = /* @__PURE__ */ createBundledHighlighter({\n langs: bundledLanguages,\n themes: bundledThemes,\n engine: () => createOnigurumaEngine(import('shiki/wasm'))\n});\nconst {\n codeToHtml,\n codeToHast,\n codeToTokens,\n codeToTokensBase,\n codeToTokensWithThemes,\n getSingletonHighlighter,\n getLastGrammarState\n} = /* @__PURE__ */ createSingletonShorthands(\n createHighlighter,\n { guessEmbeddedLanguages }\n);\n\nexport { bundledLanguages, bundledThemes, codeToHast, codeToHtml, codeToTokens, codeToTokensBase, codeToTokensWithThemes, createHighlighter, getLastGrammarState, getSingletonHighlighter };\n","import {bundledLanguages,createHighlighter}from'shiki';var p=new Set(Object.keys(bundledLanguages)),a=new Map,h=new Map,l=new Map,H=(e,t)=>`${e}-${t[0]}-${t[1]}`,k=(e,t,n)=>{let g=e.slice(0,100),i=e.length>100?e.slice(-100):\"\";return `${t}:${n[0]}:${n[1]}:${e.length}:${g}:${i}`},b=(e,t)=>{let n=H(e,t);if(a.has(n))return a.get(n);let g=createHighlighter({themes:t,langs:[e]});return a.set(n,g),g};function f(e={}){var n;let t=(n=e.themes)!=null?n:[\"github-light\",\"github-dark\"];return {name:\"shiki\",type:\"code-highlighter\",supportsLanguage(g){return p.has(g)},getSupportedLanguages(){return Array.from(p)},getThemes(){return t},highlight({code:g,language:i,themes:r},d){let s=k(g,i,r);return h.has(s)?h.get(s):(d&&(l.has(s)||l.set(s,new Set),l.get(s).add(d)),b(i,r).then(u=>{let B=u.getLoadedLanguages().includes(i)?i:\"text\",o=u.codeToTokens(g,{lang:B,themes:{light:r[0],dark:r[1]}});h.set(s,o);let c=l.get(s);if(c){for(let L of c)L(o);l.delete(s);}}).catch(u=>{console.error(\"[Streamdown Code] Failed to highlight code:\",u),l.delete(s);}),null)}}}var R=f();export{R as code,f as createCodePlugin};","\"use client\";\n\nimport { cjk } from \"@streamdown/cjk\";\nimport { code } from \"@streamdown/code\";\nimport type { UIMessage } from \"ai\";\nimport type { ComponentProps, HTMLAttributes, ReactNode } from \"react\";\nimport { memo } from \"react\";\nimport { Streamdown } from \"streamdown\";\nimport { cn } from \"../lib/utils\";\n\nexport type MessageProps = HTMLAttributes<HTMLDivElement> & {\n\tfrom: UIMessage[\"role\"];\n\tchildren?: ReactNode;\n};\n\nexport const Message = ({\n\tclassName,\n\tfrom,\n\tchildren,\n\t...props\n}: MessageProps) => (\n\t<div\n\t\tclassName={cn(\n\t\t\t\"ww:group ww:flex ww:w-full\",\n\t\t\tfrom === \"user\"\n\t\t\t\t? \"is-user ww:ml-auto ww:max-w-[80%] ww:flex-col ww:items-end\"\n\t\t\t\t: \"is-assistant ww:flex-col\",\n\t\t\tclassName,\n\t\t)}\n\t\t{...props}\n\t>\n\t\t<div className={cn(\"ww:flex ww:min-w-0 ww:flex-col ww:gap-2\", \"ww:w-full\")}>\n\t\t\t{children}\n\t\t</div>\n\t</div>\n);\n\nexport type MessageContentProps = HTMLAttributes<HTMLDivElement>;\n\nexport const MessageContent = ({\n\tchildren,\n\tclassName,\n\t...props\n}: MessageContentProps) => (\n\t<div\n\t\tclassName={cn(\n\t\t\t\"ww:flex ww:w-fit ww:min-w-0 ww:max-w-full ww:flex-col ww:gap-2 ww:overflow-hidden ww:text-base\",\n\t\t\t\"ww:group-[.is-user]:ml-auto ww:group-[.is-user]:rounded-lg ww:group-[.is-user]:bg-user-bubble ww:group-[.is-user]:px-4 ww:group-[.is-user]:py-3 ww:group-[.is-user]:text-primary-foreground\",\n\t\t\t\"ww:group-[.is-assistant]:text-foreground\",\n\t\t\tclassName,\n\t\t)}\n\t\t{...props}\n\t>\n\t\t{children}\n\t</div>\n);\n\nexport type MessageResponseProps = ComponentProps<typeof Streamdown>;\n\nconst streamdownPlugins = { cjk, code };\n\nexport const MessageResponse = memo(\n\t({ className, ...props }: MessageResponseProps) => (\n\t\t<Streamdown\n\t\t\tclassName={cn(\n\t\t\t\t\"ww:size-full ww:[&>*:first-child]:mt-0 ww:[&>*:last-child]:mb-0\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tplugins={streamdownPlugins}\n\t\t\t{...props}\n\t\t/>\n\t),\n\t(prevProps, nextProps) => prevProps.children === nextProps.children,\n);\n\nMessageResponse.displayName = \"MessageResponse\";\n","\"use client\";\n\nimport type { HTMLAttributes } from \"react\";\nimport { cn } from \"../lib/utils\";\n\nexport type ReasoningProps = HTMLAttributes<HTMLPreElement> & {\n\ttext: string;\n};\n\n/** Displays reasoning text inline with muted styling. */\nexport function Reasoning({ className, text, ...props }: ReasoningProps) {\n\tif (!text) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<pre\n\t\t\tclassName={cn(\n\t\t\t\t\"ww:mb-2 ww:overflow-x-auto ww:whitespace-pre-wrap ww:break-words ww:text-xs ww:font-mono ww:text-muted-foreground\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{text}\n\t\t</pre>\n\t);\n}\n","\"use client\";\n\nimport type { ToolUIPart } from \"ai\";\nimport {\n\tBracesIcon,\n\tCheckIcon,\n\tChevronDownIcon,\n\tChevronRightIcon,\n\tClipboardCopyIcon,\n\tServerIcon,\n} from \"lucide-react\";\nimport type { HTMLAttributes } from \"react\";\nimport {\n\tcreateContext,\n\tuseCallback,\n\tuseContext,\n\tuseEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Button } from \"../ui/button\";\n\n/**\n * Produces an abbreviated single-line JSON preview for collapsed display.\n * Objects show truncated keys/values: `{ci… 'M…, pos… '2…, squa… 80}`\n * Arrays show their length: `Array(13)`\n */\nfunction truncateJSON(data: unknown, maxLength = 80): string {\n\tif (data === null || data === undefined) {\n\t\treturn String(data);\n\t}\n\tif (typeof data !== \"object\") {\n\t\treturn String(data).slice(0, maxLength);\n\t}\n\n\tif (Array.isArray(data)) {\n\t\treturn `Array(${data.length})`;\n\t}\n\n\tconst stringified = JSON.stringify(data);\n\tif (stringified.length <= maxLength) {\n\t\treturn stringified;\n\t}\n\n\tconst entries = Object.entries(data as Record<string, unknown>);\n\tconst parts: string[] = [];\n\tlet remaining = maxLength - 2;\n\n\tfor (const [key, value] of entries) {\n\t\tif (remaining <= 8) {\n\t\t\tbreak;\n\t\t}\n\t\tconst keyAbbrev = key.length > 4 ? `${key.slice(0, 4)}\\u2026` : key;\n\t\tlet valStr: string;\n\t\tif (typeof value === \"string\") {\n\t\t\tvalStr = value.length > 2 ? `'${value.slice(0, 1)}\\u2026` : `'${value}'`;\n\t\t} else if (Array.isArray(value)) {\n\t\t\tvalStr = `Array(${value.length})`;\n\t\t} else if (typeof value === \"object\" && value !== null) {\n\t\t\tvalStr = `{\\u2026}`;\n\t\t} else {\n\t\t\tvalStr = String(value);\n\t\t}\n\t\tconst part = `${keyAbbrev}\\u2009${valStr}`;\n\t\tparts.push(part);\n\t\tremaining -= part.length + 3;\n\t}\n\n\treturn `{${parts.join(\", \")}}`;\n}\n\ninterface CopyButtonProps {\n\ttext: string;\n\tclassName?: string;\n}\n\n/** Ghost button that copies `text` to clipboard, showing \"Copied\" for 2s. */\nfunction CopyButton({ text, className }: CopyButtonProps) {\n\tconst [copied, setCopied] = useState(false);\n\tconst timeoutRef = useRef<ReturnType<typeof setTimeout>>(null);\n\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\tif (timeoutRef.current) {\n\t\t\t\tclearTimeout(timeoutRef.current);\n\t\t\t}\n\t\t};\n\t}, []);\n\n\tconst handleCopy = useCallback(\n\t\tasync (e: React.MouseEvent) => {\n\t\t\te.stopPropagation();\n\t\t\ttry {\n\t\t\t\tawait navigator.clipboard.writeText(text);\n\t\t\t\tsetCopied(true);\n\t\t\t\tif (timeoutRef.current) {\n\t\t\t\t\tclearTimeout(timeoutRef.current);\n\t\t\t\t}\n\t\t\t\ttimeoutRef.current = setTimeout(() => setCopied(false), 2000);\n\t\t\t} catch {\n\t\t\t\t// Clipboard API not available\n\t\t\t}\n\t\t},\n\t\t[text],\n\t);\n\n\treturn (\n\t\t<Button\n\t\t\tvariant=\"ghost\"\n\t\t\tsize=\"sm\"\n\t\t\tonClick={handleCopy}\n\t\t\tclassName={cn(\n\t\t\t\t\"ww:h-auto ww:gap-1 ww:px-1.5 ww:py-0.5 ww:text-xs ww:text-muted-foreground ww:hover:text-foreground\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{copied ? (\n\t\t\t\t<>\n\t\t\t\t\t<CheckIcon className=\"ww:size-3.5\" />\n\t\t\t\t\t<span>Copied</span>\n\t\t\t\t</>\n\t\t\t) : (\n\t\t\t\t<>\n\t\t\t\t\t<ClipboardCopyIcon className=\"ww:size-3.5\" />\n\t\t\t\t\t<span>Copy</span>\n\t\t\t\t</>\n\t\t\t)}\n\t\t</Button>\n\t);\n}\n\ninterface CollapsibleJSONProps extends HTMLAttributes<HTMLDivElement> {\n\tdata: unknown;\n\tlabel: string;\n}\n\n/**\n * Labeled JSON section with a Copy button and a collapsible preview.\n * Collapsed: shows a truncated single-line abbreviation with a `>` chevron.\n * Expanded: rotates the chevron and shows full pretty-printed JSON.\n */\nfunction CollapsibleJSON({\n\tdata,\n\tlabel,\n\tclassName,\n\t...props\n}: CollapsibleJSONProps) {\n\tconst [expanded, setExpanded] = useState(false);\n\tconst fullJSON = useMemo(() => JSON.stringify(data, null, 2), [data]);\n\tconst preview = truncateJSON(data);\n\n\treturn (\n\t\t<div className={cn(\"ww:rounded-lg ww:bg-tool-card\", className)} {...props}>\n\t\t\t<div className=\"ww:flex ww:items-center ww:justify-between ww:px-3 ww:pt-2.5 ww:pb-1.5\">\n\t\t\t\t<span className=\"ww:text-xs ww:font-medium ww:text-muted-foreground\">\n\t\t\t\t\t{label}\n\t\t\t\t</span>\n\t\t\t\t<CopyButton text={fullJSON} />\n\t\t\t</div>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={() => setExpanded((v) => !v)}\n\t\t\t\tclassName=\"ww:flex ww:w-full ww:items-start ww:gap-2 ww:px-3 ww:pb-3 ww:text-left\"\n\t\t\t>\n\t\t\t\t<ChevronRightIcon\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"ww:mt-0.5 ww:size-3.5 ww:shrink-0 ww:text-muted-foreground ww:transition-transform ww:duration-150\",\n\t\t\t\t\t\texpanded && \"ww:rotate-90\",\n\t\t\t\t\t)}\n\t\t\t\t/>\n\t\t\t\t{expanded ? (\n\t\t\t\t\t<pre className=\"ww:overflow-x-auto ww:text-xs ww:font-mono ww:text-foreground ww:whitespace-pre-wrap ww:break-all\">\n\t\t\t\t\t\t<code>{fullJSON}</code>\n\t\t\t\t\t</pre>\n\t\t\t\t) : (\n\t\t\t\t\t<span className=\"ww:truncate ww:text-xs ww:font-mono ww:text-foreground/80\">\n\t\t\t\t\t\t{preview}\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t</button>\n\t\t</div>\n\t);\n}\n\nconst ToolOpenContext = createContext<{\n\topen: boolean;\n\ttoggle: () => void;\n}>({ open: false, toggle: () => {} });\n\nexport type ToolProps = HTMLAttributes<HTMLDivElement> & {\n\tdefaultOpen?: boolean;\n};\n\n/**\n * Compound component root for a tool call display.\n * Provides open/closed state via context to ToolHeader and ToolContent.\n *\n * ```tsx\n * <Tool defaultOpen>\n * <ToolHeader title=\"Price estimate ready\" state=\"output-available\" />\n * <ToolContent>\n * <ToolServerInfo toolName=\"get_price_estimate\" serverName=\"Tuio v2\" />\n * <ToolInput input={args} />\n * <ToolOutput output={result} errorText={undefined} />\n * </ToolContent>\n * </Tool>\n * ```\n */\nexport function Tool({\n\tclassName,\n\tdefaultOpen = false,\n\tchildren,\n\t...props\n}: ToolProps) {\n\tconst [open, setOpen] = useState(defaultOpen);\n\treturn (\n\t\t<ToolOpenContext.Provider\n\t\t\tvalue={{ open, toggle: () => setOpen((o) => !o) }}\n\t\t>\n\t\t\t<div\n\t\t\t\tclassName={cn(\"ww:mb-4 ww:w-full\", className)}\n\t\t\t\tdata-state={open ? \"open\" : \"closed\"}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</div>\n\t\t</ToolOpenContext.Provider>\n\t);\n}\n\nexport type ToolHeaderProps = HTMLAttributes<HTMLButtonElement> & {\n\ttitle?: string;\n\tstate: ToolUIPart[\"state\"];\n};\n\n/** Clickable header that toggles the tool accordion. Shows a `{≡}` icon, title, and chevron. */\nexport function ToolHeader({\n\tclassName,\n\ttitle,\n\tstate,\n\t...props\n}: ToolHeaderProps) {\n\tconst { open, toggle } = useContext(ToolOpenContext);\n\tconst isRunning = state === \"input-available\" || state === \"input-streaming\";\n\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tonClick={toggle}\n\t\t\tclassName={cn(\n\t\t\t\t\"ww:flex ww:w-full ww:items-center ww:justify-between ww:gap-3 ww:py-1.5\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\taria-expanded={open}\n\t\t\t{...props}\n\t\t>\n\t\t\t<div className=\"ww:flex ww:min-w-0 ww:items-center ww:gap-2\">\n\t\t\t\t<BracesIcon className=\"ww:size-4 ww:shrink-0 ww:text-muted-foreground\" />\n\t\t\t\t<span className=\"ww:truncate ww:text-sm ww:font-medium\">{title}</span>\n\t\t\t\t{isRunning && (\n\t\t\t\t\t<span className=\"ww:size-2 ww:shrink-0 ww:rounded-full ww:bg-primary ww:animate-pulse\" />\n\t\t\t\t)}\n\t\t\t</div>\n\t\t\t<ChevronDownIcon\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"ww:size-4 ww:shrink-0 ww:text-muted-foreground ww:transition-transform ww:duration-200\",\n\t\t\t\t\topen && \"ww:rotate-180\",\n\t\t\t\t)}\n\t\t\t/>\n\t\t</button>\n\t);\n}\n\nexport type ToolServerInfoProps = HTMLAttributes<HTMLDivElement> & {\n\tserverName?: string;\n\tserverIcon?: string;\n\ttoolName: string;\n};\n\n/** Optional MCP server identity card. Shows server icon + name and the tool function name. Renders nothing if no props need display. */\nexport function ToolServerInfo({\n\tclassName,\n\tserverName,\n\tserverIcon,\n\ttoolName,\n\t...props\n}: ToolServerInfoProps) {\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"ww:flex ww:items-center ww:gap-3 ww:rounded-lg ww:border ww:border-border ww:px-3 ww:py-2.5\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{serverIcon ? (\n\t\t\t\t<img\n\t\t\t\t\tsrc={serverIcon}\n\t\t\t\t\talt={serverName ?? \"\"}\n\t\t\t\t\tclassName=\"ww:size-8 ww:shrink-0 ww:rounded-full ww:object-cover\"\n\t\t\t\t/>\n\t\t\t) : (\n\t\t\t\t<div className=\"ww:flex ww:size-8 ww:shrink-0 ww:items-center ww:justify-center ww:rounded-full ww:border ww:border-border ww:bg-muted\">\n\t\t\t\t\t<ServerIcon className=\"ww:size-4 ww:text-muted-foreground\" />\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t<div className=\"ww:flex ww:min-w-0 ww:flex-col\">\n\t\t\t\t{serverName && (\n\t\t\t\t\t<span className=\"ww:text-xs ww:text-muted-foreground\">\n\t\t\t\t\t\t{serverName}\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t\t<span className=\"ww:truncate ww:text-sm ww:font-semibold\">\n\t\t\t\t\t{toolName}\n\t\t\t\t</span>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\nexport type ToolContentProps = HTMLAttributes<HTMLDivElement>;\n\n/** Collapsible body that animates open/closed. Content below smoothly pushes up/down via a grid-row height transition. */\nexport function ToolContent({\n\tclassName,\n\tchildren,\n\t...props\n}: ToolContentProps) {\n\tconst { open } = useContext(ToolOpenContext);\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"ww:grid ww:transition-[grid-template-rows,opacity] ww:duration-200 ww:ease-out\",\n\t\t\t\topen\n\t\t\t\t\t? \"ww:grid-rows-[1fr] ww:opacity-100\"\n\t\t\t\t\t: \"ww:grid-rows-[0fr] ww:opacity-0\",\n\t\t\t)}\n\t\t>\n\t\t\t<div className=\"ww:min-h-0 ww:overflow-hidden\">\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"ww:mt-2 ww:space-y-3 ww:rounded-lg ww:border ww:border-border ww:bg-background ww:p-3\",\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\t{...props}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\nexport type ToolInputProps = HTMLAttributes<HTMLDivElement> & {\n\tinput: ToolUIPart[\"input\"];\n\tdebug?: boolean;\n};\n\n/** Displays the tool call request parameters as a collapsible JSON section labeled \"Request\". */\nexport function ToolInput({\n\tclassName,\n\tinput,\n\tdebug,\n\t...props\n}: ToolInputProps) {\n\tconst filtered = useMemo(() => {\n\t\tif (\n\t\t\t!debug &&\n\t\t\ttypeof input === \"object\" &&\n\t\t\tinput !== null &&\n\t\t\t!Array.isArray(input)\n\t\t) {\n\t\t\tconst { _meta, ...rest } = input as Record<string, unknown>;\n\t\t\treturn rest;\n\t\t}\n\t\treturn input;\n\t}, [input, debug]);\n\n\treturn (\n\t\t<CollapsibleJSON\n\t\t\tdata={filtered}\n\t\t\tlabel=\"Request\"\n\t\t\tclassName={className}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport type ToolOutputProps = HTMLAttributes<HTMLDivElement> & {\n\toutput: ToolUIPart[\"output\"];\n\terrorText: ToolUIPart[\"errorText\"];\n\tdebug?: boolean;\n};\n\nfunction getUiMeta(output: unknown): Record<string, unknown> | undefined {\n\tif (typeof output !== \"object\" || output === null) {\n\t\treturn undefined;\n\t}\n\tconst meta = (output as Record<string, unknown>)._meta;\n\tif (typeof meta !== \"object\" || meta === null) {\n\t\treturn undefined;\n\t}\n\tconst ui = (meta as Record<string, unknown>).ui;\n\tif (typeof ui !== \"object\" || ui === null) {\n\t\treturn undefined;\n\t}\n\treturn ui as Record<string, unknown>;\n}\n\n/** Extract the MCP app resource URI from `output._meta.ui.resourceUri`, if present. */\nexport function getResourceUri(output: unknown): string | undefined {\n\tconst uri = getUiMeta(output)?.resourceUri;\n\treturn typeof uri === \"string\" ? uri : undefined;\n}\n\n/** Extract the auto-height flag from `output._meta.ui.autoHeight`, if present. */\nexport function getAutoHeight(output: unknown): boolean {\n\treturn getUiMeta(output)?.autoHeight === true;\n}\n\n/** Displays the tool call result as a collapsible JSON section labeled \"Response\", or an error block if `errorText` is set. */\nexport function ToolOutput({\n\tclassName,\n\toutput,\n\terrorText,\n\tdebug,\n\t...props\n}: ToolOutputProps) {\n\tconst filtered = useMemo(() => {\n\t\tif (\n\t\t\t!debug &&\n\t\t\ttypeof output === \"object\" &&\n\t\t\toutput !== null &&\n\t\t\t!Array.isArray(output)\n\t\t) {\n\t\t\tconst { _meta, ...rest } = output as Record<string, unknown>;\n\t\t\treturn rest;\n\t\t}\n\t\treturn output;\n\t}, [output, debug]);\n\n\tif (!(output || errorText)) {\n\t\treturn null;\n\t}\n\n\tif (errorText) {\n\t\treturn (\n\t\t\t<div className={cn(\"ww:space-y-2\", className)} {...props}>\n\t\t\t\t<h4 className=\"ww:text-xs ww:font-medium ww:uppercase ww:tracking-wide ww:text-muted-foreground\">\n\t\t\t\t\tError\n\t\t\t\t</h4>\n\t\t\t\t<div className=\"ww:rounded-lg ww:bg-destructive/10 ww:p-3 ww:text-xs ww:text-destructive\">\n\t\t\t\t\t{errorText}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<CollapsibleJSON\n\t\t\tdata={filtered}\n\t\t\tlabel=\"Response\"\n\t\t\tclassName={className}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n","\"use client\";\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n\ttype ModelContextUpdate,\n\tmergeModelContext,\n} from \"../../../shared/model-context\";\nimport { cn } from \"../lib/utils\";\n\nconst DEFAULT_RESOURCE_ENDPOINT = \"/api/mcp/resource\";\nconst MAX_HEIGHT = 500;\nconst DEFAULT_HEIGHT = 0;\nconst AUTOHEIGHT_PADDING = 16;\nconst PROTOCOL_VERSION = \"2026-01-26\";\nconst RESIZE_ANIMATION_MS = 300;\nconst HANDSHAKE_TIMEOUT_MS = 3000;\nconst MAX_RETRIES = 3;\n\nfunction normalizeString(value: unknown): string | undefined {\n\tif (typeof value !== \"string\") {\n\t\treturn undefined;\n\t}\n\tconst trimmed = value.trim();\n\treturn trimmed.length > 0 ? trimmed : undefined;\n}\n\nexport function resultProducesWidget(result: {\n\t_meta?: Record<string, unknown>;\n}): boolean {\n\tconst meta = result._meta;\n\tif (!meta || typeof meta !== \"object\") {\n\t\treturn false;\n\t}\n\n\tconst openaiTemplate = normalizeString(meta[\"openai/outputTemplate\"]);\n\tif (openaiTemplate) {\n\t\treturn true;\n\t}\n\n\tconst uiMeta = meta.ui;\n\tif (!uiMeta || typeof uiMeta !== \"object\") {\n\t\treturn false;\n\t}\n\n\tconst resourceUri = normalizeString(\n\t\t(uiMeta as Record<string, unknown>).resourceUri,\n\t);\n\treturn Boolean(resourceUri);\n}\n\nfunction shouldAutoInjectToolResultText(result: {\n\t_meta?: Record<string, unknown>;\n}): boolean {\n\tif (resultProducesWidget(result)) {\n\t\treturn false;\n\t}\n\treturn result._meta?.[\"waniwani/autoInjectResultText\"] !== false;\n}\n\nexport type McpAppDisplayMode = \"inline\" | \"pip\" | \"fullscreen\";\n\nexport interface McpAppFrameProps {\n\tresourceUri: string;\n\ttoolInput: Record<string, unknown>;\n\ttoolResult: {\n\t\tcontent?: Array<{ type: string; text?: string }>;\n\t\tstructuredContent?: Record<string, unknown>;\n\t\t_meta?: Record<string, unknown>;\n\t};\n\tresourceEndpoint?: string;\n\tchatSessionId?: string;\n\tisDark?: boolean;\n\tclassName?: string;\n\t/** When true, the iframe height auto-adapts to its content. Set via `_meta.ui.autoHeight` in the tool result. */\n\tautoHeight?: boolean;\n\t/** Called when the view requests to open a URL */\n\tonOpenLink?: (url: string) => void;\n\t/** Called when a widget sends a follow-up message via `ui/message` */\n\tonFollowUp?: (message: {\n\t\trole: string;\n\t\tcontent: Array<{ type: string; text?: string }>;\n\t\tmodelContext?: ModelContextUpdate;\n\t}) => void;\n\t/** Called when a widget calls a tool via `tools/call` (MCP Apps standard). */\n\tonCallTool?: (params: {\n\t\tname: string;\n\t\targuments: Record<string, unknown>;\n\t}) => Promise<{\n\t\tcontent?: Array<{ type: string; text?: string }>;\n\t\tstructuredContent?: Record<string, unknown>;\n\t\t_meta?: Record<string, unknown>;\n\t}>;\n\t/** Called when the widget requests a display mode change (e.g. \"fullscreen\" for expand) */\n\tonDisplayModeChange?: (mode: McpAppDisplayMode) => void;\n\t/** When true, the iframe fills its container (fullscreen mode). */\n\tisFullscreen?: boolean;\n}\n\nexport function McpAppFrame({\n\tresourceUri,\n\ttoolInput,\n\ttoolResult,\n\tresourceEndpoint = DEFAULT_RESOURCE_ENDPOINT,\n\tchatSessionId,\n\tisDark = false,\n\tclassName,\n\tautoHeight = false,\n\tonOpenLink,\n\tonFollowUp,\n\tonCallTool,\n\tonDisplayModeChange,\n\tisFullscreen = false,\n}: McpAppFrameProps) {\n\tconst iframeRef = useRef<HTMLIFrameElement>(null);\n\tconst toolInputRef = useRef(toolInput);\n\tconst toolResultRef = useRef(toolResult);\n\tconst lastSizeRef = useRef({ width: 0, height: 0 });\n\tconst animationRef = useRef<Animation | null>(null);\n\tconst initializedRef = useRef(false);\n\tconst retryCountRef = useRef(0);\n\tconst displayModeRef = useRef<McpAppDisplayMode>(\"inline\");\n\tconst [height, setHeight] = useState(DEFAULT_HEIGHT);\n\tconst [width, setWidth] = useState<number | undefined>(undefined);\n\tconst onOpenLinkRef = useRef(onOpenLink);\n\tconst onFollowUpRef = useRef(onFollowUp);\n\tconst onCallToolRef = useRef(onCallTool);\n\tconst onDisplayModeChangeRef = useRef(onDisplayModeChange);\n\tconst chatSessionIdRef = useRef(chatSessionId);\n\n\ttoolInputRef.current = toolInput;\n\ttoolResultRef.current = toolResult;\n\tonOpenLinkRef.current = onOpenLink;\n\tonFollowUpRef.current = onFollowUp;\n\tonCallToolRef.current = onCallTool;\n\tonDisplayModeChangeRef.current = onDisplayModeChange;\n\tchatSessionIdRef.current = chatSessionId;\n\n\tconst clampHeight = useCallback(\n\t\t(h: number) => {\n\t\t\tif (autoHeight) {\n\t\t\t\treturn Math.max(h + AUTOHEIGHT_PADDING, 0);\n\t\t\t}\n\t\t\treturn Math.min(Math.max(h, 50), MAX_HEIGHT);\n\t\t},\n\t\t[autoHeight],\n\t);\n\n\t// Build the iframe src URL directly — avoids null-origin issues with srcdoc\n\tconst iframeSrc = useMemo(\n\t\t() => `${resourceEndpoint}?uri=${encodeURIComponent(resourceUri)}`,\n\t\t[resourceEndpoint, resourceUri],\n\t);\n\n\tconst isDarkRef = useRef(isDark);\n\tisDarkRef.current = isDark;\n\n\t// Send theme changes to the iframe (only after handshake is complete)\n\tuseEffect(() => {\n\t\tif (!initializedRef.current) {\n\t\t\treturn;\n\t\t}\n\t\tconst iframe = iframeRef.current;\n\t\tif (!iframe?.contentWindow) {\n\t\t\treturn;\n\t\t}\n\n\t\tiframe.contentWindow.postMessage(\n\t\t\t{\n\t\t\t\tjsonrpc: \"2.0\",\n\t\t\t\tmethod: \"ui/notifications/host-context-changed\",\n\t\t\t\tparams: {\n\t\t\t\t\ttheme: isDark ? \"dark\" : \"light\",\n\t\t\t\t},\n\t\t\t},\n\t\t\t\"*\",\n\t\t);\n\t}, [isDark]);\n\n\t// Synchronous postMessage protocol handler — no async imports, no timing issues.\n\t// Handles the MCP UI protocol (ui/initialize, notifications, etc.) directly.\n\tuseEffect(() => {\n\t\tconst iframe = iframeRef.current;\n\t\tif (!iframe) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet disposed = false;\n\t\tlet handshakeReceived = false;\n\t\tlet pendingModelContext: ModelContextUpdate | null = null;\n\t\tlet pendingToolResult: {\n\t\t\ttext: string;\n\t\t\ttimer: ReturnType<typeof setTimeout>;\n\t\t} | null = null;\n\n\t\t// Retry: reload iframe if handshake doesn't arrive in time\n\t\tconst handshakeTimer = setTimeout(() => {\n\t\t\tif (disposed || handshakeReceived) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (retryCountRef.current >= MAX_RETRIES) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tretryCountRef.current += 1;\n\t\t\t// Force reload with a cache-busting param\n\t\t\tconst url = new URL(iframe.src);\n\t\t\turl.searchParams.set(\"_retry\", String(retryCountRef.current));\n\t\t\tiframe.src = url.toString();\n\t\t}, HANDSHAKE_TIMEOUT_MS);\n\n\t\tconst postToIframe = (msg: Record<string, unknown>) => {\n\t\t\tiframe.contentWindow?.postMessage(msg, \"*\");\n\t\t};\n\n\t\tconst handleMessage = (event: MessageEvent) => {\n\t\t\tif (disposed) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (event.source !== iframe.contentWindow) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst data = event.data;\n\n\t\t\tif (!data || typeof data !== \"object\" || data.jsonrpc !== \"2.0\") {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst method: string | undefined = data.method;\n\t\t\tconst id: number | string | undefined = data.id;\n\n\t\t\t// ui/initialize — widget requests handshake\n\t\t\tif (method === \"ui/initialize\" && id != null) {\n\t\t\t\thandshakeReceived = true;\n\t\t\t\tclearTimeout(handshakeTimer);\n\t\t\t\tpostToIframe({\n\t\t\t\t\tjsonrpc: \"2.0\",\n\t\t\t\t\tid,\n\t\t\t\t\tresult: {\n\t\t\t\t\t\tprotocolVersion: data.params?.protocolVersion ?? PROTOCOL_VERSION,\n\t\t\t\t\t\thostInfo: { name: \"WaniWani Chat\", version: \"1.0.0\" },\n\t\t\t\t\t\thostCapabilities: {\n\t\t\t\t\t\t\topenLinks: {},\n\t\t\t\t\t\t\tmessage: {\n\t\t\t\t\t\t\t\ttext: {},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\ttools: {},\n\t\t\t\t\t\t\tupdateModelContext: {\n\t\t\t\t\t\t\t\ttext: {},\n\t\t\t\t\t\t\t\tstructuredContent: {},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\thostContext: {\n\t\t\t\t\t\t\ttheme: isDarkRef.current ? \"dark\" : \"light\",\n\t\t\t\t\t\t\tdisplayMode: displayModeRef.current,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// ui/notifications/initialized — widget confirms init, we send tool data\n\t\t\tif (method === \"ui/notifications/initialized\") {\n\t\t\t\tinitializedRef.current = true;\n\t\t\t\tconst input = toolInputRef.current;\n\t\t\t\tconst result = toolResultRef.current;\n\t\t\t\tconst resultMeta =\n\t\t\t\t\tresult._meta && typeof result._meta === \"object\"\n\t\t\t\t\t\t? result._meta\n\t\t\t\t\t\t: null;\n\t\t\t\tconst normalizedChatSessionId = normalizeString(\n\t\t\t\t\tchatSessionIdRef.current,\n\t\t\t\t);\n\t\t\t\tconst waniwaniMeta =\n\t\t\t\t\tresultMeta &&\n\t\t\t\t\ttypeof resultMeta.waniwani === \"object\" &&\n\t\t\t\t\tresultMeta.waniwani !== null\n\t\t\t\t\t\t? (resultMeta.waniwani as Record<string, unknown>)\n\t\t\t\t\t\t: null;\n\t\t\t\tconst forwardedWaniwaniMeta =\n\t\t\t\t\twaniwaniMeta || normalizedChatSessionId\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t...(waniwaniMeta ?? {}),\n\t\t\t\t\t\t\t\t...(normalizedChatSessionId\n\t\t\t\t\t\t\t\t\t? { sessionId: normalizedChatSessionId }\n\t\t\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: undefined;\n\t\t\t\tconst forwardedMeta =\n\t\t\t\t\tresultMeta || forwardedWaniwaniMeta\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t...(resultMeta ?? {}),\n\t\t\t\t\t\t\t\t...(forwardedWaniwaniMeta\n\t\t\t\t\t\t\t\t\t? { waniwani: forwardedWaniwaniMeta }\n\t\t\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: undefined;\n\n\t\t\t\tpostToIframe({\n\t\t\t\t\tjsonrpc: \"2.0\",\n\t\t\t\t\tmethod: \"ui/notifications/tool-input\",\n\t\t\t\t\tparams: { arguments: input },\n\t\t\t\t});\n\n\t\t\t\tconst content = result.content ?? [\n\t\t\t\t\t{ type: \"text\", text: JSON.stringify(result) },\n\t\t\t\t];\n\t\t\t\tpostToIframe({\n\t\t\t\t\tjsonrpc: \"2.0\",\n\t\t\t\t\tmethod: \"ui/notifications/tool-result\",\n\t\t\t\t\tparams: {\n\t\t\t\t\t\tcontent,\n\t\t\t\t\t\tstructuredContent: result.structuredContent,\n\t\t\t\t\t\t_meta: forwardedMeta,\n\t\t\t\t\t\t// Compatibility: some clients inspect `meta` instead of `_meta`.\n\t\t\t\t\t\tmeta: forwardedMeta,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// ui/notifications/size-changed — widget reports content size\n\t\t\tif (method === \"ui/notifications/size-changed\") {\n\t\t\t\tconst params = data.params;\n\t\t\t\tconst newHeight =\n\t\t\t\t\ttypeof params?.height === \"number\" ? params.height : undefined;\n\t\t\t\tconst newWidth =\n\t\t\t\t\ttypeof params?.width === \"number\" ? params.width : undefined;\n\n\t\t\t\t// Deduplicate — only update if values actually changed (prevents feedback loops)\n\t\t\t\tconst last = lastSizeRef.current;\n\t\t\t\tconst heightChanged =\n\t\t\t\t\tnewHeight !== undefined && newHeight !== last.height;\n\t\t\t\tconst widthChanged = newWidth !== undefined && newWidth !== last.width;\n\n\t\t\t\tif (!heightChanged && !widthChanged) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (heightChanged && newHeight !== undefined) {\n\t\t\t\t\tlast.height = newHeight;\n\t\t\t\t\tconst clamped = clampHeight(newHeight);\n\n\t\t\t\t\t// Get current visual height before canceling the old animation\n\t\t\t\t\tconst from = iframe.getBoundingClientRect().height;\n\n\t\t\t\t\t// Cancel previous animation so its fill: \"forwards\" stops overriding inline style\n\t\t\t\t\tif (animationRef.current) {\n\t\t\t\t\t\tanimationRef.current.cancel();\n\t\t\t\t\t\tanimationRef.current = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set the target height in React state (takes effect once no animation overrides it)\n\t\t\t\t\tsetHeight(clamped);\n\n\t\t\t\t\t// Animate the height transition\n\t\t\t\t\tif (iframe.animate && Math.abs(from - clamped) > 2) {\n\t\t\t\t\t\tconst anim = iframe.animate(\n\t\t\t\t\t\t\t[{ height: `${from}px` }, { height: `${clamped}px` }],\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tduration: RESIZE_ANIMATION_MS,\n\t\t\t\t\t\t\t\teasing: \"ease-out\",\n\t\t\t\t\t\t\t\tfill: \"forwards\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t);\n\t\t\t\t\t\tanimationRef.current = anim;\n\t\t\t\t\t\t// Once done, remove the animation so the inline style is the source of truth\n\t\t\t\t\t\tanim.onfinish = () => {\n\t\t\t\t\t\t\tif (animationRef.current === anim) {\n\t\t\t\t\t\t\t\tanim.cancel();\n\t\t\t\t\t\t\t\tanimationRef.current = null;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (widthChanged && autoHeight && newWidth !== undefined) {\n\t\t\t\t\tlast.width = newWidth;\n\t\t\t\t\tsetWidth(newWidth);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// ui/open-link — widget requests to open a URL\n\t\t\tif (method === \"ui/open-link\" && id != null) {\n\t\t\t\tconst url = data.params?.url;\n\t\t\t\tif (typeof url === \"string\") {\n\t\t\t\t\tif (onOpenLinkRef.current) {\n\t\t\t\t\t\tonOpenLinkRef.current(url);\n\t\t\t\t\t} else {\n\t\t\t\t\t\twindow.open(url, \"_blank\", \"noopener,noreferrer\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tpostToIframe({ jsonrpc: \"2.0\", id, result: {} });\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// ui/message — widget sends a chat message\n\t\t\tif (method === \"ui/message\" && id != null) {\n\t\t\t\tif (onFollowUpRef.current && data.params) {\n\t\t\t\t\tlet params = data.params;\n\t\t\t\t\tconst modelContext = pendingModelContext;\n\t\t\t\t\tpendingModelContext = null;\n\t\t\t\t\t// Merge pending tool result into the follow-up message\n\t\t\t\t\tif (pendingToolResult) {\n\t\t\t\t\t\tclearTimeout(pendingToolResult.timer);\n\t\t\t\t\t\tconst toolText = pendingToolResult.text;\n\t\t\t\t\t\tpendingToolResult = null;\n\t\t\t\t\t\tconst existingText = (params.content ?? [])\n\t\t\t\t\t\t\t.map((c: { text?: string }) => c.text ?? \"\")\n\t\t\t\t\t\t\t.join(\"\")\n\t\t\t\t\t\t\t.trim();\n\t\t\t\t\t\tparams = {\n\t\t\t\t\t\t\t...params,\n\t\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t\t{ type: \"text\", text: `${existingText}\\n\\n${toolText}` },\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tonFollowUpRef.current({\n\t\t\t\t\t\t...params,\n\t\t\t\t\t\t...(modelContext ? { modelContext } : {}),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tpostToIframe({ jsonrpc: \"2.0\", id, result: {} });\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// ui/update-model-context — widget updates hidden model context\n\t\t\tif (method === \"ui/update-model-context\" && id != null) {\n\t\t\t\tpendingModelContext = mergeModelContext(\n\t\t\t\t\tpendingModelContext,\n\t\t\t\t\tdata.params as ModelContextUpdate,\n\t\t\t\t);\n\t\t\t\tpostToIframe({ jsonrpc: \"2.0\", id, result: {} });\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// tools/call — widget calls a server tool (MCP Apps standard)\n\t\t\tif (method === \"tools/call\" && id != null) {\n\t\t\t\tconst handler = onCallToolRef.current;\n\t\t\t\tif (!handler) {\n\t\t\t\t\tpostToIframe({\n\t\t\t\t\t\tjsonrpc: \"2.0\",\n\t\t\t\t\t\tid,\n\t\t\t\t\t\terror: { code: -32601, message: \"tools/call not supported\" },\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\thandler({\n\t\t\t\t\tname: data.params?.name,\n\t\t\t\t\targuments: data.params?.arguments ?? {},\n\t\t\t\t})\n\t\t\t\t\t.then((result) => {\n\t\t\t\t\t\tpostToIframe({ jsonrpc: \"2.0\", id, result });\n\n\t\t\t\t\t\t// Schedule auto-injection for non-widget tool results. Plain\n\t\t\t\t\t\t// tools may still return structuredContent, so the presence of\n\t\t\t\t\t\t// structuredContent alone is not enough to decide this.\n\t\t\t\t\t\tconst text = result.content\n\t\t\t\t\t\t\t?.map((c) => c.text ?? \"\")\n\t\t\t\t\t\t\t.join(\"\")\n\t\t\t\t\t\t\t.trim();\n\t\t\t\t\t\tif (text && shouldAutoInjectToolResultText(result)) {\n\t\t\t\t\t\t\tif (pendingToolResult) {\n\t\t\t\t\t\t\t\tclearTimeout(pendingToolResult.timer);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpendingToolResult = {\n\t\t\t\t\t\t\t\ttext,\n\t\t\t\t\t\t\t\ttimer: setTimeout(() => {\n\t\t\t\t\t\t\t\t\tif (disposed) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tconst modelContext = pendingModelContext;\n\t\t\t\t\t\t\t\t\tpendingModelContext = null;\n\t\t\t\t\t\t\t\t\tpendingToolResult = null;\n\t\t\t\t\t\t\t\t\tonFollowUpRef.current?.({\n\t\t\t\t\t\t\t\t\t\trole: \"user\",\n\t\t\t\t\t\t\t\t\t\tcontent: [{ type: \"text\", text }],\n\t\t\t\t\t\t\t\t\t\t...(modelContext ? { modelContext } : {}),\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}, 500),\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.catch((err: unknown) => {\n\t\t\t\t\t\tconst message =\n\t\t\t\t\t\t\terr instanceof Error ? err.message : \"Tool call failed\";\n\t\t\t\t\t\tpostToIframe({\n\t\t\t\t\t\t\tjsonrpc: \"2.0\",\n\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\terror: { code: -32000, message },\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// ui/request-display-mode — widget requests fullscreen/inline/pip\n\t\t\tif (method === \"ui/request-display-mode\" && id != null) {\n\t\t\t\tconst requested = data.params?.mode;\n\t\t\t\tconst granted =\n\t\t\t\t\trequested === \"fullscreen\" ||\n\t\t\t\t\trequested === \"inline\" ||\n\t\t\t\t\trequested === \"pip\"\n\t\t\t\t\t\t? requested\n\t\t\t\t\t\t: \"inline\";\n\t\t\t\tdisplayModeRef.current = granted;\n\t\t\t\t// Reply with the granted mode\n\t\t\t\tpostToIframe({\n\t\t\t\t\tjsonrpc: \"2.0\",\n\t\t\t\t\tid,\n\t\t\t\t\tresult: { mode: granted },\n\t\t\t\t});\n\t\t\t\t// Notify the widget of the context change\n\t\t\t\tpostToIframe({\n\t\t\t\t\tjsonrpc: \"2.0\",\n\t\t\t\t\tmethod: \"ui/notifications/host-context-changed\",\n\t\t\t\t\tparams: { displayMode: granted },\n\t\t\t\t});\n\t\t\t\tonDisplayModeChangeRef.current?.(granted);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// ui/resource-teardown — graceful shutdown\n\t\t\tif (method === \"ui/resource-teardown\" && id != null) {\n\t\t\t\tpostToIframe({ jsonrpc: \"2.0\", id, result: {} });\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// ping — keep-alive\n\t\t\tif (method === \"ping\" && id != null) {\n\t\t\t\tpostToIframe({ jsonrpc: \"2.0\", id, result: {} });\n\t\t\t}\n\t\t};\n\n\t\twindow.addEventListener(\"message\", handleMessage);\n\n\t\treturn () => {\n\t\t\tdisposed = true;\n\t\t\tclearTimeout(handshakeTimer);\n\t\t\tif (pendingToolResult) {\n\t\t\t\tclearTimeout(pendingToolResult.timer);\n\t\t\t}\n\t\t\twindow.removeEventListener(\"message\", handleMessage);\n\t\t};\n\t}, [autoHeight, clampHeight]);\n\n\treturn (\n\t\t<iframe\n\t\t\tref={iframeRef}\n\t\t\tsrc={iframeSrc}\n\t\t\tsandbox=\"allow-scripts allow-forms allow-same-origin\"\n\t\t\tclassName={cn(\n\t\t\t\t!isFullscreen && \"ww:rounded-md ww:border ww:border-border\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tstyle={{\n\t\t\t\theight: isFullscreen ? \"100%\" : height,\n\t\t\t\tminWidth: isFullscreen || !width ? undefined : `min(${width}px, 100%)`,\n\t\t\t\twidth: \"100%\",\n\t\t\t\tborder: \"none\",\n\t\t\t\tcolorScheme: isDark ? \"dark\" : \"auto\",\n\t\t\t}}\n\t\t\ttitle=\"MCP App\"\n\t\t/>\n\t);\n}\n","import type { ContentBlock } from \"@modelcontextprotocol/sdk/types.js\";\n\nexport type ModelContextContentBlock = ContentBlock;\n\nexport type ModelContextUpdate = {\n\tcontent?: ModelContextContentBlock[];\n\tstructuredContent?: Record<string, unknown>;\n};\n\nexport function hasModelContext(\n\tvalue: ModelContextUpdate | null | undefined,\n): value is ModelContextUpdate {\n\tif (!value) {\n\t\treturn false;\n\t}\n\tconst hasContent = Array.isArray(value.content) && value.content.length > 0;\n\tconst hasStructuredContent =\n\t\ttypeof value.structuredContent === \"object\" &&\n\t\tvalue.structuredContent !== null &&\n\t\tObject.keys(value.structuredContent).length > 0;\n\treturn hasContent || hasStructuredContent;\n}\n\nexport function mergeModelContext(\n\tcurrent: ModelContextUpdate | null | undefined,\n\tnext: ModelContextUpdate | null | undefined,\n): ModelContextUpdate | null {\n\tif (!hasModelContext(current) && !hasModelContext(next)) {\n\t\treturn null;\n\t}\n\tif (!hasModelContext(current)) {\n\t\treturn {\n\t\t\t...(next?.content ? { content: [...next.content] } : {}),\n\t\t\t...(next?.structuredContent\n\t\t\t\t? { structuredContent: { ...next.structuredContent } }\n\t\t\t\t: {}),\n\t\t};\n\t}\n\tif (!hasModelContext(next)) {\n\t\treturn {\n\t\t\t...(current.content ? { content: [...current.content] } : {}),\n\t\t\t...(current.structuredContent\n\t\t\t\t? { structuredContent: { ...current.structuredContent } }\n\t\t\t\t: {}),\n\t\t};\n\t}\n\n\treturn {\n\t\t...(current.content || next.content\n\t\t\t? { content: [...(current.content ?? []), ...(next.content ?? [])] }\n\t\t\t: {}),\n\t\t...(current.structuredContent || next.structuredContent\n\t\t\t? {\n\t\t\t\t\tstructuredContent: {\n\t\t\t\t\t\t...(current.structuredContent ?? {}),\n\t\t\t\t\t\t...(next.structuredContent ?? {}),\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t: {}),\n\t};\n}\n\nexport function formatModelContextForPrompt(\n\tvalue: ModelContextUpdate | null | undefined,\n): string {\n\tif (!hasModelContext(value)) {\n\t\treturn \"\";\n\t}\n\n\tconst sections: string[] = [\n\t\t\"## Widget Model Context\",\n\t\t\"This hidden context was supplied by an MCP App via `ui/update-model-context`.\",\n\t\t\"Use it for the next assistant turn only. If it includes flow continuation or tool-call instructions, follow them exactly.\",\n\t];\n\n\tif (value.content?.length) {\n\t\tconst renderedBlocks = value.content\n\t\t\t.map((block) => {\n\t\t\t\tif (block.type === \"text\" && typeof block.text === \"string\") {\n\t\t\t\t\treturn block.text.trim();\n\t\t\t\t}\n\t\t\t\treturn JSON.stringify(block, null, 2);\n\t\t\t})\n\t\t\t.filter(Boolean)\n\t\t\t.join(\"\\n\\n\");\n\t\tif (renderedBlocks) {\n\t\t\tsections.push(`Content blocks:\\n${renderedBlocks}`);\n\t\t}\n\t}\n\n\tif (\n\t\tvalue.structuredContent &&\n\t\tObject.keys(value.structuredContent).length > 0\n\t) {\n\t\tsections.push(\n\t\t\t`Structured content JSON:\\n${JSON.stringify(value.structuredContent, null, 2)}`,\n\t\t);\n\t}\n\n\treturn sections.join(\"\\n\\n\");\n}\n","\"use client\";\n\nimport type { WelcomeConfig } from \"../@types\";\nimport { cn } from \"../lib/utils\";\n\ninterface WelcomeScreenProps extends WelcomeConfig {\n\tonSuggestionSelect?: (suggestion: string) => void;\n}\n\nexport function WelcomeScreen({\n\ticon,\n\ttitle,\n\tdescription,\n\tsuggestions,\n\tonSuggestionSelect,\n}: WelcomeScreenProps) {\n\treturn (\n\t\t<div className=\"ww:flex ww:flex-col ww:items-center ww:justify-center ww:py-12 ww:px-6 ww:text-center ww:min-h-full\">\n\t\t\t{icon && (\n\t\t\t\t<div className=\"ww:mb-4 ww:flex ww:items-center ww:justify-center ww:size-12 ww:rounded-xl ww:bg-foreground ww:text-background\">\n\t\t\t\t\t{icon}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t<h2 className=\"ww:text-lg ww:font-semibold ww:text-foreground\">\n\t\t\t\t{title}\n\t\t\t</h2>\n\t\t\t{description && (\n\t\t\t\t<p className=\"ww:mt-1 ww:text-sm ww:text-muted-foreground ww:max-w-sm\">\n\t\t\t\t\t{description}\n\t\t\t\t</p>\n\t\t\t)}\n\t\t\t{suggestions && suggestions.length > 0 && (\n\t\t\t\t<div className=\"ww:mt-6 ww:w-full ww:max-w-md ww:flex ww:flex-col ww:gap-2\">\n\t\t\t\t\t{suggestions.map((suggestion, index) => (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tkey={suggestion}\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tonClick={() => onSuggestionSelect?.(suggestion)}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"ww:w-full ww:text-left ww:rounded-xl ww:border ww:border-border ww:bg-background ww:px-4 ww:py-3 ww:text-sm\",\n\t\t\t\t\t\t\t\t\"ww:text-foreground ww:hover:bg-accent ww:hover:border-primary/30\",\n\t\t\t\t\t\t\t\t\"ww:transition-all ww:duration-200 ww:ease-out ww:cursor-pointer\",\n\t\t\t\t\t\t\t\t\"ww:animate-[ww-fade-in_0.2s_ease-out_both]\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\tstyle={{ animationDelay: `${index * 50}ms` }}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{suggestion}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","\"use client\";\n\nimport { Component, type ReactNode } from \"react\";\n\ninterface Props {\n\tchildren: ReactNode;\n}\n\ninterface State {\n\thasError: boolean;\n}\n\nexport class WidgetErrorBoundary extends Component<Props, State> {\n\tstate: State = { hasError: false };\n\n\tstatic getDerivedStateFromError(): State {\n\t\treturn { hasError: true };\n\t}\n\n\tcomponentDidCatch(error: Error) {\n\t\tconsole.warn(\"[WaniWani] Widget failed to render:\", error.message);\n\t}\n\n\trender() {\n\t\tif (this.state.hasError) {\n\t\t\treturn (\n\t\t\t\t<div className=\"ww:flex ww:items-center ww:justify-between ww:rounded-md ww:border ww:border-border ww:bg-muted/50 ww:px-4 ww:py-3 ww:text-sm ww:text-muted-foreground\">\n\t\t\t\t\t<span>Widget failed to load</span>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tonClick={() => this.setState({ hasError: false })}\n\t\t\t\t\t\tclassName=\"ww:text-xs ww:font-medium ww:text-primary ww:hover:underline\"\n\t\t\t\t\t>\n\t\t\t\t\t\tRetry\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\n\t\treturn this.props.children;\n\t}\n}\n","\"use client\";\n\nimport type { ChatStatus, ReasoningUIPart, ToolUIPart, UIMessage } from \"ai\";\nimport type { ModelContextUpdate } from \"../../../shared/model-context\";\n\nimport type { WelcomeConfig } from \"../@types\";\nimport { Attachments } from \"../ai-elements/attachments\";\nimport { Loader } from \"../ai-elements/loader\";\nimport {\n\tMessage,\n\tMessageContent,\n\tMessageResponse,\n} from \"../ai-elements/message\";\nimport { Reasoning } from \"../ai-elements/reasoning\";\nimport {\n\tgetAutoHeight,\n\tgetResourceUri,\n\tTool,\n\tToolContent,\n\tToolHeader,\n\tToolInput,\n\tToolOutput,\n} from \"../ai-elements/tool\";\nimport type { McpAppDisplayMode } from \"./mcp-app-frame\";\nimport { McpAppFrame } from \"./mcp-app-frame\";\nimport { WelcomeScreen } from \"./welcome-screen\";\nimport { WidgetErrorBoundary } from \"./widget-error-boundary\";\n\n/** Converts `get_price_estimate` or `compare-prices` → `Get price estimate` / `Compare prices` */\nfunction formatToolName(name: string | undefined): string {\n\tif (!name) {\n\t\treturn \"Tool\";\n\t}\n\n\treturn name.replace(/[-_]/g, \" \").replace(/^\\w/, (c) => c.toUpperCase());\n}\n\nexport interface FullscreenWidget {\n\ttoolCallId: string;\n\tresourceUri: string;\n\ttoolInput: Record<string, unknown>;\n\ttoolResult: {\n\t\tcontent?: Array<{ type: string; text?: string }>;\n\t\tstructuredContent?: Record<string, unknown>;\n\t\t_meta?: Record<string, unknown>;\n\t};\n\tautoHeight: boolean;\n}\n\ninterface MessageListProps {\n\tmessages: UIMessage[];\n\tstatus: ChatStatus;\n\twelcomeMessage?: string;\n\t/** Rich welcome screen config. Takes precedence over `welcomeMessage`. */\n\twelcome?: WelcomeConfig;\n\t/** Called when a welcome screen suggestion card is clicked. */\n\tonSuggestionSelect?: (suggestion: string) => void;\n\tresourceEndpoint?: string;\n\tchatSessionId?: string;\n\tisDark?: boolean;\n\tonFollowUp?: (message: {\n\t\trole: string;\n\t\tcontent: Array<{ type: string; text?: string }>;\n\t\tmodelContext?: ModelContextUpdate;\n\t}) => void;\n\tonCallTool?: (params: {\n\t\tname: string;\n\t\targuments: Record<string, unknown>;\n\t}) => Promise<{\n\t\tcontent?: Array<{ type: string; text?: string }>;\n\t\tstructuredContent?: Record<string, unknown>;\n\t\t_meta?: Record<string, unknown>;\n\t}>;\n\tonWidgetDisplayModeChange?: (\n\t\tmode: McpAppDisplayMode,\n\t\twidget: FullscreenWidget,\n\t) => void;\n\t/** When set, only the matching widget is shown (fullscreen mode). The iframe stays mounted. */\n\tfullscreenToolCallId?: string | null;\n\t/** When true, show _meta in tool call inputs and outputs. */\n\tdebug?: boolean;\n}\n\nexport function MessageList({\n\tmessages,\n\tstatus,\n\twelcomeMessage,\n\twelcome,\n\tonSuggestionSelect,\n\tresourceEndpoint,\n\tchatSessionId,\n\tisDark,\n\tonFollowUp,\n\tonCallTool,\n\tonWidgetDisplayModeChange,\n\tfullscreenToolCallId,\n\tdebug,\n}: MessageListProps) {\n\tconst isLoading = status === \"submitted\" || status === \"streaming\";\n\tconst lastMessage = messages[messages.length - 1];\n\tconst hasMessages = messages.length > 0;\n\tconst showLoaderBubble =\n\t\tisLoading && (!hasMessages || lastMessage.role === \"user\");\n\n\tconst isFullscreenActive = fullscreenToolCallId != null;\n\n\treturn (\n\t\t<>\n\t\t\t{!isFullscreenActive &&\n\t\t\t\t(!hasMessages && welcome ? (\n\t\t\t\t\t<WelcomeScreen {...welcome} onSuggestionSelect={onSuggestionSelect} />\n\t\t\t\t) : (\n\t\t\t\t\twelcomeMessage && (\n\t\t\t\t\t\t<Message from=\"assistant\">\n\t\t\t\t\t\t\t<MessageContent>\n\t\t\t\t\t\t\t\t<MessageResponse>{welcomeMessage}</MessageResponse>\n\t\t\t\t\t\t\t</MessageContent>\n\t\t\t\t\t\t</Message>\n\t\t\t\t\t)\n\t\t\t\t))}\n\t\t\t{messages.map((message) => {\n\t\t\t\tconst textParts = message.parts.filter((p) => p.type === \"text\");\n\t\t\t\tconst reasoningParts = message.parts.filter(\n\t\t\t\t\t(p): p is ReasoningUIPart => p.type === \"reasoning\",\n\t\t\t\t);\n\t\t\t\tconst fileParts = message.parts.filter((p) => p.type === \"file\");\n\t\t\t\tconst toolParts = message.parts.filter(\n\t\t\t\t\t(\n\t\t\t\t\t\tp,\n\t\t\t\t\t): p is typeof p & {\n\t\t\t\t\t\ttoolCallId: string;\n\t\t\t\t\t\ttoolName: string;\n\t\t\t\t\t\tstate: ToolUIPart[\"state\"];\n\t\t\t\t\t\tinput: unknown;\n\t\t\t\t\t\ttitle?: string;\n\t\t\t\t\t} => \"toolCallId\" in p,\n\t\t\t\t);\n\t\t\t\tconst isLastAssistant =\n\t\t\t\t\tmessage === lastMessage && message.role === \"assistant\";\n\t\t\t\tconst hasTextContent = textParts.length > 0;\n\t\t\t\tconst containsFullscreenTool = isFullscreenActive\n\t\t\t\t\t? toolParts.some((p) => p.toolCallId === fullscreenToolCallId)\n\t\t\t\t\t: false;\n\n\t\t\t\t// Hide messages that don't contain the fullscreen widget\n\t\t\t\tif (isFullscreenActive && !containsFullscreenTool) {\n\t\t\t\t\treturn <div key={message.id} style={{ display: \"none\" }} />;\n\t\t\t\t}\n\n\t\t\t\treturn (\n\t\t\t\t\t<Message from={message.role} key={message.id}>\n\t\t\t\t\t\t{!containsFullscreenTool &&\n\t\t\t\t\t\t\treasoningParts.map((part, i) => (\n\t\t\t\t\t\t\t\t<Reasoning\n\t\t\t\t\t\t\t\t\tkey={`reasoning-${message.id}-${i}`}\n\t\t\t\t\t\t\t\t\ttext={part.text}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t{toolParts.map((part) => {\n\t\t\t\t\t\t\tconst output = \"output\" in part ? part.output : undefined;\n\t\t\t\t\t\t\tconst resourceUri =\n\t\t\t\t\t\t\t\toutput !== undefined ? getResourceUri(output) : undefined;\n\t\t\t\t\t\t\tconst autoHeight =\n\t\t\t\t\t\t\t\toutput !== undefined ? getAutoHeight(output) : false;\n\t\t\t\t\t\t\tconst isFullscreen = part.toolCallId === fullscreenToolCallId;\n\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tkey={part.toolCallId}\n\t\t\t\t\t\t\t\t\tstyle={\n\t\t\t\t\t\t\t\t\t\tisFullscreen\n\t\t\t\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\t\t\t\tposition: \"absolute\" as const,\n\t\t\t\t\t\t\t\t\t\t\t\t\tinset: 0,\n\t\t\t\t\t\t\t\t\t\t\t\t\tzIndex: 10,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tflexDirection: \"column\" as const,\n\t\t\t\t\t\t\t\t\t\t\t\t\toverflow: \"hidden\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tbackground: \"var(--ww-color-background)\",\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<div style={isFullscreen ? { display: \"none\" } : undefined}>\n\t\t\t\t\t\t\t\t\t\t<Tool defaultOpen={part.state === \"output-available\"}>\n\t\t\t\t\t\t\t\t\t\t\t<ToolHeader\n\t\t\t\t\t\t\t\t\t\t\t\ttitle={part.title ?? formatToolName(part.toolName)}\n\t\t\t\t\t\t\t\t\t\t\t\tstate={part.state}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t<ToolContent>\n\t\t\t\t\t\t\t\t\t\t\t\t<ToolInput input={part.input} debug={debug} />\n\t\t\t\t\t\t\t\t\t\t\t\t{output !== undefined && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<ToolOutput\n\t\t\t\t\t\t\t\t\t\t\t\t\t\toutput={output}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\terrorText={\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"errorText\" in part ? part.errorText : undefined\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdebug={debug}\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t</ToolContent>\n\t\t\t\t\t\t\t\t\t\t</Tool>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t{resourceUri && resourceEndpoint && output !== undefined && (\n\t\t\t\t\t\t\t\t\t\t<WidgetErrorBoundary>\n\t\t\t\t\t\t\t\t\t\t\t<McpAppFrame\n\t\t\t\t\t\t\t\t\t\t\t\tisFullscreen={isFullscreen}\n\t\t\t\t\t\t\t\t\t\t\t\tresourceUri={resourceUri}\n\t\t\t\t\t\t\t\t\t\t\t\ttoolInput={\n\t\t\t\t\t\t\t\t\t\t\t\t\t(part.input as Record<string, unknown>) ?? {}\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\ttoolResult={{\n\t\t\t\t\t\t\t\t\t\t\t\t\tcontent: (output as Record<string, unknown>)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t.content as\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t| Array<{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype: string;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttext?: string;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t }>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t| undefined,\n\t\t\t\t\t\t\t\t\t\t\t\t\tstructuredContent: (output as Record<string, unknown>)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t.structuredContent as\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t| Record<string, unknown>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t| undefined,\n\t\t\t\t\t\t\t\t\t\t\t\t\t_meta: (output as Record<string, unknown>)._meta as\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t| Record<string, unknown>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t| undefined,\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\tresourceEndpoint={resourceEndpoint}\n\t\t\t\t\t\t\t\t\t\t\t\tchatSessionId={chatSessionId}\n\t\t\t\t\t\t\t\t\t\t\t\tisDark={isDark}\n\t\t\t\t\t\t\t\t\t\t\t\tautoHeight={autoHeight}\n\t\t\t\t\t\t\t\t\t\t\t\tonFollowUp={onFollowUp}\n\t\t\t\t\t\t\t\t\t\t\t\tonCallTool={onCallTool}\n\t\t\t\t\t\t\t\t\t\t\t\tonDisplayModeChange={\n\t\t\t\t\t\t\t\t\t\t\t\t\tonWidgetDisplayModeChange\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? (mode) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonWidgetDisplayModeChange(mode, {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttoolCallId: part.toolCallId,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tresourceUri,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttoolInput:\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(part.input as Record<string, unknown>) ??\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttoolResult: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcontent: (output as Record<string, unknown>)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.content as\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t| Array<{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype: string;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttext?: string;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t }>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t| undefined,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstructuredContent: (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\toutput as Record<string, unknown>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t).structuredContent as\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t| Record<string, unknown>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t| undefined,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t_meta: (output as Record<string, unknown>)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t._meta as\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t| Record<string, unknown>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t| undefined,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tautoHeight,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t</WidgetErrorBoundary>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})}\n\t\t\t\t\t\t{!containsFullscreenTool && (\n\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t<MessageContent>\n\t\t\t\t\t\t\t\t\t{fileParts.length > 0 && <Attachments files={fileParts} />}\n\t\t\t\t\t\t\t\t\t{hasTextContent\n\t\t\t\t\t\t\t\t\t\t? textParts.map((part, i) => (\n\t\t\t\t\t\t\t\t\t\t\t\t<MessageResponse key={`${message.id}-${i}`}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{part.type === \"text\" ? part.text : \"\"}\n\t\t\t\t\t\t\t\t\t\t\t\t</MessageResponse>\n\t\t\t\t\t\t\t\t\t\t\t))\n\t\t\t\t\t\t\t\t\t\t: isLastAssistant && isLoading && <Loader />}\n\t\t\t\t\t\t\t\t</MessageContent>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Message>\n\t\t\t\t);\n\t\t\t})}\n\t\t\t{!isFullscreenActive && showLoaderBubble && (\n\t\t\t\t<Message from=\"assistant\">\n\t\t\t\t\t<MessageContent>\n\t\t\t\t\t\t<Loader />\n\t\t\t\t\t</MessageContent>\n\t\t\t\t</Message>\n\t\t\t)}\n\t\t</>\n\t);\n}\n","\"use client\";\n\nimport type { HTMLAttributes } from \"react\";\nimport { cn } from \"../lib/utils\";\n\nexport interface SuggestionsProps\n\textends Omit<HTMLAttributes<HTMLDivElement>, \"onSelect\"> {\n\tsuggestions: string[];\n\tisLoading?: boolean;\n\tonSelect: (suggestion: string) => void;\n}\n\nexport function Suggestions({\n\tsuggestions,\n\tisLoading,\n\tonSelect,\n\tclassName,\n\t...props\n}: SuggestionsProps) {\n\tif (suggestions.length === 0 && !isLoading) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<div className={cn(\"ww:px-4 ww:py-2\", className)} {...props}>\n\t\t\t<div className=\"ww:mx-auto ww:w-full ww:max-w-3xl ww:flex ww:flex-wrap ww:gap-2\">\n\t\t\t\t{isLoading\n\t\t\t\t\t? [0, 1, 2].map((i) => (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tkey={i}\n\t\t\t\t\t\t\t\tclassName=\"ww:h-7 ww:rounded-full ww:bg-accent ww:animate-pulse\"\n\t\t\t\t\t\t\t\tstyle={{ width: `${60 + i * 20}px` }}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t))\n\t\t\t\t\t: suggestions.map((suggestion, index) => (\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\tkey={suggestion}\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tonClick={() => onSelect(suggestion)}\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\"ww:rounded-full ww:border ww:border-border ww:bg-background ww:px-3 ww:py-1 ww:text-xs\",\n\t\t\t\t\t\t\t\t\t\"ww:text-foreground ww:hover:bg-accent ww:hover:border-primary/30\",\n\t\t\t\t\t\t\t\t\t\"ww:transition-all ww:duration-200 ww:ease-out ww:cursor-pointer\",\n\t\t\t\t\t\t\t\t\t\"ww:animate-[ww-fade-in_0.2s_ease-out_both]\",\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\tstyle={{ animationDelay: `${index * 50}ms` }}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{suggestion}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t))}\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","\"use client\";\n\nimport { useCallback, useRef } from \"react\";\nimport type { CallToolHandler } from \"../@types\";\n\ntype CallToolParams = Parameters<CallToolHandler>[0];\ntype CallToolResult = Awaited<ReturnType<CallToolHandler>>;\n\n/**\n * Returns a stable `onCallTool` callback.\n * Uses the user-provided handler if available, otherwise POSTs to `${api}/tool`.\n */\nexport function useCallTool(props: {\n\tapi?: string;\n\theaders?: Record<string, string>;\n\tonCallTool?: CallToolHandler;\n\tsessionId?: string;\n}): CallToolHandler {\n\tconst propsRef = useRef(props);\n\tpropsRef.current = props;\n\n\treturn useCallback(\n\t\tasync (params: CallToolParams): Promise<CallToolResult> => {\n\t\t\tconst { api, headers, onCallTool, sessionId } = propsRef.current;\n\n\t\t\tif (onCallTool) {\n\t\t\t\treturn onCallTool(params);\n\t\t\t}\n\n\t\t\tconst endpoint = `${api ?? \"/api/waniwani\"}/tool`;\n\t\t\tconst normalizedSessionId =\n\t\t\t\ttypeof sessionId === \"string\" && sessionId.trim().length > 0\n\t\t\t\t\t? sessionId.trim()\n\t\t\t\t\t: undefined;\n\t\t\tconst res = await fetch(endpoint, {\n\t\t\t\tmethod: \"POST\",\n\t\t\t\theaders: {\n\t\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t\t...(normalizedSessionId\n\t\t\t\t\t\t? { \"X-Session-Id\": normalizedSessionId }\n\t\t\t\t\t\t: {}),\n\t\t\t\t\t...headers,\n\t\t\t\t},\n\t\t\t\tbody: JSON.stringify(params),\n\t\t\t});\n\n\t\t\tif (!res.ok) {\n\t\t\t\tthrow new Error(`Tool call failed: ${res.status} ${res.statusText}`);\n\t\t\t}\n\n\t\t\treturn res.json();\n\t\t},\n\t\t[],\n\t);\n}\n","\"use client\";\n\nimport { useChat } from \"@ai-sdk/react\";\nimport type { FileUIPart } from \"ai\";\nimport { DefaultChatTransport } from \"ai\";\nimport { nanoid } from \"nanoid\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { ModelContextUpdate } from \"../../../shared/model-context\";\nimport { hasModelContext } from \"../../../shared/model-context\";\nimport type { ChatBaseProps } from \"../@types\";\nimport type { PromptInputMessage } from \"../ai-elements/prompt-input\";\nimport type { VisitorContext } from \"../lib/visitor-context\";\nimport { collectVisitorContext } from \"../lib/visitor-context\";\n\nconst SESSION_HEADER_NAME = \"x-session-id\";\n\nfunction normalizeSessionId(value: unknown): string | undefined {\n\tif (typeof value !== \"string\") {\n\t\treturn undefined;\n\t}\n\tconst trimmed = value.trim();\n\treturn trimmed.length > 0 ? trimmed : undefined;\n}\n\nexport interface QueuedMessage {\n\tid: string;\n\ttext: string;\n\tfiles: FileUIPart[];\n\tmodelContext?: ModelContextUpdate;\n}\n\ntype ChatEngineMessage = PromptInputMessage & {\n\tmodelContext?: ModelContextUpdate;\n};\n\nexport function useChatEngine(props: ChatBaseProps) {\n\tconst {\n\t\tapi = \"/api/waniwani\",\n\t\theaders: userHeaders,\n\t\tbody,\n\t\tonMessageSent,\n\t\tonResponseReceived,\n\t} = props;\n\n\tconst headersRef = useRef(userHeaders);\n\tconst bodyRef = useRef(body);\n\tconst pendingModelContextRef = useRef<ModelContextUpdate | undefined>(\n\t\tundefined,\n\t);\n\tconst visitorContextRef = useRef<VisitorContext | null>(null);\n\tconst [sessionId, setSessionIdState] = useState<string | undefined>(\n\t\tundefined,\n\t);\n\tconst sessionIdRef = useRef<string | undefined>(sessionId);\n\n\tconst getSessionId = useCallback((): string | undefined => {\n\t\treturn sessionIdRef.current;\n\t}, []);\n\n\tconst setSessionId = useCallback((value: unknown) => {\n\t\tconst sessionId = normalizeSessionId(value);\n\t\tif (!sessionId) {\n\t\t\treturn;\n\t\t}\n\t\tif (sessionIdRef.current === sessionId) {\n\t\t\treturn;\n\t\t}\n\n\t\tsessionIdRef.current = sessionId;\n\t\tsetSessionIdState(sessionId);\n\t}, []);\n\n\tconst clearSessionId = useCallback(() => {\n\t\tsessionIdRef.current = undefined;\n\t\tsetSessionIdState(undefined);\n\t}, []);\n\n\tuseEffect(() => {\n\t\theadersRef.current = userHeaders;\n\t}, [userHeaders]);\n\n\tuseEffect(() => {\n\t\tbodyRef.current = body;\n\t}, [body]);\n\n\tuseEffect(() => {\n\t\tcollectVisitorContext()\n\t\t\t.then((ctx) => {\n\t\t\t\tvisitorContextRef.current = ctx;\n\t\t\t})\n\t\t\t.catch(() => {\n\t\t\t\t// Best-effort — silently ignore failures\n\t\t\t});\n\t}, []);\n\n\tconst transportRef = useRef(\n\t\tnew DefaultChatTransport({\n\t\t\tapi,\n\t\t\theaders: () => ({\n\t\t\t\t...headersRef.current,\n\t\t\t}),\n\t\t\tbody: () => {\n\t\t\t\tconst resolvedBody = {\n\t\t\t\t\t...(bodyRef.current ?? {}),\n\t\t\t\t};\n\n\t\t\t\tconst hasExplicitSessionId = Object.hasOwn(resolvedBody, \"sessionId\");\n\t\t\t\tconst bodySessionId = normalizeSessionId(resolvedBody.sessionId);\n\t\t\t\tif (bodySessionId) {\n\t\t\t\t\tsetSessionId(bodySessionId);\n\t\t\t\t\tresolvedBody.sessionId = bodySessionId;\n\t\t\t\t} else if (hasExplicitSessionId) {\n\t\t\t\t\tclearSessionId();\n\t\t\t\t\tdelete resolvedBody.sessionId;\n\t\t\t\t} else {\n\t\t\t\t\tconst storedSessionId = getSessionId();\n\t\t\t\t\tif (storedSessionId) {\n\t\t\t\t\t\tresolvedBody.sessionId = storedSessionId;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (hasModelContext(pendingModelContextRef.current)) {\n\t\t\t\t\tresolvedBody.modelContext = pendingModelContextRef.current;\n\t\t\t\t}\n\n\t\t\t\tif (visitorContextRef.current) {\n\t\t\t\t\tconst vc = visitorContextRef.current;\n\t\t\t\t\tresolvedBody.visitorContext = {\n\t\t\t\t\t\ttimezone: vc.timezone,\n\t\t\t\t\t\tlanguage: vc.language,\n\t\t\t\t\t\tlanguages: vc.languages,\n\t\t\t\t\t\tdeviceType: vc.deviceType,\n\t\t\t\t\t\treferrer: vc.referrer,\n\t\t\t\t\t\tvisitorId: vc.visitorId,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn resolvedBody;\n\t\t\t},\n\t\t\tfetch: async (input, init) => {\n\t\t\t\tconst response = await fetch(input, init);\n\t\t\t\tpendingModelContextRef.current = undefined;\n\t\t\t\tsetSessionId(response.headers.get(SESSION_HEADER_NAME));\n\t\t\t\treturn response;\n\t\t\t},\n\t\t}),\n\t);\n\n\tconst pendingWaitRef = useRef<{\n\t\tresolve: (msg: unknown) => void;\n\t\treject: (err: Error) => void;\n\t} | null>(null);\n\n\tconst { messages, sendMessage, setMessages, status } = useChat({\n\t\tmessages: props.initialMessages,\n\t\ttransport: transportRef.current,\n\t\tonFinish({ message }) {\n\t\t\tonResponseReceived?.();\n\t\t\tif (pendingWaitRef.current) {\n\t\t\t\tpendingWaitRef.current.resolve(message);\n\t\t\t\tpendingWaitRef.current = null;\n\t\t\t}\n\t\t},\n\t\tonError(error) {\n\t\t\tconsole.warn(\"[WaniWani] Chat error:\", error.message);\n\t\t\tif (pendingWaitRef.current) {\n\t\t\t\tpendingWaitRef.current.reject(error);\n\t\t\t\tpendingWaitRef.current = null;\n\t\t\t}\n\t\t},\n\t});\n\n\tconst [text, setText] = useState(\"\");\n\tconst [queuedMessages, setQueuedMessages] = useState<QueuedMessage[]>([]);\n\n\tconst isLoading = status === \"submitted\" || status === \"streaming\";\n\n\tconst removeQueuedMessage = useCallback((id: string) => {\n\t\tsetQueuedMessages((prev) => prev.filter((m) => m.id !== id));\n\t}, []);\n\n\tconst queueFull = isLoading && queuedMessages.length > 0;\n\n\tconst handleSubmit = useCallback(\n\t\t(message: ChatEngineMessage) => {\n\t\t\tconst hasText = Boolean(message.text?.trim());\n\t\t\tconst hasFiles = Boolean(message.files?.length);\n\t\t\tif (!(hasText || hasFiles)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (isLoading) {\n\t\t\t\t// Only allow one queued message at a time\n\t\t\t\tif (queuedMessages.length > 0) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tsetQueuedMessages((prev) => [\n\t\t\t\t\t...prev,\n\t\t\t\t\t{\n\t\t\t\t\t\tid: nanoid(),\n\t\t\t\t\t\ttext: message.text || \"\",\n\t\t\t\t\t\tfiles: message.files ?? [],\n\t\t\t\t\t\tmodelContext: message.modelContext,\n\t\t\t\t\t},\n\t\t\t\t]);\n\t\t\t\tsetText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tpendingModelContextRef.current = message.modelContext;\n\t\t\tsendMessage({\n\t\t\t\ttext: message.text || \"\",\n\t\t\t\tfiles: message.files,\n\t\t\t});\n\n\t\t\tonMessageSent?.(message.text || \"\");\n\t\t\tsetText(\"\");\n\t\t},\n\t\t[sendMessage, onMessageSent, isLoading, queuedMessages.length],\n\t);\n\n\tconst sendMessageAndWait = useCallback(\n\t\t(text: string): Promise<unknown> => {\n\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\tpendingWaitRef.current = { resolve, reject };\n\t\t\t\tsendMessage({ text });\n\t\t\t\tonMessageSent?.(text);\n\t\t\t});\n\t\t},\n\t\t[sendMessage, onMessageSent],\n\t);\n\n\t// Flush first queued message once the current response finishes\n\tuseEffect(() => {\n\t\tif (status !== \"ready\") {\n\t\t\treturn;\n\t\t}\n\t\tif (queuedMessages.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst [first, ...rest] = queuedMessages;\n\t\tsetQueuedMessages(rest);\n\n\t\tpendingModelContextRef.current = first.modelContext;\n\t\tsendMessage({\n\t\t\ttext: first.text,\n\t\t\tfiles: first.files.length > 0 ? first.files : undefined,\n\t\t});\n\t\tonMessageSent?.(first.text);\n\t}, [status, sendMessage, onMessageSent, queuedMessages]);\n\n\tconst reset = useCallback(() => {\n\t\tsetMessages([]);\n\t\tsetQueuedMessages([]);\n\t\tclearSessionId();\n\t\tsetText(\"\");\n\t}, [setMessages, clearSessionId]);\n\n\tconst handleTextChange = useCallback(\n\t\t(e: React.ChangeEvent<HTMLTextAreaElement>) => {\n\t\t\tsetText(e.target.value);\n\t\t},\n\t\t[],\n\t);\n\n\tconst lastMessage = messages[messages.length - 1];\n\tconst hasMessages = messages.length > 0;\n\tconst showLoaderBubble =\n\t\tisLoading && (!hasMessages || lastMessage.role === \"user\");\n\n\treturn {\n\t\tmessages,\n\t\tstatus,\n\t\ttext,\n\t\tsetText,\n\t\thandleSubmit,\n\t\thandleTextChange,\n\t\tisLoading,\n\t\tshowLoaderBubble,\n\t\tlastMessage,\n\t\thasMessages,\n\t\tsendMessage,\n\t\tsendMessageAndWait,\n\t\treset,\n\t\tqueuedMessages,\n\t\tqueueFull,\n\t\tremoveQueuedMessage,\n\t\tsessionId,\n\t};\n}\n","const VISITOR_ID_KEY = \"waniwani-visitor-id\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface VisitorContext {\n\tuserAgent: string;\n\tbrowser: { name: string; version: string } | null;\n\tos: { name: string; version: string } | null;\n\tdeviceType: \"mobile\" | \"tablet\" | \"desktop\";\n\tlanguage: string;\n\tlanguages: string[];\n\ttimezone: string;\n\tscreenWidth: number;\n\tscreenHeight: number;\n\tviewportWidth: number;\n\tviewportHeight: number;\n\tcolorDepth: number;\n\tdevicePixelRatio: number;\n\ttouchSupport: boolean;\n\tconnectionType: string;\n\treferrer: string;\n\tvisitorId: string;\n}\n\n// ============================================================================\n// UA Parsing\n// ============================================================================\n\nfunction match(ua: string, pattern: RegExp): string | null {\n\tconst m = ua.match(pattern);\n\treturn m?.[1] ?? null;\n}\n\nexport function parseBrowser(\n\tua: string,\n): { name: string; version: string } | null {\n\t// Order matters — Edge/Opera contain \"Chrome\", so check them first\n\tconst browsers: [string, RegExp][] = [\n\t\t[\"Edge\", /Edg(?:e|A|iOS)?\\/(\\S+)/],\n\t\t[\"Opera\", /(?:OPR|Opera)\\/(\\S+)/],\n\t\t[\"Samsung Internet\", /SamsungBrowser\\/(\\S+)/],\n\t\t[\"Firefox\", /Firefox\\/(\\S+)/],\n\t\t[\"Chrome\", /Chrome\\/(\\S+)/],\n\t\t[\"Safari\", /Version\\/(\\S+).*Safari/],\n\t];\n\n\tfor (const [name, pattern] of browsers) {\n\t\tconst version = match(ua, pattern);\n\t\tif (version) {\n\t\t\treturn { name, version };\n\t\t}\n\t}\n\treturn null;\n}\n\nexport function parseOS(ua: string): { name: string; version: string } | null {\n\tconst systems: [string, RegExp][] = [\n\t\t[\"iOS\", /(?:iPhone|iPad|iPod).+?OS (\\d+[_.\\d]*)/],\n\t\t[\"Android\", /Android (\\d+[.\\d]*)/],\n\t\t[\"macOS\", /Mac OS X (\\d+[_.\\d]*)/],\n\t\t[\"Windows\", /Windows NT (\\d+[.\\d]*)/],\n\t\t[\"ChromeOS\", /CrOS \\S+ (\\d+[.\\d]*)/],\n\t\t[\"Linux\", /Linux/],\n\t];\n\n\tfor (const [name, pattern] of systems) {\n\t\tconst version = match(ua, pattern);\n\t\tif (version) {\n\t\t\treturn { name, version: version.replace(/_/g, \".\") };\n\t\t}\n\t\tif (name === \"Linux\" && pattern.test(ua)) {\n\t\t\treturn { name, version: \"\" };\n\t\t}\n\t}\n\treturn null;\n}\n\nexport function detectDeviceType(ua: string): \"mobile\" | \"tablet\" | \"desktop\" {\n\t// Use UA-CH if available\n\tif (\n\t\ttypeof navigator !== \"undefined\" &&\n\t\t\"userAgentData\" in navigator &&\n\t\t// biome-ignore lint/suspicious/noExplicitAny: userAgentData is not typed\n\t\t(navigator as any).userAgentData?.mobile\n\t) {\n\t\treturn \"mobile\";\n\t}\n\n\tif (/iPad|tablet|PlayBook/i.test(ua)) {\n\t\treturn \"tablet\";\n\t}\n\tif (/Mobi|Android.*Mobile|iPhone|iPod/i.test(ua)) {\n\t\treturn \"mobile\";\n\t}\n\treturn \"desktop\";\n}\n\n// ============================================================================\n// Visitor ID (property-based hash, persisted in localStorage)\n// ============================================================================\n\nasync function sha256(input: string): Promise<string> {\n\tconst data = new TextEncoder().encode(input);\n\tconst hash = await crypto.subtle.digest(\"SHA-256\", data);\n\treturn Array.from(new Uint8Array(hash))\n\t\t.map((b) => b.toString(16).padStart(2, \"0\"))\n\t\t.join(\"\");\n}\n\nasync function computeVisitorId(): Promise<string> {\n\t// Try localStorage first\n\ttry {\n\t\tconst stored = localStorage.getItem(VISITOR_ID_KEY);\n\t\tif (stored) {\n\t\t\treturn stored;\n\t\t}\n\t} catch {\n\t\t// localStorage unavailable (private browsing, security policy)\n\t}\n\n\tconst raw = [\n\t\tnavigator.userAgent,\n\t\tscreen.width,\n\t\tscreen.height,\n\t\tscreen.colorDepth,\n\t\tIntl.DateTimeFormat().resolvedOptions().timeZone,\n\t\tnavigator.language,\n\t\tnavigator.hardwareConcurrency ?? \"\",\n\t\tnavigator.platform ?? \"\",\n\t].join(\"|\");\n\n\tconst id = await sha256(raw);\n\n\ttry {\n\t\tlocalStorage.setItem(VISITOR_ID_KEY, id);\n\t} catch {\n\t\t// Ignore storage failures\n\t}\n\n\treturn id;\n}\n\n// ============================================================================\n// Main export\n// ============================================================================\n\nexport async function collectVisitorContext(): Promise<VisitorContext> {\n\tconst ua = navigator.userAgent;\n\tconst visitorId = await computeVisitorId();\n\n\treturn {\n\t\tuserAgent: ua,\n\t\tbrowser: parseBrowser(ua),\n\t\tos: parseOS(ua),\n\t\tdeviceType: detectDeviceType(ua),\n\t\tlanguage: navigator.language,\n\t\tlanguages: [...navigator.languages],\n\t\ttimezone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n\t\tscreenWidth: screen.width,\n\t\tscreenHeight: screen.height,\n\t\tviewportWidth: window.innerWidth,\n\t\tviewportHeight: window.innerHeight,\n\t\tcolorDepth: screen.colorDepth,\n\t\tdevicePixelRatio: window.devicePixelRatio ?? 1,\n\t\ttouchSupport: \"ontouchstart\" in window || navigator.maxTouchPoints > 0,\n\t\t// biome-ignore lint/suspicious/noExplicitAny: navigator.connection is not typed\n\t\tconnectionType: (navigator as any).connection?.effectiveType ?? \"unknown\",\n\t\treferrer: document.referrer,\n\t\tvisitorId,\n\t};\n}\n","\"use client\";\n\nimport { useEffect, useState } from \"react\";\n\nexport interface WaniWaniConfig {\n\tdebug: boolean;\n\teval: boolean;\n}\n\nconst defaultConfig: WaniWaniConfig = { debug: false, eval: false };\n\nexport function useConfig(api = \"/api/waniwani\"): WaniWaniConfig {\n\tconst [config, setConfig] = useState<WaniWaniConfig>(defaultConfig);\n\n\tuseEffect(() => {\n\t\t(async () => {\n\t\t\ttry {\n\t\t\t\tconst r = await fetch(`${api}/config`);\n\t\t\t\tconst data = await r.json();\n\t\t\t\tsetConfig({\n\t\t\t\t\tdebug: data.debug === true,\n\t\t\t\t\teval: data.eval === true,\n\t\t\t\t});\n\t\t\t} catch {}\n\t\t})();\n\t}, [api]);\n\n\treturn config;\n}\n","\"use client\";\n\nimport type { ChatStatus, UIMessage } from \"ai\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { SuggestionsConfig } from \"../@types\";\n\nexport interface UseSuggestionsOptions {\n\tmessages: UIMessage[];\n\tstatus: ChatStatus;\n\tconfig?: boolean | SuggestionsConfig;\n}\n\n/**\n * Extract suggestions from the last assistant message's data part.\n * The API streams a `data-suggestions` part at the end of the response:\n * `{ type: \"data-suggestions\", data: { suggestions: string[] } }`\n */\nfunction extractSuggestions(message: UIMessage): string[] | null {\n\tfor (const part of message.parts) {\n\t\tconst p = part as Record<string, unknown>;\n\t\t// Handle both \"data-suggestions\" and generic \"data\" part types\n\t\tif (p.type === \"data\" || p.type === \"data-suggestions\") {\n\t\t\tconst data = p.data as Record<string, unknown> | undefined;\n\t\t\tif (data && Array.isArray(data.suggestions)) {\n\t\t\t\treturn data.suggestions as string[];\n\t\t\t}\n\t\t}\n\t}\n\treturn null;\n}\n\nfunction isConfigObject(\n\tconfig: boolean | SuggestionsConfig | undefined,\n): config is SuggestionsConfig {\n\treturn typeof config === \"object\" && config !== null && \"initial\" in config;\n}\n\nexport function useSuggestions(options: UseSuggestionsOptions) {\n\tconst { messages, status, config } = options;\n\n\tconst [suggestions, setSuggestions] = useState<string[]>(\n\t\t(isConfigObject(config) && config.initial ? config.initial : []) ?? [],\n\t);\n\tconst prevStatusRef = useRef<ChatStatus>(status);\n\n\tconst isDynamicEnabled =\n\t\tconfig === true || (isConfigObject(config) && config.dynamic !== false);\n\n\tconst clear = useCallback(() => {\n\t\tsetSuggestions([]);\n\t}, []);\n\n\t// Clear when a new user message arrives\n\tconst lastMessage = messages[messages.length - 1];\n\tuseEffect(() => {\n\t\tif (lastMessage?.role === \"user\") {\n\t\t\tclear();\n\t\t}\n\t}, [lastMessage, clear]);\n\n\t// Extract suggestions from message parts on streaming → ready transition\n\tuseEffect(() => {\n\t\tconst prevStatus = prevStatusRef.current;\n\t\tprevStatusRef.current = status;\n\n\t\tif (prevStatus === \"streaming\" && status === \"ready\" && isDynamicEnabled) {\n\t\t\tconst lastAssistant = [...messages]\n\t\t\t\t.reverse()\n\t\t\t\t.find((m) => m.role === \"assistant\");\n\t\t\tif (!lastAssistant) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconsole.log(\"[WaniWani] Assistant parts:\", lastAssistant.parts);\n\n\t\t\tconst extracted = extractSuggestions(lastAssistant);\n\t\t\tconsole.log(\"[WaniWani] Extracted suggestions:\", extracted);\n\t\t\tif (extracted) {\n\t\t\t\tsetSuggestions(extracted);\n\t\t\t}\n\t\t}\n\t}, [status, isDynamicEnabled, messages]);\n\n\treturn { suggestions, isLoading: false, clear };\n}\n","import { useEffect, useRef, useState } from \"react\";\n\nconst TYPE_SPEED_MS = 50;\nconst DELETE_SPEED_MS = 30;\nconst PAUSE_AFTER_TYPE_MS = 2000;\nconst PAUSE_AFTER_DELETE_MS = 500;\n\n/**\n * Returns a string that animates like someone typing and deleting the placeholder text.\n * Only animates when `active` is true (i.e. the input is empty).\n */\nexport function useTypingPlaceholder(text: string, active = true): string {\n\tconst [displayed, setDisplayed] = useState(\"\");\n\tconst timerRef = useRef<ReturnType<typeof setTimeout>>(undefined);\n\n\tuseEffect(() => {\n\t\tif (!active) {\n\t\t\t// Reset so the animation restarts fresh when re-activated\n\t\t\tsetDisplayed(\"\");\n\t\t\treturn;\n\t\t}\n\n\t\tlet i = 0;\n\t\tlet deleting = false;\n\t\tlet disposed = false;\n\n\t\tconst tick = () => {\n\t\t\tif (disposed) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!deleting) {\n\t\t\t\t// Typing forward\n\t\t\t\ti++;\n\t\t\t\tsetDisplayed(text.slice(0, i));\n\n\t\t\t\tif (i >= text.length) {\n\t\t\t\t\t// Finished typing — pause then start deleting\n\t\t\t\t\tdeleting = true;\n\t\t\t\t\ttimerRef.current = setTimeout(tick, PAUSE_AFTER_TYPE_MS);\n\t\t\t\t} else {\n\t\t\t\t\ttimerRef.current = setTimeout(tick, TYPE_SPEED_MS);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Deleting\n\t\t\t\ti--;\n\t\t\t\tsetDisplayed(text.slice(0, i));\n\n\t\t\t\tif (i <= 0) {\n\t\t\t\t\t// Finished deleting — pause then start typing again\n\t\t\t\t\tdeleting = false;\n\t\t\t\t\ttimerRef.current = setTimeout(tick, PAUSE_AFTER_DELETE_MS);\n\t\t\t\t} else {\n\t\t\t\t\ttimerRef.current = setTimeout(tick, DELETE_SPEED_MS);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t// Start after a small delay\n\t\ttimerRef.current = setTimeout(tick, PAUSE_AFTER_DELETE_MS);\n\n\t\treturn () => {\n\t\t\tdisposed = true;\n\t\t\tclearTimeout(timerRef.current);\n\t\t};\n\t}, [text, active]);\n\n\treturn displayed;\n}\n","import type { ChatTheme } from \"./@types\";\n\nexport const DEFAULT_THEME: Required<ChatTheme> = {\n\tprimaryColor: \"#6366f1\",\n\tprimaryForeground: \"#1f2937\",\n\tbackgroundColor: \"#ffffff\",\n\ttextColor: \"#1f2937\",\n\tmutedColor: \"#6b7280\",\n\tborderColor: \"#e5e7eb\",\n\tassistantBubbleColor: \"#f3f4f6\",\n\tuserBubbleColor: \"#f4f4f4\",\n\tinputBackgroundColor: \"#f9fafb\",\n\tborderRadius: 16,\n\tmessageBorderRadius: 12,\n\tfontFamily: \"system-ui, -apple-system, 'Segoe UI', sans-serif\",\n\theaderBackgroundColor: \"#ffffff\",\n\theaderTextColor: \"#1f2937\",\n\tstatusColor: \"#22c55e\",\n\ttoolCardColor: \"#f4f4f5\",\n};\n\nexport const DARK_THEME: ChatTheme = {\n\tbackgroundColor: \"#212121\",\n\theaderBackgroundColor: \"#1e1e1e\",\n\theaderTextColor: \"#ececec\",\n\ttextColor: \"#ececec\",\n\tprimaryForeground: \"#ffffff\",\n\tmutedColor: \"#8e8ea0\",\n\tborderColor: \"#444444\",\n\tassistantBubbleColor: \"#2f2f2f\",\n\tuserBubbleColor: \"#303030\",\n\tinputBackgroundColor: \"#2f2f2f\",\n\tprimaryColor: \"#6366f1\",\n\tstatusColor: \"#22c55e\",\n\ttoolCardColor: \"#262626\",\n};\n\nconst CSS_VAR_MAP: Record<keyof ChatTheme, string[]> = {\n\tprimaryColor: [\"--ww-primary\", \"--ww-color-primary\"],\n\tprimaryForeground: [\"--ww-primary-fg\", \"--ww-color-primary-foreground\"],\n\tbackgroundColor: [\"--ww-bg\", \"--ww-color-background\"],\n\ttextColor: [\n\t\t\"--ww-text\",\n\t\t\"--ww-color-foreground\",\n\t\t\"--ww-color-accent-foreground\",\n\t],\n\tmutedColor: [\"--ww-muted\", \"--ww-color-muted-foreground\"],\n\tborderColor: [\"--ww-border\", \"--ww-color-border\"],\n\tassistantBubbleColor: [\"--ww-assistant-bubble\", \"--ww-color-accent\"],\n\tuserBubbleColor: [\"--ww-user-bubble\"],\n\tinputBackgroundColor: [\"--ww-input-bg\", \"--ww-color-input\"],\n\tborderRadius: [\"--ww-radius\"],\n\tmessageBorderRadius: [\"--ww-msg-radius\"],\n\tfontFamily: [\"--ww-font\"],\n\theaderBackgroundColor: [\"--ww-header-bg\"],\n\theaderTextColor: [\"--ww-header-text\"],\n\tstatusColor: [\"--ww-status\"],\n\ttoolCardColor: [\"--ww-tool-card\", \"--ww-color-tool-card\"],\n};\n\nexport function mergeTheme(userTheme?: ChatTheme): Required<ChatTheme> {\n\treturn { ...DEFAULT_THEME, ...userTheme };\n}\n\nexport function isDarkTheme(theme: Required<ChatTheme>): boolean {\n\tconst hex = theme.backgroundColor.replace(\"#\", \"\");\n\tconst r = parseInt(hex.substring(0, 2), 16);\n\tconst g = parseInt(hex.substring(2, 4), 16);\n\tconst b = parseInt(hex.substring(4, 6), 16);\n\treturn (r * 299 + g * 587 + b * 114) / 1000 < 128;\n}\n\nexport function themeToCSSProperties(\n\ttheme: Required<ChatTheme>,\n): Record<string, string> {\n\tconst vars: Record<string, string> = {};\n\tfor (const [key, cssVars] of Object.entries(CSS_VAR_MAP)) {\n\t\tconst value = theme[key as keyof ChatTheme];\n\t\tconst resolved = typeof value === \"number\" ? `${value}px` : String(value);\n\t\tfor (const cssVar of cssVars) {\n\t\t\tvars[cssVar] = resolved;\n\t\t}\n\t}\n\treturn vars;\n}\n","\"use client\";\n\nimport { type RefObject, useRef, useState } from \"react\";\nimport type { ChatHandle } from \"../@types\";\nimport { useConfig } from \"../hooks/use-config\";\nimport { type EvalScenario, useScenarios } from \"../hooks/use-scenarios\";\nimport { cn } from \"../lib/utils\";\n\n// ---- Types ----\n\ntype ScenarioPart = { type: string; [key: string]: unknown };\ntype ScenarioMessage = {\n\tid: string;\n\trole: \"user\" | \"assistant\" | \"system\" | \"data\";\n\tparts: ScenarioPart[];\n};\n\n// ---- Replay helpers ----\n\nfunction getUserText(msg: ScenarioMessage): string {\n\treturn msg.parts\n\t\t.filter(\n\t\t\t(p): p is { type: \"text\"; text: string } =>\n\t\t\t\tp.type === \"text\" && typeof (p as { text?: unknown }).text === \"string\",\n\t\t)\n\t\t.map((p) => p.text)\n\t\t.join(\"\");\n}\n\n// ---- Sub-components ----\n\nfunction ScenarioSkeleton() {\n\treturn (\n\t\t<div className=\"ww:px-3 ww:py-2 ww:space-y-3\">\n\t\t\t{[1, 2, 3, 4].map((i) => (\n\t\t\t\t<div key={i} className=\"ww:flex ww:items-center ww:gap-2\">\n\t\t\t\t\t<div className=\"ww:h-1.5 ww:w-1.5 ww:rounded-full ww:bg-muted-foreground/20 ww:shrink-0 ww:animate-pulse\" />\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"ww:h-3.5 ww:rounded ww:bg-muted-foreground/10 ww:animate-pulse\"\n\t\t\t\t\t\tstyle={{ width: `${50 + i * 10}%`, animationDelay: `${i * 100}ms` }}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t))}\n\t\t</div>\n\t);\n}\n\n// ---- Main component ----\n\nconst PANEL_WIDTH = 320;\n\ntype ScenarioPanelProps = {\n\t/** API endpoint to fetch scenarios from\n\t *\n\t * @default \"/api/waniwani\"\n\t */\n\tapi?: string;\n\t/** Ref to the ChatCard or ChatBar so scenario turns flow through the chat UI */\n\tchatRef: RefObject<ChatHandle | null>;\n};\n\n/**\n * Dev-only scenario panel for replaying recorded scenarios through the chat.\n *\n * This component is automatically tree-shaken from production builds —\n * it returns `null` when `process.env.NODE_ENV === \"production\"`.\n *\n * To populate scenarios, set `WANIWANI_EVAL=1` in your `.env` and add\n * scenario files to `evals/scenarios/`.\n */\nexport function ScenarioPanel({ api, chatRef }: ScenarioPanelProps) {\n\tconst effectiveApi = api ?? \"/api/waniwani\";\n\tconst [selected, setSelected] = useState<EvalScenario | null>(null);\n\tconst [running, setRunning] = useState(false);\n\tconst abortRef = useRef<AbortController | null>(null);\n\tconst config = useConfig(effectiveApi);\n\tconst { scenarios, isLoading, reload } = useScenarios(\n\t\teffectiveApi,\n\t\tconfig.eval,\n\t);\n\n\tasync function runScenario(scenario: EvalScenario) {\n\t\tabortRef.current?.abort();\n\t\tabortRef.current = new AbortController();\n\t\tsetRunning(true);\n\n\t\ttry {\n\t\t\tif (!chatRef?.current) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"ScenarioPanel requires a chatRef prop pointing to the ChatCard/ChatBar\",\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tchatRef.current.reset();\n\n\t\t\tconst userMessages = scenario.messages.filter(\n\t\t\t\t(msg) => msg.role === \"user\",\n\t\t\t);\n\n\t\t\tfor (const msg of userMessages) {\n\t\t\t\tconst text = getUserText(msg);\n\t\t\t\tif (text) {\n\t\t\t\t\tawait chatRef.current.sendMessageAndWait(text);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tif ((e as Error).name !== \"AbortError\") {\n\t\t\t\tconsole.error(\"[ScenarioPanel] run failed:\", e);\n\t\t\t}\n\t\t} finally {\n\t\t\tsetRunning(false);\n\t\t}\n\t}\n\n\tif (!config.eval) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName=\"ww:flex ww:flex-col ww:h-full ww:overflow-hidden ww:text-foreground ww:border-l ww:border-border ww:shrink-0\"\n\t\t\tstyle={{ width: PANEL_WIDTH }}\n\t\t>\n\t\t\t{/* Header */}\n\t\t\t<div className=\"ww:px-3 ww:py-2 ww:border-b ww:border-border/50 ww:flex ww:items-center ww:justify-between\">\n\t\t\t\t<span className=\"ww:text-[10px] ww:font-mono ww:uppercase ww:tracking-widest ww:text-muted-foreground\">\n\t\t\t\t\tScenarios\n\t\t\t\t</span>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={reload}\n\t\t\t\t\tclassName=\"ww:text-muted-foreground ww:hover:text-foreground ww:transition-colors ww:cursor-pointer\"\n\t\t\t\t\ttitle=\"Reload scenarios\"\n\t\t\t\t>\n\t\t\t\t\t<svg\n\t\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\t\t\twidth=\"12\"\n\t\t\t\t\t\theight=\"12\"\n\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\tstrokeWidth=\"2\"\n\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\trole=\"img\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<title>Reload scenarios</title>\n\t\t\t\t\t\t<path d=\"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8\" />\n\t\t\t\t\t\t<path d=\"M21 3v5h-5\" />\n\t\t\t\t\t</svg>\n\t\t\t\t</button>\n\t\t\t</div>\n\n\t\t\t{/* Scenario list */}\n\t\t\t<div className=\"ww:flex-1 ww:overflow-y-auto ww:min-h-0\">\n\t\t\t\t{isLoading ? (\n\t\t\t\t\t<ScenarioSkeleton />\n\t\t\t\t) : scenarios.length === 0 ? (\n\t\t\t\t\t<p className=\"ww:text-xs ww:font-mono ww:text-muted-foreground ww:text-center ww:py-8 ww:px-4\">\n\t\t\t\t\t\tNo scenarios found\n\t\t\t\t\t</p>\n\t\t\t\t) : (\n\t\t\t\t\tscenarios.map((s) => (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tkey={s.name}\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tonClick={() => setSelected(s)}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"ww:w-full ww:text-left ww:px-3 ww:py-2 ww:text-xs ww:font-mono ww:transition-colors ww:border-l-2\",\n\t\t\t\t\t\t\t\tselected?.name === s.name\n\t\t\t\t\t\t\t\t\t? \"ww:border-[#03d916] ww:bg-[#03d916]/5 ww:text-foreground\"\n\t\t\t\t\t\t\t\t\t: \"ww:border-transparent ww:text-foreground/70 ww:hover:text-foreground ww:hover:bg-muted/30\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span className=\"ww:block ww:truncate\">{s.name}</span>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t))\n\t\t\t\t)}\n\t\t\t</div>\n\n\t\t\t{/* Run */}\n\t\t\t{selected && (\n\t\t\t\t<div className=\"ww:border-t ww:border-border/50 ww:p-3\">\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tonClick={() => runScenario(selected)}\n\t\t\t\t\t\tdisabled={running}\n\t\t\t\t\t\tclassName=\"ww:w-full ww:py-2 ww:rounded-md ww:text-xs ww:font-mono ww:font-medium ww:bg-foreground ww:text-background ww:hover:opacity-90 ww:disabled:opacity-50 ww:transition-opacity ww:cursor-pointer\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{running ? \"Running...\" : \"Run scenario\"}\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","\"use client\";\n\nimport { useCallback, useEffect, useState } from \"react\";\n\ntype ScenarioPart = { type: string; [key: string]: unknown };\ntype ScenarioMessage = {\n\tid: string;\n\trole: \"user\" | \"assistant\" | \"system\" | \"data\";\n\tparts: ScenarioPart[];\n};\nexport type EvalScenario = {\n\tname: string;\n\ttype?: \"regulatory\" | \"functional\" | \"adversarial\";\n\tmode?: \"regenerate\" | \"inject\";\n\toutcome?: { toolsCalled: string[] };\n\tmessages: ScenarioMessage[];\n};\n\nexport function useScenarios(api: string, enabled: boolean) {\n\tconst [scenarios, setScenarios] = useState<EvalScenario[]>([]);\n\tconst [isLoading, setIsLoading] = useState(false);\n\n\tconst load = useCallback(() => {\n\t\tif (!enabled) {\n\t\t\treturn;\n\t\t}\n\t\tsetIsLoading(true);\n\t\tfetch(`${api}/scenarios`)\n\t\t\t.then((r) => r.json())\n\t\t\t.then((data: EvalScenario[]) => setScenarios(data))\n\t\t\t.catch(() => {})\n\t\t\t.finally(() => setIsLoading(false));\n\t}, [api, enabled]);\n\n\tuseEffect(() => {\n\t\tload();\n\t}, [load]);\n\n\treturn { scenarios, isLoading, reload: load };\n}\n","\"use client\";\n\nimport {\n\tforwardRef,\n\tuseCallback,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseRef,\n\tuseState,\n} from \"react\";\nimport type { ModelContextUpdate } from \"../../../shared/model-context\";\nimport type { ChatCardProps, ChatHandle } from \"../@types\";\nimport {\n\tConversation,\n\tConversationContent,\n\tConversationScrollButton,\n} from \"../ai-elements/conversation\";\nimport {\n\tPromptInput,\n\tPromptInputAddAttachments,\n\tPromptInputSubmit,\n\tPromptInputTextarea,\n} from \"../ai-elements/prompt-input\";\nimport { ChatQueue } from \"../components/chat-queue\";\nimport { ExportSessionButton } from \"../components/export-session\";\nimport { MessageList } from \"../components/message-list\";\nimport { Suggestions } from \"../components/suggestions\";\nimport { useCallTool } from \"../hooks/use-call-tool\";\nimport { useChatEngine } from \"../hooks/use-chat-engine\";\nimport { useConfig } from \"../hooks/use-config\";\nimport { useSuggestions } from \"../hooks/use-suggestions\";\nimport { useTypingPlaceholder } from \"../hooks/use-typing-placeholder\";\nimport { cn } from \"../lib/utils\";\nimport { isDarkTheme, mergeTheme, themeToCSSProperties } from \"../theme\";\n\nexport const ChatCard = forwardRef<ChatHandle, ChatCardProps>(\n\tfunction ChatCard(props, ref) {\n\t\tconst {\n\t\t\ttheme: userTheme,\n\t\t\ttitle = \"Assistant\",\n\n\t\t\twidth,\n\t\t\theight,\n\t\t\tclassName,\n\t\t\tallowAttachments = false,\n\t\t\twelcomeMessage,\n\t\t\twelcome,\n\t\t\tplaceholder = \"Ask me anything...\",\n\t\t\ttriggerEvent = \"triggerDemoRequest\",\n\t\t\tapi,\n\t\t\tdebug,\n\t\t} = props;\n\n\t\tconst effectiveApi = api ?? \"/api/waniwani\";\n\t\tconst effectiveResourceEndpoint = `${effectiveApi}/resource`;\n\n\t\tconst resolvedTheme = mergeTheme(userTheme);\n\t\tconst cssVars = themeToCSSProperties(resolvedTheme);\n\t\tconst isDark = isDarkTheme(resolvedTheme);\n\n\t\tconst config = useConfig(effectiveApi);\n\t\tconst effectiveDebug = debug ?? config.debug;\n\n\t\tconst engine = useChatEngine({ ...props, api: effectiveApi });\n\t\tconst handleCallTool = useCallTool({\n\t\t\t...props,\n\t\t\tapi: effectiveApi,\n\t\t\tsessionId: engine.sessionId,\n\t\t});\n\n\t\tconst animatedPlaceholder = useTypingPlaceholder(placeholder, !engine.text);\n\n\t\tconst [isHighlighted, setIsHighlighted] = useState(false);\n\t\tconst [fullscreenToolCallId, setFullscreenToolCallId] = useState<\n\t\t\tstring | null\n\t\t>(null);\n\t\tconst cardRef = useRef<HTMLDivElement>(null);\n\t\tconst highlightTimerRef = useRef<ReturnType<typeof setTimeout>>(undefined);\n\n\t\tconst focusInput = useCallback(() => {\n\t\t\tconst container = cardRef.current;\n\t\t\tif (!container) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcontainer.scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n\t\t\tconst textarea = container.querySelector(\"textarea\");\n\t\t\tif (textarea) {\n\t\t\t\tsetTimeout(() => textarea.focus(), 300);\n\t\t\t}\n\t\t\tsetIsHighlighted(true);\n\t\t\tclearTimeout(highlightTimerRef.current);\n\t\t\thighlightTimerRef.current = setTimeout(\n\t\t\t\t() => setIsHighlighted(false),\n\t\t\t\t2000,\n\t\t\t);\n\t\t}, []);\n\n\t\tconst suggestionsState = useSuggestions({\n\t\t\tmessages: engine.messages,\n\t\t\tstatus: engine.status,\n\t\t\tconfig: props.suggestions,\n\t\t});\n\n\t\tconst handleWidgetMessage = useCallback(\n\t\t\t(message: {\n\t\t\t\trole: string;\n\t\t\t\tcontent: Array<{ type: string; text?: string }>;\n\t\t\t\tmodelContext?: ModelContextUpdate;\n\t\t\t}) => {\n\t\t\t\tconst text = message.content\n\t\t\t\t\t.map((c) => c.text ?? \"\")\n\t\t\t\t\t.join(\"\")\n\t\t\t\t\t.trim();\n\t\t\t\tif (text) {\n\t\t\t\t\tengine.handleSubmit({\n\t\t\t\t\t\ttext,\n\t\t\t\t\t\tfiles: [],\n\t\t\t\t\t\tmodelContext: message.modelContext,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t\t[engine.handleSubmit],\n\t\t);\n\n\t\tconst handleSuggestionSelect = useCallback(\n\t\t\t(suggestion: string) => {\n\t\t\t\tsuggestionsState.clear();\n\t\t\t\tengine.handleSubmit({ text: suggestion, files: [] });\n\t\t\t},\n\t\t\t[suggestionsState.clear, engine.handleSubmit],\n\t\t);\n\n\t\tuseImperativeHandle(\n\t\t\tref,\n\t\t\t() => ({\n\t\t\t\tsendMessage: (text: string) => {\n\t\t\t\t\tengine.handleSubmit({ text, files: [] });\n\t\t\t\t\tfocusInput();\n\t\t\t\t},\n\t\t\t\tsendMessageAndWait: (text: string) => engine.sendMessageAndWait(text),\n\t\t\t\treset: engine.reset,\n\t\t\t\tfocus: focusInput,\n\t\t\t\tget messages() {\n\t\t\t\t\treturn engine.messages;\n\t\t\t\t},\n\t\t\t}),\n\t\t\t[\n\t\t\t\tengine.handleSubmit,\n\t\t\t\tengine.sendMessageAndWait,\n\t\t\t\tengine.reset,\n\t\t\t\tengine.messages,\n\t\t\t\tfocusInput,\n\t\t\t],\n\t\t);\n\n\t\t// Listen for custom trigger event (e.g. \"triggerDemoRequest\")\n\t\tuseEffect(() => {\n\t\t\tif (!triggerEvent) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst handler = (e: Event) => {\n\t\t\t\tconst detail = (e as CustomEvent).detail;\n\t\t\t\tconst message =\n\t\t\t\t\ttypeof detail?.message === \"string\" ? detail.message : undefined;\n\t\t\t\tif (message) {\n\t\t\t\t\tengine.handleSubmit({ text: message, files: [] });\n\t\t\t\t}\n\t\t\t\tfocusInput();\n\t\t\t};\n\t\t\twindow.addEventListener(triggerEvent, handler);\n\t\t\treturn () => window.removeEventListener(triggerEvent, handler);\n\t\t}, [triggerEvent, engine.handleSubmit, focusInput]);\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={cardRef}\n\t\t\t\tstyle={{ ...cssVars, width, height }}\n\t\t\t\tdata-waniwani-chat=\"\"\n\t\t\t\tdata-waniwani-layout=\"card\"\n\t\t\t\t{...(isDark ? { \"data-waniwani-dark\": \"\" } : {})}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"ww:flex ww:flex-col ww:font-[family-name:var(--ww-font)] ww:text-foreground ww:bg-background ww:rounded-[var(--ww-radius)] ww:overflow-hidden\",\n\t\t\t\t\tisHighlighted &&\n\t\t\t\t\t\t\"ww:ring-2 ww:ring-blue-400/70 ww:ring-offset-2 ww:ring-offset-background\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{/* Header */}\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"ww:shrink-0 ww:flex ww:items-center ww:px-6 ww:py-3\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tbackgroundColor: resolvedTheme.headerBackgroundColor,\n\t\t\t\t\t\tcolor: resolvedTheme.headerTextColor,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<div className=\"ww:text-sm ww:font-semibold ww:truncate\">{title}</div>\n\t\t\t\t\t<ExportSessionButton\n\t\t\t\t\t\tmessages={engine.messages}\n\t\t\t\t\t\tevalEnabled={config.eval}\n\t\t\t\t\t\tapi={effectiveApi}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\n\t\t\t\t{/* Messages */}\n\t\t\t\t<Conversation className=\"ww:flex-1 ww:min-h-0 ww:bg-background\">\n\t\t\t\t\t<ConversationContent\n\t\t\t\t\t\tscrollClassName={\n\t\t\t\t\t\t\tfullscreenToolCallId\n\t\t\t\t\t\t\t\t? \"ww:!relative ww:!overflow-hidden\"\n\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t}\n\t\t\t\t\t>\n\t\t\t\t\t\t<MessageList\n\t\t\t\t\t\t\tmessages={engine.messages}\n\t\t\t\t\t\t\tstatus={engine.status}\n\t\t\t\t\t\t\twelcomeMessage={welcomeMessage}\n\t\t\t\t\t\t\twelcome={welcome}\n\t\t\t\t\t\t\tonSuggestionSelect={handleSuggestionSelect}\n\t\t\t\t\t\t\tresourceEndpoint={effectiveResourceEndpoint}\n\t\t\t\t\t\t\tchatSessionId={engine.sessionId}\n\t\t\t\t\t\t\tisDark={isDark}\n\t\t\t\t\t\t\tonFollowUp={handleWidgetMessage}\n\t\t\t\t\t\t\tonCallTool={handleCallTool}\n\t\t\t\t\t\t\tfullscreenToolCallId={fullscreenToolCallId}\n\t\t\t\t\t\t\tdebug={effectiveDebug}\n\t\t\t\t\t\t\tonWidgetDisplayModeChange={(mode, widget) => {\n\t\t\t\t\t\t\t\tsetFullscreenToolCallId(\n\t\t\t\t\t\t\t\t\tmode === \"fullscreen\" ? widget.toolCallId : null,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ConversationContent>\n\t\t\t\t\t<ConversationScrollButton />\n\t\t\t\t</Conversation>\n\n\t\t\t\t{/* Suggestions — hide when fullscreen */}\n\t\t\t\t<div style={fullscreenToolCallId ? { display: \"none\" } : undefined}>\n\t\t\t\t\t<Suggestions\n\t\t\t\t\t\tsuggestions={suggestionsState.suggestions}\n\t\t\t\t\t\tisLoading={suggestionsState.isLoading}\n\t\t\t\t\t\tonSelect={handleSuggestionSelect}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\n\t\t\t\t{/* Queue — hide when fullscreen */}\n\t\t\t\t<div style={fullscreenToolCallId ? { display: \"none\" } : undefined}>\n\t\t\t\t\t<ChatQueue\n\t\t\t\t\t\tqueuedMessages={engine.queuedMessages}\n\t\t\t\t\t\tonRemove={engine.removeQueuedMessage}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\n\t\t\t\t{/* Input — hide when fullscreen */}\n\t\t\t\t<div style={fullscreenToolCallId ? { display: \"none\" } : undefined}>\n\t\t\t\t\t<div className=\"ww:shrink-0 ww:px-4 ww:pb-8 ww:pt-2 ww:bg-background\">\n\t\t\t\t\t\t<div className=\"ww:mx-auto ww:w-full ww:max-w-3xl\">\n\t\t\t\t\t\t\t<PromptInput\n\t\t\t\t\t\t\t\tonSubmit={engine.handleSubmit}\n\t\t\t\t\t\t\t\tglobalDrop={allowAttachments}\n\t\t\t\t\t\t\t\tmultiple={allowAttachments}\n\t\t\t\t\t\t\t\tclassName=\"ww:rounded-2xl ww:border-border ww:bg-input\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<div className=\"ww:flex ww:items-center ww:gap-1 ww:pl-4 ww:pr-3 ww:py-2.5\">\n\t\t\t\t\t\t\t\t\t{allowAttachments && <PromptInputAddAttachments />}\n\t\t\t\t\t\t\t\t\t<PromptInputTextarea\n\t\t\t\t\t\t\t\t\t\tonChange={engine.handleTextChange}\n\t\t\t\t\t\t\t\t\t\tvalue={engine.text}\n\t\t\t\t\t\t\t\t\t\tplaceholder={animatedPlaceholder}\n\t\t\t\t\t\t\t\t\t\tclassName=\"ww:min-h-0 ww:py-1 ww:px-0\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<PromptInputSubmit\n\t\t\t\t\t\t\t\t\t\tstatus={engine.status}\n\t\t\t\t\t\t\t\t\t\tdisabled={engine.queueFull}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</PromptInput>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t},\n);\n","\"use client\";\n\nimport {\n\tforwardRef,\n\tuseCallback,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseRef,\n\tuseState,\n} from \"react\";\nimport type { ModelContextUpdate } from \"../../../shared/model-context\";\nimport type { ChatEmbedProps, ChatHandle } from \"../@types\";\nimport {\n\tConversation,\n\tConversationContent,\n\tConversationScrollButton,\n} from \"../ai-elements/conversation\";\nimport {\n\tPromptInput,\n\tPromptInputAddAttachments,\n\tPromptInputSubmit,\n\tPromptInputTextarea,\n} from \"../ai-elements/prompt-input\";\nimport { ChatQueue } from \"../components/chat-queue\";\nimport { MessageList } from \"../components/message-list\";\nimport { Suggestions } from \"../components/suggestions\";\nimport { useCallTool } from \"../hooks/use-call-tool\";\nimport { useChatEngine } from \"../hooks/use-chat-engine\";\nimport { useSuggestions } from \"../hooks/use-suggestions\";\nimport { useTypingPlaceholder } from \"../hooks/use-typing-placeholder\";\nimport { cn } from \"../lib/utils\";\nimport { isDarkTheme, mergeTheme, themeToCSSProperties } from \"../theme\";\n\n/**\n * Standalone, borderless chat component — bring your own backend.\n *\n * Fills its parent container with no header, border, or shadow.\n * Does **not** call any WaniWani-specific endpoints (`/config`, `/tool`, `/sessions`).\n * Point `api` at your own AI-SDK-compatible streaming endpoint and pass extra\n * request fields via `body`.\n *\n * Supports the same ref API as ChatCard (`sendMessage`, `sendMessageAndWait`, `focus`).\n *\n * @example\n * ```tsx\n * <ChatEmbed\n * api={`/api/mcp/projects/${projectId}/chat`}\n * body={{ environmentId, chatSessionId }}\n * suggestions={{ initial: [\"What can you do?\"] }}\n * />\n * ```\n */\nexport const ChatEmbed = forwardRef<ChatHandle, ChatEmbedProps>(\n\tfunction ChatEmbed(props, ref) {\n\t\tconst {\n\t\t\ttheme: userTheme,\n\t\t\tclassName,\n\t\t\tallowAttachments = false,\n\t\t\twelcomeMessage,\n\t\t\twelcome,\n\t\t\tplaceholder = \"Ask me anything...\",\n\t\t\ttriggerEvent = \"triggerDemoRequest\",\n\t\t\tapi,\n\t\t\tmcp,\n\t\t\tdebug = false,\n\t\t} = props;\n\n\t\tconst resolvedTheme = mergeTheme(userTheme);\n\t\tconst cssVars = themeToCSSProperties(resolvedTheme);\n\t\tconst isDark = isDarkTheme(resolvedTheme);\n\n\t\tconst engine = useChatEngine({ ...props, api });\n\t\tconst handleCallTool = useCallTool({\n\t\t\t...props,\n\t\t\tapi,\n\t\t\tsessionId: engine.sessionId,\n\t\t\tonCallTool: mcp?.onCallTool,\n\t\t});\n\n\t\tconst animatedPlaceholder = useTypingPlaceholder(placeholder, !engine.text);\n\n\t\tconst [fullscreenToolCallId, setFullscreenToolCallId] = useState<\n\t\t\tstring | null\n\t\t>(null);\n\t\tconst panelRef = useRef<HTMLDivElement>(null);\n\n\t\tconst focusInput = useCallback(() => {\n\t\t\tconst container = panelRef.current;\n\t\t\tif (!container) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst textarea = container.querySelector(\"textarea\");\n\t\t\tif (textarea) {\n\t\t\t\ttextarea.focus();\n\t\t\t}\n\t\t}, []);\n\n\t\tconst suggestionsState = useSuggestions({\n\t\t\tmessages: engine.messages,\n\t\t\tstatus: engine.status,\n\t\t\tconfig: props.suggestions,\n\t\t});\n\n\t\tconst handleWidgetMessage = useCallback(\n\t\t\t(message: {\n\t\t\t\trole: string;\n\t\t\t\tcontent: Array<{ type: string; text?: string }>;\n\t\t\t\tmodelContext?: ModelContextUpdate;\n\t\t\t}) => {\n\t\t\t\tconst text = message.content\n\t\t\t\t\t.map((c) => c.text ?? \"\")\n\t\t\t\t\t.join(\"\")\n\t\t\t\t\t.trim();\n\t\t\t\tif (text) {\n\t\t\t\t\tengine.handleSubmit({\n\t\t\t\t\t\ttext,\n\t\t\t\t\t\tfiles: [],\n\t\t\t\t\t\tmodelContext: message.modelContext,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t\t[engine.handleSubmit],\n\t\t);\n\n\t\tconst handleSuggestionSelect = useCallback(\n\t\t\t(suggestion: string) => {\n\t\t\t\tsuggestionsState.clear();\n\t\t\t\tengine.handleSubmit({ text: suggestion, files: [] });\n\t\t\t},\n\t\t\t[suggestionsState.clear, engine.handleSubmit],\n\t\t);\n\n\t\tuseImperativeHandle(\n\t\t\tref,\n\t\t\t() => ({\n\t\t\t\tsendMessage: (text: string) => {\n\t\t\t\t\tengine.handleSubmit({ text, files: [] });\n\t\t\t\t\tfocusInput();\n\t\t\t\t},\n\t\t\t\tsendMessageAndWait: (text: string) => engine.sendMessageAndWait(text),\n\t\t\t\treset: engine.reset,\n\t\t\t\tfocus: focusInput,\n\t\t\t\tget messages() {\n\t\t\t\t\treturn engine.messages;\n\t\t\t\t},\n\t\t\t}),\n\t\t\t[\n\t\t\t\tengine.handleSubmit,\n\t\t\t\tengine.sendMessageAndWait,\n\t\t\t\tengine.reset,\n\t\t\t\tengine.messages,\n\t\t\t\tfocusInput,\n\t\t\t],\n\t\t);\n\n\t\t// Listen for custom trigger event\n\t\tuseEffect(() => {\n\t\t\tif (!triggerEvent) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst handler = (e: Event) => {\n\t\t\t\tconst detail = (e as CustomEvent).detail;\n\t\t\t\tconst message =\n\t\t\t\t\ttypeof detail?.message === \"string\" ? detail.message : undefined;\n\t\t\t\tif (message) {\n\t\t\t\t\tengine.handleSubmit({ text: message, files: [] });\n\t\t\t\t}\n\t\t\t\tfocusInput();\n\t\t\t};\n\t\t\twindow.addEventListener(triggerEvent, handler);\n\t\t\treturn () => window.removeEventListener(triggerEvent, handler);\n\t\t}, [triggerEvent, engine.handleSubmit, focusInput]);\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={panelRef}\n\t\t\t\tstyle={cssVars}\n\t\t\t\tdata-waniwani-chat=\"\"\n\t\t\t\tdata-waniwani-layout=\"embed\"\n\t\t\t\t{...(isDark ? { \"data-waniwani-dark\": \"\" } : {})}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"ww:flex ww:flex-col ww:w-full ww:h-full ww:font-[family-name:var(--ww-font)] ww:text-foreground ww:bg-background ww:overflow-hidden\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{/* Messages */}\n\t\t\t\t<Conversation className=\"ww:flex-1 ww:min-h-0 ww:bg-background\">\n\t\t\t\t\t<ConversationContent\n\t\t\t\t\t\tscrollClassName={\n\t\t\t\t\t\t\tfullscreenToolCallId\n\t\t\t\t\t\t\t\t? \"ww:!relative ww:!overflow-hidden\"\n\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t}\n\t\t\t\t\t>\n\t\t\t\t\t\t<MessageList\n\t\t\t\t\t\t\tmessages={engine.messages}\n\t\t\t\t\t\t\tstatus={engine.status}\n\t\t\t\t\t\t\twelcomeMessage={welcomeMessage}\n\t\t\t\t\t\t\twelcome={welcome}\n\t\t\t\t\t\t\tonSuggestionSelect={handleSuggestionSelect}\n\t\t\t\t\t\t\tresourceEndpoint={mcp?.resourceEndpoint}\n\t\t\t\t\t\t\tchatSessionId={engine.sessionId}\n\t\t\t\t\t\t\tisDark={isDark}\n\t\t\t\t\t\t\tonFollowUp={handleWidgetMessage}\n\t\t\t\t\t\t\tonCallTool={handleCallTool}\n\t\t\t\t\t\t\tfullscreenToolCallId={fullscreenToolCallId}\n\t\t\t\t\t\t\tdebug={debug}\n\t\t\t\t\t\t\tonWidgetDisplayModeChange={(mode, widget) => {\n\t\t\t\t\t\t\t\tsetFullscreenToolCallId(\n\t\t\t\t\t\t\t\t\tmode === \"fullscreen\" ? widget.toolCallId : null,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ConversationContent>\n\t\t\t\t\t<ConversationScrollButton />\n\t\t\t\t</Conversation>\n\n\t\t\t\t{/* Suggestions — hide when fullscreen */}\n\t\t\t\t<div style={fullscreenToolCallId ? { display: \"none\" } : undefined}>\n\t\t\t\t\t<Suggestions\n\t\t\t\t\t\tsuggestions={suggestionsState.suggestions}\n\t\t\t\t\t\tisLoading={suggestionsState.isLoading}\n\t\t\t\t\t\tonSelect={handleSuggestionSelect}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\n\t\t\t\t{/* Queue — hide when fullscreen */}\n\t\t\t\t<div style={fullscreenToolCallId ? { display: \"none\" } : undefined}>\n\t\t\t\t\t<ChatQueue\n\t\t\t\t\t\tqueuedMessages={engine.queuedMessages}\n\t\t\t\t\t\tonRemove={engine.removeQueuedMessage}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\n\t\t\t\t{/* Input — hide when fullscreen */}\n\t\t\t\t<div style={fullscreenToolCallId ? { display: \"none\" } : undefined}>\n\t\t\t\t\t<div className=\"ww:shrink-0 ww:px-4 ww:pb-8 ww:pt-2 ww:bg-background\">\n\t\t\t\t\t\t<div className=\"ww:mx-auto ww:w-full ww:max-w-3xl\">\n\t\t\t\t\t\t\t<PromptInput\n\t\t\t\t\t\t\t\tonSubmit={engine.handleSubmit}\n\t\t\t\t\t\t\t\tglobalDrop={allowAttachments}\n\t\t\t\t\t\t\t\tmultiple={allowAttachments}\n\t\t\t\t\t\t\t\tclassName=\"ww:rounded-2xl ww:border-border ww:bg-input\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<div className=\"ww:flex ww:items-center ww:gap-1 ww:pl-4 ww:pr-3 ww:py-2.5\">\n\t\t\t\t\t\t\t\t\t{allowAttachments && <PromptInputAddAttachments />}\n\t\t\t\t\t\t\t\t\t<PromptInputTextarea\n\t\t\t\t\t\t\t\t\t\tonChange={engine.handleTextChange}\n\t\t\t\t\t\t\t\t\t\tvalue={engine.text}\n\t\t\t\t\t\t\t\t\t\tplaceholder={animatedPlaceholder}\n\t\t\t\t\t\t\t\t\t\tclassName=\"ww:min-h-0 ww:py-1 ww:px-0\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<PromptInputSubmit\n\t\t\t\t\t\t\t\t\t\tstatus={engine.status}\n\t\t\t\t\t\t\t\t\t\tdisabled={engine.queueFull}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</PromptInput>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t},\n);\n"],"mappings":"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ACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAWA,GAAK,OACrBA,GAAK,OAAWA,GAAK,OACrBA,GAAK,OAAWA,GAAK,QACrBA,GAAK,QAAWA,GAAK,QACrBA,GAAK,QAAWA,GAAK,QACrBA,GAAK,QAAWA,GAAK,QACrBA,GAAK,QAAWA,GAAK,QACrBA,IAAM,QACNA,IAAM,QACNA,GAAK,QAAWA,GAAK,QACrBA,IAAM,QACNA,GAAK,QAAWA,GAAK,QACrBA,IAAM,QACNA,GAAK,QAAWA,GAAK,QACrBA,GAAK,QAAWA,GAAK,QACrBA,GAAK,QAAWA,GAAK,QACrBA,GAAK,QAAWA,GAAK,QACrBA,IAAM,QACNA,IAAM,QACNA,IAAM,QACNA,GAAK,QAAWA,GAAK,QACrBA,GAAK,QAAWA,GAAK,QACrBA,GAAK,QAAWA,GAAK,QACrBA,GAAK,QAAWA,GAAK,QACrBA,IAAM,QACNA,IAAM,QACNA,GAAK,QAAWA,GAAK,QACrBA,GAAK,QAAWA,GAAK,QACrBA,GAAK,QAAWA,GAAK,QACrBA,GAAK,QAAWA,GAAK,QACrBA,GAAK,QAAWA,GAAK,QACrBA,GAAK,QAAWA,GAAK,QACrBA,GAAK,QAAWA,GAAK,QACrBA,GAAK,QAAWA,GAAK,QACrBA,IAAM,QACNA,GAAK,QAAWA,GAAK,QACrBA,IAAM,QACNA,GAAK,QAAWA,GAAK,QACrBA,GAAK,QAAWA,GAAK,QACrBA,GAAK,QAAWA,GAAK,QACrBA,GAAK,QAAWA,GAAK,QACrBA,IAAM,QACNA,IAAM,QACNA,IAAM,QACNA,IAAM,QACNA,GAAK,QAAWA,GAAK,QACrBA,GAAK,QAAWA,GAAK,QACrBA,IAAM,QACNA,GAAK,QAAWA,GAAK,QACrBA,GAAK,QAAWA,GAAK,QACrBA,GAAK,QAAWA,GAAK,QACrBA,IAAM,QACNA,IAAM,QACNA,GAAK,QAAWA,GAAK,QACrBA,GAAK,QA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","names":["forwardRef","useCallback","useEffect","useImperativeHandle","useRef","useState","mergeClasses","classes","className","index","array","toKebabCase","string","toCamelCase","string","match","p1","p2","toPascalCase","string","camelCase","toCamelCase","defaultAttributes","hasA11yProp","props","prop","Icon","forwardRef","color","size","strokeWidth","absoluteStrokeWidth","className","children","iconNode","rest","ref","createElement","defaultAttributes","mergeClasses","hasA11yProp","tag","attrs","createLucideIcon","iconName","iconNode","Component","forwardRef","className","props","ref","createElement","Icon","mergeClasses","toKebabCase","toPascalCase","__iconNode","ArrowDown","createLucideIcon","__iconNode","ArrowUp","createLucideIcon","__iconNode","Braces","createLucideIcon","__iconNode","Check","createLucideIcon","__iconNode","ChevronDown","createLucideIcon","__iconNode","ChevronRight","createLucideIcon","__iconNode","ClipboardCopy","createLucideIcon","__iconNode","File","createLucideIcon","__iconNode","Loader","createLucideIcon","__iconNode","Paperclip","createLucideIcon","__iconNode","Square","createLucideIcon","__iconNode","X","createLucideIcon","useCallback","useCallback","useMemo","useRef","useState","DEFAULT_SPRING_ANIMATION","STICK_TO_BOTTOM_OFFSET_PX","SIXTY_FPS_INTERVAL_MS","RETAIN_ANIMATION_DURATION_MS","mouseDown","useStickToBottom","options","escapedFromLock","updateEscapedFromLock","isAtBottom","updateIsAtBottom","isNearBottom","setIsNearBottom","optionsRef","isSelecting","selection","range","scrollRef","setIsAtBottom","state","setEscapedFromLock","lastCalculation","scrollTop","contentRef","targetScrollTop","calculatedScrollTop","scrollToBottom","scrollOptions","waitElapsed","behavior","mergeAnimations","ignoreEscapes","durationElapsed","startTarget","next","promise","tick","tickDelta","stopScroll","handleScroll","target","ignoreScrollToTop","lastScrollTop","isScrollingDown","isScrollingUp","handleWheel","deltaY","element","useRefCallback","scroll","content","previousHeight","entry","height","difference","animation","callback","deps","result","ref","animationCache","animations","instant","key","React","createContext","useContext","useEffect","useImperativeHandle","useLayoutEffect","useMemo","useRef","StickToBottomContext","createContext","useIsomorphicLayoutEffect","useLayoutEffect","useEffect","StickToBottom","instance","children","resize","initial","mass","damping","stiffness","currentTargetScrollTop","contextRef","props","customTargetScrollTop","useRef","targetScrollTop","target","elements","context","defaultInstance","useStickToBottom","scrollRef","contentRef","scrollToBottom","stopScroll","isAtBottom","escapedFromLock","state","useMemo","useImperativeHandle","Content","scrollClassName","useStickToBottomContext","useContext","twMerge","extendTailwindMerge","cn","inputs","clsx","jsx","Button","className","variant","size","type","props","cn","jsx","Conversation","className","props","StickToBottom","cn","ConversationContent","ConversationScrollButton","isAtBottom","scrollToBottom","useStickToBottomContext","handleScrollToBottom","useCallback","Button","ArrowDown","crypto","urlAlphabet","POOL_SIZE_MULTIPLIER","pool","poolOffset","fillPool","bytes","crypto","nanoid","size","fillPool","id","i","poolOffset","urlAlphabet","pool","createContext","useCallback","useContext","useEffect","useMemo","useRef","useState","jsx","jsxs","convertBlobUrlToDataUrl","url","blob","resolve","reader","LocalAttachmentsContext","createContext","usePromptInputAttachments","context","useContext","PromptInput","className","accept","multiple","globalDrop","maxFiles","maxFileSize","onSubmit","children","props","inputRef","useRef","formRef","items","setItems","useState","filesRef","useEffect","openFileDialog","useCallback","add","fileList","incoming","withinSize","f","valid","prev","capacity","capped","file","nanoid","remove","id","found","clear","handleChange","event","onDragOver","e","onDrop","handleSubmit","form","text","convertedFiles","_id","item","dataUrl","result","attachmentsCtx","useMemo","cn","PromptInputTextarea","onChange","onKeyDown","className","placeholder","props","attachments","usePromptInputAttachments","isComposing","setIsComposing","useState","handleKeyDown","useCallback","e","form","lastAttachment","handlePaste","event","items","files","item","file","jsx","cn","PromptInputSubmit","status","onStop","onClick","children","isGenerating","Icon","ArrowUp","Loader","Square","handleClick","Button","PromptInputAddAttachments","jsxs","X","Paperclip","memo","useCallback","jsx","Queue","className","props","cn","QueueItem","QueueItemIndicator","QueueItemContent","QueueItemActions","QueueItemAction","Button","jsx","jsxs","ChatQueueItem","memo","message","onRemove","handleRemove","useCallback","QueueItem","QueueItemIndicator","QueueItemContent","QueueItemActions","QueueItemAction","X","ChatQueue","queuedMessages","className","Queue","cn","msg","useState","jsx","ExportSessionButton","messages","evalEnabled","api","saving","setSaving","feedback","setFeedback","handleExport","session","res","jsx","jsxs","Attachments","files","className","props","cn","file","i","AttachmentItem","File","jsx","Loader","className","size","props","cn","i","codes","constants","types","isAmbiguous","x","isFullWidth","isWide","getCategory","validate","codePoint","eastAsianWidthType","getCategory","__defProp","__defNormalProp","obj","key","value","__publicField","isEmoji","uc","cjkOrIvs","eastAsianWidthType","isCjkAmbiguousPunctuation","main","vs","nonEmojiGeneralUseVS","code","unicodePunctuation","regexCheck","unicodeWhitespace","regex","check","constantsEx","constantsEx2","classifyCharacter","codes","markdownLineEndingOrSpace","constants","classifyPrecedingCharacter","before","get2Previous","previous","isNonEmojiGeneralUseVS","twoPrevious","twoBefore","isUnicodeWhitespace","stripIvs","category","isNonCjkPunctuation","isCjk","isIvs","isCjkOrIvs","isSpaceOrPunctuation","isCodeHighSurrogate","isCodeLowSurrogate","tryGetGenuinePreviousCode","nowPoint","sliceSerialize","previousCandidate","tryGetCodeTwoBefore","previousCode","previousWidth","idealStart","twoPreviousBuffer","twoPreviousLast","twoPreviousCandidate","TwoPreviousCode","tryGetGenuineNextCode","nextCandidate","attention","resolveAllAttention","tokenizeAttention","events","context","index","open","group","text","openingSequence","closingSequence","use","nextEvents","offset","start","end","movePoint","types","push","resolveAll","splice","effects","ok","attentionMarkers","now","sliceSerialize","tentativePrevious","previous","isCodeLowSurrogate","tryGetGenuinePreviousCode","before","classifyCharacter","twoPrevious","TwoPreviousCode","beforePrimary","classifyPrecedingCharacter","marker","code","codes","inside","token","next","isCodeHighSurrogate","tryGetGenuineNextCode","after","beforeNonCjkPunctuation","isNonCjkPunctuation","beforeSpaceOrNonCjkPunctuation","isUnicodeWhitespace","afterNonCjkPunctuation","afterSpaceOrNonCjkPunctuation","beforeCjkOrIvs","isCjkOrIvs","close","isCjk","isSpaceOrPunctuation","point","cjkFriendlyExtension","remarkCjkFriendly","data","cjkFriendlyExtension","gfmStrikethroughCjkFriendly","options","single","tokenizer","tokenizeStrikethrough","resolveAllStrikethrough","codes","events","context","index","open","strikethrough","text","nextEvents","insideSpan","splice","resolveAll","types","effects","ok","nok","now","sliceSerialize","tentativePrevious","previous","isCodeLowSurrogate","tryGetGenuinePreviousCode","before","classifyCharacter","twoPrevious","TwoPreviousCode","beforePrimary","classifyPrecedingCharacter","size","start","code","more","before2","token","next","isCodeHighSurrogate","tryGetGenuineNextCode","after","beforeSpaceOrNonCjkPunctuation","isNonCjkPunctuation","isUnicodeWhitespace","afterSpaceOrNonCjkPunctuation","beforeCjkOrIvs","isCjk","isIvs","constants","remarkGfmStrikethroughCjkFriendly","options","data","gfmStrikethroughCjkFriendly","k","m","f","t","r","P","e","p","d","y","visit","i","n","l","u","o","s","b","remarkCjkFriendly","remarkGfmStrikethroughCjkFriendly","A","ShikiError","message","clone","something","doClone","cloneArray","cloneObj","arr","r","i","len","obj","key","mergeObjects","target","sources","source","basename","path","idx","CAPTURING_REGEX_SOURCE","RegexSource","regexSource","captureSource","captureIndices","match","index","commandIndex","command","capture","result","strcmp","a","b","strArrCmp","len1","len2","res","isValidHexColor","hex","escapeRegExpCharacters","value","CachedFn","fn","Theme","_colorMap","_defaults","_root","colorMap","parseTheme","resolveParsedThemeRules","scopeName","scopePath","effectiveRule","v","_scopePathMatchesParentScopes","StyleAttributes","ScopeStack","_ScopeStack","parent","scopeNames","name","segments","item","other","base","parentScopes","scopePattern","scopeMustMatch","_matchesScope","fontStyle","foregroundId","backgroundId","settings","resultLen","entry","scopes","_scope","j","lenJ","foreground","background","scope","ParsedThemeRule","FontStyle","FontStyle2","parsedThemeRules","defaultFontStyle","defaultForeground","defaultBackground","incomingDefaults","ColorMap","defaults","root","ThemeTrieElement","ThemeTrieElementRule","rule","color","emptyParentScopes","_ThemeTrieElementRule","scopeDepth","_ThemeTrieElement","_mainRule","rulesWithParentScopes","_children","aParentIndex","bParentIndex","parentScopeLengthDiff","dotIndex","head","tail","rules","child","EncodedTokenMetadata","_EncodedTokenMetadata","encodedTokenAttributes","languageId","tokenType","containsBalancedBrackets","_languageId","_tokenType","_containsBalancedBracketsBit","_fontStyle","_foreground","_background","createMatchers","selector","matchesName","results","tokenizer","newTokenizer","token","priority","matcher","parseConjunction","parseOperand","expressionToNegate","matcherInput","expressionInParents","parseInnerExpression","isIdentifier","identifiers","matchers","matcher2","input","regex","match","res","disposeOnigString","str","TopLevelRuleReference","scopeName","TopLevelRepositoryRuleReference","ruleName","ExternalReferenceCollector","reference","key","ScopeDependencyProcessor","repo","initialScopeName","q","deps","dep","collectReferencesOfReference","baseGrammarScopeName","result","selfGrammar","baseGrammar","collectExternalReferencesInTopLevelRule","collectExternalReferencesInTopLevelRepositoryRule","injections","injection","context","rule","collectExternalReferencesInRules","rules","patternRepository","mergeObjects","include","parseInclude","newContext","BaseReference","SelfReference","RelativeReference","TopLevelReference","TopLevelRepositoryReference","indexOfSharp","HAS_BACK_REFERENCES","BACK_REFERENCING_END","endRuleId","whileRuleId","Rule","$location","id","name","contentName","RegexSource","location","basename","lineText","captureIndices","CaptureRule","retokenizeCapturedWithRuleId","grammar","out","endRegexSource","allowA","allowG","MatchRule","match","captures","RegExpSource","RegExpSourceList","IncludeOnlyRule","patterns","pattern","BeginEndRule","begin","beginCaptures","end","endCaptures","applyEndPatternLast","BeginWhileRule","_while","whileCaptures","whileRuleId","RuleFactory","_RuleFactory","helper","desc","repository","mergeObjects","maximumCaptureId","captureId","numericCaptureId","i","len","ruleId","reference","parseInclude","localIncludedRule","externalGrammarName","externalGrammarInclude","externalGrammar","externalIncludedRule","rule","skipRule","_RegExpSource","regExpSource","lastPushedPos","output","hasAnchor","pos","nextCh","HAS_BACK_REFERENCES","newSource","capturedValues","capture","BACK_REFERENCING_END","g1","escapeRegExpCharacters","A0_G0_result","A0_G1_result","A1_G0_result","A1_G1_result","ch","item","index","onigLib","regExps","e","CompiledRule","rules","r","string","startPosition","options","result","BasicScopeAttributes","languageId","tokenType","BasicScopeAttributesProvider","_BasicScopeAttributesProvider","initialLanguageId","embeddedLanguages","ScopeMatcher","scopeName","CachedFn","standardTokenType","scope","m","values","escapedScopes","value","DebugFlags","UseOnigurumaFindOptions","TokenizeStringResult","stack","stoppedEarly","_tokenizeString","isFirstLine","linePos","lineTokens","checkWhileConditions","timeLimit","lineLength","STOP","anchorPosition","whileCheckResult","_checkWhileConditions","startTime","scanNext","matchRuleOrInjections","matchedRuleId","hasAdvanced","endRuleId","poppedRule","handleCaptures","popped","_rule","beforePush","nameScopesList","pushedRule","contentNameScopesList","whileRules","node","nodeRule","whileRule","ruleScanner","findOptions","prepareRuleWhileSearch","matchResult","matchRule","injections","injectionResult","matchInjections","matchResultScore","injectionResultScore","prepareRuleSearch","bestMatchRating","bestMatchCaptureIndices","bestMatchRuleId","bestMatchResultPriority","scopes","injection","matchRating","ruleScanner2","getFindOptions","lineTextContent","localStack","maxEnd","captureRule","captureIndex","stackClone","onigSubStr","disposeOnigString","captureRuleScopeName","captureRuleScopesList","LocalStackElement","endPos","createGrammar","initialLanguage","tokenTypes","balancedBracketSelectors","grammarRepository","Grammar","collectInjections","selector","ruleFactoryHelper","matchers","createMatchers","nameMatcher","matcher","identifers","lastIndex","identifier","scopesAreMatching","thisScopeName","_rootScopeName","_onigLib","initGrammar","sources","scopeName2","rawInjections","expression","injectionScopeNames","injectionScopeName","injectionGrammar","i1","i2","factory","rawIncludedGrammar","prevState","emitBinaryTokens","StateStackImpl","rawDefaultMetadata","defaultStyle","defaultMetadata","EncodedTokenMetadata","rootScopeName","scopeList","AttributedScopeStack","onigLineText","LineTokens","base","clone","_AttributedScopeStack","parent","scopePath","tokenAttributes","namesScopeList","current","scopeNames","frame","ScopeStack","rawRootMetadata","rootStyle","resolvedTokenAttributes","other","a","b","existingTokenAttributes","basicScopeAttributes","styleAttributes","fontStyle","foreground","background","target","rawMetadata","newPath","scopeThemeMatchResult","metadata","self","_StateStackImpl","enterPos","anchorPos","beginRuleCapturedEOL","endRule","el","res","outIndex","contentNameScopeStack","BalancedBracketSelectors","balancedBracketScopes","unbalancedBracketScopes","excluder","includer","tokenTypeOverrides","endIndex","scopesList","containsBalancedBrackets","scopes2","SyncRegistry","theme","targetScope","rawGrammar","Registry","Theme","colorMap","initialScopeName","configuration","dependencyProcessor","ScopeDependencyProcessor","request","INITIAL","defaultSubsetRegex","surrogatePairsRegex","controlCharactersRegex","regexEscapeRegex","subsetToRegexCache","core","value","options","charactersToExpressionCached","basic","surrogate","pair","index","all","character","subset","cached","charactersToExpression","groups","hexadecimalRegex","toHexadecimal","code","next","omit","value","decimalRegex","toDecimal","code","next","omit","value","characterEntitiesLegacy","characterEntitiesHtml4","dangerous","own","characters","key","characterEntitiesHtml4","notAlphanumericRegex","toNamed","code","next","omit","attribute","character","name","value","characterEntitiesLegacy","dangerous","formatSmart","code","next","options","numeric","toHexadecimal","named","toNamed","decimal","toDecimal","stringifyEntities","value","options","core","formatSmart","htmlCommentRegex","bogusCommentEntitySubset","commentEntitySubset","comment","node","_1","_2","state","stringifyEntities","encode","$0","doctype","_1","_2","_3","state","siblingAfter","siblings","siblingBefore","emptyChildren","increment","sibling","parent","index","includeWhitespace","offset","next","whitespace","own","omission","handlers","omit","node","index","parent","closing","omission","body","headOrColgroupOrCaption","dd","dt","html","li","optgroup","option","p","rubyElement","tbody","cells","tfoot","thead","tr","_","index","parent","next","siblingAfter","whitespace","opening","omission","body","colgroup","head","html","tbody","node","siblingAfter","seen","child","whitespace","index","parent","previous","siblingBefore","closing","constants","element","node","index","parent","state","schema","omit","selfClosing","parts","last","svg","attributes","serializeAttributes","content","opening","closing","properties","values","key","value","serializeAttribute","info","find","x","y","quote","result","name","stringifyEntities","stringify","ccount","textEntitySubset","text","node","_","parent","state","stringifyEntities","raw","node","index","parent","state","text","root","node","_1","_2","state","handle","zwitch","invalid","unknown","comment","doctype","element","raw","root","text","node","node_","emptyOptions","emptyCharacterReferences","emptyChildren","toHtml","tree","options","options_","quote","alternative","one","all","htmlVoidElements","svg","html","node","index","parent","handle","results","children","resolveColorReplacements","theme","options","replacements","themeName","key","value","applyColorReplacements","color","toArray","x","normalizeGetter","p","r","isPlainLang","lang","isSpecialLang","isNoneTheme","isSpecialTheme","addClassToHast","node","className","targets","c","splitLines","code","preserveEnding","parts","index","lines","i","line","createPositionConverter","indexToPos","character","lineText","posToIndex","guessEmbeddedLanguages","_lang","highlighter","langs","match","fullType","bundle","l","DEFAULT_COLOR_LIGHT_DARK","COLOR_KEYS","splitToken","token","offsets","lastOffset","tokens","offset","splitTokens","breakpoints","sorted","a","b","breakpointsInToken","flatTokenVariants","merged","variantsOrder","cssVariablePrefix","defaultColor","colorsRendering","styles","t","getTokenStyleObject","styleKeys","mergedStyles","varKey","idx","keyName","cur","lightIndex","darkIndex","ShikiError","lightValue","darkValue","FontStyle","decorations","stringifyTokenStyle","_grammarStateMap","setLastGrammarStateToMap","keys","state","getLastGrammarStateFromMap","GrammarState","_GrammarState","themes","INITIAL","args","stacksMap","stack","getScopes","scopes","visited","pushScope","stack2","name","getGrammarStack","transformerDecorations","map","getContext","shiki","normalizePosition","converter","d","verifyIntersections","codeEl","ctx","applyLineSection","start","end","decoration","lineEl","text","startIndex","endIndex","stringify","children","applyDecoration","wrapper","applyLine","el","type","properties","transform","lineApplies","items","foo","j","bar","isFooHasBarStart","isFooHasBarEnd","isBarHasFooStart","isBarHasFooEnd","builtInTransformers","getTransformers","transformers","sortTransformersByEnforcement","pre","post","normal","transformer","namedColors","findSequence","position","nextEscape","nextClose","parseColor","sequence","colorMode","rgb","parseSequence","commands","codeInt","createAnsiSequenceParser","foreground","background","decorations2","findResult","styleToken","defaultNamedColorsMap","createColorPalette","namedColorsMap","namedColor","rgbColor","colorTable","getColorTable","levels","g","level","tableColor","defaultAnsiColors","tokenizeAnsiWithTheme","fileContents","colorReplacements","ansiPalette","themeColor","colorPalette","parser","bgColor","dimColor","fontStyle","hexMatch","hex","alpha","cssVarMatch","codeToTokensBase","internal","colorMap","_grammar","tokenizeWithTheme","getLastGrammarState","_tokenizeWithTheme","grammar","result","grammarState","tokenizeMaxLineLength","tokenizeTimeLimit","stateStack","actual","final","len","lineOffset","resultWithScopes","tokensWithScopes","tokensWithScopesIndex","tokensLength","nextStartIndex","metadata","EncodedTokenMetadata","themeSettingsSelectors","setting","selectors","scope","selector","tokenWithScopes","tokenWithScopesText","explainThemeScopesNameOnly","explainThemeScopesFull","themeSelectors","explainThemeScope","matchesOne","matches","parentScopes","selectorParentIndex","parentIndex","settings","selectorPieces","codeToTokensWithThemes","themedTokens","tokens2","syncThemesTokenization","mergedTokens","lineIdx","_token","tokenIdx","mergedToken","themeIdx","_","__","___","mergedGrammarState","s","outThemes","count","outLines","i2","indexes","current","minLength","n","codeToTokens","bg","fg","rootStyle","themeTokens","themeRegs","themesOrder","themeColorReplacements","mapThemeColors","_theme","property","cssVar","t2","codeToHast","transformerContext","_code","_options","input","mergeWhitespaces","mergeSameStyleTokens","mergeWhitespaceTokens","splitWhitespaceTokens","mergeAdjacentStyledTokens","contextSource","tokensToHast","root","structure","tabindex","preNode","codeNode","lineNodes","context","lineNode","col","tokenNode","style","syntheticLines","currentLine","child","transformedCode","newLine","carryOnContent","firstOffset","couldMerge","leading","content","trailing","expanded","prevToken","prevStyle","currentStyle","isPrevDecorated","isDecorated","hastToHtml","toHtml","codeToHtml","VSCODE_FALLBACK_EDITOR_FG","VSCODE_FALLBACK_EDITOR_BG","RESOLVED_KEY","normalizeTheme","rawTheme","globalSetting","replacementCount","replacementMap","getReplacementColor","replaceFg","replaceBg","clone","replacement","resolveLangs","resolveThemes","_emitDeprecation","_emitError","warnDeprecated","message","version","_emitDeprecation","_emitError","ShikiError","resolveLangAlias","name","alias","resolved","Registry","_resolver","_themes","_langs","_alias","t","theme","_theme","normalizeTheme","textmateTheme","Theme","lang","embeddedLazilyBy","i","grammarConfig","g","e","langs","langsGraphArray","missingLangs","_","dependents","embedded","embeddedLang","Resolver","engine","patterns","s","langIdOrAlias","scopeName","l","scopeParts","injections","subScopeName","instancesCount","createShikiInternalSync","options","isDisposed","themes","resolver","_registry","_lastTheme","resolveLangAlias$1","getLanguage","ensureNotDisposed","_lang","getTheme","setTheme","colorMap","getLoadedThemes","getLoadedLanguages","loadLanguageSync","langs2","loadLanguage","resolveLangs","loadThemeSync","themes2","loadTheme","resolveThemes","dispose","createShikiInternal","createHighlighterCore","internal","args","getLastGrammarState","code","options2","codeToTokensBase","codeToTokensWithThemes","codeToTokens","codeToHast","codeToHtml","createBundledHighlighter","options","bundledLanguages","bundledThemes","engine","createHighlighter","options2","resolveLang","lang","isSpecialLang","bundle","ShikiError","resolveTheme","theme","isSpecialTheme","_themes","i","langs","core","createHighlighterCore","langs2","themes","makeSingletonHighlighter","_shiki","getSingletonHighlighter","s","createSingletonShorthands","config","get","code","shiki","bundledLanguagesInfo","bundledLanguagesBase","i","bundledLanguagesAlias","a","bundledLanguages","bundledThemesInfo","bundledThemes","i","ShikiError","message","getHeapMax","_emscripten_get_now","alignUp","x","multiple","main","init","wasmMemory","buffer","binding","updateGlobalBufferAndViews","buf","_emscripten_memcpy_big","dest","src","num","emscripten_realloc_buffer","size","_emscripten_resize_heap","requestedSize","oldSize","maxHeapSize","cutDown","overGrownHeapSize","newSize","UTF8Decoder","UTF8ArrayToString","heapOrArray","idx","maxBytesToRead","endIdx","endPtr","str","u0","u1","u2","ch","UTF8ToString","ptr","asmLibraryArg","createWasm","exports$1","__defProp","__defNormalProp","obj","key","value","__publicField","onigBinding","throwLastOnigError","onigBinding2","UtfString","_UtfString","utf16Length","utf8Length","computeIndicesMapping","utf16OffsetToUtf8","utf8OffsetToUtf16","utf8Value","i8","i16","charCode","codePoint","wasSurrogatePair","nextCharCode","result","i","len","codepoint","_OnigString","utfString","utf8Offset","utf16Offset","OnigString","OnigScanner","patterns","strPtrsArr","strLenArr","strPtrsPtr","strLenPtr","scannerPtr","string","startPosition","arg","options","debugCall","resultPtr","HEAPU32","offset","index","count","captureIndices","beg","end","isInstantiatorOptionsObject","dataOrOptions","isInstantiatorModule","isDataOptionsObject","isResponse","isArrayBuffer","data","initPromise","loadWasm","_load","info","instance","_makeResponseStreamingLoader","_makeResponseNonStreamingLoader","_makeArrayBufferLoader","importObject","arrayBuffer","createOnigurumaEngine","options","loadWasm","patterns","OnigScanner","p","s","OnigString","createHighlighter","createBundledHighlighter","bundledLanguages","bundledThemes","createOnigurumaEngine","codeToHtml","codeToHast","codeToTokens","codeToTokensBase","codeToTokensWithThemes","getSingletonHighlighter","getLastGrammarState","createSingletonShorthands","guessEmbeddedLanguages","p","bundledLanguages","a","h","l","H","k","n","g","i","b","createHighlighter","f","t","r","d","s","u","B","o","c","L","R","memo","jsx","Message","className","from","children","props","cn","MessageContent","streamdownPlugins","A","R","MessageResponse","memo","xn","prevProps","nextProps","jsx","Reasoning","className","text","props","cn","createContext","useCallback","useContext","useEffect","useMemo","useRef","useState","Fragment","jsx","jsxs","truncateJSON","data","maxLength","stringified","entries","parts","remaining","key","value","keyAbbrev","valStr","part","CopyButton","text","className","copied","setCopied","useState","timeoutRef","useRef","useEffect","handleCopy","useCallback","e","Button","cn","Check","ClipboardCopy","CollapsibleJSON","label","props","expanded","setExpanded","fullJSON","useMemo","preview","v","ChevronRight","ToolOpenContext","createContext","Tool","defaultOpen","children","open","setOpen","o","ToolHeader","title","state","toggle","useContext","isRunning","Braces","ChevronDown","ToolContent","className","children","props","open","useContext","ToolOpenContext","jsx","cn","ToolInput","input","debug","filtered","useMemo","_meta","rest","CollapsibleJSON","getUiMeta","output","meta","ui","getResourceUri","uri","getAutoHeight","ToolOutput","errorText","jsxs","useCallback","useEffect","useMemo","useRef","useState","hasModelContext","value","hasContent","hasStructuredContent","mergeModelContext","current","next","jsx","DEFAULT_RESOURCE_ENDPOINT","MAX_HEIGHT","DEFAULT_HEIGHT","AUTOHEIGHT_PADDING","PROTOCOL_VERSION","RESIZE_ANIMATION_MS","HANDSHAKE_TIMEOUT_MS","MAX_RETRIES","normalizeString","value","trimmed","resultProducesWidget","result","meta","uiMeta","shouldAutoInjectToolResultText","McpAppFrame","resourceUri","toolInput","toolResult","resourceEndpoint","chatSessionId","isDark","className","autoHeight","onOpenLink","onFollowUp","onCallTool","onDisplayModeChange","isFullscreen","iframeRef","useRef","toolInputRef","toolResultRef","lastSizeRef","animationRef","initializedRef","retryCountRef","displayModeRef","height","setHeight","useState","width","setWidth","onOpenLinkRef","onFollowUpRef","onCallToolRef","onDisplayModeChangeRef","chatSessionIdRef","clampHeight","useCallback","h","iframeSrc","useMemo","isDarkRef","useEffect","iframe","disposed","handshakeReceived","pendingModelContext","pendingToolResult","handshakeTimer","url","postToIframe","msg","handleMessage","event","data","method","id","input","resultMeta","normalizedChatSessionId","waniwaniMeta","forwardedWaniwaniMeta","forwardedMeta","content","params","newHeight","newWidth","last","heightChanged","widthChanged","clamped","from","anim","modelContext","toolText","existingText","c","mergeModelContext","handler","text","err","message","requested","granted","cn","jsx","jsxs","WelcomeScreen","icon","title","description","suggestions","onSuggestionSelect","suggestion","index","cn","Component","jsx","jsxs","WidgetErrorBoundary","error","Fragment","jsx","jsxs","formatToolName","name","c","MessageList","messages","status","welcomeMessage","welcome","onSuggestionSelect","resourceEndpoint","chatSessionId","isDark","onFollowUp","onCallTool","onWidgetDisplayModeChange","fullscreenToolCallId","debug","isLoading","lastMessage","hasMessages","showLoaderBubble","isFullscreenActive","WelcomeScreen","Message","MessageContent","MessageResponse","message","textParts","p","reasoningParts","fileParts","toolParts","isLastAssistant","hasTextContent","containsFullscreenTool","part","i","Reasoning","output","resourceUri","getResourceUri","autoHeight","getAutoHeight","isFullscreen","Tool","ToolHeader","ToolContent","ToolInput","ToolOutput","WidgetErrorBoundary","McpAppFrame","mode","Attachments","Loader","jsx","Suggestions","suggestions","isLoading","onSelect","className","props","cn","i","suggestion","index","useCallback","useRef","useCallTool","props","propsRef","params","api","headers","onCallTool","sessionId","endpoint","normalizedSessionId","res","useChat","DefaultChatTransport","useCallback","useEffect","useRef","useState","VISITOR_ID_KEY","match","ua","pattern","parseBrowser","browsers","name","version","parseOS","systems","detectDeviceType","sha256","input","data","hash","b","computeVisitorId","stored","raw","id","collectVisitorContext","visitorId","SESSION_HEADER_NAME","normalizeSessionId","value","trimmed","useChatEngine","props","api","userHeaders","body","onMessageSent","onResponseReceived","headersRef","useRef","bodyRef","pendingModelContextRef","visitorContextRef","sessionId","setSessionIdState","useState","sessionIdRef","getSessionId","useCallback","setSessionId","clearSessionId","useEffect","collectVisitorContext","ctx","transportRef","DefaultChatTransport","resolvedBody","hasExplicitSessionId","bodySessionId","storedSessionId","hasModelContext","vc","input","init","response","pendingWaitRef","messages","sendMessage","setMessages","status","useChat","message","error","text","setText","queuedMessages","setQueuedMessages","isLoading","removeQueuedMessage","id","prev","m","queueFull","handleSubmit","hasText","hasFiles","nanoid","sendMessageAndWait","resolve","reject","first","rest","reset","handleTextChange","e","lastMessage","hasMessages","showLoaderBubble","useEffect","useState","defaultConfig","useConfig","api","config","setConfig","data","useCallback","useEffect","useRef","useState","extractSuggestions","message","part","p","data","isConfigObject","config","useSuggestions","options","messages","status","suggestions","setSuggestions","prevStatusRef","isDynamicEnabled","clear","lastMessage","prevStatus","lastAssistant","m","extracted","useEffect","useRef","useState","TYPE_SPEED_MS","DELETE_SPEED_MS","PAUSE_AFTER_TYPE_MS","PAUSE_AFTER_DELETE_MS","useTypingPlaceholder","text","active","displayed","setDisplayed","timerRef","i","deleting","disposed","tick","DEFAULT_THEME","DARK_THEME","CSS_VAR_MAP","mergeTheme","userTheme","isDarkTheme","theme","hex","r","g","b","themeToCSSProperties","vars","key","cssVars","value","resolved","cssVar","jsx","jsxs","ChatBar","forwardRef","props","ref","userTheme","title","width","userExpandedWidth","expandedHeight","allowAttachments","welcomeMessage","welcome","placeholder","triggerEvent","api","expandedWidth","effectiveApi","effectiveResourceEndpoint","resolvedTheme","mergeTheme","cssVars","themeToCSSProperties","isDark","isDarkTheme","config","useConfig","engine","useChatEngine","handleCallTool","useCallTool","suggestionsState","useSuggestions","handleWidgetMessage","useCallback","message","text","c","handleSuggestionSelect","suggestion","animatedPlaceholder","useTypingPlaceholder","isFocused","setIsFocused","useState","isHighlighted","setIsHighlighted","fullscreenToolCallId","setFullscreenToolCallId","containerRef","useRef","highlightTimerRef","focusInput","container","textarea","useImperativeHandle","useEffect","handler","e","detail","isExpanded","handleClickOutside","handleFocus","ExportSessionButton","Conversation","ConversationContent","MessageList","mode","widget","ConversationScrollButton","Suggestions","ChatQueue","PromptInput","cn","PromptInputAddAttachments","PromptInputTextarea","PromptInputSubmit","useRef","useState","useCallback","useEffect","useState","useScenarios","api","enabled","scenarios","setScenarios","isLoading","setIsLoading","load","r","data","jsx","jsxs","getUserText","msg","p","ScenarioSkeleton","i","PANEL_WIDTH","ScenarioPanel","api","chatRef","effectiveApi","selected","setSelected","useState","running","setRunning","abortRef","useRef","config","useConfig","scenarios","isLoading","reload","useScenarios","runScenario","scenario","userMessages","text","e","s","cn","forwardRef","useCallback","useEffect","useImperativeHandle","useRef","useState","jsx","jsxs","ChatCard","forwardRef","props","ref","userTheme","title","width","height","className","allowAttachments","welcomeMessage","welcome","placeholder","triggerEvent","api","debug","effectiveApi","effectiveResourceEndpoint","resolvedTheme","mergeTheme","cssVars","themeToCSSProperties","isDark","isDarkTheme","config","useConfig","effectiveDebug","engine","useChatEngine","handleCallTool","useCallTool","animatedPlaceholder","useTypingPlaceholder","isHighlighted","setIsHighlighted","useState","fullscreenToolCallId","setFullscreenToolCallId","cardRef","useRef","highlightTimerRef","focusInput","useCallback","container","textarea","suggestionsState","useSuggestions","handleWidgetMessage","message","text","c","handleSuggestionSelect","suggestion","useImperativeHandle","useEffect","handler","e","detail","cn","ExportSessionButton","Conversation","ConversationContent","MessageList","mode","widget","ConversationScrollButton","Suggestions","ChatQueue","PromptInput","PromptInputAddAttachments","PromptInputTextarea","PromptInputSubmit","forwardRef","useCallback","useEffect","useImperativeHandle","useRef","useState","jsx","jsxs","ChatEmbed","forwardRef","props","ref","userTheme","className","allowAttachments","welcomeMessage","welcome","placeholder","triggerEvent","api","mcp","debug","resolvedTheme","mergeTheme","cssVars","themeToCSSProperties","isDark","isDarkTheme","engine","useChatEngine","handleCallTool","useCallTool","animatedPlaceholder","useTypingPlaceholder","fullscreenToolCallId","setFullscreenToolCallId","useState","panelRef","useRef","focusInput","useCallback","container","textarea","suggestionsState","useSuggestions","handleWidgetMessage","message","text","c","handleSuggestionSelect","suggestion","useImperativeHandle","useEffect","handler","e","detail","cn","Conversation","ConversationContent","MessageList","mode","widget","ConversationScrollButton","Suggestions","ChatQueue","PromptInput","PromptInputAddAttachments","PromptInputTextarea","PromptInputSubmit"]}
1
+ {"version":3,"sources":["../../src/chat/web/layouts/chat-bar.tsx","../../node_modules/shared/src/utils/mergeClasses.ts","../../node_modules/shared/src/utils/toKebabCase.ts","../../node_modules/shared/src/utils/toCamelCase.ts","../../node_modules/shared/src/utils/toPascalCase.ts","../../node_modules/lucide-react/src/defaultAttributes.ts","../../node_modules/shared/src/utils/hasA11yProp.ts","../../node_modules/lucide-react/src/Icon.ts","../../node_modules/lucide-react/src/createLucideIcon.ts","../../node_modules/lucide-react/src/icons/arrow-down.ts","../../node_modules/lucide-react/src/icons/arrow-up.ts","../../node_modules/lucide-react/src/icons/braces.ts","../../node_modules/lucide-react/src/icons/check.ts","../../node_modules/lucide-react/src/icons/chevron-down.ts","../../node_modules/lucide-react/src/icons/chevron-right.ts","../../node_modules/lucide-react/src/icons/clipboard-copy.ts","../../node_modules/lucide-react/src/icons/file.ts","../../node_modules/lucide-react/src/icons/loader.ts","../../node_modules/lucide-react/src/icons/paperclip.ts","../../node_modules/lucide-react/src/icons/square.ts","../../node_modules/lucide-react/src/icons/x.ts","../../src/chat/web/ai-elements/conversation.tsx","../../node_modules/use-stick-to-bottom/dist/useStickToBottom.js","../../node_modules/use-stick-to-bottom/dist/StickToBottom.js","../../src/chat/web/lib/utils.ts","../../src/chat/web/ui/button.tsx","../../node_modules/nanoid/index.js","../../node_modules/nanoid/url-alphabet/index.js","../../src/chat/web/ai-elements/prompt-input.tsx","../../src/chat/web/components/chat-queue.tsx","../../src/chat/web/ai-elements/queue.tsx","../../src/chat/web/components/export-session.tsx","../../src/chat/web/ai-elements/attachments.tsx","../../src/chat/web/ai-elements/loader.tsx","../../node_modules/micromark-util-symbol/lib/codes.js","../../node_modules/micromark-util-symbol/lib/constants.js","../../node_modules/micromark-util-symbol/lib/types.js","../../node_modules/get-east-asian-width/lookup.js","../../node_modules/get-east-asian-width/index.js","../../node_modules/micromark-extension-cjk-friendly-util/dist/index.js","../../node_modules/micromark-extension-cjk-friendly/dist/index.js","../../node_modules/remark-cjk-friendly/dist/index.js","../../node_modules/micromark-extension-cjk-friendly-gfm-strikethrough/dist/index.js","../../node_modules/remark-cjk-friendly-gfm-strikethrough/dist/index.js","../../node_modules/@streamdown/cjk/dist/index.js","../../node_modules/@shikijs/types/dist/index.mjs","../../node_modules/@shikijs/vscode-textmate/dist/index.js","../../node_modules/stringify-entities/lib/core.js","../../node_modules/stringify-entities/lib/util/to-hexadecimal.js","../../node_modules/stringify-entities/lib/util/to-decimal.js","../../node_modules/character-entities-legacy/index.js","../../node_modules/character-entities-html4/index.js","../../node_modules/stringify-entities/lib/constant/dangerous.js","../../node_modules/stringify-entities/lib/util/to-named.js","../../node_modules/stringify-entities/lib/util/format-smart.js","../../node_modules/stringify-entities/lib/index.js","../../node_modules/hast-util-to-html/lib/handle/comment.js","../../node_modules/hast-util-to-html/lib/handle/doctype.js","../../node_modules/hast-util-to-html/lib/omission/util/siblings.js","../../node_modules/hast-util-to-html/lib/omission/omission.js","../../node_modules/hast-util-to-html/lib/omission/closing.js","../../node_modules/hast-util-to-html/lib/omission/opening.js","../../node_modules/hast-util-to-html/lib/handle/element.js","../../node_modules/hast-util-to-html/lib/handle/text.js","../../node_modules/hast-util-to-html/lib/handle/raw.js","../../node_modules/hast-util-to-html/lib/handle/root.js","../../node_modules/hast-util-to-html/lib/handle/index.js","../../node_modules/hast-util-to-html/lib/index.js","../../node_modules/@shikijs/core/dist/index.mjs","../../node_modules/shiki/dist/langs.mjs","../../node_modules/shiki/dist/themes.mjs","../../node_modules/@shikijs/engine-oniguruma/dist/index.mjs","../../node_modules/shiki/dist/bundle-full.mjs","../../node_modules/@streamdown/code/dist/index.js","../../src/chat/web/ai-elements/message.tsx","../../src/chat/web/ai-elements/reasoning.tsx","../../src/chat/web/ai-elements/tool.tsx","../../src/chat/web/components/mcp-app-frame.tsx","../../src/shared/model-context.ts","../../src/chat/web/components/welcome-screen.tsx","../../src/chat/web/components/widget-error-boundary.tsx","../../src/chat/web/components/message-list.tsx","../../src/chat/web/components/suggestions.tsx","../../src/chat/web/hooks/use-call-tool.ts","../../src/chat/web/hooks/use-chat-engine.ts","../../src/chat/web/lib/visitor-context.ts","../../src/chat/web/hooks/use-config.ts","../../src/chat/web/hooks/use-suggestions.ts","../../src/chat/web/hooks/use-typing-placeholder.ts","../../src/chat/web/theme.ts","../../src/chat/web/components/eval-panel.tsx","../../src/chat/web/hooks/use-scenarios.ts","../../src/chat/web/layouts/chat-card.tsx","../../src/chat/web/layouts/chat-embed.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n\tforwardRef,\n\tuseCallback,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseRef,\n\tuseState,\n} from \"react\";\nimport type { ModelContextUpdate } from \"../../../shared/model-context\";\nimport type { ChatBarProps, ChatHandle } from \"../@types\";\nimport {\n\tConversation,\n\tConversationContent,\n\tConversationScrollButton,\n} from \"../ai-elements/conversation\";\nimport {\n\tPromptInput,\n\tPromptInputAddAttachments,\n\tPromptInputSubmit,\n\tPromptInputTextarea,\n} from \"../ai-elements/prompt-input\";\nimport { ChatQueue } from \"../components/chat-queue\";\nimport { ExportSessionButton } from \"../components/export-session\";\nimport { MessageList } from \"../components/message-list\";\nimport { Suggestions } from \"../components/suggestions\";\nimport { useCallTool } from \"../hooks/use-call-tool\";\nimport { useChatEngine } from \"../hooks/use-chat-engine\";\nimport { useConfig } from \"../hooks/use-config\";\nimport { useSuggestions } from \"../hooks/use-suggestions\";\nimport { useTypingPlaceholder } from \"../hooks/use-typing-placeholder\";\nimport { cn } from \"../lib/utils\";\nimport { isDarkTheme, mergeTheme, themeToCSSProperties } from \"../theme\";\n\nexport const ChatBar = forwardRef<ChatHandle, ChatBarProps>(\n\tfunction ChatBar(props, ref) {\n\t\tconst {\n\t\t\ttheme: userTheme,\n\t\t\ttitle = \"Assistant\",\n\t\t\twidth = 600,\n\t\t\texpandedWidth: userExpandedWidth,\n\t\t\texpandedHeight = 400,\n\t\t\tallowAttachments = false,\n\t\t\twelcomeMessage,\n\t\t\twelcome,\n\t\t\tplaceholder = \"Ask me anything...\",\n\t\t\ttriggerEvent = \"triggerDemoRequest\",\n\t\t\tapi,\n\t\t} = props;\n\n\t\tconst expandedWidth =\n\t\t\tuserExpandedWidth ??\n\t\t\tMath.round((typeof width === \"number\" ? width : 600) * 1.2);\n\n\t\tconst effectiveApi = api ?? \"/api/waniwani\";\n\t\tconst effectiveResourceEndpoint = `${effectiveApi}/resource`;\n\n\t\tconst resolvedTheme = mergeTheme(userTheme);\n\t\tconst cssVars = themeToCSSProperties(resolvedTheme);\n\t\tconst isDark = isDarkTheme(resolvedTheme);\n\n\t\tconst config = useConfig(api);\n\t\tconst engine = useChatEngine(props);\n\t\tconst handleCallTool = useCallTool({\n\t\t\t...props,\n\t\t\tsessionId: engine.sessionId,\n\t\t});\n\n\t\tconst suggestionsState = useSuggestions({\n\t\t\tmessages: engine.messages,\n\t\t\tstatus: engine.status,\n\t\t\tconfig: props.suggestions,\n\t\t});\n\n\t\tconst handleWidgetMessage = useCallback(\n\t\t\t(message: {\n\t\t\t\trole: string;\n\t\t\t\tcontent: Array<{ type: string; text?: string }>;\n\t\t\t\tmodelContext?: ModelContextUpdate;\n\t\t\t}) => {\n\t\t\t\tconst text = message.content\n\t\t\t\t\t.map((c) => c.text ?? \"\")\n\t\t\t\t\t.join(\"\")\n\t\t\t\t\t.trim();\n\t\t\t\tif (text) {\n\t\t\t\t\tengine.handleSubmit({\n\t\t\t\t\t\ttext,\n\t\t\t\t\t\tfiles: [],\n\t\t\t\t\t\tmodelContext: message.modelContext,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t\t[engine.handleSubmit],\n\t\t);\n\n\t\tconst handleSuggestionSelect = useCallback(\n\t\t\t(suggestion: string) => {\n\t\t\t\tsuggestionsState.clear();\n\t\t\t\tengine.handleSubmit({ text: suggestion, files: [] });\n\t\t\t},\n\t\t\t[suggestionsState.clear, engine.handleSubmit],\n\t\t);\n\n\t\tconst animatedPlaceholder = useTypingPlaceholder(placeholder, !engine.text);\n\n\t\tconst [isFocused, setIsFocused] = useState(false);\n\t\tconst [isHighlighted, setIsHighlighted] = useState(false);\n\t\tconst [fullscreenToolCallId, setFullscreenToolCallId] = useState<\n\t\t\tstring | null\n\t\t>(null);\n\t\tconst containerRef = useRef<HTMLDivElement>(null);\n\t\tconst highlightTimerRef = useRef<ReturnType<typeof setTimeout>>(undefined);\n\n\t\tconst focusInput = useCallback(() => {\n\t\t\tconst container = containerRef.current;\n\t\t\tif (!container) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcontainer.scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n\t\t\tconst textarea = container.querySelector(\"textarea\");\n\t\t\tif (textarea) {\n\t\t\t\tsetTimeout(() => textarea.focus(), 300);\n\t\t\t}\n\t\t\tsetIsFocused(true);\n\t\t\tsetIsHighlighted(true);\n\t\t\tclearTimeout(highlightTimerRef.current);\n\t\t\thighlightTimerRef.current = setTimeout(\n\t\t\t\t() => setIsHighlighted(false),\n\t\t\t\t2000,\n\t\t\t);\n\t\t}, []);\n\n\t\tuseImperativeHandle(\n\t\t\tref,\n\t\t\t() => ({\n\t\t\t\tsendMessage: (text: string) => {\n\t\t\t\t\tengine.handleSubmit({ text, files: [] });\n\t\t\t\t\tfocusInput();\n\t\t\t\t},\n\t\t\t\tsendMessageAndWait: (text: string) => engine.sendMessageAndWait(text),\n\t\t\t\treset: engine.reset,\n\t\t\t\tfocus: focusInput,\n\t\t\t\tget messages() {\n\t\t\t\t\treturn engine.messages;\n\t\t\t\t},\n\t\t\t}),\n\t\t\t[\n\t\t\t\tengine.handleSubmit,\n\t\t\t\tengine.sendMessageAndWait,\n\t\t\t\tengine.reset,\n\t\t\t\tengine.messages,\n\t\t\t\tfocusInput,\n\t\t\t],\n\t\t);\n\n\t\t// Listen for custom trigger event (e.g. \"triggerDemoRequest\")\n\t\tuseEffect(() => {\n\t\t\tif (!triggerEvent) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst handler = (e: Event) => {\n\t\t\t\tconst detail = (e as CustomEvent).detail;\n\t\t\t\tconst message =\n\t\t\t\t\ttypeof detail?.message === \"string\" ? detail.message : undefined;\n\t\t\t\tif (message) {\n\t\t\t\t\tengine.handleSubmit({ text: message, files: [] });\n\t\t\t\t}\n\t\t\t\tfocusInput();\n\t\t\t};\n\t\t\twindow.addEventListener(triggerEvent, handler);\n\t\t\treturn () => window.removeEventListener(triggerEvent, handler);\n\t\t}, [triggerEvent, engine.handleSubmit, focusInput]);\n\n\t\tconst isExpanded = isFocused || fullscreenToolCallId !== null;\n\n\t\t// Close on outside click\n\t\tuseEffect(() => {\n\t\t\tif (!isFocused) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst handleClickOutside = (e: MouseEvent) => {\n\t\t\t\tif (\n\t\t\t\t\tcontainerRef.current &&\n\t\t\t\t\t!containerRef.current.contains(e.target as Node)\n\t\t\t\t) {\n\t\t\t\t\tsetIsFocused(false);\n\t\t\t\t}\n\t\t\t};\n\t\t\tdocument.addEventListener(\"mousedown\", handleClickOutside);\n\t\t\treturn () =>\n\t\t\t\tdocument.removeEventListener(\"mousedown\", handleClickOutside);\n\t\t}, [isFocused]);\n\n\t\tconst handleFocus = useCallback(() => {\n\t\t\tsetIsFocused(true);\n\t\t}, []);\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={containerRef}\n\t\t\t\tstyle={{\n\t\t\t\t\t...cssVars,\n\t\t\t\t\twidth: isExpanded ? expandedWidth : width,\n\t\t\t\t\ttransition: \"width 0.4s cubic-bezier(0.16, 1, 0.3, 1)\",\n\t\t\t\t}}\n\t\t\t\tdata-waniwani-chat=\"\"\n\t\t\t\tdata-waniwani-layout=\"bar\"\n\t\t\t\t{...(isDark ? { \"data-waniwani-dark\": \"\" } : {})}\n\t\t\t\tclassName=\"ww:flex ww:flex-col ww:font-[family-name:var(--ww-font)] ww:text-foreground\"\n\t\t\t>\n\t\t\t\t{/* Card section — grows from nothing on focus */}\n\t\t\t\t<div\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\toverflow: \"hidden\",\n\t\t\t\t\t\tbackgroundColor: resolvedTheme.backgroundColor,\n\t\t\t\t\t\tborderRadius: \"var(--ww-radius) var(--ww-radius) 0 0\",\n\t\t\t\t\t\tmaxHeight: isExpanded ? expandedHeight + 200 : 0,\n\t\t\t\t\t\topacity: isExpanded ? 1 : 0,\n\t\t\t\t\t\ttransform: isExpanded ? \"scaleX(1)\" : \"scaleX(0.88)\",\n\t\t\t\t\t\ttransformOrigin: \"center bottom\",\n\t\t\t\t\t\ttransition:\n\t\t\t\t\t\t\t\"max-height 0.4s cubic-bezier(0.16, 1, 0.3, 1), opacity 0.25s ease-out, transform 0.4s cubic-bezier(0.16, 1, 0.3, 1)\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{/* Header */}\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"ww:shrink-0 ww:flex ww:items-center ww:px-6 ww:py-3\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tbackgroundColor: resolvedTheme.headerBackgroundColor,\n\t\t\t\t\t\t\tcolor: resolvedTheme.headerTextColor,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<div className=\"ww:text-sm ww:font-semibold ww:truncate\">\n\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<ExportSessionButton\n\t\t\t\t\t\t\tmessages={engine.messages}\n\t\t\t\t\t\t\tevalEnabled={config.eval}\n\t\t\t\t\t\t\tapi={effectiveApi}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t{/* Messages */}\n\t\t\t\t\t<Conversation\n\t\t\t\t\t\tclassName=\"ww:flex-1\"\n\t\t\t\t\t\tstyle={{ height: expandedHeight }}\n\t\t\t\t\t>\n\t\t\t\t\t\t<ConversationContent\n\t\t\t\t\t\t\tscrollClassName={\n\t\t\t\t\t\t\t\tfullscreenToolCallId\n\t\t\t\t\t\t\t\t\t? \"ww:!relative ww:!overflow-hidden\"\n\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<MessageList\n\t\t\t\t\t\t\t\tmessages={engine.messages}\n\t\t\t\t\t\t\t\tstatus={engine.status}\n\t\t\t\t\t\t\t\twelcomeMessage={welcomeMessage}\n\t\t\t\t\t\t\t\twelcome={welcome}\n\t\t\t\t\t\t\t\tonSuggestionSelect={handleSuggestionSelect}\n\t\t\t\t\t\t\t\tresourceEndpoint={effectiveResourceEndpoint}\n\t\t\t\t\t\t\t\tchatSessionId={engine.sessionId}\n\t\t\t\t\t\t\t\tisDark={isDark}\n\t\t\t\t\t\t\t\tonFollowUp={handleWidgetMessage}\n\t\t\t\t\t\t\t\tonCallTool={handleCallTool}\n\t\t\t\t\t\t\t\tfullscreenToolCallId={fullscreenToolCallId}\n\t\t\t\t\t\t\t\tonWidgetDisplayModeChange={(mode, widget) => {\n\t\t\t\t\t\t\t\t\tsetFullscreenToolCallId(\n\t\t\t\t\t\t\t\t\t\tmode === \"fullscreen\" ? widget.toolCallId : null,\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</ConversationContent>\n\t\t\t\t\t\t<ConversationScrollButton />\n\t\t\t\t\t</Conversation>\n\n\t\t\t\t\t{/* Suggestions */}\n\t\t\t\t\t<div style={fullscreenToolCallId ? { display: \"none\" } : undefined}>\n\t\t\t\t\t\t<Suggestions\n\t\t\t\t\t\t\tsuggestions={suggestionsState.suggestions}\n\t\t\t\t\t\t\tisLoading={suggestionsState.isLoading}\n\t\t\t\t\t\t\tonSelect={handleSuggestionSelect}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t{/* Queue */}\n\t\t\t\t\t<div style={fullscreenToolCallId ? { display: \"none\" } : undefined}>\n\t\t\t\t\t\t<ChatQueue\n\t\t\t\t\t\t\tqueuedMessages={engine.queuedMessages}\n\t\t\t\t\t\t\tonRemove={engine.removeQueuedMessage}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t{/* Input section — always visible, joins card when expanded */}\n\t\t\t\t<div\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tbackgroundColor: isExpanded\n\t\t\t\t\t\t\t? resolvedTheme.backgroundColor\n\t\t\t\t\t\t\t: \"transparent\",\n\t\t\t\t\t\tborderRadius: isExpanded\n\t\t\t\t\t\t\t? \"0 0 var(--ww-radius) var(--ww-radius)\"\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\tboxShadow: isExpanded ? \"0 8px 24px rgba(0,0,0,0.1)\" : \"none\",\n\t\t\t\t\t\ttransition:\n\t\t\t\t\t\t\t\"background-color 0.2s ease, border-radius 0.3s ease, box-shadow 0.35s ease, padding 0.3s ease\",\n\t\t\t\t\t\tpadding: isExpanded ? \"8px 16px 16px\" : \"0\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<PromptInput\n\t\t\t\t\t\tonSubmit={engine.handleSubmit}\n\t\t\t\t\t\tglobalDrop={allowAttachments}\n\t\t\t\t\t\tmultiple={allowAttachments}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"ww:rounded-2xl ww:border-border ww:bg-input ww:transition-all ww:duration-300\",\n\t\t\t\t\t\t\t!isExpanded && \"ww:shadow-sm\",\n\t\t\t\t\t\t\tisHighlighted &&\n\t\t\t\t\t\t\t\t\"ww:ring-2 ww:ring-blue-400/70 ww:ring-offset-2 ww:ring-offset-background\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<div className=\"ww:flex ww:items-center ww:gap-1 ww:pl-4 ww:pr-3 ww:py-2.5\">\n\t\t\t\t\t\t\t{allowAttachments && <PromptInputAddAttachments />}\n\t\t\t\t\t\t\t<PromptInputTextarea\n\t\t\t\t\t\t\t\tonChange={engine.handleTextChange}\n\t\t\t\t\t\t\t\tvalue={engine.text}\n\t\t\t\t\t\t\t\tplaceholder={animatedPlaceholder}\n\t\t\t\t\t\t\t\tonFocus={handleFocus}\n\t\t\t\t\t\t\t\tclassName=\"ww:min-h-0 ww:py-1 ww:px-0\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<PromptInputSubmit\n\t\t\t\t\t\t\t\tstatus={engine.status}\n\t\t\t\t\t\t\t\tdisabled={engine.queueFull}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</PromptInput>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t},\n);\n","/**\n * Merges classes into a single string\n *\n * @param {array} classes\n * @returns {string} A string of classes\n */\nexport const mergeClasses = <ClassType = string | undefined | null>(...classes: ClassType[]) =>\n classes\n .filter((className, index, array) => {\n return (\n Boolean(className) &&\n (className as string).trim() !== '' &&\n array.indexOf(className) === index\n );\n })\n .join(' ')\n .trim();\n","/**\n * Converts string to kebab case\n *\n * @param {string} string\n * @returns {string} A kebabized string\n */\nexport const toKebabCase = (string: string) =>\n string.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n","/**\n * Converts string to camel case\n *\n * @param {string} string\n * @returns {string} A camelized string\n */\nexport const toCamelCase = <T extends string>(string: T) =>\n string.replace(/^([A-Z])|[\\s-_]+(\\w)/g, (match, p1, p2) =>\n p2 ? p2.toUpperCase() : p1.toLowerCase(),\n );\n","import { CamelToPascal } from '../utility-types';\nimport { toCamelCase } from './toCamelCase';\n\n/**\n * Converts string to pascal case\n *\n * @param {string} string\n * @returns {string} A pascalized string\n */\nexport const toPascalCase = <T extends string>(string: T): CamelToPascal<T> => {\n const camelCase = toCamelCase(string);\n\n return (camelCase.charAt(0).toUpperCase() + camelCase.slice(1)) as CamelToPascal<T>;\n};\n","export default {\n xmlns: 'http://www.w3.org/2000/svg',\n width: 24,\n height: 24,\n viewBox: '0 0 24 24',\n fill: 'none',\n stroke: 'currentColor',\n strokeWidth: 2,\n strokeLinecap: 'round',\n strokeLinejoin: 'round',\n};\n","/**\n * Check if a component has an accessibility prop\n *\n * @param {object} props\n * @returns {boolean} Whether the component has an accessibility prop\n */\nexport const hasA11yProp = (props: Record<string, any>) => {\n for (const prop in props) {\n if (prop.startsWith('aria-') || prop === 'role' || prop === 'title') {\n return true;\n }\n }\n\n return false;\n};\n","import { createElement, forwardRef } from 'react';\nimport defaultAttributes from './defaultAttributes';\nimport { IconNode, LucideProps } from './types';\nimport { mergeClasses, hasA11yProp } from '@lucide/shared';\n\ninterface IconComponentProps extends LucideProps {\n iconNode: IconNode;\n}\n\n/**\n * Lucide icon component\n *\n * @component Icon\n * @param {object} props\n * @param {string} props.color - The color of the icon\n * @param {number} props.size - The size of the icon\n * @param {number} props.strokeWidth - The stroke width of the icon\n * @param {boolean} props.absoluteStrokeWidth - Whether to use absolute stroke width\n * @param {string} props.className - The class name of the icon\n * @param {IconNode} props.children - The children of the icon\n * @param {IconNode} props.iconNode - The icon node of the icon\n *\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst Icon = forwardRef<SVGSVGElement, IconComponentProps>(\n (\n {\n color = 'currentColor',\n size = 24,\n strokeWidth = 2,\n absoluteStrokeWidth,\n className = '',\n children,\n iconNode,\n ...rest\n },\n ref,\n ) =>\n createElement(\n 'svg',\n {\n ref,\n ...defaultAttributes,\n width: size,\n height: size,\n stroke: color,\n strokeWidth: absoluteStrokeWidth ? (Number(strokeWidth) * 24) / Number(size) : strokeWidth,\n className: mergeClasses('lucide', className),\n ...(!children && !hasA11yProp(rest) && { 'aria-hidden': 'true' }),\n ...rest,\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...(Array.isArray(children) ? children : [children]),\n ],\n ),\n);\n\nexport default Icon;\n","import { createElement, forwardRef } from 'react';\nimport { mergeClasses, toKebabCase, toPascalCase } from '@lucide/shared';\nimport { IconNode, LucideProps } from './types';\nimport Icon from './Icon';\n\n/**\n * Create a Lucide icon component\n * @param {string} iconName\n * @param {array} iconNode\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst createLucideIcon = (iconName: string, iconNode: IconNode) => {\n const Component = forwardRef<SVGSVGElement, LucideProps>(({ className, ...props }, ref) =>\n createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className,\n ),\n ...props,\n }),\n );\n\n Component.displayName = toPascalCase(iconName);\n\n return Component;\n};\n\nexport default createLucideIcon;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M12 5v14', key: 's699le' }],\n ['path', { d: 'm19 12-7 7-7-7', key: '1idqje' }],\n];\n\n/**\n * @component @name ArrowDown\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTIgNXYxNCIgLz4KICA8cGF0aCBkPSJtMTkgMTItNyA3LTctNyIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/arrow-down\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ArrowDown = createLucideIcon('arrow-down', __iconNode);\n\nexport default ArrowDown;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'm5 12 7-7 7 7', key: 'hav0vg' }],\n ['path', { d: 'M12 19V5', key: 'x0mq9r' }],\n];\n\n/**\n * @component @name ArrowUp\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtNSAxMiA3LTcgNyA3IiAvPgogIDxwYXRoIGQ9Ik0xMiAxOVY1IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/arrow-up\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ArrowUp = createLucideIcon('arrow-up', __iconNode);\n\nexport default ArrowUp;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n { d: 'M8 3H7a2 2 0 0 0-2 2v5a2 2 0 0 1-2 2 2 2 0 0 1 2 2v5c0 1.1.9 2 2 2h1', key: 'ezmyqa' },\n ],\n [\n 'path',\n {\n d: 'M16 21h1a2 2 0 0 0 2-2v-5c0-1.1.9-2 2-2a2 2 0 0 1-2-2V5a2 2 0 0 0-2-2h-1',\n key: 'e1hn23',\n },\n ],\n];\n\n/**\n * @component @name Braces\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNOCAzSDdhMiAyIDAgMCAwLTIgMnY1YTIgMiAwIDAgMS0yIDIgMiAyIDAgMCAxIDIgMnY1YzAgMS4xLjkgMiAyIDJoMSIgLz4KICA8cGF0aCBkPSJNMTYgMjFoMWEyIDIgMCAwIDAgMi0ydi01YzAtMS4xLjktMiAyLTJhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMC0yLTJoLTEiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/braces\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Braces = createLucideIcon('braces', __iconNode);\n\nexport default Braces;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'M20 6 9 17l-5-5', key: '1gmf2c' }]];\n\n/**\n * @component @name Check\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMjAgNiA5IDE3bC01LTUiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/check\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Check = createLucideIcon('check', __iconNode);\n\nexport default Check;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'm6 9 6 6 6-6', key: 'qrunsl' }]];\n\n/**\n * @component @name ChevronDown\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtNiA5IDYgNiA2LTYiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/chevron-down\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronDown = createLucideIcon('chevron-down', __iconNode);\n\nexport default ChevronDown;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'm9 18 6-6-6-6', key: 'mthhwq' }]];\n\n/**\n * @component @name ChevronRight\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtOSAxOCA2LTYtNi02IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/chevron-right\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronRight = createLucideIcon('chevron-right', __iconNode);\n\nexport default ChevronRight;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['rect', { width: '8', height: '4', x: '8', y: '2', rx: '1', ry: '1', key: 'tgr4d6' }],\n ['path', { d: 'M8 4H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-2', key: '4jdomd' }],\n ['path', { d: 'M16 4h2a2 2 0 0 1 2 2v4', key: '3hqy98' }],\n ['path', { d: 'M21 14H11', key: '1bme5i' }],\n ['path', { d: 'm15 10-4 4 4 4', key: '5dvupr' }],\n];\n\n/**\n * @component @name ClipboardCopy\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cmVjdCB3aWR0aD0iOCIgaGVpZ2h0PSI0IiB4PSI4IiB5PSIyIiByeD0iMSIgcnk9IjEiIC8+CiAgPHBhdGggZD0iTTggNEg2YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmgxMmEyIDIgMCAwIDAgMi0ydi0yIiAvPgogIDxwYXRoIGQ9Ik0xNiA0aDJhMiAyIDAgMCAxIDIgMnY0IiAvPgogIDxwYXRoIGQ9Ik0yMSAxNEgxMSIgLz4KICA8cGF0aCBkPSJtMTUgMTAtNCA0IDQgNCIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/clipboard-copy\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ClipboardCopy = createLucideIcon('clipboard-copy', __iconNode);\n\nexport default ClipboardCopy;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z',\n key: '1oefj6',\n },\n ],\n ['path', { d: 'M14 2v5a1 1 0 0 0 1 1h5', key: 'wfsgrz' }],\n];\n\n/**\n * @component @name File\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIgLz4KICA8cGF0aCBkPSJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/file\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst File = createLucideIcon('file', __iconNode);\n\nexport default File;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M12 2v4', key: '3427ic' }],\n ['path', { d: 'm16.2 7.8 2.9-2.9', key: 'r700ao' }],\n ['path', { d: 'M18 12h4', key: 'wj9ykh' }],\n ['path', { d: 'm16.2 16.2 2.9 2.9', key: '1bxg5t' }],\n ['path', { d: 'M12 18v4', key: 'jadmvz' }],\n ['path', { d: 'm4.9 19.1 2.9-2.9', key: 'bwix9q' }],\n ['path', { d: 'M2 12h4', key: 'j09sii' }],\n ['path', { d: 'm4.9 4.9 2.9 2.9', key: 'giyufr' }],\n];\n\n/**\n * @component @name Loader\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTIgMnY0IiAvPgogIDxwYXRoIGQ9Im0xNi4yIDcuOCAyLjktMi45IiAvPgogIDxwYXRoIGQ9Ik0xOCAxMmg0IiAvPgogIDxwYXRoIGQ9Im0xNi4yIDE2LjIgMi45IDIuOSIgLz4KICA8cGF0aCBkPSJNMTIgMTh2NCIgLz4KICA8cGF0aCBkPSJtNC45IDE5LjEgMi45LTIuOSIgLz4KICA8cGF0aCBkPSJNMiAxMmg0IiAvPgogIDxwYXRoIGQ9Im00LjkgNC45IDIuOSAyLjkiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/loader\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Loader = createLucideIcon('loader', __iconNode);\n\nexport default Loader;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'm16 6-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551',\n key: '1miecu',\n },\n ],\n];\n\n/**\n * @component @name Paperclip\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtMTYgNi04LjQxNCA4LjU4NmEyIDIgMCAwIDAgMi44MjkgMi44MjlsOC40MTQtOC41ODZhNCA0IDAgMSAwLTUuNjU3LTUuNjU3bC04LjM3OSA4LjU1MWE2IDYgMCAxIDAgOC40ODUgOC40ODVsOC4zNzktOC41NTEiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/paperclip\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Paperclip = createLucideIcon('paperclip', __iconNode);\n\nexport default Paperclip;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['rect', { width: '18', height: '18', x: '3', y: '3', rx: '2', key: 'afitv7' }],\n];\n\n/**\n * @component @name Square\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cmVjdCB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHg9IjMiIHk9IjMiIHJ4PSIyIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/square\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Square = createLucideIcon('square', __iconNode);\n\nexport default Square;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M18 6 6 18', key: '1bl5f8' }],\n ['path', { d: 'm6 6 12 12', key: 'd8bk6v' }],\n];\n\n/**\n * @component @name X\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTggNiA2IDE4IiAvPgogIDxwYXRoIGQ9Im02IDYgMTIgMTIiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/x\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst X = createLucideIcon('x', __iconNode);\n\nexport default X;\n","\"use client\";\n\nimport { ArrowDownIcon } from \"lucide-react\";\nimport type { ComponentProps } from \"react\";\nimport { useCallback } from \"react\";\nimport { StickToBottom, useStickToBottomContext } from \"use-stick-to-bottom\";\nimport { cn } from \"../lib/utils\";\nimport { Button } from \"../ui/button\";\n\nexport type ConversationProps = ComponentProps<typeof StickToBottom>;\n\nexport const Conversation = ({ className, ...props }: ConversationProps) => (\n\t<StickToBottom\n\t\tclassName={cn(\"ww:relative ww:flex-1 ww:overflow-y-hidden\", className)}\n\t\tinitial=\"smooth\"\n\t\tresize=\"smooth\"\n\t\trole=\"log\"\n\t\t{...props}\n\t/>\n);\n\nexport type ConversationContentProps = ComponentProps<\n\ttypeof StickToBottom.Content\n>;\n\nexport const ConversationContent = ({\n\tclassName,\n\t...props\n}: ConversationContentProps) => (\n\t<StickToBottom.Content\n\t\tclassName={cn(\n\t\t\t\"ww:flex ww:flex-col ww:gap-6 ww:px-4 ww:py-6 ww:mx-auto ww:w-full ww:max-w-3xl\",\n\t\t\tclassName,\n\t\t)}\n\t\t{...props}\n\t/>\n);\n\nexport type ConversationScrollButtonProps = ComponentProps<typeof Button>;\n\nexport const ConversationScrollButton = ({\n\tclassName,\n\t...props\n}: ConversationScrollButtonProps) => {\n\tconst { isAtBottom, scrollToBottom } = useStickToBottomContext();\n\n\tconst handleScrollToBottom = useCallback(() => {\n\t\tscrollToBottom();\n\t}, [scrollToBottom]);\n\n\treturn (\n\t\t!isAtBottom && (\n\t\t\t<Button\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"ww:absolute ww:bottom-4 ww:left-[50%] ww:translate-x-[-50%] ww:rounded-full\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\tonClick={handleScrollToBottom}\n\t\t\t\tsize=\"icon\"\n\t\t\t\tvariant=\"outline\"\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t<ArrowDownIcon className=\"ww:size-4\" />\n\t\t\t</Button>\n\t\t)\n\t);\n};\n","/*!---------------------------------------------------------------------------------------------\n * Copyright (c) StackBlitz. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { useCallback, useMemo, useRef, useState, } from \"react\";\nconst DEFAULT_SPRING_ANIMATION = {\n /**\n * A value from 0 to 1, on how much to damp the animation.\n * 0 means no damping, 1 means full damping.\n *\n * @default 0.7\n */\n damping: 0.7,\n /**\n * The stiffness of how fast/slow the animation gets up to speed.\n *\n * @default 0.05\n */\n stiffness: 0.05,\n /**\n * The inertial mass associated with the animation.\n * Higher numbers make the animation slower.\n *\n * @default 1.25\n */\n mass: 1.25,\n};\nconst STICK_TO_BOTTOM_OFFSET_PX = 70;\nconst SIXTY_FPS_INTERVAL_MS = 1000 / 60;\nconst RETAIN_ANIMATION_DURATION_MS = 350;\nlet mouseDown = false;\nglobalThis.document?.addEventListener(\"mousedown\", () => {\n mouseDown = true;\n});\nglobalThis.document?.addEventListener(\"mouseup\", () => {\n mouseDown = false;\n});\nglobalThis.document?.addEventListener(\"click\", () => {\n mouseDown = false;\n});\nexport const useStickToBottom = (options = {}) => {\n const [escapedFromLock, updateEscapedFromLock] = useState(false);\n const [isAtBottom, updateIsAtBottom] = useState(options.initial !== false);\n const [isNearBottom, setIsNearBottom] = useState(false);\n const optionsRef = useRef(null);\n optionsRef.current = options;\n const isSelecting = useCallback(() => {\n if (!mouseDown) {\n return false;\n }\n const selection = window.getSelection();\n if (!selection || !selection.rangeCount) {\n return false;\n }\n const range = selection.getRangeAt(0);\n return (range.commonAncestorContainer.contains(scrollRef.current) ||\n scrollRef.current?.contains(range.commonAncestorContainer));\n }, []);\n const setIsAtBottom = useCallback((isAtBottom) => {\n state.isAtBottom = isAtBottom;\n updateIsAtBottom(isAtBottom);\n }, []);\n const setEscapedFromLock = useCallback((escapedFromLock) => {\n state.escapedFromLock = escapedFromLock;\n updateEscapedFromLock(escapedFromLock);\n }, []);\n // biome-ignore lint/correctness/useExhaustiveDependencies: not needed\n const state = useMemo(() => {\n let lastCalculation;\n return {\n escapedFromLock,\n isAtBottom,\n resizeDifference: 0,\n accumulated: 0,\n velocity: 0,\n listeners: new Set(),\n get scrollTop() {\n return scrollRef.current?.scrollTop ?? 0;\n },\n set scrollTop(scrollTop) {\n if (scrollRef.current) {\n scrollRef.current.scrollTop = scrollTop;\n state.ignoreScrollToTop = scrollRef.current.scrollTop;\n }\n },\n get targetScrollTop() {\n if (!scrollRef.current || !contentRef.current) {\n return 0;\n }\n return (scrollRef.current.scrollHeight - 1 - scrollRef.current.clientHeight);\n },\n get calculatedTargetScrollTop() {\n if (!scrollRef.current || !contentRef.current) {\n return 0;\n }\n const { targetScrollTop } = this;\n if (!options.targetScrollTop) {\n return targetScrollTop;\n }\n if (lastCalculation?.targetScrollTop === targetScrollTop) {\n return lastCalculation.calculatedScrollTop;\n }\n const calculatedScrollTop = Math.max(Math.min(options.targetScrollTop(targetScrollTop, {\n scrollElement: scrollRef.current,\n contentElement: contentRef.current,\n }), targetScrollTop), 0);\n lastCalculation = { targetScrollTop, calculatedScrollTop };\n requestAnimationFrame(() => {\n lastCalculation = undefined;\n });\n return calculatedScrollTop;\n },\n get scrollDifference() {\n return this.calculatedTargetScrollTop - this.scrollTop;\n },\n get isNearBottom() {\n return this.scrollDifference <= STICK_TO_BOTTOM_OFFSET_PX;\n },\n };\n }, []);\n const scrollToBottom = useCallback((scrollOptions = {}) => {\n if (typeof scrollOptions === \"string\") {\n scrollOptions = { animation: scrollOptions };\n }\n if (!scrollOptions.preserveScrollPosition) {\n setIsAtBottom(true);\n }\n const waitElapsed = Date.now() + (Number(scrollOptions.wait) || 0);\n const behavior = mergeAnimations(optionsRef.current, scrollOptions.animation);\n const { ignoreEscapes = false } = scrollOptions;\n let durationElapsed;\n let startTarget = state.calculatedTargetScrollTop;\n if (scrollOptions.duration instanceof Promise) {\n scrollOptions.duration.finally(() => {\n durationElapsed = Date.now();\n });\n }\n else {\n durationElapsed = waitElapsed + (scrollOptions.duration ?? 0);\n }\n const next = async () => {\n const promise = new Promise(requestAnimationFrame).then(() => {\n if (!state.isAtBottom) {\n state.animation = undefined;\n return false;\n }\n const { scrollTop } = state;\n const tick = performance.now();\n const tickDelta = (tick - (state.lastTick ?? tick)) / SIXTY_FPS_INTERVAL_MS;\n state.animation || (state.animation = { behavior, promise, ignoreEscapes });\n if (state.animation.behavior === behavior) {\n state.lastTick = tick;\n }\n if (isSelecting()) {\n return next();\n }\n if (waitElapsed > Date.now()) {\n return next();\n }\n if (scrollTop < Math.min(startTarget, state.calculatedTargetScrollTop)) {\n if (state.animation?.behavior === behavior) {\n if (behavior === \"instant\") {\n state.scrollTop = state.calculatedTargetScrollTop;\n return next();\n }\n state.velocity =\n (behavior.damping * state.velocity +\n behavior.stiffness * state.scrollDifference) /\n behavior.mass;\n state.accumulated += state.velocity * tickDelta;\n state.scrollTop += state.accumulated;\n if (state.scrollTop !== scrollTop) {\n state.accumulated = 0;\n }\n }\n return next();\n }\n if (durationElapsed > Date.now()) {\n startTarget = state.calculatedTargetScrollTop;\n return next();\n }\n state.animation = undefined;\n /**\n * If we're still below the target, then queue\n * up another scroll to the bottom with the last\n * requested animatino.\n */\n if (state.scrollTop < state.calculatedTargetScrollTop) {\n return scrollToBottom({\n animation: mergeAnimations(optionsRef.current, optionsRef.current.resize),\n ignoreEscapes,\n duration: Math.max(0, durationElapsed - Date.now()) || undefined,\n });\n }\n return state.isAtBottom;\n });\n return promise.then((isAtBottom) => {\n requestAnimationFrame(() => {\n if (!state.animation) {\n state.lastTick = undefined;\n state.velocity = 0;\n }\n });\n return isAtBottom;\n });\n };\n if (scrollOptions.wait !== true) {\n state.animation = undefined;\n }\n if (state.animation?.behavior === behavior) {\n return state.animation.promise;\n }\n return next();\n }, [setIsAtBottom, isSelecting, state]);\n const stopScroll = useCallback(() => {\n setEscapedFromLock(true);\n setIsAtBottom(false);\n }, [setEscapedFromLock, setIsAtBottom]);\n const handleScroll = useCallback(({ target }) => {\n if (target !== scrollRef.current) {\n return;\n }\n const { scrollTop, ignoreScrollToTop } = state;\n let { lastScrollTop = scrollTop } = state;\n state.lastScrollTop = scrollTop;\n state.ignoreScrollToTop = undefined;\n if (ignoreScrollToTop && ignoreScrollToTop > scrollTop) {\n /**\n * When the user scrolls up while the animation plays, the `scrollTop` may\n * not come in separate events; if this happens, to make sure `isScrollingUp`\n * is correct, set the lastScrollTop to the ignored event.\n */\n lastScrollTop = ignoreScrollToTop;\n }\n setIsNearBottom(state.isNearBottom);\n /**\n * Scroll events may come before a ResizeObserver event,\n * so in order to ignore resize events correctly we use a\n * timeout.\n *\n * @see https://github.com/WICG/resize-observer/issues/25#issuecomment-248757228\n */\n setTimeout(() => {\n /**\n * When theres a resize difference ignore the resize event.\n */\n if (state.resizeDifference || scrollTop === ignoreScrollToTop) {\n return;\n }\n if (isSelecting()) {\n setEscapedFromLock(true);\n setIsAtBottom(false);\n return;\n }\n const isScrollingDown = scrollTop > lastScrollTop;\n const isScrollingUp = scrollTop < lastScrollTop;\n if (state.animation?.ignoreEscapes) {\n state.scrollTop = lastScrollTop;\n return;\n }\n if (isScrollingUp) {\n setEscapedFromLock(true);\n setIsAtBottom(false);\n }\n if (isScrollingDown) {\n setEscapedFromLock(false);\n }\n if (!state.escapedFromLock && state.isNearBottom) {\n setIsAtBottom(true);\n }\n }, 1);\n }, [setEscapedFromLock, setIsAtBottom, isSelecting, state]);\n const handleWheel = useCallback(({ target, deltaY }) => {\n let element = target;\n while (![\"scroll\", \"auto\"].includes(getComputedStyle(element).overflow)) {\n if (!element.parentElement) {\n return;\n }\n element = element.parentElement;\n }\n /**\n * The browser may cancel the scrolling from the mouse wheel\n * if we update it from the animation in meantime.\n * To prevent this, always escape when the wheel is scrolled up.\n */\n if (element === scrollRef.current &&\n deltaY < 0 &&\n scrollRef.current.scrollHeight > scrollRef.current.clientHeight &&\n !state.animation?.ignoreEscapes) {\n setEscapedFromLock(true);\n setIsAtBottom(false);\n }\n }, [setEscapedFromLock, setIsAtBottom, state]);\n const scrollRef = useRefCallback((scroll) => {\n scrollRef.current?.removeEventListener(\"scroll\", handleScroll);\n scrollRef.current?.removeEventListener(\"wheel\", handleWheel);\n scroll?.addEventListener(\"scroll\", handleScroll, { passive: true });\n scroll?.addEventListener(\"wheel\", handleWheel, { passive: true });\n }, []);\n const contentRef = useRefCallback((content) => {\n state.resizeObserver?.disconnect();\n if (!content) {\n return;\n }\n let previousHeight;\n state.resizeObserver = new ResizeObserver(([entry]) => {\n const { height } = entry.contentRect;\n const difference = height - (previousHeight ?? height);\n state.resizeDifference = difference;\n /**\n * Sometimes the browser can overscroll past the target,\n * so check for this and adjust appropriately.\n */\n if (state.scrollTop > state.targetScrollTop) {\n state.scrollTop = state.targetScrollTop;\n }\n setIsNearBottom(state.isNearBottom);\n if (difference >= 0) {\n /**\n * If it's a positive resize, scroll to the bottom when\n * we're already at the bottom.\n */\n const animation = mergeAnimations(optionsRef.current, previousHeight\n ? optionsRef.current.resize\n : optionsRef.current.initial);\n scrollToBottom({\n animation,\n wait: true,\n preserveScrollPosition: true,\n duration: animation === \"instant\" ? undefined : RETAIN_ANIMATION_DURATION_MS,\n });\n }\n else {\n /**\n * Else if it's a negative resize, check if we're near the bottom\n * if we are want to un-escape from the lock, because the resize\n * could have caused the container to be at the bottom.\n */\n if (state.isNearBottom) {\n setEscapedFromLock(false);\n setIsAtBottom(true);\n }\n }\n previousHeight = height;\n /**\n * Reset the resize difference after the scroll event\n * has fired. Requires a rAF to wait for the scroll event,\n * and a setTimeout to wait for the other timeout we have in\n * resizeObserver in case the scroll event happens after the\n * resize event.\n */\n requestAnimationFrame(() => {\n setTimeout(() => {\n if (state.resizeDifference === difference) {\n state.resizeDifference = 0;\n }\n }, 1);\n });\n });\n state.resizeObserver?.observe(content);\n }, []);\n return {\n contentRef,\n scrollRef,\n scrollToBottom,\n stopScroll,\n isAtBottom: isAtBottom || isNearBottom,\n isNearBottom,\n escapedFromLock,\n state,\n };\n};\nfunction useRefCallback(callback, deps) {\n // biome-ignore lint/correctness/useExhaustiveDependencies: not needed\n const result = useCallback((ref) => {\n result.current = ref;\n return callback(ref);\n }, deps);\n return result;\n}\nconst animationCache = new Map();\nfunction mergeAnimations(...animations) {\n const result = { ...DEFAULT_SPRING_ANIMATION };\n let instant = false;\n for (const animation of animations) {\n if (animation === \"instant\") {\n instant = true;\n continue;\n }\n if (typeof animation !== \"object\") {\n continue;\n }\n instant = false;\n result.damping = animation.damping ?? result.damping;\n result.stiffness = animation.stiffness ?? result.stiffness;\n result.mass = animation.mass ?? result.mass;\n }\n const key = JSON.stringify(result);\n if (!animationCache.has(key)) {\n animationCache.set(key, Object.freeze(result));\n }\n return instant ? \"instant\" : animationCache.get(key);\n}\n","/*!---------------------------------------------------------------------------------------------\n * Copyright (c) StackBlitz. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as React from \"react\";\nimport { createContext, useContext, useEffect, useImperativeHandle, useLayoutEffect, useMemo, useRef, } from \"react\";\nimport { useStickToBottom, } from \"./useStickToBottom.js\";\nconst StickToBottomContext = createContext(null);\nconst useIsomorphicLayoutEffect = typeof window !== \"undefined\" ? useLayoutEffect : useEffect;\nexport function StickToBottom({ instance, children, resize, initial, mass, damping, stiffness, targetScrollTop: currentTargetScrollTop, contextRef, ...props }) {\n const customTargetScrollTop = useRef(null);\n const targetScrollTop = React.useCallback((target, elements) => {\n const get = context?.targetScrollTop ?? currentTargetScrollTop;\n return get?.(target, elements) ?? target;\n }, [currentTargetScrollTop]);\n const defaultInstance = useStickToBottom({\n mass,\n damping,\n stiffness,\n resize,\n initial,\n targetScrollTop,\n });\n const { scrollRef, contentRef, scrollToBottom, stopScroll, isAtBottom, escapedFromLock, state, } = instance ?? defaultInstance;\n const context = useMemo(() => ({\n scrollToBottom,\n stopScroll,\n scrollRef,\n isAtBottom,\n escapedFromLock,\n contentRef,\n state,\n get targetScrollTop() {\n return customTargetScrollTop.current;\n },\n set targetScrollTop(targetScrollTop) {\n customTargetScrollTop.current = targetScrollTop;\n },\n }), [\n scrollToBottom,\n isAtBottom,\n contentRef,\n scrollRef,\n stopScroll,\n escapedFromLock,\n state,\n ]);\n useImperativeHandle(contextRef, () => context, [context]);\n useIsomorphicLayoutEffect(() => {\n if (!scrollRef.current) {\n return;\n }\n if (getComputedStyle(scrollRef.current).overflow === \"visible\") {\n scrollRef.current.style.overflow = \"auto\";\n }\n }, []);\n return (React.createElement(StickToBottomContext.Provider, { value: context },\n React.createElement(\"div\", { ...props }, typeof children === \"function\" ? children(context) : children)));\n}\n(function (StickToBottom) {\n function Content({ children, scrollClassName, ...props }) {\n const context = useStickToBottomContext();\n return (React.createElement(\"div\", { ref: context.scrollRef, style: {\n height: \"100%\",\n width: \"100%\",\n scrollbarGutter: \"stable both-edges\",\n }, className: scrollClassName },\n React.createElement(\"div\", { ...props, ref: context.contentRef }, typeof children === \"function\" ? children(context) : children)));\n }\n StickToBottom.Content = Content;\n})(StickToBottom || (StickToBottom = {}));\n/**\n * Use this hook inside a <StickToBottom> component to gain access to whether the component is at the bottom of the scrollable area.\n */\nexport function useStickToBottomContext() {\n const context = useContext(StickToBottomContext);\n if (!context) {\n throw new Error(\"use-stick-to-bottom component context must be used within a StickToBottom component\");\n }\n return context;\n}\n","import { type ClassValue, clsx } from \"clsx\";\nimport { extendTailwindMerge } from \"tailwind-merge\";\n\nconst twMerge = extendTailwindMerge({ prefix: \"ww\" });\n\nexport function cn(...inputs: ClassValue[]) {\n\treturn twMerge(clsx(inputs));\n}\n","\"use client\";\n\nimport type { ComponentProps } from \"react\";\nimport { cn } from \"../lib/utils\";\n\nexport type ButtonProps = ComponentProps<\"button\"> & {\n\tvariant?: \"default\" | \"outline\" | \"ghost\";\n\tsize?: \"default\" | \"sm\" | \"icon\" | \"icon-sm\";\n};\n\nexport const Button = ({\n\tclassName,\n\tvariant = \"default\",\n\tsize = \"default\",\n\ttype = \"button\",\n\t...props\n}: ButtonProps) => (\n\t<button\n\t\ttype={type}\n\t\tclassName={cn(\n\t\t\t\"ww:inline-flex ww:cursor-pointer ww:items-center ww:justify-center ww:rounded-md ww:font-medium ww:transition-colors ww:disabled:pointer-events-none ww:disabled:opacity-50\",\n\t\t\tvariant === \"default\" &&\n\t\t\t\t\"ww:bg-primary ww:text-primary-foreground ww:hover:bg-primary/90\",\n\t\t\tvariant === \"outline\" &&\n\t\t\t\t\"ww:border ww:border-border ww:bg-background ww:hover:bg-accent ww:hover:text-accent-foreground\",\n\t\t\tvariant === \"ghost\" &&\n\t\t\t\t\"ww:hover:bg-accent ww:hover:text-accent-foreground\",\n\t\t\tsize === \"default\" && \"ww:h-9 ww:px-4 ww:py-2 ww:text-sm\",\n\t\t\tsize === \"sm\" && \"ww:h-8 ww:px-3 ww:text-xs\",\n\t\t\tsize === \"icon\" && \"ww:size-9 ww:rounded-full\",\n\t\t\tsize === \"icon-sm\" && \"ww:size-7 ww:rounded-full\",\n\t\t\tclassName,\n\t\t)}\n\t\t{...props}\n\t/>\n);\n","import crypto from 'crypto'\nimport { urlAlphabet } from './url-alphabet/index.js'\nconst POOL_SIZE_MULTIPLIER = 128\nlet pool, poolOffset\nlet fillPool = bytes => {\n if (!pool || pool.length < bytes) {\n pool = Buffer.allocUnsafe(bytes * POOL_SIZE_MULTIPLIER)\n crypto.randomFillSync(pool)\n poolOffset = 0\n } else if (poolOffset + bytes > pool.length) {\n crypto.randomFillSync(pool)\n poolOffset = 0\n }\n poolOffset += bytes\n}\nlet random = bytes => {\n fillPool((bytes |= 0))\n return pool.subarray(poolOffset - bytes, poolOffset)\n}\nlet customRandom = (alphabet, defaultSize, getRandom) => {\n let mask = (2 << (31 - Math.clz32((alphabet.length - 1) | 1))) - 1\n let step = Math.ceil((1.6 * mask * defaultSize) / alphabet.length)\n return (size = defaultSize) => {\n let id = ''\n while (true) {\n let bytes = getRandom(step)\n let i = step\n while (i--) {\n id += alphabet[bytes[i] & mask] || ''\n if (id.length === size) return id\n }\n }\n }\n}\nlet customAlphabet = (alphabet, size = 21) =>\n customRandom(alphabet, size, random)\nlet nanoid = (size = 21) => {\n fillPool((size |= 0))\n let id = ''\n for (let i = poolOffset - size; i < poolOffset; i++) {\n id += urlAlphabet[pool[i] & 63]\n }\n return id\n}\nexport { nanoid, customAlphabet, customRandom, urlAlphabet, random }\n","let urlAlphabet =\n 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'\nexport { urlAlphabet }\n","\"use client\";\n\nimport type { ChatStatus, FileUIPart } from \"ai\";\nimport {\n\tArrowUpIcon,\n\tLoaderIcon,\n\tPaperclipIcon,\n\tSquareIcon,\n\tXIcon,\n} from \"lucide-react\";\nimport { nanoid } from \"nanoid\";\nimport type {\n\tChangeEvent,\n\tClipboardEventHandler,\n\tComponentProps,\n\tFormEvent,\n\tFormEventHandler,\n\tHTMLAttributes,\n\tKeyboardEventHandler,\n} from \"react\";\nimport {\n\tcreateContext,\n\tuseCallback,\n\tuseContext,\n\tuseEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Button } from \"../ui/button\";\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nconst convertBlobUrlToDataUrl = async (url: string): Promise<string | null> => {\n\ttry {\n\t\tconst response = await fetch(url);\n\t\tconst blob = await response.blob();\n\t\treturn new Promise((resolve) => {\n\t\t\tconst reader = new FileReader();\n\t\t\treader.onloadend = () => resolve(reader.result as string);\n\t\t\treader.onerror = () => resolve(null);\n\t\t\treader.readAsDataURL(blob);\n\t\t});\n\t} catch {\n\t\treturn null;\n\t}\n};\n\n// ============================================================================\n// Attachments Context\n// ============================================================================\n\nexport interface AttachmentsContext {\n\tfiles: (FileUIPart & { id: string })[];\n\tadd: (files: File[] | FileList) => void;\n\tremove: (id: string) => void;\n\tclear: () => void;\n\topenFileDialog: () => void;\n}\n\nconst LocalAttachmentsContext = createContext<AttachmentsContext | null>(null);\n\nexport const usePromptInputAttachments = () => {\n\tconst context = useContext(LocalAttachmentsContext);\n\tif (!context) {\n\t\tthrow new Error(\n\t\t\t\"usePromptInputAttachments must be used within a PromptInput\",\n\t\t);\n\t}\n\treturn context;\n};\n\n// ============================================================================\n// PromptInput Message Type\n// ============================================================================\n\nexport interface PromptInputMessage {\n\ttext: string;\n\tfiles: FileUIPart[];\n}\n\n// ============================================================================\n// PromptInput\n// ============================================================================\n\nexport type PromptInputProps = Omit<\n\tHTMLAttributes<HTMLFormElement>,\n\t\"onSubmit\"\n> & {\n\taccept?: string;\n\tmultiple?: boolean;\n\tglobalDrop?: boolean;\n\tmaxFiles?: number;\n\tmaxFileSize?: number;\n\tonSubmit: (\n\t\tmessage: PromptInputMessage,\n\t\tevent: FormEvent<HTMLFormElement>,\n\t) => void | Promise<void>;\n};\n\nexport const PromptInput = ({\n\tclassName,\n\taccept,\n\tmultiple,\n\tglobalDrop,\n\tmaxFiles,\n\tmaxFileSize,\n\tonSubmit,\n\tchildren,\n\t...props\n}: PromptInputProps) => {\n\tconst inputRef = useRef<HTMLInputElement | null>(null);\n\tconst formRef = useRef<HTMLFormElement | null>(null);\n\tconst [items, setItems] = useState<(FileUIPart & { id: string })[]>([]);\n\tconst filesRef = useRef(items);\n\n\tuseEffect(() => {\n\t\tfilesRef.current = items;\n\t}, [items]);\n\n\tconst openFileDialog = useCallback(() => {\n\t\tinputRef.current?.click();\n\t}, []);\n\n\tconst add = useCallback(\n\t\t(fileList: File[] | FileList) => {\n\t\t\tconst incoming = [...fileList];\n\t\t\tif (incoming.length === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst withinSize = (f: File) =>\n\t\t\t\tmaxFileSize ? f.size <= maxFileSize : true;\n\t\t\tconst valid = incoming.filter(withinSize);\n\n\t\t\tsetItems((prev) => {\n\t\t\t\tconst capacity =\n\t\t\t\t\ttypeof maxFiles === \"number\"\n\t\t\t\t\t\t? Math.max(0, maxFiles - prev.length)\n\t\t\t\t\t\t: undefined;\n\t\t\t\tconst capped =\n\t\t\t\t\ttypeof capacity === \"number\" ? valid.slice(0, capacity) : valid;\n\t\t\t\treturn [\n\t\t\t\t\t...prev,\n\t\t\t\t\t...capped.map((file) => ({\n\t\t\t\t\t\tfilename: file.name,\n\t\t\t\t\t\tid: nanoid(),\n\t\t\t\t\t\tmediaType: file.type,\n\t\t\t\t\t\ttype: \"file\" as const,\n\t\t\t\t\t\turl: URL.createObjectURL(file),\n\t\t\t\t\t})),\n\t\t\t\t];\n\t\t\t});\n\t\t},\n\t\t[maxFiles, maxFileSize],\n\t);\n\n\tconst remove = useCallback((id: string) => {\n\t\tsetItems((prev) => {\n\t\t\tconst found = prev.find((f) => f.id === id);\n\t\t\tif (found?.url) {\n\t\t\t\tURL.revokeObjectURL(found.url);\n\t\t\t}\n\t\t\treturn prev.filter((f) => f.id !== id);\n\t\t});\n\t}, []);\n\n\tconst clear = useCallback(() => {\n\t\tsetItems((prev) => {\n\t\t\tfor (const f of prev) {\n\t\t\t\tif (f.url) {\n\t\t\t\t\tURL.revokeObjectURL(f.url);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn [];\n\t\t});\n\t}, []);\n\n\t// Cleanup blob URLs on unmount\n\tuseEffect(\n\t\t() => () => {\n\t\t\tfor (const f of filesRef.current) {\n\t\t\t\tif (f.url) {\n\t\t\t\t\tURL.revokeObjectURL(f.url);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[],\n\t);\n\n\tconst handleChange = useCallback(\n\t\t(event: ChangeEvent<HTMLInputElement>) => {\n\t\t\tif (event.currentTarget.files) {\n\t\t\t\tadd(event.currentTarget.files);\n\t\t\t}\n\t\t\tevent.currentTarget.value = \"\";\n\t\t},\n\t\t[add],\n\t);\n\n\t// Global drop support\n\tuseEffect(() => {\n\t\tif (!globalDrop) {\n\t\t\treturn;\n\t\t}\n\t\tconst onDragOver = (e: DragEvent) => {\n\t\t\tif (e.dataTransfer?.types?.includes(\"Files\")) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t};\n\t\tconst onDrop = (e: DragEvent) => {\n\t\t\tif (e.dataTransfer?.types?.includes(\"Files\")) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t\tif (e.dataTransfer?.files && e.dataTransfer.files.length > 0) {\n\t\t\t\tadd(e.dataTransfer.files);\n\t\t\t}\n\t\t};\n\t\tdocument.addEventListener(\"dragover\", onDragOver);\n\t\tdocument.addEventListener(\"drop\", onDrop);\n\t\treturn () => {\n\t\t\tdocument.removeEventListener(\"dragover\", onDragOver);\n\t\t\tdocument.removeEventListener(\"drop\", onDrop);\n\t\t};\n\t}, [add, globalDrop]);\n\n\tconst handleSubmit: FormEventHandler<HTMLFormElement> = useCallback(\n\t\tasync (event) => {\n\t\t\tevent.preventDefault();\n\t\t\tconst form = event.currentTarget;\n\t\t\tconst formData = new FormData(form);\n\t\t\tconst text = (formData.get(\"message\") as string) || \"\";\n\n\t\t\tform.reset();\n\n\t\t\tconst convertedFiles: FileUIPart[] = await Promise.all(\n\t\t\t\titems.map(async ({ id: _id, ...item }) => {\n\t\t\t\t\tif (item.url?.startsWith(\"blob:\")) {\n\t\t\t\t\t\tconst dataUrl = await convertBlobUrlToDataUrl(item.url);\n\t\t\t\t\t\treturn { ...item, url: dataUrl ?? item.url };\n\t\t\t\t\t}\n\t\t\t\t\treturn item;\n\t\t\t\t}),\n\t\t\t);\n\n\t\t\ttry {\n\t\t\t\tconst result = onSubmit({ files: convertedFiles, text }, event);\n\t\t\t\tif (result instanceof Promise) {\n\t\t\t\t\tawait result;\n\t\t\t\t}\n\t\t\t\tclear();\n\t\t\t} catch {\n\t\t\t\t// Don't clear on error\n\t\t\t}\n\t\t},\n\t\t[items, onSubmit, clear],\n\t);\n\n\tconst attachmentsCtx = useMemo<AttachmentsContext>(\n\t\t() => ({\n\t\t\tadd,\n\t\t\tclear,\n\t\t\tfiles: items,\n\t\t\topenFileDialog,\n\t\t\tremove,\n\t\t}),\n\t\t[items, add, remove, clear, openFileDialog],\n\t);\n\n\treturn (\n\t\t<LocalAttachmentsContext.Provider value={attachmentsCtx}>\n\t\t\t<input\n\t\t\t\taccept={accept}\n\t\t\t\taria-label=\"Upload files\"\n\t\t\t\tclassName=\"ww:hidden\"\n\t\t\t\tmultiple={multiple}\n\t\t\t\tonChange={handleChange}\n\t\t\t\tref={inputRef}\n\t\t\t\ttitle=\"Upload files\"\n\t\t\t\ttype=\"file\"\n\t\t\t/>\n\t\t\t<form\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"ww:flex ww:w-full ww:flex-col ww:rounded-lg ww:border ww:border-border ww:bg-background\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\tonSubmit={handleSubmit}\n\t\t\t\tref={formRef}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</form>\n\t\t</LocalAttachmentsContext.Provider>\n\t);\n};\n\n// ============================================================================\n// Layout Components\n// ============================================================================\n\nexport type PromptInputHeaderProps = HTMLAttributes<HTMLDivElement>;\n\nexport const PromptInputHeader = ({\n\tclassName,\n\t...props\n}: PromptInputHeaderProps) => (\n\t<div\n\t\tclassName={cn(\"ww:flex ww:flex-wrap ww:gap-1 ww:px-3 ww:pt-3\", className)}\n\t\t{...props}\n\t/>\n);\n\nexport type PromptInputBodyProps = HTMLAttributes<HTMLDivElement>;\n\nexport const PromptInputBody = ({\n\tclassName,\n\t...props\n}: PromptInputBodyProps) => (\n\t<div className={cn(\"ww:contents\", className)} {...props} />\n);\n\nexport type PromptInputFooterProps = HTMLAttributes<HTMLDivElement>;\n\nexport const PromptInputFooter = ({\n\tclassName,\n\t...props\n}: PromptInputFooterProps) => (\n\t<div\n\t\tclassName={cn(\n\t\t\t\"ww:flex ww:items-center ww:justify-between ww:gap-1 ww:px-3 ww:pb-3\",\n\t\t\tclassName,\n\t\t)}\n\t\t{...props}\n\t/>\n);\n\nexport type PromptInputToolsProps = HTMLAttributes<HTMLDivElement>;\n\nexport const PromptInputTools = ({\n\tclassName,\n\t...props\n}: PromptInputToolsProps) => (\n\t<div\n\t\tclassName={cn(\"ww:flex ww:min-w-0 ww:items-center ww:gap-1\", className)}\n\t\t{...props}\n\t/>\n);\n\n// ============================================================================\n// Textarea\n// ============================================================================\n\nexport type PromptInputTextareaProps = ComponentProps<\"textarea\">;\n\nexport const PromptInputTextarea = ({\n\tonChange,\n\tonKeyDown,\n\tclassName,\n\tplaceholder = \"What would you like to know?\",\n\t...props\n}: PromptInputTextareaProps) => {\n\tconst attachments = usePromptInputAttachments();\n\tconst [isComposing, setIsComposing] = useState(false);\n\n\tconst handleKeyDown: KeyboardEventHandler<HTMLTextAreaElement> = useCallback(\n\t\t(e) => {\n\t\t\tonKeyDown?.(e);\n\t\t\tif (e.defaultPrevented) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (e.key === \"Enter\") {\n\t\t\t\tif (isComposing || e.nativeEvent.isComposing) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (e.shiftKey) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\te.preventDefault();\n\n\t\t\t\tconst { form } = e.currentTarget;\n\t\t\t\tconst submitButton = form?.querySelector(\n\t\t\t\t\t'button[type=\"submit\"]',\n\t\t\t\t) as HTMLButtonElement | null;\n\t\t\t\tif (submitButton?.disabled) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tform?.requestSubmit();\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\te.key === \"Backspace\" &&\n\t\t\t\te.currentTarget.value === \"\" &&\n\t\t\t\tattachments.files.length > 0\n\t\t\t) {\n\t\t\t\te.preventDefault();\n\t\t\t\tconst lastAttachment = attachments.files.at(-1);\n\t\t\t\tif (lastAttachment) {\n\t\t\t\t\tattachments.remove(lastAttachment.id);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[onKeyDown, isComposing, attachments],\n\t);\n\n\tconst handlePaste: ClipboardEventHandler<HTMLTextAreaElement> = useCallback(\n\t\t(event) => {\n\t\t\tconst items = event.clipboardData?.items;\n\t\t\tif (!items) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst files: File[] = [];\n\t\t\tfor (const item of items) {\n\t\t\t\tif (item.kind === \"file\") {\n\t\t\t\t\tconst file = item.getAsFile();\n\t\t\t\t\tif (file) {\n\t\t\t\t\t\tfiles.push(file);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (files.length > 0) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tattachments.add(files);\n\t\t\t}\n\t\t},\n\t\t[attachments],\n\t);\n\n\treturn (\n\t\t<textarea\n\t\t\tclassName={cn(\n\t\t\t\t\"ww:field-sizing-content ww:max-h-48 ww:min-h-16 ww:w-full ww:resize-none ww:border-0 ww:bg-transparent ww:px-3 ww:py-3 ww:text-sm ww:outline-none ww:placeholder:text-muted-foreground\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tname=\"message\"\n\t\t\tonCompositionEnd={() => setIsComposing(false)}\n\t\t\tonCompositionStart={() => setIsComposing(true)}\n\t\t\tonKeyDown={handleKeyDown}\n\t\t\tonPaste={handlePaste}\n\t\t\tplaceholder={placeholder}\n\t\t\tonChange={onChange}\n\t\t\t{...props}\n\t\t/>\n\t);\n};\n\n// ============================================================================\n// Submit Button\n// ============================================================================\n\nexport type PromptInputSubmitProps = ComponentProps<typeof Button> & {\n\tstatus?: ChatStatus;\n\tonStop?: () => void;\n};\n\nexport const PromptInputSubmit = ({\n\tclassName,\n\tstatus,\n\tonStop,\n\tonClick,\n\tchildren,\n\t...props\n}: PromptInputSubmitProps) => {\n\tconst isGenerating = status === \"submitted\" || status === \"streaming\";\n\n\tlet Icon = <ArrowUpIcon className=\"ww:size-4\" />;\n\tif (status === \"submitted\") {\n\t\tIcon = <LoaderIcon className=\"ww:size-4 ww:animate-spin\" />;\n\t} else if (status === \"streaming\") {\n\t\tIcon = <SquareIcon className=\"ww:size-4\" />;\n\t}\n\n\tconst handleClick = useCallback(\n\t\t(e: React.MouseEvent<HTMLButtonElement>) => {\n\t\t\tif (isGenerating && onStop) {\n\t\t\t\te.preventDefault();\n\t\t\t\tonStop();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tonClick?.(e);\n\t\t},\n\t\t[isGenerating, onStop, onClick],\n\t);\n\n\treturn (\n\t\t<Button\n\t\t\taria-label={isGenerating ? \"Stop\" : \"Submit\"}\n\t\t\tclassName={cn(\n\t\t\t\t\"ww:bg-foreground ww:text-background ww:hover:bg-foreground ww:rounded-full\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tonClick={handleClick}\n\t\t\tsize=\"icon-sm\"\n\t\t\ttype={isGenerating && onStop ? \"button\" : \"submit\"}\n\t\t\tvariant=\"ghost\"\n\t\t\t{...props}\n\t\t>\n\t\t\t{children ?? Icon}\n\t\t</Button>\n\t);\n};\n\n// ============================================================================\n// Attachment Add Button (simple file picker, no Radix dropdown)\n// ============================================================================\n\nexport type PromptInputAddAttachmentsProps = ComponentProps<typeof Button>;\n\nexport const PromptInputAddAttachments = ({\n\tclassName,\n\tchildren,\n\t...props\n}: PromptInputAddAttachmentsProps) => {\n\tconst attachments = usePromptInputAttachments();\n\tconst hasFiles = attachments.files.length > 0;\n\n\tif (hasFiles) {\n\t\treturn (\n\t\t\t<Button\n\t\t\t\tclassName={cn(\"ww:group ww:relative\", className)}\n\t\t\t\tonClick={() => attachments.clear()}\n\t\t\t\tsize=\"icon-sm\"\n\t\t\t\ttype=\"button\"\n\t\t\t\tvariant=\"ghost\"\n\t\t\t\taria-label=\"Remove all attachments\"\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t<span className=\"ww:flex ww:size-5 ww:items-center ww:justify-center ww:rounded-full ww:bg-primary ww:text-[10px] ww:font-medium ww:text-primary-foreground ww:transition-opacity ww:group-hover:opacity-0\">\n\t\t\t\t\t{attachments.files.length}\n\t\t\t\t</span>\n\t\t\t\t<XIcon className=\"ww:absolute ww:size-4 ww:opacity-0 ww:transition-opacity ww:group-hover:opacity-100\" />\n\t\t\t</Button>\n\t\t);\n\t}\n\n\treturn (\n\t\t<Button\n\t\t\tclassName={cn(className)}\n\t\t\tonClick={() => attachments.openFileDialog()}\n\t\t\tsize=\"icon-sm\"\n\t\t\ttype=\"button\"\n\t\t\tvariant=\"ghost\"\n\t\t\t{...props}\n\t\t>\n\t\t\t{children ?? <PaperclipIcon className=\"ww:size-4\" />}\n\t\t</Button>\n\t);\n};\n","\"use client\";\n\nimport { XIcon } from \"lucide-react\";\nimport { memo, useCallback } from \"react\";\nimport {\n\tQueue,\n\tQueueItem,\n\tQueueItemAction,\n\tQueueItemActions,\n\tQueueItemContent,\n\tQueueItemIndicator,\n} from \"../ai-elements/queue\";\nimport type { QueuedMessage } from \"../hooks/use-chat-engine\";\nimport { cn } from \"../lib/utils\";\n\ninterface ChatQueueItemProps {\n\tmessage: QueuedMessage;\n\tonRemove: (id: string) => void;\n}\n\nconst ChatQueueItem = memo(({ message, onRemove }: ChatQueueItemProps) => {\n\tconst handleRemove = useCallback(\n\t\t() => onRemove(message.id),\n\t\t[onRemove, message.id],\n\t);\n\n\treturn (\n\t\t<QueueItem>\n\t\t\t<QueueItemIndicator />\n\t\t\t<QueueItemContent>{message.text || \"(attachment)\"}</QueueItemContent>\n\t\t\t<QueueItemActions>\n\t\t\t\t<QueueItemAction aria-label=\"Remove from queue\" onClick={handleRemove}>\n\t\t\t\t\t<XIcon className=\"ww:size-3\" />\n\t\t\t\t</QueueItemAction>\n\t\t\t</QueueItemActions>\n\t\t</QueueItem>\n\t);\n});\n\nChatQueueItem.displayName = \"ChatQueueItem\";\n\ninterface ChatQueueProps {\n\tqueuedMessages: QueuedMessage[];\n\tonRemove: (id: string) => void;\n\tclassName?: string;\n}\n\nexport function ChatQueue({\n\tqueuedMessages,\n\tonRemove,\n\tclassName,\n}: ChatQueueProps) {\n\tif (queuedMessages.length === 0) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<Queue className={cn(\"ww:border-t ww:border-border\", className)}>\n\t\t\t<div className=\"ww:text-[11px] ww:font-medium ww:text-muted-foreground ww:px-2\">\n\t\t\t\t{queuedMessages.length} queued\n\t\t\t</div>\n\t\t\t<ul>\n\t\t\t\t{queuedMessages.map((msg) => (\n\t\t\t\t\t<ChatQueueItem key={msg.id} message={msg} onRemove={onRemove} />\n\t\t\t\t))}\n\t\t\t</ul>\n\t\t</Queue>\n\t);\n}\n","\"use client\";\n\nimport type { ComponentProps } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Button } from \"../ui/button\";\n\nexport type QueueProps = ComponentProps<\"div\">;\n\nexport const Queue = ({ className, ...props }: QueueProps) => (\n\t<div\n\t\tclassName={cn(\"ww:flex ww:flex-col ww:gap-1 ww:px-3 ww:py-2\", className)}\n\t\t{...props}\n\t/>\n);\n\nexport type QueueItemProps = ComponentProps<\"li\">;\n\nexport const QueueItem = ({ className, ...props }: QueueItemProps) => (\n\t<li\n\t\tclassName={cn(\n\t\t\t\"ww:group ww:flex ww:items-center ww:gap-2 ww:rounded-md ww:px-2 ww:py-1 ww:text-sm ww:transition-colors ww:hover:bg-muted\",\n\t\t\tclassName,\n\t\t)}\n\t\t{...props}\n\t/>\n);\n\nexport type QueueItemIndicatorProps = ComponentProps<\"span\">;\n\nexport const QueueItemIndicator = ({\n\tclassName,\n\t...props\n}: QueueItemIndicatorProps) => (\n\t<span\n\t\tclassName={cn(\n\t\t\t\"ww:inline-block ww:size-2 ww:shrink-0 ww:rounded-full ww:border ww:border-muted-foreground/50\",\n\t\t\tclassName,\n\t\t)}\n\t\t{...props}\n\t/>\n);\n\nexport type QueueItemContentProps = ComponentProps<\"span\">;\n\nexport const QueueItemContent = ({\n\tclassName,\n\t...props\n}: QueueItemContentProps) => (\n\t<span\n\t\tclassName={cn(\n\t\t\t\"ww:line-clamp-1 ww:grow ww:break-words ww:text-muted-foreground\",\n\t\t\tclassName,\n\t\t)}\n\t\t{...props}\n\t/>\n);\n\nexport type QueueItemActionsProps = ComponentProps<\"div\">;\n\nexport const QueueItemActions = ({\n\tclassName,\n\t...props\n}: QueueItemActionsProps) => (\n\t<div\n\t\tclassName={cn(\n\t\t\t\"ww:flex ww:shrink-0 ww:gap-1 ww:opacity-0 ww:transition-opacity ww:group-hover:opacity-100\",\n\t\t\tclassName,\n\t\t)}\n\t\t{...props}\n\t/>\n);\n\nexport type QueueItemActionProps = Omit<\n\tComponentProps<typeof Button>,\n\t\"variant\" | \"size\"\n>;\n\nexport const QueueItemAction = ({\n\tclassName,\n\t...props\n}: QueueItemActionProps) => (\n\t<Button\n\t\tclassName={cn(\n\t\t\t\"ww:size-auto ww:rounded ww:p-1 ww:text-muted-foreground ww:hover:bg-muted-foreground/10 ww:hover:text-foreground\",\n\t\t\tclassName,\n\t\t)}\n\t\tsize=\"icon\"\n\t\ttype=\"button\"\n\t\tvariant=\"ghost\"\n\t\t{...props}\n\t/>\n);\n","\"use client\";\n\nimport type { UIMessage } from \"@ai-sdk/react\";\nimport { useState } from \"react\";\n\ninterface ExportSessionButtonProps {\n\tmessages: UIMessage[];\n\tevalEnabled: boolean;\n\tapi?: string;\n}\n\nexport function ExportSessionButton({\n\tmessages,\n\tevalEnabled,\n\tapi = \"/api/waniwani\",\n}: ExportSessionButtonProps) {\n\tconst [saving, setSaving] = useState(false);\n\tconst [feedback, setFeedback] = useState<\"saved\" | \"error\" | null>(null);\n\n\tconst handleExport = async () => {\n\t\tconst session = {\n\t\t\tname: `session-${new Date().toISOString().slice(0, 19)}`,\n\t\t\ttype: \"functional\" as const,\n\t\t\tmessages,\n\t\t\tmode: \"manual\" as const,\n\t\t};\n\n\t\tsetSaving(true);\n\t\tsetFeedback(null);\n\n\t\ttry {\n\t\t\tconst res = await fetch(`${api}/scenarios`, {\n\t\t\t\tmethod: \"POST\",\n\t\t\t\theaders: { \"Content-Type\": \"application/json\" },\n\t\t\t\tbody: JSON.stringify(session),\n\t\t\t});\n\t\t\tif (!res.ok) {\n\t\t\t\tthrow new Error(`${res.status}`);\n\t\t\t}\n\t\t\tsetFeedback(\"saved\");\n\t\t} catch {\n\t\t\tsetFeedback(\"error\");\n\t\t} finally {\n\t\t\tsetSaving(false);\n\t\t\tsetTimeout(() => setFeedback(null), 2000);\n\t\t}\n\t};\n\n\tif (!evalEnabled || messages.length === 0) {\n\t\treturn null;\n\t}\n\n\tconst label = saving\n\t\t? \"saving...\"\n\t\t: feedback === \"saved\"\n\t\t\t? \"saved\"\n\t\t\t: feedback === \"error\"\n\t\t\t\t? \"error\"\n\t\t\t\t: \"export\";\n\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tonClick={handleExport}\n\t\t\tdisabled={saving}\n\t\t\ttitle=\"Save scenario to WaniWani\"\n\t\t\tclassName=\"ww:ml-auto ww:text-[10px] ww:font-mono ww:uppercase ww:tracking-wider ww:text-muted-foreground hover:ww:text-foreground ww:cursor-pointer ww:transition-colors ww:disabled:opacity-40\"\n\t\t>\n\t\t\t{label}\n\t\t</button>\n\t);\n}\n","\"use client\";\n\nimport type { FileUIPart } from \"ai\";\nimport { FileIcon } from \"lucide-react\";\nimport type { HTMLAttributes } from \"react\";\nimport { cn } from \"../lib/utils\";\n\n// ============================================================================\n// Attachments (inline list for chat bubbles)\n// ============================================================================\n\nexport type AttachmentsProps = HTMLAttributes<HTMLDivElement> & {\n\tfiles: FileUIPart[];\n};\n\nexport const Attachments = ({\n\tfiles,\n\tclassName,\n\t...props\n}: AttachmentsProps) => {\n\tif (files.length === 0) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\"ww:flex ww:flex-wrap ww:gap-1.5\", className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{files.map((file, i) => (\n\t\t\t\t<AttachmentItem key={i} file={file} />\n\t\t\t))}\n\t\t</div>\n\t);\n};\n\n// ============================================================================\n// AttachmentItem\n// ============================================================================\n\nfunction AttachmentItem({ file }: { file: FileUIPart }) {\n\tconst isImage = file.mediaType?.startsWith(\"image/\");\n\n\tif (isImage && file.url) {\n\t\treturn (\n\t\t\t<img\n\t\t\t\tsrc={file.url}\n\t\t\t\talt={file.filename ?? \"attachment\"}\n\t\t\t\tclassName=\"ww:h-16 ww:max-w-32 ww:rounded ww:object-cover\"\n\t\t\t/>\n\t\t);\n\t}\n\n\treturn (\n\t\t<span className=\"ww:inline-flex ww:items-center ww:gap-1.5 ww:rounded ww:bg-background/20 ww:px-2 ww:py-1 ww:text-xs\">\n\t\t\t<FileIcon className=\"ww:size-3 ww:shrink-0\" />\n\t\t\t<span className=\"ww:max-w-24 ww:truncate\">{file.filename ?? \"file\"}</span>\n\t\t</span>\n\t);\n}\n","\"use client\";\n\nimport type { HTMLAttributes } from \"react\";\nimport { cn } from \"../lib/utils\";\n\nexport type LoaderProps = HTMLAttributes<HTMLDivElement> & {\n\tsize?: number;\n};\n\nexport const Loader = ({ className, size = 5, ...props }: LoaderProps) => (\n\t<div className={cn(\"ww:flex ww:items-center ww:gap-1\", className)} {...props}>\n\t\t{[0, 1, 2].map((i) => (\n\t\t\t<div\n\t\t\t\tkey={i}\n\t\t\t\tclassName=\"ww:rounded-full ww:bg-muted-foreground/60\"\n\t\t\t\tstyle={{\n\t\t\t\t\twidth: size,\n\t\t\t\t\theight: size,\n\t\t\t\t\tanimation: \"ww-pulse 1.4s ease-in-out infinite\",\n\t\t\t\t\tanimationDelay: `${i * 0.2}s`,\n\t\t\t\t}}\n\t\t\t/>\n\t\t))}\n\t</div>\n);\n","/**\n * Character codes.\n *\n * This module is compiled away!\n *\n * micromark works based on character codes.\n * This module contains constants for the ASCII block and the replacement\n * character.\n * A couple of them are handled in a special way, such as the line endings\n * (CR, LF, and CR+LF, commonly known as end-of-line: EOLs), the tab (horizontal\n * tab) and its expansion based on what column it’s at (virtual space),\n * and the end-of-file (eof) character.\n * As values are preprocessed before handling them, the actual characters LF,\n * CR, HT, and NUL (which is present as the replacement character), are\n * guaranteed to not exist.\n *\n * Unicode basic latin block.\n */\nexport const codes = /** @type {const} */ ({\n carriageReturn: -5,\n lineFeed: -4,\n carriageReturnLineFeed: -3,\n horizontalTab: -2,\n virtualSpace: -1,\n eof: null,\n nul: 0,\n soh: 1,\n stx: 2,\n etx: 3,\n eot: 4,\n enq: 5,\n ack: 6,\n bel: 7,\n bs: 8,\n ht: 9, // `\\t`\n lf: 10, // `\\n`\n vt: 11, // `\\v`\n ff: 12, // `\\f`\n cr: 13, // `\\r`\n so: 14,\n si: 15,\n dle: 16,\n dc1: 17,\n dc2: 18,\n dc3: 19,\n dc4: 20,\n nak: 21,\n syn: 22,\n etb: 23,\n can: 24,\n em: 25,\n sub: 26,\n esc: 27,\n fs: 28,\n gs: 29,\n rs: 30,\n us: 31,\n space: 32,\n exclamationMark: 33, // `!`\n quotationMark: 34, // `\"`\n numberSign: 35, // `#`\n dollarSign: 36, // `$`\n percentSign: 37, // `%`\n ampersand: 38, // `&`\n apostrophe: 39, // `'`\n leftParenthesis: 40, // `(`\n rightParenthesis: 41, // `)`\n asterisk: 42, // `*`\n plusSign: 43, // `+`\n comma: 44, // `,`\n dash: 45, // `-`\n dot: 46, // `.`\n slash: 47, // `/`\n digit0: 48, // `0`\n digit1: 49, // `1`\n digit2: 50, // `2`\n digit3: 51, // `3`\n digit4: 52, // `4`\n digit5: 53, // `5`\n digit6: 54, // `6`\n digit7: 55, // `7`\n digit8: 56, // `8`\n digit9: 57, // `9`\n colon: 58, // `:`\n semicolon: 59, // `;`\n lessThan: 60, // `<`\n equalsTo: 61, // `=`\n greaterThan: 62, // `>`\n questionMark: 63, // `?`\n atSign: 64, // `@`\n uppercaseA: 65, // `A`\n uppercaseB: 66, // `B`\n uppercaseC: 67, // `C`\n uppercaseD: 68, // `D`\n uppercaseE: 69, // `E`\n uppercaseF: 70, // `F`\n uppercaseG: 71, // `G`\n uppercaseH: 72, // `H`\n uppercaseI: 73, // `I`\n uppercaseJ: 74, // `J`\n uppercaseK: 75, // `K`\n uppercaseL: 76, // `L`\n uppercaseM: 77, // `M`\n uppercaseN: 78, // `N`\n uppercaseO: 79, // `O`\n uppercaseP: 80, // `P`\n uppercaseQ: 81, // `Q`\n uppercaseR: 82, // `R`\n uppercaseS: 83, // `S`\n uppercaseT: 84, // `T`\n uppercaseU: 85, // `U`\n uppercaseV: 86, // `V`\n uppercaseW: 87, // `W`\n uppercaseX: 88, // `X`\n uppercaseY: 89, // `Y`\n uppercaseZ: 90, // `Z`\n leftSquareBracket: 91, // `[`\n backslash: 92, // `\\`\n rightSquareBracket: 93, // `]`\n caret: 94, // `^`\n underscore: 95, // `_`\n graveAccent: 96, // `` ` ``\n lowercaseA: 97, // `a`\n lowercaseB: 98, // `b`\n lowercaseC: 99, // `c`\n lowercaseD: 100, // `d`\n lowercaseE: 101, // `e`\n lowercaseF: 102, // `f`\n lowercaseG: 103, // `g`\n lowercaseH: 104, // `h`\n lowercaseI: 105, // `i`\n lowercaseJ: 106, // `j`\n lowercaseK: 107, // `k`\n lowercaseL: 108, // `l`\n lowercaseM: 109, // `m`\n lowercaseN: 110, // `n`\n lowercaseO: 111, // `o`\n lowercaseP: 112, // `p`\n lowercaseQ: 113, // `q`\n lowercaseR: 114, // `r`\n lowercaseS: 115, // `s`\n lowercaseT: 116, // `t`\n lowercaseU: 117, // `u`\n lowercaseV: 118, // `v`\n lowercaseW: 119, // `w`\n lowercaseX: 120, // `x`\n lowercaseY: 121, // `y`\n lowercaseZ: 122, // `z`\n leftCurlyBrace: 123, // `{`\n verticalBar: 124, // `|`\n rightCurlyBrace: 125, // `}`\n tilde: 126, // `~`\n del: 127,\n // Unicode Specials block.\n byteOrderMarker: 65_279,\n // Unicode Specials block.\n replacementCharacter: 65_533 // `�`\n})\n","/**\n * This module is compiled away!\n *\n * Parsing markdown comes with a couple of constants, such as minimum or maximum\n * sizes of certain sequences.\n * Additionally, there are a couple symbols used inside micromark.\n * These are all defined here, but compiled away by scripts.\n */\nexport const constants = /** @type {const} */ ({\n attentionSideAfter: 2, // Symbol to mark an attention sequence as after content: `a*`\n attentionSideBefore: 1, // Symbol to mark an attention sequence as before content: `*a`\n atxHeadingOpeningFenceSizeMax: 6, // 6 number signs is fine, 7 isn’t.\n autolinkDomainSizeMax: 63, // 63 characters is fine, 64 is too many.\n autolinkSchemeSizeMax: 32, // 32 characters is fine, 33 is too many.\n cdataOpeningString: 'CDATA[', // And preceded by `<![`.\n characterGroupPunctuation: 2, // Symbol used to indicate a character is punctuation\n characterGroupWhitespace: 1, // Symbol used to indicate a character is whitespace\n characterReferenceDecimalSizeMax: 7, // `&#9999999;`.\n characterReferenceHexadecimalSizeMax: 6, // `&#xff9999;`.\n characterReferenceNamedSizeMax: 31, // `&CounterClockwiseContourIntegral;`.\n codeFencedSequenceSizeMin: 3, // At least 3 ticks or tildes are needed.\n contentTypeContent: 'content',\n contentTypeDocument: 'document',\n contentTypeFlow: 'flow',\n contentTypeString: 'string',\n contentTypeText: 'text',\n hardBreakPrefixSizeMin: 2, // At least 2 trailing spaces are needed.\n htmlBasic: 6, // Symbol for `<div`\n htmlCdata: 5, // Symbol for `<![CDATA[]]>`\n htmlComment: 2, // Symbol for `<!---->`\n htmlComplete: 7, // Symbol for `<x>`\n htmlDeclaration: 4, // Symbol for `<!doctype>`\n htmlInstruction: 3, // Symbol for `<?php?>`\n htmlRawSizeMax: 8, // Length of `textarea`.\n htmlRaw: 1, // Symbol for `<script>`\n linkResourceDestinationBalanceMax: 32, // See: <https://spec.commonmark.org/0.30/#link-destination>, <https://github.com/remarkjs/react-markdown/issues/658#issuecomment-984345577>\n linkReferenceSizeMax: 999, // See: <https://spec.commonmark.org/0.30/#link-label>\n listItemValueSizeMax: 10, // See: <https://spec.commonmark.org/0.30/#ordered-list-marker>\n numericBaseDecimal: 10,\n numericBaseHexadecimal: 0x10,\n tabSize: 4, // Tabs have a hard-coded size of 4, per CommonMark.\n thematicBreakMarkerCountMin: 3, // At least 3 asterisks, dashes, or underscores are needed.\n v8MaxSafeChunkSize: 10_000 // V8 (and potentially others) have problems injecting giant arrays into other arrays, hence we operate in chunks.\n})\n","/**\n * This module is compiled away!\n *\n * Here is the list of all types of tokens exposed by micromark, with a short\n * explanation of what they include and where they are found.\n * In picking names, generally, the rule is to be as explicit as possible\n * instead of reusing names.\n * For example, there is a `definitionDestination` and a `resourceDestination`,\n * instead of one shared name.\n */\n\n// Note: when changing the next record, you must also change `TokenTypeMap`\n// in `micromark-util-types/index.d.ts`.\nexport const types = /** @type {const} */ ({\n // Generic type for data, such as in a title, a destination, etc.\n data: 'data',\n\n // Generic type for syntactic whitespace (tabs, virtual spaces, spaces).\n // Such as, between a fenced code fence and an info string.\n whitespace: 'whitespace',\n\n // Generic type for line endings (line feed, carriage return, carriage return +\n // line feed).\n lineEnding: 'lineEnding',\n\n // A line ending, but ending a blank line.\n lineEndingBlank: 'lineEndingBlank',\n\n // Generic type for whitespace (tabs, virtual spaces, spaces) at the start of a\n // line.\n linePrefix: 'linePrefix',\n\n // Generic type for whitespace (tabs, virtual spaces, spaces) at the end of a\n // line.\n lineSuffix: 'lineSuffix',\n\n // Whole ATX heading:\n //\n // ```markdown\n // #\n // ## Alpha\n // ### Bravo ###\n // ```\n //\n // Includes `atxHeadingSequence`, `whitespace`, `atxHeadingText`.\n atxHeading: 'atxHeading',\n\n // Sequence of number signs in an ATX heading (`###`).\n atxHeadingSequence: 'atxHeadingSequence',\n\n // Content in an ATX heading (`alpha`).\n // Includes text.\n atxHeadingText: 'atxHeadingText',\n\n // Whole autolink (`<https://example.com>` or `<admin@example.com>`)\n // Includes `autolinkMarker` and `autolinkProtocol` or `autolinkEmail`.\n autolink: 'autolink',\n\n // Email autolink w/o markers (`admin@example.com`)\n autolinkEmail: 'autolinkEmail',\n\n // Marker around an `autolinkProtocol` or `autolinkEmail` (`<` or `>`).\n autolinkMarker: 'autolinkMarker',\n\n // Protocol autolink w/o markers (`https://example.com`)\n autolinkProtocol: 'autolinkProtocol',\n\n // A whole character escape (`\\-`).\n // Includes `escapeMarker` and `characterEscapeValue`.\n characterEscape: 'characterEscape',\n\n // The escaped character (`-`).\n characterEscapeValue: 'characterEscapeValue',\n\n // A whole character reference (`&amp;`, `&#8800;`, or `&#x1D306;`).\n // Includes `characterReferenceMarker`, an optional\n // `characterReferenceMarkerNumeric`, in which case an optional\n // `characterReferenceMarkerHexadecimal`, and a `characterReferenceValue`.\n characterReference: 'characterReference',\n\n // The start or end marker (`&` or `;`).\n characterReferenceMarker: 'characterReferenceMarker',\n\n // Mark reference as numeric (`#`).\n characterReferenceMarkerNumeric: 'characterReferenceMarkerNumeric',\n\n // Mark reference as numeric (`x` or `X`).\n characterReferenceMarkerHexadecimal: 'characterReferenceMarkerHexadecimal',\n\n // Value of character reference w/o markers (`amp`, `8800`, or `1D306`).\n characterReferenceValue: 'characterReferenceValue',\n\n // Whole fenced code:\n //\n // ````markdown\n // ```js\n // alert(1)\n // ```\n // ````\n codeFenced: 'codeFenced',\n\n // A fenced code fence, including whitespace, sequence, info, and meta\n // (` ```js `).\n codeFencedFence: 'codeFencedFence',\n\n // Sequence of grave accent or tilde characters (` ``` `) in a fence.\n codeFencedFenceSequence: 'codeFencedFenceSequence',\n\n // Info word (`js`) in a fence.\n // Includes string.\n codeFencedFenceInfo: 'codeFencedFenceInfo',\n\n // Meta words (`highlight=\"1\"`) in a fence.\n // Includes string.\n codeFencedFenceMeta: 'codeFencedFenceMeta',\n\n // A line of code.\n codeFlowValue: 'codeFlowValue',\n\n // Whole indented code:\n //\n // ```markdown\n // alert(1)\n // ```\n //\n // Includes `lineEnding`, `linePrefix`, and `codeFlowValue`.\n codeIndented: 'codeIndented',\n\n // A text code (``` `alpha` ```).\n // Includes `codeTextSequence`, `codeTextData`, `lineEnding`, and can include\n // `codeTextPadding`.\n codeText: 'codeText',\n\n codeTextData: 'codeTextData',\n\n // A space or line ending right after or before a tick.\n codeTextPadding: 'codeTextPadding',\n\n // A text code fence (` `` `).\n codeTextSequence: 'codeTextSequence',\n\n // Whole content:\n //\n // ```markdown\n // [a]: b\n // c\n // =\n // d\n // ```\n //\n // Includes `paragraph` and `definition`.\n content: 'content',\n // Whole definition:\n //\n // ```markdown\n // [micromark]: https://github.com/micromark/micromark\n // ```\n //\n // Includes `definitionLabel`, `definitionMarker`, `whitespace`,\n // `definitionDestination`, and optionally `lineEnding` and `definitionTitle`.\n definition: 'definition',\n\n // Destination of a definition (`https://github.com/micromark/micromark` or\n // `<https://github.com/micromark/micromark>`).\n // Includes `definitionDestinationLiteral` or `definitionDestinationRaw`.\n definitionDestination: 'definitionDestination',\n\n // Enclosed destination of a definition\n // (`<https://github.com/micromark/micromark>`).\n // Includes `definitionDestinationLiteralMarker` and optionally\n // `definitionDestinationString`.\n definitionDestinationLiteral: 'definitionDestinationLiteral',\n\n // Markers of an enclosed definition destination (`<` or `>`).\n definitionDestinationLiteralMarker: 'definitionDestinationLiteralMarker',\n\n // Unenclosed destination of a definition\n // (`https://github.com/micromark/micromark`).\n // Includes `definitionDestinationString`.\n definitionDestinationRaw: 'definitionDestinationRaw',\n\n // Text in an destination (`https://github.com/micromark/micromark`).\n // Includes string.\n definitionDestinationString: 'definitionDestinationString',\n\n // Label of a definition (`[micromark]`).\n // Includes `definitionLabelMarker` and `definitionLabelString`.\n definitionLabel: 'definitionLabel',\n\n // Markers of a definition label (`[` or `]`).\n definitionLabelMarker: 'definitionLabelMarker',\n\n // Value of a definition label (`micromark`).\n // Includes string.\n definitionLabelString: 'definitionLabelString',\n\n // Marker between a label and a destination (`:`).\n definitionMarker: 'definitionMarker',\n\n // Title of a definition (`\"x\"`, `'y'`, or `(z)`).\n // Includes `definitionTitleMarker` and optionally `definitionTitleString`.\n definitionTitle: 'definitionTitle',\n\n // Marker around a title of a definition (`\"`, `'`, `(`, or `)`).\n definitionTitleMarker: 'definitionTitleMarker',\n\n // Data without markers in a title (`z`).\n // Includes string.\n definitionTitleString: 'definitionTitleString',\n\n // Emphasis (`*alpha*`).\n // Includes `emphasisSequence` and `emphasisText`.\n emphasis: 'emphasis',\n\n // Sequence of emphasis markers (`*` or `_`).\n emphasisSequence: 'emphasisSequence',\n\n // Emphasis text (`alpha`).\n // Includes text.\n emphasisText: 'emphasisText',\n\n // The character escape marker (`\\`).\n escapeMarker: 'escapeMarker',\n\n // A hard break created with a backslash (`\\\\n`).\n // Note: does not include the line ending.\n hardBreakEscape: 'hardBreakEscape',\n\n // A hard break created with trailing spaces (` \\n`).\n // Does not include the line ending.\n hardBreakTrailing: 'hardBreakTrailing',\n\n // Flow HTML:\n //\n // ```markdown\n // <div\n // ```\n //\n // Inlcudes `lineEnding`, `htmlFlowData`.\n htmlFlow: 'htmlFlow',\n\n htmlFlowData: 'htmlFlowData',\n\n // HTML in text (the tag in `a <i> b`).\n // Includes `lineEnding`, `htmlTextData`.\n htmlText: 'htmlText',\n\n htmlTextData: 'htmlTextData',\n\n // Whole image (`![alpha](bravo)`, `![alpha][bravo]`, `![alpha][]`, or\n // `![alpha]`).\n // Includes `label` and an optional `resource` or `reference`.\n image: 'image',\n\n // Whole link label (`[*alpha*]`).\n // Includes `labelLink` or `labelImage`, `labelText`, and `labelEnd`.\n label: 'label',\n\n // Text in an label (`*alpha*`).\n // Includes text.\n labelText: 'labelText',\n\n // Start a link label (`[`).\n // Includes a `labelMarker`.\n labelLink: 'labelLink',\n\n // Start an image label (`![`).\n // Includes `labelImageMarker` and `labelMarker`.\n labelImage: 'labelImage',\n\n // Marker of a label (`[` or `]`).\n labelMarker: 'labelMarker',\n\n // Marker to start an image (`!`).\n labelImageMarker: 'labelImageMarker',\n\n // End a label (`]`).\n // Includes `labelMarker`.\n labelEnd: 'labelEnd',\n\n // Whole link (`[alpha](bravo)`, `[alpha][bravo]`, `[alpha][]`, or `[alpha]`).\n // Includes `label` and an optional `resource` or `reference`.\n link: 'link',\n\n // Whole paragraph:\n //\n // ```markdown\n // alpha\n // bravo.\n // ```\n //\n // Includes text.\n paragraph: 'paragraph',\n\n // A reference (`[alpha]` or `[]`).\n // Includes `referenceMarker` and an optional `referenceString`.\n reference: 'reference',\n\n // A reference marker (`[` or `]`).\n referenceMarker: 'referenceMarker',\n\n // Reference text (`alpha`).\n // Includes string.\n referenceString: 'referenceString',\n\n // A resource (`(https://example.com \"alpha\")`).\n // Includes `resourceMarker`, an optional `resourceDestination` with an optional\n // `whitespace` and `resourceTitle`.\n resource: 'resource',\n\n // A resource destination (`https://example.com`).\n // Includes `resourceDestinationLiteral` or `resourceDestinationRaw`.\n resourceDestination: 'resourceDestination',\n\n // A literal resource destination (`<https://example.com>`).\n // Includes `resourceDestinationLiteralMarker` and optionally\n // `resourceDestinationString`.\n resourceDestinationLiteral: 'resourceDestinationLiteral',\n\n // A resource destination marker (`<` or `>`).\n resourceDestinationLiteralMarker: 'resourceDestinationLiteralMarker',\n\n // A raw resource destination (`https://example.com`).\n // Includes `resourceDestinationString`.\n resourceDestinationRaw: 'resourceDestinationRaw',\n\n // Resource destination text (`https://example.com`).\n // Includes string.\n resourceDestinationString: 'resourceDestinationString',\n\n // A resource marker (`(` or `)`).\n resourceMarker: 'resourceMarker',\n\n // A resource title (`\"alpha\"`, `'alpha'`, or `(alpha)`).\n // Includes `resourceTitleMarker` and optionally `resourceTitleString`.\n resourceTitle: 'resourceTitle',\n\n // A resource title marker (`\"`, `'`, `(`, or `)`).\n resourceTitleMarker: 'resourceTitleMarker',\n\n // Resource destination title (`alpha`).\n // Includes string.\n resourceTitleString: 'resourceTitleString',\n\n // Whole setext heading:\n //\n // ```markdown\n // alpha\n // bravo\n // =====\n // ```\n //\n // Includes `setextHeadingText`, `lineEnding`, `linePrefix`, and\n // `setextHeadingLine`.\n setextHeading: 'setextHeading',\n\n // Content in a setext heading (`alpha\\nbravo`).\n // Includes text.\n setextHeadingText: 'setextHeadingText',\n\n // Underline in a setext heading, including whitespace suffix (`==`).\n // Includes `setextHeadingLineSequence`.\n setextHeadingLine: 'setextHeadingLine',\n\n // Sequence of equals or dash characters in underline in a setext heading (`-`).\n setextHeadingLineSequence: 'setextHeadingLineSequence',\n\n // Strong (`**alpha**`).\n // Includes `strongSequence` and `strongText`.\n strong: 'strong',\n\n // Sequence of strong markers (`**` or `__`).\n strongSequence: 'strongSequence',\n\n // Strong text (`alpha`).\n // Includes text.\n strongText: 'strongText',\n\n // Whole thematic break:\n //\n // ```markdown\n // * * *\n // ```\n //\n // Includes `thematicBreakSequence` and `whitespace`.\n thematicBreak: 'thematicBreak',\n\n // A sequence of one or more thematic break markers (`***`).\n thematicBreakSequence: 'thematicBreakSequence',\n\n // Whole block quote:\n //\n // ```markdown\n // > a\n // >\n // > b\n // ```\n //\n // Includes `blockQuotePrefix` and flow.\n blockQuote: 'blockQuote',\n // The `>` or `> ` of a block quote.\n blockQuotePrefix: 'blockQuotePrefix',\n // The `>` of a block quote prefix.\n blockQuoteMarker: 'blockQuoteMarker',\n // The optional ` ` of a block quote prefix.\n blockQuotePrefixWhitespace: 'blockQuotePrefixWhitespace',\n\n // Whole ordered list:\n //\n // ```markdown\n // 1. a\n // b\n // ```\n //\n // Includes `listItemPrefix`, flow, and optionally `listItemIndent` on further\n // lines.\n listOrdered: 'listOrdered',\n\n // Whole unordered list:\n //\n // ```markdown\n // - a\n // b\n // ```\n //\n // Includes `listItemPrefix`, flow, and optionally `listItemIndent` on further\n // lines.\n listUnordered: 'listUnordered',\n\n // The indent of further list item lines.\n listItemIndent: 'listItemIndent',\n\n // A marker, as in, `*`, `+`, `-`, `.`, or `)`.\n listItemMarker: 'listItemMarker',\n\n // The thing that starts a list item, such as `1. `.\n // Includes `listItemValue` if ordered, `listItemMarker`, and\n // `listItemPrefixWhitespace` (unless followed by a line ending).\n listItemPrefix: 'listItemPrefix',\n\n // The whitespace after a marker.\n listItemPrefixWhitespace: 'listItemPrefixWhitespace',\n\n // The numerical value of an ordered item.\n listItemValue: 'listItemValue',\n\n // Internal types used for subtokenizers, compiled away\n chunkDocument: 'chunkDocument',\n chunkContent: 'chunkContent',\n chunkFlow: 'chunkFlow',\n chunkText: 'chunkText',\n chunkString: 'chunkString'\n})\n","// Generated code.\n\nfunction isAmbiguous(x) {\n\treturn x === 0xA1\n\t\t|| x === 0xA4\n\t\t|| x === 0xA7\n\t\t|| x === 0xA8\n\t\t|| x === 0xAA\n\t\t|| x === 0xAD\n\t\t|| x === 0xAE\n\t\t|| x >= 0xB0 && x <= 0xB4\n\t\t|| x >= 0xB6 && x <= 0xBA\n\t\t|| x >= 0xBC && x <= 0xBF\n\t\t|| x === 0xC6\n\t\t|| x === 0xD0\n\t\t|| x === 0xD7\n\t\t|| x === 0xD8\n\t\t|| x >= 0xDE && x <= 0xE1\n\t\t|| x === 0xE6\n\t\t|| x >= 0xE8 && x <= 0xEA\n\t\t|| x === 0xEC\n\t\t|| x === 0xED\n\t\t|| x === 0xF0\n\t\t|| x === 0xF2\n\t\t|| x === 0xF3\n\t\t|| x >= 0xF7 && x <= 0xFA\n\t\t|| x === 0xFC\n\t\t|| x === 0xFE\n\t\t|| x === 0x101\n\t\t|| x === 0x111\n\t\t|| x === 0x113\n\t\t|| x === 0x11B\n\t\t|| x === 0x126\n\t\t|| x === 0x127\n\t\t|| x === 0x12B\n\t\t|| x >= 0x131 && x <= 0x133\n\t\t|| x === 0x138\n\t\t|| x >= 0x13F && x <= 0x142\n\t\t|| x === 0x144\n\t\t|| x >= 0x148 && x <= 0x14B\n\t\t|| x === 0x14D\n\t\t|| x === 0x152\n\t\t|| x === 0x153\n\t\t|| x === 0x166\n\t\t|| x === 0x167\n\t\t|| x === 0x16B\n\t\t|| x === 0x1CE\n\t\t|| x === 0x1D0\n\t\t|| x === 0x1D2\n\t\t|| x === 0x1D4\n\t\t|| x === 0x1D6\n\t\t|| x === 0x1D8\n\t\t|| x === 0x1DA\n\t\t|| x === 0x1DC\n\t\t|| x === 0x251\n\t\t|| x === 0x261\n\t\t|| x === 0x2C4\n\t\t|| x === 0x2C7\n\t\t|| x >= 0x2C9 && x <= 0x2CB\n\t\t|| x === 0x2CD\n\t\t|| x === 0x2D0\n\t\t|| x >= 0x2D8 && x <= 0x2DB\n\t\t|| x === 0x2DD\n\t\t|| x === 0x2DF\n\t\t|| x >= 0x300 && x <= 0x36F\n\t\t|| x >= 0x391 && x <= 0x3A1\n\t\t|| x >= 0x3A3 && x <= 0x3A9\n\t\t|| x >= 0x3B1 && x <= 0x3C1\n\t\t|| x >= 0x3C3 && x <= 0x3C9\n\t\t|| x === 0x401\n\t\t|| x >= 0x410 && x <= 0x44F\n\t\t|| x === 0x451\n\t\t|| x === 0x2010\n\t\t|| x >= 0x2013 && x <= 0x2016\n\t\t|| x === 0x2018\n\t\t|| x === 0x2019\n\t\t|| x === 0x201C\n\t\t|| x === 0x201D\n\t\t|| x >= 0x2020 && x <= 0x2022\n\t\t|| x >= 0x2024 && x <= 0x2027\n\t\t|| x === 0x2030\n\t\t|| x === 0x2032\n\t\t|| x === 0x2033\n\t\t|| x === 0x2035\n\t\t|| x === 0x203B\n\t\t|| x === 0x203E\n\t\t|| x === 0x2074\n\t\t|| x === 0x207F\n\t\t|| x >= 0x2081 && x <= 0x2084\n\t\t|| x === 0x20AC\n\t\t|| x === 0x2103\n\t\t|| x === 0x2105\n\t\t|| x === 0x2109\n\t\t|| x === 0x2113\n\t\t|| x === 0x2116\n\t\t|| x === 0x2121\n\t\t|| x === 0x2122\n\t\t|| x === 0x2126\n\t\t|| x === 0x212B\n\t\t|| x === 0x2153\n\t\t|| x === 0x2154\n\t\t|| x >= 0x215B && x <= 0x215E\n\t\t|| x >= 0x2160 && x <= 0x216B\n\t\t|| x >= 0x2170 && x <= 0x2179\n\t\t|| x === 0x2189\n\t\t|| x >= 0x2190 && x <= 0x2199\n\t\t|| x === 0x21B8\n\t\t|| x === 0x21B9\n\t\t|| x === 0x21D2\n\t\t|| x === 0x21D4\n\t\t|| x === 0x21E7\n\t\t|| x === 0x2200\n\t\t|| x === 0x2202\n\t\t|| x === 0x2203\n\t\t|| x === 0x2207\n\t\t|| x === 0x2208\n\t\t|| x === 0x220B\n\t\t|| x === 0x220F\n\t\t|| x === 0x2211\n\t\t|| x === 0x2215\n\t\t|| x === 0x221A\n\t\t|| x >= 0x221D && x <= 0x2220\n\t\t|| x === 0x2223\n\t\t|| x === 0x2225\n\t\t|| x >= 0x2227 && x <= 0x222C\n\t\t|| x === 0x222E\n\t\t|| x >= 0x2234 && x <= 0x2237\n\t\t|| x === 0x223C\n\t\t|| x === 0x223D\n\t\t|| x === 0x2248\n\t\t|| x === 0x224C\n\t\t|| x === 0x2252\n\t\t|| x === 0x2260\n\t\t|| x === 0x2261\n\t\t|| x >= 0x2264 && x <= 0x2267\n\t\t|| x === 0x226A\n\t\t|| x === 0x226B\n\t\t|| x === 0x226E\n\t\t|| x === 0x226F\n\t\t|| x === 0x2282\n\t\t|| x === 0x2283\n\t\t|| x === 0x2286\n\t\t|| x === 0x2287\n\t\t|| x === 0x2295\n\t\t|| x === 0x2299\n\t\t|| x === 0x22A5\n\t\t|| x === 0x22BF\n\t\t|| x === 0x2312\n\t\t|| x >= 0x2460 && x <= 0x24E9\n\t\t|| x >= 0x24EB && x <= 0x254B\n\t\t|| x >= 0x2550 && x <= 0x2573\n\t\t|| x >= 0x2580 && x <= 0x258F\n\t\t|| x >= 0x2592 && x <= 0x2595\n\t\t|| x === 0x25A0\n\t\t|| x === 0x25A1\n\t\t|| x >= 0x25A3 && x <= 0x25A9\n\t\t|| x === 0x25B2\n\t\t|| x === 0x25B3\n\t\t|| x === 0x25B6\n\t\t|| x === 0x25B7\n\t\t|| x === 0x25BC\n\t\t|| x === 0x25BD\n\t\t|| x === 0x25C0\n\t\t|| x === 0x25C1\n\t\t|| x >= 0x25C6 && x <= 0x25C8\n\t\t|| x === 0x25CB\n\t\t|| x >= 0x25CE && x <= 0x25D1\n\t\t|| x >= 0x25E2 && x <= 0x25E5\n\t\t|| x === 0x25EF\n\t\t|| x === 0x2605\n\t\t|| x === 0x2606\n\t\t|| x === 0x2609\n\t\t|| x === 0x260E\n\t\t|| x === 0x260F\n\t\t|| x === 0x261C\n\t\t|| x === 0x261E\n\t\t|| x === 0x2640\n\t\t|| x === 0x2642\n\t\t|| x === 0x2660\n\t\t|| x === 0x2661\n\t\t|| x >= 0x2663 && x <= 0x2665\n\t\t|| x >= 0x2667 && x <= 0x266A\n\t\t|| x === 0x266C\n\t\t|| x === 0x266D\n\t\t|| x === 0x266F\n\t\t|| x === 0x269E\n\t\t|| x === 0x269F\n\t\t|| x === 0x26BF\n\t\t|| x >= 0x26C6 && x <= 0x26CD\n\t\t|| x >= 0x26CF && x <= 0x26D3\n\t\t|| x >= 0x26D5 && x <= 0x26E1\n\t\t|| x === 0x26E3\n\t\t|| x === 0x26E8\n\t\t|| x === 0x26E9\n\t\t|| x >= 0x26EB && x <= 0x26F1\n\t\t|| x === 0x26F4\n\t\t|| x >= 0x26F6 && x <= 0x26F9\n\t\t|| x === 0x26FB\n\t\t|| x === 0x26FC\n\t\t|| x === 0x26FE\n\t\t|| x === 0x26FF\n\t\t|| x === 0x273D\n\t\t|| x >= 0x2776 && x <= 0x277F\n\t\t|| x >= 0x2B56 && x <= 0x2B59\n\t\t|| x >= 0x3248 && x <= 0x324F\n\t\t|| x >= 0xE000 && x <= 0xF8FF\n\t\t|| x >= 0xFE00 && x <= 0xFE0F\n\t\t|| x === 0xFFFD\n\t\t|| x >= 0x1F100 && x <= 0x1F10A\n\t\t|| x >= 0x1F110 && x <= 0x1F12D\n\t\t|| x >= 0x1F130 && x <= 0x1F169\n\t\t|| x >= 0x1F170 && x <= 0x1F18D\n\t\t|| x === 0x1F18F\n\t\t|| x === 0x1F190\n\t\t|| x >= 0x1F19B && x <= 0x1F1AC\n\t\t|| x >= 0xE0100 && x <= 0xE01EF\n\t\t|| x >= 0xF0000 && x <= 0xFFFFD\n\t\t|| x >= 0x100000 && x <= 0x10FFFD;\n}\n\nfunction isFullWidth(x) {\n\treturn x === 0x3000\n\t\t|| x >= 0xFF01 && x <= 0xFF60\n\t\t|| x >= 0xFFE0 && x <= 0xFFE6;\n}\n\nfunction isWide(x) {\n\treturn x >= 0x1100 && x <= 0x115F\n\t\t|| x === 0x231A\n\t\t|| x === 0x231B\n\t\t|| x === 0x2329\n\t\t|| x === 0x232A\n\t\t|| x >= 0x23E9 && x <= 0x23EC\n\t\t|| x === 0x23F0\n\t\t|| x === 0x23F3\n\t\t|| x === 0x25FD\n\t\t|| x === 0x25FE\n\t\t|| x === 0x2614\n\t\t|| x === 0x2615\n\t\t|| x >= 0x2630 && x <= 0x2637\n\t\t|| x >= 0x2648 && x <= 0x2653\n\t\t|| x === 0x267F\n\t\t|| x >= 0x268A && x <= 0x268F\n\t\t|| x === 0x2693\n\t\t|| x === 0x26A1\n\t\t|| x === 0x26AA\n\t\t|| x === 0x26AB\n\t\t|| x === 0x26BD\n\t\t|| x === 0x26BE\n\t\t|| x === 0x26C4\n\t\t|| x === 0x26C5\n\t\t|| x === 0x26CE\n\t\t|| x === 0x26D4\n\t\t|| x === 0x26EA\n\t\t|| x === 0x26F2\n\t\t|| x === 0x26F3\n\t\t|| x === 0x26F5\n\t\t|| x === 0x26FA\n\t\t|| x === 0x26FD\n\t\t|| x === 0x2705\n\t\t|| x === 0x270A\n\t\t|| x === 0x270B\n\t\t|| x === 0x2728\n\t\t|| x === 0x274C\n\t\t|| x === 0x274E\n\t\t|| x >= 0x2753 && x <= 0x2755\n\t\t|| x === 0x2757\n\t\t|| x >= 0x2795 && x <= 0x2797\n\t\t|| x === 0x27B0\n\t\t|| x === 0x27BF\n\t\t|| x === 0x2B1B\n\t\t|| x === 0x2B1C\n\t\t|| x === 0x2B50\n\t\t|| x === 0x2B55\n\t\t|| x >= 0x2E80 && x <= 0x2E99\n\t\t|| x >= 0x2E9B && x <= 0x2EF3\n\t\t|| x >= 0x2F00 && x <= 0x2FD5\n\t\t|| x >= 0x2FF0 && x <= 0x2FFF\n\t\t|| x >= 0x3001 && x <= 0x303E\n\t\t|| x >= 0x3041 && x <= 0x3096\n\t\t|| x >= 0x3099 && x <= 0x30FF\n\t\t|| x >= 0x3105 && x <= 0x312F\n\t\t|| x >= 0x3131 && x <= 0x318E\n\t\t|| x >= 0x3190 && x <= 0x31E5\n\t\t|| x >= 0x31EF && x <= 0x321E\n\t\t|| x >= 0x3220 && x <= 0x3247\n\t\t|| x >= 0x3250 && x <= 0xA48C\n\t\t|| x >= 0xA490 && x <= 0xA4C6\n\t\t|| x >= 0xA960 && x <= 0xA97C\n\t\t|| x >= 0xAC00 && x <= 0xD7A3\n\t\t|| x >= 0xF900 && x <= 0xFAFF\n\t\t|| x >= 0xFE10 && x <= 0xFE19\n\t\t|| x >= 0xFE30 && x <= 0xFE52\n\t\t|| x >= 0xFE54 && x <= 0xFE66\n\t\t|| x >= 0xFE68 && x <= 0xFE6B\n\t\t|| x >= 0x16FE0 && x <= 0x16FE4\n\t\t|| x >= 0x16FF0 && x <= 0x16FF6\n\t\t|| x >= 0x17000 && x <= 0x18CD5\n\t\t|| x >= 0x18CFF && x <= 0x18D1E\n\t\t|| x >= 0x18D80 && x <= 0x18DF2\n\t\t|| x >= 0x1AFF0 && x <= 0x1AFF3\n\t\t|| x >= 0x1AFF5 && x <= 0x1AFFB\n\t\t|| x === 0x1AFFD\n\t\t|| x === 0x1AFFE\n\t\t|| x >= 0x1B000 && x <= 0x1B122\n\t\t|| x === 0x1B132\n\t\t|| x >= 0x1B150 && x <= 0x1B152\n\t\t|| x === 0x1B155\n\t\t|| x >= 0x1B164 && x <= 0x1B167\n\t\t|| x >= 0x1B170 && x <= 0x1B2FB\n\t\t|| x >= 0x1D300 && x <= 0x1D356\n\t\t|| x >= 0x1D360 && x <= 0x1D376\n\t\t|| x === 0x1F004\n\t\t|| x === 0x1F0CF\n\t\t|| x === 0x1F18E\n\t\t|| x >= 0x1F191 && x <= 0x1F19A\n\t\t|| x >= 0x1F200 && x <= 0x1F202\n\t\t|| x >= 0x1F210 && x <= 0x1F23B\n\t\t|| x >= 0x1F240 && x <= 0x1F248\n\t\t|| x === 0x1F250\n\t\t|| x === 0x1F251\n\t\t|| x >= 0x1F260 && x <= 0x1F265\n\t\t|| x >= 0x1F300 && x <= 0x1F320\n\t\t|| x >= 0x1F32D && x <= 0x1F335\n\t\t|| x >= 0x1F337 && x <= 0x1F37C\n\t\t|| x >= 0x1F37E && x <= 0x1F393\n\t\t|| x >= 0x1F3A0 && x <= 0x1F3CA\n\t\t|| x >= 0x1F3CF && x <= 0x1F3D3\n\t\t|| x >= 0x1F3E0 && x <= 0x1F3F0\n\t\t|| x === 0x1F3F4\n\t\t|| x >= 0x1F3F8 && x <= 0x1F43E\n\t\t|| x === 0x1F440\n\t\t|| x >= 0x1F442 && x <= 0x1F4FC\n\t\t|| x >= 0x1F4FF && x <= 0x1F53D\n\t\t|| x >= 0x1F54B && x <= 0x1F54E\n\t\t|| x >= 0x1F550 && x <= 0x1F567\n\t\t|| x === 0x1F57A\n\t\t|| x === 0x1F595\n\t\t|| x === 0x1F596\n\t\t|| x === 0x1F5A4\n\t\t|| x >= 0x1F5FB && x <= 0x1F64F\n\t\t|| x >= 0x1F680 && x <= 0x1F6C5\n\t\t|| x === 0x1F6CC\n\t\t|| x >= 0x1F6D0 && x <= 0x1F6D2\n\t\t|| x >= 0x1F6D5 && x <= 0x1F6D8\n\t\t|| x >= 0x1F6DC && x <= 0x1F6DF\n\t\t|| x === 0x1F6EB\n\t\t|| x === 0x1F6EC\n\t\t|| x >= 0x1F6F4 && x <= 0x1F6FC\n\t\t|| x >= 0x1F7E0 && x <= 0x1F7EB\n\t\t|| x === 0x1F7F0\n\t\t|| x >= 0x1F90C && x <= 0x1F93A\n\t\t|| x >= 0x1F93C && x <= 0x1F945\n\t\t|| x >= 0x1F947 && x <= 0x1F9FF\n\t\t|| x >= 0x1FA70 && x <= 0x1FA7C\n\t\t|| x >= 0x1FA80 && x <= 0x1FA8A\n\t\t|| x >= 0x1FA8E && x <= 0x1FAC6\n\t\t|| x === 0x1FAC8\n\t\t|| x >= 0x1FACD && x <= 0x1FADC\n\t\t|| x >= 0x1FADF && x <= 0x1FAEA\n\t\t|| x >= 0x1FAEF && x <= 0x1FAF8\n\t\t|| x >= 0x20000 && x <= 0x2FFFD\n\t\t|| x >= 0x30000 && x <= 0x3FFFD;\n}\n\nfunction getCategory(x) {\n\tif (isAmbiguous(x)) return 'ambiguous';\n\n\tif (isFullWidth(x)) return 'fullwidth';\n\n\tif (\n\t\tx === 0x20A9\n\t\t|| x >= 0xFF61 && x <= 0xFFBE\n\t\t|| x >= 0xFFC2 && x <= 0xFFC7\n\t\t|| x >= 0xFFCA && x <= 0xFFCF\n\t\t|| x >= 0xFFD2 && x <= 0xFFD7\n\t\t|| x >= 0xFFDA && x <= 0xFFDC\n\t\t|| x >= 0xFFE8 && x <= 0xFFEE\n\t) {\n\t\treturn 'halfwidth';\n\t}\n\n\tif (\n\t\tx >= 0x20 && x <= 0x7E\n\t\t|| x === 0xA2\n\t\t|| x === 0xA3\n\t\t|| x === 0xA5\n\t\t|| x === 0xA6\n\t\t|| x === 0xAC\n\t\t|| x === 0xAF\n\t\t|| x >= 0x27E6 && x <= 0x27ED\n\t\t|| x === 0x2985\n\t\t|| x === 0x2986\n\t) {\n\t\treturn 'narrow';\n\t}\n\n\tif (isWide(x)) return 'wide';\n\n\treturn 'neutral';\n}\n\nexport {isAmbiguous, isFullWidth, isWide, getCategory};\n","import {getCategory, isAmbiguous, isFullWidth, isWide} from './lookup.js';\n\nfunction validate(codePoint) {\n\tif (!Number.isSafeInteger(codePoint)) {\n\t\tthrow new TypeError(`Expected a code point, got \\`${typeof codePoint}\\`.`);\n\t}\n}\n\nexport function eastAsianWidthType(codePoint) {\n\tvalidate(codePoint);\n\n\treturn getCategory(codePoint);\n}\n\nexport function eastAsianWidth(codePoint, {ambiguousAsWide = false} = {}) {\n\tvalidate(codePoint);\n\n\tif (\n\t\tisFullWidth(codePoint)\n\t\t|| isWide(codePoint)\n\t\t|| (ambiguousAsWide && isAmbiguous(codePoint))\n\t) {\n\t\treturn 2;\n\t}\n\n\treturn 1;\n}\n\n// Private exports for https://github.com/sindresorhus/is-fullwidth-code-point\nexport {isFullWidth as _isFullWidth, isWide as _isWide} from './lookup.js';\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n\n// src/categoryUtil.ts\nimport { constants as constants2 } from \"micromark-util-symbol\";\n\n// src/classifyCharacter.ts\nimport { markdownLineEndingOrSpace } from \"micromark-util-character\";\nimport { codes, constants } from \"micromark-util-symbol\";\n\n// src/characterWithNonBmp.ts\nimport { eastAsianWidthType } from \"get-east-asian-width\";\nfunction isEmoji(uc) {\n return /^\\p{Emoji_Presentation}/u.test(String.fromCodePoint(uc));\n}\nfunction cjkOrIvs(uc) {\n if (!uc || uc < 4352) {\n return false;\n }\n const eaw = eastAsianWidthType(uc);\n switch (eaw) {\n case \"fullwidth\":\n case \"halfwidth\":\n return true;\n // never be emoji\n case \"wide\":\n return !isEmoji(uc);\n case \"narrow\":\n return false;\n case \"ambiguous\":\n return 917760 <= uc && uc <= 917999 ? null : false;\n case \"neutral\":\n return /^\\p{sc=Hangul}/u.test(String.fromCodePoint(uc));\n }\n}\nfunction isCjkAmbiguousPunctuation(main, vs) {\n if (vs !== 65025 || !main || main < 8216) return false;\n return main === 8216 || main === 8217 || main === 8220 || main === 8221;\n}\nfunction nonEmojiGeneralUseVS(code) {\n return code !== null && code >= 65024 && code <= 65038;\n}\nvar unicodePunctuation = regexCheck(/\\p{P}|\\p{S}/u);\nvar unicodeWhitespace = regexCheck(/\\s/);\nfunction regexCheck(regex) {\n return check;\n function check(code) {\n return code !== null && code > -1 && regex.test(String.fromCodePoint(code));\n }\n}\n\n// src/classifyCharacter.ts\nvar constantsEx;\n((constantsEx2) => {\n constantsEx2.spaceOrPunctuation = 3;\n constantsEx2.cjk = 4096;\n constantsEx2.cjkPunctuation = 4098;\n constantsEx2.ivs = 8192;\n constantsEx2.cjkOrIvs = 12288;\n constantsEx2.nonEmojiGeneralUseVS = 16384;\n constantsEx2.variationSelector = 24576;\n constantsEx2.ivsToCjkRightShift = 1;\n})(constantsEx || (constantsEx = {}));\nfunction classifyCharacter(code) {\n if (code === codes.eof || markdownLineEndingOrSpace(code) || unicodeWhitespace(code)) {\n return constants.characterGroupWhitespace;\n }\n let value = 0;\n if (code >= 4352) {\n if (nonEmojiGeneralUseVS(code)) {\n return constantsEx.nonEmojiGeneralUseVS;\n }\n switch (cjkOrIvs(code)) {\n case null:\n return constantsEx.ivs;\n case true:\n value |= constantsEx.cjk;\n break;\n }\n }\n if (unicodePunctuation(code)) {\n value |= constants.characterGroupPunctuation;\n }\n return value;\n}\nfunction classifyPrecedingCharacter(before, get2Previous, previous) {\n if (!isNonEmojiGeneralUseVS(before)) {\n return before;\n }\n const twoPrevious = get2Previous();\n const twoBefore = classifyCharacter(twoPrevious);\n return !twoPrevious || isUnicodeWhitespace(twoBefore) ? before : isCjkAmbiguousPunctuation(twoPrevious, previous) ? constantsEx.cjkPunctuation : stripIvs(twoBefore);\n}\nfunction stripIvs(twoBefore) {\n return twoBefore & ~constantsEx.ivs;\n}\n\n// src/categoryUtil.ts\nfunction isUnicodeWhitespace(category) {\n return Boolean(category & constants2.characterGroupWhitespace);\n}\nfunction isNonCjkPunctuation(category) {\n return (category & constantsEx.cjkPunctuation) === constants2.characterGroupPunctuation;\n}\nfunction isCjk(category) {\n return Boolean(category & constantsEx.cjk);\n}\nfunction isIvs(category) {\n return category === constantsEx.ivs;\n}\nfunction isCjkOrIvs(category) {\n return Boolean(category & constantsEx.cjkOrIvs);\n}\nfunction isNonEmojiGeneralUseVS(category) {\n return category === constantsEx.nonEmojiGeneralUseVS;\n}\nfunction isSpaceOrPunctuation(category) {\n return Boolean(category & constantsEx.spaceOrPunctuation);\n}\n\n// src/codeUtil.ts\nfunction isCodeHighSurrogate(code) {\n return Boolean(code && code >= 55296 && code <= 56319);\n}\nfunction isCodeLowSurrogate(code) {\n return Boolean(code && code >= 56320 && code <= 57343);\n}\nfunction tryGetGenuinePreviousCode(code, nowPoint, sliceSerialize) {\n if (nowPoint._bufferIndex < 2) {\n return code;\n }\n const previousBuffer = sliceSerialize({\n // take 2 characters (code units)\n start: { ...nowPoint, _bufferIndex: nowPoint._bufferIndex - 2 },\n end: nowPoint\n });\n const previousCandidate = previousBuffer.codePointAt(0);\n return previousCandidate && previousCandidate >= 65536 ? previousCandidate : code;\n}\nfunction tryGetCodeTwoBefore(previousCode, nowPoint, sliceSerialize) {\n const previousWidth = previousCode >= 65536 ? 2 : 1;\n if (nowPoint._bufferIndex < 1 + previousWidth) {\n return null;\n }\n const idealStart = nowPoint._bufferIndex - previousWidth - 2;\n const twoPreviousBuffer = sliceSerialize({\n // take 1--2 character\n start: {\n ...nowPoint,\n _bufferIndex: idealStart >= 0 ? idealStart : 0\n },\n end: {\n ...nowPoint,\n _bufferIndex: nowPoint._bufferIndex - previousWidth\n }\n });\n const twoPreviousLast = twoPreviousBuffer.charCodeAt(\n twoPreviousBuffer.length - 1\n );\n if (Number.isNaN(twoPreviousLast)) {\n return null;\n }\n if (twoPreviousBuffer.length < 2 || twoPreviousLast < 56320 || 57343 < twoPreviousLast) {\n return twoPreviousLast;\n }\n const twoPreviousCandidate = twoPreviousBuffer.codePointAt(0);\n if (twoPreviousCandidate && twoPreviousCandidate >= 65536) {\n return twoPreviousCandidate;\n }\n return twoPreviousLast;\n}\nvar TwoPreviousCode = class {\n /**\n * @see {@link tryGetCodeTwoBefore}\n *\n * @param previousCode a previous code point. Should be greater than 65,535 if it represents a [Supplementary Character](https://www.unicode.org/glossary/#supplementary_character).\n * @param nowPoint `this.now()` (`this` = `TokenizeContext`)\n * @param sliceSerialize `this.sliceSerialize` (`this` = `TokenizeContext`)\n */\n constructor(previousCode, nowPoint, sliceSerialize) {\n this.previousCode = previousCode;\n this.nowPoint = nowPoint;\n this.sliceSerialize = sliceSerialize;\n __publicField(this, \"cachedValue\");\n }\n /**\n * Returns the return value of {@link tryGetCodeTwoBefore}.\n *\n * If the value has not been computed yet, it will be computed and cached.\n *\n * @see {@link tryGetCodeTwoBefore}\n *\n * @returns a value greater than 65,535 if the code point two positions before represents a [Supplementary Character](https://www.unicode.org/glossary/#supplementary_character), a value less than 65,536 for a [BMP Character](https://www.unicode.org/glossary/#bmp_character), or `null` if not found\n */\n value() {\n if (this.cachedValue === void 0) {\n this.cachedValue = tryGetCodeTwoBefore(\n this.previousCode,\n this.nowPoint,\n this.sliceSerialize\n );\n }\n return this.cachedValue;\n }\n};\nfunction tryGetGenuineNextCode(code, nowPoint, sliceSerialize) {\n const nextCandidate = sliceSerialize({\n start: nowPoint,\n end: { ...nowPoint, _bufferIndex: nowPoint._bufferIndex + 2 }\n }).codePointAt(0);\n return nextCandidate && nextCandidate >= 65536 ? nextCandidate : code;\n}\nexport {\n TwoPreviousCode,\n classifyCharacter,\n classifyPrecedingCharacter,\n constantsEx,\n isCjk,\n isCjkOrIvs,\n isCodeHighSurrogate,\n isCodeLowSurrogate,\n isIvs,\n isNonCjkPunctuation,\n isNonEmojiGeneralUseVS,\n isSpaceOrPunctuation,\n isUnicodeWhitespace,\n tryGetCodeTwoBefore,\n tryGetGenuineNextCode,\n tryGetGenuinePreviousCode\n};\n","// src/index.ts\nimport { codes as codes2 } from \"micromark-util-symbol\";\n\n// src/ext/attention.ts\nimport { ok as assert } from \"devlop\";\nimport {\n classifyCharacter,\n classifyPrecedingCharacter,\n isCjk,\n isCjkOrIvs,\n isCodeHighSurrogate,\n isCodeLowSurrogate,\n isNonCjkPunctuation,\n isSpaceOrPunctuation,\n isUnicodeWhitespace,\n TwoPreviousCode,\n tryGetGenuineNextCode,\n tryGetGenuinePreviousCode\n} from \"micromark-extension-cjk-friendly-util\";\nimport { push, splice } from \"micromark-util-chunked\";\nimport { resolveAll } from \"micromark-util-resolve-all\";\nimport { codes, types } from \"micromark-util-symbol\";\nvar attention = {\n name: \"attention\",\n resolveAll: resolveAllAttention,\n tokenize: tokenizeAttention\n};\nfunction resolveAllAttention(events, context) {\n let index = -1;\n let open;\n let group;\n let text;\n let openingSequence;\n let closingSequence;\n let use;\n let nextEvents;\n let offset;\n while (++index < events.length) {\n if (events[index][0] === \"enter\" && events[index][1].type === \"attentionSequence\" && events[index][1]._close) {\n open = index;\n while (open--) {\n if (events[open][0] === \"exit\" && events[open][1].type === \"attentionSequence\" && events[open][1]._open && // If the markers are the same:\n context.sliceSerialize(events[open][1]).charCodeAt(0) === context.sliceSerialize(events[index][1]).charCodeAt(0)) {\n if ((events[open][1]._close || events[index][1]._open) && (events[index][1].end.offset - events[index][1].start.offset) % 3 && !((events[open][1].end.offset - events[open][1].start.offset + events[index][1].end.offset - events[index][1].start.offset) % 3)) {\n continue;\n }\n use = events[open][1].end.offset - events[open][1].start.offset > 1 && events[index][1].end.offset - events[index][1].start.offset > 1 ? 2 : 1;\n const start = { ...events[open][1].end };\n const end = { ...events[index][1].start };\n movePoint(start, -use);\n movePoint(end, use);\n openingSequence = {\n type: use > 1 ? types.strongSequence : types.emphasisSequence,\n start,\n end: { ...events[open][1].end }\n };\n closingSequence = {\n type: use > 1 ? types.strongSequence : types.emphasisSequence,\n start: { ...events[index][1].start },\n end\n };\n text = {\n type: use > 1 ? types.strongText : types.emphasisText,\n start: { ...events[open][1].end },\n end: { ...events[index][1].start }\n };\n group = {\n type: use > 1 ? types.strong : types.emphasis,\n start: { ...openingSequence.start },\n end: { ...closingSequence.end }\n };\n events[open][1].end = { ...openingSequence.start };\n events[index][1].start = { ...closingSequence.end };\n nextEvents = [];\n if (events[open][1].end.offset - events[open][1].start.offset) {\n nextEvents = push(nextEvents, [\n [\"enter\", events[open][1], context],\n [\"exit\", events[open][1], context]\n ]);\n }\n nextEvents = push(nextEvents, [\n [\"enter\", group, context],\n [\"enter\", openingSequence, context],\n [\"exit\", openingSequence, context],\n [\"enter\", text, context]\n ]);\n assert(\n context.parser.constructs.insideSpan.null,\n \"expected `insideSpan` to be populated\"\n );\n nextEvents = push(\n nextEvents,\n resolveAll(\n context.parser.constructs.insideSpan.null,\n events.slice(open + 1, index),\n context\n )\n );\n nextEvents = push(nextEvents, [\n [\"exit\", text, context],\n [\"enter\", closingSequence, context],\n [\"exit\", closingSequence, context],\n [\"exit\", group, context]\n ]);\n if (events[index][1].end.offset - events[index][1].start.offset) {\n offset = 2;\n nextEvents = push(nextEvents, [\n [\"enter\", events[index][1], context],\n [\"exit\", events[index][1], context]\n ]);\n } else {\n offset = 0;\n }\n splice(events, open - 1, index - open + 3, nextEvents);\n index = open + nextEvents.length - offset - 2;\n break;\n }\n }\n }\n }\n index = -1;\n while (++index < events.length) {\n if (events[index][1].type === \"attentionSequence\") {\n events[index][1].type = \"data\";\n }\n }\n return events;\n}\nfunction tokenizeAttention(effects, ok) {\n const attentionMarkers = this.parser.constructs.attentionMarkers.null;\n const { now, sliceSerialize, previous: tentativePrevious } = this;\n const previous = isCodeLowSurrogate(tentativePrevious) ? (\n // second (lower) surrogate likely to be preceded by first (higher) surrogate\n tryGetGenuinePreviousCode(tentativePrevious, now(), sliceSerialize)\n ) : tentativePrevious;\n const before = classifyCharacter(previous);\n const twoPrevious = new TwoPreviousCode(previous, now(), sliceSerialize);\n const beforePrimary = classifyPrecedingCharacter(\n before,\n twoPrevious.value.bind(twoPrevious),\n previous\n );\n let marker;\n return start;\n function start(code) {\n assert(\n code === codes.asterisk || code === codes.underscore,\n \"expected asterisk or underscore\"\n );\n marker = code;\n effects.enter(\"attentionSequence\");\n return inside(code);\n }\n function inside(code) {\n if (code === marker) {\n effects.consume(code);\n return inside;\n }\n const token = effects.exit(\"attentionSequence\");\n const next = isCodeHighSurrogate(code) ? tryGetGenuineNextCode(code, now(), sliceSerialize) : code;\n const after = classifyCharacter(next);\n assert(attentionMarkers, \"expected `attentionMarkers` to be populated\");\n const beforeNonCjkPunctuation = isNonCjkPunctuation(beforePrimary);\n const beforeSpaceOrNonCjkPunctuation = beforeNonCjkPunctuation || isUnicodeWhitespace(beforePrimary);\n const afterNonCjkPunctuation = isNonCjkPunctuation(after);\n const afterSpaceOrNonCjkPunctuation = afterNonCjkPunctuation || isUnicodeWhitespace(after);\n const beforeCjkOrIvs = isCjkOrIvs(beforePrimary);\n const open = !afterSpaceOrNonCjkPunctuation || afterNonCjkPunctuation && (beforeSpaceOrNonCjkPunctuation || beforeCjkOrIvs) || attentionMarkers.includes(code);\n const close = !beforeSpaceOrNonCjkPunctuation || beforeNonCjkPunctuation && (afterSpaceOrNonCjkPunctuation || isCjk(after)) || attentionMarkers.includes(previous);\n token._open = Boolean(\n marker === codes.asterisk ? open : open && (isSpaceOrPunctuation(beforePrimary) || !close)\n );\n token._close = Boolean(\n marker === codes.asterisk ? close : close && (isSpaceOrPunctuation(after) || !open)\n );\n return ok(code);\n }\n}\nfunction movePoint(point, offset) {\n point.column += offset;\n point.offset += offset;\n point._bufferIndex += offset;\n}\n\n// src/index.ts\nfunction cjkFriendlyExtension() {\n return {\n text: {\n [codes2.asterisk]: attention,\n [codes2.underscore]: attention\n },\n insideSpan: { null: [attention] }\n };\n}\nexport {\n cjkFriendlyExtension\n};\n","// src/index.ts\nimport { cjkFriendlyExtension } from \"micromark-extension-cjk-friendly\";\nfunction remarkCjkFriendly() {\n const data = this.data();\n const micromarkExtensions = (\n // biome-ignore lint/suspicious/noAssignInExpressions: base plugin (remark-gfm) already does this\n data.micromarkExtensions || (data.micromarkExtensions = [])\n );\n micromarkExtensions.push(cjkFriendlyExtension());\n}\nexport {\n remarkCjkFriendly as default\n};\n","// src/strikethrough.ts\nimport { ok as assert } from \"devlop\";\nimport {\n classifyCharacter,\n classifyPrecedingCharacter,\n isCjk,\n isCodeHighSurrogate,\n isCodeLowSurrogate,\n isIvs,\n isNonCjkPunctuation,\n isUnicodeWhitespace,\n TwoPreviousCode,\n tryGetGenuineNextCode,\n tryGetGenuinePreviousCode\n} from \"micromark-extension-cjk-friendly-util\";\nimport { splice } from \"micromark-util-chunked\";\nimport { resolveAll } from \"micromark-util-resolve-all\";\nimport { codes, constants, types } from \"micromark-util-symbol\";\nfunction gfmStrikethroughCjkFriendly(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 === void 0) {\n single = true;\n }\n return {\n text: { [codes.tilde]: tokenizer },\n insideSpan: { null: [tokenizer] },\n attentionMarkers: { null: [codes.tilde] }\n };\n function resolveAllStrikethrough(events, context) {\n let index = -1;\n while (++index < events.length) {\n if (events[index][0] === \"enter\" && events[index][1].type === \"strikethroughSequenceTemporary\" && events[index][1]._close) {\n let open = index;\n while (open--) {\n if (events[open][0] === \"exit\" && events[open][1].type === \"strikethroughSequenceTemporary\" && events[open][1]._open && // 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 const strikethrough = {\n type: \"strikethrough\",\n start: Object.assign({}, events[open][1].start),\n end: Object.assign({}, events[index][1].end)\n };\n const text = {\n type: \"strikethroughText\",\n start: Object.assign({}, events[open][1].end),\n end: Object.assign({}, events[index][1].start)\n };\n const nextEvents = [\n [\"enter\", strikethrough, context],\n [\"enter\", events[open][1], context],\n [\"exit\", events[open][1], context],\n [\"enter\", text, context]\n ];\n const insideSpan = context.parser.constructs.insideSpan.null;\n if (insideSpan) {\n splice(\n nextEvents,\n nextEvents.length,\n 0,\n resolveAll(insideSpan, events.slice(open + 1, index), context)\n );\n }\n splice(nextEvents, nextEvents.length, 0, [\n [\"exit\", text, context],\n [\"enter\", events[index][1], context],\n [\"exit\", events[index][1], context],\n [\"exit\", strikethrough, context]\n ]);\n splice(events, open - 1, index - open + 3, nextEvents);\n index = open + nextEvents.length - 2;\n break;\n }\n }\n }\n }\n index = -1;\n while (++index < events.length) {\n if (events[index][1].type === \"strikethroughSequenceTemporary\") {\n events[index][1].type = types.data;\n }\n }\n return events;\n }\n function tokenizeStrikethrough(effects, ok, nok) {\n const { now, sliceSerialize, previous: tentativePrevious } = this;\n const previous = isCodeLowSurrogate(tentativePrevious) ? (\n // second (lower) surrogate likely to be preceded by first (higher) surrogate\n tryGetGenuinePreviousCode(tentativePrevious, now(), sliceSerialize)\n ) : tentativePrevious;\n const before = classifyCharacter(previous);\n const twoPrevious = new TwoPreviousCode(previous, now(), sliceSerialize);\n const beforePrimary = classifyPrecedingCharacter(\n before,\n twoPrevious.value.bind(twoPrevious),\n previous\n );\n const events = this.events;\n let size = 0;\n return start;\n function start(code) {\n assert(code === codes.tilde, \"expected `~`\");\n if (previous === codes.tilde && events[events.length - 1][1].type !== types.characterEscape) {\n return nok(code);\n }\n effects.enter(\"strikethroughSequenceTemporary\");\n return more(code);\n }\n function more(code) {\n const before2 = classifyCharacter(previous);\n if (code === codes.tilde) {\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 next = isCodeHighSurrogate(code) ? tryGetGenuineNextCode(code, now(), sliceSerialize) : code;\n const after = classifyCharacter(next);\n const beforeNonCjkPunctuation = isNonCjkPunctuation(beforePrimary);\n const beforeSpaceOrNonCjkPunctuation = beforeNonCjkPunctuation || isUnicodeWhitespace(beforePrimary);\n const afterNonCjkPunctuation = isNonCjkPunctuation(after);\n const afterSpaceOrNonCjkPunctuation = afterNonCjkPunctuation || isUnicodeWhitespace(after);\n const beforeCjkOrIvs = isCjk(beforePrimary) || isIvs(before2);\n token._open = !afterSpaceOrNonCjkPunctuation || after === constants.attentionSideAfter && (beforeSpaceOrNonCjkPunctuation || beforeCjkOrIvs);\n token._close = !beforeSpaceOrNonCjkPunctuation || before2 === constants.attentionSideAfter && (afterSpaceOrNonCjkPunctuation || isCjk(after));\n return ok(code);\n }\n }\n}\nexport {\n gfmStrikethroughCjkFriendly\n};\n","// src/index.ts\nimport {\n gfmStrikethroughCjkFriendly\n} from \"micromark-extension-cjk-friendly-gfm-strikethrough\";\nfunction remarkGfmStrikethroughCjkFriendly(options) {\n const data = this.data();\n const micromarkExtensions = (\n // biome-ignore lint/suspicious/noAssignInExpressions: base plugin (remark-gfm) already does this\n data.micromarkExtensions || (data.micromarkExtensions = [])\n );\n micromarkExtensions.push(gfmStrikethroughCjkFriendly(options));\n}\nexport {\n remarkGfmStrikethroughCjkFriendly as default\n};\n","import c from'remark-cjk-friendly';import a from'remark-cjk-friendly-gfm-strikethrough';import {visit}from'unist-util-visit';var k=new Set([\"\\u3002\",\"\\uFF0E\",\"\\uFF0C\",\"\\u3001\",\"\\uFF1F\",\"\\uFF01\",\"\\uFF1A\",\"\\uFF1B\",\"\\uFF08\",\"\\uFF09\",\"\\u3010\",\"\\u3011\",\"\\u300C\",\"\\u300D\",\"\\u300E\",\"\\u300F\",\"\\u3008\",\"\\u3009\",\"\\u300A\",\"\\u300B\"]),m=/^(https?:\\/\\/|mailto:|www\\.)/i,f=t=>{if(t.children.length!==1)return false;let r=t.children[0];return r.type===\"text\"&&r.value===t.url},P=t=>{let r=0;for(let e of t){if(k.has(e))return r;r+=e.length;}return null},p=(t,r)=>({...r,url:t,children:[{type:\"text\",value:t}]}),d=t=>({type:\"text\",value:t}),y=()=>t=>{visit(t,\"link\",(r,e,i)=>{if(!i||typeof e!=\"number\"||!f(r)||!m.test(r.url))return;let n=P(r.url);if(n===null||n===0)return;let l=r.url.slice(0,n),u=r.url.slice(n),o=p(l,r),s=d(u);return i.children.splice(e,1,o,s),e+1});};function b(){let t=[c],r=[y,a],e=[...t,...r];return {name:\"cjk\",type:\"cjk\",remarkPluginsBefore:t,remarkPluginsAfter:r,remarkPlugins:e}}var A=b();export{A as cjk,b as createCjkPlugin};","class ShikiError extends Error {\n constructor(message) {\n super(message);\n this.name = \"ShikiError\";\n }\n}\n\nexport { ShikiError };\n","// src/utils.ts\nfunction clone(something) {\n return doClone(something);\n}\nfunction doClone(something) {\n if (Array.isArray(something)) {\n return cloneArray(something);\n }\n if (something instanceof RegExp) {\n return something;\n }\n if (typeof something === \"object\") {\n return cloneObj(something);\n }\n return something;\n}\nfunction cloneArray(arr) {\n let r = [];\n for (let i = 0, len = arr.length; i < len; i++) {\n r[i] = doClone(arr[i]);\n }\n return r;\n}\nfunction cloneObj(obj) {\n let r = {};\n for (let key in obj) {\n r[key] = doClone(obj[key]);\n }\n return r;\n}\nfunction mergeObjects(target, ...sources) {\n sources.forEach((source) => {\n for (let key in source) {\n target[key] = source[key];\n }\n });\n return target;\n}\nfunction basename(path) {\n const idx = ~path.lastIndexOf(\"/\") || ~path.lastIndexOf(\"\\\\\");\n if (idx === 0) {\n return path;\n } else if (~idx === path.length - 1) {\n return basename(path.substring(0, path.length - 1));\n } else {\n return path.substr(~idx + 1);\n }\n}\nvar CAPTURING_REGEX_SOURCE = /\\$(\\d+)|\\${(\\d+):\\/(downcase|upcase)}/g;\nvar RegexSource = class {\n static hasCaptures(regexSource) {\n if (regexSource === null) {\n return false;\n }\n CAPTURING_REGEX_SOURCE.lastIndex = 0;\n return CAPTURING_REGEX_SOURCE.test(regexSource);\n }\n static replaceCaptures(regexSource, captureSource, captureIndices) {\n return regexSource.replace(CAPTURING_REGEX_SOURCE, (match, index, commandIndex, command) => {\n let capture = captureIndices[parseInt(index || commandIndex, 10)];\n if (capture) {\n let result = captureSource.substring(capture.start, capture.end);\n while (result[0] === \".\") {\n result = result.substring(1);\n }\n switch (command) {\n case \"downcase\":\n return result.toLowerCase();\n case \"upcase\":\n return result.toUpperCase();\n default:\n return result;\n }\n } else {\n return match;\n }\n });\n }\n};\nfunction strcmp(a, b) {\n if (a < b) {\n return -1;\n }\n if (a > b) {\n return 1;\n }\n return 0;\n}\nfunction strArrCmp(a, b) {\n if (a === null && b === null) {\n return 0;\n }\n if (!a) {\n return -1;\n }\n if (!b) {\n return 1;\n }\n let len1 = a.length;\n let len2 = b.length;\n if (len1 === len2) {\n for (let i = 0; i < len1; i++) {\n let res = strcmp(a[i], b[i]);\n if (res !== 0) {\n return res;\n }\n }\n return 0;\n }\n return len1 - len2;\n}\nfunction isValidHexColor(hex) {\n if (/^#[0-9a-f]{6}$/i.test(hex)) {\n return true;\n }\n if (/^#[0-9a-f]{8}$/i.test(hex)) {\n return true;\n }\n if (/^#[0-9a-f]{3}$/i.test(hex)) {\n return true;\n }\n if (/^#[0-9a-f]{4}$/i.test(hex)) {\n return true;\n }\n return false;\n}\nfunction escapeRegExpCharacters(value) {\n return value.replace(/[\\-\\\\\\{\\}\\*\\+\\?\\|\\^\\$\\.\\,\\[\\]\\(\\)\\#\\s]/g, \"\\\\$&\");\n}\nvar CachedFn = class {\n constructor(fn) {\n this.fn = fn;\n }\n cache = /* @__PURE__ */ new Map();\n get(key) {\n if (this.cache.has(key)) {\n return this.cache.get(key);\n }\n const value = this.fn(key);\n this.cache.set(key, value);\n return value;\n }\n};\n\n// src/theme.ts\nvar Theme = class {\n constructor(_colorMap, _defaults, _root) {\n this._colorMap = _colorMap;\n this._defaults = _defaults;\n this._root = _root;\n }\n static createFromRawTheme(source, colorMap) {\n return this.createFromParsedTheme(parseTheme(source), colorMap);\n }\n static createFromParsedTheme(source, colorMap) {\n return resolveParsedThemeRules(source, colorMap);\n }\n _cachedMatchRoot = new CachedFn(\n (scopeName) => this._root.match(scopeName)\n );\n getColorMap() {\n return this._colorMap.getColorMap();\n }\n getDefaults() {\n return this._defaults;\n }\n match(scopePath) {\n if (scopePath === null) {\n return this._defaults;\n }\n const scopeName = scopePath.scopeName;\n const matchingTrieElements = this._cachedMatchRoot.get(scopeName);\n const effectiveRule = matchingTrieElements.find(\n (v) => _scopePathMatchesParentScopes(scopePath.parent, v.parentScopes)\n );\n if (!effectiveRule) {\n return null;\n }\n return new StyleAttributes(\n effectiveRule.fontStyle,\n effectiveRule.foreground,\n effectiveRule.background\n );\n }\n};\nvar ScopeStack = class _ScopeStack {\n constructor(parent, scopeName) {\n this.parent = parent;\n this.scopeName = scopeName;\n }\n static push(path, scopeNames) {\n for (const name of scopeNames) {\n path = new _ScopeStack(path, name);\n }\n return path;\n }\n static from(...segments) {\n let result = null;\n for (let i = 0; i < segments.length; i++) {\n result = new _ScopeStack(result, segments[i]);\n }\n return result;\n }\n push(scopeName) {\n return new _ScopeStack(this, scopeName);\n }\n getSegments() {\n let item = this;\n const result = [];\n while (item) {\n result.push(item.scopeName);\n item = item.parent;\n }\n result.reverse();\n return result;\n }\n toString() {\n return this.getSegments().join(\" \");\n }\n extends(other) {\n if (this === other) {\n return true;\n }\n if (this.parent === null) {\n return false;\n }\n return this.parent.extends(other);\n }\n getExtensionIfDefined(base) {\n const result = [];\n let item = this;\n while (item && item !== base) {\n result.push(item.scopeName);\n item = item.parent;\n }\n return item === base ? result.reverse() : void 0;\n }\n};\nfunction _scopePathMatchesParentScopes(scopePath, parentScopes) {\n if (parentScopes.length === 0) {\n return true;\n }\n for (let index = 0; index < parentScopes.length; index++) {\n let scopePattern = parentScopes[index];\n let scopeMustMatch = false;\n if (scopePattern === \">\") {\n if (index === parentScopes.length - 1) {\n return false;\n }\n scopePattern = parentScopes[++index];\n scopeMustMatch = true;\n }\n while (scopePath) {\n if (_matchesScope(scopePath.scopeName, scopePattern)) {\n break;\n }\n if (scopeMustMatch) {\n return false;\n }\n scopePath = scopePath.parent;\n }\n if (!scopePath) {\n return false;\n }\n scopePath = scopePath.parent;\n }\n return true;\n}\nfunction _matchesScope(scopeName, scopePattern) {\n return scopePattern === scopeName || scopeName.startsWith(scopePattern) && scopeName[scopePattern.length] === \".\";\n}\nvar StyleAttributes = class {\n constructor(fontStyle, foregroundId, backgroundId) {\n this.fontStyle = fontStyle;\n this.foregroundId = foregroundId;\n this.backgroundId = backgroundId;\n }\n};\nfunction parseTheme(source) {\n if (!source) {\n return [];\n }\n if (!source.settings || !Array.isArray(source.settings)) {\n return [];\n }\n let settings = source.settings;\n let result = [], resultLen = 0;\n for (let i = 0, len = settings.length; i < len; i++) {\n let entry = settings[i];\n if (!entry.settings) {\n continue;\n }\n let scopes;\n if (typeof entry.scope === \"string\") {\n let _scope = entry.scope;\n _scope = _scope.replace(/^[,]+/, \"\");\n _scope = _scope.replace(/[,]+$/, \"\");\n scopes = _scope.split(\",\");\n } else if (Array.isArray(entry.scope)) {\n scopes = entry.scope;\n } else {\n scopes = [\"\"];\n }\n let fontStyle = -1 /* NotSet */;\n if (typeof entry.settings.fontStyle === \"string\") {\n fontStyle = 0 /* None */;\n let segments = entry.settings.fontStyle.split(\" \");\n for (let j = 0, lenJ = segments.length; j < lenJ; j++) {\n let segment = segments[j];\n switch (segment) {\n case \"italic\":\n fontStyle = fontStyle | 1 /* Italic */;\n break;\n case \"bold\":\n fontStyle = fontStyle | 2 /* Bold */;\n break;\n case \"underline\":\n fontStyle = fontStyle | 4 /* Underline */;\n break;\n case \"strikethrough\":\n fontStyle = fontStyle | 8 /* Strikethrough */;\n break;\n }\n }\n }\n let foreground = null;\n if (typeof entry.settings.foreground === \"string\" && isValidHexColor(entry.settings.foreground)) {\n foreground = entry.settings.foreground;\n }\n let background = null;\n if (typeof entry.settings.background === \"string\" && isValidHexColor(entry.settings.background)) {\n background = entry.settings.background;\n }\n for (let j = 0, lenJ = scopes.length; j < lenJ; j++) {\n let _scope = scopes[j].trim();\n let segments = _scope.split(\" \");\n let scope = segments[segments.length - 1];\n let parentScopes = null;\n if (segments.length > 1) {\n parentScopes = segments.slice(0, segments.length - 1);\n parentScopes.reverse();\n }\n result[resultLen++] = new ParsedThemeRule(\n scope,\n parentScopes,\n i,\n fontStyle,\n foreground,\n background\n );\n }\n }\n return result;\n}\nvar ParsedThemeRule = class {\n constructor(scope, parentScopes, index, fontStyle, foreground, background) {\n this.scope = scope;\n this.parentScopes = parentScopes;\n this.index = index;\n this.fontStyle = fontStyle;\n this.foreground = foreground;\n this.background = background;\n }\n};\nvar FontStyle = /* @__PURE__ */ ((FontStyle2) => {\n FontStyle2[FontStyle2[\"NotSet\"] = -1] = \"NotSet\";\n FontStyle2[FontStyle2[\"None\"] = 0] = \"None\";\n FontStyle2[FontStyle2[\"Italic\"] = 1] = \"Italic\";\n FontStyle2[FontStyle2[\"Bold\"] = 2] = \"Bold\";\n FontStyle2[FontStyle2[\"Underline\"] = 4] = \"Underline\";\n FontStyle2[FontStyle2[\"Strikethrough\"] = 8] = \"Strikethrough\";\n return FontStyle2;\n})(FontStyle || {});\nfunction resolveParsedThemeRules(parsedThemeRules, _colorMap) {\n parsedThemeRules.sort((a, b) => {\n let r = strcmp(a.scope, b.scope);\n if (r !== 0) {\n return r;\n }\n r = strArrCmp(a.parentScopes, b.parentScopes);\n if (r !== 0) {\n return r;\n }\n return a.index - b.index;\n });\n let defaultFontStyle = 0 /* None */;\n let defaultForeground = \"#000000\";\n let defaultBackground = \"#ffffff\";\n while (parsedThemeRules.length >= 1 && parsedThemeRules[0].scope === \"\") {\n let incomingDefaults = parsedThemeRules.shift();\n if (incomingDefaults.fontStyle !== -1 /* NotSet */) {\n defaultFontStyle = incomingDefaults.fontStyle;\n }\n if (incomingDefaults.foreground !== null) {\n defaultForeground = incomingDefaults.foreground;\n }\n if (incomingDefaults.background !== null) {\n defaultBackground = incomingDefaults.background;\n }\n }\n let colorMap = new ColorMap(_colorMap);\n let defaults = new StyleAttributes(defaultFontStyle, colorMap.getId(defaultForeground), colorMap.getId(defaultBackground));\n let root = new ThemeTrieElement(new ThemeTrieElementRule(0, null, -1 /* NotSet */, 0, 0), []);\n for (let i = 0, len = parsedThemeRules.length; i < len; i++) {\n let rule = parsedThemeRules[i];\n root.insert(0, rule.scope, rule.parentScopes, rule.fontStyle, colorMap.getId(rule.foreground), colorMap.getId(rule.background));\n }\n return new Theme(colorMap, defaults, root);\n}\nvar ColorMap = class {\n _isFrozen;\n _lastColorId;\n _id2color;\n _color2id;\n constructor(_colorMap) {\n this._lastColorId = 0;\n this._id2color = [];\n this._color2id = /* @__PURE__ */ Object.create(null);\n if (Array.isArray(_colorMap)) {\n this._isFrozen = true;\n for (let i = 0, len = _colorMap.length; i < len; i++) {\n this._color2id[_colorMap[i]] = i;\n this._id2color[i] = _colorMap[i];\n }\n } else {\n this._isFrozen = false;\n }\n }\n getId(color) {\n if (color === null) {\n return 0;\n }\n color = color.toUpperCase();\n let value = this._color2id[color];\n if (value) {\n return value;\n }\n if (this._isFrozen) {\n throw new Error(`Missing color in color map - ${color}`);\n }\n value = ++this._lastColorId;\n this._color2id[color] = value;\n this._id2color[value] = color;\n return value;\n }\n getColorMap() {\n return this._id2color.slice(0);\n }\n};\nvar emptyParentScopes = Object.freeze([]);\nvar ThemeTrieElementRule = class _ThemeTrieElementRule {\n scopeDepth;\n parentScopes;\n fontStyle;\n foreground;\n background;\n constructor(scopeDepth, parentScopes, fontStyle, foreground, background) {\n this.scopeDepth = scopeDepth;\n this.parentScopes = parentScopes || emptyParentScopes;\n this.fontStyle = fontStyle;\n this.foreground = foreground;\n this.background = background;\n }\n clone() {\n return new _ThemeTrieElementRule(this.scopeDepth, this.parentScopes, this.fontStyle, this.foreground, this.background);\n }\n static cloneArr(arr) {\n let r = [];\n for (let i = 0, len = arr.length; i < len; i++) {\n r[i] = arr[i].clone();\n }\n return r;\n }\n acceptOverwrite(scopeDepth, fontStyle, foreground, background) {\n if (this.scopeDepth > scopeDepth) {\n console.log(\"how did this happen?\");\n } else {\n this.scopeDepth = scopeDepth;\n }\n if (fontStyle !== -1 /* NotSet */) {\n this.fontStyle = fontStyle;\n }\n if (foreground !== 0) {\n this.foreground = foreground;\n }\n if (background !== 0) {\n this.background = background;\n }\n }\n};\nvar ThemeTrieElement = class _ThemeTrieElement {\n constructor(_mainRule, rulesWithParentScopes = [], _children = {}) {\n this._mainRule = _mainRule;\n this._children = _children;\n this._rulesWithParentScopes = rulesWithParentScopes;\n }\n _rulesWithParentScopes;\n static _cmpBySpecificity(a, b) {\n if (a.scopeDepth !== b.scopeDepth) {\n return b.scopeDepth - a.scopeDepth;\n }\n let aParentIndex = 0;\n let bParentIndex = 0;\n while (true) {\n if (a.parentScopes[aParentIndex] === \">\") {\n aParentIndex++;\n }\n if (b.parentScopes[bParentIndex] === \">\") {\n bParentIndex++;\n }\n if (aParentIndex >= a.parentScopes.length || bParentIndex >= b.parentScopes.length) {\n break;\n }\n const parentScopeLengthDiff = b.parentScopes[bParentIndex].length - a.parentScopes[aParentIndex].length;\n if (parentScopeLengthDiff !== 0) {\n return parentScopeLengthDiff;\n }\n aParentIndex++;\n bParentIndex++;\n }\n return b.parentScopes.length - a.parentScopes.length;\n }\n match(scope) {\n if (scope !== \"\") {\n let dotIndex = scope.indexOf(\".\");\n let head;\n let tail;\n if (dotIndex === -1) {\n head = scope;\n tail = \"\";\n } else {\n head = scope.substring(0, dotIndex);\n tail = scope.substring(dotIndex + 1);\n }\n if (this._children.hasOwnProperty(head)) {\n return this._children[head].match(tail);\n }\n }\n const rules = this._rulesWithParentScopes.concat(this._mainRule);\n rules.sort(_ThemeTrieElement._cmpBySpecificity);\n return rules;\n }\n insert(scopeDepth, scope, parentScopes, fontStyle, foreground, background) {\n if (scope === \"\") {\n this._doInsertHere(scopeDepth, parentScopes, fontStyle, foreground, background);\n return;\n }\n let dotIndex = scope.indexOf(\".\");\n let head;\n let tail;\n if (dotIndex === -1) {\n head = scope;\n tail = \"\";\n } else {\n head = scope.substring(0, dotIndex);\n tail = scope.substring(dotIndex + 1);\n }\n let child;\n if (this._children.hasOwnProperty(head)) {\n child = this._children[head];\n } else {\n child = new _ThemeTrieElement(this._mainRule.clone(), ThemeTrieElementRule.cloneArr(this._rulesWithParentScopes));\n this._children[head] = child;\n }\n child.insert(scopeDepth + 1, tail, parentScopes, fontStyle, foreground, background);\n }\n _doInsertHere(scopeDepth, parentScopes, fontStyle, foreground, background) {\n if (parentScopes === null) {\n this._mainRule.acceptOverwrite(scopeDepth, fontStyle, foreground, background);\n return;\n }\n for (let i = 0, len = this._rulesWithParentScopes.length; i < len; i++) {\n let rule = this._rulesWithParentScopes[i];\n if (strArrCmp(rule.parentScopes, parentScopes) === 0) {\n rule.acceptOverwrite(scopeDepth, fontStyle, foreground, background);\n return;\n }\n }\n if (fontStyle === -1 /* NotSet */) {\n fontStyle = this._mainRule.fontStyle;\n }\n if (foreground === 0) {\n foreground = this._mainRule.foreground;\n }\n if (background === 0) {\n background = this._mainRule.background;\n }\n this._rulesWithParentScopes.push(new ThemeTrieElementRule(scopeDepth, parentScopes, fontStyle, foreground, background));\n }\n};\n\n// src/encodedTokenAttributes.ts\nvar EncodedTokenMetadata = class _EncodedTokenMetadata {\n static toBinaryStr(encodedTokenAttributes) {\n return encodedTokenAttributes.toString(2).padStart(32, \"0\");\n }\n static print(encodedTokenAttributes) {\n const languageId = _EncodedTokenMetadata.getLanguageId(encodedTokenAttributes);\n const tokenType = _EncodedTokenMetadata.getTokenType(encodedTokenAttributes);\n const fontStyle = _EncodedTokenMetadata.getFontStyle(encodedTokenAttributes);\n const foreground = _EncodedTokenMetadata.getForeground(encodedTokenAttributes);\n const background = _EncodedTokenMetadata.getBackground(encodedTokenAttributes);\n console.log({\n languageId,\n tokenType,\n fontStyle,\n foreground,\n background\n });\n }\n static getLanguageId(encodedTokenAttributes) {\n return (encodedTokenAttributes & 255 /* LANGUAGEID_MASK */) >>> 0 /* LANGUAGEID_OFFSET */;\n }\n static getTokenType(encodedTokenAttributes) {\n return (encodedTokenAttributes & 768 /* TOKEN_TYPE_MASK */) >>> 8 /* TOKEN_TYPE_OFFSET */;\n }\n static containsBalancedBrackets(encodedTokenAttributes) {\n return (encodedTokenAttributes & 1024 /* BALANCED_BRACKETS_MASK */) !== 0;\n }\n static getFontStyle(encodedTokenAttributes) {\n return (encodedTokenAttributes & 30720 /* FONT_STYLE_MASK */) >>> 11 /* FONT_STYLE_OFFSET */;\n }\n static getForeground(encodedTokenAttributes) {\n return (encodedTokenAttributes & 16744448 /* FOREGROUND_MASK */) >>> 15 /* FOREGROUND_OFFSET */;\n }\n static getBackground(encodedTokenAttributes) {\n return (encodedTokenAttributes & 4278190080 /* BACKGROUND_MASK */) >>> 24 /* BACKGROUND_OFFSET */;\n }\n /**\n * Updates the fields in `metadata`.\n * A value of `0`, `NotSet` or `null` indicates that the corresponding field should be left as is.\n */\n static set(encodedTokenAttributes, languageId, tokenType, containsBalancedBrackets, fontStyle, foreground, background) {\n let _languageId = _EncodedTokenMetadata.getLanguageId(encodedTokenAttributes);\n let _tokenType = _EncodedTokenMetadata.getTokenType(encodedTokenAttributes);\n let _containsBalancedBracketsBit = _EncodedTokenMetadata.containsBalancedBrackets(encodedTokenAttributes) ? 1 : 0;\n let _fontStyle = _EncodedTokenMetadata.getFontStyle(encodedTokenAttributes);\n let _foreground = _EncodedTokenMetadata.getForeground(encodedTokenAttributes);\n let _background = _EncodedTokenMetadata.getBackground(encodedTokenAttributes);\n if (languageId !== 0) {\n _languageId = languageId;\n }\n if (tokenType !== 8 /* NotSet */) {\n _tokenType = fromOptionalTokenType(tokenType);\n }\n if (containsBalancedBrackets !== null) {\n _containsBalancedBracketsBit = containsBalancedBrackets ? 1 : 0;\n }\n if (fontStyle !== -1 /* NotSet */) {\n _fontStyle = fontStyle;\n }\n if (foreground !== 0) {\n _foreground = foreground;\n }\n if (background !== 0) {\n _background = background;\n }\n return (_languageId << 0 /* LANGUAGEID_OFFSET */ | _tokenType << 8 /* TOKEN_TYPE_OFFSET */ | _containsBalancedBracketsBit << 10 /* BALANCED_BRACKETS_OFFSET */ | _fontStyle << 11 /* FONT_STYLE_OFFSET */ | _foreground << 15 /* FOREGROUND_OFFSET */ | _background << 24 /* BACKGROUND_OFFSET */) >>> 0;\n }\n};\nfunction toOptionalTokenType(standardType) {\n return standardType;\n}\nfunction fromOptionalTokenType(standardType) {\n return standardType;\n}\n\n// src/matcher.ts\nfunction createMatchers(selector, matchesName) {\n const results = [];\n const tokenizer = newTokenizer(selector);\n let token = tokenizer.next();\n while (token !== null) {\n let priority = 0;\n if (token.length === 2 && token.charAt(1) === \":\") {\n switch (token.charAt(0)) {\n case \"R\":\n priority = 1;\n break;\n case \"L\":\n priority = -1;\n break;\n default:\n console.log(`Unknown priority ${token} in scope selector`);\n }\n token = tokenizer.next();\n }\n let matcher = parseConjunction();\n results.push({ matcher, priority });\n if (token !== \",\") {\n break;\n }\n token = tokenizer.next();\n }\n return results;\n function parseOperand() {\n if (token === \"-\") {\n token = tokenizer.next();\n const expressionToNegate = parseOperand();\n return (matcherInput) => !!expressionToNegate && !expressionToNegate(matcherInput);\n }\n if (token === \"(\") {\n token = tokenizer.next();\n const expressionInParents = parseInnerExpression();\n if (token === \")\") {\n token = tokenizer.next();\n }\n return expressionInParents;\n }\n if (isIdentifier(token)) {\n const identifiers = [];\n do {\n identifiers.push(token);\n token = tokenizer.next();\n } while (isIdentifier(token));\n return (matcherInput) => matchesName(identifiers, matcherInput);\n }\n return null;\n }\n function parseConjunction() {\n const matchers = [];\n let matcher = parseOperand();\n while (matcher) {\n matchers.push(matcher);\n matcher = parseOperand();\n }\n return (matcherInput) => matchers.every((matcher2) => matcher2(matcherInput));\n }\n function parseInnerExpression() {\n const matchers = [];\n let matcher = parseConjunction();\n while (matcher) {\n matchers.push(matcher);\n if (token === \"|\" || token === \",\") {\n do {\n token = tokenizer.next();\n } while (token === \"|\" || token === \",\");\n } else {\n break;\n }\n matcher = parseConjunction();\n }\n return (matcherInput) => matchers.some((matcher2) => matcher2(matcherInput));\n }\n}\nfunction isIdentifier(token) {\n return !!token && !!token.match(/[\\w\\.:]+/);\n}\nfunction newTokenizer(input) {\n let regex = /([LR]:|[\\w\\.:][\\w\\.:\\-]*|[\\,\\|\\-\\(\\)])/g;\n let match = regex.exec(input);\n return {\n next: () => {\n if (!match) {\n return null;\n }\n const res = match[0];\n match = regex.exec(input);\n return res;\n }\n };\n}\n\n// src/onigLib.ts\nvar FindOption = /* @__PURE__ */ ((FindOption2) => {\n FindOption2[FindOption2[\"None\"] = 0] = \"None\";\n FindOption2[FindOption2[\"NotBeginString\"] = 1] = \"NotBeginString\";\n FindOption2[FindOption2[\"NotEndString\"] = 2] = \"NotEndString\";\n FindOption2[FindOption2[\"NotBeginPosition\"] = 4] = \"NotBeginPosition\";\n FindOption2[FindOption2[\"DebugCall\"] = 8] = \"DebugCall\";\n return FindOption2;\n})(FindOption || {});\nfunction disposeOnigString(str) {\n if (typeof str.dispose === \"function\") {\n str.dispose();\n }\n}\n\n// src/grammar/grammarDependencies.ts\nvar TopLevelRuleReference = class {\n constructor(scopeName) {\n this.scopeName = scopeName;\n }\n toKey() {\n return this.scopeName;\n }\n};\nvar TopLevelRepositoryRuleReference = class {\n constructor(scopeName, ruleName) {\n this.scopeName = scopeName;\n this.ruleName = ruleName;\n }\n toKey() {\n return `${this.scopeName}#${this.ruleName}`;\n }\n};\nvar ExternalReferenceCollector = class {\n _references = [];\n _seenReferenceKeys = /* @__PURE__ */ new Set();\n get references() {\n return this._references;\n }\n visitedRule = /* @__PURE__ */ new Set();\n add(reference) {\n const key = reference.toKey();\n if (this._seenReferenceKeys.has(key)) {\n return;\n }\n this._seenReferenceKeys.add(key);\n this._references.push(reference);\n }\n};\nvar ScopeDependencyProcessor = class {\n constructor(repo, initialScopeName) {\n this.repo = repo;\n this.initialScopeName = initialScopeName;\n this.seenFullScopeRequests.add(this.initialScopeName);\n this.Q = [new TopLevelRuleReference(this.initialScopeName)];\n }\n seenFullScopeRequests = /* @__PURE__ */ new Set();\n seenPartialScopeRequests = /* @__PURE__ */ new Set();\n Q;\n processQueue() {\n const q = this.Q;\n this.Q = [];\n const deps = new ExternalReferenceCollector();\n for (const dep of q) {\n collectReferencesOfReference(dep, this.initialScopeName, this.repo, deps);\n }\n for (const dep of deps.references) {\n if (dep instanceof TopLevelRuleReference) {\n if (this.seenFullScopeRequests.has(dep.scopeName)) {\n continue;\n }\n this.seenFullScopeRequests.add(dep.scopeName);\n this.Q.push(dep);\n } else {\n if (this.seenFullScopeRequests.has(dep.scopeName)) {\n continue;\n }\n if (this.seenPartialScopeRequests.has(dep.toKey())) {\n continue;\n }\n this.seenPartialScopeRequests.add(dep.toKey());\n this.Q.push(dep);\n }\n }\n }\n};\nfunction collectReferencesOfReference(reference, baseGrammarScopeName, repo, result) {\n const selfGrammar = repo.lookup(reference.scopeName);\n if (!selfGrammar) {\n if (reference.scopeName === baseGrammarScopeName) {\n throw new Error(`No grammar provided for <${baseGrammarScopeName}>`);\n }\n return;\n }\n const baseGrammar = repo.lookup(baseGrammarScopeName);\n if (reference instanceof TopLevelRuleReference) {\n collectExternalReferencesInTopLevelRule({ baseGrammar, selfGrammar }, result);\n } else {\n collectExternalReferencesInTopLevelRepositoryRule(\n reference.ruleName,\n { baseGrammar, selfGrammar, repository: selfGrammar.repository },\n result\n );\n }\n const injections = repo.injections(reference.scopeName);\n if (injections) {\n for (const injection of injections) {\n result.add(new TopLevelRuleReference(injection));\n }\n }\n}\nfunction collectExternalReferencesInTopLevelRepositoryRule(ruleName, context, result) {\n if (context.repository && context.repository[ruleName]) {\n const rule = context.repository[ruleName];\n collectExternalReferencesInRules([rule], context, result);\n }\n}\nfunction collectExternalReferencesInTopLevelRule(context, result) {\n if (context.selfGrammar.patterns && Array.isArray(context.selfGrammar.patterns)) {\n collectExternalReferencesInRules(\n context.selfGrammar.patterns,\n { ...context, repository: context.selfGrammar.repository },\n result\n );\n }\n if (context.selfGrammar.injections) {\n collectExternalReferencesInRules(\n Object.values(context.selfGrammar.injections),\n { ...context, repository: context.selfGrammar.repository },\n result\n );\n }\n}\nfunction collectExternalReferencesInRules(rules, context, result) {\n for (const rule of rules) {\n if (result.visitedRule.has(rule)) {\n continue;\n }\n result.visitedRule.add(rule);\n const patternRepository = rule.repository ? mergeObjects({}, context.repository, rule.repository) : context.repository;\n if (Array.isArray(rule.patterns)) {\n collectExternalReferencesInRules(rule.patterns, { ...context, repository: patternRepository }, result);\n }\n const include = rule.include;\n if (!include) {\n continue;\n }\n const reference = parseInclude(include);\n switch (reference.kind) {\n case 0 /* Base */:\n collectExternalReferencesInTopLevelRule({ ...context, selfGrammar: context.baseGrammar }, result);\n break;\n case 1 /* Self */:\n collectExternalReferencesInTopLevelRule(context, result);\n break;\n case 2 /* RelativeReference */:\n collectExternalReferencesInTopLevelRepositoryRule(reference.ruleName, { ...context, repository: patternRepository }, result);\n break;\n case 3 /* TopLevelReference */:\n case 4 /* TopLevelRepositoryReference */:\n const selfGrammar = reference.scopeName === context.selfGrammar.scopeName ? context.selfGrammar : reference.scopeName === context.baseGrammar.scopeName ? context.baseGrammar : void 0;\n if (selfGrammar) {\n const newContext = { baseGrammar: context.baseGrammar, selfGrammar, repository: patternRepository };\n if (reference.kind === 4 /* TopLevelRepositoryReference */) {\n collectExternalReferencesInTopLevelRepositoryRule(reference.ruleName, newContext, result);\n } else {\n collectExternalReferencesInTopLevelRule(newContext, result);\n }\n } else {\n if (reference.kind === 4 /* TopLevelRepositoryReference */) {\n result.add(new TopLevelRepositoryRuleReference(reference.scopeName, reference.ruleName));\n } else {\n result.add(new TopLevelRuleReference(reference.scopeName));\n }\n }\n break;\n }\n }\n}\nvar BaseReference = class {\n kind = 0 /* Base */;\n};\nvar SelfReference = class {\n kind = 1 /* Self */;\n};\nvar RelativeReference = class {\n constructor(ruleName) {\n this.ruleName = ruleName;\n }\n kind = 2 /* RelativeReference */;\n};\nvar TopLevelReference = class {\n constructor(scopeName) {\n this.scopeName = scopeName;\n }\n kind = 3 /* TopLevelReference */;\n};\nvar TopLevelRepositoryReference = class {\n constructor(scopeName, ruleName) {\n this.scopeName = scopeName;\n this.ruleName = ruleName;\n }\n kind = 4 /* TopLevelRepositoryReference */;\n};\nfunction parseInclude(include) {\n if (include === \"$base\") {\n return new BaseReference();\n } else if (include === \"$self\") {\n return new SelfReference();\n }\n const indexOfSharp = include.indexOf(\"#\");\n if (indexOfSharp === -1) {\n return new TopLevelReference(include);\n } else if (indexOfSharp === 0) {\n return new RelativeReference(include.substring(1));\n } else {\n const scopeName = include.substring(0, indexOfSharp);\n const ruleName = include.substring(indexOfSharp + 1);\n return new TopLevelRepositoryReference(scopeName, ruleName);\n }\n}\n\n// src/rule.ts\nvar HAS_BACK_REFERENCES = /\\\\(\\d+)/;\nvar BACK_REFERENCING_END = /\\\\(\\d+)/g;\nvar ruleIdSymbol = Symbol(\"RuleId\");\nvar endRuleId = -1;\nvar whileRuleId = -2;\nfunction ruleIdFromNumber(id) {\n return id;\n}\nfunction ruleIdToNumber(id) {\n return id;\n}\nvar Rule = class {\n $location;\n id;\n _nameIsCapturing;\n _name;\n _contentNameIsCapturing;\n _contentName;\n constructor($location, id, name, contentName) {\n this.$location = $location;\n this.id = id;\n this._name = name || null;\n this._nameIsCapturing = RegexSource.hasCaptures(this._name);\n this._contentName = contentName || null;\n this._contentNameIsCapturing = RegexSource.hasCaptures(this._contentName);\n }\n get debugName() {\n const location = this.$location ? `${basename(this.$location.filename)}:${this.$location.line}` : \"unknown\";\n return `${this.constructor.name}#${this.id} @ ${location}`;\n }\n getName(lineText, captureIndices) {\n if (!this._nameIsCapturing || this._name === null || lineText === null || captureIndices === null) {\n return this._name;\n }\n return RegexSource.replaceCaptures(this._name, lineText, captureIndices);\n }\n getContentName(lineText, captureIndices) {\n if (!this._contentNameIsCapturing || this._contentName === null) {\n return this._contentName;\n }\n return RegexSource.replaceCaptures(this._contentName, lineText, captureIndices);\n }\n};\nvar CaptureRule = class extends Rule {\n retokenizeCapturedWithRuleId;\n constructor($location, id, name, contentName, retokenizeCapturedWithRuleId) {\n super($location, id, name, contentName);\n this.retokenizeCapturedWithRuleId = retokenizeCapturedWithRuleId;\n }\n dispose() {\n }\n collectPatterns(grammar, out) {\n throw new Error(\"Not supported!\");\n }\n compile(grammar, endRegexSource) {\n throw new Error(\"Not supported!\");\n }\n compileAG(grammar, endRegexSource, allowA, allowG) {\n throw new Error(\"Not supported!\");\n }\n};\nvar MatchRule = class extends Rule {\n _match;\n captures;\n _cachedCompiledPatterns;\n constructor($location, id, name, match, captures) {\n super($location, id, name, null);\n this._match = new RegExpSource(match, this.id);\n this.captures = captures;\n this._cachedCompiledPatterns = null;\n }\n dispose() {\n if (this._cachedCompiledPatterns) {\n this._cachedCompiledPatterns.dispose();\n this._cachedCompiledPatterns = null;\n }\n }\n get debugMatchRegExp() {\n return `${this._match.source}`;\n }\n collectPatterns(grammar, out) {\n out.push(this._match);\n }\n compile(grammar, endRegexSource) {\n return this._getCachedCompiledPatterns(grammar).compile(grammar);\n }\n compileAG(grammar, endRegexSource, allowA, allowG) {\n return this._getCachedCompiledPatterns(grammar).compileAG(grammar, allowA, allowG);\n }\n _getCachedCompiledPatterns(grammar) {\n if (!this._cachedCompiledPatterns) {\n this._cachedCompiledPatterns = new RegExpSourceList();\n this.collectPatterns(grammar, this._cachedCompiledPatterns);\n }\n return this._cachedCompiledPatterns;\n }\n};\nvar IncludeOnlyRule = class extends Rule {\n hasMissingPatterns;\n patterns;\n _cachedCompiledPatterns;\n constructor($location, id, name, contentName, patterns) {\n super($location, id, name, contentName);\n this.patterns = patterns.patterns;\n this.hasMissingPatterns = patterns.hasMissingPatterns;\n this._cachedCompiledPatterns = null;\n }\n dispose() {\n if (this._cachedCompiledPatterns) {\n this._cachedCompiledPatterns.dispose();\n this._cachedCompiledPatterns = null;\n }\n }\n collectPatterns(grammar, out) {\n for (const pattern of this.patterns) {\n const rule = grammar.getRule(pattern);\n rule.collectPatterns(grammar, out);\n }\n }\n compile(grammar, endRegexSource) {\n return this._getCachedCompiledPatterns(grammar).compile(grammar);\n }\n compileAG(grammar, endRegexSource, allowA, allowG) {\n return this._getCachedCompiledPatterns(grammar).compileAG(grammar, allowA, allowG);\n }\n _getCachedCompiledPatterns(grammar) {\n if (!this._cachedCompiledPatterns) {\n this._cachedCompiledPatterns = new RegExpSourceList();\n this.collectPatterns(grammar, this._cachedCompiledPatterns);\n }\n return this._cachedCompiledPatterns;\n }\n};\nvar BeginEndRule = class extends Rule {\n _begin;\n beginCaptures;\n _end;\n endHasBackReferences;\n endCaptures;\n applyEndPatternLast;\n hasMissingPatterns;\n patterns;\n _cachedCompiledPatterns;\n constructor($location, id, name, contentName, begin, beginCaptures, end, endCaptures, applyEndPatternLast, patterns) {\n super($location, id, name, contentName);\n this._begin = new RegExpSource(begin, this.id);\n this.beginCaptures = beginCaptures;\n this._end = new RegExpSource(end ? end : \"\\uFFFF\", -1);\n this.endHasBackReferences = this._end.hasBackReferences;\n this.endCaptures = endCaptures;\n this.applyEndPatternLast = applyEndPatternLast || false;\n this.patterns = patterns.patterns;\n this.hasMissingPatterns = patterns.hasMissingPatterns;\n this._cachedCompiledPatterns = null;\n }\n dispose() {\n if (this._cachedCompiledPatterns) {\n this._cachedCompiledPatterns.dispose();\n this._cachedCompiledPatterns = null;\n }\n }\n get debugBeginRegExp() {\n return `${this._begin.source}`;\n }\n get debugEndRegExp() {\n return `${this._end.source}`;\n }\n getEndWithResolvedBackReferences(lineText, captureIndices) {\n return this._end.resolveBackReferences(lineText, captureIndices);\n }\n collectPatterns(grammar, out) {\n out.push(this._begin);\n }\n compile(grammar, endRegexSource) {\n return this._getCachedCompiledPatterns(grammar, endRegexSource).compile(grammar);\n }\n compileAG(grammar, endRegexSource, allowA, allowG) {\n return this._getCachedCompiledPatterns(grammar, endRegexSource).compileAG(grammar, allowA, allowG);\n }\n _getCachedCompiledPatterns(grammar, endRegexSource) {\n if (!this._cachedCompiledPatterns) {\n this._cachedCompiledPatterns = new RegExpSourceList();\n for (const pattern of this.patterns) {\n const rule = grammar.getRule(pattern);\n rule.collectPatterns(grammar, this._cachedCompiledPatterns);\n }\n if (this.applyEndPatternLast) {\n this._cachedCompiledPatterns.push(this._end.hasBackReferences ? this._end.clone() : this._end);\n } else {\n this._cachedCompiledPatterns.unshift(this._end.hasBackReferences ? this._end.clone() : this._end);\n }\n }\n if (this._end.hasBackReferences) {\n if (this.applyEndPatternLast) {\n this._cachedCompiledPatterns.setSource(this._cachedCompiledPatterns.length() - 1, endRegexSource);\n } else {\n this._cachedCompiledPatterns.setSource(0, endRegexSource);\n }\n }\n return this._cachedCompiledPatterns;\n }\n};\nvar BeginWhileRule = class extends Rule {\n _begin;\n beginCaptures;\n whileCaptures;\n _while;\n whileHasBackReferences;\n hasMissingPatterns;\n patterns;\n _cachedCompiledPatterns;\n _cachedCompiledWhilePatterns;\n constructor($location, id, name, contentName, begin, beginCaptures, _while, whileCaptures, patterns) {\n super($location, id, name, contentName);\n this._begin = new RegExpSource(begin, this.id);\n this.beginCaptures = beginCaptures;\n this.whileCaptures = whileCaptures;\n this._while = new RegExpSource(_while, whileRuleId);\n this.whileHasBackReferences = this._while.hasBackReferences;\n this.patterns = patterns.patterns;\n this.hasMissingPatterns = patterns.hasMissingPatterns;\n this._cachedCompiledPatterns = null;\n this._cachedCompiledWhilePatterns = null;\n }\n dispose() {\n if (this._cachedCompiledPatterns) {\n this._cachedCompiledPatterns.dispose();\n this._cachedCompiledPatterns = null;\n }\n if (this._cachedCompiledWhilePatterns) {\n this._cachedCompiledWhilePatterns.dispose();\n this._cachedCompiledWhilePatterns = null;\n }\n }\n get debugBeginRegExp() {\n return `${this._begin.source}`;\n }\n get debugWhileRegExp() {\n return `${this._while.source}`;\n }\n getWhileWithResolvedBackReferences(lineText, captureIndices) {\n return this._while.resolveBackReferences(lineText, captureIndices);\n }\n collectPatterns(grammar, out) {\n out.push(this._begin);\n }\n compile(grammar, endRegexSource) {\n return this._getCachedCompiledPatterns(grammar).compile(grammar);\n }\n compileAG(grammar, endRegexSource, allowA, allowG) {\n return this._getCachedCompiledPatterns(grammar).compileAG(grammar, allowA, allowG);\n }\n _getCachedCompiledPatterns(grammar) {\n if (!this._cachedCompiledPatterns) {\n this._cachedCompiledPatterns = new RegExpSourceList();\n for (const pattern of this.patterns) {\n const rule = grammar.getRule(pattern);\n rule.collectPatterns(grammar, this._cachedCompiledPatterns);\n }\n }\n return this._cachedCompiledPatterns;\n }\n compileWhile(grammar, endRegexSource) {\n return this._getCachedCompiledWhilePatterns(grammar, endRegexSource).compile(grammar);\n }\n compileWhileAG(grammar, endRegexSource, allowA, allowG) {\n return this._getCachedCompiledWhilePatterns(grammar, endRegexSource).compileAG(grammar, allowA, allowG);\n }\n _getCachedCompiledWhilePatterns(grammar, endRegexSource) {\n if (!this._cachedCompiledWhilePatterns) {\n this._cachedCompiledWhilePatterns = new RegExpSourceList();\n this._cachedCompiledWhilePatterns.push(this._while.hasBackReferences ? this._while.clone() : this._while);\n }\n if (this._while.hasBackReferences) {\n this._cachedCompiledWhilePatterns.setSource(0, endRegexSource ? endRegexSource : \"\\uFFFF\");\n }\n return this._cachedCompiledWhilePatterns;\n }\n};\nvar RuleFactory = class _RuleFactory {\n static createCaptureRule(helper, $location, name, contentName, retokenizeCapturedWithRuleId) {\n return helper.registerRule((id) => {\n return new CaptureRule($location, id, name, contentName, retokenizeCapturedWithRuleId);\n });\n }\n static getCompiledRuleId(desc, helper, repository) {\n if (!desc.id) {\n helper.registerRule((id) => {\n desc.id = id;\n if (desc.match) {\n return new MatchRule(\n desc.$vscodeTextmateLocation,\n desc.id,\n desc.name,\n desc.match,\n _RuleFactory._compileCaptures(desc.captures, helper, repository)\n );\n }\n if (typeof desc.begin === \"undefined\") {\n if (desc.repository) {\n repository = mergeObjects({}, repository, desc.repository);\n }\n let patterns = desc.patterns;\n if (typeof patterns === \"undefined\" && desc.include) {\n patterns = [{ include: desc.include }];\n }\n return new IncludeOnlyRule(\n desc.$vscodeTextmateLocation,\n desc.id,\n desc.name,\n desc.contentName,\n _RuleFactory._compilePatterns(patterns, helper, repository)\n );\n }\n if (desc.while) {\n return new BeginWhileRule(\n desc.$vscodeTextmateLocation,\n desc.id,\n desc.name,\n desc.contentName,\n desc.begin,\n _RuleFactory._compileCaptures(desc.beginCaptures || desc.captures, helper, repository),\n desc.while,\n _RuleFactory._compileCaptures(desc.whileCaptures || desc.captures, helper, repository),\n _RuleFactory._compilePatterns(desc.patterns, helper, repository)\n );\n }\n return new BeginEndRule(\n desc.$vscodeTextmateLocation,\n desc.id,\n desc.name,\n desc.contentName,\n desc.begin,\n _RuleFactory._compileCaptures(desc.beginCaptures || desc.captures, helper, repository),\n desc.end,\n _RuleFactory._compileCaptures(desc.endCaptures || desc.captures, helper, repository),\n desc.applyEndPatternLast,\n _RuleFactory._compilePatterns(desc.patterns, helper, repository)\n );\n });\n }\n return desc.id;\n }\n static _compileCaptures(captures, helper, repository) {\n let r = [];\n if (captures) {\n let maximumCaptureId = 0;\n for (const captureId in captures) {\n if (captureId === \"$vscodeTextmateLocation\") {\n continue;\n }\n const numericCaptureId = parseInt(captureId, 10);\n if (numericCaptureId > maximumCaptureId) {\n maximumCaptureId = numericCaptureId;\n }\n }\n for (let i = 0; i <= maximumCaptureId; i++) {\n r[i] = null;\n }\n for (const captureId in captures) {\n if (captureId === \"$vscodeTextmateLocation\") {\n continue;\n }\n const numericCaptureId = parseInt(captureId, 10);\n let retokenizeCapturedWithRuleId = 0;\n if (captures[captureId].patterns) {\n retokenizeCapturedWithRuleId = _RuleFactory.getCompiledRuleId(captures[captureId], helper, repository);\n }\n r[numericCaptureId] = _RuleFactory.createCaptureRule(helper, captures[captureId].$vscodeTextmateLocation, captures[captureId].name, captures[captureId].contentName, retokenizeCapturedWithRuleId);\n }\n }\n return r;\n }\n static _compilePatterns(patterns, helper, repository) {\n let r = [];\n if (patterns) {\n for (let i = 0, len = patterns.length; i < len; i++) {\n const pattern = patterns[i];\n let ruleId = -1;\n if (pattern.include) {\n const reference = parseInclude(pattern.include);\n switch (reference.kind) {\n case 0 /* Base */:\n case 1 /* Self */:\n ruleId = _RuleFactory.getCompiledRuleId(repository[pattern.include], helper, repository);\n break;\n case 2 /* RelativeReference */:\n let localIncludedRule = repository[reference.ruleName];\n if (localIncludedRule) {\n ruleId = _RuleFactory.getCompiledRuleId(localIncludedRule, helper, repository);\n } else {\n }\n break;\n case 3 /* TopLevelReference */:\n case 4 /* TopLevelRepositoryReference */:\n const externalGrammarName = reference.scopeName;\n const externalGrammarInclude = reference.kind === 4 /* TopLevelRepositoryReference */ ? reference.ruleName : null;\n const externalGrammar = helper.getExternalGrammar(externalGrammarName, repository);\n if (externalGrammar) {\n if (externalGrammarInclude) {\n let externalIncludedRule = externalGrammar.repository[externalGrammarInclude];\n if (externalIncludedRule) {\n ruleId = _RuleFactory.getCompiledRuleId(externalIncludedRule, helper, externalGrammar.repository);\n } else {\n }\n } else {\n ruleId = _RuleFactory.getCompiledRuleId(externalGrammar.repository.$self, helper, externalGrammar.repository);\n }\n } else {\n }\n break;\n }\n } else {\n ruleId = _RuleFactory.getCompiledRuleId(pattern, helper, repository);\n }\n if (ruleId !== -1) {\n const rule = helper.getRule(ruleId);\n let skipRule = false;\n if (rule instanceof IncludeOnlyRule || rule instanceof BeginEndRule || rule instanceof BeginWhileRule) {\n if (rule.hasMissingPatterns && rule.patterns.length === 0) {\n skipRule = true;\n }\n }\n if (skipRule) {\n continue;\n }\n r.push(ruleId);\n }\n }\n }\n return {\n patterns: r,\n hasMissingPatterns: (patterns ? patterns.length : 0) !== r.length\n };\n }\n};\nvar RegExpSource = class _RegExpSource {\n source;\n ruleId;\n hasAnchor;\n hasBackReferences;\n _anchorCache;\n constructor(regExpSource, ruleId) {\n if (regExpSource && typeof regExpSource === \"string\") {\n const len = regExpSource.length;\n let lastPushedPos = 0;\n let output = [];\n let hasAnchor = false;\n for (let pos = 0; pos < len; pos++) {\n const ch = regExpSource.charAt(pos);\n if (ch === \"\\\\\") {\n if (pos + 1 < len) {\n const nextCh = regExpSource.charAt(pos + 1);\n if (nextCh === \"z\") {\n output.push(regExpSource.substring(lastPushedPos, pos));\n output.push(\"$(?!\\\\n)(?<!\\\\n)\");\n lastPushedPos = pos + 2;\n } else if (nextCh === \"A\" || nextCh === \"G\") {\n hasAnchor = true;\n }\n pos++;\n }\n }\n }\n this.hasAnchor = hasAnchor;\n if (lastPushedPos === 0) {\n this.source = regExpSource;\n } else {\n output.push(regExpSource.substring(lastPushedPos, len));\n this.source = output.join(\"\");\n }\n } else {\n this.hasAnchor = false;\n this.source = regExpSource;\n }\n if (this.hasAnchor) {\n this._anchorCache = this._buildAnchorCache();\n } else {\n this._anchorCache = null;\n }\n this.ruleId = ruleId;\n if (typeof this.source === \"string\") {\n this.hasBackReferences = HAS_BACK_REFERENCES.test(this.source);\n } else {\n this.hasBackReferences = false;\n }\n }\n clone() {\n return new _RegExpSource(this.source, this.ruleId);\n }\n setSource(newSource) {\n if (this.source === newSource) {\n return;\n }\n this.source = newSource;\n if (this.hasAnchor) {\n this._anchorCache = this._buildAnchorCache();\n }\n }\n resolveBackReferences(lineText, captureIndices) {\n if (typeof this.source !== \"string\") {\n throw new Error(\"This method should only be called if the source is a string\");\n }\n let capturedValues = captureIndices.map((capture) => {\n return lineText.substring(capture.start, capture.end);\n });\n BACK_REFERENCING_END.lastIndex = 0;\n return this.source.replace(BACK_REFERENCING_END, (match, g1) => {\n return escapeRegExpCharacters(capturedValues[parseInt(g1, 10)] || \"\");\n });\n }\n _buildAnchorCache() {\n if (typeof this.source !== \"string\") {\n throw new Error(\"This method should only be called if the source is a string\");\n }\n let A0_G0_result = [];\n let A0_G1_result = [];\n let A1_G0_result = [];\n let A1_G1_result = [];\n let pos, len, ch, nextCh;\n for (pos = 0, len = this.source.length; pos < len; pos++) {\n ch = this.source.charAt(pos);\n A0_G0_result[pos] = ch;\n A0_G1_result[pos] = ch;\n A1_G0_result[pos] = ch;\n A1_G1_result[pos] = ch;\n if (ch === \"\\\\\") {\n if (pos + 1 < len) {\n nextCh = this.source.charAt(pos + 1);\n if (nextCh === \"A\") {\n A0_G0_result[pos + 1] = \"\\uFFFF\";\n A0_G1_result[pos + 1] = \"\\uFFFF\";\n A1_G0_result[pos + 1] = \"A\";\n A1_G1_result[pos + 1] = \"A\";\n } else if (nextCh === \"G\") {\n A0_G0_result[pos + 1] = \"\\uFFFF\";\n A0_G1_result[pos + 1] = \"G\";\n A1_G0_result[pos + 1] = \"\\uFFFF\";\n A1_G1_result[pos + 1] = \"G\";\n } else {\n A0_G0_result[pos + 1] = nextCh;\n A0_G1_result[pos + 1] = nextCh;\n A1_G0_result[pos + 1] = nextCh;\n A1_G1_result[pos + 1] = nextCh;\n }\n pos++;\n }\n }\n }\n return {\n A0_G0: A0_G0_result.join(\"\"),\n A0_G1: A0_G1_result.join(\"\"),\n A1_G0: A1_G0_result.join(\"\"),\n A1_G1: A1_G1_result.join(\"\")\n };\n }\n resolveAnchors(allowA, allowG) {\n if (!this.hasAnchor || !this._anchorCache || typeof this.source !== \"string\") {\n return this.source;\n }\n if (allowA) {\n if (allowG) {\n return this._anchorCache.A1_G1;\n } else {\n return this._anchorCache.A1_G0;\n }\n } else {\n if (allowG) {\n return this._anchorCache.A0_G1;\n } else {\n return this._anchorCache.A0_G0;\n }\n }\n }\n};\nvar RegExpSourceList = class {\n _items;\n _hasAnchors;\n _cached;\n _anchorCache;\n constructor() {\n this._items = [];\n this._hasAnchors = false;\n this._cached = null;\n this._anchorCache = {\n A0_G0: null,\n A0_G1: null,\n A1_G0: null,\n A1_G1: null\n };\n }\n dispose() {\n this._disposeCaches();\n }\n _disposeCaches() {\n if (this._cached) {\n this._cached.dispose();\n this._cached = null;\n }\n if (this._anchorCache.A0_G0) {\n this._anchorCache.A0_G0.dispose();\n this._anchorCache.A0_G0 = null;\n }\n if (this._anchorCache.A0_G1) {\n this._anchorCache.A0_G1.dispose();\n this._anchorCache.A0_G1 = null;\n }\n if (this._anchorCache.A1_G0) {\n this._anchorCache.A1_G0.dispose();\n this._anchorCache.A1_G0 = null;\n }\n if (this._anchorCache.A1_G1) {\n this._anchorCache.A1_G1.dispose();\n this._anchorCache.A1_G1 = null;\n }\n }\n push(item) {\n this._items.push(item);\n this._hasAnchors = this._hasAnchors || item.hasAnchor;\n }\n unshift(item) {\n this._items.unshift(item);\n this._hasAnchors = this._hasAnchors || item.hasAnchor;\n }\n length() {\n return this._items.length;\n }\n setSource(index, newSource) {\n if (this._items[index].source !== newSource) {\n this._disposeCaches();\n this._items[index].setSource(newSource);\n }\n }\n compile(onigLib) {\n if (!this._cached) {\n let regExps = this._items.map((e) => e.source);\n this._cached = new CompiledRule(onigLib, regExps, this._items.map((e) => e.ruleId));\n }\n return this._cached;\n }\n compileAG(onigLib, allowA, allowG) {\n if (!this._hasAnchors) {\n return this.compile(onigLib);\n } else {\n if (allowA) {\n if (allowG) {\n if (!this._anchorCache.A1_G1) {\n this._anchorCache.A1_G1 = this._resolveAnchors(onigLib, allowA, allowG);\n }\n return this._anchorCache.A1_G1;\n } else {\n if (!this._anchorCache.A1_G0) {\n this._anchorCache.A1_G0 = this._resolveAnchors(onigLib, allowA, allowG);\n }\n return this._anchorCache.A1_G0;\n }\n } else {\n if (allowG) {\n if (!this._anchorCache.A0_G1) {\n this._anchorCache.A0_G1 = this._resolveAnchors(onigLib, allowA, allowG);\n }\n return this._anchorCache.A0_G1;\n } else {\n if (!this._anchorCache.A0_G0) {\n this._anchorCache.A0_G0 = this._resolveAnchors(onigLib, allowA, allowG);\n }\n return this._anchorCache.A0_G0;\n }\n }\n }\n }\n _resolveAnchors(onigLib, allowA, allowG) {\n let regExps = this._items.map((e) => e.resolveAnchors(allowA, allowG));\n return new CompiledRule(onigLib, regExps, this._items.map((e) => e.ruleId));\n }\n};\nvar CompiledRule = class {\n constructor(onigLib, regExps, rules) {\n this.regExps = regExps;\n this.rules = rules;\n this.scanner = onigLib.createOnigScanner(regExps);\n }\n scanner;\n dispose() {\n if (typeof this.scanner.dispose === \"function\") {\n this.scanner.dispose();\n }\n }\n toString() {\n const r = [];\n for (let i = 0, len = this.rules.length; i < len; i++) {\n r.push(\" - \" + this.rules[i] + \": \" + this.regExps[i]);\n }\n return r.join(\"\\n\");\n }\n findNextMatchSync(string, startPosition, options) {\n const result = this.scanner.findNextMatchSync(string, startPosition, options);\n if (!result) {\n return null;\n }\n return {\n ruleId: this.rules[result.index],\n captureIndices: result.captureIndices\n };\n }\n};\n\n// src/grammar/basicScopesAttributeProvider.ts\nvar BasicScopeAttributes = class {\n constructor(languageId, tokenType) {\n this.languageId = languageId;\n this.tokenType = tokenType;\n }\n};\nvar BasicScopeAttributesProvider = class _BasicScopeAttributesProvider {\n _defaultAttributes;\n _embeddedLanguagesMatcher;\n constructor(initialLanguageId, embeddedLanguages) {\n this._defaultAttributes = new BasicScopeAttributes(initialLanguageId, 8 /* NotSet */);\n this._embeddedLanguagesMatcher = new ScopeMatcher(Object.entries(embeddedLanguages || {}));\n }\n getDefaultAttributes() {\n return this._defaultAttributes;\n }\n getBasicScopeAttributes(scopeName) {\n if (scopeName === null) {\n return _BasicScopeAttributesProvider._NULL_SCOPE_METADATA;\n }\n return this._getBasicScopeAttributes.get(scopeName);\n }\n static _NULL_SCOPE_METADATA = new BasicScopeAttributes(0, 0);\n _getBasicScopeAttributes = new CachedFn((scopeName) => {\n const languageId = this._scopeToLanguage(scopeName);\n const standardTokenType = this._toStandardTokenType(scopeName);\n return new BasicScopeAttributes(languageId, standardTokenType);\n });\n /**\n * Given a produced TM scope, return the language that token describes or null if unknown.\n * e.g. source.html => html, source.css.embedded.html => css, punctuation.definition.tag.html => null\n */\n _scopeToLanguage(scope) {\n return this._embeddedLanguagesMatcher.match(scope) || 0;\n }\n _toStandardTokenType(scopeName) {\n const m = scopeName.match(_BasicScopeAttributesProvider.STANDARD_TOKEN_TYPE_REGEXP);\n if (!m) {\n return 8 /* NotSet */;\n }\n switch (m[1]) {\n case \"comment\":\n return 1 /* Comment */;\n case \"string\":\n return 2 /* String */;\n case \"regex\":\n return 3 /* RegEx */;\n case \"meta.embedded\":\n return 0 /* Other */;\n }\n throw new Error(\"Unexpected match for standard token type!\");\n }\n static STANDARD_TOKEN_TYPE_REGEXP = /\\b(comment|string|regex|meta\\.embedded)\\b/;\n};\nvar ScopeMatcher = class {\n values;\n scopesRegExp;\n constructor(values) {\n if (values.length === 0) {\n this.values = null;\n this.scopesRegExp = null;\n } else {\n this.values = new Map(values);\n const escapedScopes = values.map(\n ([scopeName, value]) => escapeRegExpCharacters(scopeName)\n );\n escapedScopes.sort();\n escapedScopes.reverse();\n this.scopesRegExp = new RegExp(\n `^((${escapedScopes.join(\")|(\")}))($|\\\\.)`,\n \"\"\n );\n }\n }\n match(scope) {\n if (!this.scopesRegExp) {\n return void 0;\n }\n const m = scope.match(this.scopesRegExp);\n if (!m) {\n return void 0;\n }\n return this.values.get(m[1]);\n }\n};\n\n// src/debug.ts\nvar DebugFlags = {\n InDebugMode: typeof process !== \"undefined\" && !!process.env[\"VSCODE_TEXTMATE_DEBUG\"]\n};\nvar UseOnigurumaFindOptions = false;\n\n// src/grammar/tokenizeString.ts\nvar TokenizeStringResult = class {\n constructor(stack, stoppedEarly) {\n this.stack = stack;\n this.stoppedEarly = stoppedEarly;\n }\n};\nfunction _tokenizeString(grammar, lineText, isFirstLine, linePos, stack, lineTokens, checkWhileConditions, timeLimit) {\n const lineLength = lineText.content.length;\n let STOP = false;\n let anchorPosition = -1;\n if (checkWhileConditions) {\n const whileCheckResult = _checkWhileConditions(\n grammar,\n lineText,\n isFirstLine,\n linePos,\n stack,\n lineTokens\n );\n stack = whileCheckResult.stack;\n linePos = whileCheckResult.linePos;\n isFirstLine = whileCheckResult.isFirstLine;\n anchorPosition = whileCheckResult.anchorPosition;\n }\n const startTime = Date.now();\n while (!STOP) {\n if (timeLimit !== 0) {\n const elapsedTime = Date.now() - startTime;\n if (elapsedTime > timeLimit) {\n return new TokenizeStringResult(stack, true);\n }\n }\n scanNext();\n }\n return new TokenizeStringResult(stack, false);\n function scanNext() {\n if (false) {\n console.log(\"\");\n console.log(\n `@@scanNext ${linePos}: |${lineText.content.substr(linePos).replace(/\\n$/, \"\\\\n\")}|`\n );\n }\n const r = matchRuleOrInjections(\n grammar,\n lineText,\n isFirstLine,\n linePos,\n stack,\n anchorPosition\n );\n if (!r) {\n lineTokens.produce(stack, lineLength);\n STOP = true;\n return;\n }\n const captureIndices = r.captureIndices;\n const matchedRuleId = r.matchedRuleId;\n const hasAdvanced = captureIndices && captureIndices.length > 0 ? captureIndices[0].end > linePos : false;\n if (matchedRuleId === endRuleId) {\n const poppedRule = stack.getRule(grammar);\n if (false) {\n console.log(\n \" popping \" + poppedRule.debugName + \" - \" + poppedRule.debugEndRegExp\n );\n }\n lineTokens.produce(stack, captureIndices[0].start);\n stack = stack.withContentNameScopesList(stack.nameScopesList);\n handleCaptures(\n grammar,\n lineText,\n isFirstLine,\n stack,\n lineTokens,\n poppedRule.endCaptures,\n captureIndices\n );\n lineTokens.produce(stack, captureIndices[0].end);\n const popped = stack;\n stack = stack.parent;\n anchorPosition = popped.getAnchorPos();\n if (!hasAdvanced && popped.getEnterPos() === linePos) {\n if (false) {\n console.error(\n \"[1] - Grammar is in an endless loop - Grammar pushed & popped a rule without advancing\"\n );\n }\n stack = popped;\n lineTokens.produce(stack, lineLength);\n STOP = true;\n return;\n }\n } else {\n const _rule = grammar.getRule(matchedRuleId);\n lineTokens.produce(stack, captureIndices[0].start);\n const beforePush = stack;\n const scopeName = _rule.getName(lineText.content, captureIndices);\n const nameScopesList = stack.contentNameScopesList.pushAttributed(\n scopeName,\n grammar\n );\n stack = stack.push(\n matchedRuleId,\n linePos,\n anchorPosition,\n captureIndices[0].end === lineLength,\n null,\n nameScopesList,\n nameScopesList\n );\n if (_rule instanceof BeginEndRule) {\n const pushedRule = _rule;\n if (false) {\n console.log(\n \" pushing \" + pushedRule.debugName + \" - \" + pushedRule.debugBeginRegExp\n );\n }\n handleCaptures(\n grammar,\n lineText,\n isFirstLine,\n stack,\n lineTokens,\n pushedRule.beginCaptures,\n captureIndices\n );\n lineTokens.produce(stack, captureIndices[0].end);\n anchorPosition = captureIndices[0].end;\n const contentName = pushedRule.getContentName(\n lineText.content,\n captureIndices\n );\n const contentNameScopesList = nameScopesList.pushAttributed(\n contentName,\n grammar\n );\n stack = stack.withContentNameScopesList(contentNameScopesList);\n if (pushedRule.endHasBackReferences) {\n stack = stack.withEndRule(\n pushedRule.getEndWithResolvedBackReferences(\n lineText.content,\n captureIndices\n )\n );\n }\n if (!hasAdvanced && beforePush.hasSameRuleAs(stack)) {\n if (false) {\n console.error(\n \"[2] - Grammar is in an endless loop - Grammar pushed the same rule without advancing\"\n );\n }\n stack = stack.pop();\n lineTokens.produce(stack, lineLength);\n STOP = true;\n return;\n }\n } else if (_rule instanceof BeginWhileRule) {\n const pushedRule = _rule;\n if (false) {\n console.log(\" pushing \" + pushedRule.debugName);\n }\n handleCaptures(\n grammar,\n lineText,\n isFirstLine,\n stack,\n lineTokens,\n pushedRule.beginCaptures,\n captureIndices\n );\n lineTokens.produce(stack, captureIndices[0].end);\n anchorPosition = captureIndices[0].end;\n const contentName = pushedRule.getContentName(\n lineText.content,\n captureIndices\n );\n const contentNameScopesList = nameScopesList.pushAttributed(\n contentName,\n grammar\n );\n stack = stack.withContentNameScopesList(contentNameScopesList);\n if (pushedRule.whileHasBackReferences) {\n stack = stack.withEndRule(\n pushedRule.getWhileWithResolvedBackReferences(\n lineText.content,\n captureIndices\n )\n );\n }\n if (!hasAdvanced && beforePush.hasSameRuleAs(stack)) {\n if (false) {\n console.error(\n \"[3] - Grammar is in an endless loop - Grammar pushed the same rule without advancing\"\n );\n }\n stack = stack.pop();\n lineTokens.produce(stack, lineLength);\n STOP = true;\n return;\n }\n } else {\n const matchingRule = _rule;\n if (false) {\n console.log(\n \" matched \" + matchingRule.debugName + \" - \" + matchingRule.debugMatchRegExp\n );\n }\n handleCaptures(\n grammar,\n lineText,\n isFirstLine,\n stack,\n lineTokens,\n matchingRule.captures,\n captureIndices\n );\n lineTokens.produce(stack, captureIndices[0].end);\n stack = stack.pop();\n if (!hasAdvanced) {\n if (false) {\n console.error(\n \"[4] - Grammar is in an endless loop - Grammar is not advancing, nor is it pushing/popping\"\n );\n }\n stack = stack.safePop();\n lineTokens.produce(stack, lineLength);\n STOP = true;\n return;\n }\n }\n }\n if (captureIndices[0].end > linePos) {\n linePos = captureIndices[0].end;\n isFirstLine = false;\n }\n }\n}\nfunction _checkWhileConditions(grammar, lineText, isFirstLine, linePos, stack, lineTokens) {\n let anchorPosition = stack.beginRuleCapturedEOL ? 0 : -1;\n const whileRules = [];\n for (let node = stack; node; node = node.pop()) {\n const nodeRule = node.getRule(grammar);\n if (nodeRule instanceof BeginWhileRule) {\n whileRules.push({\n rule: nodeRule,\n stack: node\n });\n }\n }\n for (let whileRule = whileRules.pop(); whileRule; whileRule = whileRules.pop()) {\n const { ruleScanner, findOptions } = prepareRuleWhileSearch(whileRule.rule, grammar, whileRule.stack.endRule, isFirstLine, linePos === anchorPosition);\n const r = ruleScanner.findNextMatchSync(lineText, linePos, findOptions);\n if (false) {\n console.log(\" scanning for while rule\");\n console.log(ruleScanner.toString());\n }\n if (r) {\n const matchedRuleId = r.ruleId;\n if (matchedRuleId !== whileRuleId) {\n stack = whileRule.stack.pop();\n break;\n }\n if (r.captureIndices && r.captureIndices.length) {\n lineTokens.produce(whileRule.stack, r.captureIndices[0].start);\n handleCaptures(grammar, lineText, isFirstLine, whileRule.stack, lineTokens, whileRule.rule.whileCaptures, r.captureIndices);\n lineTokens.produce(whileRule.stack, r.captureIndices[0].end);\n anchorPosition = r.captureIndices[0].end;\n if (r.captureIndices[0].end > linePos) {\n linePos = r.captureIndices[0].end;\n isFirstLine = false;\n }\n }\n } else {\n if (false) {\n console.log(\" popping \" + whileRule.rule.debugName + \" - \" + whileRule.rule.debugWhileRegExp);\n }\n stack = whileRule.stack.pop();\n break;\n }\n }\n return { stack, linePos, anchorPosition, isFirstLine };\n}\nfunction matchRuleOrInjections(grammar, lineText, isFirstLine, linePos, stack, anchorPosition) {\n const matchResult = matchRule(grammar, lineText, isFirstLine, linePos, stack, anchorPosition);\n const injections = grammar.getInjections();\n if (injections.length === 0) {\n return matchResult;\n }\n const injectionResult = matchInjections(injections, grammar, lineText, isFirstLine, linePos, stack, anchorPosition);\n if (!injectionResult) {\n return matchResult;\n }\n if (!matchResult) {\n return injectionResult;\n }\n const matchResultScore = matchResult.captureIndices[0].start;\n const injectionResultScore = injectionResult.captureIndices[0].start;\n if (injectionResultScore < matchResultScore || injectionResult.priorityMatch && injectionResultScore === matchResultScore) {\n return injectionResult;\n }\n return matchResult;\n}\nfunction matchRule(grammar, lineText, isFirstLine, linePos, stack, anchorPosition) {\n const rule = stack.getRule(grammar);\n const { ruleScanner, findOptions } = prepareRuleSearch(rule, grammar, stack.endRule, isFirstLine, linePos === anchorPosition);\n const r = ruleScanner.findNextMatchSync(lineText, linePos, findOptions);\n if (r) {\n return {\n captureIndices: r.captureIndices,\n matchedRuleId: r.ruleId\n };\n }\n return null;\n}\nfunction matchInjections(injections, grammar, lineText, isFirstLine, linePos, stack, anchorPosition) {\n let bestMatchRating = Number.MAX_VALUE;\n let bestMatchCaptureIndices = null;\n let bestMatchRuleId;\n let bestMatchResultPriority = 0;\n const scopes = stack.contentNameScopesList.getScopeNames();\n for (let i = 0, len = injections.length; i < len; i++) {\n const injection = injections[i];\n if (!injection.matcher(scopes)) {\n continue;\n }\n const rule = grammar.getRule(injection.ruleId);\n const { ruleScanner, findOptions } = prepareRuleSearch(rule, grammar, null, isFirstLine, linePos === anchorPosition);\n const matchResult = ruleScanner.findNextMatchSync(lineText, linePos, findOptions);\n if (!matchResult) {\n continue;\n }\n if (false) {\n console.log(` matched injection: ${injection.debugSelector}`);\n console.log(ruleScanner.toString());\n }\n const matchRating = matchResult.captureIndices[0].start;\n if (matchRating >= bestMatchRating) {\n continue;\n }\n bestMatchRating = matchRating;\n bestMatchCaptureIndices = matchResult.captureIndices;\n bestMatchRuleId = matchResult.ruleId;\n bestMatchResultPriority = injection.priority;\n if (bestMatchRating === linePos) {\n break;\n }\n }\n if (bestMatchCaptureIndices) {\n return {\n priorityMatch: bestMatchResultPriority === -1,\n captureIndices: bestMatchCaptureIndices,\n matchedRuleId: bestMatchRuleId\n };\n }\n return null;\n}\nfunction prepareRuleSearch(rule, grammar, endRegexSource, allowA, allowG) {\n if (UseOnigurumaFindOptions) {\n const ruleScanner2 = rule.compile(grammar, endRegexSource);\n const findOptions = getFindOptions(allowA, allowG);\n return { ruleScanner: ruleScanner2, findOptions };\n }\n const ruleScanner = rule.compileAG(grammar, endRegexSource, allowA, allowG);\n return { ruleScanner, findOptions: 0 /* None */ };\n}\nfunction prepareRuleWhileSearch(rule, grammar, endRegexSource, allowA, allowG) {\n if (UseOnigurumaFindOptions) {\n const ruleScanner2 = rule.compileWhile(grammar, endRegexSource);\n const findOptions = getFindOptions(allowA, allowG);\n return { ruleScanner: ruleScanner2, findOptions };\n }\n const ruleScanner = rule.compileWhileAG(grammar, endRegexSource, allowA, allowG);\n return { ruleScanner, findOptions: 0 /* None */ };\n}\nfunction getFindOptions(allowA, allowG) {\n let options = 0 /* None */;\n if (!allowA) {\n options |= 1 /* NotBeginString */;\n }\n if (!allowG) {\n options |= 4 /* NotBeginPosition */;\n }\n return options;\n}\nfunction handleCaptures(grammar, lineText, isFirstLine, stack, lineTokens, captures, captureIndices) {\n if (captures.length === 0) {\n return;\n }\n const lineTextContent = lineText.content;\n const len = Math.min(captures.length, captureIndices.length);\n const localStack = [];\n const maxEnd = captureIndices[0].end;\n for (let i = 0; i < len; i++) {\n const captureRule = captures[i];\n if (captureRule === null) {\n continue;\n }\n const captureIndex = captureIndices[i];\n if (captureIndex.length === 0) {\n continue;\n }\n if (captureIndex.start > maxEnd) {\n break;\n }\n while (localStack.length > 0 && localStack[localStack.length - 1].endPos <= captureIndex.start) {\n lineTokens.produceFromScopes(localStack[localStack.length - 1].scopes, localStack[localStack.length - 1].endPos);\n localStack.pop();\n }\n if (localStack.length > 0) {\n lineTokens.produceFromScopes(localStack[localStack.length - 1].scopes, captureIndex.start);\n } else {\n lineTokens.produce(stack, captureIndex.start);\n }\n if (captureRule.retokenizeCapturedWithRuleId) {\n const scopeName = captureRule.getName(lineTextContent, captureIndices);\n const nameScopesList = stack.contentNameScopesList.pushAttributed(scopeName, grammar);\n const contentName = captureRule.getContentName(lineTextContent, captureIndices);\n const contentNameScopesList = nameScopesList.pushAttributed(contentName, grammar);\n const stackClone = stack.push(captureRule.retokenizeCapturedWithRuleId, captureIndex.start, -1, false, null, nameScopesList, contentNameScopesList);\n const onigSubStr = grammar.createOnigString(lineTextContent.substring(0, captureIndex.end));\n _tokenizeString(\n grammar,\n onigSubStr,\n isFirstLine && captureIndex.start === 0,\n captureIndex.start,\n stackClone,\n lineTokens,\n false,\n /* no time limit */\n 0\n );\n disposeOnigString(onigSubStr);\n continue;\n }\n const captureRuleScopeName = captureRule.getName(lineTextContent, captureIndices);\n if (captureRuleScopeName !== null) {\n const base = localStack.length > 0 ? localStack[localStack.length - 1].scopes : stack.contentNameScopesList;\n const captureRuleScopesList = base.pushAttributed(captureRuleScopeName, grammar);\n localStack.push(new LocalStackElement(captureRuleScopesList, captureIndex.end));\n }\n }\n while (localStack.length > 0) {\n lineTokens.produceFromScopes(localStack[localStack.length - 1].scopes, localStack[localStack.length - 1].endPos);\n localStack.pop();\n }\n}\nvar LocalStackElement = class {\n scopes;\n endPos;\n constructor(scopes, endPos) {\n this.scopes = scopes;\n this.endPos = endPos;\n }\n};\n\n// src/grammar/grammar.ts\nfunction createGrammar(scopeName, grammar, initialLanguage, embeddedLanguages, tokenTypes, balancedBracketSelectors, grammarRepository, onigLib) {\n return new Grammar(\n scopeName,\n grammar,\n initialLanguage,\n embeddedLanguages,\n tokenTypes,\n balancedBracketSelectors,\n grammarRepository,\n onigLib\n );\n}\nfunction collectInjections(result, selector, rule, ruleFactoryHelper, grammar) {\n const matchers = createMatchers(selector, nameMatcher);\n const ruleId = RuleFactory.getCompiledRuleId(rule, ruleFactoryHelper, grammar.repository);\n for (const matcher of matchers) {\n result.push({\n debugSelector: selector,\n matcher: matcher.matcher,\n ruleId,\n grammar,\n priority: matcher.priority\n });\n }\n}\nfunction nameMatcher(identifers, scopes) {\n if (scopes.length < identifers.length) {\n return false;\n }\n let lastIndex = 0;\n return identifers.every((identifier) => {\n for (let i = lastIndex; i < scopes.length; i++) {\n if (scopesAreMatching(scopes[i], identifier)) {\n lastIndex = i + 1;\n return true;\n }\n }\n return false;\n });\n}\nfunction scopesAreMatching(thisScopeName, scopeName) {\n if (!thisScopeName) {\n return false;\n }\n if (thisScopeName === scopeName) {\n return true;\n }\n const len = scopeName.length;\n return thisScopeName.length > len && thisScopeName.substr(0, len) === scopeName && thisScopeName[len] === \".\";\n}\nvar Grammar = class {\n constructor(_rootScopeName, grammar, initialLanguage, embeddedLanguages, tokenTypes, balancedBracketSelectors, grammarRepository, _onigLib) {\n this._rootScopeName = _rootScopeName;\n this.balancedBracketSelectors = balancedBracketSelectors;\n this._onigLib = _onigLib;\n this._basicScopeAttributesProvider = new BasicScopeAttributesProvider(\n initialLanguage,\n embeddedLanguages\n );\n this._rootId = -1;\n this._lastRuleId = 0;\n this._ruleId2desc = [null];\n this._includedGrammars = {};\n this._grammarRepository = grammarRepository;\n this._grammar = initGrammar(grammar, null);\n this._injections = null;\n this._tokenTypeMatchers = [];\n if (tokenTypes) {\n for (const selector of Object.keys(tokenTypes)) {\n const matchers = createMatchers(selector, nameMatcher);\n for (const matcher of matchers) {\n this._tokenTypeMatchers.push({\n matcher: matcher.matcher,\n type: tokenTypes[selector]\n });\n }\n }\n }\n }\n _rootId;\n _lastRuleId;\n _ruleId2desc;\n _includedGrammars;\n _grammarRepository;\n _grammar;\n _injections;\n _basicScopeAttributesProvider;\n _tokenTypeMatchers;\n get themeProvider() {\n return this._grammarRepository;\n }\n dispose() {\n for (const rule of this._ruleId2desc) {\n if (rule) {\n rule.dispose();\n }\n }\n }\n createOnigScanner(sources) {\n return this._onigLib.createOnigScanner(sources);\n }\n createOnigString(sources) {\n return this._onigLib.createOnigString(sources);\n }\n getMetadataForScope(scope) {\n return this._basicScopeAttributesProvider.getBasicScopeAttributes(scope);\n }\n _collectInjections() {\n const grammarRepository = {\n lookup: (scopeName2) => {\n if (scopeName2 === this._rootScopeName) {\n return this._grammar;\n }\n return this.getExternalGrammar(scopeName2);\n },\n injections: (scopeName2) => {\n return this._grammarRepository.injections(scopeName2);\n }\n };\n const result = [];\n const scopeName = this._rootScopeName;\n const grammar = grammarRepository.lookup(scopeName);\n if (grammar) {\n const rawInjections = grammar.injections;\n if (rawInjections) {\n for (let expression in rawInjections) {\n collectInjections(\n result,\n expression,\n rawInjections[expression],\n this,\n grammar\n );\n }\n }\n const injectionScopeNames = this._grammarRepository.injections(scopeName);\n if (injectionScopeNames) {\n injectionScopeNames.forEach((injectionScopeName) => {\n const injectionGrammar = this.getExternalGrammar(injectionScopeName);\n if (injectionGrammar) {\n const selector = injectionGrammar.injectionSelector;\n if (selector) {\n collectInjections(\n result,\n selector,\n injectionGrammar,\n this,\n injectionGrammar\n );\n }\n }\n });\n }\n }\n result.sort((i1, i2) => i1.priority - i2.priority);\n return result;\n }\n getInjections() {\n if (this._injections === null) {\n this._injections = this._collectInjections();\n }\n return this._injections;\n }\n registerRule(factory) {\n const id = ++this._lastRuleId;\n const result = factory(ruleIdFromNumber(id));\n this._ruleId2desc[id] = result;\n return result;\n }\n getRule(ruleId) {\n return this._ruleId2desc[ruleIdToNumber(ruleId)];\n }\n getExternalGrammar(scopeName, repository) {\n if (this._includedGrammars[scopeName]) {\n return this._includedGrammars[scopeName];\n } else if (this._grammarRepository) {\n const rawIncludedGrammar = this._grammarRepository.lookup(scopeName);\n if (rawIncludedGrammar) {\n this._includedGrammars[scopeName] = initGrammar(\n rawIncludedGrammar,\n repository && repository.$base\n );\n return this._includedGrammars[scopeName];\n }\n }\n return void 0;\n }\n tokenizeLine(lineText, prevState, timeLimit = 0) {\n const r = this._tokenize(lineText, prevState, false, timeLimit);\n return {\n tokens: r.lineTokens.getResult(r.ruleStack, r.lineLength),\n ruleStack: r.ruleStack,\n stoppedEarly: r.stoppedEarly\n };\n }\n tokenizeLine2(lineText, prevState, timeLimit = 0) {\n const r = this._tokenize(lineText, prevState, true, timeLimit);\n return {\n tokens: r.lineTokens.getBinaryResult(r.ruleStack, r.lineLength),\n ruleStack: r.ruleStack,\n stoppedEarly: r.stoppedEarly\n };\n }\n _tokenize(lineText, prevState, emitBinaryTokens, timeLimit) {\n if (this._rootId === -1) {\n this._rootId = RuleFactory.getCompiledRuleId(\n this._grammar.repository.$self,\n this,\n this._grammar.repository\n );\n this.getInjections();\n }\n let isFirstLine;\n if (!prevState || prevState === StateStackImpl.NULL) {\n isFirstLine = true;\n const rawDefaultMetadata = this._basicScopeAttributesProvider.getDefaultAttributes();\n const defaultStyle = this.themeProvider.getDefaults();\n const defaultMetadata = EncodedTokenMetadata.set(\n 0,\n rawDefaultMetadata.languageId,\n rawDefaultMetadata.tokenType,\n null,\n defaultStyle.fontStyle,\n defaultStyle.foregroundId,\n defaultStyle.backgroundId\n );\n const rootScopeName = this.getRule(this._rootId).getName(\n null,\n null\n );\n let scopeList;\n if (rootScopeName) {\n scopeList = AttributedScopeStack.createRootAndLookUpScopeName(\n rootScopeName,\n defaultMetadata,\n this\n );\n } else {\n scopeList = AttributedScopeStack.createRoot(\n \"unknown\",\n defaultMetadata\n );\n }\n prevState = new StateStackImpl(\n null,\n this._rootId,\n -1,\n -1,\n false,\n null,\n scopeList,\n scopeList\n );\n } else {\n isFirstLine = false;\n prevState.reset();\n }\n lineText = lineText + \"\\n\";\n const onigLineText = this.createOnigString(lineText);\n const lineLength = onigLineText.content.length;\n const lineTokens = new LineTokens(\n emitBinaryTokens,\n lineText,\n this._tokenTypeMatchers,\n this.balancedBracketSelectors\n );\n const r = _tokenizeString(\n this,\n onigLineText,\n isFirstLine,\n 0,\n prevState,\n lineTokens,\n true,\n timeLimit\n );\n disposeOnigString(onigLineText);\n return {\n lineLength,\n lineTokens,\n ruleStack: r.stack,\n stoppedEarly: r.stoppedEarly\n };\n }\n};\nfunction initGrammar(grammar, base) {\n grammar = clone(grammar);\n grammar.repository = grammar.repository || {};\n grammar.repository.$self = {\n $vscodeTextmateLocation: grammar.$vscodeTextmateLocation,\n patterns: grammar.patterns,\n name: grammar.scopeName\n };\n grammar.repository.$base = base || grammar.repository.$self;\n return grammar;\n}\nvar AttributedScopeStack = class _AttributedScopeStack {\n /**\n * Invariant:\n * ```\n * if (parent && !scopePath.extends(parent.scopePath)) {\n * \tthrow new Error();\n * }\n * ```\n */\n constructor(parent, scopePath, tokenAttributes) {\n this.parent = parent;\n this.scopePath = scopePath;\n this.tokenAttributes = tokenAttributes;\n }\n static fromExtension(namesScopeList, contentNameScopesList) {\n let current = namesScopeList;\n let scopeNames = namesScopeList?.scopePath ?? null;\n for (const frame of contentNameScopesList) {\n scopeNames = ScopeStack.push(scopeNames, frame.scopeNames);\n current = new _AttributedScopeStack(current, scopeNames, frame.encodedTokenAttributes);\n }\n return current;\n }\n static createRoot(scopeName, tokenAttributes) {\n return new _AttributedScopeStack(null, new ScopeStack(null, scopeName), tokenAttributes);\n }\n static createRootAndLookUpScopeName(scopeName, tokenAttributes, grammar) {\n const rawRootMetadata = grammar.getMetadataForScope(scopeName);\n const scopePath = new ScopeStack(null, scopeName);\n const rootStyle = grammar.themeProvider.themeMatch(scopePath);\n const resolvedTokenAttributes = _AttributedScopeStack.mergeAttributes(\n tokenAttributes,\n rawRootMetadata,\n rootStyle\n );\n return new _AttributedScopeStack(null, scopePath, resolvedTokenAttributes);\n }\n get scopeName() {\n return this.scopePath.scopeName;\n }\n toString() {\n return this.getScopeNames().join(\" \");\n }\n equals(other) {\n return _AttributedScopeStack.equals(this, other);\n }\n static equals(a, b) {\n do {\n if (a === b) {\n return true;\n }\n if (!a && !b) {\n return true;\n }\n if (!a || !b) {\n return false;\n }\n if (a.scopeName !== b.scopeName || a.tokenAttributes !== b.tokenAttributes) {\n return false;\n }\n a = a.parent;\n b = b.parent;\n } while (true);\n }\n static mergeAttributes(existingTokenAttributes, basicScopeAttributes, styleAttributes) {\n let fontStyle = -1 /* NotSet */;\n let foreground = 0;\n let background = 0;\n if (styleAttributes !== null) {\n fontStyle = styleAttributes.fontStyle;\n foreground = styleAttributes.foregroundId;\n background = styleAttributes.backgroundId;\n }\n return EncodedTokenMetadata.set(\n existingTokenAttributes,\n basicScopeAttributes.languageId,\n basicScopeAttributes.tokenType,\n null,\n fontStyle,\n foreground,\n background\n );\n }\n pushAttributed(scopePath, grammar) {\n if (scopePath === null) {\n return this;\n }\n if (scopePath.indexOf(\" \") === -1) {\n return _AttributedScopeStack._pushAttributed(this, scopePath, grammar);\n }\n const scopes = scopePath.split(/ /g);\n let result = this;\n for (const scope of scopes) {\n result = _AttributedScopeStack._pushAttributed(result, scope, grammar);\n }\n return result;\n }\n static _pushAttributed(target, scopeName, grammar) {\n const rawMetadata = grammar.getMetadataForScope(scopeName);\n const newPath = target.scopePath.push(scopeName);\n const scopeThemeMatchResult = grammar.themeProvider.themeMatch(newPath);\n const metadata = _AttributedScopeStack.mergeAttributes(\n target.tokenAttributes,\n rawMetadata,\n scopeThemeMatchResult\n );\n return new _AttributedScopeStack(target, newPath, metadata);\n }\n getScopeNames() {\n return this.scopePath.getSegments();\n }\n getExtensionIfDefined(base) {\n const result = [];\n let self = this;\n while (self && self !== base) {\n result.push({\n encodedTokenAttributes: self.tokenAttributes,\n scopeNames: self.scopePath.getExtensionIfDefined(self.parent?.scopePath ?? null)\n });\n self = self.parent;\n }\n return self === base ? result.reverse() : void 0;\n }\n};\nvar StateStackImpl = class _StateStackImpl {\n /**\n * Invariant:\n * ```\n * if (contentNameScopesList !== nameScopesList && contentNameScopesList?.parent !== nameScopesList) {\n * \tthrow new Error();\n * }\n * if (this.parent && !nameScopesList.extends(this.parent.contentNameScopesList)) {\n * \tthrow new Error();\n * }\n * ```\n */\n constructor(parent, ruleId, enterPos, anchorPos, beginRuleCapturedEOL, endRule, nameScopesList, contentNameScopesList) {\n this.parent = parent;\n this.ruleId = ruleId;\n this.beginRuleCapturedEOL = beginRuleCapturedEOL;\n this.endRule = endRule;\n this.nameScopesList = nameScopesList;\n this.contentNameScopesList = contentNameScopesList;\n this.depth = this.parent ? this.parent.depth + 1 : 1;\n this._enterPos = enterPos;\n this._anchorPos = anchorPos;\n }\n _stackElementBrand = void 0;\n // TODO remove me\n static NULL = new _StateStackImpl(\n null,\n 0,\n 0,\n 0,\n false,\n null,\n null,\n null\n );\n /**\n * The position on the current line where this state was pushed.\n * This is relevant only while tokenizing a line, to detect endless loops.\n * Its value is meaningless across lines.\n */\n _enterPos;\n /**\n * The captured anchor position when this stack element was pushed.\n * This is relevant only while tokenizing a line, to restore the anchor position when popping.\n * Its value is meaningless across lines.\n */\n _anchorPos;\n /**\n * The depth of the stack.\n */\n depth;\n equals(other) {\n if (other === null) {\n return false;\n }\n return _StateStackImpl._equals(this, other);\n }\n static _equals(a, b) {\n if (a === b) {\n return true;\n }\n if (!this._structuralEquals(a, b)) {\n return false;\n }\n return AttributedScopeStack.equals(a.contentNameScopesList, b.contentNameScopesList);\n }\n /**\n * A structural equals check. Does not take into account `scopes`.\n */\n static _structuralEquals(a, b) {\n do {\n if (a === b) {\n return true;\n }\n if (!a && !b) {\n return true;\n }\n if (!a || !b) {\n return false;\n }\n if (a.depth !== b.depth || a.ruleId !== b.ruleId || a.endRule !== b.endRule) {\n return false;\n }\n a = a.parent;\n b = b.parent;\n } while (true);\n }\n clone() {\n return this;\n }\n static _reset(el) {\n while (el) {\n el._enterPos = -1;\n el._anchorPos = -1;\n el = el.parent;\n }\n }\n reset() {\n _StateStackImpl._reset(this);\n }\n pop() {\n return this.parent;\n }\n safePop() {\n if (this.parent) {\n return this.parent;\n }\n return this;\n }\n push(ruleId, enterPos, anchorPos, beginRuleCapturedEOL, endRule, nameScopesList, contentNameScopesList) {\n return new _StateStackImpl(\n this,\n ruleId,\n enterPos,\n anchorPos,\n beginRuleCapturedEOL,\n endRule,\n nameScopesList,\n contentNameScopesList\n );\n }\n getEnterPos() {\n return this._enterPos;\n }\n getAnchorPos() {\n return this._anchorPos;\n }\n getRule(grammar) {\n return grammar.getRule(this.ruleId);\n }\n toString() {\n const r = [];\n this._writeString(r, 0);\n return \"[\" + r.join(\",\") + \"]\";\n }\n _writeString(res, outIndex) {\n if (this.parent) {\n outIndex = this.parent._writeString(res, outIndex);\n }\n res[outIndex++] = `(${this.ruleId}, ${this.nameScopesList?.toString()}, ${this.contentNameScopesList?.toString()})`;\n return outIndex;\n }\n withContentNameScopesList(contentNameScopeStack) {\n if (this.contentNameScopesList === contentNameScopeStack) {\n return this;\n }\n return this.parent.push(\n this.ruleId,\n this._enterPos,\n this._anchorPos,\n this.beginRuleCapturedEOL,\n this.endRule,\n this.nameScopesList,\n contentNameScopeStack\n );\n }\n withEndRule(endRule) {\n if (this.endRule === endRule) {\n return this;\n }\n return new _StateStackImpl(\n this.parent,\n this.ruleId,\n this._enterPos,\n this._anchorPos,\n this.beginRuleCapturedEOL,\n endRule,\n this.nameScopesList,\n this.contentNameScopesList\n );\n }\n // Used to warn of endless loops\n hasSameRuleAs(other) {\n let el = this;\n while (el && el._enterPos === other._enterPos) {\n if (el.ruleId === other.ruleId) {\n return true;\n }\n el = el.parent;\n }\n return false;\n }\n toStateStackFrame() {\n return {\n ruleId: ruleIdToNumber(this.ruleId),\n beginRuleCapturedEOL: this.beginRuleCapturedEOL,\n endRule: this.endRule,\n nameScopesList: this.nameScopesList?.getExtensionIfDefined(this.parent?.nameScopesList ?? null) ?? [],\n contentNameScopesList: this.contentNameScopesList?.getExtensionIfDefined(this.nameScopesList) ?? []\n };\n }\n static pushFrame(self, frame) {\n const namesScopeList = AttributedScopeStack.fromExtension(self?.nameScopesList ?? null, frame.nameScopesList);\n return new _StateStackImpl(\n self,\n ruleIdFromNumber(frame.ruleId),\n frame.enterPos ?? -1,\n frame.anchorPos ?? -1,\n frame.beginRuleCapturedEOL,\n frame.endRule,\n namesScopeList,\n AttributedScopeStack.fromExtension(namesScopeList, frame.contentNameScopesList)\n );\n }\n};\nvar BalancedBracketSelectors = class {\n balancedBracketScopes;\n unbalancedBracketScopes;\n allowAny = false;\n constructor(balancedBracketScopes, unbalancedBracketScopes) {\n this.balancedBracketScopes = balancedBracketScopes.flatMap(\n (selector) => {\n if (selector === \"*\") {\n this.allowAny = true;\n return [];\n }\n return createMatchers(selector, nameMatcher).map((m) => m.matcher);\n }\n );\n this.unbalancedBracketScopes = unbalancedBracketScopes.flatMap(\n (selector) => createMatchers(selector, nameMatcher).map((m) => m.matcher)\n );\n }\n get matchesAlways() {\n return this.allowAny && this.unbalancedBracketScopes.length === 0;\n }\n get matchesNever() {\n return this.balancedBracketScopes.length === 0 && !this.allowAny;\n }\n match(scopes) {\n for (const excluder of this.unbalancedBracketScopes) {\n if (excluder(scopes)) {\n return false;\n }\n }\n for (const includer of this.balancedBracketScopes) {\n if (includer(scopes)) {\n return true;\n }\n }\n return this.allowAny;\n }\n};\nvar LineTokens = class {\n constructor(emitBinaryTokens, lineText, tokenTypeOverrides, balancedBracketSelectors) {\n this.balancedBracketSelectors = balancedBracketSelectors;\n this._emitBinaryTokens = emitBinaryTokens;\n this._tokenTypeOverrides = tokenTypeOverrides;\n if (false) {\n this._lineText = lineText;\n } else {\n this._lineText = null;\n }\n this._tokens = [];\n this._binaryTokens = [];\n this._lastTokenEndIndex = 0;\n }\n _emitBinaryTokens;\n /**\n * defined only if `false`.\n */\n _lineText;\n /**\n * used only if `_emitBinaryTokens` is false.\n */\n _tokens;\n /**\n * used only if `_emitBinaryTokens` is true.\n */\n _binaryTokens;\n _lastTokenEndIndex;\n _tokenTypeOverrides;\n produce(stack, endIndex) {\n this.produceFromScopes(stack.contentNameScopesList, endIndex);\n }\n produceFromScopes(scopesList, endIndex) {\n if (this._lastTokenEndIndex >= endIndex) {\n return;\n }\n if (this._emitBinaryTokens) {\n let metadata = scopesList?.tokenAttributes ?? 0;\n let containsBalancedBrackets = false;\n if (this.balancedBracketSelectors?.matchesAlways) {\n containsBalancedBrackets = true;\n }\n if (this._tokenTypeOverrides.length > 0 || this.balancedBracketSelectors && !this.balancedBracketSelectors.matchesAlways && !this.balancedBracketSelectors.matchesNever) {\n const scopes2 = scopesList?.getScopeNames() ?? [];\n for (const tokenType of this._tokenTypeOverrides) {\n if (tokenType.matcher(scopes2)) {\n metadata = EncodedTokenMetadata.set(\n metadata,\n 0,\n toOptionalTokenType(tokenType.type),\n null,\n -1 /* NotSet */,\n 0,\n 0\n );\n }\n }\n if (this.balancedBracketSelectors) {\n containsBalancedBrackets = this.balancedBracketSelectors.match(scopes2);\n }\n }\n if (containsBalancedBrackets) {\n metadata = EncodedTokenMetadata.set(\n metadata,\n 0,\n 8 /* NotSet */,\n containsBalancedBrackets,\n -1 /* NotSet */,\n 0,\n 0\n );\n }\n if (this._binaryTokens.length > 0 && this._binaryTokens[this._binaryTokens.length - 1] === metadata) {\n this._lastTokenEndIndex = endIndex;\n return;\n }\n this._binaryTokens.push(this._lastTokenEndIndex);\n this._binaryTokens.push(metadata);\n this._lastTokenEndIndex = endIndex;\n return;\n }\n const scopes = scopesList?.getScopeNames() ?? [];\n this._tokens.push({\n startIndex: this._lastTokenEndIndex,\n endIndex,\n // value: lineText.substring(lastTokenEndIndex, endIndex),\n scopes\n });\n this._lastTokenEndIndex = endIndex;\n }\n getResult(stack, lineLength) {\n if (this._tokens.length > 0 && this._tokens[this._tokens.length - 1].startIndex === lineLength - 1) {\n this._tokens.pop();\n }\n if (this._tokens.length === 0) {\n this._lastTokenEndIndex = -1;\n this.produce(stack, lineLength);\n this._tokens[this._tokens.length - 1].startIndex = 0;\n }\n return this._tokens;\n }\n getBinaryResult(stack, lineLength) {\n if (this._binaryTokens.length > 0 && this._binaryTokens[this._binaryTokens.length - 2] === lineLength - 1) {\n this._binaryTokens.pop();\n this._binaryTokens.pop();\n }\n if (this._binaryTokens.length === 0) {\n this._lastTokenEndIndex = -1;\n this.produce(stack, lineLength);\n this._binaryTokens[this._binaryTokens.length - 2] = 0;\n }\n const result = new Uint32Array(this._binaryTokens.length);\n for (let i = 0, len = this._binaryTokens.length; i < len; i++) {\n result[i] = this._binaryTokens[i];\n }\n return result;\n }\n};\n\n// src/registry.ts\nvar SyncRegistry = class {\n constructor(theme, _onigLib) {\n this._onigLib = _onigLib;\n this._theme = theme;\n }\n _grammars = /* @__PURE__ */ new Map();\n _rawGrammars = /* @__PURE__ */ new Map();\n _injectionGrammars = /* @__PURE__ */ new Map();\n _theme;\n dispose() {\n for (const grammar of this._grammars.values()) {\n grammar.dispose();\n }\n }\n setTheme(theme) {\n this._theme = theme;\n }\n getColorMap() {\n return this._theme.getColorMap();\n }\n /**\n * Add `grammar` to registry and return a list of referenced scope names\n */\n addGrammar(grammar, injectionScopeNames) {\n this._rawGrammars.set(grammar.scopeName, grammar);\n if (injectionScopeNames) {\n this._injectionGrammars.set(grammar.scopeName, injectionScopeNames);\n }\n }\n /**\n * Lookup a raw grammar.\n */\n lookup(scopeName) {\n return this._rawGrammars.get(scopeName);\n }\n /**\n * Returns the injections for the given grammar\n */\n injections(targetScope) {\n return this._injectionGrammars.get(targetScope);\n }\n /**\n * Get the default theme settings\n */\n getDefaults() {\n return this._theme.getDefaults();\n }\n /**\n * Match a scope in the theme.\n */\n themeMatch(scopePath) {\n return this._theme.match(scopePath);\n }\n /**\n * Lookup a grammar.\n */\n grammarForScopeName(scopeName, initialLanguage, embeddedLanguages, tokenTypes, balancedBracketSelectors) {\n if (!this._grammars.has(scopeName)) {\n let rawGrammar = this._rawGrammars.get(scopeName);\n if (!rawGrammar) {\n return null;\n }\n this._grammars.set(scopeName, createGrammar(\n scopeName,\n rawGrammar,\n initialLanguage,\n embeddedLanguages,\n tokenTypes,\n balancedBracketSelectors,\n this,\n this._onigLib\n ));\n }\n return this._grammars.get(scopeName);\n }\n};\n\n// src/index.ts\nvar Registry = class {\n _options;\n _syncRegistry;\n _ensureGrammarCache;\n constructor(options) {\n this._options = options;\n this._syncRegistry = new SyncRegistry(\n Theme.createFromRawTheme(options.theme, options.colorMap),\n options.onigLib\n );\n this._ensureGrammarCache = /* @__PURE__ */ new Map();\n }\n dispose() {\n this._syncRegistry.dispose();\n }\n /**\n * Change the theme. Once called, no previous `ruleStack` should be used anymore.\n */\n setTheme(theme, colorMap) {\n this._syncRegistry.setTheme(Theme.createFromRawTheme(theme, colorMap));\n }\n /**\n * Returns a lookup array for color ids.\n */\n getColorMap() {\n return this._syncRegistry.getColorMap();\n }\n /**\n * Load the grammar for `scopeName` and all referenced included grammars asynchronously.\n * Please do not use language id 0.\n */\n loadGrammarWithEmbeddedLanguages(initialScopeName, initialLanguage, embeddedLanguages) {\n return this.loadGrammarWithConfiguration(initialScopeName, initialLanguage, { embeddedLanguages });\n }\n /**\n * Load the grammar for `scopeName` and all referenced included grammars asynchronously.\n * Please do not use language id 0.\n */\n loadGrammarWithConfiguration(initialScopeName, initialLanguage, configuration) {\n return this._loadGrammar(\n initialScopeName,\n initialLanguage,\n configuration.embeddedLanguages,\n configuration.tokenTypes,\n new BalancedBracketSelectors(\n configuration.balancedBracketSelectors || [],\n configuration.unbalancedBracketSelectors || []\n )\n );\n }\n /**\n * Load the grammar for `scopeName` and all referenced included grammars asynchronously.\n */\n loadGrammar(initialScopeName) {\n return this._loadGrammar(initialScopeName, 0, null, null, null);\n }\n _loadGrammar(initialScopeName, initialLanguage, embeddedLanguages, tokenTypes, balancedBracketSelectors) {\n const dependencyProcessor = new ScopeDependencyProcessor(this._syncRegistry, initialScopeName);\n while (dependencyProcessor.Q.length > 0) {\n dependencyProcessor.Q.map((request) => this._loadSingleGrammar(request.scopeName));\n dependencyProcessor.processQueue();\n }\n return this._grammarForScopeName(\n initialScopeName,\n initialLanguage,\n embeddedLanguages,\n tokenTypes,\n balancedBracketSelectors\n );\n }\n _loadSingleGrammar(scopeName) {\n if (!this._ensureGrammarCache.has(scopeName)) {\n this._doLoadSingleGrammar(scopeName);\n this._ensureGrammarCache.set(scopeName, true);\n }\n }\n _doLoadSingleGrammar(scopeName) {\n const grammar = this._options.loadGrammar(scopeName);\n if (grammar) {\n const injections = typeof this._options.getInjections === \"function\" ? this._options.getInjections(scopeName) : void 0;\n this._syncRegistry.addGrammar(grammar, injections);\n }\n }\n /**\n * Adds a rawGrammar.\n */\n addGrammar(rawGrammar, injections = [], initialLanguage = 0, embeddedLanguages = null) {\n this._syncRegistry.addGrammar(rawGrammar, injections);\n return this._grammarForScopeName(rawGrammar.scopeName, initialLanguage, embeddedLanguages);\n }\n /**\n * Get the grammar for `scopeName`. The grammar must first be created via `loadGrammar` or `addGrammar`.\n */\n _grammarForScopeName(scopeName, initialLanguage = 0, embeddedLanguages = null, tokenTypes = null, balancedBracketSelectors = null) {\n return this._syncRegistry.grammarForScopeName(\n scopeName,\n initialLanguage,\n embeddedLanguages,\n tokenTypes,\n balancedBracketSelectors\n );\n }\n};\nvar INITIAL = StateStackImpl.NULL;\nexport {\n EncodedTokenMetadata,\n FindOption,\n FontStyle,\n INITIAL,\n Registry,\n Theme,\n disposeOnigString\n};\n","/**\n * @typedef CoreOptions\n * @property {ReadonlyArray<string>} [subset=[]]\n * Whether to only escape the given subset of characters.\n * @property {boolean} [escapeOnly=false]\n * Whether to only escape possibly dangerous characters.\n * Those characters are `\"`, `&`, `'`, `<`, `>`, and `` ` ``.\n *\n * @typedef FormatOptions\n * @property {(code: number, next: number, options: CoreWithFormatOptions) => string} format\n * Format strategy.\n *\n * @typedef {CoreOptions & FormatOptions & import('./util/format-smart.js').FormatSmartOptions} CoreWithFormatOptions\n */\n\nconst defaultSubsetRegex = /[\"&'<>`]/g\nconst surrogatePairsRegex = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g\nconst controlCharactersRegex =\n // eslint-disable-next-line no-control-regex, unicorn/no-hex-escape\n /[\\x01-\\t\\v\\f\\x0E-\\x1F\\x7F\\x81\\x8D\\x8F\\x90\\x9D\\xA0-\\uFFFF]/g\nconst regexEscapeRegex = /[|\\\\{}()[\\]^$+*?.]/g\n\n/** @type {WeakMap<ReadonlyArray<string>, RegExp>} */\nconst subsetToRegexCache = new WeakMap()\n\n/**\n * Encode certain characters in `value`.\n *\n * @param {string} value\n * @param {CoreWithFormatOptions} options\n * @returns {string}\n */\nexport function core(value, options) {\n value = value.replace(\n options.subset\n ? charactersToExpressionCached(options.subset)\n : defaultSubsetRegex,\n basic\n )\n\n if (options.subset || options.escapeOnly) {\n return value\n }\n\n return (\n value\n // Surrogate pairs.\n .replace(surrogatePairsRegex, surrogate)\n // BMP control characters (C0 except for LF, CR, SP; DEL; and some more\n // non-ASCII ones).\n .replace(controlCharactersRegex, basic)\n )\n\n /**\n * @param {string} pair\n * @param {number} index\n * @param {string} all\n */\n function surrogate(pair, index, all) {\n return options.format(\n (pair.charCodeAt(0) - 0xd800) * 0x400 +\n pair.charCodeAt(1) -\n 0xdc00 +\n 0x10000,\n all.charCodeAt(index + 2),\n options\n )\n }\n\n /**\n * @param {string} character\n * @param {number} index\n * @param {string} all\n */\n function basic(character, index, all) {\n return options.format(\n character.charCodeAt(0),\n all.charCodeAt(index + 1),\n options\n )\n }\n}\n\n/**\n * A wrapper function that caches the result of `charactersToExpression` with a WeakMap.\n * This can improve performance when tooling calls `charactersToExpression` repeatedly\n * with the same subset.\n *\n * @param {ReadonlyArray<string>} subset\n * @returns {RegExp}\n */\nfunction charactersToExpressionCached(subset) {\n let cached = subsetToRegexCache.get(subset)\n\n if (!cached) {\n cached = charactersToExpression(subset)\n subsetToRegexCache.set(subset, cached)\n }\n\n return cached\n}\n\n/**\n * @param {ReadonlyArray<string>} subset\n * @returns {RegExp}\n */\nfunction charactersToExpression(subset) {\n /** @type {Array<string>} */\n const groups = []\n let index = -1\n\n while (++index < subset.length) {\n groups.push(subset[index].replace(regexEscapeRegex, '\\\\$&'))\n }\n\n return new RegExp('(?:' + groups.join('|') + ')', 'g')\n}\n","const hexadecimalRegex = /[\\dA-Fa-f]/\n\n/**\n * Configurable ways to encode characters as hexadecimal references.\n *\n * @param {number} code\n * @param {number} next\n * @param {boolean|undefined} omit\n * @returns {string}\n */\nexport function toHexadecimal(code, next, omit) {\n const value = '&#x' + code.toString(16).toUpperCase()\n return omit && next && !hexadecimalRegex.test(String.fromCharCode(next))\n ? value\n : value + ';'\n}\n","const decimalRegex = /\\d/\n\n/**\n * Configurable ways to encode characters as decimal references.\n *\n * @param {number} code\n * @param {number} next\n * @param {boolean|undefined} omit\n * @returns {string}\n */\nexport function toDecimal(code, next, omit) {\n const value = '&#' + String(code)\n return omit && next && !decimalRegex.test(String.fromCharCode(next))\n ? value\n : value + ';'\n}\n","/**\n * List of legacy HTML named character references that don’t need a trailing semicolon.\n *\n * @type {Array<string>}\n */\nexport const characterEntitiesLegacy = [\n 'AElig',\n 'AMP',\n 'Aacute',\n 'Acirc',\n 'Agrave',\n 'Aring',\n 'Atilde',\n 'Auml',\n 'COPY',\n 'Ccedil',\n 'ETH',\n 'Eacute',\n 'Ecirc',\n 'Egrave',\n 'Euml',\n 'GT',\n 'Iacute',\n 'Icirc',\n 'Igrave',\n 'Iuml',\n 'LT',\n 'Ntilde',\n 'Oacute',\n 'Ocirc',\n 'Ograve',\n 'Oslash',\n 'Otilde',\n 'Ouml',\n 'QUOT',\n 'REG',\n 'THORN',\n 'Uacute',\n 'Ucirc',\n 'Ugrave',\n 'Uuml',\n 'Yacute',\n 'aacute',\n 'acirc',\n 'acute',\n 'aelig',\n 'agrave',\n 'amp',\n 'aring',\n 'atilde',\n 'auml',\n 'brvbar',\n 'ccedil',\n 'cedil',\n 'cent',\n 'copy',\n 'curren',\n 'deg',\n 'divide',\n 'eacute',\n 'ecirc',\n 'egrave',\n 'eth',\n 'euml',\n 'frac12',\n 'frac14',\n 'frac34',\n 'gt',\n 'iacute',\n 'icirc',\n 'iexcl',\n 'igrave',\n 'iquest',\n 'iuml',\n 'laquo',\n 'lt',\n 'macr',\n 'micro',\n 'middot',\n 'nbsp',\n 'not',\n 'ntilde',\n 'oacute',\n 'ocirc',\n 'ograve',\n 'ordf',\n 'ordm',\n 'oslash',\n 'otilde',\n 'ouml',\n 'para',\n 'plusmn',\n 'pound',\n 'quot',\n 'raquo',\n 'reg',\n 'sect',\n 'shy',\n 'sup1',\n 'sup2',\n 'sup3',\n 'szlig',\n 'thorn',\n 'times',\n 'uacute',\n 'ucirc',\n 'ugrave',\n 'uml',\n 'uuml',\n 'yacute',\n 'yen',\n 'yuml'\n]\n","/**\n * Map of named character references from HTML 4.\n *\n * @type {Record<string, string>}\n */\nexport const characterEntitiesHtml4 = {\n nbsp: ' ',\n iexcl: '¡',\n cent: '¢',\n pound: '£',\n curren: '¤',\n yen: '¥',\n brvbar: '¦',\n sect: '§',\n uml: '¨',\n copy: '©',\n ordf: 'ª',\n laquo: '«',\n not: '¬',\n shy: '­',\n reg: '®',\n macr: '¯',\n deg: '°',\n plusmn: '±',\n sup2: '²',\n sup3: '³',\n acute: '´',\n micro: 'µ',\n para: '¶',\n middot: '·',\n cedil: '¸',\n sup1: '¹',\n ordm: 'º',\n raquo: '»',\n frac14: '¼',\n frac12: '½',\n frac34: '¾',\n iquest: '¿',\n Agrave: 'À',\n Aacute: 'Á',\n Acirc: 'Â',\n Atilde: 'Ã',\n Auml: 'Ä',\n Aring: 'Å',\n AElig: 'Æ',\n Ccedil: 'Ç',\n Egrave: 'È',\n Eacute: 'É',\n Ecirc: 'Ê',\n Euml: 'Ë',\n Igrave: 'Ì',\n Iacute: 'Í',\n Icirc: 'Î',\n Iuml: 'Ï',\n ETH: 'Ð',\n Ntilde: 'Ñ',\n Ograve: 'Ò',\n Oacute: 'Ó',\n Ocirc: 'Ô',\n Otilde: 'Õ',\n Ouml: 'Ö',\n times: '×',\n Oslash: 'Ø',\n Ugrave: 'Ù',\n Uacute: 'Ú',\n Ucirc: 'Û',\n Uuml: 'Ü',\n Yacute: 'Ý',\n THORN: 'Þ',\n szlig: 'ß',\n agrave: 'à',\n aacute: 'á',\n acirc: 'â',\n atilde: 'ã',\n auml: 'ä',\n aring: 'å',\n aelig: 'æ',\n ccedil: 'ç',\n egrave: 'è',\n eacute: 'é',\n ecirc: 'ê',\n euml: 'ë',\n igrave: 'ì',\n iacute: 'í',\n icirc: 'î',\n iuml: 'ï',\n eth: 'ð',\n ntilde: 'ñ',\n ograve: 'ò',\n oacute: 'ó',\n ocirc: 'ô',\n otilde: 'õ',\n ouml: 'ö',\n divide: '÷',\n oslash: 'ø',\n ugrave: 'ù',\n uacute: 'ú',\n ucirc: 'û',\n uuml: 'ü',\n yacute: 'ý',\n thorn: 'þ',\n yuml: 'ÿ',\n fnof: 'ƒ',\n Alpha: 'Α',\n Beta: 'Β',\n Gamma: 'Γ',\n Delta: 'Δ',\n Epsilon: 'Ε',\n Zeta: 'Ζ',\n Eta: 'Η',\n Theta: 'Θ',\n Iota: 'Ι',\n Kappa: 'Κ',\n Lambda: 'Λ',\n Mu: 'Μ',\n Nu: 'Ν',\n Xi: 'Ξ',\n Omicron: 'Ο',\n Pi: 'Π',\n Rho: 'Ρ',\n Sigma: 'Σ',\n Tau: 'Τ',\n Upsilon: 'Υ',\n Phi: 'Φ',\n Chi: 'Χ',\n Psi: 'Ψ',\n Omega: 'Ω',\n alpha: 'α',\n beta: 'β',\n gamma: 'γ',\n delta: 'δ',\n epsilon: 'ε',\n zeta: 'ζ',\n eta: 'η',\n theta: 'θ',\n iota: 'ι',\n kappa: 'κ',\n lambda: 'λ',\n mu: 'μ',\n nu: 'ν',\n xi: 'ξ',\n omicron: 'ο',\n pi: 'π',\n rho: 'ρ',\n sigmaf: 'ς',\n sigma: 'σ',\n tau: 'τ',\n upsilon: 'υ',\n phi: 'φ',\n chi: 'χ',\n psi: 'ψ',\n omega: 'ω',\n thetasym: 'ϑ',\n upsih: 'ϒ',\n piv: 'ϖ',\n bull: '•',\n hellip: '…',\n prime: '′',\n Prime: '″',\n oline: '‾',\n frasl: '⁄',\n weierp: '℘',\n image: 'ℑ',\n real: 'ℜ',\n trade: '™',\n alefsym: 'ℵ',\n larr: '←',\n uarr: '↑',\n rarr: '→',\n darr: '↓',\n harr: '↔',\n crarr: '↵',\n lArr: '⇐',\n uArr: '⇑',\n rArr: '⇒',\n dArr: '⇓',\n hArr: '⇔',\n forall: '∀',\n part: '∂',\n exist: '∃',\n empty: '∅',\n nabla: '∇',\n isin: '∈',\n notin: '∉',\n ni: '∋',\n prod: '∏',\n sum: '∑',\n minus: '−',\n lowast: '∗',\n radic: '√',\n prop: '∝',\n infin: '∞',\n ang: '∠',\n and: '∧',\n or: '∨',\n cap: '∩',\n cup: '∪',\n int: '∫',\n there4: '∴',\n sim: '∼',\n cong: '≅',\n asymp: '≈',\n ne: '≠',\n equiv: '≡',\n le: '≤',\n ge: '≥',\n sub: '⊂',\n sup: '⊃',\n nsub: '⊄',\n sube: '⊆',\n supe: '⊇',\n oplus: '⊕',\n otimes: '⊗',\n perp: '⊥',\n sdot: '⋅',\n lceil: '⌈',\n rceil: '⌉',\n lfloor: '⌊',\n rfloor: '⌋',\n lang: '〈',\n rang: '〉',\n loz: '◊',\n spades: '♠',\n clubs: '♣',\n hearts: '♥',\n diams: '♦',\n quot: '\"',\n amp: '&',\n lt: '<',\n gt: '>',\n OElig: 'Œ',\n oelig: 'œ',\n Scaron: 'Š',\n scaron: 'š',\n Yuml: 'Ÿ',\n circ: 'ˆ',\n tilde: '˜',\n ensp: ' ',\n emsp: ' ',\n thinsp: ' ',\n zwnj: '‌',\n zwj: '‍',\n lrm: '‎',\n rlm: '‏',\n ndash: '–',\n mdash: '—',\n lsquo: '‘',\n rsquo: '’',\n sbquo: '‚',\n ldquo: '“',\n rdquo: '”',\n bdquo: '„',\n dagger: '†',\n Dagger: '‡',\n permil: '‰',\n lsaquo: '‹',\n rsaquo: '›',\n euro: '€'\n}\n","/**\n * List of legacy (that don’t need a trailing `;`) named references which could,\n * depending on what follows them, turn into a different meaning\n *\n * @type {Array<string>}\n */\nexport const dangerous = [\n 'cent',\n 'copy',\n 'divide',\n 'gt',\n 'lt',\n 'not',\n 'para',\n 'times'\n]\n","import {characterEntitiesLegacy} from 'character-entities-legacy'\nimport {characterEntitiesHtml4} from 'character-entities-html4'\nimport {dangerous} from '../constant/dangerous.js'\n\nconst own = {}.hasOwnProperty\n\n/**\n * `characterEntitiesHtml4` but inverted.\n *\n * @type {Record<string, string>}\n */\nconst characters = {}\n\n/** @type {string} */\nlet key\n\nfor (key in characterEntitiesHtml4) {\n if (own.call(characterEntitiesHtml4, key)) {\n characters[characterEntitiesHtml4[key]] = key\n }\n}\n\nconst notAlphanumericRegex = /[^\\dA-Za-z]/\n\n/**\n * Configurable ways to encode characters as named references.\n *\n * @param {number} code\n * @param {number} next\n * @param {boolean|undefined} omit\n * @param {boolean|undefined} attribute\n * @returns {string}\n */\nexport function toNamed(code, next, omit, attribute) {\n const character = String.fromCharCode(code)\n\n if (own.call(characters, character)) {\n const name = characters[character]\n const value = '&' + name\n\n if (\n omit &&\n characterEntitiesLegacy.includes(name) &&\n !dangerous.includes(name) &&\n (!attribute ||\n (next &&\n next !== 61 /* `=` */ &&\n notAlphanumericRegex.test(String.fromCharCode(next))))\n ) {\n return value\n }\n\n return value + ';'\n }\n\n return ''\n}\n","/**\n * @typedef FormatSmartOptions\n * @property {boolean} [useNamedReferences=false]\n * Prefer named character references (`&amp;`) where possible.\n * @property {boolean} [useShortestReferences=false]\n * Prefer the shortest possible reference, if that results in less bytes.\n * **Note**: `useNamedReferences` can be omitted when using `useShortestReferences`.\n * @property {boolean} [omitOptionalSemicolons=false]\n * Whether to omit semicolons when possible.\n * **Note**: This creates what HTML calls “parse errors” but is otherwise still valid HTML — don’t use this except when building a minifier.\n * Omitting semicolons is possible for certain named and numeric references in some cases.\n * @property {boolean} [attribute=false]\n * Create character references which don’t fail in attributes.\n * **Note**: `attribute` only applies when operating dangerously with\n * `omitOptionalSemicolons: true`.\n */\n\nimport {toHexadecimal} from './to-hexadecimal.js'\nimport {toDecimal} from './to-decimal.js'\nimport {toNamed} from './to-named.js'\n\n/**\n * Configurable ways to encode a character yielding pretty or small results.\n *\n * @param {number} code\n * @param {number} next\n * @param {FormatSmartOptions} options\n * @returns {string}\n */\nexport function formatSmart(code, next, options) {\n let numeric = toHexadecimal(code, next, options.omitOptionalSemicolons)\n /** @type {string|undefined} */\n let named\n\n if (options.useNamedReferences || options.useShortestReferences) {\n named = toNamed(\n code,\n next,\n options.omitOptionalSemicolons,\n options.attribute\n )\n }\n\n // Use the shortest numeric reference when requested.\n // A simple algorithm would use decimal for all code points under 100, as\n // those are shorter than hexadecimal:\n //\n // * `&#99;` vs `&#x63;` (decimal shorter)\n // * `&#100;` vs `&#x64;` (equal)\n //\n // However, because we take `next` into consideration when `omit` is used,\n // And it would be possible that decimals are shorter on bigger values as\n // well if `next` is hexadecimal but not decimal, we instead compare both.\n if (\n (options.useShortestReferences || !named) &&\n options.useShortestReferences\n ) {\n const decimal = toDecimal(code, next, options.omitOptionalSemicolons)\n\n if (decimal.length < numeric.length) {\n numeric = decimal\n }\n }\n\n return named &&\n (!options.useShortestReferences || named.length < numeric.length)\n ? named\n : numeric\n}\n","/**\n * @typedef {import('./core.js').CoreOptions & import('./util/format-smart.js').FormatSmartOptions} Options\n * @typedef {import('./core.js').CoreOptions} LightOptions\n */\n\nimport {core} from './core.js'\nimport {formatSmart} from './util/format-smart.js'\nimport {formatBasic} from './util/format-basic.js'\n\n/**\n * Encode special characters in `value`.\n *\n * @param {string} value\n * Value to encode.\n * @param {Options} [options]\n * Configuration.\n * @returns {string}\n * Encoded value.\n */\nexport function stringifyEntities(value, options) {\n return core(value, Object.assign({format: formatSmart}, options))\n}\n\n/**\n * Encode special characters in `value` as hexadecimals.\n *\n * @param {string} value\n * Value to encode.\n * @param {LightOptions} [options]\n * Configuration.\n * @returns {string}\n * Encoded value.\n */\nexport function stringifyEntitiesLight(value, options) {\n return core(value, Object.assign({format: formatBasic}, options))\n}\n","/**\n * @import {Comment, Parents} from 'hast'\n * @import {State} from '../index.js'\n */\n\nimport {stringifyEntities} from 'stringify-entities'\n\nconst htmlCommentRegex = /^>|^->|<!--|-->|--!>|<!-$/g\n\n// Declare arrays as variables so it can be cached by `stringifyEntities`\nconst bogusCommentEntitySubset = ['>']\nconst commentEntitySubset = ['<', '>']\n\n/**\n * Serialize a comment.\n *\n * @param {Comment} node\n * Node to handle.\n * @param {number | undefined} _1\n * Index of `node` in `parent.\n * @param {Parents | undefined} _2\n * Parent of `node`.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {string}\n * Serialized node.\n */\nexport function comment(node, _1, _2, state) {\n // See: <https://html.spec.whatwg.org/multipage/syntax.html#comments>\n return state.settings.bogusComments\n ? '<?' +\n stringifyEntities(\n node.value,\n Object.assign({}, state.settings.characterReferences, {\n subset: bogusCommentEntitySubset\n })\n ) +\n '>'\n : '<!--' + node.value.replace(htmlCommentRegex, encode) + '-->'\n\n /**\n * @param {string} $0\n */\n function encode($0) {\n return stringifyEntities(\n $0,\n Object.assign({}, state.settings.characterReferences, {\n subset: commentEntitySubset\n })\n )\n }\n}\n","/**\n * @import {Doctype, Parents} from 'hast'\n * @import {State} from '../index.js'\n */\n\n/**\n * Serialize a doctype.\n *\n * @param {Doctype} _1\n * Node to handle.\n * @param {number | undefined} _2\n * Index of `node` in `parent.\n * @param {Parents | undefined} _3\n * Parent of `node`.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {string}\n * Serialized node.\n */\nexport function doctype(_1, _2, _3, state) {\n return (\n '<!' +\n (state.settings.upperDoctype ? 'DOCTYPE' : 'doctype') +\n (state.settings.tightDoctype ? '' : ' ') +\n 'html>'\n )\n}\n","/**\n * @import {Parents, RootContent} from 'hast'\n */\n\nimport {whitespace} from 'hast-util-whitespace'\n\nexport const siblingAfter = siblings(1)\nexport const siblingBefore = siblings(-1)\n\n/** @type {Array<RootContent>} */\nconst emptyChildren = []\n\n/**\n * Factory to check siblings in a direction.\n *\n * @param {number} increment\n */\nfunction siblings(increment) {\n return sibling\n\n /**\n * Find applicable siblings in a direction.\n *\n * @template {Parents} Parent\n * Parent type.\n * @param {Parent | undefined} parent\n * Parent.\n * @param {number | undefined} index\n * Index of child in `parent`.\n * @param {boolean | undefined} [includeWhitespace=false]\n * Whether to include whitespace (default: `false`).\n * @returns {Parent extends {children: Array<infer Child>} ? Child | undefined : never}\n * Child of parent.\n */\n function sibling(parent, index, includeWhitespace) {\n const siblings = parent ? parent.children : emptyChildren\n let offset = (index || 0) + increment\n let next = siblings[offset]\n\n if (!includeWhitespace) {\n while (next && whitespace(next)) {\n offset += increment\n next = siblings[offset]\n }\n }\n\n // @ts-expect-error: it’s a correct child.\n return next\n }\n}\n","/**\n * @import {Element, Parents} from 'hast'\n */\n\n/**\n * @callback OmitHandle\n * Check if a tag can be omitted.\n * @param {Element} element\n * Element to check.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether to omit a tag.\n *\n */\n\nconst own = {}.hasOwnProperty\n\n/**\n * Factory to check if a given node can have a tag omitted.\n *\n * @param {Record<string, OmitHandle>} handlers\n * Omission handlers, where each key is a tag name, and each value is the\n * corresponding handler.\n * @returns {OmitHandle}\n * Whether to omit a tag of an element.\n */\nexport function omission(handlers) {\n return omit\n\n /**\n * Check if a given node can have a tag omitted.\n *\n * @type {OmitHandle}\n */\n function omit(node, index, parent) {\n return (\n own.call(handlers, node.tagName) &&\n handlers[node.tagName](node, index, parent)\n )\n }\n}\n","/**\n * @import {Element, Parents} from 'hast'\n */\n\nimport {whitespace} from 'hast-util-whitespace'\nimport {siblingAfter} from './util/siblings.js'\nimport {omission} from './omission.js'\n\nexport const closing = omission({\n body,\n caption: headOrColgroupOrCaption,\n colgroup: headOrColgroupOrCaption,\n dd,\n dt,\n head: headOrColgroupOrCaption,\n html,\n li,\n optgroup,\n option,\n p,\n rp: rubyElement,\n rt: rubyElement,\n tbody,\n td: cells,\n tfoot,\n th: cells,\n thead,\n tr\n})\n\n/**\n * Macro for `</head>`, `</colgroup>`, and `</caption>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction headOrColgroupOrCaption(_, index, parent) {\n const next = siblingAfter(parent, index, true)\n return (\n !next ||\n (next.type !== 'comment' &&\n !(next.type === 'text' && whitespace(next.value.charAt(0))))\n )\n}\n\n/**\n * Whether to omit `</html>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction html(_, index, parent) {\n const next = siblingAfter(parent, index)\n return !next || next.type !== 'comment'\n}\n\n/**\n * Whether to omit `</body>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction body(_, index, parent) {\n const next = siblingAfter(parent, index)\n return !next || next.type !== 'comment'\n}\n\n/**\n * Whether to omit `</p>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction p(_, index, parent) {\n const next = siblingAfter(parent, index)\n return next\n ? next.type === 'element' &&\n (next.tagName === 'address' ||\n next.tagName === 'article' ||\n next.tagName === 'aside' ||\n next.tagName === 'blockquote' ||\n next.tagName === 'details' ||\n next.tagName === 'div' ||\n next.tagName === 'dl' ||\n next.tagName === 'fieldset' ||\n next.tagName === 'figcaption' ||\n next.tagName === 'figure' ||\n next.tagName === 'footer' ||\n next.tagName === 'form' ||\n next.tagName === 'h1' ||\n next.tagName === 'h2' ||\n next.tagName === 'h3' ||\n next.tagName === 'h4' ||\n next.tagName === 'h5' ||\n next.tagName === 'h6' ||\n next.tagName === 'header' ||\n next.tagName === 'hgroup' ||\n next.tagName === 'hr' ||\n next.tagName === 'main' ||\n next.tagName === 'menu' ||\n next.tagName === 'nav' ||\n next.tagName === 'ol' ||\n next.tagName === 'p' ||\n next.tagName === 'pre' ||\n next.tagName === 'section' ||\n next.tagName === 'table' ||\n next.tagName === 'ul')\n : !parent ||\n // Confusing parent.\n !(\n parent.type === 'element' &&\n (parent.tagName === 'a' ||\n parent.tagName === 'audio' ||\n parent.tagName === 'del' ||\n parent.tagName === 'ins' ||\n parent.tagName === 'map' ||\n parent.tagName === 'noscript' ||\n parent.tagName === 'video')\n )\n}\n\n/**\n * Whether to omit `</li>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction li(_, index, parent) {\n const next = siblingAfter(parent, index)\n return !next || (next.type === 'element' && next.tagName === 'li')\n}\n\n/**\n * Whether to omit `</dt>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction dt(_, index, parent) {\n const next = siblingAfter(parent, index)\n return Boolean(\n next &&\n next.type === 'element' &&\n (next.tagName === 'dt' || next.tagName === 'dd')\n )\n}\n\n/**\n * Whether to omit `</dd>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction dd(_, index, parent) {\n const next = siblingAfter(parent, index)\n return (\n !next ||\n (next.type === 'element' &&\n (next.tagName === 'dt' || next.tagName === 'dd'))\n )\n}\n\n/**\n * Whether to omit `</rt>` or `</rp>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction rubyElement(_, index, parent) {\n const next = siblingAfter(parent, index)\n return (\n !next ||\n (next.type === 'element' &&\n (next.tagName === 'rp' || next.tagName === 'rt'))\n )\n}\n\n/**\n * Whether to omit `</optgroup>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction optgroup(_, index, parent) {\n const next = siblingAfter(parent, index)\n return !next || (next.type === 'element' && next.tagName === 'optgroup')\n}\n\n/**\n * Whether to omit `</option>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction option(_, index, parent) {\n const next = siblingAfter(parent, index)\n return (\n !next ||\n (next.type === 'element' &&\n (next.tagName === 'option' || next.tagName === 'optgroup'))\n )\n}\n\n/**\n * Whether to omit `</thead>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction thead(_, index, parent) {\n const next = siblingAfter(parent, index)\n return Boolean(\n next &&\n next.type === 'element' &&\n (next.tagName === 'tbody' || next.tagName === 'tfoot')\n )\n}\n\n/**\n * Whether to omit `</tbody>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction tbody(_, index, parent) {\n const next = siblingAfter(parent, index)\n return (\n !next ||\n (next.type === 'element' &&\n (next.tagName === 'tbody' || next.tagName === 'tfoot'))\n )\n}\n\n/**\n * Whether to omit `</tfoot>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction tfoot(_, index, parent) {\n return !siblingAfter(parent, index)\n}\n\n/**\n * Whether to omit `</tr>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction tr(_, index, parent) {\n const next = siblingAfter(parent, index)\n return !next || (next.type === 'element' && next.tagName === 'tr')\n}\n\n/**\n * Whether to omit `</td>` or `</th>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction cells(_, index, parent) {\n const next = siblingAfter(parent, index)\n return (\n !next ||\n (next.type === 'element' &&\n (next.tagName === 'td' || next.tagName === 'th'))\n )\n}\n","/**\n * @import {Element, Parents} from 'hast'\n */\n\nimport {whitespace} from 'hast-util-whitespace'\nimport {siblingAfter, siblingBefore} from './util/siblings.js'\nimport {closing} from './closing.js'\nimport {omission} from './omission.js'\n\nexport const opening = omission({\n body,\n colgroup,\n head,\n html,\n tbody\n})\n\n/**\n * Whether to omit `<html>`.\n *\n * @param {Element} node\n * Element.\n * @returns {boolean}\n * Whether the opening tag can be omitted.\n */\nfunction html(node) {\n const head = siblingAfter(node, -1)\n return !head || head.type !== 'comment'\n}\n\n/**\n * Whether to omit `<head>`.\n *\n * @param {Element} node\n * Element.\n * @returns {boolean}\n * Whether the opening tag can be omitted.\n */\nfunction head(node) {\n /** @type {Set<string>} */\n const seen = new Set()\n\n // Whether `srcdoc` or not,\n // make sure the content model at least doesn’t have too many `base`s/`title`s.\n for (const child of node.children) {\n if (\n child.type === 'element' &&\n (child.tagName === 'base' || child.tagName === 'title')\n ) {\n if (seen.has(child.tagName)) return false\n seen.add(child.tagName)\n }\n }\n\n // “May be omitted if the element is empty,\n // or if the first thing inside the head element is an element.”\n const child = node.children[0]\n return !child || child.type === 'element'\n}\n\n/**\n * Whether to omit `<body>`.\n *\n * @param {Element} node\n * Element.\n * @returns {boolean}\n * Whether the opening tag can be omitted.\n */\nfunction body(node) {\n const head = siblingAfter(node, -1, true)\n\n return (\n !head ||\n (head.type !== 'comment' &&\n !(head.type === 'text' && whitespace(head.value.charAt(0))) &&\n !(\n head.type === 'element' &&\n (head.tagName === 'meta' ||\n head.tagName === 'link' ||\n head.tagName === 'script' ||\n head.tagName === 'style' ||\n head.tagName === 'template')\n ))\n )\n}\n\n/**\n * Whether to omit `<colgroup>`.\n * The spec describes some logic for the opening tag, but it’s easier to\n * implement in the closing tag, to the same effect, so we handle it there\n * instead.\n *\n * @param {Element} node\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the opening tag can be omitted.\n */\nfunction colgroup(node, index, parent) {\n const previous = siblingBefore(parent, index)\n const head = siblingAfter(node, -1, true)\n\n // Previous colgroup was already omitted.\n if (\n parent &&\n previous &&\n previous.type === 'element' &&\n previous.tagName === 'colgroup' &&\n closing(previous, parent.children.indexOf(previous), parent)\n ) {\n return false\n }\n\n return Boolean(head && head.type === 'element' && head.tagName === 'col')\n}\n\n/**\n * Whether to omit `<tbody>`.\n *\n * @param {Element} node\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the opening tag can be omitted.\n */\nfunction tbody(node, index, parent) {\n const previous = siblingBefore(parent, index)\n const head = siblingAfter(node, -1)\n\n // Previous table section was already omitted.\n if (\n parent &&\n previous &&\n previous.type === 'element' &&\n (previous.tagName === 'thead' || previous.tagName === 'tbody') &&\n closing(previous, parent.children.indexOf(previous), parent)\n ) {\n return false\n }\n\n return Boolean(head && head.type === 'element' && head.tagName === 'tr')\n}\n","/**\n * @import {Element, Parents, Properties} from 'hast'\n * @import {State} from '../index.js'\n */\n\nimport {ccount} from 'ccount'\nimport {stringify as commas} from 'comma-separated-tokens'\nimport {find, svg} from 'property-information'\nimport {stringify as spaces} from 'space-separated-tokens'\nimport {stringifyEntities} from 'stringify-entities'\nimport {closing} from '../omission/closing.js'\nimport {opening} from '../omission/opening.js'\n\n/**\n * Maps of subsets.\n *\n * Each value is a matrix of tuples.\n * The value at `0` causes parse errors, the value at `1` is valid.\n * Of both, the value at `0` is unsafe, and the value at `1` is safe.\n *\n * @type {Record<'double' | 'name' | 'single' | 'unquoted', Array<[Array<string>, Array<string>]>>}\n */\nconst constants = {\n // See: <https://html.spec.whatwg.org/#attribute-name-state>.\n name: [\n ['\\t\\n\\f\\r &/=>'.split(''), '\\t\\n\\f\\r \"&\\'/=>`'.split('')],\n ['\\0\\t\\n\\f\\r \"&\\'/<=>'.split(''), '\\0\\t\\n\\f\\r \"&\\'/<=>`'.split('')]\n ],\n // See: <https://html.spec.whatwg.org/#attribute-value-(unquoted)-state>.\n unquoted: [\n ['\\t\\n\\f\\r &>'.split(''), '\\0\\t\\n\\f\\r \"&\\'<=>`'.split('')],\n ['\\0\\t\\n\\f\\r \"&\\'<=>`'.split(''), '\\0\\t\\n\\f\\r \"&\\'<=>`'.split('')]\n ],\n // See: <https://html.spec.whatwg.org/#attribute-value-(single-quoted)-state>.\n single: [\n [\"&'\".split(''), '\"&\\'`'.split('')],\n [\"\\0&'\".split(''), '\\0\"&\\'`'.split('')]\n ],\n // See: <https://html.spec.whatwg.org/#attribute-value-(double-quoted)-state>.\n double: [\n ['\"&'.split(''), '\"&\\'`'.split('')],\n ['\\0\"&'.split(''), '\\0\"&\\'`'.split('')]\n ]\n}\n\n/**\n * Serialize an element node.\n *\n * @param {Element} node\n * Node to handle.\n * @param {number | undefined} index\n * Index of `node` in `parent.\n * @param {Parents | undefined} parent\n * Parent of `node`.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {string}\n * Serialized node.\n */\nexport function element(node, index, parent, state) {\n const schema = state.schema\n const omit = schema.space === 'svg' ? false : state.settings.omitOptionalTags\n let selfClosing =\n schema.space === 'svg'\n ? state.settings.closeEmptyElements\n : state.settings.voids.includes(node.tagName.toLowerCase())\n /** @type {Array<string>} */\n const parts = []\n /** @type {string} */\n let last\n\n if (schema.space === 'html' && node.tagName === 'svg') {\n state.schema = svg\n }\n\n const attributes = serializeAttributes(state, node.properties)\n\n const content = state.all(\n schema.space === 'html' && node.tagName === 'template' ? node.content : node\n )\n\n state.schema = schema\n\n // If the node is categorised as void, but it has children, remove the\n // categorisation.\n // This enables for example `menuitem`s, which are void in W3C HTML but not\n // void in WHATWG HTML, to be stringified properly.\n // Note: `menuitem` has since been removed from the HTML spec, and so is no\n // longer void.\n if (content) selfClosing = false\n\n if (attributes || !omit || !opening(node, index, parent)) {\n parts.push('<', node.tagName, attributes ? ' ' + attributes : '')\n\n if (\n selfClosing &&\n (schema.space === 'svg' || state.settings.closeSelfClosing)\n ) {\n last = attributes.charAt(attributes.length - 1)\n if (\n !state.settings.tightSelfClosing ||\n last === '/' ||\n (last && last !== '\"' && last !== \"'\")\n ) {\n parts.push(' ')\n }\n\n parts.push('/')\n }\n\n parts.push('>')\n }\n\n parts.push(content)\n\n if (!selfClosing && (!omit || !closing(node, index, parent))) {\n parts.push('</' + node.tagName + '>')\n }\n\n return parts.join('')\n}\n\n/**\n * @param {State} state\n * @param {Properties | null | undefined} properties\n * @returns {string}\n */\nfunction serializeAttributes(state, properties) {\n /** @type {Array<string>} */\n const values = []\n let index = -1\n /** @type {string} */\n let key\n\n if (properties) {\n for (key in properties) {\n if (properties[key] !== null && properties[key] !== undefined) {\n const value = serializeAttribute(state, key, properties[key])\n if (value) values.push(value)\n }\n }\n }\n\n while (++index < values.length) {\n const last = state.settings.tightAttributes\n ? values[index].charAt(values[index].length - 1)\n : undefined\n\n // In tight mode, don’t add a space after quoted attributes.\n if (index !== values.length - 1 && last !== '\"' && last !== \"'\") {\n values[index] += ' '\n }\n }\n\n return values.join('')\n}\n\n/**\n * @param {State} state\n * @param {string} key\n * @param {Properties[keyof Properties]} value\n * @returns {string}\n */\nfunction serializeAttribute(state, key, value) {\n const info = find(state.schema, key)\n const x =\n state.settings.allowParseErrors && state.schema.space === 'html' ? 0 : 1\n const y = state.settings.allowDangerousCharacters ? 0 : 1\n let quote = state.quote\n /** @type {string | undefined} */\n let result\n\n if (info.overloadedBoolean && (value === info.attribute || value === '')) {\n value = true\n } else if (\n (info.boolean || info.overloadedBoolean) &&\n (typeof value !== 'string' || value === info.attribute || value === '')\n ) {\n value = Boolean(value)\n }\n\n if (\n value === null ||\n value === undefined ||\n value === false ||\n (typeof value === 'number' && Number.isNaN(value))\n ) {\n return ''\n }\n\n const name = stringifyEntities(\n info.attribute,\n Object.assign({}, state.settings.characterReferences, {\n // Always encode without parse errors in non-HTML.\n subset: constants.name[x][y]\n })\n )\n\n // No value.\n // There is currently only one boolean property in SVG: `[download]` on\n // `<a>`.\n // This property does not seem to work in browsers (Firefox, Safari, Chrome),\n // so I can’t test if dropping the value works.\n // But I assume that it should:\n //\n // ```html\n // <!doctype html>\n // <svg viewBox=\"0 0 100 100\">\n // <a href=https://example.com download>\n // <circle cx=50 cy=40 r=35 />\n // </a>\n // </svg>\n // ```\n //\n // See: <https://github.com/wooorm/property-information/blob/main/lib/svg.js>\n if (value === true) return name\n\n // `spaces` doesn’t accept a second argument, but it’s given here just to\n // keep the code cleaner.\n value = Array.isArray(value)\n ? (info.commaSeparated ? commas : spaces)(value, {\n padLeft: !state.settings.tightCommaSeparatedLists\n })\n : String(value)\n\n if (state.settings.collapseEmptyAttributes && !value) return name\n\n // Check unquoted value.\n if (state.settings.preferUnquoted) {\n result = stringifyEntities(\n value,\n Object.assign({}, state.settings.characterReferences, {\n attribute: true,\n subset: constants.unquoted[x][y]\n })\n )\n }\n\n // If we don’t want unquoted, or if `value` contains character references when\n // unquoted…\n if (result !== value) {\n // If the alternative is less common than `quote`, switch.\n if (\n state.settings.quoteSmart &&\n ccount(value, quote) > ccount(value, state.alternative)\n ) {\n quote = state.alternative\n }\n\n result =\n quote +\n stringifyEntities(\n value,\n Object.assign({}, state.settings.characterReferences, {\n // Always encode without parse errors in non-HTML.\n subset: (quote === \"'\" ? constants.single : constants.double)[x][y],\n attribute: true\n })\n ) +\n quote\n }\n\n // Don’t add a `=` for unquoted empties.\n return name + (result ? '=' + result : result)\n}\n","/**\n * @import {Parents, Text} from 'hast'\n * @import {Raw} from 'mdast-util-to-hast'\n * @import {State} from '../index.js'\n */\n\nimport {stringifyEntities} from 'stringify-entities'\n\n// Declare array as variable so it can be cached by `stringifyEntities`\nconst textEntitySubset = ['<', '&']\n\n/**\n * Serialize a text node.\n *\n * @param {Raw | Text} node\n * Node to handle.\n * @param {number | undefined} _\n * Index of `node` in `parent.\n * @param {Parents | undefined} parent\n * Parent of `node`.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {string}\n * Serialized node.\n */\nexport function text(node, _, parent, state) {\n // Check if content of `node` should be escaped.\n return parent &&\n parent.type === 'element' &&\n (parent.tagName === 'script' || parent.tagName === 'style')\n ? node.value\n : stringifyEntities(\n node.value,\n Object.assign({}, state.settings.characterReferences, {\n subset: textEntitySubset\n })\n )\n}\n","/**\n * @import {Parents} from 'hast'\n * @import {Raw} from 'mdast-util-to-hast'\n * @import {State} from '../index.js'\n */\n\nimport {text} from './text.js'\n\n/**\n * Serialize a raw node.\n *\n * @param {Raw} node\n * Node to handle.\n * @param {number | undefined} index\n * Index of `node` in `parent.\n * @param {Parents | undefined} parent\n * Parent of `node`.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {string}\n * Serialized node.\n */\nexport function raw(node, index, parent, state) {\n return state.settings.allowDangerousHtml\n ? node.value\n : text(node, index, parent, state)\n}\n","/**\n * @import {Parents, Root} from 'hast'\n * @import {State} from '../index.js'\n */\n\n/**\n * Serialize a root.\n *\n * @param {Root} node\n * Node to handle.\n * @param {number | undefined} _1\n * Index of `node` in `parent.\n * @param {Parents | undefined} _2\n * Parent of `node`.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {string}\n * Serialized node.\n */\nexport function root(node, _1, _2, state) {\n return state.all(node)\n}\n","/**\n * @import {Nodes, Parents} from 'hast'\n * @import {State} from '../index.js'\n */\n\nimport {zwitch} from 'zwitch'\nimport {comment} from './comment.js'\nimport {doctype} from './doctype.js'\nimport {element} from './element.js'\nimport {raw} from './raw.js'\nimport {root} from './root.js'\nimport {text} from './text.js'\n\n/**\n * @type {(node: Nodes, index: number | undefined, parent: Parents | undefined, state: State) => string}\n */\nexport const handle = zwitch('type', {\n invalid,\n unknown,\n handlers: {comment, doctype, element, raw, root, text}\n})\n\n/**\n * Fail when a non-node is found in the tree.\n *\n * @param {unknown} node\n * Unknown value.\n * @returns {never}\n * Never.\n */\nfunction invalid(node) {\n throw new Error('Expected node, not `' + node + '`')\n}\n\n/**\n * Fail when a node with an unknown type is found in the tree.\n *\n * @param {unknown} node_\n * Unknown node.\n * @returns {never}\n * Never.\n */\nfunction unknown(node_) {\n // `type` is guaranteed by runtime JS.\n const node = /** @type {Nodes} */ (node_)\n throw new Error('Cannot compile unknown node `' + node.type + '`')\n}\n","/**\n * @import {Nodes, Parents, RootContent} from 'hast'\n * @import {Schema} from 'property-information'\n * @import {Options as StringifyEntitiesOptions} from 'stringify-entities'\n */\n\n/**\n * @typedef {Omit<StringifyEntitiesOptions, 'attribute' | 'escapeOnly' | 'subset'>} CharacterReferences\n *\n * @typedef Options\n * Configuration.\n * @property {boolean | null | undefined} [allowDangerousCharacters=false]\n * Do not encode some characters which cause XSS vulnerabilities in older\n * browsers (default: `false`).\n *\n * > ⚠️ **Danger**: only set this if you completely trust the content.\n * @property {boolean | null | undefined} [allowDangerousHtml=false]\n * Allow `raw` nodes and insert them as raw HTML (default: `false`).\n *\n * When `false`, `Raw` nodes are encoded.\n *\n * > ⚠️ **Danger**: only set this if you completely trust the content.\n * @property {boolean | null | undefined} [allowParseErrors=false]\n * Do not encode characters which cause parse errors (even though they work),\n * to save bytes (default: `false`).\n *\n * Not used in the SVG space.\n *\n * > 👉 **Note**: intentionally creates parse errors in markup (how parse\n * > errors are handled is well defined, so this works but isn’t pretty).\n * @property {boolean | null | undefined} [bogusComments=false]\n * Use “bogus comments” instead of comments to save byes: `<?charlie>`\n * instead of `<!--charlie-->` (default: `false`).\n *\n * > 👉 **Note**: intentionally creates parse errors in markup (how parse\n * > errors are handled is well defined, so this works but isn’t pretty).\n * @property {CharacterReferences | null | undefined} [characterReferences]\n * Configure how to serialize character references (optional).\n * @property {boolean | null | undefined} [closeEmptyElements=false]\n * Close SVG elements without any content with slash (`/`) on the opening tag\n * instead of an end tag: `<circle />` instead of `<circle></circle>`\n * (default: `false`).\n *\n * See `tightSelfClosing` to control whether a space is used before the\n * slash.\n *\n * Not used in the HTML space.\n * @property {boolean | null | undefined} [closeSelfClosing=false]\n * Close self-closing nodes with an extra slash (`/`): `<img />` instead of\n * `<img>` (default: `false`).\n *\n * See `tightSelfClosing` to control whether a space is used before the\n * slash.\n *\n * Not used in the SVG space.\n * @property {boolean | null | undefined} [collapseEmptyAttributes=false]\n * Collapse empty attributes: get `class` instead of `class=\"\"` (default:\n * `false`).\n *\n * Not used in the SVG space.\n *\n * > 👉 **Note**: boolean attributes (such as `hidden`) are always collapsed.\n * @property {boolean | null | undefined} [omitOptionalTags=false]\n * Omit optional opening and closing tags (default: `false`).\n *\n * For example, in `<ol><li>one</li><li>two</li></ol>`, both `</li>` closing\n * tags can be omitted.\n * The first because it’s followed by another `li`, the last because it’s\n * followed by nothing.\n *\n * Not used in the SVG space.\n * @property {boolean | null | undefined} [preferUnquoted=false]\n * Leave attributes unquoted if that results in less bytes (default: `false`).\n *\n * Not used in the SVG space.\n * @property {boolean | null | undefined} [quoteSmart=false]\n * Use the other quote if that results in less bytes (default: `false`).\n * @property {Quote | null | undefined} [quote='\"']\n * Preferred quote to use (default: `'\"'`).\n * @property {Space | null | undefined} [space='html']\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 (default: `'html'`).\n *\n * > 👉 **Note**: hast is not XML.\n * > It supports SVG as embedded in HTML.\n * > It does not support the features available in XML.\n * > Passing SVG might break but fragments of modern SVG should be fine.\n * > Use [`xast`][xast] if you need to support SVG as XML.\n * @property {boolean | null | undefined} [tightAttributes=false]\n * Join attributes together, without whitespace, if possible: get\n * `class=\"a b\"title=\"c d\"` instead of `class=\"a b\" title=\"c d\"` to save\n * bytes (default: `false`).\n *\n * Not used in the SVG space.\n *\n * > 👉 **Note**: intentionally creates parse errors in markup (how parse\n * > errors are handled is well defined, so this works but isn’t pretty).\n * @property {boolean | null | undefined} [tightCommaSeparatedLists=false]\n * Join known comma-separated attribute values with just a comma (`,`),\n * instead of padding them on the right as well (`,␠`, where `␠` represents a\n * space) (default: `false`).\n * @property {boolean | null | undefined} [tightDoctype=false]\n * Drop unneeded spaces in doctypes: `<!doctypehtml>` instead of\n * `<!doctype html>` to save bytes (default: `false`).\n *\n * > 👉 **Note**: intentionally creates parse errors in markup (how parse\n * > errors are handled is well defined, so this works but isn’t pretty).\n * @property {boolean | null | undefined} [tightSelfClosing=false]\n * Do not use an extra space when closing self-closing elements: `<img/>`\n * instead of `<img />` (default: `false`).\n *\n * > 👉 **Note**: only used if `closeSelfClosing: true` or\n * > `closeEmptyElements: true`.\n * @property {boolean | null | undefined} [upperDoctype=false]\n * Use a `<!DOCTYPE…` instead of `<!doctype…` (default: `false`).\n *\n * Useless except for XHTML.\n * @property {ReadonlyArray<string> | null | undefined} [voids]\n * Tag names of elements to serialize without closing tag (default: `html-void-elements`).\n *\n * Not used in the SVG space.\n *\n * > 👉 **Note**: It’s highly unlikely that you want to pass this, because\n * > hast is not for XML, and HTML will not add more void elements.\n *\n * @typedef {'\"' | \"'\"} Quote\n * HTML quotes for attribute values.\n *\n * @typedef {Omit<Required<{[key in keyof Options]: Exclude<Options[key], null | undefined>}>, 'space' | 'quote'>} Settings\n *\n * @typedef {'html' | 'svg'} Space\n * Namespace.\n *\n * @typedef State\n * Info passed around about the current state.\n * @property {(node: Parents | undefined) => string} all\n * Serialize the children of a parent node.\n * @property {Quote} alternative\n * Alternative quote.\n * @property {(node: Nodes, index: number | undefined, parent: Parents | undefined) => string} one\n * Serialize one node.\n * @property {Quote} quote\n * Preferred quote.\n * @property {Schema} schema\n * Current schema.\n * @property {Settings} settings\n * User configuration.\n */\n\nimport {htmlVoidElements} from 'html-void-elements'\nimport {html, svg} from 'property-information'\nimport {handle} from './handle/index.js'\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/** @type {CharacterReferences} */\nconst emptyCharacterReferences = {}\n\n/** @type {Array<never>} */\nconst emptyChildren = []\n\n/**\n * Serialize hast as HTML.\n *\n * @param {Array<RootContent> | Nodes} tree\n * Tree to serialize.\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {string}\n * Serialized HTML.\n */\nexport function toHtml(tree, options) {\n const options_ = options || emptyOptions\n const quote = options_.quote || '\"'\n const alternative = quote === '\"' ? \"'\" : '\"'\n\n if (quote !== '\"' && quote !== \"'\") {\n throw new Error('Invalid quote `' + quote + '`, expected `\\'` or `\"`')\n }\n\n /** @type {State} */\n const state = {\n one,\n all,\n settings: {\n omitOptionalTags: options_.omitOptionalTags || false,\n allowParseErrors: options_.allowParseErrors || false,\n allowDangerousCharacters: options_.allowDangerousCharacters || false,\n quoteSmart: options_.quoteSmart || false,\n preferUnquoted: options_.preferUnquoted || false,\n tightAttributes: options_.tightAttributes || false,\n upperDoctype: options_.upperDoctype || false,\n tightDoctype: options_.tightDoctype || false,\n bogusComments: options_.bogusComments || false,\n tightCommaSeparatedLists: options_.tightCommaSeparatedLists || false,\n tightSelfClosing: options_.tightSelfClosing || false,\n collapseEmptyAttributes: options_.collapseEmptyAttributes || false,\n allowDangerousHtml: options_.allowDangerousHtml || false,\n voids: options_.voids || htmlVoidElements,\n characterReferences:\n options_.characterReferences || emptyCharacterReferences,\n closeSelfClosing: options_.closeSelfClosing || false,\n closeEmptyElements: options_.closeEmptyElements || false\n },\n schema: options_.space === 'svg' ? svg : html,\n quote,\n alternative\n }\n\n return state.one(\n Array.isArray(tree) ? {type: 'root', children: tree} : tree,\n undefined,\n undefined\n )\n}\n\n/**\n * Serialize a node.\n *\n * @this {State}\n * Info passed around about the current state.\n * @param {Nodes} node\n * Node to handle.\n * @param {number | undefined} index\n * Index of `node` in `parent.\n * @param {Parents | undefined} parent\n * Parent of `node`.\n * @returns {string}\n * Serialized node.\n */\nfunction one(node, index, parent) {\n return handle(node, index, parent, this)\n}\n\n/**\n * Serialize all children of `parent`.\n *\n * @this {State}\n * Info passed around about the current state.\n * @param {Parents | undefined} parent\n * Parent whose children to serialize.\n * @returns {string}\n */\nexport function all(parent) {\n /** @type {Array<string>} */\n const results = []\n const children = (parent && parent.children) || emptyChildren\n let index = -1\n\n while (++index < children.length) {\n results[index] = this.one(children[index], index, parent)\n }\n\n return results.join('')\n}\n","import { ShikiError as ShikiError$1 } from '@shikijs/types';\nexport * from '@shikijs/types';\nimport { FontStyle, INITIAL, EncodedTokenMetadata, Registry as Registry$1, Theme } from '@shikijs/vscode-textmate';\nimport { toHtml } from 'hast-util-to-html';\n\nfunction resolveColorReplacements(theme, options) {\n const replacements = typeof theme === \"string\" ? {} : { ...theme.colorReplacements };\n const themeName = typeof theme === \"string\" ? theme : theme.name;\n for (const [key, value] of Object.entries(options?.colorReplacements || {})) {\n if (typeof value === \"string\")\n replacements[key] = value;\n else if (key === themeName)\n Object.assign(replacements, value);\n }\n return replacements;\n}\nfunction applyColorReplacements(color, replacements) {\n if (!color)\n return color;\n return replacements?.[color?.toLowerCase()] || color;\n}\n\nfunction toArray(x) {\n return Array.isArray(x) ? x : [x];\n}\nasync function normalizeGetter(p) {\n return Promise.resolve(typeof p === \"function\" ? p() : p).then((r) => r.default || r);\n}\nfunction isPlainLang(lang) {\n return !lang || [\"plaintext\", \"txt\", \"text\", \"plain\"].includes(lang);\n}\nfunction isSpecialLang(lang) {\n return lang === \"ansi\" || isPlainLang(lang);\n}\nfunction isNoneTheme(theme) {\n return theme === \"none\";\n}\nfunction isSpecialTheme(theme) {\n return isNoneTheme(theme);\n}\n\nfunction addClassToHast(node, className) {\n if (!className)\n return node;\n node.properties ||= {};\n node.properties.class ||= [];\n if (typeof node.properties.class === \"string\")\n node.properties.class = node.properties.class.split(/\\s+/g);\n if (!Array.isArray(node.properties.class))\n node.properties.class = [];\n const targets = Array.isArray(className) ? className : className.split(/\\s+/g);\n for (const c of targets) {\n if (c && !node.properties.class.includes(c))\n node.properties.class.push(c);\n }\n return node;\n}\n\nfunction splitLines(code, preserveEnding = false) {\n if (code.length === 0) {\n return [[\"\", 0]];\n }\n const parts = code.split(/(\\r?\\n)/g);\n let index = 0;\n const lines = [];\n for (let i = 0; i < parts.length; i += 2) {\n const line = preserveEnding ? parts[i] + (parts[i + 1] || \"\") : parts[i];\n lines.push([line, index]);\n index += parts[i].length;\n index += parts[i + 1]?.length || 0;\n }\n return lines;\n}\nfunction createPositionConverter(code) {\n const lines = splitLines(code, true).map(([line]) => line);\n function indexToPos(index) {\n if (index === code.length) {\n return {\n line: lines.length - 1,\n character: lines[lines.length - 1].length\n };\n }\n let character = index;\n let line = 0;\n for (const lineText of lines) {\n if (character < lineText.length)\n break;\n character -= lineText.length;\n line++;\n }\n return { line, character };\n }\n function posToIndex(line, character) {\n let index = 0;\n for (let i = 0; i < line; i++)\n index += lines[i].length;\n index += character;\n return index;\n }\n return {\n lines,\n indexToPos,\n posToIndex\n };\n}\nfunction guessEmbeddedLanguages(code, _lang, highlighter) {\n const langs = /* @__PURE__ */ new Set();\n for (const match of code.matchAll(/:?lang=[\"']([^\"']+)[\"']/g)) {\n const lang = match[1].toLowerCase().trim();\n if (lang)\n langs.add(lang);\n }\n for (const match of code.matchAll(/(?:```|~~~)([\\w-]+)/g)) {\n const lang = match[1].toLowerCase().trim();\n if (lang)\n langs.add(lang);\n }\n for (const match of code.matchAll(/\\\\begin\\{([\\w-]+)\\}/g)) {\n const lang = match[1].toLowerCase().trim();\n if (lang)\n langs.add(lang);\n }\n for (const match of code.matchAll(/<script\\s+(?:type|lang)=[\"']([^\"']+)[\"']/gi)) {\n const fullType = match[1].toLowerCase().trim();\n const lang = fullType.includes(\"/\") ? fullType.split(\"/\").pop() : fullType;\n if (lang)\n langs.add(lang);\n }\n if (!highlighter)\n return Array.from(langs);\n const bundle = highlighter.getBundledLanguages();\n return Array.from(langs).filter((l) => l && bundle[l]);\n}\n\nconst DEFAULT_COLOR_LIGHT_DARK = \"light-dark()\";\nconst COLOR_KEYS = [\"color\", \"background-color\"];\n\nfunction splitToken(token, offsets) {\n let lastOffset = 0;\n const tokens = [];\n for (const offset of offsets) {\n if (offset > lastOffset) {\n tokens.push({\n ...token,\n content: token.content.slice(lastOffset, offset),\n offset: token.offset + lastOffset\n });\n }\n lastOffset = offset;\n }\n if (lastOffset < token.content.length) {\n tokens.push({\n ...token,\n content: token.content.slice(lastOffset),\n offset: token.offset + lastOffset\n });\n }\n return tokens;\n}\nfunction splitTokens(tokens, breakpoints) {\n const sorted = Array.from(breakpoints instanceof Set ? breakpoints : new Set(breakpoints)).sort((a, b) => a - b);\n if (!sorted.length)\n return tokens;\n return tokens.map((line) => {\n return line.flatMap((token) => {\n const breakpointsInToken = sorted.filter((i) => token.offset < i && i < token.offset + token.content.length).map((i) => i - token.offset).sort((a, b) => a - b);\n if (!breakpointsInToken.length)\n return token;\n return splitToken(token, breakpointsInToken);\n });\n });\n}\nfunction flatTokenVariants(merged, variantsOrder, cssVariablePrefix, defaultColor, colorsRendering = \"css-vars\") {\n const token = {\n content: merged.content,\n explanation: merged.explanation,\n offset: merged.offset\n };\n const styles = variantsOrder.map((t) => getTokenStyleObject(merged.variants[t]));\n const styleKeys = new Set(styles.flatMap((t) => Object.keys(t)));\n const mergedStyles = {};\n const varKey = (idx, key) => {\n const keyName = key === \"color\" ? \"\" : key === \"background-color\" ? \"-bg\" : `-${key}`;\n return cssVariablePrefix + variantsOrder[idx] + (key === \"color\" ? \"\" : keyName);\n };\n styles.forEach((cur, idx) => {\n for (const key of styleKeys) {\n const value = cur[key] || \"inherit\";\n if (idx === 0 && defaultColor && COLOR_KEYS.includes(key)) {\n if (defaultColor === DEFAULT_COLOR_LIGHT_DARK && styles.length > 1) {\n const lightIndex = variantsOrder.findIndex((t) => t === \"light\");\n const darkIndex = variantsOrder.findIndex((t) => t === \"dark\");\n if (lightIndex === -1 || darkIndex === -1)\n throw new ShikiError$1('When using `defaultColor: \"light-dark()\"`, you must provide both `light` and `dark` themes');\n const lightValue = styles[lightIndex][key] || \"inherit\";\n const darkValue = styles[darkIndex][key] || \"inherit\";\n mergedStyles[key] = `light-dark(${lightValue}, ${darkValue})`;\n if (colorsRendering === \"css-vars\")\n mergedStyles[varKey(idx, key)] = value;\n } else {\n mergedStyles[key] = value;\n }\n } else {\n if (colorsRendering === \"css-vars\")\n mergedStyles[varKey(idx, key)] = value;\n }\n }\n });\n token.htmlStyle = mergedStyles;\n return token;\n}\nfunction getTokenStyleObject(token) {\n const styles = {};\n if (token.color)\n styles.color = token.color;\n if (token.bgColor)\n styles[\"background-color\"] = token.bgColor;\n if (token.fontStyle) {\n if (token.fontStyle & FontStyle.Italic)\n styles[\"font-style\"] = \"italic\";\n if (token.fontStyle & FontStyle.Bold)\n styles[\"font-weight\"] = \"bold\";\n const decorations = [];\n if (token.fontStyle & FontStyle.Underline)\n decorations.push(\"underline\");\n if (token.fontStyle & FontStyle.Strikethrough)\n decorations.push(\"line-through\");\n if (decorations.length)\n styles[\"text-decoration\"] = decorations.join(\" \");\n }\n return styles;\n}\nfunction stringifyTokenStyle(token) {\n if (typeof token === \"string\")\n return token;\n return Object.entries(token).map(([key, value]) => `${key}:${value}`).join(\";\");\n}\n\nconst _grammarStateMap = /* @__PURE__ */ new WeakMap();\nfunction setLastGrammarStateToMap(keys, state) {\n _grammarStateMap.set(keys, state);\n}\nfunction getLastGrammarStateFromMap(keys) {\n return _grammarStateMap.get(keys);\n}\nclass GrammarState {\n /**\n * Theme to Stack mapping\n */\n _stacks = {};\n lang;\n get themes() {\n return Object.keys(this._stacks);\n }\n get theme() {\n return this.themes[0];\n }\n get _stack() {\n return this._stacks[this.theme];\n }\n /**\n * Static method to create a initial grammar state.\n */\n static initial(lang, themes) {\n return new GrammarState(\n Object.fromEntries(toArray(themes).map((theme) => [theme, INITIAL])),\n lang\n );\n }\n constructor(...args) {\n if (args.length === 2) {\n const [stacksMap, lang] = args;\n this.lang = lang;\n this._stacks = stacksMap;\n } else {\n const [stack, lang, theme] = args;\n this.lang = lang;\n this._stacks = { [theme]: stack };\n }\n }\n /**\n * Get the internal stack object.\n * @internal\n */\n getInternalStack(theme = this.theme) {\n return this._stacks[theme];\n }\n getScopes(theme = this.theme) {\n return getScopes(this._stacks[theme]);\n }\n toJSON() {\n return {\n lang: this.lang,\n theme: this.theme,\n themes: this.themes,\n scopes: this.getScopes()\n };\n }\n}\nfunction getScopes(stack) {\n const scopes = [];\n const visited = /* @__PURE__ */ new Set();\n function pushScope(stack2) {\n if (visited.has(stack2))\n return;\n visited.add(stack2);\n const name = stack2?.nameScopesList?.scopeName;\n if (name)\n scopes.push(name);\n if (stack2.parent)\n pushScope(stack2.parent);\n }\n pushScope(stack);\n return scopes;\n}\nfunction getGrammarStack(state, theme) {\n if (!(state instanceof GrammarState))\n throw new ShikiError$1(\"Invalid grammar state\");\n return state.getInternalStack(theme);\n}\n\nfunction transformerDecorations() {\n const map = /* @__PURE__ */ new WeakMap();\n function getContext(shiki) {\n if (!map.has(shiki.meta)) {\n let normalizePosition = function(p) {\n if (typeof p === \"number\") {\n if (p < 0 || p > shiki.source.length)\n throw new ShikiError$1(`Invalid decoration offset: ${p}. Code length: ${shiki.source.length}`);\n return {\n ...converter.indexToPos(p),\n offset: p\n };\n } else {\n const line = converter.lines[p.line];\n if (line === void 0)\n throw new ShikiError$1(`Invalid decoration position ${JSON.stringify(p)}. Lines length: ${converter.lines.length}`);\n let character = p.character;\n if (character < 0)\n character = line.length + character;\n if (character < 0 || character > line.length)\n throw new ShikiError$1(`Invalid decoration position ${JSON.stringify(p)}. Line ${p.line} length: ${line.length}`);\n return {\n ...p,\n character,\n offset: converter.posToIndex(p.line, character)\n };\n }\n };\n const converter = createPositionConverter(shiki.source);\n const decorations = (shiki.options.decorations || []).map((d) => ({\n ...d,\n start: normalizePosition(d.start),\n end: normalizePosition(d.end)\n }));\n verifyIntersections(decorations);\n map.set(shiki.meta, {\n decorations,\n converter,\n source: shiki.source\n });\n }\n return map.get(shiki.meta);\n }\n return {\n name: \"shiki:decorations\",\n tokens(tokens) {\n if (!this.options.decorations?.length)\n return;\n const ctx = getContext(this);\n const breakpoints = ctx.decorations.flatMap((d) => [d.start.offset, d.end.offset]);\n const splitted = splitTokens(tokens, breakpoints);\n return splitted;\n },\n code(codeEl) {\n if (!this.options.decorations?.length)\n return;\n const ctx = getContext(this);\n const lines = Array.from(codeEl.children).filter((i) => i.type === \"element\" && i.tagName === \"span\");\n if (lines.length !== ctx.converter.lines.length)\n throw new ShikiError$1(`Number of lines in code element (${lines.length}) does not match the number of lines in the source (${ctx.converter.lines.length}). Failed to apply decorations.`);\n function applyLineSection(line, start, end, decoration) {\n const lineEl = lines[line];\n let text = \"\";\n let startIndex = -1;\n let endIndex = -1;\n if (start === 0)\n startIndex = 0;\n if (end === 0)\n endIndex = 0;\n if (end === Number.POSITIVE_INFINITY)\n endIndex = lineEl.children.length;\n if (startIndex === -1 || endIndex === -1) {\n for (let i = 0; i < lineEl.children.length; i++) {\n text += stringify(lineEl.children[i]);\n if (startIndex === -1 && text.length === start)\n startIndex = i + 1;\n if (endIndex === -1 && text.length === end)\n endIndex = i + 1;\n }\n }\n if (startIndex === -1)\n throw new ShikiError$1(`Failed to find start index for decoration ${JSON.stringify(decoration.start)}`);\n if (endIndex === -1)\n throw new ShikiError$1(`Failed to find end index for decoration ${JSON.stringify(decoration.end)}`);\n const children = lineEl.children.slice(startIndex, endIndex);\n if (!decoration.alwaysWrap && children.length === lineEl.children.length) {\n applyDecoration(lineEl, decoration, \"line\");\n } else if (!decoration.alwaysWrap && children.length === 1 && children[0].type === \"element\") {\n applyDecoration(children[0], decoration, \"token\");\n } else {\n const wrapper = {\n type: \"element\",\n tagName: \"span\",\n properties: {},\n children\n };\n applyDecoration(wrapper, decoration, \"wrapper\");\n lineEl.children.splice(startIndex, children.length, wrapper);\n }\n }\n function applyLine(line, decoration) {\n lines[line] = applyDecoration(lines[line], decoration, \"line\");\n }\n function applyDecoration(el, decoration, type) {\n const properties = decoration.properties || {};\n const transform = decoration.transform || ((i) => i);\n el.tagName = decoration.tagName || \"span\";\n el.properties = {\n ...el.properties,\n ...properties,\n class: el.properties.class\n };\n if (decoration.properties?.class)\n addClassToHast(el, decoration.properties.class);\n el = transform(el, type) || el;\n return el;\n }\n const lineApplies = [];\n const sorted = ctx.decorations.sort((a, b) => b.start.offset - a.start.offset || a.end.offset - b.end.offset);\n for (const decoration of sorted) {\n const { start, end } = decoration;\n if (start.line === end.line) {\n applyLineSection(start.line, start.character, end.character, decoration);\n } else if (start.line < end.line) {\n applyLineSection(start.line, start.character, Number.POSITIVE_INFINITY, decoration);\n for (let i = start.line + 1; i < end.line; i++)\n lineApplies.unshift(() => applyLine(i, decoration));\n applyLineSection(end.line, 0, end.character, decoration);\n }\n }\n lineApplies.forEach((i) => i());\n }\n };\n}\nfunction verifyIntersections(items) {\n for (let i = 0; i < items.length; i++) {\n const foo = items[i];\n if (foo.start.offset > foo.end.offset)\n throw new ShikiError$1(`Invalid decoration range: ${JSON.stringify(foo.start)} - ${JSON.stringify(foo.end)}`);\n for (let j = i + 1; j < items.length; j++) {\n const bar = items[j];\n const isFooHasBarStart = foo.start.offset <= bar.start.offset && bar.start.offset < foo.end.offset;\n const isFooHasBarEnd = foo.start.offset < bar.end.offset && bar.end.offset <= foo.end.offset;\n const isBarHasFooStart = bar.start.offset <= foo.start.offset && foo.start.offset < bar.end.offset;\n const isBarHasFooEnd = bar.start.offset < foo.end.offset && foo.end.offset <= bar.end.offset;\n if (isFooHasBarStart || isFooHasBarEnd || isBarHasFooStart || isBarHasFooEnd) {\n if (isFooHasBarStart && isFooHasBarEnd)\n continue;\n if (isBarHasFooStart && isBarHasFooEnd)\n continue;\n if (isBarHasFooStart && foo.start.offset === foo.end.offset)\n continue;\n if (isFooHasBarEnd && bar.start.offset === bar.end.offset)\n continue;\n throw new ShikiError$1(`Decorations ${JSON.stringify(foo.start)} and ${JSON.stringify(bar.start)} intersect.`);\n }\n }\n }\n}\nfunction stringify(el) {\n if (el.type === \"text\")\n return el.value;\n if (el.type === \"element\")\n return el.children.map(stringify).join(\"\");\n return \"\";\n}\n\nconst builtInTransformers = [\n /* @__PURE__ */ transformerDecorations()\n];\nfunction getTransformers(options) {\n const transformers = sortTransformersByEnforcement(options.transformers || []);\n return [\n ...transformers.pre,\n ...transformers.normal,\n ...transformers.post,\n ...builtInTransformers\n ];\n}\nfunction sortTransformersByEnforcement(transformers) {\n const pre = [];\n const post = [];\n const normal = [];\n for (const transformer of transformers) {\n switch (transformer.enforce) {\n case \"pre\":\n pre.push(transformer);\n break;\n case \"post\":\n post.push(transformer);\n break;\n default:\n normal.push(transformer);\n }\n }\n return { pre, post, normal };\n}\n\n// src/colors.ts\nvar namedColors = [\n \"black\",\n \"red\",\n \"green\",\n \"yellow\",\n \"blue\",\n \"magenta\",\n \"cyan\",\n \"white\",\n \"brightBlack\",\n \"brightRed\",\n \"brightGreen\",\n \"brightYellow\",\n \"brightBlue\",\n \"brightMagenta\",\n \"brightCyan\",\n \"brightWhite\"\n];\n\n// src/decorations.ts\nvar decorations = {\n 1: \"bold\",\n 2: \"dim\",\n 3: \"italic\",\n 4: \"underline\",\n 7: \"reverse\",\n 8: \"hidden\",\n 9: \"strikethrough\"\n};\n\n// src/parser.ts\nfunction findSequence(value, position) {\n const nextEscape = value.indexOf(\"\\x1B\", position);\n if (nextEscape !== -1) {\n if (value[nextEscape + 1] === \"[\") {\n const nextClose = value.indexOf(\"m\", nextEscape);\n if (nextClose !== -1) {\n return {\n sequence: value.substring(nextEscape + 2, nextClose).split(\";\"),\n startPosition: nextEscape,\n position: nextClose + 1\n };\n }\n }\n }\n return {\n position: value.length\n };\n}\nfunction parseColor(sequence) {\n const colorMode = sequence.shift();\n if (colorMode === \"2\") {\n const rgb = sequence.splice(0, 3).map((x) => Number.parseInt(x));\n if (rgb.length !== 3 || rgb.some((x) => Number.isNaN(x)))\n return;\n return {\n type: \"rgb\",\n rgb\n };\n } else if (colorMode === \"5\") {\n const index = sequence.shift();\n if (index) {\n return { type: \"table\", index: Number(index) };\n }\n }\n}\nfunction parseSequence(sequence) {\n const commands = [];\n while (sequence.length > 0) {\n const code = sequence.shift();\n if (!code)\n continue;\n const codeInt = Number.parseInt(code);\n if (Number.isNaN(codeInt))\n continue;\n if (codeInt === 0) {\n commands.push({ type: \"resetAll\" });\n } else if (codeInt <= 9) {\n const decoration = decorations[codeInt];\n if (decoration) {\n commands.push({\n type: \"setDecoration\",\n value: decorations[codeInt]\n });\n }\n } else if (codeInt <= 29) {\n const decoration = decorations[codeInt - 20];\n if (decoration) {\n commands.push({\n type: \"resetDecoration\",\n value: decoration\n });\n if (decoration === \"dim\") {\n commands.push({\n type: \"resetDecoration\",\n value: \"bold\"\n });\n }\n }\n } else if (codeInt <= 37) {\n commands.push({\n type: \"setForegroundColor\",\n value: { type: \"named\", name: namedColors[codeInt - 30] }\n });\n } else if (codeInt === 38) {\n const color = parseColor(sequence);\n if (color) {\n commands.push({\n type: \"setForegroundColor\",\n value: color\n });\n }\n } else if (codeInt === 39) {\n commands.push({\n type: \"resetForegroundColor\"\n });\n } else if (codeInt <= 47) {\n commands.push({\n type: \"setBackgroundColor\",\n value: { type: \"named\", name: namedColors[codeInt - 40] }\n });\n } else if (codeInt === 48) {\n const color = parseColor(sequence);\n if (color) {\n commands.push({\n type: \"setBackgroundColor\",\n value: color\n });\n }\n } else if (codeInt === 49) {\n commands.push({\n type: \"resetBackgroundColor\"\n });\n } else if (codeInt === 53) {\n commands.push({\n type: \"setDecoration\",\n value: \"overline\"\n });\n } else if (codeInt === 55) {\n commands.push({\n type: \"resetDecoration\",\n value: \"overline\"\n });\n } else if (codeInt >= 90 && codeInt <= 97) {\n commands.push({\n type: \"setForegroundColor\",\n value: { type: \"named\", name: namedColors[codeInt - 90 + 8] }\n });\n } else if (codeInt >= 100 && codeInt <= 107) {\n commands.push({\n type: \"setBackgroundColor\",\n value: { type: \"named\", name: namedColors[codeInt - 100 + 8] }\n });\n }\n }\n return commands;\n}\nfunction createAnsiSequenceParser() {\n let foreground = null;\n let background = null;\n let decorations2 = /* @__PURE__ */ new Set();\n return {\n parse(value) {\n const tokens = [];\n let position = 0;\n do {\n const findResult = findSequence(value, position);\n const text = findResult.sequence ? value.substring(position, findResult.startPosition) : value.substring(position);\n if (text.length > 0) {\n tokens.push({\n value: text,\n foreground,\n background,\n decorations: new Set(decorations2)\n });\n }\n if (findResult.sequence) {\n const commands = parseSequence(findResult.sequence);\n for (const styleToken of commands) {\n if (styleToken.type === \"resetAll\") {\n foreground = null;\n background = null;\n decorations2.clear();\n } else if (styleToken.type === \"resetForegroundColor\") {\n foreground = null;\n } else if (styleToken.type === \"resetBackgroundColor\") {\n background = null;\n } else if (styleToken.type === \"resetDecoration\") {\n decorations2.delete(styleToken.value);\n }\n }\n for (const styleToken of commands) {\n if (styleToken.type === \"setForegroundColor\") {\n foreground = styleToken.value;\n } else if (styleToken.type === \"setBackgroundColor\") {\n background = styleToken.value;\n } else if (styleToken.type === \"setDecoration\") {\n decorations2.add(styleToken.value);\n }\n }\n }\n position = findResult.position;\n } while (position < value.length);\n return tokens;\n }\n };\n}\n\n// src/palette.ts\nvar defaultNamedColorsMap = {\n black: \"#000000\",\n red: \"#bb0000\",\n green: \"#00bb00\",\n yellow: \"#bbbb00\",\n blue: \"#0000bb\",\n magenta: \"#ff00ff\",\n cyan: \"#00bbbb\",\n white: \"#eeeeee\",\n brightBlack: \"#555555\",\n brightRed: \"#ff5555\",\n brightGreen: \"#00ff00\",\n brightYellow: \"#ffff55\",\n brightBlue: \"#5555ff\",\n brightMagenta: \"#ff55ff\",\n brightCyan: \"#55ffff\",\n brightWhite: \"#ffffff\"\n};\nfunction createColorPalette(namedColorsMap = defaultNamedColorsMap) {\n function namedColor(name) {\n return namedColorsMap[name];\n }\n function rgbColor(rgb) {\n return `#${rgb.map((x) => Math.max(0, Math.min(x, 255)).toString(16).padStart(2, \"0\")).join(\"\")}`;\n }\n let colorTable;\n function getColorTable() {\n if (colorTable) {\n return colorTable;\n }\n colorTable = [];\n for (let i = 0; i < namedColors.length; i++) {\n colorTable.push(namedColor(namedColors[i]));\n }\n let levels = [0, 95, 135, 175, 215, 255];\n for (let r = 0; r < 6; r++) {\n for (let g = 0; g < 6; g++) {\n for (let b = 0; b < 6; b++) {\n colorTable.push(rgbColor([levels[r], levels[g], levels[b]]));\n }\n }\n }\n let level = 8;\n for (let i = 0; i < 24; i++, level += 10) {\n colorTable.push(rgbColor([level, level, level]));\n }\n return colorTable;\n }\n function tableColor(index) {\n return getColorTable()[index];\n }\n function value(color) {\n switch (color.type) {\n case \"named\":\n return namedColor(color.name);\n case \"rgb\":\n return rgbColor(color.rgb);\n case \"table\":\n return tableColor(color.index);\n }\n }\n return {\n value\n };\n}\n\nconst defaultAnsiColors = {\n black: \"#000000\",\n red: \"#cd3131\",\n green: \"#0DBC79\",\n yellow: \"#E5E510\",\n blue: \"#2472C8\",\n magenta: \"#BC3FBC\",\n cyan: \"#11A8CD\",\n white: \"#E5E5E5\",\n brightBlack: \"#666666\",\n brightRed: \"#F14C4C\",\n brightGreen: \"#23D18B\",\n brightYellow: \"#F5F543\",\n brightBlue: \"#3B8EEA\",\n brightMagenta: \"#D670D6\",\n brightCyan: \"#29B8DB\",\n brightWhite: \"#FFFFFF\"\n};\nfunction tokenizeAnsiWithTheme(theme, fileContents, options) {\n const colorReplacements = resolveColorReplacements(theme, options);\n const lines = splitLines(fileContents);\n const ansiPalette = Object.fromEntries(\n namedColors.map((name) => {\n const key = `terminal.ansi${name[0].toUpperCase()}${name.substring(1)}`;\n const themeColor = theme.colors?.[key];\n return [name, themeColor || defaultAnsiColors[name]];\n })\n );\n const colorPalette = createColorPalette(ansiPalette);\n const parser = createAnsiSequenceParser();\n return lines.map(\n (line) => parser.parse(line[0]).map((token) => {\n let color;\n let bgColor;\n if (token.decorations.has(\"reverse\")) {\n color = token.background ? colorPalette.value(token.background) : theme.bg;\n bgColor = token.foreground ? colorPalette.value(token.foreground) : theme.fg;\n } else {\n color = token.foreground ? colorPalette.value(token.foreground) : theme.fg;\n bgColor = token.background ? colorPalette.value(token.background) : void 0;\n }\n color = applyColorReplacements(color, colorReplacements);\n bgColor = applyColorReplacements(bgColor, colorReplacements);\n if (token.decorations.has(\"dim\"))\n color = dimColor(color);\n let fontStyle = FontStyle.None;\n if (token.decorations.has(\"bold\"))\n fontStyle |= FontStyle.Bold;\n if (token.decorations.has(\"italic\"))\n fontStyle |= FontStyle.Italic;\n if (token.decorations.has(\"underline\"))\n fontStyle |= FontStyle.Underline;\n if (token.decorations.has(\"strikethrough\"))\n fontStyle |= FontStyle.Strikethrough;\n return {\n content: token.value,\n offset: line[1],\n // TODO: more accurate offset? might need to fork ansi-sequence-parser\n color,\n bgColor,\n fontStyle\n };\n })\n );\n}\nfunction dimColor(color) {\n const hexMatch = color.match(/#([0-9a-f]{3,8})/i);\n if (hexMatch) {\n const hex = hexMatch[1];\n if (hex.length === 8) {\n const alpha = Math.round(Number.parseInt(hex.slice(6, 8), 16) / 2).toString(16).padStart(2, \"0\");\n return `#${hex.slice(0, 6)}${alpha}`;\n } else if (hex.length === 6) {\n return `#${hex}80`;\n } else if (hex.length === 4) {\n const r = hex[0];\n const g = hex[1];\n const b = hex[2];\n const a = hex[3];\n const alpha = Math.round(Number.parseInt(`${a}${a}`, 16) / 2).toString(16).padStart(2, \"0\");\n return `#${r}${r}${g}${g}${b}${b}${alpha}`;\n } else if (hex.length === 3) {\n const r = hex[0];\n const g = hex[1];\n const b = hex[2];\n return `#${r}${r}${g}${g}${b}${b}80`;\n }\n }\n const cssVarMatch = color.match(/var\\((--[\\w-]+-ansi-[\\w-]+)\\)/);\n if (cssVarMatch)\n return `var(${cssVarMatch[1]}-dim)`;\n return color;\n}\n\nfunction codeToTokensBase(internal, code, options = {}) {\n const {\n theme: themeName = internal.getLoadedThemes()[0]\n } = options;\n const lang = internal.resolveLangAlias(options.lang || \"text\");\n if (isPlainLang(lang) || isNoneTheme(themeName))\n return splitLines(code).map((line) => [{ content: line[0], offset: line[1] }]);\n const { theme, colorMap } = internal.setTheme(themeName);\n if (lang === \"ansi\")\n return tokenizeAnsiWithTheme(theme, code, options);\n const _grammar = internal.getLanguage(options.lang || \"text\");\n if (options.grammarState) {\n if (options.grammarState.lang !== _grammar.name) {\n throw new ShikiError$1(`Grammar state language \"${options.grammarState.lang}\" does not match highlight language \"${_grammar.name}\"`);\n }\n if (!options.grammarState.themes.includes(theme.name)) {\n throw new ShikiError$1(`Grammar state themes \"${options.grammarState.themes}\" do not contain highlight theme \"${theme.name}\"`);\n }\n }\n return tokenizeWithTheme(code, _grammar, theme, colorMap, options);\n}\nfunction getLastGrammarState(...args) {\n if (args.length === 2) {\n return getLastGrammarStateFromMap(args[1]);\n }\n const [internal, code, options = {}] = args;\n const {\n lang = \"text\",\n theme: themeName = internal.getLoadedThemes()[0]\n } = options;\n if (isPlainLang(lang) || isNoneTheme(themeName))\n throw new ShikiError$1(\"Plain language does not have grammar state\");\n if (lang === \"ansi\")\n throw new ShikiError$1(\"ANSI language does not have grammar state\");\n const { theme, colorMap } = internal.setTheme(themeName);\n const _grammar = internal.getLanguage(lang);\n return new GrammarState(\n _tokenizeWithTheme(code, _grammar, theme, colorMap, options).stateStack,\n _grammar.name,\n theme.name\n );\n}\nfunction tokenizeWithTheme(code, grammar, theme, colorMap, options) {\n const result = _tokenizeWithTheme(code, grammar, theme, colorMap, options);\n const grammarState = new GrammarState(\n result.stateStack,\n grammar.name,\n theme.name\n );\n setLastGrammarStateToMap(result.tokens, grammarState);\n return result.tokens;\n}\nfunction _tokenizeWithTheme(code, grammar, theme, colorMap, options) {\n const colorReplacements = resolveColorReplacements(theme, options);\n const {\n tokenizeMaxLineLength = 0,\n tokenizeTimeLimit = 500\n } = options;\n const lines = splitLines(code);\n let stateStack = options.grammarState ? getGrammarStack(options.grammarState, theme.name) ?? INITIAL : options.grammarContextCode != null ? _tokenizeWithTheme(\n options.grammarContextCode,\n grammar,\n theme,\n colorMap,\n {\n ...options,\n grammarState: void 0,\n grammarContextCode: void 0\n }\n ).stateStack : INITIAL;\n let actual = [];\n const final = [];\n for (let i = 0, len = lines.length; i < len; i++) {\n const [line, lineOffset] = lines[i];\n if (line === \"\") {\n actual = [];\n final.push([]);\n continue;\n }\n if (tokenizeMaxLineLength > 0 && line.length >= tokenizeMaxLineLength) {\n actual = [];\n final.push([{\n content: line,\n offset: lineOffset,\n color: \"\",\n fontStyle: 0\n }]);\n continue;\n }\n let resultWithScopes;\n let tokensWithScopes;\n let tokensWithScopesIndex;\n if (options.includeExplanation) {\n resultWithScopes = grammar.tokenizeLine(line, stateStack, tokenizeTimeLimit);\n tokensWithScopes = resultWithScopes.tokens;\n tokensWithScopesIndex = 0;\n }\n const result = grammar.tokenizeLine2(line, stateStack, tokenizeTimeLimit);\n const tokensLength = result.tokens.length / 2;\n for (let j = 0; j < tokensLength; j++) {\n const startIndex = result.tokens[2 * j];\n const nextStartIndex = j + 1 < tokensLength ? result.tokens[2 * j + 2] : line.length;\n if (startIndex === nextStartIndex)\n continue;\n const metadata = result.tokens[2 * j + 1];\n const color = applyColorReplacements(\n colorMap[EncodedTokenMetadata.getForeground(metadata)],\n colorReplacements\n );\n const fontStyle = EncodedTokenMetadata.getFontStyle(metadata);\n const token = {\n content: line.substring(startIndex, nextStartIndex),\n offset: lineOffset + startIndex,\n color,\n fontStyle\n };\n if (options.includeExplanation) {\n const themeSettingsSelectors = [];\n if (options.includeExplanation !== \"scopeName\") {\n for (const setting of theme.settings) {\n let selectors;\n switch (typeof setting.scope) {\n case \"string\":\n selectors = setting.scope.split(/,/).map((scope) => scope.trim());\n break;\n case \"object\":\n selectors = setting.scope;\n break;\n default:\n continue;\n }\n themeSettingsSelectors.push({\n settings: setting,\n selectors: selectors.map((selector) => selector.split(/ /))\n });\n }\n }\n token.explanation = [];\n let offset = 0;\n while (startIndex + offset < nextStartIndex) {\n const tokenWithScopes = tokensWithScopes[tokensWithScopesIndex];\n const tokenWithScopesText = line.substring(\n tokenWithScopes.startIndex,\n tokenWithScopes.endIndex\n );\n offset += tokenWithScopesText.length;\n token.explanation.push({\n content: tokenWithScopesText,\n scopes: options.includeExplanation === \"scopeName\" ? explainThemeScopesNameOnly(\n tokenWithScopes.scopes\n ) : explainThemeScopesFull(\n themeSettingsSelectors,\n tokenWithScopes.scopes\n )\n });\n tokensWithScopesIndex += 1;\n }\n }\n actual.push(token);\n }\n final.push(actual);\n actual = [];\n stateStack = result.ruleStack;\n }\n return {\n tokens: final,\n stateStack\n };\n}\nfunction explainThemeScopesNameOnly(scopes) {\n return scopes.map((scope) => ({ scopeName: scope }));\n}\nfunction explainThemeScopesFull(themeSelectors, scopes) {\n const result = [];\n for (let i = 0, len = scopes.length; i < len; i++) {\n const scope = scopes[i];\n result[i] = {\n scopeName: scope,\n themeMatches: explainThemeScope(themeSelectors, scope, scopes.slice(0, i))\n };\n }\n return result;\n}\nfunction matchesOne(selector, scope) {\n return selector === scope || scope.substring(0, selector.length) === selector && scope[selector.length] === \".\";\n}\nfunction matches(selectors, scope, parentScopes) {\n if (!matchesOne(selectors[selectors.length - 1], scope))\n return false;\n let selectorParentIndex = selectors.length - 2;\n let parentIndex = parentScopes.length - 1;\n while (selectorParentIndex >= 0 && parentIndex >= 0) {\n if (matchesOne(selectors[selectorParentIndex], parentScopes[parentIndex]))\n selectorParentIndex -= 1;\n parentIndex -= 1;\n }\n if (selectorParentIndex === -1)\n return true;\n return false;\n}\nfunction explainThemeScope(themeSettingsSelectors, scope, parentScopes) {\n const result = [];\n for (const { selectors, settings } of themeSettingsSelectors) {\n for (const selectorPieces of selectors) {\n if (matches(selectorPieces, scope, parentScopes)) {\n result.push(settings);\n break;\n }\n }\n }\n return result;\n}\n\nfunction codeToTokensWithThemes(internal, code, options) {\n const themes = Object.entries(options.themes).filter((i) => i[1]).map((i) => ({ color: i[0], theme: i[1] }));\n const themedTokens = themes.map((t) => {\n const tokens2 = codeToTokensBase(internal, code, {\n ...options,\n theme: t.theme\n });\n const state = getLastGrammarStateFromMap(tokens2);\n const theme = typeof t.theme === \"string\" ? t.theme : t.theme.name;\n return {\n tokens: tokens2,\n state,\n theme\n };\n });\n const tokens = syncThemesTokenization(\n ...themedTokens.map((i) => i.tokens)\n );\n const mergedTokens = tokens[0].map(\n (line, lineIdx) => line.map((_token, tokenIdx) => {\n const mergedToken = {\n content: _token.content,\n variants: {},\n offset: _token.offset\n };\n if (\"includeExplanation\" in options && options.includeExplanation) {\n mergedToken.explanation = _token.explanation;\n }\n tokens.forEach((t, themeIdx) => {\n const {\n content: _,\n explanation: __,\n offset: ___,\n ...styles\n } = t[lineIdx][tokenIdx];\n mergedToken.variants[themes[themeIdx].color] = styles;\n });\n return mergedToken;\n })\n );\n const mergedGrammarState = themedTokens[0].state ? new GrammarState(\n Object.fromEntries(themedTokens.map((s) => [s.theme, s.state?.getInternalStack(s.theme)])),\n themedTokens[0].state.lang\n ) : void 0;\n if (mergedGrammarState)\n setLastGrammarStateToMap(mergedTokens, mergedGrammarState);\n return mergedTokens;\n}\nfunction syncThemesTokenization(...themes) {\n const outThemes = themes.map(() => []);\n const count = themes.length;\n for (let i = 0; i < themes[0].length; i++) {\n const lines = themes.map((t) => t[i]);\n const outLines = outThemes.map(() => []);\n outThemes.forEach((t, i2) => t.push(outLines[i2]));\n const indexes = lines.map(() => 0);\n const current = lines.map((l) => l[0]);\n while (current.every((t) => t)) {\n const minLength = Math.min(...current.map((t) => t.content.length));\n for (let n = 0; n < count; n++) {\n const token = current[n];\n if (token.content.length === minLength) {\n outLines[n].push(token);\n indexes[n] += 1;\n current[n] = lines[n][indexes[n]];\n } else {\n outLines[n].push({\n ...token,\n content: token.content.slice(0, minLength)\n });\n current[n] = {\n ...token,\n content: token.content.slice(minLength),\n offset: token.offset + minLength\n };\n }\n }\n }\n }\n return outThemes;\n}\n\nfunction codeToTokens(internal, code, options) {\n let bg;\n let fg;\n let tokens;\n let themeName;\n let rootStyle;\n let grammarState;\n if (\"themes\" in options) {\n const {\n defaultColor = \"light\",\n cssVariablePrefix = \"--shiki-\",\n colorsRendering = \"css-vars\"\n } = options;\n const themes = Object.entries(options.themes).filter((i) => i[1]).map((i) => ({ color: i[0], theme: i[1] })).sort((a, b) => a.color === defaultColor ? -1 : b.color === defaultColor ? 1 : 0);\n if (themes.length === 0)\n throw new ShikiError$1(\"`themes` option must not be empty\");\n const themeTokens = codeToTokensWithThemes(\n internal,\n code,\n options\n );\n grammarState = getLastGrammarStateFromMap(themeTokens);\n if (defaultColor && DEFAULT_COLOR_LIGHT_DARK !== defaultColor && !themes.find((t) => t.color === defaultColor))\n throw new ShikiError$1(`\\`themes\\` option must contain the defaultColor key \\`${defaultColor}\\``);\n const themeRegs = themes.map((t) => internal.getTheme(t.theme));\n const themesOrder = themes.map((t) => t.color);\n tokens = themeTokens.map((line) => line.map((token) => flatTokenVariants(token, themesOrder, cssVariablePrefix, defaultColor, colorsRendering)));\n if (grammarState)\n setLastGrammarStateToMap(tokens, grammarState);\n const themeColorReplacements = themes.map((t) => resolveColorReplacements(t.theme, options));\n fg = mapThemeColors(themes, themeRegs, themeColorReplacements, cssVariablePrefix, defaultColor, \"fg\", colorsRendering);\n bg = mapThemeColors(themes, themeRegs, themeColorReplacements, cssVariablePrefix, defaultColor, \"bg\", colorsRendering);\n themeName = `shiki-themes ${themeRegs.map((t) => t.name).join(\" \")}`;\n rootStyle = defaultColor ? void 0 : [fg, bg].join(\";\");\n } else if (\"theme\" in options) {\n const colorReplacements = resolveColorReplacements(options.theme, options);\n tokens = codeToTokensBase(\n internal,\n code,\n options\n );\n const _theme = internal.getTheme(options.theme);\n bg = applyColorReplacements(_theme.bg, colorReplacements);\n fg = applyColorReplacements(_theme.fg, colorReplacements);\n themeName = _theme.name;\n grammarState = getLastGrammarStateFromMap(tokens);\n } else {\n throw new ShikiError$1(\"Invalid options, either `theme` or `themes` must be provided\");\n }\n return {\n tokens,\n fg,\n bg,\n themeName,\n rootStyle,\n grammarState\n };\n}\nfunction mapThemeColors(themes, themeRegs, themeColorReplacements, cssVariablePrefix, defaultColor, property, colorsRendering) {\n return themes.map((t, idx) => {\n const value = applyColorReplacements(themeRegs[idx][property], themeColorReplacements[idx]) || \"inherit\";\n const cssVar = `${cssVariablePrefix + t.color}${property === \"bg\" ? \"-bg\" : \"\"}:${value}`;\n if (idx === 0 && defaultColor) {\n if (defaultColor === DEFAULT_COLOR_LIGHT_DARK && themes.length > 1) {\n const lightIndex = themes.findIndex((t2) => t2.color === \"light\");\n const darkIndex = themes.findIndex((t2) => t2.color === \"dark\");\n if (lightIndex === -1 || darkIndex === -1)\n throw new ShikiError$1('When using `defaultColor: \"light-dark()\"`, you must provide both `light` and `dark` themes');\n const lightValue = applyColorReplacements(themeRegs[lightIndex][property], themeColorReplacements[lightIndex]) || \"inherit\";\n const darkValue = applyColorReplacements(themeRegs[darkIndex][property], themeColorReplacements[darkIndex]) || \"inherit\";\n return `light-dark(${lightValue}, ${darkValue});${cssVar}`;\n }\n return value;\n }\n if (colorsRendering === \"css-vars\") {\n return cssVar;\n }\n return null;\n }).filter((i) => !!i).join(\";\");\n}\n\nfunction codeToHast(internal, code, options, transformerContext = {\n meta: {},\n options,\n codeToHast: (_code, _options) => codeToHast(internal, _code, _options),\n codeToTokens: (_code, _options) => codeToTokens(internal, _code, _options)\n}) {\n let input = code;\n for (const transformer of getTransformers(options))\n input = transformer.preprocess?.call(transformerContext, input, options) || input;\n let {\n tokens,\n fg,\n bg,\n themeName,\n rootStyle,\n grammarState\n } = codeToTokens(internal, input, options);\n const {\n mergeWhitespaces = true,\n mergeSameStyleTokens = false\n } = options;\n if (mergeWhitespaces === true)\n tokens = mergeWhitespaceTokens(tokens);\n else if (mergeWhitespaces === \"never\")\n tokens = splitWhitespaceTokens(tokens);\n if (mergeSameStyleTokens) {\n tokens = mergeAdjacentStyledTokens(tokens);\n }\n const contextSource = {\n ...transformerContext,\n get source() {\n return input;\n }\n };\n for (const transformer of getTransformers(options))\n tokens = transformer.tokens?.call(contextSource, tokens) || tokens;\n return tokensToHast(\n tokens,\n {\n ...options,\n fg,\n bg,\n themeName,\n rootStyle: options.rootStyle === false ? false : options.rootStyle ?? rootStyle\n },\n contextSource,\n grammarState\n );\n}\nfunction tokensToHast(tokens, options, transformerContext, grammarState = getLastGrammarStateFromMap(tokens)) {\n const transformers = getTransformers(options);\n const lines = [];\n const root = {\n type: \"root\",\n children: []\n };\n const {\n structure = \"classic\",\n tabindex = \"0\"\n } = options;\n const properties = {\n class: `shiki ${options.themeName || \"\"}`\n };\n if (options.rootStyle !== false) {\n if (options.rootStyle != null)\n properties.style = options.rootStyle;\n else\n properties.style = `background-color:${options.bg};color:${options.fg}`;\n }\n if (tabindex !== false && tabindex != null)\n properties.tabindex = tabindex.toString();\n for (const [key, value] of Object.entries(options.meta || {})) {\n if (!key.startsWith(\"_\"))\n properties[key] = value;\n }\n let preNode = {\n type: \"element\",\n tagName: \"pre\",\n properties,\n children: [],\n data: options.data\n };\n let codeNode = {\n type: \"element\",\n tagName: \"code\",\n properties: {},\n children: lines\n };\n const lineNodes = [];\n const context = {\n ...transformerContext,\n structure,\n addClassToHast,\n get source() {\n return transformerContext.source;\n },\n get tokens() {\n return tokens;\n },\n get options() {\n return options;\n },\n get root() {\n return root;\n },\n get pre() {\n return preNode;\n },\n get code() {\n return codeNode;\n },\n get lines() {\n return lineNodes;\n }\n };\n tokens.forEach((line, idx) => {\n if (idx) {\n if (structure === \"inline\")\n root.children.push({ type: \"element\", tagName: \"br\", properties: {}, children: [] });\n else if (structure === \"classic\")\n lines.push({ type: \"text\", value: \"\\n\" });\n }\n let lineNode = {\n type: \"element\",\n tagName: \"span\",\n properties: { class: \"line\" },\n children: []\n };\n let col = 0;\n for (const token of line) {\n let tokenNode = {\n type: \"element\",\n tagName: \"span\",\n properties: {\n ...token.htmlAttrs\n },\n children: [{ type: \"text\", value: token.content }]\n };\n const style = stringifyTokenStyle(token.htmlStyle || getTokenStyleObject(token));\n if (style)\n tokenNode.properties.style = style;\n for (const transformer of transformers)\n tokenNode = transformer?.span?.call(context, tokenNode, idx + 1, col, lineNode, token) || tokenNode;\n if (structure === \"inline\")\n root.children.push(tokenNode);\n else if (structure === \"classic\")\n lineNode.children.push(tokenNode);\n col += token.content.length;\n }\n if (structure === \"classic\") {\n for (const transformer of transformers)\n lineNode = transformer?.line?.call(context, lineNode, idx + 1) || lineNode;\n lineNodes.push(lineNode);\n lines.push(lineNode);\n } else if (structure === \"inline\") {\n lineNodes.push(lineNode);\n }\n });\n if (structure === \"classic\") {\n for (const transformer of transformers)\n codeNode = transformer?.code?.call(context, codeNode) || codeNode;\n preNode.children.push(codeNode);\n for (const transformer of transformers)\n preNode = transformer?.pre?.call(context, preNode) || preNode;\n root.children.push(preNode);\n } else if (structure === \"inline\") {\n const syntheticLines = [];\n let currentLine = {\n type: \"element\",\n tagName: \"span\",\n properties: { class: \"line\" },\n children: []\n };\n for (const child of root.children) {\n if (child.type === \"element\" && child.tagName === \"br\") {\n syntheticLines.push(currentLine);\n currentLine = {\n type: \"element\",\n tagName: \"span\",\n properties: { class: \"line\" },\n children: []\n };\n } else if (child.type === \"element\" || child.type === \"text\") {\n currentLine.children.push(child);\n }\n }\n syntheticLines.push(currentLine);\n const syntheticCode = {\n type: \"element\",\n tagName: \"code\",\n properties: {},\n children: syntheticLines\n };\n let transformedCode = syntheticCode;\n for (const transformer of transformers)\n transformedCode = transformer?.code?.call(context, transformedCode) || transformedCode;\n root.children = [];\n for (let i = 0; i < transformedCode.children.length; i++) {\n if (i > 0)\n root.children.push({ type: \"element\", tagName: \"br\", properties: {}, children: [] });\n const line = transformedCode.children[i];\n if (line.type === \"element\")\n root.children.push(...line.children);\n }\n }\n let result = root;\n for (const transformer of transformers)\n result = transformer?.root?.call(context, result) || result;\n if (grammarState)\n setLastGrammarStateToMap(result, grammarState);\n return result;\n}\nfunction mergeWhitespaceTokens(tokens) {\n return tokens.map((line) => {\n const newLine = [];\n let carryOnContent = \"\";\n let firstOffset;\n line.forEach((token, idx) => {\n const isDecorated = token.fontStyle && (token.fontStyle & FontStyle.Underline || token.fontStyle & FontStyle.Strikethrough);\n const couldMerge = !isDecorated;\n if (couldMerge && token.content.match(/^\\s+$/) && line[idx + 1]) {\n if (firstOffset === void 0)\n firstOffset = token.offset;\n carryOnContent += token.content;\n } else {\n if (carryOnContent) {\n if (couldMerge) {\n newLine.push({\n ...token,\n offset: firstOffset,\n content: carryOnContent + token.content\n });\n } else {\n newLine.push(\n {\n content: carryOnContent,\n offset: firstOffset\n },\n token\n );\n }\n firstOffset = void 0;\n carryOnContent = \"\";\n } else {\n newLine.push(token);\n }\n }\n });\n return newLine;\n });\n}\nfunction splitWhitespaceTokens(tokens) {\n return tokens.map((line) => {\n return line.flatMap((token) => {\n if (token.content.match(/^\\s+$/))\n return token;\n const match = token.content.match(/^(\\s*)(.*?)(\\s*)$/);\n if (!match)\n return token;\n const [, leading, content, trailing] = match;\n if (!leading && !trailing)\n return token;\n const expanded = [{\n ...token,\n offset: token.offset + leading.length,\n content\n }];\n if (leading) {\n expanded.unshift({\n content: leading,\n offset: token.offset\n });\n }\n if (trailing) {\n expanded.push({\n content: trailing,\n offset: token.offset + leading.length + content.length\n });\n }\n return expanded;\n });\n });\n}\nfunction mergeAdjacentStyledTokens(tokens) {\n return tokens.map((line) => {\n const newLine = [];\n for (const token of line) {\n if (newLine.length === 0) {\n newLine.push({ ...token });\n continue;\n }\n const prevToken = newLine[newLine.length - 1];\n const prevStyle = stringifyTokenStyle(prevToken.htmlStyle || getTokenStyleObject(prevToken));\n const currentStyle = stringifyTokenStyle(token.htmlStyle || getTokenStyleObject(token));\n const isPrevDecorated = prevToken.fontStyle && (prevToken.fontStyle & FontStyle.Underline || prevToken.fontStyle & FontStyle.Strikethrough);\n const isDecorated = token.fontStyle && (token.fontStyle & FontStyle.Underline || token.fontStyle & FontStyle.Strikethrough);\n if (!isPrevDecorated && !isDecorated && prevStyle === currentStyle) {\n prevToken.content += token.content;\n } else {\n newLine.push({ ...token });\n }\n }\n return newLine;\n });\n}\n\nconst hastToHtml = toHtml;\nfunction codeToHtml(internal, code, options) {\n const context = {\n meta: {},\n options,\n codeToHast: (_code, _options) => codeToHast(internal, _code, _options),\n codeToTokens: (_code, _options) => codeToTokens(internal, _code, _options)\n };\n let result = hastToHtml(codeToHast(internal, code, options, context));\n for (const transformer of getTransformers(options))\n result = transformer.postprocess?.call(context, result, options) || result;\n return result;\n}\n\nconst VSCODE_FALLBACK_EDITOR_FG = { light: \"#333333\", dark: \"#bbbbbb\" };\nconst VSCODE_FALLBACK_EDITOR_BG = { light: \"#fffffe\", dark: \"#1e1e1e\" };\nconst RESOLVED_KEY = \"__shiki_resolved\";\nfunction normalizeTheme(rawTheme) {\n if (rawTheme?.[RESOLVED_KEY])\n return rawTheme;\n const theme = {\n ...rawTheme\n };\n if (theme.tokenColors && !theme.settings) {\n theme.settings = theme.tokenColors;\n delete theme.tokenColors;\n }\n theme.type ||= \"dark\";\n theme.colorReplacements = { ...theme.colorReplacements };\n theme.settings ||= [];\n let { bg, fg } = theme;\n if (!bg || !fg) {\n const globalSetting = theme.settings ? theme.settings.find((s) => !s.name && !s.scope) : void 0;\n if (globalSetting?.settings?.foreground)\n fg = globalSetting.settings.foreground;\n if (globalSetting?.settings?.background)\n bg = globalSetting.settings.background;\n if (!fg && theme?.colors?.[\"editor.foreground\"])\n fg = theme.colors[\"editor.foreground\"];\n if (!bg && theme?.colors?.[\"editor.background\"])\n bg = theme.colors[\"editor.background\"];\n if (!fg)\n fg = theme.type === \"light\" ? VSCODE_FALLBACK_EDITOR_FG.light : VSCODE_FALLBACK_EDITOR_FG.dark;\n if (!bg)\n bg = theme.type === \"light\" ? VSCODE_FALLBACK_EDITOR_BG.light : VSCODE_FALLBACK_EDITOR_BG.dark;\n theme.fg = fg;\n theme.bg = bg;\n }\n if (!(theme.settings[0] && theme.settings[0].settings && !theme.settings[0].scope)) {\n theme.settings.unshift({\n settings: {\n foreground: theme.fg,\n background: theme.bg\n }\n });\n }\n let replacementCount = 0;\n const replacementMap = /* @__PURE__ */ new Map();\n function getReplacementColor(value) {\n if (replacementMap.has(value))\n return replacementMap.get(value);\n replacementCount += 1;\n const hex = `#${replacementCount.toString(16).padStart(8, \"0\").toLowerCase()}`;\n if (theme.colorReplacements?.[`#${hex}`])\n return getReplacementColor(value);\n replacementMap.set(value, hex);\n return hex;\n }\n theme.settings = theme.settings.map((setting) => {\n const replaceFg = setting.settings?.foreground && !setting.settings.foreground.startsWith(\"#\");\n const replaceBg = setting.settings?.background && !setting.settings.background.startsWith(\"#\");\n if (!replaceFg && !replaceBg)\n return setting;\n const clone = {\n ...setting,\n settings: {\n ...setting.settings\n }\n };\n if (replaceFg) {\n const replacement = getReplacementColor(setting.settings.foreground);\n theme.colorReplacements[replacement] = setting.settings.foreground;\n clone.settings.foreground = replacement;\n }\n if (replaceBg) {\n const replacement = getReplacementColor(setting.settings.background);\n theme.colorReplacements[replacement] = setting.settings.background;\n clone.settings.background = replacement;\n }\n return clone;\n });\n for (const key of Object.keys(theme.colors || {})) {\n if (key === \"editor.foreground\" || key === \"editor.background\" || key.startsWith(\"terminal.ansi\")) {\n if (!theme.colors[key]?.startsWith(\"#\")) {\n const replacement = getReplacementColor(theme.colors[key]);\n theme.colorReplacements[replacement] = theme.colors[key];\n theme.colors[key] = replacement;\n }\n }\n }\n Object.defineProperty(theme, RESOLVED_KEY, {\n enumerable: false,\n writable: false,\n value: true\n });\n return theme;\n}\n\nasync function resolveLangs(langs) {\n return Array.from(new Set((await Promise.all(\n langs.filter((l) => !isSpecialLang(l)).map(async (lang) => await normalizeGetter(lang).then((r) => Array.isArray(r) ? r : [r]))\n )).flat()));\n}\nasync function resolveThemes(themes) {\n const resolved = await Promise.all(\n themes.map(\n async (theme) => isSpecialTheme(theme) ? null : normalizeTheme(await normalizeGetter(theme))\n )\n );\n return resolved.filter((i) => !!i);\n}\n\nlet _emitDeprecation = 3;\nlet _emitError = false;\nfunction enableDeprecationWarnings(emitDeprecation = true, emitError = false) {\n _emitDeprecation = emitDeprecation;\n _emitError = emitError;\n}\nfunction warnDeprecated(message, version = 3) {\n if (!_emitDeprecation)\n return;\n if (typeof _emitDeprecation === \"number\" && version > _emitDeprecation)\n return;\n if (_emitError) {\n throw new Error(`[SHIKI DEPRECATE]: ${message}`);\n } else {\n console.trace(`[SHIKI DEPRECATE]: ${message}`);\n }\n}\n\nclass ShikiError extends Error {\n constructor(message) {\n super(message);\n this.name = \"ShikiError\";\n }\n}\n\nfunction resolveLangAlias(name, alias) {\n if (!alias)\n return name;\n if (alias[name]) {\n const resolved = /* @__PURE__ */ new Set([name]);\n while (alias[name]) {\n name = alias[name];\n if (resolved.has(name))\n throw new ShikiError(`Circular alias \\`${Array.from(resolved).join(\" -> \")} -> ${name}\\``);\n resolved.add(name);\n }\n }\n return name;\n}\n\nclass Registry extends Registry$1 {\n constructor(_resolver, _themes, _langs, _alias = {}) {\n super(_resolver);\n this._resolver = _resolver;\n this._themes = _themes;\n this._langs = _langs;\n this._alias = _alias;\n this._themes.map((t) => this.loadTheme(t));\n this.loadLanguages(this._langs);\n }\n _resolvedThemes = /* @__PURE__ */ new Map();\n _resolvedGrammars = /* @__PURE__ */ new Map();\n _langMap = /* @__PURE__ */ new Map();\n _langGraph = /* @__PURE__ */ new Map();\n _textmateThemeCache = /* @__PURE__ */ new WeakMap();\n _loadedThemesCache = null;\n _loadedLanguagesCache = null;\n getTheme(theme) {\n if (typeof theme === \"string\")\n return this._resolvedThemes.get(theme);\n else\n return this.loadTheme(theme);\n }\n loadTheme(theme) {\n const _theme = normalizeTheme(theme);\n if (_theme.name) {\n this._resolvedThemes.set(_theme.name, _theme);\n this._loadedThemesCache = null;\n }\n return _theme;\n }\n getLoadedThemes() {\n if (!this._loadedThemesCache)\n this._loadedThemesCache = [...this._resolvedThemes.keys()];\n return this._loadedThemesCache;\n }\n // Override and re-implement this method to cache the textmate themes as `TextMateTheme.createFromRawTheme`\n // is expensive. Themes can switch often especially for dual-theme support.\n //\n // The parent class also accepts `colorMap` as the second parameter, but since we don't use that,\n // we omit here so it's easier to cache the themes.\n setTheme(theme) {\n let textmateTheme = this._textmateThemeCache.get(theme);\n if (!textmateTheme) {\n textmateTheme = Theme.createFromRawTheme(theme);\n this._textmateThemeCache.set(theme, textmateTheme);\n }\n this._syncRegistry.setTheme(textmateTheme);\n }\n getGrammar(name) {\n name = resolveLangAlias(name, this._alias);\n return this._resolvedGrammars.get(name);\n }\n loadLanguage(lang) {\n if (this.getGrammar(lang.name))\n return;\n const embeddedLazilyBy = new Set(\n [...this._langMap.values()].filter((i) => i.embeddedLangsLazy?.includes(lang.name))\n );\n this._resolver.addLanguage(lang);\n const grammarConfig = {\n balancedBracketSelectors: lang.balancedBracketSelectors || [\"*\"],\n unbalancedBracketSelectors: lang.unbalancedBracketSelectors || []\n };\n this._syncRegistry._rawGrammars.set(lang.scopeName, lang);\n const g = this.loadGrammarWithConfiguration(lang.scopeName, 1, grammarConfig);\n g.name = lang.name;\n this._resolvedGrammars.set(lang.name, g);\n if (lang.aliases) {\n lang.aliases.forEach((alias) => {\n this._alias[alias] = lang.name;\n });\n }\n this._loadedLanguagesCache = null;\n if (embeddedLazilyBy.size) {\n for (const e of embeddedLazilyBy) {\n this._resolvedGrammars.delete(e.name);\n this._loadedLanguagesCache = null;\n this._syncRegistry?._injectionGrammars?.delete(e.scopeName);\n this._syncRegistry?._grammars?.delete(e.scopeName);\n this.loadLanguage(this._langMap.get(e.name));\n }\n }\n }\n dispose() {\n super.dispose();\n this._resolvedThemes.clear();\n this._resolvedGrammars.clear();\n this._langMap.clear();\n this._langGraph.clear();\n this._loadedThemesCache = null;\n }\n loadLanguages(langs) {\n for (const lang of langs)\n this.resolveEmbeddedLanguages(lang);\n const langsGraphArray = Array.from(this._langGraph.entries());\n const missingLangs = langsGraphArray.filter(([_, lang]) => !lang);\n if (missingLangs.length) {\n const dependents = langsGraphArray.filter(([_, lang]) => {\n if (!lang)\n return false;\n const embedded = lang.embeddedLanguages || lang.embeddedLangs;\n return embedded?.some((l) => missingLangs.map(([name]) => name).includes(l));\n }).filter((lang) => !missingLangs.includes(lang));\n throw new ShikiError(`Missing languages ${missingLangs.map(([name]) => `\\`${name}\\``).join(\", \")}, required by ${dependents.map(([name]) => `\\`${name}\\``).join(\", \")}`);\n }\n for (const [_, lang] of langsGraphArray)\n this._resolver.addLanguage(lang);\n for (const [_, lang] of langsGraphArray)\n this.loadLanguage(lang);\n }\n getLoadedLanguages() {\n if (!this._loadedLanguagesCache) {\n this._loadedLanguagesCache = [\n .../* @__PURE__ */ new Set([...this._resolvedGrammars.keys(), ...Object.keys(this._alias)])\n ];\n }\n return this._loadedLanguagesCache;\n }\n resolveEmbeddedLanguages(lang) {\n this._langMap.set(lang.name, lang);\n this._langGraph.set(lang.name, lang);\n const embedded = lang.embeddedLanguages ?? lang.embeddedLangs;\n if (embedded) {\n for (const embeddedLang of embedded)\n this._langGraph.set(embeddedLang, this._langMap.get(embeddedLang));\n }\n }\n}\n\nclass Resolver {\n _langs = /* @__PURE__ */ new Map();\n _scopeToLang = /* @__PURE__ */ new Map();\n _injections = /* @__PURE__ */ new Map();\n _onigLib;\n constructor(engine, langs) {\n this._onigLib = {\n createOnigScanner: (patterns) => engine.createScanner(patterns),\n createOnigString: (s) => engine.createString(s)\n };\n langs.forEach((i) => this.addLanguage(i));\n }\n get onigLib() {\n return this._onigLib;\n }\n getLangRegistration(langIdOrAlias) {\n return this._langs.get(langIdOrAlias);\n }\n loadGrammar(scopeName) {\n return this._scopeToLang.get(scopeName);\n }\n addLanguage(l) {\n this._langs.set(l.name, l);\n if (l.aliases) {\n l.aliases.forEach((a) => {\n this._langs.set(a, l);\n });\n }\n this._scopeToLang.set(l.scopeName, l);\n if (l.injectTo) {\n l.injectTo.forEach((i) => {\n if (!this._injections.get(i))\n this._injections.set(i, []);\n this._injections.get(i).push(l.scopeName);\n });\n }\n }\n getInjections(scopeName) {\n const scopeParts = scopeName.split(\".\");\n let injections = [];\n for (let i = 1; i <= scopeParts.length; i++) {\n const subScopeName = scopeParts.slice(0, i).join(\".\");\n injections = [...injections, ...this._injections.get(subScopeName) || []];\n }\n return injections;\n }\n}\n\nlet instancesCount = 0;\nfunction createShikiInternalSync(options) {\n instancesCount += 1;\n if (options.warnings !== false && instancesCount >= 10 && instancesCount % 10 === 0)\n console.warn(`[Shiki] ${instancesCount} instances have been created. Shiki is supposed to be used as a singleton, consider refactoring your code to cache your highlighter instance; Or call \\`highlighter.dispose()\\` to release unused instances.`);\n let isDisposed = false;\n if (!options.engine)\n throw new ShikiError(\"`engine` option is required for synchronous mode\");\n const langs = (options.langs || []).flat(1);\n const themes = (options.themes || []).flat(1).map(normalizeTheme);\n const resolver = new Resolver(options.engine, langs);\n const _registry = new Registry(resolver, themes, langs, options.langAlias);\n let _lastTheme;\n function resolveLangAlias$1(name) {\n return resolveLangAlias(name, options.langAlias);\n }\n function getLanguage(name) {\n ensureNotDisposed();\n const _lang = _registry.getGrammar(typeof name === \"string\" ? name : name.name);\n if (!_lang)\n throw new ShikiError(`Language \\`${name}\\` not found, you may need to load it first`);\n return _lang;\n }\n function getTheme(name) {\n if (name === \"none\")\n return { bg: \"\", fg: \"\", name: \"none\", settings: [], type: \"dark\" };\n ensureNotDisposed();\n const _theme = _registry.getTheme(name);\n if (!_theme)\n throw new ShikiError(`Theme \\`${name}\\` not found, you may need to load it first`);\n return _theme;\n }\n function setTheme(name) {\n ensureNotDisposed();\n const theme = getTheme(name);\n if (_lastTheme !== name) {\n _registry.setTheme(theme);\n _lastTheme = name;\n }\n const colorMap = _registry.getColorMap();\n return {\n theme,\n colorMap\n };\n }\n function getLoadedThemes() {\n ensureNotDisposed();\n return _registry.getLoadedThemes();\n }\n function getLoadedLanguages() {\n ensureNotDisposed();\n return _registry.getLoadedLanguages();\n }\n function loadLanguageSync(...langs2) {\n ensureNotDisposed();\n _registry.loadLanguages(langs2.flat(1));\n }\n async function loadLanguage(...langs2) {\n return loadLanguageSync(await resolveLangs(langs2));\n }\n function loadThemeSync(...themes2) {\n ensureNotDisposed();\n for (const theme of themes2.flat(1)) {\n _registry.loadTheme(theme);\n }\n }\n async function loadTheme(...themes2) {\n ensureNotDisposed();\n return loadThemeSync(await resolveThemes(themes2));\n }\n function ensureNotDisposed() {\n if (isDisposed)\n throw new ShikiError(\"Shiki instance has been disposed\");\n }\n function dispose() {\n if (isDisposed)\n return;\n isDisposed = true;\n _registry.dispose();\n instancesCount -= 1;\n }\n return {\n setTheme,\n getTheme,\n getLanguage,\n getLoadedThemes,\n getLoadedLanguages,\n resolveLangAlias: resolveLangAlias$1,\n loadLanguage,\n loadLanguageSync,\n loadTheme,\n loadThemeSync,\n dispose,\n [Symbol.dispose]: dispose\n };\n}\n\nasync function createShikiInternal(options) {\n if (!options.engine) {\n warnDeprecated(\"`engine` option is required. Use `createOnigurumaEngine` or `createJavaScriptRegexEngine` to create an engine.\");\n }\n const [\n themes,\n langs,\n engine\n ] = await Promise.all([\n resolveThemes(options.themes || []),\n resolveLangs(options.langs || []),\n options.engine\n ]);\n return createShikiInternalSync({\n ...options,\n themes,\n langs,\n engine\n });\n}\n\nasync function createHighlighterCore(options) {\n const internal = await createShikiInternal(options);\n return {\n getLastGrammarState: (...args) => getLastGrammarState(internal, ...args),\n codeToTokensBase: (code, options2) => codeToTokensBase(internal, code, options2),\n codeToTokensWithThemes: (code, options2) => codeToTokensWithThemes(internal, code, options2),\n codeToTokens: (code, options2) => codeToTokens(internal, code, options2),\n codeToHast: (code, options2) => codeToHast(internal, code, options2),\n codeToHtml: (code, options2) => codeToHtml(internal, code, options2),\n getBundledLanguages: () => ({}),\n getBundledThemes: () => ({}),\n ...internal,\n getInternalContext: () => internal\n };\n}\nfunction createHighlighterCoreSync(options) {\n const internal = createShikiInternalSync(options);\n return {\n getLastGrammarState: (...args) => getLastGrammarState(internal, ...args),\n codeToTokensBase: (code, options2) => codeToTokensBase(internal, code, options2),\n codeToTokensWithThemes: (code, options2) => codeToTokensWithThemes(internal, code, options2),\n codeToTokens: (code, options2) => codeToTokens(internal, code, options2),\n codeToHast: (code, options2) => codeToHast(internal, code, options2),\n codeToHtml: (code, options2) => codeToHtml(internal, code, options2),\n getBundledLanguages: () => ({}),\n getBundledThemes: () => ({}),\n ...internal,\n getInternalContext: () => internal\n };\n}\nfunction makeSingletonHighlighterCore(createHighlighter) {\n let _shiki;\n async function getSingletonHighlighterCore2(options) {\n if (!_shiki) {\n _shiki = createHighlighter({\n ...options,\n themes: options.themes || [],\n langs: options.langs || []\n });\n return _shiki;\n } else {\n const s = await _shiki;\n await Promise.all([\n s.loadTheme(...options.themes || []),\n s.loadLanguage(...options.langs || [])\n ]);\n return s;\n }\n }\n return getSingletonHighlighterCore2;\n}\nconst getSingletonHighlighterCore = /* @__PURE__ */ makeSingletonHighlighterCore(createHighlighterCore);\n\nfunction createBundledHighlighter(options) {\n const bundledLanguages = options.langs;\n const bundledThemes = options.themes;\n const engine = options.engine;\n async function createHighlighter(options2) {\n function resolveLang(lang) {\n if (typeof lang === \"string\") {\n lang = options2.langAlias?.[lang] || lang;\n if (isSpecialLang(lang))\n return [];\n const bundle = bundledLanguages[lang];\n if (!bundle)\n throw new ShikiError$1(`Language \\`${lang}\\` is not included in this bundle. You may want to load it from external source.`);\n return bundle;\n }\n return lang;\n }\n function resolveTheme(theme) {\n if (isSpecialTheme(theme))\n return \"none\";\n if (typeof theme === \"string\") {\n const bundle = bundledThemes[theme];\n if (!bundle)\n throw new ShikiError$1(`Theme \\`${theme}\\` is not included in this bundle. You may want to load it from external source.`);\n return bundle;\n }\n return theme;\n }\n const _themes = (options2.themes ?? []).map((i) => resolveTheme(i));\n const langs = (options2.langs ?? []).map((i) => resolveLang(i));\n const core = await createHighlighterCore({\n engine: options2.engine ?? engine(),\n ...options2,\n themes: _themes,\n langs\n });\n return {\n ...core,\n loadLanguage(...langs2) {\n return core.loadLanguage(...langs2.map(resolveLang));\n },\n loadTheme(...themes) {\n return core.loadTheme(...themes.map(resolveTheme));\n },\n getBundledLanguages() {\n return bundledLanguages;\n },\n getBundledThemes() {\n return bundledThemes;\n }\n };\n }\n return createHighlighter;\n}\nfunction makeSingletonHighlighter(createHighlighter) {\n let _shiki;\n async function getSingletonHighlighter(options = {}) {\n if (!_shiki) {\n _shiki = createHighlighter({\n ...options,\n themes: [],\n langs: []\n });\n const s = await _shiki;\n await Promise.all([\n s.loadTheme(...options.themes || []),\n s.loadLanguage(...options.langs || [])\n ]);\n return s;\n } else {\n const s = await _shiki;\n await Promise.all([\n s.loadTheme(...options.themes || []),\n s.loadLanguage(...options.langs || [])\n ]);\n return s;\n }\n }\n return getSingletonHighlighter;\n}\nfunction createSingletonShorthands(createHighlighter, config) {\n const getSingletonHighlighter = makeSingletonHighlighter(createHighlighter);\n async function get(code, options) {\n const shiki = await getSingletonHighlighter({\n langs: [options.lang],\n themes: \"theme\" in options ? [options.theme] : Object.values(options.themes)\n });\n const langs = await config?.guessEmbeddedLanguages?.(code, options.lang, shiki);\n if (langs) {\n await shiki.loadLanguage(...langs);\n }\n return shiki;\n }\n return {\n getSingletonHighlighter(options) {\n return getSingletonHighlighter(options);\n },\n async codeToHtml(code, options) {\n const shiki = await get(code, options);\n return shiki.codeToHtml(code, options);\n },\n async codeToHast(code, options) {\n const shiki = await get(code, options);\n return shiki.codeToHast(code, options);\n },\n async codeToTokens(code, options) {\n const shiki = await get(code, options);\n return shiki.codeToTokens(code, options);\n },\n async codeToTokensBase(code, options) {\n const shiki = await get(code, options);\n return shiki.codeToTokensBase(code, options);\n },\n async codeToTokensWithThemes(code, options) {\n const shiki = await get(code, options);\n return shiki.codeToTokensWithThemes(code, options);\n },\n async getLastGrammarState(code, options) {\n const shiki = await getSingletonHighlighter({\n langs: [options.lang],\n themes: [options.theme]\n });\n return shiki.getLastGrammarState(code, options);\n }\n };\n}\nconst createdBundledHighlighter = createBundledHighlighter;\n\nfunction createCssVariablesTheme(options = {}) {\n const {\n name = \"css-variables\",\n variablePrefix = \"--shiki-\",\n fontStyle = true\n } = options;\n const variable = (name2) => {\n if (options.variableDefaults?.[name2])\n return `var(${variablePrefix}${name2}, ${options.variableDefaults[name2]})`;\n return `var(${variablePrefix}${name2})`;\n };\n const theme = {\n name,\n type: \"dark\",\n colors: {\n \"editor.foreground\": variable(\"foreground\"),\n \"editor.background\": variable(\"background\"),\n \"terminal.ansiBlack\": variable(\"ansi-black\"),\n \"terminal.ansiRed\": variable(\"ansi-red\"),\n \"terminal.ansiGreen\": variable(\"ansi-green\"),\n \"terminal.ansiYellow\": variable(\"ansi-yellow\"),\n \"terminal.ansiBlue\": variable(\"ansi-blue\"),\n \"terminal.ansiMagenta\": variable(\"ansi-magenta\"),\n \"terminal.ansiCyan\": variable(\"ansi-cyan\"),\n \"terminal.ansiWhite\": variable(\"ansi-white\"),\n \"terminal.ansiBrightBlack\": variable(\"ansi-bright-black\"),\n \"terminal.ansiBrightRed\": variable(\"ansi-bright-red\"),\n \"terminal.ansiBrightGreen\": variable(\"ansi-bright-green\"),\n \"terminal.ansiBrightYellow\": variable(\"ansi-bright-yellow\"),\n \"terminal.ansiBrightBlue\": variable(\"ansi-bright-blue\"),\n \"terminal.ansiBrightMagenta\": variable(\"ansi-bright-magenta\"),\n \"terminal.ansiBrightCyan\": variable(\"ansi-bright-cyan\"),\n \"terminal.ansiBrightWhite\": variable(\"ansi-bright-white\")\n },\n tokenColors: [\n {\n scope: [\n \"keyword.operator.accessor\",\n \"meta.group.braces.round.function.arguments\",\n \"meta.template.expression\",\n \"markup.fenced_code meta.embedded.block\"\n ],\n settings: {\n foreground: variable(\"foreground\")\n }\n },\n {\n scope: \"emphasis\",\n settings: {\n fontStyle: \"italic\"\n }\n },\n {\n scope: [\"strong\", \"markup.heading.markdown\", \"markup.bold.markdown\"],\n settings: {\n fontStyle: \"bold\"\n }\n },\n {\n scope: [\"markup.italic.markdown\"],\n settings: {\n fontStyle: \"italic\"\n }\n },\n {\n scope: \"meta.link.inline.markdown\",\n settings: {\n fontStyle: \"underline\",\n foreground: variable(\"token-link\")\n }\n },\n {\n scope: [\"string\", \"markup.fenced_code\", \"markup.inline\"],\n settings: {\n foreground: variable(\"token-string\")\n }\n },\n {\n scope: [\"comment\", \"string.quoted.docstring.multi\"],\n settings: {\n foreground: variable(\"token-comment\")\n }\n },\n {\n scope: [\n \"constant.numeric\",\n \"constant.language\",\n \"constant.other.placeholder\",\n \"constant.character.format.placeholder\",\n \"variable.language.this\",\n \"variable.other.object\",\n \"variable.other.class\",\n \"variable.other.constant\",\n \"meta.property-name\",\n \"meta.property-value\",\n \"support\"\n ],\n settings: {\n foreground: variable(\"token-constant\")\n }\n },\n {\n scope: [\n \"keyword\",\n \"storage.modifier\",\n \"storage.type\",\n \"storage.control.clojure\",\n \"entity.name.function.clojure\",\n \"entity.name.tag.yaml\",\n \"support.function.node\",\n \"support.type.property-name.json\",\n \"punctuation.separator.key-value\",\n \"punctuation.definition.template-expression\"\n ],\n settings: {\n foreground: variable(\"token-keyword\")\n }\n },\n {\n scope: \"variable.parameter.function\",\n settings: {\n foreground: variable(\"token-parameter\")\n }\n },\n {\n scope: [\n \"support.function\",\n \"entity.name.type\",\n \"entity.other.inherited-class\",\n \"meta.function-call\",\n \"meta.instance.constructor\",\n \"entity.other.attribute-name\",\n \"entity.name.function\",\n \"constant.keyword.clojure\"\n ],\n settings: {\n foreground: variable(\"token-function\")\n }\n },\n {\n scope: [\n \"entity.name.tag\",\n \"string.quoted\",\n \"string.regexp\",\n \"string.interpolated\",\n \"string.template\",\n \"string.unquoted.plain.out.yaml\",\n \"keyword.other.template\"\n ],\n settings: {\n foreground: variable(\"token-string-expression\")\n }\n },\n {\n scope: [\n \"punctuation.definition.arguments\",\n \"punctuation.definition.dict\",\n \"punctuation.separator\",\n \"meta.function-call.arguments\"\n ],\n settings: {\n foreground: variable(\"token-punctuation\")\n }\n },\n {\n // [Custom] Markdown links\n scope: [\n \"markup.underline.link\",\n \"punctuation.definition.metadata.markdown\"\n ],\n settings: {\n foreground: variable(\"token-link\")\n }\n },\n {\n // [Custom] Markdown list\n scope: [\"beginning.punctuation.definition.list.markdown\"],\n settings: {\n foreground: variable(\"token-string\")\n }\n },\n {\n // [Custom] Markdown punctuation definition brackets\n scope: [\n \"punctuation.definition.string.begin.markdown\",\n \"punctuation.definition.string.end.markdown\",\n \"string.other.link.title.markdown\",\n \"string.other.link.description.markdown\"\n ],\n settings: {\n foreground: variable(\"token-keyword\")\n }\n },\n {\n // [Custom] Diff\n scope: [\n \"markup.inserted\",\n \"meta.diff.header.to-file\",\n \"punctuation.definition.inserted\"\n ],\n settings: {\n foreground: variable(\"token-inserted\")\n }\n },\n {\n scope: [\n \"markup.deleted\",\n \"meta.diff.header.from-file\",\n \"punctuation.definition.deleted\"\n ],\n settings: {\n foreground: variable(\"token-deleted\")\n }\n },\n {\n scope: [\n \"markup.changed\",\n \"punctuation.definition.changed\"\n ],\n settings: {\n foreground: variable(\"token-changed\")\n }\n }\n ]\n };\n if (!fontStyle) {\n theme.tokenColors = theme.tokenColors?.map((tokenColor) => {\n if (tokenColor.settings?.fontStyle)\n delete tokenColor.settings.fontStyle;\n return tokenColor;\n });\n }\n return theme;\n}\n\nexport { addClassToHast, applyColorReplacements, codeToHast, codeToHtml, codeToTokens, codeToTokensBase, codeToTokensWithThemes, createBundledHighlighter, createCssVariablesTheme, createHighlighterCore, createHighlighterCoreSync, createPositionConverter, createShikiInternal, createShikiInternalSync, createSingletonShorthands, createdBundledHighlighter, enableDeprecationWarnings, flatTokenVariants, getSingletonHighlighterCore, getTokenStyleObject, guessEmbeddedLanguages, hastToHtml, isNoneTheme, isPlainLang, isSpecialLang, isSpecialTheme, makeSingletonHighlighter, makeSingletonHighlighterCore, normalizeGetter, normalizeTheme, resolveColorReplacements, splitLines, splitToken, splitTokens, stringifyTokenStyle, toArray, tokenizeAnsiWithTheme, tokenizeWithTheme, tokensToHast, transformerDecorations, warnDeprecated };\n","const bundledLanguagesInfo = [\n {\n \"id\": \"abap\",\n \"name\": \"ABAP\",\n \"import\": (() => import('@shikijs/langs/abap'))\n },\n {\n \"id\": \"actionscript-3\",\n \"name\": \"ActionScript\",\n \"import\": (() => import('@shikijs/langs/actionscript-3'))\n },\n {\n \"id\": \"ada\",\n \"name\": \"Ada\",\n \"import\": (() => import('@shikijs/langs/ada'))\n },\n {\n \"id\": \"angular-html\",\n \"name\": \"Angular HTML\",\n \"import\": (() => import('@shikijs/langs/angular-html'))\n },\n {\n \"id\": \"angular-ts\",\n \"name\": \"Angular TypeScript\",\n \"import\": (() => import('@shikijs/langs/angular-ts'))\n },\n {\n \"id\": \"apache\",\n \"name\": \"Apache Conf\",\n \"import\": (() => import('@shikijs/langs/apache'))\n },\n {\n \"id\": \"apex\",\n \"name\": \"Apex\",\n \"import\": (() => import('@shikijs/langs/apex'))\n },\n {\n \"id\": \"apl\",\n \"name\": \"APL\",\n \"import\": (() => import('@shikijs/langs/apl'))\n },\n {\n \"id\": \"applescript\",\n \"name\": \"AppleScript\",\n \"import\": (() => import('@shikijs/langs/applescript'))\n },\n {\n \"id\": \"ara\",\n \"name\": \"Ara\",\n \"import\": (() => import('@shikijs/langs/ara'))\n },\n {\n \"id\": \"asciidoc\",\n \"name\": \"AsciiDoc\",\n \"aliases\": [\n \"adoc\"\n ],\n \"import\": (() => import('@shikijs/langs/asciidoc'))\n },\n {\n \"id\": \"asm\",\n \"name\": \"Assembly\",\n \"import\": (() => import('@shikijs/langs/asm'))\n },\n {\n \"id\": \"astro\",\n \"name\": \"Astro\",\n \"import\": (() => import('@shikijs/langs/astro'))\n },\n {\n \"id\": \"awk\",\n \"name\": \"AWK\",\n \"import\": (() => import('@shikijs/langs/awk'))\n },\n {\n \"id\": \"ballerina\",\n \"name\": \"Ballerina\",\n \"import\": (() => import('@shikijs/langs/ballerina'))\n },\n {\n \"id\": \"bat\",\n \"name\": \"Batch File\",\n \"aliases\": [\n \"batch\"\n ],\n \"import\": (() => import('@shikijs/langs/bat'))\n },\n {\n \"id\": \"beancount\",\n \"name\": \"Beancount\",\n \"import\": (() => import('@shikijs/langs/beancount'))\n },\n {\n \"id\": \"berry\",\n \"name\": \"Berry\",\n \"aliases\": [\n \"be\"\n ],\n \"import\": (() => import('@shikijs/langs/berry'))\n },\n {\n \"id\": \"bibtex\",\n \"name\": \"BibTeX\",\n \"import\": (() => import('@shikijs/langs/bibtex'))\n },\n {\n \"id\": \"bicep\",\n \"name\": \"Bicep\",\n \"import\": (() => import('@shikijs/langs/bicep'))\n },\n {\n \"id\": \"blade\",\n \"name\": \"Blade\",\n \"import\": (() => import('@shikijs/langs/blade'))\n },\n {\n \"id\": \"bsl\",\n \"name\": \"1C (Enterprise)\",\n \"aliases\": [\n \"1c\"\n ],\n \"import\": (() => import('@shikijs/langs/bsl'))\n },\n {\n \"id\": \"c\",\n \"name\": \"C\",\n \"import\": (() => import('@shikijs/langs/c'))\n },\n {\n \"id\": \"c3\",\n \"name\": \"C3\",\n \"import\": (() => import('@shikijs/langs/c3'))\n },\n {\n \"id\": \"cadence\",\n \"name\": \"Cadence\",\n \"aliases\": [\n \"cdc\"\n ],\n \"import\": (() => import('@shikijs/langs/cadence'))\n },\n {\n \"id\": \"cairo\",\n \"name\": \"Cairo\",\n \"import\": (() => import('@shikijs/langs/cairo'))\n },\n {\n \"id\": \"clarity\",\n \"name\": \"Clarity\",\n \"import\": (() => import('@shikijs/langs/clarity'))\n },\n {\n \"id\": \"clojure\",\n \"name\": \"Clojure\",\n \"aliases\": [\n \"clj\"\n ],\n \"import\": (() => import('@shikijs/langs/clojure'))\n },\n {\n \"id\": \"cmake\",\n \"name\": \"CMake\",\n \"import\": (() => import('@shikijs/langs/cmake'))\n },\n {\n \"id\": \"cobol\",\n \"name\": \"COBOL\",\n \"import\": (() => import('@shikijs/langs/cobol'))\n },\n {\n \"id\": \"codeowners\",\n \"name\": \"CODEOWNERS\",\n \"import\": (() => import('@shikijs/langs/codeowners'))\n },\n {\n \"id\": \"codeql\",\n \"name\": \"CodeQL\",\n \"aliases\": [\n \"ql\"\n ],\n \"import\": (() => import('@shikijs/langs/codeql'))\n },\n {\n \"id\": \"coffee\",\n \"name\": \"CoffeeScript\",\n \"aliases\": [\n \"coffeescript\"\n ],\n \"import\": (() => import('@shikijs/langs/coffee'))\n },\n {\n \"id\": \"common-lisp\",\n \"name\": \"Common Lisp\",\n \"aliases\": [\n \"lisp\"\n ],\n \"import\": (() => import('@shikijs/langs/common-lisp'))\n },\n {\n \"id\": \"coq\",\n \"name\": \"Coq\",\n \"import\": (() => import('@shikijs/langs/coq'))\n },\n {\n \"id\": \"cpp\",\n \"name\": \"C++\",\n \"aliases\": [\n \"c++\"\n ],\n \"import\": (() => import('@shikijs/langs/cpp'))\n },\n {\n \"id\": \"crystal\",\n \"name\": \"Crystal\",\n \"import\": (() => import('@shikijs/langs/crystal'))\n },\n {\n \"id\": \"csharp\",\n \"name\": \"C#\",\n \"aliases\": [\n \"c#\",\n \"cs\"\n ],\n \"import\": (() => import('@shikijs/langs/csharp'))\n },\n {\n \"id\": \"css\",\n \"name\": \"CSS\",\n \"import\": (() => import('@shikijs/langs/css'))\n },\n {\n \"id\": \"csv\",\n \"name\": \"CSV\",\n \"import\": (() => import('@shikijs/langs/csv'))\n },\n {\n \"id\": \"cue\",\n \"name\": \"CUE\",\n \"import\": (() => import('@shikijs/langs/cue'))\n },\n {\n \"id\": \"cypher\",\n \"name\": \"Cypher\",\n \"aliases\": [\n \"cql\"\n ],\n \"import\": (() => import('@shikijs/langs/cypher'))\n },\n {\n \"id\": \"d\",\n \"name\": \"D\",\n \"import\": (() => import('@shikijs/langs/d'))\n },\n {\n \"id\": \"dart\",\n \"name\": \"Dart\",\n \"import\": (() => import('@shikijs/langs/dart'))\n },\n {\n \"id\": \"dax\",\n \"name\": \"DAX\",\n \"import\": (() => import('@shikijs/langs/dax'))\n },\n {\n \"id\": \"desktop\",\n \"name\": \"Desktop\",\n \"import\": (() => import('@shikijs/langs/desktop'))\n },\n {\n \"id\": \"diff\",\n \"name\": \"Diff\",\n \"import\": (() => import('@shikijs/langs/diff'))\n },\n {\n \"id\": \"docker\",\n \"name\": \"Dockerfile\",\n \"aliases\": [\n \"dockerfile\"\n ],\n \"import\": (() => import('@shikijs/langs/docker'))\n },\n {\n \"id\": \"dotenv\",\n \"name\": \"dotEnv\",\n \"import\": (() => import('@shikijs/langs/dotenv'))\n },\n {\n \"id\": \"dream-maker\",\n \"name\": \"Dream Maker\",\n \"import\": (() => import('@shikijs/langs/dream-maker'))\n },\n {\n \"id\": \"edge\",\n \"name\": \"Edge\",\n \"import\": (() => import('@shikijs/langs/edge'))\n },\n {\n \"id\": \"elixir\",\n \"name\": \"Elixir\",\n \"import\": (() => import('@shikijs/langs/elixir'))\n },\n {\n \"id\": \"elm\",\n \"name\": \"Elm\",\n \"import\": (() => import('@shikijs/langs/elm'))\n },\n {\n \"id\": \"emacs-lisp\",\n \"name\": \"Emacs Lisp\",\n \"aliases\": [\n \"elisp\"\n ],\n \"import\": (() => import('@shikijs/langs/emacs-lisp'))\n },\n {\n \"id\": \"erb\",\n \"name\": \"ERB\",\n \"import\": (() => import('@shikijs/langs/erb'))\n },\n {\n \"id\": \"erlang\",\n \"name\": \"Erlang\",\n \"aliases\": [\n \"erl\"\n ],\n \"import\": (() => import('@shikijs/langs/erlang'))\n },\n {\n \"id\": \"fennel\",\n \"name\": \"Fennel\",\n \"import\": (() => import('@shikijs/langs/fennel'))\n },\n {\n \"id\": \"fish\",\n \"name\": \"Fish\",\n \"import\": (() => import('@shikijs/langs/fish'))\n },\n {\n \"id\": \"fluent\",\n \"name\": \"Fluent\",\n \"aliases\": [\n \"ftl\"\n ],\n \"import\": (() => import('@shikijs/langs/fluent'))\n },\n {\n \"id\": \"fortran-fixed-form\",\n \"name\": \"Fortran (Fixed Form)\",\n \"aliases\": [\n \"f\",\n \"for\",\n \"f77\"\n ],\n \"import\": (() => import('@shikijs/langs/fortran-fixed-form'))\n },\n {\n \"id\": \"fortran-free-form\",\n \"name\": \"Fortran (Free Form)\",\n \"aliases\": [\n \"f90\",\n \"f95\",\n \"f03\",\n \"f08\",\n \"f18\"\n ],\n \"import\": (() => import('@shikijs/langs/fortran-free-form'))\n },\n {\n \"id\": \"fsharp\",\n \"name\": \"F#\",\n \"aliases\": [\n \"f#\",\n \"fs\"\n ],\n \"import\": (() => import('@shikijs/langs/fsharp'))\n },\n {\n \"id\": \"gdresource\",\n \"name\": \"GDResource\",\n \"aliases\": [\n \"tscn\",\n \"tres\"\n ],\n \"import\": (() => import('@shikijs/langs/gdresource'))\n },\n {\n \"id\": \"gdscript\",\n \"name\": \"GDScript\",\n \"aliases\": [\n \"gd\"\n ],\n \"import\": (() => import('@shikijs/langs/gdscript'))\n },\n {\n \"id\": \"gdshader\",\n \"name\": \"GDShader\",\n \"import\": (() => import('@shikijs/langs/gdshader'))\n },\n {\n \"id\": \"genie\",\n \"name\": \"Genie\",\n \"import\": (() => import('@shikijs/langs/genie'))\n },\n {\n \"id\": \"gherkin\",\n \"name\": \"Gherkin\",\n \"import\": (() => import('@shikijs/langs/gherkin'))\n },\n {\n \"id\": \"git-commit\",\n \"name\": \"Git Commit Message\",\n \"import\": (() => import('@shikijs/langs/git-commit'))\n },\n {\n \"id\": \"git-rebase\",\n \"name\": \"Git Rebase Message\",\n \"import\": (() => import('@shikijs/langs/git-rebase'))\n },\n {\n \"id\": \"gleam\",\n \"name\": \"Gleam\",\n \"import\": (() => import('@shikijs/langs/gleam'))\n },\n {\n \"id\": \"glimmer-js\",\n \"name\": \"Glimmer JS\",\n \"aliases\": [\n \"gjs\"\n ],\n \"import\": (() => import('@shikijs/langs/glimmer-js'))\n },\n {\n \"id\": \"glimmer-ts\",\n \"name\": \"Glimmer TS\",\n \"aliases\": [\n \"gts\"\n ],\n \"import\": (() => import('@shikijs/langs/glimmer-ts'))\n },\n {\n \"id\": \"glsl\",\n \"name\": \"GLSL\",\n \"import\": (() => import('@shikijs/langs/glsl'))\n },\n {\n \"id\": \"gn\",\n \"name\": \"GN\",\n \"import\": (() => import('@shikijs/langs/gn'))\n },\n {\n \"id\": \"gnuplot\",\n \"name\": \"Gnuplot\",\n \"import\": (() => import('@shikijs/langs/gnuplot'))\n },\n {\n \"id\": \"go\",\n \"name\": \"Go\",\n \"import\": (() => import('@shikijs/langs/go'))\n },\n {\n \"id\": \"graphql\",\n \"name\": \"GraphQL\",\n \"aliases\": [\n \"gql\"\n ],\n \"import\": (() => import('@shikijs/langs/graphql'))\n },\n {\n \"id\": \"groovy\",\n \"name\": \"Groovy\",\n \"import\": (() => import('@shikijs/langs/groovy'))\n },\n {\n \"id\": \"hack\",\n \"name\": \"Hack\",\n \"import\": (() => import('@shikijs/langs/hack'))\n },\n {\n \"id\": \"haml\",\n \"name\": \"Ruby Haml\",\n \"import\": (() => import('@shikijs/langs/haml'))\n },\n {\n \"id\": \"handlebars\",\n \"name\": \"Handlebars\",\n \"aliases\": [\n \"hbs\"\n ],\n \"import\": (() => import('@shikijs/langs/handlebars'))\n },\n {\n \"id\": \"haskell\",\n \"name\": \"Haskell\",\n \"aliases\": [\n \"hs\"\n ],\n \"import\": (() => import('@shikijs/langs/haskell'))\n },\n {\n \"id\": \"haxe\",\n \"name\": \"Haxe\",\n \"import\": (() => import('@shikijs/langs/haxe'))\n },\n {\n \"id\": \"hcl\",\n \"name\": \"HashiCorp HCL\",\n \"import\": (() => import('@shikijs/langs/hcl'))\n },\n {\n \"id\": \"hjson\",\n \"name\": \"Hjson\",\n \"import\": (() => import('@shikijs/langs/hjson'))\n },\n {\n \"id\": \"hlsl\",\n \"name\": \"HLSL\",\n \"import\": (() => import('@shikijs/langs/hlsl'))\n },\n {\n \"id\": \"html\",\n \"name\": \"HTML\",\n \"import\": (() => import('@shikijs/langs/html'))\n },\n {\n \"id\": \"html-derivative\",\n \"name\": \"HTML (Derivative)\",\n \"import\": (() => import('@shikijs/langs/html-derivative'))\n },\n {\n \"id\": \"http\",\n \"name\": \"HTTP\",\n \"import\": (() => import('@shikijs/langs/http'))\n },\n {\n \"id\": \"hurl\",\n \"name\": \"Hurl\",\n \"import\": (() => import('@shikijs/langs/hurl'))\n },\n {\n \"id\": \"hxml\",\n \"name\": \"HXML\",\n \"import\": (() => import('@shikijs/langs/hxml'))\n },\n {\n \"id\": \"hy\",\n \"name\": \"Hy\",\n \"import\": (() => import('@shikijs/langs/hy'))\n },\n {\n \"id\": \"imba\",\n \"name\": \"Imba\",\n \"import\": (() => import('@shikijs/langs/imba'))\n },\n {\n \"id\": \"ini\",\n \"name\": \"INI\",\n \"aliases\": [\n \"properties\"\n ],\n \"import\": (() => import('@shikijs/langs/ini'))\n },\n {\n \"id\": \"java\",\n \"name\": \"Java\",\n \"import\": (() => import('@shikijs/langs/java'))\n },\n {\n \"id\": \"javascript\",\n \"name\": \"JavaScript\",\n \"aliases\": [\n \"js\",\n \"cjs\",\n \"mjs\"\n ],\n \"import\": (() => import('@shikijs/langs/javascript'))\n },\n {\n \"id\": \"jinja\",\n \"name\": \"Jinja\",\n \"import\": (() => import('@shikijs/langs/jinja'))\n },\n {\n \"id\": \"jison\",\n \"name\": \"Jison\",\n \"import\": (() => import('@shikijs/langs/jison'))\n },\n {\n \"id\": \"json\",\n \"name\": \"JSON\",\n \"import\": (() => import('@shikijs/langs/json'))\n },\n {\n \"id\": \"json5\",\n \"name\": \"JSON5\",\n \"import\": (() => import('@shikijs/langs/json5'))\n },\n {\n \"id\": \"jsonc\",\n \"name\": \"JSON with Comments\",\n \"import\": (() => import('@shikijs/langs/jsonc'))\n },\n {\n \"id\": \"jsonl\",\n \"name\": \"JSON Lines\",\n \"import\": (() => import('@shikijs/langs/jsonl'))\n },\n {\n \"id\": \"jsonnet\",\n \"name\": \"Jsonnet\",\n \"import\": (() => import('@shikijs/langs/jsonnet'))\n },\n {\n \"id\": \"jssm\",\n \"name\": \"JSSM\",\n \"aliases\": [\n \"fsl\"\n ],\n \"import\": (() => import('@shikijs/langs/jssm'))\n },\n {\n \"id\": \"jsx\",\n \"name\": \"JSX\",\n \"import\": (() => import('@shikijs/langs/jsx'))\n },\n {\n \"id\": \"julia\",\n \"name\": \"Julia\",\n \"aliases\": [\n \"jl\"\n ],\n \"import\": (() => import('@shikijs/langs/julia'))\n },\n {\n \"id\": \"kdl\",\n \"name\": \"KDL\",\n \"import\": (() => import('@shikijs/langs/kdl'))\n },\n {\n \"id\": \"kotlin\",\n \"name\": \"Kotlin\",\n \"aliases\": [\n \"kt\",\n \"kts\"\n ],\n \"import\": (() => import('@shikijs/langs/kotlin'))\n },\n {\n \"id\": \"kusto\",\n \"name\": \"Kusto\",\n \"aliases\": [\n \"kql\"\n ],\n \"import\": (() => import('@shikijs/langs/kusto'))\n },\n {\n \"id\": \"latex\",\n \"name\": \"LaTeX\",\n \"import\": (() => import('@shikijs/langs/latex'))\n },\n {\n \"id\": \"lean\",\n \"name\": \"Lean 4\",\n \"aliases\": [\n \"lean4\"\n ],\n \"import\": (() => import('@shikijs/langs/lean'))\n },\n {\n \"id\": \"less\",\n \"name\": \"Less\",\n \"import\": (() => import('@shikijs/langs/less'))\n },\n {\n \"id\": \"liquid\",\n \"name\": \"Liquid\",\n \"import\": (() => import('@shikijs/langs/liquid'))\n },\n {\n \"id\": \"llvm\",\n \"name\": \"LLVM IR\",\n \"import\": (() => import('@shikijs/langs/llvm'))\n },\n {\n \"id\": \"log\",\n \"name\": \"Log file\",\n \"import\": (() => import('@shikijs/langs/log'))\n },\n {\n \"id\": \"logo\",\n \"name\": \"Logo\",\n \"import\": (() => import('@shikijs/langs/logo'))\n },\n {\n \"id\": \"lua\",\n \"name\": \"Lua\",\n \"import\": (() => import('@shikijs/langs/lua'))\n },\n {\n \"id\": \"luau\",\n \"name\": \"Luau\",\n \"import\": (() => import('@shikijs/langs/luau'))\n },\n {\n \"id\": \"make\",\n \"name\": \"Makefile\",\n \"aliases\": [\n \"makefile\"\n ],\n \"import\": (() => import('@shikijs/langs/make'))\n },\n {\n \"id\": \"markdown\",\n \"name\": \"Markdown\",\n \"aliases\": [\n \"md\"\n ],\n \"import\": (() => import('@shikijs/langs/markdown'))\n },\n {\n \"id\": \"marko\",\n \"name\": \"Marko\",\n \"import\": (() => import('@shikijs/langs/marko'))\n },\n {\n \"id\": \"matlab\",\n \"name\": \"MATLAB\",\n \"import\": (() => import('@shikijs/langs/matlab'))\n },\n {\n \"id\": \"mdc\",\n \"name\": \"MDC\",\n \"import\": (() => import('@shikijs/langs/mdc'))\n },\n {\n \"id\": \"mdx\",\n \"name\": \"MDX\",\n \"import\": (() => import('@shikijs/langs/mdx'))\n },\n {\n \"id\": \"mermaid\",\n \"name\": \"Mermaid\",\n \"aliases\": [\n \"mmd\"\n ],\n \"import\": (() => import('@shikijs/langs/mermaid'))\n },\n {\n \"id\": \"mipsasm\",\n \"name\": \"MIPS Assembly\",\n \"aliases\": [\n \"mips\"\n ],\n \"import\": (() => import('@shikijs/langs/mipsasm'))\n },\n {\n \"id\": \"mojo\",\n \"name\": \"Mojo\",\n \"import\": (() => import('@shikijs/langs/mojo'))\n },\n {\n \"id\": \"moonbit\",\n \"name\": \"MoonBit\",\n \"aliases\": [\n \"mbt\",\n \"mbti\"\n ],\n \"import\": (() => import('@shikijs/langs/moonbit'))\n },\n {\n \"id\": \"move\",\n \"name\": \"Move\",\n \"import\": (() => import('@shikijs/langs/move'))\n },\n {\n \"id\": \"narrat\",\n \"name\": \"Narrat Language\",\n \"aliases\": [\n \"nar\"\n ],\n \"import\": (() => import('@shikijs/langs/narrat'))\n },\n {\n \"id\": \"nextflow\",\n \"name\": \"Nextflow\",\n \"aliases\": [\n \"nf\"\n ],\n \"import\": (() => import('@shikijs/langs/nextflow'))\n },\n {\n \"id\": \"nginx\",\n \"name\": \"Nginx\",\n \"import\": (() => import('@shikijs/langs/nginx'))\n },\n {\n \"id\": \"nim\",\n \"name\": \"Nim\",\n \"import\": (() => import('@shikijs/langs/nim'))\n },\n {\n \"id\": \"nix\",\n \"name\": \"Nix\",\n \"import\": (() => import('@shikijs/langs/nix'))\n },\n {\n \"id\": \"nushell\",\n \"name\": \"nushell\",\n \"aliases\": [\n \"nu\"\n ],\n \"import\": (() => import('@shikijs/langs/nushell'))\n },\n {\n \"id\": \"objective-c\",\n \"name\": \"Objective-C\",\n \"aliases\": [\n \"objc\"\n ],\n \"import\": (() => import('@shikijs/langs/objective-c'))\n },\n {\n \"id\": \"objective-cpp\",\n \"name\": \"Objective-C++\",\n \"import\": (() => import('@shikijs/langs/objective-cpp'))\n },\n {\n \"id\": \"ocaml\",\n \"name\": \"OCaml\",\n \"import\": (() => import('@shikijs/langs/ocaml'))\n },\n {\n \"id\": \"odin\",\n \"name\": \"Odin\",\n \"import\": (() => import('@shikijs/langs/odin'))\n },\n {\n \"id\": \"openscad\",\n \"name\": \"OpenSCAD\",\n \"aliases\": [\n \"scad\"\n ],\n \"import\": (() => import('@shikijs/langs/openscad'))\n },\n {\n \"id\": \"pascal\",\n \"name\": \"Pascal\",\n \"import\": (() => import('@shikijs/langs/pascal'))\n },\n {\n \"id\": \"perl\",\n \"name\": \"Perl\",\n \"import\": (() => import('@shikijs/langs/perl'))\n },\n {\n \"id\": \"php\",\n \"name\": \"PHP\",\n \"import\": (() => import('@shikijs/langs/php'))\n },\n {\n \"id\": \"pkl\",\n \"name\": \"Pkl\",\n \"import\": (() => import('@shikijs/langs/pkl'))\n },\n {\n \"id\": \"plsql\",\n \"name\": \"PL/SQL\",\n \"import\": (() => import('@shikijs/langs/plsql'))\n },\n {\n \"id\": \"po\",\n \"name\": \"Gettext PO\",\n \"aliases\": [\n \"pot\",\n \"potx\"\n ],\n \"import\": (() => import('@shikijs/langs/po'))\n },\n {\n \"id\": \"polar\",\n \"name\": \"Polar\",\n \"import\": (() => import('@shikijs/langs/polar'))\n },\n {\n \"id\": \"postcss\",\n \"name\": \"PostCSS\",\n \"import\": (() => import('@shikijs/langs/postcss'))\n },\n {\n \"id\": \"powerquery\",\n \"name\": \"PowerQuery\",\n \"import\": (() => import('@shikijs/langs/powerquery'))\n },\n {\n \"id\": \"powershell\",\n \"name\": \"PowerShell\",\n \"aliases\": [\n \"ps\",\n \"ps1\"\n ],\n \"import\": (() => import('@shikijs/langs/powershell'))\n },\n {\n \"id\": \"prisma\",\n \"name\": \"Prisma\",\n \"import\": (() => import('@shikijs/langs/prisma'))\n },\n {\n \"id\": \"prolog\",\n \"name\": \"Prolog\",\n \"import\": (() => import('@shikijs/langs/prolog'))\n },\n {\n \"id\": \"proto\",\n \"name\": \"Protocol Buffer 3\",\n \"aliases\": [\n \"protobuf\"\n ],\n \"import\": (() => import('@shikijs/langs/proto'))\n },\n {\n \"id\": \"pug\",\n \"name\": \"Pug\",\n \"aliases\": [\n \"jade\"\n ],\n \"import\": (() => import('@shikijs/langs/pug'))\n },\n {\n \"id\": \"puppet\",\n \"name\": \"Puppet\",\n \"import\": (() => import('@shikijs/langs/puppet'))\n },\n {\n \"id\": \"purescript\",\n \"name\": \"PureScript\",\n \"import\": (() => import('@shikijs/langs/purescript'))\n },\n {\n \"id\": \"python\",\n \"name\": \"Python\",\n \"aliases\": [\n \"py\"\n ],\n \"import\": (() => import('@shikijs/langs/python'))\n },\n {\n \"id\": \"qml\",\n \"name\": \"QML\",\n \"import\": (() => import('@shikijs/langs/qml'))\n },\n {\n \"id\": \"qmldir\",\n \"name\": \"QML Directory\",\n \"import\": (() => import('@shikijs/langs/qmldir'))\n },\n {\n \"id\": \"qss\",\n \"name\": \"Qt Style Sheets\",\n \"import\": (() => import('@shikijs/langs/qss'))\n },\n {\n \"id\": \"r\",\n \"name\": \"R\",\n \"import\": (() => import('@shikijs/langs/r'))\n },\n {\n \"id\": \"racket\",\n \"name\": \"Racket\",\n \"import\": (() => import('@shikijs/langs/racket'))\n },\n {\n \"id\": \"raku\",\n \"name\": \"Raku\",\n \"aliases\": [\n \"perl6\"\n ],\n \"import\": (() => import('@shikijs/langs/raku'))\n },\n {\n \"id\": \"razor\",\n \"name\": \"ASP.NET Razor\",\n \"import\": (() => import('@shikijs/langs/razor'))\n },\n {\n \"id\": \"reg\",\n \"name\": \"Windows Registry Script\",\n \"import\": (() => import('@shikijs/langs/reg'))\n },\n {\n \"id\": \"regexp\",\n \"name\": \"RegExp\",\n \"aliases\": [\n \"regex\"\n ],\n \"import\": (() => import('@shikijs/langs/regexp'))\n },\n {\n \"id\": \"rel\",\n \"name\": \"Rel\",\n \"import\": (() => import('@shikijs/langs/rel'))\n },\n {\n \"id\": \"riscv\",\n \"name\": \"RISC-V\",\n \"import\": (() => import('@shikijs/langs/riscv'))\n },\n {\n \"id\": \"ron\",\n \"name\": \"RON\",\n \"import\": (() => import('@shikijs/langs/ron'))\n },\n {\n \"id\": \"rosmsg\",\n \"name\": \"ROS Interface\",\n \"import\": (() => import('@shikijs/langs/rosmsg'))\n },\n {\n \"id\": \"rst\",\n \"name\": \"reStructuredText\",\n \"import\": (() => import('@shikijs/langs/rst'))\n },\n {\n \"id\": \"ruby\",\n \"name\": \"Ruby\",\n \"aliases\": [\n \"rb\"\n ],\n \"import\": (() => import('@shikijs/langs/ruby'))\n },\n {\n \"id\": \"rust\",\n \"name\": \"Rust\",\n \"aliases\": [\n \"rs\"\n ],\n \"import\": (() => import('@shikijs/langs/rust'))\n },\n {\n \"id\": \"sas\",\n \"name\": \"SAS\",\n \"import\": (() => import('@shikijs/langs/sas'))\n },\n {\n \"id\": \"sass\",\n \"name\": \"Sass\",\n \"import\": (() => import('@shikijs/langs/sass'))\n },\n {\n \"id\": \"scala\",\n \"name\": \"Scala\",\n \"import\": (() => import('@shikijs/langs/scala'))\n },\n {\n \"id\": \"scheme\",\n \"name\": \"Scheme\",\n \"import\": (() => import('@shikijs/langs/scheme'))\n },\n {\n \"id\": \"scss\",\n \"name\": \"SCSS\",\n \"import\": (() => import('@shikijs/langs/scss'))\n },\n {\n \"id\": \"sdbl\",\n \"name\": \"1C (Query)\",\n \"aliases\": [\n \"1c-query\"\n ],\n \"import\": (() => import('@shikijs/langs/sdbl'))\n },\n {\n \"id\": \"shaderlab\",\n \"name\": \"ShaderLab\",\n \"aliases\": [\n \"shader\"\n ],\n \"import\": (() => import('@shikijs/langs/shaderlab'))\n },\n {\n \"id\": \"shellscript\",\n \"name\": \"Shell\",\n \"aliases\": [\n \"bash\",\n \"sh\",\n \"shell\",\n \"zsh\"\n ],\n \"import\": (() => import('@shikijs/langs/shellscript'))\n },\n {\n \"id\": \"shellsession\",\n \"name\": \"Shell Session\",\n \"aliases\": [\n \"console\"\n ],\n \"import\": (() => import('@shikijs/langs/shellsession'))\n },\n {\n \"id\": \"smalltalk\",\n \"name\": \"Smalltalk\",\n \"import\": (() => import('@shikijs/langs/smalltalk'))\n },\n {\n \"id\": \"solidity\",\n \"name\": \"Solidity\",\n \"import\": (() => import('@shikijs/langs/solidity'))\n },\n {\n \"id\": \"soy\",\n \"name\": \"Closure Templates\",\n \"aliases\": [\n \"closure-templates\"\n ],\n \"import\": (() => import('@shikijs/langs/soy'))\n },\n {\n \"id\": \"sparql\",\n \"name\": \"SPARQL\",\n \"import\": (() => import('@shikijs/langs/sparql'))\n },\n {\n \"id\": \"splunk\",\n \"name\": \"Splunk Query Language\",\n \"aliases\": [\n \"spl\"\n ],\n \"import\": (() => import('@shikijs/langs/splunk'))\n },\n {\n \"id\": \"sql\",\n \"name\": \"SQL\",\n \"import\": (() => import('@shikijs/langs/sql'))\n },\n {\n \"id\": \"ssh-config\",\n \"name\": \"SSH Config\",\n \"import\": (() => import('@shikijs/langs/ssh-config'))\n },\n {\n \"id\": \"stata\",\n \"name\": \"Stata\",\n \"import\": (() => import('@shikijs/langs/stata'))\n },\n {\n \"id\": \"stylus\",\n \"name\": \"Stylus\",\n \"aliases\": [\n \"styl\"\n ],\n \"import\": (() => import('@shikijs/langs/stylus'))\n },\n {\n \"id\": \"surrealql\",\n \"name\": \"SurrealQL\",\n \"aliases\": [\n \"surql\"\n ],\n \"import\": (() => import('@shikijs/langs/surrealql'))\n },\n {\n \"id\": \"svelte\",\n \"name\": \"Svelte\",\n \"import\": (() => import('@shikijs/langs/svelte'))\n },\n {\n \"id\": \"swift\",\n \"name\": \"Swift\",\n \"import\": (() => import('@shikijs/langs/swift'))\n },\n {\n \"id\": \"system-verilog\",\n \"name\": \"SystemVerilog\",\n \"import\": (() => import('@shikijs/langs/system-verilog'))\n },\n {\n \"id\": \"systemd\",\n \"name\": \"Systemd Units\",\n \"import\": (() => import('@shikijs/langs/systemd'))\n },\n {\n \"id\": \"talonscript\",\n \"name\": \"TalonScript\",\n \"aliases\": [\n \"talon\"\n ],\n \"import\": (() => import('@shikijs/langs/talonscript'))\n },\n {\n \"id\": \"tasl\",\n \"name\": \"Tasl\",\n \"import\": (() => import('@shikijs/langs/tasl'))\n },\n {\n \"id\": \"tcl\",\n \"name\": \"Tcl\",\n \"import\": (() => import('@shikijs/langs/tcl'))\n },\n {\n \"id\": \"templ\",\n \"name\": \"Templ\",\n \"import\": (() => import('@shikijs/langs/templ'))\n },\n {\n \"id\": \"terraform\",\n \"name\": \"Terraform\",\n \"aliases\": [\n \"tf\",\n \"tfvars\"\n ],\n \"import\": (() => import('@shikijs/langs/terraform'))\n },\n {\n \"id\": \"tex\",\n \"name\": \"TeX\",\n \"import\": (() => import('@shikijs/langs/tex'))\n },\n {\n \"id\": \"toml\",\n \"name\": \"TOML\",\n \"import\": (() => import('@shikijs/langs/toml'))\n },\n {\n \"id\": \"ts-tags\",\n \"name\": \"TypeScript with Tags\",\n \"aliases\": [\n \"lit\"\n ],\n \"import\": (() => import('@shikijs/langs/ts-tags'))\n },\n {\n \"id\": \"tsv\",\n \"name\": \"TSV\",\n \"import\": (() => import('@shikijs/langs/tsv'))\n },\n {\n \"id\": \"tsx\",\n \"name\": \"TSX\",\n \"import\": (() => import('@shikijs/langs/tsx'))\n },\n {\n \"id\": \"turtle\",\n \"name\": \"Turtle\",\n \"import\": (() => import('@shikijs/langs/turtle'))\n },\n {\n \"id\": \"twig\",\n \"name\": \"Twig\",\n \"import\": (() => import('@shikijs/langs/twig'))\n },\n {\n \"id\": \"typescript\",\n \"name\": \"TypeScript\",\n \"aliases\": [\n \"ts\",\n \"cts\",\n \"mts\"\n ],\n \"import\": (() => import('@shikijs/langs/typescript'))\n },\n {\n \"id\": \"typespec\",\n \"name\": \"TypeSpec\",\n \"aliases\": [\n \"tsp\"\n ],\n \"import\": (() => import('@shikijs/langs/typespec'))\n },\n {\n \"id\": \"typst\",\n \"name\": \"Typst\",\n \"aliases\": [\n \"typ\"\n ],\n \"import\": (() => import('@shikijs/langs/typst'))\n },\n {\n \"id\": \"v\",\n \"name\": \"V\",\n \"import\": (() => import('@shikijs/langs/v'))\n },\n {\n \"id\": \"vala\",\n \"name\": \"Vala\",\n \"import\": (() => import('@shikijs/langs/vala'))\n },\n {\n \"id\": \"vb\",\n \"name\": \"Visual Basic\",\n \"aliases\": [\n \"cmd\"\n ],\n \"import\": (() => import('@shikijs/langs/vb'))\n },\n {\n \"id\": \"verilog\",\n \"name\": \"Verilog\",\n \"import\": (() => import('@shikijs/langs/verilog'))\n },\n {\n \"id\": \"vhdl\",\n \"name\": \"VHDL\",\n \"import\": (() => import('@shikijs/langs/vhdl'))\n },\n {\n \"id\": \"viml\",\n \"name\": \"Vim Script\",\n \"aliases\": [\n \"vim\",\n \"vimscript\"\n ],\n \"import\": (() => import('@shikijs/langs/viml'))\n },\n {\n \"id\": \"vue\",\n \"name\": \"Vue\",\n \"import\": (() => import('@shikijs/langs/vue'))\n },\n {\n \"id\": \"vue-html\",\n \"name\": \"Vue HTML\",\n \"import\": (() => import('@shikijs/langs/vue-html'))\n },\n {\n \"id\": \"vue-vine\",\n \"name\": \"Vue Vine\",\n \"import\": (() => import('@shikijs/langs/vue-vine'))\n },\n {\n \"id\": \"vyper\",\n \"name\": \"Vyper\",\n \"aliases\": [\n \"vy\"\n ],\n \"import\": (() => import('@shikijs/langs/vyper'))\n },\n {\n \"id\": \"wasm\",\n \"name\": \"WebAssembly\",\n \"import\": (() => import('@shikijs/langs/wasm'))\n },\n {\n \"id\": \"wenyan\",\n \"name\": \"Wenyan\",\n \"aliases\": [\n \"\\u6587\\u8A00\"\n ],\n \"import\": (() => import('@shikijs/langs/wenyan'))\n },\n {\n \"id\": \"wgsl\",\n \"name\": \"WGSL\",\n \"import\": (() => import('@shikijs/langs/wgsl'))\n },\n {\n \"id\": \"wikitext\",\n \"name\": \"Wikitext\",\n \"aliases\": [\n \"mediawiki\",\n \"wiki\"\n ],\n \"import\": (() => import('@shikijs/langs/wikitext'))\n },\n {\n \"id\": \"wit\",\n \"name\": \"WebAssembly Interface Types\",\n \"import\": (() => import('@shikijs/langs/wit'))\n },\n {\n \"id\": \"wolfram\",\n \"name\": \"Wolfram\",\n \"aliases\": [\n \"wl\"\n ],\n \"import\": (() => import('@shikijs/langs/wolfram'))\n },\n {\n \"id\": \"xml\",\n \"name\": \"XML\",\n \"import\": (() => import('@shikijs/langs/xml'))\n },\n {\n \"id\": \"xsl\",\n \"name\": \"XSL\",\n \"import\": (() => import('@shikijs/langs/xsl'))\n },\n {\n \"id\": \"yaml\",\n \"name\": \"YAML\",\n \"aliases\": [\n \"yml\"\n ],\n \"import\": (() => import('@shikijs/langs/yaml'))\n },\n {\n \"id\": \"zenscript\",\n \"name\": \"ZenScript\",\n \"import\": (() => import('@shikijs/langs/zenscript'))\n },\n {\n \"id\": \"zig\",\n \"name\": \"Zig\",\n \"import\": (() => import('@shikijs/langs/zig'))\n }\n];\nconst bundledLanguagesBase = Object.fromEntries(bundledLanguagesInfo.map((i) => [i.id, i.import]));\nconst bundledLanguagesAlias = Object.fromEntries(bundledLanguagesInfo.flatMap((i) => i.aliases?.map((a) => [a, i.import]) || []));\nconst bundledLanguages = {\n ...bundledLanguagesBase,\n ...bundledLanguagesAlias\n};\n\nexport { bundledLanguages, bundledLanguagesAlias, bundledLanguagesBase, bundledLanguagesInfo };\n","const bundledThemesInfo = [\n {\n \"id\": \"andromeeda\",\n \"displayName\": \"Andromeeda\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/andromeeda'))\n },\n {\n \"id\": \"aurora-x\",\n \"displayName\": \"Aurora X\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/aurora-x'))\n },\n {\n \"id\": \"ayu-dark\",\n \"displayName\": \"Ayu Dark\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/ayu-dark'))\n },\n {\n \"id\": \"ayu-light\",\n \"displayName\": \"Ayu Light\",\n \"type\": \"light\",\n \"import\": (() => import('@shikijs/themes/ayu-light'))\n },\n {\n \"id\": \"ayu-mirage\",\n \"displayName\": \"Ayu Mirage\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/ayu-mirage'))\n },\n {\n \"id\": \"catppuccin-frappe\",\n \"displayName\": \"Catppuccin Frapp\\xE9\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/catppuccin-frappe'))\n },\n {\n \"id\": \"catppuccin-latte\",\n \"displayName\": \"Catppuccin Latte\",\n \"type\": \"light\",\n \"import\": (() => import('@shikijs/themes/catppuccin-latte'))\n },\n {\n \"id\": \"catppuccin-macchiato\",\n \"displayName\": \"Catppuccin Macchiato\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/catppuccin-macchiato'))\n },\n {\n \"id\": \"catppuccin-mocha\",\n \"displayName\": \"Catppuccin Mocha\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/catppuccin-mocha'))\n },\n {\n \"id\": \"dark-plus\",\n \"displayName\": \"Dark Plus\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/dark-plus'))\n },\n {\n \"id\": \"dracula\",\n \"displayName\": \"Dracula Theme\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/dracula'))\n },\n {\n \"id\": \"dracula-soft\",\n \"displayName\": \"Dracula Theme Soft\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/dracula-soft'))\n },\n {\n \"id\": \"everforest-dark\",\n \"displayName\": \"Everforest Dark\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/everforest-dark'))\n },\n {\n \"id\": \"everforest-light\",\n \"displayName\": \"Everforest Light\",\n \"type\": \"light\",\n \"import\": (() => import('@shikijs/themes/everforest-light'))\n },\n {\n \"id\": \"github-dark\",\n \"displayName\": \"GitHub Dark\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/github-dark'))\n },\n {\n \"id\": \"github-dark-default\",\n \"displayName\": \"GitHub Dark Default\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/github-dark-default'))\n },\n {\n \"id\": \"github-dark-dimmed\",\n \"displayName\": \"GitHub Dark Dimmed\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/github-dark-dimmed'))\n },\n {\n \"id\": \"github-dark-high-contrast\",\n \"displayName\": \"GitHub Dark High Contrast\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/github-dark-high-contrast'))\n },\n {\n \"id\": \"github-light\",\n \"displayName\": \"GitHub Light\",\n \"type\": \"light\",\n \"import\": (() => import('@shikijs/themes/github-light'))\n },\n {\n \"id\": \"github-light-default\",\n \"displayName\": \"GitHub Light Default\",\n \"type\": \"light\",\n \"import\": (() => import('@shikijs/themes/github-light-default'))\n },\n {\n \"id\": \"github-light-high-contrast\",\n \"displayName\": \"GitHub Light High Contrast\",\n \"type\": \"light\",\n \"import\": (() => import('@shikijs/themes/github-light-high-contrast'))\n },\n {\n \"id\": \"gruvbox-dark-hard\",\n \"displayName\": \"Gruvbox Dark Hard\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/gruvbox-dark-hard'))\n },\n {\n \"id\": \"gruvbox-dark-medium\",\n \"displayName\": \"Gruvbox Dark Medium\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/gruvbox-dark-medium'))\n },\n {\n \"id\": \"gruvbox-dark-soft\",\n \"displayName\": \"Gruvbox Dark Soft\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/gruvbox-dark-soft'))\n },\n {\n \"id\": \"gruvbox-light-hard\",\n \"displayName\": \"Gruvbox Light Hard\",\n \"type\": \"light\",\n \"import\": (() => import('@shikijs/themes/gruvbox-light-hard'))\n },\n {\n \"id\": \"gruvbox-light-medium\",\n \"displayName\": \"Gruvbox Light Medium\",\n \"type\": \"light\",\n \"import\": (() => import('@shikijs/themes/gruvbox-light-medium'))\n },\n {\n \"id\": \"gruvbox-light-soft\",\n \"displayName\": \"Gruvbox Light Soft\",\n \"type\": \"light\",\n \"import\": (() => import('@shikijs/themes/gruvbox-light-soft'))\n },\n {\n \"id\": \"horizon\",\n \"displayName\": \"Horizon\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/horizon'))\n },\n {\n \"id\": \"houston\",\n \"displayName\": \"Houston\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/houston'))\n },\n {\n \"id\": \"kanagawa-dragon\",\n \"displayName\": \"Kanagawa Dragon\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/kanagawa-dragon'))\n },\n {\n \"id\": \"kanagawa-lotus\",\n \"displayName\": \"Kanagawa Lotus\",\n \"type\": \"light\",\n \"import\": (() => import('@shikijs/themes/kanagawa-lotus'))\n },\n {\n \"id\": \"kanagawa-wave\",\n \"displayName\": \"Kanagawa Wave\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/kanagawa-wave'))\n },\n {\n \"id\": \"laserwave\",\n \"displayName\": \"LaserWave\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/laserwave'))\n },\n {\n \"id\": \"light-plus\",\n \"displayName\": \"Light Plus\",\n \"type\": \"light\",\n \"import\": (() => import('@shikijs/themes/light-plus'))\n },\n {\n \"id\": \"material-theme\",\n \"displayName\": \"Material Theme\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/material-theme'))\n },\n {\n \"id\": \"material-theme-darker\",\n \"displayName\": \"Material Theme Darker\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/material-theme-darker'))\n },\n {\n \"id\": \"material-theme-lighter\",\n \"displayName\": \"Material Theme Lighter\",\n \"type\": \"light\",\n \"import\": (() => import('@shikijs/themes/material-theme-lighter'))\n },\n {\n \"id\": \"material-theme-ocean\",\n \"displayName\": \"Material Theme Ocean\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/material-theme-ocean'))\n },\n {\n \"id\": \"material-theme-palenight\",\n \"displayName\": \"Material Theme Palenight\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/material-theme-palenight'))\n },\n {\n \"id\": \"min-dark\",\n \"displayName\": \"Min Dark\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/min-dark'))\n },\n {\n \"id\": \"min-light\",\n \"displayName\": \"Min Light\",\n \"type\": \"light\",\n \"import\": (() => import('@shikijs/themes/min-light'))\n },\n {\n \"id\": \"monokai\",\n \"displayName\": \"Monokai\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/monokai'))\n },\n {\n \"id\": \"night-owl\",\n \"displayName\": \"Night Owl\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/night-owl'))\n },\n {\n \"id\": \"night-owl-light\",\n \"displayName\": \"Night Owl Light\",\n \"type\": \"light\",\n \"import\": (() => import('@shikijs/themes/night-owl-light'))\n },\n {\n \"id\": \"nord\",\n \"displayName\": \"Nord\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/nord'))\n },\n {\n \"id\": \"one-dark-pro\",\n \"displayName\": \"One Dark Pro\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/one-dark-pro'))\n },\n {\n \"id\": \"one-light\",\n \"displayName\": \"One Light\",\n \"type\": \"light\",\n \"import\": (() => import('@shikijs/themes/one-light'))\n },\n {\n \"id\": \"plastic\",\n \"displayName\": \"Plastic\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/plastic'))\n },\n {\n \"id\": \"poimandres\",\n \"displayName\": \"Poimandres\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/poimandres'))\n },\n {\n \"id\": \"red\",\n \"displayName\": \"Red\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/red'))\n },\n {\n \"id\": \"rose-pine\",\n \"displayName\": \"Ros\\xE9 Pine\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/rose-pine'))\n },\n {\n \"id\": \"rose-pine-dawn\",\n \"displayName\": \"Ros\\xE9 Pine Dawn\",\n \"type\": \"light\",\n \"import\": (() => import('@shikijs/themes/rose-pine-dawn'))\n },\n {\n \"id\": \"rose-pine-moon\",\n \"displayName\": \"Ros\\xE9 Pine Moon\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/rose-pine-moon'))\n },\n {\n \"id\": \"slack-dark\",\n \"displayName\": \"Slack Dark\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/slack-dark'))\n },\n {\n \"id\": \"slack-ochin\",\n \"displayName\": \"Slack Ochin\",\n \"type\": \"light\",\n \"import\": (() => import('@shikijs/themes/slack-ochin'))\n },\n {\n \"id\": \"snazzy-light\",\n \"displayName\": \"Snazzy Light\",\n \"type\": \"light\",\n \"import\": (() => import('@shikijs/themes/snazzy-light'))\n },\n {\n \"id\": \"solarized-dark\",\n \"displayName\": \"Solarized Dark\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/solarized-dark'))\n },\n {\n \"id\": \"solarized-light\",\n \"displayName\": \"Solarized Light\",\n \"type\": \"light\",\n \"import\": (() => import('@shikijs/themes/solarized-light'))\n },\n {\n \"id\": \"synthwave-84\",\n \"displayName\": \"Synthwave '84\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/synthwave-84'))\n },\n {\n \"id\": \"tokyo-night\",\n \"displayName\": \"Tokyo Night\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/tokyo-night'))\n },\n {\n \"id\": \"vesper\",\n \"displayName\": \"Vesper\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/vesper'))\n },\n {\n \"id\": \"vitesse-black\",\n \"displayName\": \"Vitesse Black\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/vitesse-black'))\n },\n {\n \"id\": \"vitesse-dark\",\n \"displayName\": \"Vitesse Dark\",\n \"type\": \"dark\",\n \"import\": (() => import('@shikijs/themes/vitesse-dark'))\n },\n {\n \"id\": \"vitesse-light\",\n \"displayName\": \"Vitesse Light\",\n \"type\": \"light\",\n \"import\": (() => import('@shikijs/themes/vitesse-light'))\n }\n];\nconst bundledThemes = Object.fromEntries(bundledThemesInfo.map((i) => [i.id, i.import]));\n\nexport { bundledThemes, bundledThemesInfo };\n","class ShikiError extends Error {\n constructor(message) {\n super(message);\n this.name = \"ShikiError\";\n }\n}\n\nfunction getHeapMax() {\n return 2147483648;\n}\nfunction _emscripten_get_now() {\n return typeof performance !== \"undefined\" ? performance.now() : Date.now();\n}\nconst alignUp = (x, multiple) => x + (multiple - x % multiple) % multiple;\nasync function main(init) {\n let wasmMemory;\n let buffer;\n const binding = {};\n function updateGlobalBufferAndViews(buf) {\n buffer = buf;\n binding.HEAPU8 = new Uint8Array(buf);\n binding.HEAPU32 = new Uint32Array(buf);\n }\n function _emscripten_memcpy_big(dest, src, num) {\n binding.HEAPU8.copyWithin(dest, src, src + num);\n }\n function emscripten_realloc_buffer(size) {\n try {\n wasmMemory.grow(size - buffer.byteLength + 65535 >>> 16);\n updateGlobalBufferAndViews(wasmMemory.buffer);\n return 1;\n } catch {\n }\n }\n function _emscripten_resize_heap(requestedSize) {\n const oldSize = binding.HEAPU8.length;\n requestedSize = requestedSize >>> 0;\n const maxHeapSize = getHeapMax();\n if (requestedSize > maxHeapSize)\n return false;\n for (let cutDown = 1; cutDown <= 4; cutDown *= 2) {\n let overGrownHeapSize = oldSize * (1 + 0.2 / cutDown);\n overGrownHeapSize = Math.min(overGrownHeapSize, requestedSize + 100663296);\n const newSize = Math.min(maxHeapSize, alignUp(Math.max(requestedSize, overGrownHeapSize), 65536));\n const replacement = emscripten_realloc_buffer(newSize);\n if (replacement)\n return true;\n }\n return false;\n }\n const UTF8Decoder = typeof TextDecoder != \"undefined\" ? new TextDecoder(\"utf8\") : void 0;\n function UTF8ArrayToString(heapOrArray, idx, maxBytesToRead = 1024) {\n const endIdx = idx + maxBytesToRead;\n let endPtr = idx;\n while (heapOrArray[endPtr] && !(endPtr >= endIdx)) ++endPtr;\n if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) {\n return UTF8Decoder.decode(heapOrArray.subarray(idx, endPtr));\n }\n let str = \"\";\n while (idx < endPtr) {\n let u0 = heapOrArray[idx++];\n if (!(u0 & 128)) {\n str += String.fromCharCode(u0);\n continue;\n }\n const u1 = heapOrArray[idx++] & 63;\n if ((u0 & 224) === 192) {\n str += String.fromCharCode((u0 & 31) << 6 | u1);\n continue;\n }\n const u2 = heapOrArray[idx++] & 63;\n if ((u0 & 240) === 224) {\n u0 = (u0 & 15) << 12 | u1 << 6 | u2;\n } else {\n u0 = (u0 & 7) << 18 | u1 << 12 | u2 << 6 | heapOrArray[idx++] & 63;\n }\n if (u0 < 65536) {\n str += String.fromCharCode(u0);\n } else {\n const ch = u0 - 65536;\n str += String.fromCharCode(55296 | ch >> 10, 56320 | ch & 1023);\n }\n }\n return str;\n }\n function UTF8ToString(ptr, maxBytesToRead) {\n return ptr ? UTF8ArrayToString(binding.HEAPU8, ptr, maxBytesToRead) : \"\";\n }\n const asmLibraryArg = {\n emscripten_get_now: _emscripten_get_now,\n emscripten_memcpy_big: _emscripten_memcpy_big,\n emscripten_resize_heap: _emscripten_resize_heap,\n fd_write: () => 0\n };\n async function createWasm() {\n const info = {\n env: asmLibraryArg,\n wasi_snapshot_preview1: asmLibraryArg\n };\n const exports$1 = await init(info);\n wasmMemory = exports$1.memory;\n updateGlobalBufferAndViews(wasmMemory.buffer);\n Object.assign(binding, exports$1);\n binding.UTF8ToString = UTF8ToString;\n }\n await createWasm();\n return binding;\n}\n\nvar __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\nlet onigBinding = null;\nfunction throwLastOnigError(onigBinding2) {\n throw new ShikiError(onigBinding2.UTF8ToString(onigBinding2.getLastOnigError()));\n}\nclass UtfString {\n constructor(str) {\n __publicField(this, \"utf16Length\");\n __publicField(this, \"utf8Length\");\n __publicField(this, \"utf16Value\");\n __publicField(this, \"utf8Value\");\n __publicField(this, \"utf16OffsetToUtf8\");\n __publicField(this, \"utf8OffsetToUtf16\");\n const utf16Length = str.length;\n const utf8Length = UtfString._utf8ByteLength(str);\n const computeIndicesMapping = utf8Length !== utf16Length;\n const utf16OffsetToUtf8 = computeIndicesMapping ? new Uint32Array(utf16Length + 1) : null;\n if (computeIndicesMapping)\n utf16OffsetToUtf8[utf16Length] = utf8Length;\n const utf8OffsetToUtf16 = computeIndicesMapping ? new Uint32Array(utf8Length + 1) : null;\n if (computeIndicesMapping)\n utf8OffsetToUtf16[utf8Length] = utf16Length;\n const utf8Value = new Uint8Array(utf8Length);\n let i8 = 0;\n for (let i16 = 0; i16 < utf16Length; i16++) {\n const charCode = str.charCodeAt(i16);\n let codePoint = charCode;\n let wasSurrogatePair = false;\n if (charCode >= 55296 && charCode <= 56319) {\n if (i16 + 1 < utf16Length) {\n const nextCharCode = str.charCodeAt(i16 + 1);\n if (nextCharCode >= 56320 && nextCharCode <= 57343) {\n codePoint = (charCode - 55296 << 10) + 65536 | nextCharCode - 56320;\n wasSurrogatePair = true;\n }\n }\n }\n if (computeIndicesMapping) {\n utf16OffsetToUtf8[i16] = i8;\n if (wasSurrogatePair)\n utf16OffsetToUtf8[i16 + 1] = i8;\n if (codePoint <= 127) {\n utf8OffsetToUtf16[i8 + 0] = i16;\n } else if (codePoint <= 2047) {\n utf8OffsetToUtf16[i8 + 0] = i16;\n utf8OffsetToUtf16[i8 + 1] = i16;\n } else if (codePoint <= 65535) {\n utf8OffsetToUtf16[i8 + 0] = i16;\n utf8OffsetToUtf16[i8 + 1] = i16;\n utf8OffsetToUtf16[i8 + 2] = i16;\n } else {\n utf8OffsetToUtf16[i8 + 0] = i16;\n utf8OffsetToUtf16[i8 + 1] = i16;\n utf8OffsetToUtf16[i8 + 2] = i16;\n utf8OffsetToUtf16[i8 + 3] = i16;\n }\n }\n if (codePoint <= 127) {\n utf8Value[i8++] = codePoint;\n } else if (codePoint <= 2047) {\n utf8Value[i8++] = 192 | (codePoint & 1984) >>> 6;\n utf8Value[i8++] = 128 | (codePoint & 63) >>> 0;\n } else if (codePoint <= 65535) {\n utf8Value[i8++] = 224 | (codePoint & 61440) >>> 12;\n utf8Value[i8++] = 128 | (codePoint & 4032) >>> 6;\n utf8Value[i8++] = 128 | (codePoint & 63) >>> 0;\n } else {\n utf8Value[i8++] = 240 | (codePoint & 1835008) >>> 18;\n utf8Value[i8++] = 128 | (codePoint & 258048) >>> 12;\n utf8Value[i8++] = 128 | (codePoint & 4032) >>> 6;\n utf8Value[i8++] = 128 | (codePoint & 63) >>> 0;\n }\n if (wasSurrogatePair)\n i16++;\n }\n this.utf16Length = utf16Length;\n this.utf8Length = utf8Length;\n this.utf16Value = str;\n this.utf8Value = utf8Value;\n this.utf16OffsetToUtf8 = utf16OffsetToUtf8;\n this.utf8OffsetToUtf16 = utf8OffsetToUtf16;\n }\n static _utf8ByteLength(str) {\n let result = 0;\n for (let i = 0, len = str.length; i < len; i++) {\n const charCode = str.charCodeAt(i);\n let codepoint = charCode;\n let wasSurrogatePair = false;\n if (charCode >= 55296 && charCode <= 56319) {\n if (i + 1 < len) {\n const nextCharCode = str.charCodeAt(i + 1);\n if (nextCharCode >= 56320 && nextCharCode <= 57343) {\n codepoint = (charCode - 55296 << 10) + 65536 | nextCharCode - 56320;\n wasSurrogatePair = true;\n }\n }\n }\n if (codepoint <= 127)\n result += 1;\n else if (codepoint <= 2047)\n result += 2;\n else if (codepoint <= 65535)\n result += 3;\n else\n result += 4;\n if (wasSurrogatePair)\n i++;\n }\n return result;\n }\n createString(onigBinding2) {\n const result = onigBinding2.omalloc(this.utf8Length);\n onigBinding2.HEAPU8.set(this.utf8Value, result);\n return result;\n }\n}\nconst _OnigString = class _OnigString {\n constructor(str) {\n __publicField(this, \"id\", ++_OnigString.LAST_ID);\n __publicField(this, \"_onigBinding\");\n __publicField(this, \"content\");\n __publicField(this, \"utf16Length\");\n __publicField(this, \"utf8Length\");\n __publicField(this, \"utf16OffsetToUtf8\");\n __publicField(this, \"utf8OffsetToUtf16\");\n __publicField(this, \"ptr\");\n if (!onigBinding)\n throw new ShikiError(\"Must invoke loadWasm first.\");\n this._onigBinding = onigBinding;\n this.content = str;\n const utfString = new UtfString(str);\n this.utf16Length = utfString.utf16Length;\n this.utf8Length = utfString.utf8Length;\n this.utf16OffsetToUtf8 = utfString.utf16OffsetToUtf8;\n this.utf8OffsetToUtf16 = utfString.utf8OffsetToUtf16;\n if (this.utf8Length < 1e4 && !_OnigString._sharedPtrInUse) {\n if (!_OnigString._sharedPtr)\n _OnigString._sharedPtr = onigBinding.omalloc(1e4);\n _OnigString._sharedPtrInUse = true;\n onigBinding.HEAPU8.set(utfString.utf8Value, _OnigString._sharedPtr);\n this.ptr = _OnigString._sharedPtr;\n } else {\n this.ptr = utfString.createString(onigBinding);\n }\n }\n convertUtf8OffsetToUtf16(utf8Offset) {\n if (this.utf8OffsetToUtf16) {\n if (utf8Offset < 0)\n return 0;\n if (utf8Offset > this.utf8Length)\n return this.utf16Length;\n return this.utf8OffsetToUtf16[utf8Offset];\n }\n return utf8Offset;\n }\n convertUtf16OffsetToUtf8(utf16Offset) {\n if (this.utf16OffsetToUtf8) {\n if (utf16Offset < 0)\n return 0;\n if (utf16Offset > this.utf16Length)\n return this.utf8Length;\n return this.utf16OffsetToUtf8[utf16Offset];\n }\n return utf16Offset;\n }\n dispose() {\n if (this.ptr === _OnigString._sharedPtr)\n _OnigString._sharedPtrInUse = false;\n else\n this._onigBinding.ofree(this.ptr);\n }\n};\n__publicField(_OnigString, \"LAST_ID\", 0);\n__publicField(_OnigString, \"_sharedPtr\", 0);\n// a pointer to a string of 10000 bytes\n__publicField(_OnigString, \"_sharedPtrInUse\", false);\nlet OnigString = _OnigString;\nclass OnigScanner {\n constructor(patterns) {\n __publicField(this, \"_onigBinding\");\n __publicField(this, \"_ptr\");\n if (!onigBinding)\n throw new ShikiError(\"Must invoke loadWasm first.\");\n const strPtrsArr = [];\n const strLenArr = [];\n for (let i = 0, len = patterns.length; i < len; i++) {\n const utfString = new UtfString(patterns[i]);\n strPtrsArr[i] = utfString.createString(onigBinding);\n strLenArr[i] = utfString.utf8Length;\n }\n const strPtrsPtr = onigBinding.omalloc(4 * patterns.length);\n onigBinding.HEAPU32.set(strPtrsArr, strPtrsPtr / 4);\n const strLenPtr = onigBinding.omalloc(4 * patterns.length);\n onigBinding.HEAPU32.set(strLenArr, strLenPtr / 4);\n const scannerPtr = onigBinding.createOnigScanner(strPtrsPtr, strLenPtr, patterns.length);\n for (let i = 0, len = patterns.length; i < len; i++)\n onigBinding.ofree(strPtrsArr[i]);\n onigBinding.ofree(strLenPtr);\n onigBinding.ofree(strPtrsPtr);\n if (scannerPtr === 0)\n throwLastOnigError(onigBinding);\n this._onigBinding = onigBinding;\n this._ptr = scannerPtr;\n }\n dispose() {\n this._onigBinding.freeOnigScanner(this._ptr);\n }\n findNextMatchSync(string, startPosition, arg) {\n let options = 0 /* None */;\n if (typeof arg === \"number\") {\n options = arg;\n }\n if (typeof string === \"string\") {\n string = new OnigString(string);\n const result = this._findNextMatchSync(string, startPosition, false, options);\n string.dispose();\n return result;\n }\n return this._findNextMatchSync(string, startPosition, false, options);\n }\n _findNextMatchSync(string, startPosition, debugCall, options) {\n const onigBinding2 = this._onigBinding;\n const resultPtr = onigBinding2.findNextOnigScannerMatch(this._ptr, string.id, string.ptr, string.utf8Length, string.convertUtf16OffsetToUtf8(startPosition), options);\n if (resultPtr === 0) {\n return null;\n }\n const HEAPU32 = onigBinding2.HEAPU32;\n let offset = resultPtr / 4;\n const index = HEAPU32[offset++];\n const count = HEAPU32[offset++];\n const captureIndices = [];\n for (let i = 0; i < count; i++) {\n const beg = string.convertUtf8OffsetToUtf16(HEAPU32[offset++]);\n const end = string.convertUtf8OffsetToUtf16(HEAPU32[offset++]);\n captureIndices[i] = {\n start: beg,\n end,\n length: end - beg\n };\n }\n return {\n index,\n captureIndices\n };\n }\n}\nfunction isInstantiatorOptionsObject(dataOrOptions) {\n return typeof dataOrOptions.instantiator === \"function\";\n}\nfunction isInstantiatorModule(dataOrOptions) {\n return typeof dataOrOptions.default === \"function\";\n}\nfunction isDataOptionsObject(dataOrOptions) {\n return typeof dataOrOptions.data !== \"undefined\";\n}\nfunction isResponse(dataOrOptions) {\n return typeof Response !== \"undefined\" && dataOrOptions instanceof Response;\n}\nfunction isArrayBuffer(data) {\n return typeof ArrayBuffer !== \"undefined\" && (data instanceof ArrayBuffer || ArrayBuffer.isView(data)) || typeof Buffer !== \"undefined\" && Buffer.isBuffer?.(data) || typeof SharedArrayBuffer !== \"undefined\" && data instanceof SharedArrayBuffer || typeof Uint32Array !== \"undefined\" && data instanceof Uint32Array;\n}\nlet initPromise;\nfunction loadWasm(options) {\n if (initPromise)\n return initPromise;\n async function _load() {\n onigBinding = await main(async (info) => {\n let instance = options;\n instance = await instance;\n if (typeof instance === \"function\")\n instance = await instance(info);\n if (typeof instance === \"function\")\n instance = await instance(info);\n if (isInstantiatorOptionsObject(instance)) {\n instance = await instance.instantiator(info);\n } else if (isInstantiatorModule(instance)) {\n instance = await instance.default(info);\n } else {\n if (isDataOptionsObject(instance))\n instance = instance.data;\n if (isResponse(instance)) {\n if (typeof WebAssembly.instantiateStreaming === \"function\")\n instance = await _makeResponseStreamingLoader(instance)(info);\n else\n instance = await _makeResponseNonStreamingLoader(instance)(info);\n } else if (isArrayBuffer(instance)) {\n instance = await _makeArrayBufferLoader(instance)(info);\n } else if (instance instanceof WebAssembly.Module) {\n instance = await _makeArrayBufferLoader(instance)(info);\n } else if (\"default\" in instance && instance.default instanceof WebAssembly.Module) {\n instance = await _makeArrayBufferLoader(instance.default)(info);\n }\n }\n if (\"instance\" in instance)\n instance = instance.instance;\n if (\"exports\" in instance)\n instance = instance.exports;\n return instance;\n });\n }\n initPromise = _load();\n return initPromise;\n}\nfunction _makeArrayBufferLoader(data) {\n return (importObject) => WebAssembly.instantiate(data, importObject);\n}\nfunction _makeResponseStreamingLoader(data) {\n return (importObject) => WebAssembly.instantiateStreaming(data, importObject);\n}\nfunction _makeResponseNonStreamingLoader(data) {\n return async (importObject) => {\n const arrayBuffer = await data.arrayBuffer();\n return WebAssembly.instantiate(arrayBuffer, importObject);\n };\n}\n\nlet _defaultWasmLoader;\nfunction setDefaultWasmLoader(_loader) {\n _defaultWasmLoader = _loader;\n}\nfunction getDefaultWasmLoader() {\n return _defaultWasmLoader;\n}\nasync function createOnigurumaEngine(options) {\n if (options)\n await loadWasm(options);\n return {\n createScanner(patterns) {\n return new OnigScanner(patterns.map((p) => typeof p === \"string\" ? p : p.source));\n },\n createString(s) {\n return new OnigString(s);\n }\n };\n}\n\nexport { createOnigurumaEngine, getDefaultWasmLoader, loadWasm, setDefaultWasmLoader };\n","import { createSingletonShorthands, guessEmbeddedLanguages, createBundledHighlighter } from '@shikijs/core';\nexport * from '@shikijs/core';\nimport { bundledLanguages } from './langs.mjs';\nexport { bundledLanguagesAlias, bundledLanguagesBase, bundledLanguagesInfo } from './langs.mjs';\nimport { bundledThemes } from './themes.mjs';\nexport { bundledThemesInfo } from './themes.mjs';\nimport { createOnigurumaEngine } from '@shikijs/engine-oniguruma';\n\nconst createHighlighter = /* @__PURE__ */ createBundledHighlighter({\n langs: bundledLanguages,\n themes: bundledThemes,\n engine: () => createOnigurumaEngine(import('shiki/wasm'))\n});\nconst {\n codeToHtml,\n codeToHast,\n codeToTokens,\n codeToTokensBase,\n codeToTokensWithThemes,\n getSingletonHighlighter,\n getLastGrammarState\n} = /* @__PURE__ */ createSingletonShorthands(\n createHighlighter,\n { guessEmbeddedLanguages }\n);\n\nexport { bundledLanguages, bundledThemes, codeToHast, codeToHtml, codeToTokens, codeToTokensBase, codeToTokensWithThemes, createHighlighter, getLastGrammarState, getSingletonHighlighter };\n","import {bundledLanguages,createHighlighter}from'shiki';var p=new Set(Object.keys(bundledLanguages)),a=new Map,h=new Map,l=new Map,H=(e,t)=>`${e}-${t[0]}-${t[1]}`,k=(e,t,n)=>{let g=e.slice(0,100),i=e.length>100?e.slice(-100):\"\";return `${t}:${n[0]}:${n[1]}:${e.length}:${g}:${i}`},b=(e,t)=>{let n=H(e,t);if(a.has(n))return a.get(n);let g=createHighlighter({themes:t,langs:[e]});return a.set(n,g),g};function f(e={}){var n;let t=(n=e.themes)!=null?n:[\"github-light\",\"github-dark\"];return {name:\"shiki\",type:\"code-highlighter\",supportsLanguage(g){return p.has(g)},getSupportedLanguages(){return Array.from(p)},getThemes(){return t},highlight({code:g,language:i,themes:r},d){let s=k(g,i,r);return h.has(s)?h.get(s):(d&&(l.has(s)||l.set(s,new Set),l.get(s).add(d)),b(i,r).then(u=>{let B=u.getLoadedLanguages().includes(i)?i:\"text\",o=u.codeToTokens(g,{lang:B,themes:{light:r[0],dark:r[1]}});h.set(s,o);let c=l.get(s);if(c){for(let L of c)L(o);l.delete(s);}}).catch(u=>{console.error(\"[Streamdown Code] Failed to highlight code:\",u),l.delete(s);}),null)}}}var R=f();export{R as code,f as createCodePlugin};","\"use client\";\n\nimport { cjk } from \"@streamdown/cjk\";\nimport { code } from \"@streamdown/code\";\nimport type { UIMessage } from \"ai\";\nimport type { ComponentProps, HTMLAttributes, ReactNode } from \"react\";\nimport { memo } from \"react\";\nimport { Streamdown } from \"streamdown\";\nimport { cn } from \"../lib/utils\";\n\nexport type MessageProps = HTMLAttributes<HTMLDivElement> & {\n\tfrom: UIMessage[\"role\"];\n\tchildren?: ReactNode;\n};\n\nexport const Message = ({\n\tclassName,\n\tfrom,\n\tchildren,\n\t...props\n}: MessageProps) => (\n\t<div\n\t\tclassName={cn(\n\t\t\t\"ww:group ww:flex ww:w-full\",\n\t\t\tfrom === \"user\"\n\t\t\t\t? \"is-user ww:ml-auto ww:max-w-[80%] ww:flex-col ww:items-end\"\n\t\t\t\t: \"is-assistant ww:flex-col\",\n\t\t\tclassName,\n\t\t)}\n\t\t{...props}\n\t>\n\t\t<div className={cn(\"ww:flex ww:min-w-0 ww:flex-col ww:gap-2\", \"ww:w-full\")}>\n\t\t\t{children}\n\t\t</div>\n\t</div>\n);\n\nexport type MessageContentProps = HTMLAttributes<HTMLDivElement>;\n\nexport const MessageContent = ({\n\tchildren,\n\tclassName,\n\t...props\n}: MessageContentProps) => (\n\t<div\n\t\tclassName={cn(\n\t\t\t\"ww:flex ww:w-fit ww:min-w-0 ww:max-w-full ww:flex-col ww:gap-2 ww:overflow-hidden ww:text-base\",\n\t\t\t\"ww:group-[.is-user]:ml-auto ww:group-[.is-user]:rounded-lg ww:group-[.is-user]:bg-user-bubble ww:group-[.is-user]:px-4 ww:group-[.is-user]:py-3 ww:group-[.is-user]:text-primary-foreground\",\n\t\t\t\"ww:group-[.is-assistant]:text-foreground\",\n\t\t\tclassName,\n\t\t)}\n\t\t{...props}\n\t>\n\t\t{children}\n\t</div>\n);\n\nexport type MessageResponseProps = ComponentProps<typeof Streamdown>;\n\nconst streamdownPlugins = { cjk, code };\n\nexport const MessageResponse = memo(\n\t({ className, ...props }: MessageResponseProps) => (\n\t\t<Streamdown\n\t\t\tclassName={cn(\n\t\t\t\t\"ww:size-full ww:[&>*:first-child]:mt-0 ww:[&>*:last-child]:mb-0\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tplugins={streamdownPlugins}\n\t\t\t{...props}\n\t\t/>\n\t),\n\t(prevProps, nextProps) => prevProps.children === nextProps.children,\n);\n\nMessageResponse.displayName = \"MessageResponse\";\n","\"use client\";\n\nimport type { HTMLAttributes } from \"react\";\nimport { cn } from \"../lib/utils\";\n\nexport type ReasoningProps = HTMLAttributes<HTMLPreElement> & {\n\ttext: string;\n};\n\n/** Displays reasoning text inline with muted styling. */\nexport function Reasoning({ className, text, ...props }: ReasoningProps) {\n\tif (!text) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<pre\n\t\t\tclassName={cn(\n\t\t\t\t\"ww:mb-2 ww:overflow-x-auto ww:whitespace-pre-wrap ww:break-words ww:text-xs ww:font-mono ww:text-muted-foreground\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{text}\n\t\t</pre>\n\t);\n}\n","\"use client\";\n\nimport type { ToolUIPart } from \"ai\";\nimport {\n\tBracesIcon,\n\tCheckIcon,\n\tChevronDownIcon,\n\tChevronRightIcon,\n\tClipboardCopyIcon,\n\tServerIcon,\n} from \"lucide-react\";\nimport type { HTMLAttributes } from \"react\";\nimport {\n\tcreateContext,\n\tuseCallback,\n\tuseContext,\n\tuseEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Button } from \"../ui/button\";\n\n/**\n * Produces an abbreviated single-line JSON preview for collapsed display.\n * Objects show truncated keys/values: `{ci… 'M…, pos… '2…, squa… 80}`\n * Arrays show their length: `Array(13)`\n */\nfunction truncateJSON(data: unknown, maxLength = 80): string {\n\tif (data === null || data === undefined) {\n\t\treturn String(data);\n\t}\n\tif (typeof data !== \"object\") {\n\t\treturn String(data).slice(0, maxLength);\n\t}\n\n\tif (Array.isArray(data)) {\n\t\treturn `Array(${data.length})`;\n\t}\n\n\tconst stringified = JSON.stringify(data);\n\tif (stringified.length <= maxLength) {\n\t\treturn stringified;\n\t}\n\n\tconst entries = Object.entries(data as Record<string, unknown>);\n\tconst parts: string[] = [];\n\tlet remaining = maxLength - 2;\n\n\tfor (const [key, value] of entries) {\n\t\tif (remaining <= 8) {\n\t\t\tbreak;\n\t\t}\n\t\tconst keyAbbrev = key.length > 4 ? `${key.slice(0, 4)}\\u2026` : key;\n\t\tlet valStr: string;\n\t\tif (typeof value === \"string\") {\n\t\t\tvalStr = value.length > 2 ? `'${value.slice(0, 1)}\\u2026` : `'${value}'`;\n\t\t} else if (Array.isArray(value)) {\n\t\t\tvalStr = `Array(${value.length})`;\n\t\t} else if (typeof value === \"object\" && value !== null) {\n\t\t\tvalStr = `{\\u2026}`;\n\t\t} else {\n\t\t\tvalStr = String(value);\n\t\t}\n\t\tconst part = `${keyAbbrev}\\u2009${valStr}`;\n\t\tparts.push(part);\n\t\tremaining -= part.length + 3;\n\t}\n\n\treturn `{${parts.join(\", \")}}`;\n}\n\ninterface CopyButtonProps {\n\ttext: string;\n\tclassName?: string;\n}\n\n/** Ghost button that copies `text` to clipboard, showing \"Copied\" for 2s. */\nfunction CopyButton({ text, className }: CopyButtonProps) {\n\tconst [copied, setCopied] = useState(false);\n\tconst timeoutRef = useRef<ReturnType<typeof setTimeout>>(null);\n\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\tif (timeoutRef.current) {\n\t\t\t\tclearTimeout(timeoutRef.current);\n\t\t\t}\n\t\t};\n\t}, []);\n\n\tconst handleCopy = useCallback(\n\t\tasync (e: React.MouseEvent) => {\n\t\t\te.stopPropagation();\n\t\t\ttry {\n\t\t\t\tawait navigator.clipboard.writeText(text);\n\t\t\t\tsetCopied(true);\n\t\t\t\tif (timeoutRef.current) {\n\t\t\t\t\tclearTimeout(timeoutRef.current);\n\t\t\t\t}\n\t\t\t\ttimeoutRef.current = setTimeout(() => setCopied(false), 2000);\n\t\t\t} catch {\n\t\t\t\t// Clipboard API not available\n\t\t\t}\n\t\t},\n\t\t[text],\n\t);\n\n\treturn (\n\t\t<Button\n\t\t\tvariant=\"ghost\"\n\t\t\tsize=\"sm\"\n\t\t\tonClick={handleCopy}\n\t\t\tclassName={cn(\n\t\t\t\t\"ww:h-auto ww:gap-1 ww:px-1.5 ww:py-0.5 ww:text-xs ww:text-muted-foreground ww:hover:text-foreground\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{copied ? (\n\t\t\t\t<>\n\t\t\t\t\t<CheckIcon className=\"ww:size-3.5\" />\n\t\t\t\t\t<span>Copied</span>\n\t\t\t\t</>\n\t\t\t) : (\n\t\t\t\t<>\n\t\t\t\t\t<ClipboardCopyIcon className=\"ww:size-3.5\" />\n\t\t\t\t\t<span>Copy</span>\n\t\t\t\t</>\n\t\t\t)}\n\t\t</Button>\n\t);\n}\n\ninterface CollapsibleJSONProps extends HTMLAttributes<HTMLDivElement> {\n\tdata: unknown;\n\tlabel: string;\n}\n\n/**\n * Labeled JSON section with a Copy button and a collapsible preview.\n * Collapsed: shows a truncated single-line abbreviation with a `>` chevron.\n * Expanded: rotates the chevron and shows full pretty-printed JSON.\n */\nfunction CollapsibleJSON({\n\tdata,\n\tlabel,\n\tclassName,\n\t...props\n}: CollapsibleJSONProps) {\n\tconst [expanded, setExpanded] = useState(false);\n\tconst fullJSON = useMemo(() => JSON.stringify(data, null, 2), [data]);\n\tconst preview = truncateJSON(data);\n\n\treturn (\n\t\t<div className={cn(\"ww:rounded-lg ww:bg-tool-card\", className)} {...props}>\n\t\t\t<div className=\"ww:flex ww:items-center ww:justify-between ww:px-3 ww:pt-2.5 ww:pb-1.5\">\n\t\t\t\t<span className=\"ww:text-xs ww:font-medium ww:text-muted-foreground\">\n\t\t\t\t\t{label}\n\t\t\t\t</span>\n\t\t\t\t<CopyButton text={fullJSON} />\n\t\t\t</div>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={() => setExpanded((v) => !v)}\n\t\t\t\tclassName=\"ww:flex ww:w-full ww:items-start ww:gap-2 ww:px-3 ww:pb-3 ww:text-left\"\n\t\t\t>\n\t\t\t\t<ChevronRightIcon\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"ww:mt-0.5 ww:size-3.5 ww:shrink-0 ww:text-muted-foreground ww:transition-transform ww:duration-150\",\n\t\t\t\t\t\texpanded && \"ww:rotate-90\",\n\t\t\t\t\t)}\n\t\t\t\t/>\n\t\t\t\t{expanded ? (\n\t\t\t\t\t<pre className=\"ww:overflow-x-auto ww:text-xs ww:font-mono ww:text-foreground ww:whitespace-pre-wrap ww:break-all\">\n\t\t\t\t\t\t<code>{fullJSON}</code>\n\t\t\t\t\t</pre>\n\t\t\t\t) : (\n\t\t\t\t\t<span className=\"ww:truncate ww:text-xs ww:font-mono ww:text-foreground/80\">\n\t\t\t\t\t\t{preview}\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t</button>\n\t\t</div>\n\t);\n}\n\nconst ToolOpenContext = createContext<{\n\topen: boolean;\n\ttoggle: () => void;\n}>({ open: false, toggle: () => {} });\n\nexport type ToolProps = HTMLAttributes<HTMLDivElement> & {\n\tdefaultOpen?: boolean;\n};\n\n/**\n * Compound component root for a tool call display.\n * Provides open/closed state via context to ToolHeader and ToolContent.\n *\n * ```tsx\n * <Tool defaultOpen>\n * <ToolHeader title=\"Price estimate ready\" state=\"output-available\" />\n * <ToolContent>\n * <ToolServerInfo toolName=\"get_price_estimate\" serverName=\"Tuio v2\" />\n * <ToolInput input={args} />\n * <ToolOutput output={result} errorText={undefined} />\n * </ToolContent>\n * </Tool>\n * ```\n */\nexport function Tool({\n\tclassName,\n\tdefaultOpen = false,\n\tchildren,\n\t...props\n}: ToolProps) {\n\tconst [open, setOpen] = useState(defaultOpen);\n\treturn (\n\t\t<ToolOpenContext.Provider\n\t\t\tvalue={{ open, toggle: () => setOpen((o) => !o) }}\n\t\t>\n\t\t\t<div\n\t\t\t\tclassName={cn(\"ww:mb-4 ww:w-full\", className)}\n\t\t\t\tdata-state={open ? \"open\" : \"closed\"}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</div>\n\t\t</ToolOpenContext.Provider>\n\t);\n}\n\nexport type ToolHeaderProps = HTMLAttributes<HTMLButtonElement> & {\n\ttitle?: string;\n\tstate: ToolUIPart[\"state\"];\n};\n\n/** Clickable header that toggles the tool accordion. Shows a `{≡}` icon, title, and chevron. */\nexport function ToolHeader({\n\tclassName,\n\ttitle,\n\tstate,\n\t...props\n}: ToolHeaderProps) {\n\tconst { open, toggle } = useContext(ToolOpenContext);\n\tconst isRunning = state === \"input-available\" || state === \"input-streaming\";\n\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tonClick={toggle}\n\t\t\tclassName={cn(\n\t\t\t\t\"ww:flex ww:w-full ww:items-center ww:justify-between ww:gap-3 ww:py-1.5\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\taria-expanded={open}\n\t\t\t{...props}\n\t\t>\n\t\t\t<div className=\"ww:flex ww:min-w-0 ww:items-center ww:gap-2\">\n\t\t\t\t<BracesIcon className=\"ww:size-4 ww:shrink-0 ww:text-muted-foreground\" />\n\t\t\t\t<span className=\"ww:truncate ww:text-sm ww:font-medium\">{title}</span>\n\t\t\t\t{isRunning && (\n\t\t\t\t\t<span className=\"ww:size-2 ww:shrink-0 ww:rounded-full ww:bg-primary ww:animate-pulse\" />\n\t\t\t\t)}\n\t\t\t</div>\n\t\t\t<ChevronDownIcon\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"ww:size-4 ww:shrink-0 ww:text-muted-foreground ww:transition-transform ww:duration-200\",\n\t\t\t\t\topen && \"ww:rotate-180\",\n\t\t\t\t)}\n\t\t\t/>\n\t\t</button>\n\t);\n}\n\nexport type ToolServerInfoProps = HTMLAttributes<HTMLDivElement> & {\n\tserverName?: string;\n\tserverIcon?: string;\n\ttoolName: string;\n};\n\n/** Optional MCP server identity card. Shows server icon + name and the tool function name. Renders nothing if no props need display. */\nexport function ToolServerInfo({\n\tclassName,\n\tserverName,\n\tserverIcon,\n\ttoolName,\n\t...props\n}: ToolServerInfoProps) {\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"ww:flex ww:items-center ww:gap-3 ww:rounded-lg ww:border ww:border-border ww:px-3 ww:py-2.5\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{serverIcon ? (\n\t\t\t\t<img\n\t\t\t\t\tsrc={serverIcon}\n\t\t\t\t\talt={serverName ?? \"\"}\n\t\t\t\t\tclassName=\"ww:size-8 ww:shrink-0 ww:rounded-full ww:object-cover\"\n\t\t\t\t/>\n\t\t\t) : (\n\t\t\t\t<div className=\"ww:flex ww:size-8 ww:shrink-0 ww:items-center ww:justify-center ww:rounded-full ww:border ww:border-border ww:bg-muted\">\n\t\t\t\t\t<ServerIcon className=\"ww:size-4 ww:text-muted-foreground\" />\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t<div className=\"ww:flex ww:min-w-0 ww:flex-col\">\n\t\t\t\t{serverName && (\n\t\t\t\t\t<span className=\"ww:text-xs ww:text-muted-foreground\">\n\t\t\t\t\t\t{serverName}\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t\t<span className=\"ww:truncate ww:text-sm ww:font-semibold\">\n\t\t\t\t\t{toolName}\n\t\t\t\t</span>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\nexport type ToolContentProps = HTMLAttributes<HTMLDivElement>;\n\n/** Collapsible body that animates open/closed. Content below smoothly pushes up/down via a grid-row height transition. */\nexport function ToolContent({\n\tclassName,\n\tchildren,\n\t...props\n}: ToolContentProps) {\n\tconst { open } = useContext(ToolOpenContext);\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"ww:grid ww:transition-[grid-template-rows,opacity] ww:duration-200 ww:ease-out\",\n\t\t\t\topen\n\t\t\t\t\t? \"ww:grid-rows-[1fr] ww:opacity-100\"\n\t\t\t\t\t: \"ww:grid-rows-[0fr] ww:opacity-0\",\n\t\t\t)}\n\t\t>\n\t\t\t<div className=\"ww:min-h-0 ww:overflow-hidden\">\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"ww:mt-2 ww:space-y-3 ww:rounded-lg ww:border ww:border-border ww:bg-background ww:p-3\",\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\t{...props}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\nexport type ToolInputProps = HTMLAttributes<HTMLDivElement> & {\n\tinput: ToolUIPart[\"input\"];\n\tdebug?: boolean;\n};\n\n/** Displays the tool call request parameters as a collapsible JSON section labeled \"Request\". */\nexport function ToolInput({\n\tclassName,\n\tinput,\n\tdebug,\n\t...props\n}: ToolInputProps) {\n\tconst filtered = useMemo(() => {\n\t\tif (\n\t\t\t!debug &&\n\t\t\ttypeof input === \"object\" &&\n\t\t\tinput !== null &&\n\t\t\t!Array.isArray(input)\n\t\t) {\n\t\t\tconst { _meta, ...rest } = input as Record<string, unknown>;\n\t\t\treturn rest;\n\t\t}\n\t\treturn input;\n\t}, [input, debug]);\n\n\treturn (\n\t\t<CollapsibleJSON\n\t\t\tdata={filtered}\n\t\t\tlabel=\"Request\"\n\t\t\tclassName={className}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport type ToolOutputProps = HTMLAttributes<HTMLDivElement> & {\n\toutput: ToolUIPart[\"output\"];\n\terrorText: ToolUIPart[\"errorText\"];\n\tdebug?: boolean;\n};\n\nfunction getUiMeta(output: unknown): Record<string, unknown> | undefined {\n\tif (typeof output !== \"object\" || output === null) {\n\t\treturn undefined;\n\t}\n\tconst meta = (output as Record<string, unknown>)._meta;\n\tif (typeof meta !== \"object\" || meta === null) {\n\t\treturn undefined;\n\t}\n\tconst ui = (meta as Record<string, unknown>).ui;\n\tif (typeof ui !== \"object\" || ui === null) {\n\t\treturn undefined;\n\t}\n\treturn ui as Record<string, unknown>;\n}\n\n/** Extract the MCP app resource URI from `output._meta.ui.resourceUri`, if present. */\nexport function getResourceUri(output: unknown): string | undefined {\n\tconst uri = getUiMeta(output)?.resourceUri;\n\treturn typeof uri === \"string\" ? uri : undefined;\n}\n\n/** Extract the auto-height flag from `output._meta.ui.autoHeight`, if present. */\nexport function getAutoHeight(output: unknown): boolean {\n\treturn getUiMeta(output)?.autoHeight === true;\n}\n\n/** Displays the tool call result as a collapsible JSON section labeled \"Response\", or an error block if `errorText` is set. */\nexport function ToolOutput({\n\tclassName,\n\toutput,\n\terrorText,\n\tdebug,\n\t...props\n}: ToolOutputProps) {\n\tconst filtered = useMemo(() => {\n\t\tif (\n\t\t\t!debug &&\n\t\t\ttypeof output === \"object\" &&\n\t\t\toutput !== null &&\n\t\t\t!Array.isArray(output)\n\t\t) {\n\t\t\tconst { _meta, ...rest } = output as Record<string, unknown>;\n\t\t\treturn rest;\n\t\t}\n\t\treturn output;\n\t}, [output, debug]);\n\n\tif (!(output || errorText)) {\n\t\treturn null;\n\t}\n\n\tif (errorText) {\n\t\treturn (\n\t\t\t<div className={cn(\"ww:space-y-2\", className)} {...props}>\n\t\t\t\t<h4 className=\"ww:text-xs ww:font-medium ww:uppercase ww:tracking-wide ww:text-muted-foreground\">\n\t\t\t\t\tError\n\t\t\t\t</h4>\n\t\t\t\t<div className=\"ww:rounded-lg ww:bg-destructive/10 ww:p-3 ww:text-xs ww:text-destructive\">\n\t\t\t\t\t{errorText}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<CollapsibleJSON\n\t\t\tdata={filtered}\n\t\t\tlabel=\"Response\"\n\t\t\tclassName={className}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n","\"use client\";\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n\ttype ModelContextUpdate,\n\tmergeModelContext,\n} from \"../../../shared/model-context\";\nimport { cn } from \"../lib/utils\";\n\nconst DEFAULT_RESOURCE_ENDPOINT = \"/api/mcp/resource\";\nconst MAX_HEIGHT = 500;\nconst DEFAULT_HEIGHT = 0;\nconst AUTOHEIGHT_PADDING = 16;\nconst PROTOCOL_VERSION = \"2026-01-26\";\nconst RESIZE_ANIMATION_MS = 300;\nconst HANDSHAKE_TIMEOUT_MS = 3000;\nconst MAX_RETRIES = 3;\n\nfunction normalizeString(value: unknown): string | undefined {\n\tif (typeof value !== \"string\") {\n\t\treturn undefined;\n\t}\n\tconst trimmed = value.trim();\n\treturn trimmed.length > 0 ? trimmed : undefined;\n}\n\nexport function resultProducesWidget(result: {\n\t_meta?: Record<string, unknown>;\n}): boolean {\n\tconst meta = result._meta;\n\tif (!meta || typeof meta !== \"object\") {\n\t\treturn false;\n\t}\n\n\tconst openaiTemplate = normalizeString(meta[\"openai/outputTemplate\"]);\n\tif (openaiTemplate) {\n\t\treturn true;\n\t}\n\n\tconst uiMeta = meta.ui;\n\tif (!uiMeta || typeof uiMeta !== \"object\") {\n\t\treturn false;\n\t}\n\n\tconst resourceUri = normalizeString(\n\t\t(uiMeta as Record<string, unknown>).resourceUri,\n\t);\n\treturn Boolean(resourceUri);\n}\n\nfunction shouldAutoInjectToolResultText(result: {\n\t_meta?: Record<string, unknown>;\n}): boolean {\n\tif (resultProducesWidget(result)) {\n\t\treturn false;\n\t}\n\treturn result._meta?.[\"waniwani/autoInjectResultText\"] !== false;\n}\n\nexport type McpAppDisplayMode = \"inline\" | \"pip\" | \"fullscreen\";\n\nexport interface McpAppFrameProps {\n\tresourceUri: string;\n\ttoolInput: Record<string, unknown>;\n\ttoolResult: {\n\t\tcontent?: Array<{ type: string; text?: string }>;\n\t\tstructuredContent?: Record<string, unknown>;\n\t\t_meta?: Record<string, unknown>;\n\t};\n\tresourceEndpoint?: string;\n\tchatSessionId?: string;\n\tisDark?: boolean;\n\tclassName?: string;\n\t/** When true, the iframe height auto-adapts to its content. Set via `_meta.ui.autoHeight` in the tool result. */\n\tautoHeight?: boolean;\n\t/** Called when the view requests to open a URL */\n\tonOpenLink?: (url: string) => void;\n\t/** Called when a widget sends a follow-up message via `ui/message` */\n\tonFollowUp?: (message: {\n\t\trole: string;\n\t\tcontent: Array<{ type: string; text?: string }>;\n\t\tmodelContext?: ModelContextUpdate;\n\t}) => void;\n\t/** Called when a widget calls a tool via `tools/call` (MCP Apps standard). */\n\tonCallTool?: (params: {\n\t\tname: string;\n\t\targuments: Record<string, unknown>;\n\t}) => Promise<{\n\t\tcontent?: Array<{ type: string; text?: string }>;\n\t\tstructuredContent?: Record<string, unknown>;\n\t\t_meta?: Record<string, unknown>;\n\t}>;\n\t/** Called when the widget requests a display mode change (e.g. \"fullscreen\" for expand) */\n\tonDisplayModeChange?: (mode: McpAppDisplayMode) => void;\n\t/** When true, the iframe fills its container (fullscreen mode). */\n\tisFullscreen?: boolean;\n}\n\nexport function McpAppFrame({\n\tresourceUri,\n\ttoolInput,\n\ttoolResult,\n\tresourceEndpoint = DEFAULT_RESOURCE_ENDPOINT,\n\tchatSessionId,\n\tisDark = false,\n\tclassName,\n\tautoHeight = false,\n\tonOpenLink,\n\tonFollowUp,\n\tonCallTool,\n\tonDisplayModeChange,\n\tisFullscreen = false,\n}: McpAppFrameProps) {\n\tconst iframeRef = useRef<HTMLIFrameElement>(null);\n\tconst toolInputRef = useRef(toolInput);\n\tconst toolResultRef = useRef(toolResult);\n\tconst lastSizeRef = useRef({ width: 0, height: 0 });\n\tconst animationRef = useRef<Animation | null>(null);\n\tconst initializedRef = useRef(false);\n\tconst retryCountRef = useRef(0);\n\tconst displayModeRef = useRef<McpAppDisplayMode>(\"inline\");\n\tconst [height, setHeight] = useState(DEFAULT_HEIGHT);\n\tconst [width, setWidth] = useState<number | undefined>(undefined);\n\tconst onOpenLinkRef = useRef(onOpenLink);\n\tconst onFollowUpRef = useRef(onFollowUp);\n\tconst onCallToolRef = useRef(onCallTool);\n\tconst onDisplayModeChangeRef = useRef(onDisplayModeChange);\n\tconst chatSessionIdRef = useRef(chatSessionId);\n\n\ttoolInputRef.current = toolInput;\n\ttoolResultRef.current = toolResult;\n\tonOpenLinkRef.current = onOpenLink;\n\tonFollowUpRef.current = onFollowUp;\n\tonCallToolRef.current = onCallTool;\n\tonDisplayModeChangeRef.current = onDisplayModeChange;\n\tchatSessionIdRef.current = chatSessionId;\n\n\tconst clampHeight = useCallback(\n\t\t(h: number) => {\n\t\t\tif (autoHeight) {\n\t\t\t\treturn Math.max(h + AUTOHEIGHT_PADDING, 0);\n\t\t\t}\n\t\t\treturn Math.min(Math.max(h, 50), MAX_HEIGHT);\n\t\t},\n\t\t[autoHeight],\n\t);\n\n\t// Build the iframe src URL directly — avoids null-origin issues with srcdoc\n\tconst iframeSrc = useMemo(\n\t\t() => `${resourceEndpoint}?uri=${encodeURIComponent(resourceUri)}`,\n\t\t[resourceEndpoint, resourceUri],\n\t);\n\n\tconst isDarkRef = useRef(isDark);\n\tisDarkRef.current = isDark;\n\n\t// Send theme changes to the iframe (only after handshake is complete)\n\tuseEffect(() => {\n\t\tif (!initializedRef.current) {\n\t\t\treturn;\n\t\t}\n\t\tconst iframe = iframeRef.current;\n\t\tif (!iframe?.contentWindow) {\n\t\t\treturn;\n\t\t}\n\n\t\tiframe.contentWindow.postMessage(\n\t\t\t{\n\t\t\t\tjsonrpc: \"2.0\",\n\t\t\t\tmethod: \"ui/notifications/host-context-changed\",\n\t\t\t\tparams: {\n\t\t\t\t\ttheme: isDark ? \"dark\" : \"light\",\n\t\t\t\t},\n\t\t\t},\n\t\t\t\"*\",\n\t\t);\n\t}, [isDark]);\n\n\t// Synchronous postMessage protocol handler — no async imports, no timing issues.\n\t// Handles the MCP UI protocol (ui/initialize, notifications, etc.) directly.\n\tuseEffect(() => {\n\t\tconst iframe = iframeRef.current;\n\t\tif (!iframe) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet disposed = false;\n\t\tlet handshakeReceived = false;\n\t\tlet pendingModelContext: ModelContextUpdate | null = null;\n\t\tlet pendingToolResult: {\n\t\t\ttext: string;\n\t\t\ttimer: ReturnType<typeof setTimeout>;\n\t\t} | null = null;\n\n\t\t// Retry: reload iframe if handshake doesn't arrive in time\n\t\tconst handshakeTimer = setTimeout(() => {\n\t\t\tif (disposed || handshakeReceived) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (retryCountRef.current >= MAX_RETRIES) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tretryCountRef.current += 1;\n\t\t\t// Force reload with a cache-busting param\n\t\t\tconst url = new URL(iframe.src);\n\t\t\turl.searchParams.set(\"_retry\", String(retryCountRef.current));\n\t\t\tiframe.src = url.toString();\n\t\t}, HANDSHAKE_TIMEOUT_MS);\n\n\t\tconst postToIframe = (msg: Record<string, unknown>) => {\n\t\t\tiframe.contentWindow?.postMessage(msg, \"*\");\n\t\t};\n\n\t\tconst handleMessage = (event: MessageEvent) => {\n\t\t\tif (disposed) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (event.source !== iframe.contentWindow) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst data = event.data;\n\n\t\t\tif (!data || typeof data !== \"object\" || data.jsonrpc !== \"2.0\") {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst method: string | undefined = data.method;\n\t\t\tconst id: number | string | undefined = data.id;\n\n\t\t\t// ui/initialize — widget requests handshake\n\t\t\tif (method === \"ui/initialize\" && id != null) {\n\t\t\t\thandshakeReceived = true;\n\t\t\t\tclearTimeout(handshakeTimer);\n\t\t\t\tpostToIframe({\n\t\t\t\t\tjsonrpc: \"2.0\",\n\t\t\t\t\tid,\n\t\t\t\t\tresult: {\n\t\t\t\t\t\tprotocolVersion: data.params?.protocolVersion ?? PROTOCOL_VERSION,\n\t\t\t\t\t\thostInfo: { name: \"WaniWani Chat\", version: \"1.0.0\" },\n\t\t\t\t\t\thostCapabilities: {\n\t\t\t\t\t\t\topenLinks: {},\n\t\t\t\t\t\t\tmessage: {\n\t\t\t\t\t\t\t\ttext: {},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\ttools: {},\n\t\t\t\t\t\t\tupdateModelContext: {\n\t\t\t\t\t\t\t\ttext: {},\n\t\t\t\t\t\t\t\tstructuredContent: {},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\thostContext: {\n\t\t\t\t\t\t\ttheme: isDarkRef.current ? \"dark\" : \"light\",\n\t\t\t\t\t\t\tdisplayMode: displayModeRef.current,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// ui/notifications/initialized — widget confirms init, we send tool data\n\t\t\tif (method === \"ui/notifications/initialized\") {\n\t\t\t\tinitializedRef.current = true;\n\t\t\t\tconst input = toolInputRef.current;\n\t\t\t\tconst result = toolResultRef.current;\n\t\t\t\tconst resultMeta =\n\t\t\t\t\tresult._meta && typeof result._meta === \"object\"\n\t\t\t\t\t\t? result._meta\n\t\t\t\t\t\t: null;\n\t\t\t\tconst normalizedChatSessionId = normalizeString(\n\t\t\t\t\tchatSessionIdRef.current,\n\t\t\t\t);\n\t\t\t\tconst waniwaniMeta =\n\t\t\t\t\tresultMeta &&\n\t\t\t\t\ttypeof resultMeta.waniwani === \"object\" &&\n\t\t\t\t\tresultMeta.waniwani !== null\n\t\t\t\t\t\t? (resultMeta.waniwani as Record<string, unknown>)\n\t\t\t\t\t\t: null;\n\t\t\t\tconst forwardedWaniwaniMeta =\n\t\t\t\t\twaniwaniMeta || normalizedChatSessionId\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t...(waniwaniMeta ?? {}),\n\t\t\t\t\t\t\t\t...(normalizedChatSessionId\n\t\t\t\t\t\t\t\t\t? { sessionId: normalizedChatSessionId }\n\t\t\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: undefined;\n\t\t\t\tconst forwardedMeta =\n\t\t\t\t\tresultMeta || forwardedWaniwaniMeta\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t...(resultMeta ?? {}),\n\t\t\t\t\t\t\t\t...(forwardedWaniwaniMeta\n\t\t\t\t\t\t\t\t\t? { waniwani: forwardedWaniwaniMeta }\n\t\t\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: undefined;\n\n\t\t\t\tpostToIframe({\n\t\t\t\t\tjsonrpc: \"2.0\",\n\t\t\t\t\tmethod: \"ui/notifications/tool-input\",\n\t\t\t\t\tparams: { arguments: input },\n\t\t\t\t});\n\n\t\t\t\tconst content = result.content ?? [\n\t\t\t\t\t{ type: \"text\", text: JSON.stringify(result) },\n\t\t\t\t];\n\t\t\t\tpostToIframe({\n\t\t\t\t\tjsonrpc: \"2.0\",\n\t\t\t\t\tmethod: \"ui/notifications/tool-result\",\n\t\t\t\t\tparams: {\n\t\t\t\t\t\tcontent,\n\t\t\t\t\t\tstructuredContent: result.structuredContent,\n\t\t\t\t\t\t_meta: forwardedMeta,\n\t\t\t\t\t\t// Compatibility: some clients inspect `meta` instead of `_meta`.\n\t\t\t\t\t\tmeta: forwardedMeta,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// ui/notifications/size-changed — widget reports content size\n\t\t\tif (method === \"ui/notifications/size-changed\") {\n\t\t\t\tconst params = data.params;\n\t\t\t\tconst newHeight =\n\t\t\t\t\ttypeof params?.height === \"number\" ? params.height : undefined;\n\t\t\t\tconst newWidth =\n\t\t\t\t\ttypeof params?.width === \"number\" ? params.width : undefined;\n\n\t\t\t\t// Deduplicate — only update if values actually changed (prevents feedback loops)\n\t\t\t\tconst last = lastSizeRef.current;\n\t\t\t\tconst heightChanged =\n\t\t\t\t\tnewHeight !== undefined && newHeight !== last.height;\n\t\t\t\tconst widthChanged = newWidth !== undefined && newWidth !== last.width;\n\n\t\t\t\tif (!heightChanged && !widthChanged) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (heightChanged && newHeight !== undefined) {\n\t\t\t\t\tlast.height = newHeight;\n\t\t\t\t\tconst clamped = clampHeight(newHeight);\n\n\t\t\t\t\t// Get current visual height before canceling the old animation\n\t\t\t\t\tconst from = iframe.getBoundingClientRect().height;\n\n\t\t\t\t\t// Cancel previous animation so its fill: \"forwards\" stops overriding inline style\n\t\t\t\t\tif (animationRef.current) {\n\t\t\t\t\t\tanimationRef.current.cancel();\n\t\t\t\t\t\tanimationRef.current = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set the target height in React state (takes effect once no animation overrides it)\n\t\t\t\t\tsetHeight(clamped);\n\n\t\t\t\t\t// Animate the height transition\n\t\t\t\t\tif (iframe.animate && Math.abs(from - clamped) > 2) {\n\t\t\t\t\t\tconst anim = iframe.animate(\n\t\t\t\t\t\t\t[{ height: `${from}px` }, { height: `${clamped}px` }],\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tduration: RESIZE_ANIMATION_MS,\n\t\t\t\t\t\t\t\teasing: \"ease-out\",\n\t\t\t\t\t\t\t\tfill: \"forwards\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t);\n\t\t\t\t\t\tanimationRef.current = anim;\n\t\t\t\t\t\t// Once done, remove the animation so the inline style is the source of truth\n\t\t\t\t\t\tanim.onfinish = () => {\n\t\t\t\t\t\t\tif (animationRef.current === anim) {\n\t\t\t\t\t\t\t\tanim.cancel();\n\t\t\t\t\t\t\t\tanimationRef.current = null;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (widthChanged && autoHeight && newWidth !== undefined) {\n\t\t\t\t\tlast.width = newWidth;\n\t\t\t\t\tsetWidth(newWidth);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// ui/open-link — widget requests to open a URL\n\t\t\tif (method === \"ui/open-link\" && id != null) {\n\t\t\t\tconst url = data.params?.url;\n\t\t\t\tif (typeof url === \"string\") {\n\t\t\t\t\tif (onOpenLinkRef.current) {\n\t\t\t\t\t\tonOpenLinkRef.current(url);\n\t\t\t\t\t} else {\n\t\t\t\t\t\twindow.open(url, \"_blank\", \"noopener,noreferrer\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tpostToIframe({ jsonrpc: \"2.0\", id, result: {} });\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// ui/message — widget sends a chat message\n\t\t\tif (method === \"ui/message\" && id != null) {\n\t\t\t\tif (onFollowUpRef.current && data.params) {\n\t\t\t\t\tlet params = data.params;\n\t\t\t\t\tconst modelContext = pendingModelContext;\n\t\t\t\t\tpendingModelContext = null;\n\t\t\t\t\t// Merge pending tool result into the follow-up message\n\t\t\t\t\tif (pendingToolResult) {\n\t\t\t\t\t\tclearTimeout(pendingToolResult.timer);\n\t\t\t\t\t\tconst toolText = pendingToolResult.text;\n\t\t\t\t\t\tpendingToolResult = null;\n\t\t\t\t\t\tconst existingText = (params.content ?? [])\n\t\t\t\t\t\t\t.map((c: { text?: string }) => c.text ?? \"\")\n\t\t\t\t\t\t\t.join(\"\")\n\t\t\t\t\t\t\t.trim();\n\t\t\t\t\t\tparams = {\n\t\t\t\t\t\t\t...params,\n\t\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t\t{ type: \"text\", text: `${existingText}\\n\\n${toolText}` },\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tonFollowUpRef.current({\n\t\t\t\t\t\t...params,\n\t\t\t\t\t\t...(modelContext ? { modelContext } : {}),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tpostToIframe({ jsonrpc: \"2.0\", id, result: {} });\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// ui/update-model-context — widget updates hidden model context\n\t\t\tif (method === \"ui/update-model-context\" && id != null) {\n\t\t\t\tpendingModelContext = mergeModelContext(\n\t\t\t\t\tpendingModelContext,\n\t\t\t\t\tdata.params as ModelContextUpdate,\n\t\t\t\t);\n\t\t\t\tpostToIframe({ jsonrpc: \"2.0\", id, result: {} });\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// tools/call — widget calls a server tool (MCP Apps standard)\n\t\t\tif (method === \"tools/call\" && id != null) {\n\t\t\t\tconst handler = onCallToolRef.current;\n\t\t\t\tif (!handler) {\n\t\t\t\t\tpostToIframe({\n\t\t\t\t\t\tjsonrpc: \"2.0\",\n\t\t\t\t\t\tid,\n\t\t\t\t\t\terror: { code: -32601, message: \"tools/call not supported\" },\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\thandler({\n\t\t\t\t\tname: data.params?.name,\n\t\t\t\t\targuments: data.params?.arguments ?? {},\n\t\t\t\t})\n\t\t\t\t\t.then((result) => {\n\t\t\t\t\t\tpostToIframe({ jsonrpc: \"2.0\", id, result });\n\n\t\t\t\t\t\t// Schedule auto-injection for non-widget tool results. Plain\n\t\t\t\t\t\t// tools may still return structuredContent, so the presence of\n\t\t\t\t\t\t// structuredContent alone is not enough to decide this.\n\t\t\t\t\t\tconst text = result.content\n\t\t\t\t\t\t\t?.map((c) => c.text ?? \"\")\n\t\t\t\t\t\t\t.join(\"\")\n\t\t\t\t\t\t\t.trim();\n\t\t\t\t\t\tif (text && shouldAutoInjectToolResultText(result)) {\n\t\t\t\t\t\t\tif (pendingToolResult) {\n\t\t\t\t\t\t\t\tclearTimeout(pendingToolResult.timer);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpendingToolResult = {\n\t\t\t\t\t\t\t\ttext,\n\t\t\t\t\t\t\t\ttimer: setTimeout(() => {\n\t\t\t\t\t\t\t\t\tif (disposed) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tconst modelContext = pendingModelContext;\n\t\t\t\t\t\t\t\t\tpendingModelContext = null;\n\t\t\t\t\t\t\t\t\tpendingToolResult = null;\n\t\t\t\t\t\t\t\t\tonFollowUpRef.current?.({\n\t\t\t\t\t\t\t\t\t\trole: \"user\",\n\t\t\t\t\t\t\t\t\t\tcontent: [{ type: \"text\", text }],\n\t\t\t\t\t\t\t\t\t\t...(modelContext ? { modelContext } : {}),\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}, 500),\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.catch((err: unknown) => {\n\t\t\t\t\t\tconst message =\n\t\t\t\t\t\t\terr instanceof Error ? err.message : \"Tool call failed\";\n\t\t\t\t\t\tpostToIframe({\n\t\t\t\t\t\t\tjsonrpc: \"2.0\",\n\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\terror: { code: -32000, message },\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// ui/request-display-mode — widget requests fullscreen/inline/pip\n\t\t\tif (method === \"ui/request-display-mode\" && id != null) {\n\t\t\t\tconst requested = data.params?.mode;\n\t\t\t\tconst granted =\n\t\t\t\t\trequested === \"fullscreen\" ||\n\t\t\t\t\trequested === \"inline\" ||\n\t\t\t\t\trequested === \"pip\"\n\t\t\t\t\t\t? requested\n\t\t\t\t\t\t: \"inline\";\n\t\t\t\tdisplayModeRef.current = granted;\n\t\t\t\t// Reply with the granted mode\n\t\t\t\tpostToIframe({\n\t\t\t\t\tjsonrpc: \"2.0\",\n\t\t\t\t\tid,\n\t\t\t\t\tresult: { mode: granted },\n\t\t\t\t});\n\t\t\t\t// Notify the widget of the context change\n\t\t\t\tpostToIframe({\n\t\t\t\t\tjsonrpc: \"2.0\",\n\t\t\t\t\tmethod: \"ui/notifications/host-context-changed\",\n\t\t\t\t\tparams: { displayMode: granted },\n\t\t\t\t});\n\t\t\t\tonDisplayModeChangeRef.current?.(granted);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// ui/resource-teardown — graceful shutdown\n\t\t\tif (method === \"ui/resource-teardown\" && id != null) {\n\t\t\t\tpostToIframe({ jsonrpc: \"2.0\", id, result: {} });\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// ping — keep-alive\n\t\t\tif (method === \"ping\" && id != null) {\n\t\t\t\tpostToIframe({ jsonrpc: \"2.0\", id, result: {} });\n\t\t\t}\n\t\t};\n\n\t\twindow.addEventListener(\"message\", handleMessage);\n\n\t\treturn () => {\n\t\t\tdisposed = true;\n\t\t\tclearTimeout(handshakeTimer);\n\t\t\tif (pendingToolResult) {\n\t\t\t\tclearTimeout(pendingToolResult.timer);\n\t\t\t}\n\t\t\twindow.removeEventListener(\"message\", handleMessage);\n\t\t};\n\t}, [autoHeight, clampHeight]);\n\n\treturn (\n\t\t<iframe\n\t\t\tref={iframeRef}\n\t\t\tsrc={iframeSrc}\n\t\t\tsandbox=\"allow-scripts allow-forms allow-same-origin\"\n\t\t\tclassName={cn(\n\t\t\t\t!isFullscreen && \"ww:rounded-md ww:border ww:border-border\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tstyle={{\n\t\t\t\theight: isFullscreen ? \"100%\" : height,\n\t\t\t\tminWidth: isFullscreen || !width ? undefined : `min(${width}px, 100%)`,\n\t\t\t\twidth: \"100%\",\n\t\t\t\tborder: \"none\",\n\t\t\t\tcolorScheme: isDark ? \"dark\" : \"auto\",\n\t\t\t}}\n\t\t\ttitle=\"MCP App\"\n\t\t/>\n\t);\n}\n","import type { ContentBlock } from \"@modelcontextprotocol/sdk/types.js\";\n\nexport type ModelContextContentBlock = ContentBlock;\n\nexport type ModelContextUpdate = {\n\tcontent?: ModelContextContentBlock[];\n\tstructuredContent?: Record<string, unknown>;\n};\n\nexport function hasModelContext(\n\tvalue: ModelContextUpdate | null | undefined,\n): value is ModelContextUpdate {\n\tif (!value) {\n\t\treturn false;\n\t}\n\tconst hasContent = Array.isArray(value.content) && value.content.length > 0;\n\tconst hasStructuredContent =\n\t\ttypeof value.structuredContent === \"object\" &&\n\t\tvalue.structuredContent !== null &&\n\t\tObject.keys(value.structuredContent).length > 0;\n\treturn hasContent || hasStructuredContent;\n}\n\nexport function mergeModelContext(\n\tcurrent: ModelContextUpdate | null | undefined,\n\tnext: ModelContextUpdate | null | undefined,\n): ModelContextUpdate | null {\n\tif (!hasModelContext(current) && !hasModelContext(next)) {\n\t\treturn null;\n\t}\n\tif (!hasModelContext(current)) {\n\t\treturn {\n\t\t\t...(next?.content ? { content: [...next.content] } : {}),\n\t\t\t...(next?.structuredContent\n\t\t\t\t? { structuredContent: { ...next.structuredContent } }\n\t\t\t\t: {}),\n\t\t};\n\t}\n\tif (!hasModelContext(next)) {\n\t\treturn {\n\t\t\t...(current.content ? { content: [...current.content] } : {}),\n\t\t\t...(current.structuredContent\n\t\t\t\t? { structuredContent: { ...current.structuredContent } }\n\t\t\t\t: {}),\n\t\t};\n\t}\n\n\treturn {\n\t\t...(current.content || next.content\n\t\t\t? { content: [...(current.content ?? []), ...(next.content ?? [])] }\n\t\t\t: {}),\n\t\t...(current.structuredContent || next.structuredContent\n\t\t\t? {\n\t\t\t\t\tstructuredContent: {\n\t\t\t\t\t\t...(current.structuredContent ?? {}),\n\t\t\t\t\t\t...(next.structuredContent ?? {}),\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t: {}),\n\t};\n}\n\nexport function formatModelContextForPrompt(\n\tvalue: ModelContextUpdate | null | undefined,\n): string {\n\tif (!hasModelContext(value)) {\n\t\treturn \"\";\n\t}\n\n\tconst sections: string[] = [\n\t\t\"## Widget Model Context\",\n\t\t\"This hidden context was supplied by an MCP App via `ui/update-model-context`.\",\n\t\t\"Use it for the next assistant turn only. If it includes flow continuation or tool-call instructions, follow them exactly.\",\n\t];\n\n\tif (value.content?.length) {\n\t\tconst renderedBlocks = value.content\n\t\t\t.map((block) => {\n\t\t\t\tif (block.type === \"text\" && typeof block.text === \"string\") {\n\t\t\t\t\treturn block.text.trim();\n\t\t\t\t}\n\t\t\t\treturn JSON.stringify(block, null, 2);\n\t\t\t})\n\t\t\t.filter(Boolean)\n\t\t\t.join(\"\\n\\n\");\n\t\tif (renderedBlocks) {\n\t\t\tsections.push(`Content blocks:\\n${renderedBlocks}`);\n\t\t}\n\t}\n\n\tif (\n\t\tvalue.structuredContent &&\n\t\tObject.keys(value.structuredContent).length > 0\n\t) {\n\t\tsections.push(\n\t\t\t`Structured content JSON:\\n${JSON.stringify(value.structuredContent, null, 2)}`,\n\t\t);\n\t}\n\n\treturn sections.join(\"\\n\\n\");\n}\n","\"use client\";\n\nimport type { WelcomeConfig } from \"../@types\";\nimport { cn } from \"../lib/utils\";\n\ninterface WelcomeScreenProps extends WelcomeConfig {\n\tonSuggestionSelect?: (suggestion: string) => void;\n}\n\nexport function WelcomeScreen({\n\ticon,\n\ttitle,\n\tdescription,\n\tsuggestions,\n\tonSuggestionSelect,\n}: WelcomeScreenProps) {\n\treturn (\n\t\t<div className=\"ww:flex ww:flex-col ww:items-center ww:justify-center ww:py-12 ww:px-6 ww:text-center ww:min-h-full\">\n\t\t\t{icon && (\n\t\t\t\t<div className=\"ww:mb-4 ww:flex ww:items-center ww:justify-center ww:size-12 ww:rounded-xl ww:bg-foreground ww:text-background\">\n\t\t\t\t\t{icon}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t<h2 className=\"ww:text-lg ww:font-semibold ww:text-foreground\">\n\t\t\t\t{title}\n\t\t\t</h2>\n\t\t\t{description && (\n\t\t\t\t<p className=\"ww:mt-1 ww:text-sm ww:text-muted-foreground ww:max-w-sm\">\n\t\t\t\t\t{description}\n\t\t\t\t</p>\n\t\t\t)}\n\t\t\t{suggestions && suggestions.length > 0 && (\n\t\t\t\t<div className=\"ww:mt-6 ww:w-full ww:max-w-md ww:flex ww:flex-col ww:gap-2\">\n\t\t\t\t\t{suggestions.map((suggestion, index) => (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tkey={suggestion}\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tonClick={() => onSuggestionSelect?.(suggestion)}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"ww:w-full ww:text-left ww:rounded-xl ww:border ww:border-border ww:bg-background ww:px-4 ww:py-3 ww:text-sm\",\n\t\t\t\t\t\t\t\t\"ww:text-foreground ww:hover:bg-accent ww:hover:border-primary/30\",\n\t\t\t\t\t\t\t\t\"ww:transition-all ww:duration-200 ww:ease-out ww:cursor-pointer\",\n\t\t\t\t\t\t\t\t\"ww:animate-[ww-fade-in_0.2s_ease-out_both]\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\tstyle={{ animationDelay: `${index * 50}ms` }}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{suggestion}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","\"use client\";\n\nimport { Component, type ReactNode } from \"react\";\n\ninterface Props {\n\tchildren: ReactNode;\n}\n\ninterface State {\n\thasError: boolean;\n}\n\nexport class WidgetErrorBoundary extends Component<Props, State> {\n\tstate: State = { hasError: false };\n\n\tstatic getDerivedStateFromError(): State {\n\t\treturn { hasError: true };\n\t}\n\n\tcomponentDidCatch(error: Error) {\n\t\tconsole.warn(\"[WaniWani] Widget failed to render:\", error.message);\n\t}\n\n\trender() {\n\t\tif (this.state.hasError) {\n\t\t\treturn (\n\t\t\t\t<div className=\"ww:flex ww:items-center ww:justify-between ww:rounded-md ww:border ww:border-border ww:bg-muted/50 ww:px-4 ww:py-3 ww:text-sm ww:text-muted-foreground\">\n\t\t\t\t\t<span>Widget failed to load</span>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tonClick={() => this.setState({ hasError: false })}\n\t\t\t\t\t\tclassName=\"ww:text-xs ww:font-medium ww:text-primary ww:hover:underline\"\n\t\t\t\t\t>\n\t\t\t\t\t\tRetry\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\n\t\treturn this.props.children;\n\t}\n}\n","\"use client\";\n\nimport type { ChatStatus, ReasoningUIPart, ToolUIPart, UIMessage } from \"ai\";\nimport type { ModelContextUpdate } from \"../../../shared/model-context\";\n\nimport type { WelcomeConfig } from \"../@types\";\nimport { Attachments } from \"../ai-elements/attachments\";\nimport { Loader } from \"../ai-elements/loader\";\nimport {\n\tMessage,\n\tMessageContent,\n\tMessageResponse,\n} from \"../ai-elements/message\";\nimport { Reasoning } from \"../ai-elements/reasoning\";\nimport {\n\tgetAutoHeight,\n\tgetResourceUri,\n\tTool,\n\tToolContent,\n\tToolHeader,\n\tToolInput,\n\tToolOutput,\n} from \"../ai-elements/tool\";\nimport type { McpAppDisplayMode } from \"./mcp-app-frame\";\nimport { McpAppFrame } from \"./mcp-app-frame\";\nimport { WelcomeScreen } from \"./welcome-screen\";\nimport { WidgetErrorBoundary } from \"./widget-error-boundary\";\n\n/** Converts `get_price_estimate` or `compare-prices` → `Get price estimate` / `Compare prices` */\nfunction formatToolName(name: string | undefined): string {\n\tif (!name) {\n\t\treturn \"Tool\";\n\t}\n\n\treturn name.replace(/[-_]/g, \" \").replace(/^\\w/, (c) => c.toUpperCase());\n}\n\nexport interface FullscreenWidget {\n\ttoolCallId: string;\n\tresourceUri: string;\n\ttoolInput: Record<string, unknown>;\n\ttoolResult: {\n\t\tcontent?: Array<{ type: string; text?: string }>;\n\t\tstructuredContent?: Record<string, unknown>;\n\t\t_meta?: Record<string, unknown>;\n\t};\n\tautoHeight: boolean;\n}\n\ninterface MessageListProps {\n\tmessages: UIMessage[];\n\tstatus: ChatStatus;\n\twelcomeMessage?: string;\n\t/** Rich welcome screen config. Takes precedence over `welcomeMessage`. */\n\twelcome?: WelcomeConfig;\n\t/** Called when a welcome screen suggestion card is clicked. */\n\tonSuggestionSelect?: (suggestion: string) => void;\n\tresourceEndpoint?: string;\n\tchatSessionId?: string;\n\tisDark?: boolean;\n\tonFollowUp?: (message: {\n\t\trole: string;\n\t\tcontent: Array<{ type: string; text?: string }>;\n\t\tmodelContext?: ModelContextUpdate;\n\t}) => void;\n\tonCallTool?: (params: {\n\t\tname: string;\n\t\targuments: Record<string, unknown>;\n\t}) => Promise<{\n\t\tcontent?: Array<{ type: string; text?: string }>;\n\t\tstructuredContent?: Record<string, unknown>;\n\t\t_meta?: Record<string, unknown>;\n\t}>;\n\tonWidgetDisplayModeChange?: (\n\t\tmode: McpAppDisplayMode,\n\t\twidget: FullscreenWidget,\n\t) => void;\n\t/** When set, only the matching widget is shown (fullscreen mode). The iframe stays mounted. */\n\tfullscreenToolCallId?: string | null;\n\t/** When true, show _meta in tool call inputs and outputs. */\n\tdebug?: boolean;\n}\n\nexport function MessageList({\n\tmessages,\n\tstatus,\n\twelcomeMessage,\n\twelcome,\n\tonSuggestionSelect,\n\tresourceEndpoint,\n\tchatSessionId,\n\tisDark,\n\tonFollowUp,\n\tonCallTool,\n\tonWidgetDisplayModeChange,\n\tfullscreenToolCallId,\n\tdebug,\n}: MessageListProps) {\n\tconst isLoading = status === \"submitted\" || status === \"streaming\";\n\tconst lastMessage = messages[messages.length - 1];\n\tconst hasMessages = messages.length > 0;\n\tconst showLoaderBubble =\n\t\tisLoading && (!hasMessages || lastMessage.role === \"user\");\n\n\tconst isFullscreenActive = fullscreenToolCallId != null;\n\n\treturn (\n\t\t<>\n\t\t\t{!isFullscreenActive &&\n\t\t\t\t(!hasMessages && welcome ? (\n\t\t\t\t\t<WelcomeScreen {...welcome} onSuggestionSelect={onSuggestionSelect} />\n\t\t\t\t) : (\n\t\t\t\t\twelcomeMessage && (\n\t\t\t\t\t\t<Message from=\"assistant\">\n\t\t\t\t\t\t\t<MessageContent>\n\t\t\t\t\t\t\t\t<MessageResponse>{welcomeMessage}</MessageResponse>\n\t\t\t\t\t\t\t</MessageContent>\n\t\t\t\t\t\t</Message>\n\t\t\t\t\t)\n\t\t\t\t))}\n\t\t\t{messages.map((message) => {\n\t\t\t\tconst textParts = message.parts.filter((p) => p.type === \"text\");\n\t\t\t\tconst reasoningParts = message.parts.filter(\n\t\t\t\t\t(p): p is ReasoningUIPart => p.type === \"reasoning\",\n\t\t\t\t);\n\t\t\t\tconst fileParts = message.parts.filter((p) => p.type === \"file\");\n\t\t\t\tconst toolParts = message.parts.filter(\n\t\t\t\t\t(\n\t\t\t\t\t\tp,\n\t\t\t\t\t): p is typeof p & {\n\t\t\t\t\t\ttoolCallId: string;\n\t\t\t\t\t\ttoolName: string;\n\t\t\t\t\t\tstate: ToolUIPart[\"state\"];\n\t\t\t\t\t\tinput: unknown;\n\t\t\t\t\t\ttitle?: string;\n\t\t\t\t\t} => \"toolCallId\" in p,\n\t\t\t\t);\n\t\t\t\tconst isLastAssistant =\n\t\t\t\t\tmessage === lastMessage && message.role === \"assistant\";\n\t\t\t\tconst hasTextContent = textParts.length > 0;\n\t\t\t\tconst containsFullscreenTool = isFullscreenActive\n\t\t\t\t\t? toolParts.some((p) => p.toolCallId === fullscreenToolCallId)\n\t\t\t\t\t: false;\n\n\t\t\t\t// Hide messages that don't contain the fullscreen widget\n\t\t\t\tif (isFullscreenActive && !containsFullscreenTool) {\n\t\t\t\t\treturn <div key={message.id} style={{ display: \"none\" }} />;\n\t\t\t\t}\n\n\t\t\t\treturn (\n\t\t\t\t\t<Message from={message.role} key={message.id}>\n\t\t\t\t\t\t{!containsFullscreenTool &&\n\t\t\t\t\t\t\treasoningParts.map((part, i) => (\n\t\t\t\t\t\t\t\t<Reasoning\n\t\t\t\t\t\t\t\t\tkey={`reasoning-${message.id}-${i}`}\n\t\t\t\t\t\t\t\t\ttext={part.text}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t{toolParts.map((part) => {\n\t\t\t\t\t\t\tconst output = \"output\" in part ? part.output : undefined;\n\t\t\t\t\t\t\tconst resourceUri =\n\t\t\t\t\t\t\t\toutput !== undefined ? getResourceUri(output) : undefined;\n\t\t\t\t\t\t\tconst autoHeight =\n\t\t\t\t\t\t\t\toutput !== undefined ? getAutoHeight(output) : false;\n\t\t\t\t\t\t\tconst isFullscreen = part.toolCallId === fullscreenToolCallId;\n\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tkey={part.toolCallId}\n\t\t\t\t\t\t\t\t\tstyle={\n\t\t\t\t\t\t\t\t\t\tisFullscreen\n\t\t\t\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\t\t\t\tposition: \"absolute\" as const,\n\t\t\t\t\t\t\t\t\t\t\t\t\tinset: 0,\n\t\t\t\t\t\t\t\t\t\t\t\t\tzIndex: 10,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tflexDirection: \"column\" as const,\n\t\t\t\t\t\t\t\t\t\t\t\t\toverflow: \"hidden\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tbackground: \"var(--ww-color-background)\",\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<div style={isFullscreen ? { display: \"none\" } : undefined}>\n\t\t\t\t\t\t\t\t\t\t<Tool>\n\t\t\t\t\t\t\t\t\t\t\t<ToolHeader\n\t\t\t\t\t\t\t\t\t\t\t\ttitle={part.title ?? formatToolName(part.toolName)}\n\t\t\t\t\t\t\t\t\t\t\t\tstate={part.state}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t<ToolContent>\n\t\t\t\t\t\t\t\t\t\t\t\t<ToolInput input={part.input} debug={debug} />\n\t\t\t\t\t\t\t\t\t\t\t\t{output !== undefined && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<ToolOutput\n\t\t\t\t\t\t\t\t\t\t\t\t\t\toutput={output}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\terrorText={\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"errorText\" in part ? part.errorText : undefined\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdebug={debug}\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t</ToolContent>\n\t\t\t\t\t\t\t\t\t\t</Tool>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t{resourceUri && resourceEndpoint && output !== undefined && (\n\t\t\t\t\t\t\t\t\t\t<WidgetErrorBoundary>\n\t\t\t\t\t\t\t\t\t\t\t<McpAppFrame\n\t\t\t\t\t\t\t\t\t\t\t\tisFullscreen={isFullscreen}\n\t\t\t\t\t\t\t\t\t\t\t\tresourceUri={resourceUri}\n\t\t\t\t\t\t\t\t\t\t\t\ttoolInput={\n\t\t\t\t\t\t\t\t\t\t\t\t\t(part.input as Record<string, unknown>) ?? {}\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\ttoolResult={{\n\t\t\t\t\t\t\t\t\t\t\t\t\tcontent: (output as Record<string, unknown>)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t.content as\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t| Array<{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype: string;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttext?: string;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t }>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t| undefined,\n\t\t\t\t\t\t\t\t\t\t\t\t\tstructuredContent: (output as Record<string, unknown>)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t.structuredContent as\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t| Record<string, unknown>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t| undefined,\n\t\t\t\t\t\t\t\t\t\t\t\t\t_meta: (output as Record<string, unknown>)._meta as\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t| Record<string, unknown>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t| undefined,\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\tresourceEndpoint={resourceEndpoint}\n\t\t\t\t\t\t\t\t\t\t\t\tchatSessionId={chatSessionId}\n\t\t\t\t\t\t\t\t\t\t\t\tisDark={isDark}\n\t\t\t\t\t\t\t\t\t\t\t\tautoHeight={autoHeight}\n\t\t\t\t\t\t\t\t\t\t\t\tonFollowUp={onFollowUp}\n\t\t\t\t\t\t\t\t\t\t\t\tonCallTool={onCallTool}\n\t\t\t\t\t\t\t\t\t\t\t\tonDisplayModeChange={\n\t\t\t\t\t\t\t\t\t\t\t\t\tonWidgetDisplayModeChange\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? (mode) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonWidgetDisplayModeChange(mode, {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttoolCallId: part.toolCallId,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tresourceUri,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttoolInput:\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(part.input as Record<string, unknown>) ??\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttoolResult: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcontent: (output as Record<string, unknown>)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.content as\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t| Array<{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype: string;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttext?: string;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t }>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t| undefined,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstructuredContent: (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\toutput as Record<string, unknown>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t).structuredContent as\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t| Record<string, unknown>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t| undefined,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t_meta: (output as Record<string, unknown>)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t._meta as\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t| Record<string, unknown>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t| undefined,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tautoHeight,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t</WidgetErrorBoundary>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})}\n\t\t\t\t\t\t{!containsFullscreenTool && (\n\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t<MessageContent>\n\t\t\t\t\t\t\t\t\t{fileParts.length > 0 && <Attachments files={fileParts} />}\n\t\t\t\t\t\t\t\t\t{hasTextContent\n\t\t\t\t\t\t\t\t\t\t? textParts.map((part, i) => (\n\t\t\t\t\t\t\t\t\t\t\t\t<MessageResponse key={`${message.id}-${i}`}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{part.type === \"text\" ? part.text : \"\"}\n\t\t\t\t\t\t\t\t\t\t\t\t</MessageResponse>\n\t\t\t\t\t\t\t\t\t\t\t))\n\t\t\t\t\t\t\t\t\t\t: isLastAssistant && isLoading && <Loader />}\n\t\t\t\t\t\t\t\t</MessageContent>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Message>\n\t\t\t\t);\n\t\t\t})}\n\t\t\t{!isFullscreenActive && showLoaderBubble && (\n\t\t\t\t<Message from=\"assistant\">\n\t\t\t\t\t<MessageContent>\n\t\t\t\t\t\t<Loader />\n\t\t\t\t\t</MessageContent>\n\t\t\t\t</Message>\n\t\t\t)}\n\t\t</>\n\t);\n}\n","\"use client\";\n\nimport type { HTMLAttributes } from \"react\";\nimport { cn } from \"../lib/utils\";\n\nexport interface SuggestionsProps\n\textends Omit<HTMLAttributes<HTMLDivElement>, \"onSelect\"> {\n\tsuggestions: string[];\n\tisLoading?: boolean;\n\tonSelect: (suggestion: string) => void;\n}\n\nexport function Suggestions({\n\tsuggestions,\n\tisLoading,\n\tonSelect,\n\tclassName,\n\t...props\n}: SuggestionsProps) {\n\tif (suggestions.length === 0 && !isLoading) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<div className={cn(\"ww:px-4 ww:py-2\", className)} {...props}>\n\t\t\t<div className=\"ww:mx-auto ww:w-full ww:max-w-3xl ww:flex ww:flex-wrap ww:gap-2\">\n\t\t\t\t{isLoading\n\t\t\t\t\t? [0, 1, 2].map((i) => (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tkey={i}\n\t\t\t\t\t\t\t\tclassName=\"ww:h-7 ww:rounded-full ww:bg-accent ww:animate-pulse\"\n\t\t\t\t\t\t\t\tstyle={{ width: `${60 + i * 20}px` }}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t))\n\t\t\t\t\t: suggestions.map((suggestion, index) => (\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\tkey={suggestion}\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tonClick={() => onSelect(suggestion)}\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\"ww:rounded-full ww:border ww:border-border ww:bg-background ww:px-3 ww:py-1 ww:text-xs\",\n\t\t\t\t\t\t\t\t\t\"ww:text-foreground ww:hover:bg-accent ww:hover:border-primary/30\",\n\t\t\t\t\t\t\t\t\t\"ww:transition-all ww:duration-200 ww:ease-out ww:cursor-pointer\",\n\t\t\t\t\t\t\t\t\t\"ww:animate-[ww-fade-in_0.2s_ease-out_both]\",\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\tstyle={{ animationDelay: `${index * 50}ms` }}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{suggestion}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t))}\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","\"use client\";\n\nimport { useCallback, useRef } from \"react\";\nimport type { CallToolHandler } from \"../@types\";\n\ntype CallToolParams = Parameters<CallToolHandler>[0];\ntype CallToolResult = Awaited<ReturnType<CallToolHandler>>;\n\n/**\n * Returns a stable `onCallTool` callback.\n * Uses the user-provided handler if available, otherwise POSTs to `${api}/tool`.\n */\nexport function useCallTool(props: {\n\tapi?: string;\n\theaders?: Record<string, string>;\n\tonCallTool?: CallToolHandler;\n\tsessionId?: string;\n}): CallToolHandler {\n\tconst propsRef = useRef(props);\n\tpropsRef.current = props;\n\n\treturn useCallback(\n\t\tasync (params: CallToolParams): Promise<CallToolResult> => {\n\t\t\tconst { api, headers, onCallTool, sessionId } = propsRef.current;\n\n\t\t\tif (onCallTool) {\n\t\t\t\treturn onCallTool(params);\n\t\t\t}\n\n\t\t\tconst endpoint = `${api ?? \"/api/waniwani\"}/tool`;\n\t\t\tconst normalizedSessionId =\n\t\t\t\ttypeof sessionId === \"string\" && sessionId.trim().length > 0\n\t\t\t\t\t? sessionId.trim()\n\t\t\t\t\t: undefined;\n\t\t\tconst res = await fetch(endpoint, {\n\t\t\t\tmethod: \"POST\",\n\t\t\t\theaders: {\n\t\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t\t...(normalizedSessionId\n\t\t\t\t\t\t? { \"X-Session-Id\": normalizedSessionId }\n\t\t\t\t\t\t: {}),\n\t\t\t\t\t...headers,\n\t\t\t\t},\n\t\t\t\tbody: JSON.stringify(params),\n\t\t\t});\n\n\t\t\tif (!res.ok) {\n\t\t\t\tthrow new Error(`Tool call failed: ${res.status} ${res.statusText}`);\n\t\t\t}\n\n\t\t\treturn res.json();\n\t\t},\n\t\t[],\n\t);\n}\n","\"use client\";\n\nimport { useChat } from \"@ai-sdk/react\";\nimport type { FileUIPart } from \"ai\";\nimport { DefaultChatTransport } from \"ai\";\nimport { nanoid } from \"nanoid\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { ModelContextUpdate } from \"../../../shared/model-context\";\nimport { hasModelContext } from \"../../../shared/model-context\";\nimport type { ChatBaseProps } from \"../@types\";\nimport type { PromptInputMessage } from \"../ai-elements/prompt-input\";\nimport type { VisitorContext } from \"../lib/visitor-context\";\nimport { collectVisitorContext } from \"../lib/visitor-context\";\n\nconst SESSION_HEADER_NAME = \"x-session-id\";\n\nfunction normalizeSessionId(value: unknown): string | undefined {\n\tif (typeof value !== \"string\") {\n\t\treturn undefined;\n\t}\n\tconst trimmed = value.trim();\n\treturn trimmed.length > 0 ? trimmed : undefined;\n}\n\nexport interface QueuedMessage {\n\tid: string;\n\ttext: string;\n\tfiles: FileUIPart[];\n\tmodelContext?: ModelContextUpdate;\n}\n\ntype ChatEngineMessage = PromptInputMessage & {\n\tmodelContext?: ModelContextUpdate;\n};\n\nexport function useChatEngine(props: ChatBaseProps) {\n\tconst {\n\t\tapi = \"/api/waniwani\",\n\t\theaders: userHeaders,\n\t\tbody,\n\t\tonMessageSent,\n\t\tonResponseReceived,\n\t} = props;\n\n\tconst headersRef = useRef(userHeaders);\n\tconst bodyRef = useRef(body);\n\tconst pendingModelContextRef = useRef<ModelContextUpdate | undefined>(\n\t\tundefined,\n\t);\n\tconst visitorContextRef = useRef<VisitorContext | null>(null);\n\tconst [sessionId, setSessionIdState] = useState<string | undefined>(\n\t\tundefined,\n\t);\n\tconst sessionIdRef = useRef<string | undefined>(sessionId);\n\n\tconst getSessionId = useCallback((): string | undefined => {\n\t\treturn sessionIdRef.current;\n\t}, []);\n\n\tconst setSessionId = useCallback((value: unknown) => {\n\t\tconst sessionId = normalizeSessionId(value);\n\t\tif (!sessionId) {\n\t\t\treturn;\n\t\t}\n\t\tif (sessionIdRef.current === sessionId) {\n\t\t\treturn;\n\t\t}\n\n\t\tsessionIdRef.current = sessionId;\n\t\tsetSessionIdState(sessionId);\n\t}, []);\n\n\tconst clearSessionId = useCallback(() => {\n\t\tsessionIdRef.current = undefined;\n\t\tsetSessionIdState(undefined);\n\t}, []);\n\n\tuseEffect(() => {\n\t\theadersRef.current = userHeaders;\n\t}, [userHeaders]);\n\n\tuseEffect(() => {\n\t\tbodyRef.current = body;\n\t}, [body]);\n\n\tuseEffect(() => {\n\t\tcollectVisitorContext()\n\t\t\t.then((ctx) => {\n\t\t\t\tvisitorContextRef.current = ctx;\n\t\t\t})\n\t\t\t.catch(() => {\n\t\t\t\t// Best-effort — silently ignore failures\n\t\t\t});\n\t}, []);\n\n\tconst transportRef = useRef(\n\t\tnew DefaultChatTransport({\n\t\t\tapi,\n\t\t\theaders: () => ({\n\t\t\t\t...headersRef.current,\n\t\t\t}),\n\t\t\tbody: () => {\n\t\t\t\tconst resolvedBody = {\n\t\t\t\t\t...(bodyRef.current ?? {}),\n\t\t\t\t};\n\n\t\t\t\tconst hasExplicitSessionId = Object.hasOwn(resolvedBody, \"sessionId\");\n\t\t\t\tconst bodySessionId = normalizeSessionId(resolvedBody.sessionId);\n\t\t\t\tif (bodySessionId) {\n\t\t\t\t\tsetSessionId(bodySessionId);\n\t\t\t\t\tresolvedBody.sessionId = bodySessionId;\n\t\t\t\t} else if (hasExplicitSessionId) {\n\t\t\t\t\tclearSessionId();\n\t\t\t\t\tdelete resolvedBody.sessionId;\n\t\t\t\t} else {\n\t\t\t\t\tconst storedSessionId = getSessionId();\n\t\t\t\t\tif (storedSessionId) {\n\t\t\t\t\t\tresolvedBody.sessionId = storedSessionId;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (hasModelContext(pendingModelContextRef.current)) {\n\t\t\t\t\tresolvedBody.modelContext = pendingModelContextRef.current;\n\t\t\t\t}\n\n\t\t\t\tif (visitorContextRef.current) {\n\t\t\t\t\tconst vc = visitorContextRef.current;\n\t\t\t\t\tresolvedBody.visitorContext = {\n\t\t\t\t\t\ttimezone: vc.timezone,\n\t\t\t\t\t\tlanguage: vc.language,\n\t\t\t\t\t\tlanguages: vc.languages,\n\t\t\t\t\t\tdeviceType: vc.deviceType,\n\t\t\t\t\t\treferrer: vc.referrer,\n\t\t\t\t\t\tvisitorId: vc.visitorId,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn resolvedBody;\n\t\t\t},\n\t\t\tfetch: async (input, init) => {\n\t\t\t\tconst response = await fetch(input, init);\n\t\t\t\tpendingModelContextRef.current = undefined;\n\t\t\t\tsetSessionId(response.headers.get(SESSION_HEADER_NAME));\n\t\t\t\treturn response;\n\t\t\t},\n\t\t}),\n\t);\n\n\tconst pendingWaitRef = useRef<{\n\t\tresolve: (msg: unknown) => void;\n\t\treject: (err: Error) => void;\n\t} | null>(null);\n\n\tconst { messages, sendMessage, setMessages, status } = useChat({\n\t\tmessages: props.initialMessages,\n\t\ttransport: transportRef.current,\n\t\tonFinish({ message }) {\n\t\t\tonResponseReceived?.();\n\t\t\tif (pendingWaitRef.current) {\n\t\t\t\tpendingWaitRef.current.resolve(message);\n\t\t\t\tpendingWaitRef.current = null;\n\t\t\t}\n\t\t},\n\t\tonError(error) {\n\t\t\tconsole.warn(\"[WaniWani] Chat error:\", error.message);\n\t\t\tif (pendingWaitRef.current) {\n\t\t\t\tpendingWaitRef.current.reject(error);\n\t\t\t\tpendingWaitRef.current = null;\n\t\t\t}\n\t\t},\n\t});\n\n\tconst [text, setText] = useState(\"\");\n\tconst [queuedMessages, setQueuedMessages] = useState<QueuedMessage[]>([]);\n\n\tconst isLoading = status === \"submitted\" || status === \"streaming\";\n\n\tconst removeQueuedMessage = useCallback((id: string) => {\n\t\tsetQueuedMessages((prev) => prev.filter((m) => m.id !== id));\n\t}, []);\n\n\tconst queueFull = isLoading && queuedMessages.length > 0;\n\n\tconst handleSubmit = useCallback(\n\t\t(message: ChatEngineMessage) => {\n\t\t\tconst hasText = Boolean(message.text?.trim());\n\t\t\tconst hasFiles = Boolean(message.files?.length);\n\t\t\tif (!(hasText || hasFiles)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (isLoading) {\n\t\t\t\t// Only allow one queued message at a time\n\t\t\t\tif (queuedMessages.length > 0) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tsetQueuedMessages((prev) => [\n\t\t\t\t\t...prev,\n\t\t\t\t\t{\n\t\t\t\t\t\tid: nanoid(),\n\t\t\t\t\t\ttext: message.text || \"\",\n\t\t\t\t\t\tfiles: message.files ?? [],\n\t\t\t\t\t\tmodelContext: message.modelContext,\n\t\t\t\t\t},\n\t\t\t\t]);\n\t\t\t\tsetText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tpendingModelContextRef.current = message.modelContext;\n\t\t\tsendMessage({\n\t\t\t\ttext: message.text || \"\",\n\t\t\t\tfiles: message.files,\n\t\t\t});\n\n\t\t\tonMessageSent?.(message.text || \"\");\n\t\t\tsetText(\"\");\n\t\t},\n\t\t[sendMessage, onMessageSent, isLoading, queuedMessages.length],\n\t);\n\n\tconst sendMessageAndWait = useCallback(\n\t\t(text: string): Promise<unknown> => {\n\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\tpendingWaitRef.current = { resolve, reject };\n\t\t\t\tsendMessage({ text });\n\t\t\t\tonMessageSent?.(text);\n\t\t\t});\n\t\t},\n\t\t[sendMessage, onMessageSent],\n\t);\n\n\t// Flush first queued message once the current response finishes\n\tuseEffect(() => {\n\t\tif (status !== \"ready\") {\n\t\t\treturn;\n\t\t}\n\t\tif (queuedMessages.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst [first, ...rest] = queuedMessages;\n\t\tsetQueuedMessages(rest);\n\n\t\tpendingModelContextRef.current = first.modelContext;\n\t\tsendMessage({\n\t\t\ttext: first.text,\n\t\t\tfiles: first.files.length > 0 ? first.files : undefined,\n\t\t});\n\t\tonMessageSent?.(first.text);\n\t}, [status, sendMessage, onMessageSent, queuedMessages]);\n\n\tconst reset = useCallback(() => {\n\t\tsetMessages([]);\n\t\tsetQueuedMessages([]);\n\t\tclearSessionId();\n\t\tsetText(\"\");\n\t}, [setMessages, clearSessionId]);\n\n\tconst handleTextChange = useCallback(\n\t\t(e: React.ChangeEvent<HTMLTextAreaElement>) => {\n\t\t\tsetText(e.target.value);\n\t\t},\n\t\t[],\n\t);\n\n\tconst lastMessage = messages[messages.length - 1];\n\tconst hasMessages = messages.length > 0;\n\tconst showLoaderBubble =\n\t\tisLoading && (!hasMessages || lastMessage.role === \"user\");\n\n\treturn {\n\t\tmessages,\n\t\tstatus,\n\t\ttext,\n\t\tsetText,\n\t\thandleSubmit,\n\t\thandleTextChange,\n\t\tisLoading,\n\t\tshowLoaderBubble,\n\t\tlastMessage,\n\t\thasMessages,\n\t\tsendMessage,\n\t\tsendMessageAndWait,\n\t\treset,\n\t\tqueuedMessages,\n\t\tqueueFull,\n\t\tremoveQueuedMessage,\n\t\tsessionId,\n\t};\n}\n","const VISITOR_ID_KEY = \"waniwani-visitor-id\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface VisitorContext {\n\tuserAgent: string;\n\tbrowser: { name: string; version: string } | null;\n\tos: { name: string; version: string } | null;\n\tdeviceType: \"mobile\" | \"tablet\" | \"desktop\";\n\tlanguage: string;\n\tlanguages: string[];\n\ttimezone: string;\n\tscreenWidth: number;\n\tscreenHeight: number;\n\tviewportWidth: number;\n\tviewportHeight: number;\n\tcolorDepth: number;\n\tdevicePixelRatio: number;\n\ttouchSupport: boolean;\n\tconnectionType: string;\n\treferrer: string;\n\tvisitorId: string;\n}\n\n// ============================================================================\n// UA Parsing\n// ============================================================================\n\nfunction match(ua: string, pattern: RegExp): string | null {\n\tconst m = ua.match(pattern);\n\treturn m?.[1] ?? null;\n}\n\nexport function parseBrowser(\n\tua: string,\n): { name: string; version: string } | null {\n\t// Order matters — Edge/Opera contain \"Chrome\", so check them first\n\tconst browsers: [string, RegExp][] = [\n\t\t[\"Edge\", /Edg(?:e|A|iOS)?\\/(\\S+)/],\n\t\t[\"Opera\", /(?:OPR|Opera)\\/(\\S+)/],\n\t\t[\"Samsung Internet\", /SamsungBrowser\\/(\\S+)/],\n\t\t[\"Firefox\", /Firefox\\/(\\S+)/],\n\t\t[\"Chrome\", /Chrome\\/(\\S+)/],\n\t\t[\"Safari\", /Version\\/(\\S+).*Safari/],\n\t];\n\n\tfor (const [name, pattern] of browsers) {\n\t\tconst version = match(ua, pattern);\n\t\tif (version) {\n\t\t\treturn { name, version };\n\t\t}\n\t}\n\treturn null;\n}\n\nexport function parseOS(ua: string): { name: string; version: string } | null {\n\tconst systems: [string, RegExp][] = [\n\t\t[\"iOS\", /(?:iPhone|iPad|iPod).+?OS (\\d+[_.\\d]*)/],\n\t\t[\"Android\", /Android (\\d+[.\\d]*)/],\n\t\t[\"macOS\", /Mac OS X (\\d+[_.\\d]*)/],\n\t\t[\"Windows\", /Windows NT (\\d+[.\\d]*)/],\n\t\t[\"ChromeOS\", /CrOS \\S+ (\\d+[.\\d]*)/],\n\t\t[\"Linux\", /Linux/],\n\t];\n\n\tfor (const [name, pattern] of systems) {\n\t\tconst version = match(ua, pattern);\n\t\tif (version) {\n\t\t\treturn { name, version: version.replace(/_/g, \".\") };\n\t\t}\n\t\tif (name === \"Linux\" && pattern.test(ua)) {\n\t\t\treturn { name, version: \"\" };\n\t\t}\n\t}\n\treturn null;\n}\n\nexport function detectDeviceType(ua: string): \"mobile\" | \"tablet\" | \"desktop\" {\n\t// Use UA-CH if available\n\tif (\n\t\ttypeof navigator !== \"undefined\" &&\n\t\t\"userAgentData\" in navigator &&\n\t\t// biome-ignore lint/suspicious/noExplicitAny: userAgentData is not typed\n\t\t(navigator as any).userAgentData?.mobile\n\t) {\n\t\treturn \"mobile\";\n\t}\n\n\tif (/iPad|tablet|PlayBook/i.test(ua)) {\n\t\treturn \"tablet\";\n\t}\n\tif (/Mobi|Android.*Mobile|iPhone|iPod/i.test(ua)) {\n\t\treturn \"mobile\";\n\t}\n\treturn \"desktop\";\n}\n\n// ============================================================================\n// Visitor ID (property-based hash, persisted in localStorage)\n// ============================================================================\n\nasync function sha256(input: string): Promise<string> {\n\tconst data = new TextEncoder().encode(input);\n\tconst hash = await crypto.subtle.digest(\"SHA-256\", data);\n\treturn Array.from(new Uint8Array(hash))\n\t\t.map((b) => b.toString(16).padStart(2, \"0\"))\n\t\t.join(\"\");\n}\n\nasync function computeVisitorId(): Promise<string> {\n\t// Try localStorage first\n\ttry {\n\t\tconst stored = localStorage.getItem(VISITOR_ID_KEY);\n\t\tif (stored) {\n\t\t\treturn stored;\n\t\t}\n\t} catch {\n\t\t// localStorage unavailable (private browsing, security policy)\n\t}\n\n\tconst raw = [\n\t\tnavigator.userAgent,\n\t\tscreen.width,\n\t\tscreen.height,\n\t\tscreen.colorDepth,\n\t\tIntl.DateTimeFormat().resolvedOptions().timeZone,\n\t\tnavigator.language,\n\t\tnavigator.hardwareConcurrency ?? \"\",\n\t\tnavigator.platform ?? \"\",\n\t].join(\"|\");\n\n\tconst id = await sha256(raw);\n\n\ttry {\n\t\tlocalStorage.setItem(VISITOR_ID_KEY, id);\n\t} catch {\n\t\t// Ignore storage failures\n\t}\n\n\treturn id;\n}\n\n// ============================================================================\n// Main export\n// ============================================================================\n\nexport async function collectVisitorContext(): Promise<VisitorContext> {\n\tconst ua = navigator.userAgent;\n\tconst visitorId = await computeVisitorId();\n\n\treturn {\n\t\tuserAgent: ua,\n\t\tbrowser: parseBrowser(ua),\n\t\tos: parseOS(ua),\n\t\tdeviceType: detectDeviceType(ua),\n\t\tlanguage: navigator.language,\n\t\tlanguages: [...navigator.languages],\n\t\ttimezone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n\t\tscreenWidth: screen.width,\n\t\tscreenHeight: screen.height,\n\t\tviewportWidth: window.innerWidth,\n\t\tviewportHeight: window.innerHeight,\n\t\tcolorDepth: screen.colorDepth,\n\t\tdevicePixelRatio: window.devicePixelRatio ?? 1,\n\t\ttouchSupport: \"ontouchstart\" in window || navigator.maxTouchPoints > 0,\n\t\t// biome-ignore lint/suspicious/noExplicitAny: navigator.connection is not typed\n\t\tconnectionType: (navigator as any).connection?.effectiveType ?? \"unknown\",\n\t\treferrer: document.referrer,\n\t\tvisitorId,\n\t};\n}\n","\"use client\";\n\nimport { useEffect, useState } from \"react\";\n\nexport interface WaniWaniConfig {\n\tdebug: boolean;\n\teval: boolean;\n}\n\nconst defaultConfig: WaniWaniConfig = { debug: false, eval: false };\n\nexport function useConfig(api = \"/api/waniwani\"): WaniWaniConfig {\n\tconst [config, setConfig] = useState<WaniWaniConfig>(defaultConfig);\n\n\tuseEffect(() => {\n\t\t(async () => {\n\t\t\ttry {\n\t\t\t\tconst r = await fetch(`${api}/config`);\n\t\t\t\tconst data = await r.json();\n\t\t\t\tsetConfig({\n\t\t\t\t\tdebug: data.debug === true,\n\t\t\t\t\teval: data.eval === true,\n\t\t\t\t});\n\t\t\t} catch {}\n\t\t})();\n\t}, [api]);\n\n\treturn config;\n}\n","\"use client\";\n\nimport type { ChatStatus, UIMessage } from \"ai\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { SuggestionsConfig } from \"../@types\";\n\nexport interface UseSuggestionsOptions {\n\tmessages: UIMessage[];\n\tstatus: ChatStatus;\n\tconfig?: boolean | SuggestionsConfig;\n}\n\n/**\n * Extract suggestions from the last assistant message's data part.\n * The API streams a `data-suggestions` part at the end of the response:\n * `{ type: \"data-suggestions\", data: { suggestions: string[] } }`\n */\nfunction extractSuggestions(message: UIMessage): string[] | null {\n\tfor (const part of message.parts) {\n\t\tconst p = part as Record<string, unknown>;\n\t\t// Handle both \"data-suggestions\" and generic \"data\" part types\n\t\tif (p.type === \"data\" || p.type === \"data-suggestions\") {\n\t\t\tconst data = p.data as Record<string, unknown> | undefined;\n\t\t\tif (data && Array.isArray(data.suggestions)) {\n\t\t\t\treturn data.suggestions as string[];\n\t\t\t}\n\t\t}\n\t}\n\treturn null;\n}\n\nfunction isConfigObject(\n\tconfig: boolean | SuggestionsConfig | undefined,\n): config is SuggestionsConfig {\n\treturn typeof config === \"object\" && config !== null && \"initial\" in config;\n}\n\nexport function useSuggestions(options: UseSuggestionsOptions) {\n\tconst { messages, status, config } = options;\n\n\tconst [suggestions, setSuggestions] = useState<string[]>(\n\t\t(isConfigObject(config) && config.initial ? config.initial : []) ?? [],\n\t);\n\tconst prevStatusRef = useRef<ChatStatus>(status);\n\n\tconst isDynamicEnabled =\n\t\tconfig === true || (isConfigObject(config) && config.dynamic !== false);\n\n\tconst clear = useCallback(() => {\n\t\tsetSuggestions([]);\n\t}, []);\n\n\t// Clear when a new user message arrives\n\tconst lastMessage = messages[messages.length - 1];\n\tuseEffect(() => {\n\t\tif (lastMessage?.role === \"user\") {\n\t\t\tclear();\n\t\t}\n\t}, [lastMessage, clear]);\n\n\t// Extract suggestions from message parts on streaming → ready transition\n\tuseEffect(() => {\n\t\tconst prevStatus = prevStatusRef.current;\n\t\tprevStatusRef.current = status;\n\n\t\tif (prevStatus === \"streaming\" && status === \"ready\" && isDynamicEnabled) {\n\t\t\tconst lastAssistant = [...messages]\n\t\t\t\t.reverse()\n\t\t\t\t.find((m) => m.role === \"assistant\");\n\t\t\tif (!lastAssistant) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconsole.log(\"[WaniWani] Assistant parts:\", lastAssistant.parts);\n\n\t\t\tconst extracted = extractSuggestions(lastAssistant);\n\t\t\tconsole.log(\"[WaniWani] Extracted suggestions:\", extracted);\n\t\t\tif (extracted) {\n\t\t\t\tsetSuggestions(extracted);\n\t\t\t}\n\t\t}\n\t}, [status, isDynamicEnabled, messages]);\n\n\treturn { suggestions, isLoading: false, clear };\n}\n","import { useEffect, useRef, useState } from \"react\";\n\nconst TYPE_SPEED_MS = 50;\nconst DELETE_SPEED_MS = 30;\nconst PAUSE_AFTER_TYPE_MS = 2000;\nconst PAUSE_AFTER_DELETE_MS = 500;\n\n/**\n * Returns a string that animates like someone typing and deleting the placeholder text.\n * Only animates when `active` is true (i.e. the input is empty).\n */\nexport function useTypingPlaceholder(text: string, active = true): string {\n\tconst [displayed, setDisplayed] = useState(\"\");\n\tconst timerRef = useRef<ReturnType<typeof setTimeout>>(undefined);\n\n\tuseEffect(() => {\n\t\tif (!active) {\n\t\t\t// Reset so the animation restarts fresh when re-activated\n\t\t\tsetDisplayed(\"\");\n\t\t\treturn;\n\t\t}\n\n\t\tlet i = 0;\n\t\tlet deleting = false;\n\t\tlet disposed = false;\n\n\t\tconst tick = () => {\n\t\t\tif (disposed) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!deleting) {\n\t\t\t\t// Typing forward\n\t\t\t\ti++;\n\t\t\t\tsetDisplayed(text.slice(0, i));\n\n\t\t\t\tif (i >= text.length) {\n\t\t\t\t\t// Finished typing — pause then start deleting\n\t\t\t\t\tdeleting = true;\n\t\t\t\t\ttimerRef.current = setTimeout(tick, PAUSE_AFTER_TYPE_MS);\n\t\t\t\t} else {\n\t\t\t\t\ttimerRef.current = setTimeout(tick, TYPE_SPEED_MS);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Deleting\n\t\t\t\ti--;\n\t\t\t\tsetDisplayed(text.slice(0, i));\n\n\t\t\t\tif (i <= 0) {\n\t\t\t\t\t// Finished deleting — pause then start typing again\n\t\t\t\t\tdeleting = false;\n\t\t\t\t\ttimerRef.current = setTimeout(tick, PAUSE_AFTER_DELETE_MS);\n\t\t\t\t} else {\n\t\t\t\t\ttimerRef.current = setTimeout(tick, DELETE_SPEED_MS);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t// Start after a small delay\n\t\ttimerRef.current = setTimeout(tick, PAUSE_AFTER_DELETE_MS);\n\n\t\treturn () => {\n\t\t\tdisposed = true;\n\t\t\tclearTimeout(timerRef.current);\n\t\t};\n\t}, [text, active]);\n\n\treturn displayed;\n}\n","import type { ChatTheme } from \"./@types\";\n\nexport const DEFAULT_THEME: Required<ChatTheme> = {\n\tprimaryColor: \"#6366f1\",\n\tprimaryForeground: \"#1f2937\",\n\tbackgroundColor: \"#ffffff\",\n\ttextColor: \"#1f2937\",\n\tmutedColor: \"#6b7280\",\n\tborderColor: \"#e5e7eb\",\n\tassistantBubbleColor: \"#f3f4f6\",\n\tuserBubbleColor: \"#f4f4f4\",\n\tinputBackgroundColor: \"#f9fafb\",\n\tborderRadius: 16,\n\tmessageBorderRadius: 12,\n\tfontFamily: \"system-ui, -apple-system, 'Segoe UI', sans-serif\",\n\theaderBackgroundColor: \"#ffffff\",\n\theaderTextColor: \"#1f2937\",\n\tstatusColor: \"#22c55e\",\n\ttoolCardColor: \"#f4f4f5\",\n};\n\nexport const DARK_THEME: ChatTheme = {\n\tbackgroundColor: \"#212121\",\n\theaderBackgroundColor: \"#1e1e1e\",\n\theaderTextColor: \"#ececec\",\n\ttextColor: \"#ececec\",\n\tprimaryForeground: \"#ffffff\",\n\tmutedColor: \"#8e8ea0\",\n\tborderColor: \"#444444\",\n\tassistantBubbleColor: \"#2f2f2f\",\n\tuserBubbleColor: \"#303030\",\n\tinputBackgroundColor: \"#2f2f2f\",\n\tprimaryColor: \"#6366f1\",\n\tstatusColor: \"#22c55e\",\n\ttoolCardColor: \"#262626\",\n};\n\nconst CSS_VAR_MAP: Record<keyof ChatTheme, string[]> = {\n\tprimaryColor: [\"--ww-primary\", \"--ww-color-primary\"],\n\tprimaryForeground: [\"--ww-primary-fg\", \"--ww-color-primary-foreground\"],\n\tbackgroundColor: [\"--ww-bg\", \"--ww-color-background\"],\n\ttextColor: [\n\t\t\"--ww-text\",\n\t\t\"--ww-color-foreground\",\n\t\t\"--ww-color-accent-foreground\",\n\t],\n\tmutedColor: [\"--ww-muted\", \"--ww-color-muted-foreground\"],\n\tborderColor: [\"--ww-border\", \"--ww-color-border\"],\n\tassistantBubbleColor: [\"--ww-assistant-bubble\", \"--ww-color-accent\"],\n\tuserBubbleColor: [\"--ww-user-bubble\"],\n\tinputBackgroundColor: [\"--ww-input-bg\", \"--ww-color-input\"],\n\tborderRadius: [\"--ww-radius\"],\n\tmessageBorderRadius: [\"--ww-msg-radius\"],\n\tfontFamily: [\"--ww-font\"],\n\theaderBackgroundColor: [\"--ww-header-bg\"],\n\theaderTextColor: [\"--ww-header-text\"],\n\tstatusColor: [\"--ww-status\"],\n\ttoolCardColor: [\"--ww-tool-card\", \"--ww-color-tool-card\"],\n};\n\nexport function mergeTheme(userTheme?: ChatTheme): Required<ChatTheme> {\n\treturn { ...DEFAULT_THEME, ...userTheme };\n}\n\nexport function isDarkTheme(theme: Required<ChatTheme>): boolean {\n\tconst hex = theme.backgroundColor.replace(\"#\", \"\");\n\tconst r = parseInt(hex.substring(0, 2), 16);\n\tconst g = parseInt(hex.substring(2, 4), 16);\n\tconst b = parseInt(hex.substring(4, 6), 16);\n\treturn (r * 299 + g * 587 + b * 114) / 1000 < 128;\n}\n\nexport function themeToCSSProperties(\n\ttheme: Required<ChatTheme>,\n): Record<string, string> {\n\tconst vars: Record<string, string> = {};\n\tfor (const [key, cssVars] of Object.entries(CSS_VAR_MAP)) {\n\t\tconst value = theme[key as keyof ChatTheme];\n\t\tconst resolved = typeof value === \"number\" ? `${value}px` : String(value);\n\t\tfor (const cssVar of cssVars) {\n\t\t\tvars[cssVar] = resolved;\n\t\t}\n\t}\n\treturn vars;\n}\n","\"use client\";\n\nimport { type RefObject, useRef, useState } from \"react\";\nimport type { ChatHandle } from \"../@types\";\nimport { useConfig } from \"../hooks/use-config\";\nimport { type EvalScenario, useScenarios } from \"../hooks/use-scenarios\";\nimport { cn } from \"../lib/utils\";\n\n// ---- Types ----\n\ntype ScenarioPart = { type: string; [key: string]: unknown };\ntype ScenarioMessage = {\n\tid: string;\n\trole: \"user\" | \"assistant\" | \"system\" | \"data\";\n\tparts: ScenarioPart[];\n};\n\n// ---- Replay helpers ----\n\nfunction getUserText(msg: ScenarioMessage): string {\n\treturn msg.parts\n\t\t.filter(\n\t\t\t(p): p is { type: \"text\"; text: string } =>\n\t\t\t\tp.type === \"text\" && typeof (p as { text?: unknown }).text === \"string\",\n\t\t)\n\t\t.map((p) => p.text)\n\t\t.join(\"\");\n}\n\n// ---- Sub-components ----\n\nfunction ScenarioSkeleton() {\n\treturn (\n\t\t<div className=\"ww:px-3 ww:py-2 ww:space-y-3\">\n\t\t\t{[1, 2, 3, 4].map((i) => (\n\t\t\t\t<div key={i} className=\"ww:flex ww:items-center ww:gap-2\">\n\t\t\t\t\t<div className=\"ww:h-1.5 ww:w-1.5 ww:rounded-full ww:bg-muted-foreground/20 ww:shrink-0 ww:animate-pulse\" />\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"ww:h-3.5 ww:rounded ww:bg-muted-foreground/10 ww:animate-pulse\"\n\t\t\t\t\t\tstyle={{ width: `${50 + i * 10}%`, animationDelay: `${i * 100}ms` }}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t))}\n\t\t</div>\n\t);\n}\n\n// ---- Main component ----\n\nconst PANEL_WIDTH = 320;\n\ntype ScenarioPanelProps = {\n\t/** API endpoint to fetch scenarios from\n\t *\n\t * @default \"/api/waniwani\"\n\t */\n\tapi?: string;\n\t/** Ref to the ChatCard or ChatBar so scenario turns flow through the chat UI */\n\tchatRef: RefObject<ChatHandle | null>;\n};\n\n/**\n * Dev-only scenario panel for replaying recorded scenarios through the chat.\n *\n * This component is automatically tree-shaken from production builds —\n * it returns `null` when `process.env.NODE_ENV === \"production\"`.\n *\n * To populate scenarios, set `WANIWANI_EVAL=1` in your `.env` and add\n * scenario files to `evals/scenarios/`.\n */\nexport function ScenarioPanel({ api, chatRef }: ScenarioPanelProps) {\n\tconst effectiveApi = api ?? \"/api/waniwani\";\n\tconst [selected, setSelected] = useState<EvalScenario | null>(null);\n\tconst [running, setRunning] = useState(false);\n\tconst abortRef = useRef<AbortController | null>(null);\n\tconst config = useConfig(effectiveApi);\n\tconst { scenarios, isLoading, reload } = useScenarios(\n\t\teffectiveApi,\n\t\tconfig.eval,\n\t);\n\n\tasync function runScenario(scenario: EvalScenario) {\n\t\tabortRef.current?.abort();\n\t\tabortRef.current = new AbortController();\n\t\tsetRunning(true);\n\n\t\ttry {\n\t\t\tif (!chatRef?.current) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"ScenarioPanel requires a chatRef prop pointing to the ChatCard/ChatBar\",\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tchatRef.current.reset();\n\n\t\t\tconst userMessages = scenario.messages.filter(\n\t\t\t\t(msg) => msg.role === \"user\",\n\t\t\t);\n\n\t\t\tfor (const msg of userMessages) {\n\t\t\t\tconst text = getUserText(msg);\n\t\t\t\tif (text) {\n\t\t\t\t\tawait chatRef.current.sendMessageAndWait(text);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tif ((e as Error).name !== \"AbortError\") {\n\t\t\t\tconsole.error(\"[ScenarioPanel] run failed:\", e);\n\t\t\t}\n\t\t} finally {\n\t\t\tsetRunning(false);\n\t\t}\n\t}\n\n\tif (!config.eval) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName=\"ww:flex ww:flex-col ww:h-full ww:overflow-hidden ww:text-foreground ww:border-l ww:border-border ww:shrink-0\"\n\t\t\tstyle={{ width: PANEL_WIDTH }}\n\t\t>\n\t\t\t{/* Header */}\n\t\t\t<div className=\"ww:px-3 ww:py-2 ww:border-b ww:border-border/50 ww:flex ww:items-center ww:justify-between\">\n\t\t\t\t<span className=\"ww:text-[10px] ww:font-mono ww:uppercase ww:tracking-widest ww:text-muted-foreground\">\n\t\t\t\t\tScenarios\n\t\t\t\t</span>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={reload}\n\t\t\t\t\tclassName=\"ww:text-muted-foreground ww:hover:text-foreground ww:transition-colors ww:cursor-pointer\"\n\t\t\t\t\ttitle=\"Reload scenarios\"\n\t\t\t\t>\n\t\t\t\t\t<svg\n\t\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\t\t\twidth=\"12\"\n\t\t\t\t\t\theight=\"12\"\n\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\tstrokeWidth=\"2\"\n\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\trole=\"img\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<title>Reload scenarios</title>\n\t\t\t\t\t\t<path d=\"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8\" />\n\t\t\t\t\t\t<path d=\"M21 3v5h-5\" />\n\t\t\t\t\t</svg>\n\t\t\t\t</button>\n\t\t\t</div>\n\n\t\t\t{/* Scenario list */}\n\t\t\t<div className=\"ww:flex-1 ww:overflow-y-auto ww:min-h-0\">\n\t\t\t\t{isLoading ? (\n\t\t\t\t\t<ScenarioSkeleton />\n\t\t\t\t) : scenarios.length === 0 ? (\n\t\t\t\t\t<p className=\"ww:text-xs ww:font-mono ww:text-muted-foreground ww:text-center ww:py-8 ww:px-4\">\n\t\t\t\t\t\tNo scenarios found\n\t\t\t\t\t</p>\n\t\t\t\t) : (\n\t\t\t\t\tscenarios.map((s) => (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tkey={s.name}\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tonClick={() => setSelected(s)}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"ww:w-full ww:text-left ww:px-3 ww:py-2 ww:text-xs ww:font-mono ww:transition-colors ww:border-l-2\",\n\t\t\t\t\t\t\t\tselected?.name === s.name\n\t\t\t\t\t\t\t\t\t? \"ww:border-[#03d916] ww:bg-[#03d916]/5 ww:text-foreground\"\n\t\t\t\t\t\t\t\t\t: \"ww:border-transparent ww:text-foreground/70 ww:hover:text-foreground ww:hover:bg-muted/30\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span className=\"ww:block ww:truncate\">{s.name}</span>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t))\n\t\t\t\t)}\n\t\t\t</div>\n\n\t\t\t{/* Run */}\n\t\t\t{selected && (\n\t\t\t\t<div className=\"ww:border-t ww:border-border/50 ww:p-3\">\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tonClick={() => runScenario(selected)}\n\t\t\t\t\t\tdisabled={running}\n\t\t\t\t\t\tclassName=\"ww:w-full ww:py-2 ww:rounded-md ww:text-xs ww:font-mono ww:font-medium ww:bg-foreground ww:text-background ww:hover:opacity-90 ww:disabled:opacity-50 ww:transition-opacity ww:cursor-pointer\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{running ? \"Running...\" : \"Run scenario\"}\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","\"use client\";\n\nimport { useCallback, useEffect, useState } from \"react\";\n\ntype ScenarioPart = { type: string; [key: string]: unknown };\ntype ScenarioMessage = {\n\tid: string;\n\trole: \"user\" | \"assistant\" | \"system\" | \"data\";\n\tparts: ScenarioPart[];\n};\nexport type EvalScenario = {\n\tname: string;\n\ttype?: \"regulatory\" | \"functional\" | \"adversarial\";\n\tmode?: \"regenerate\" | \"inject\";\n\toutcome?: { toolsCalled: string[] };\n\tmessages: ScenarioMessage[];\n};\n\nexport function useScenarios(api: string, enabled: boolean) {\n\tconst [scenarios, setScenarios] = useState<EvalScenario[]>([]);\n\tconst [isLoading, setIsLoading] = useState(false);\n\n\tconst load = useCallback(() => {\n\t\tif (!enabled) {\n\t\t\treturn;\n\t\t}\n\t\tsetIsLoading(true);\n\t\tfetch(`${api}/scenarios`)\n\t\t\t.then((r) => r.json())\n\t\t\t.then((data: EvalScenario[]) => setScenarios(data))\n\t\t\t.catch(() => {})\n\t\t\t.finally(() => setIsLoading(false));\n\t}, [api, enabled]);\n\n\tuseEffect(() => {\n\t\tload();\n\t}, [load]);\n\n\treturn { scenarios, isLoading, reload: load };\n}\n","\"use client\";\n\nimport {\n\tforwardRef,\n\tuseCallback,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseRef,\n\tuseState,\n} from \"react\";\nimport type { ModelContextUpdate } from \"../../../shared/model-context\";\nimport type { ChatCardProps, ChatHandle } from \"../@types\";\nimport {\n\tConversation,\n\tConversationContent,\n\tConversationScrollButton,\n} from \"../ai-elements/conversation\";\nimport {\n\tPromptInput,\n\tPromptInputAddAttachments,\n\tPromptInputSubmit,\n\tPromptInputTextarea,\n} from \"../ai-elements/prompt-input\";\nimport { ChatQueue } from \"../components/chat-queue\";\nimport { ExportSessionButton } from \"../components/export-session\";\nimport { MessageList } from \"../components/message-list\";\nimport { Suggestions } from \"../components/suggestions\";\nimport { useCallTool } from \"../hooks/use-call-tool\";\nimport { useChatEngine } from \"../hooks/use-chat-engine\";\nimport { useConfig } from \"../hooks/use-config\";\nimport { useSuggestions } from \"../hooks/use-suggestions\";\nimport { useTypingPlaceholder } from \"../hooks/use-typing-placeholder\";\nimport { cn } from \"../lib/utils\";\nimport { isDarkTheme, mergeTheme, themeToCSSProperties } from \"../theme\";\n\nexport const ChatCard = forwardRef<ChatHandle, ChatCardProps>(\n\tfunction ChatCard(props, ref) {\n\t\tconst {\n\t\t\ttheme: userTheme,\n\t\t\ttitle = \"Assistant\",\n\n\t\t\twidth,\n\t\t\theight,\n\t\t\tclassName,\n\t\t\tallowAttachments = false,\n\t\t\twelcomeMessage,\n\t\t\twelcome,\n\t\t\tplaceholder = \"Ask me anything...\",\n\t\t\ttriggerEvent = \"triggerDemoRequest\",\n\t\t\tapi,\n\t\t\tdebug,\n\t\t} = props;\n\n\t\tconst effectiveApi = api ?? \"/api/waniwani\";\n\t\tconst effectiveResourceEndpoint = `${effectiveApi}/resource`;\n\n\t\tconst resolvedTheme = mergeTheme(userTheme);\n\t\tconst cssVars = themeToCSSProperties(resolvedTheme);\n\t\tconst isDark = isDarkTheme(resolvedTheme);\n\n\t\tconst config = useConfig(effectiveApi);\n\t\tconst effectiveDebug = debug ?? config.debug;\n\n\t\tconst engine = useChatEngine({ ...props, api: effectiveApi });\n\t\tconst handleCallTool = useCallTool({\n\t\t\t...props,\n\t\t\tapi: effectiveApi,\n\t\t\tsessionId: engine.sessionId,\n\t\t});\n\n\t\tconst animatedPlaceholder = useTypingPlaceholder(placeholder, !engine.text);\n\n\t\tconst [isHighlighted, setIsHighlighted] = useState(false);\n\t\tconst [fullscreenToolCallId, setFullscreenToolCallId] = useState<\n\t\t\tstring | null\n\t\t>(null);\n\t\tconst cardRef = useRef<HTMLDivElement>(null);\n\t\tconst highlightTimerRef = useRef<ReturnType<typeof setTimeout>>(undefined);\n\n\t\tconst focusInput = useCallback(() => {\n\t\t\tconst container = cardRef.current;\n\t\t\tif (!container) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcontainer.scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n\t\t\tconst textarea = container.querySelector(\"textarea\");\n\t\t\tif (textarea) {\n\t\t\t\tsetTimeout(() => textarea.focus(), 300);\n\t\t\t}\n\t\t\tsetIsHighlighted(true);\n\t\t\tclearTimeout(highlightTimerRef.current);\n\t\t\thighlightTimerRef.current = setTimeout(\n\t\t\t\t() => setIsHighlighted(false),\n\t\t\t\t2000,\n\t\t\t);\n\t\t}, []);\n\n\t\tconst suggestionsState = useSuggestions({\n\t\t\tmessages: engine.messages,\n\t\t\tstatus: engine.status,\n\t\t\tconfig: props.suggestions,\n\t\t});\n\n\t\tconst handleWidgetMessage = useCallback(\n\t\t\t(message: {\n\t\t\t\trole: string;\n\t\t\t\tcontent: Array<{ type: string; text?: string }>;\n\t\t\t\tmodelContext?: ModelContextUpdate;\n\t\t\t}) => {\n\t\t\t\tconst text = message.content\n\t\t\t\t\t.map((c) => c.text ?? \"\")\n\t\t\t\t\t.join(\"\")\n\t\t\t\t\t.trim();\n\t\t\t\tif (text) {\n\t\t\t\t\tengine.handleSubmit({\n\t\t\t\t\t\ttext,\n\t\t\t\t\t\tfiles: [],\n\t\t\t\t\t\tmodelContext: message.modelContext,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t\t[engine.handleSubmit],\n\t\t);\n\n\t\tconst handleSuggestionSelect = useCallback(\n\t\t\t(suggestion: string) => {\n\t\t\t\tsuggestionsState.clear();\n\t\t\t\tengine.handleSubmit({ text: suggestion, files: [] });\n\t\t\t},\n\t\t\t[suggestionsState.clear, engine.handleSubmit],\n\t\t);\n\n\t\tuseImperativeHandle(\n\t\t\tref,\n\t\t\t() => ({\n\t\t\t\tsendMessage: (text: string) => {\n\t\t\t\t\tengine.handleSubmit({ text, files: [] });\n\t\t\t\t\tfocusInput();\n\t\t\t\t},\n\t\t\t\tsendMessageAndWait: (text: string) => engine.sendMessageAndWait(text),\n\t\t\t\treset: engine.reset,\n\t\t\t\tfocus: focusInput,\n\t\t\t\tget messages() {\n\t\t\t\t\treturn engine.messages;\n\t\t\t\t},\n\t\t\t}),\n\t\t\t[\n\t\t\t\tengine.handleSubmit,\n\t\t\t\tengine.sendMessageAndWait,\n\t\t\t\tengine.reset,\n\t\t\t\tengine.messages,\n\t\t\t\tfocusInput,\n\t\t\t],\n\t\t);\n\n\t\t// Listen for custom trigger event (e.g. \"triggerDemoRequest\")\n\t\tuseEffect(() => {\n\t\t\tif (!triggerEvent) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst handler = (e: Event) => {\n\t\t\t\tconst detail = (e as CustomEvent).detail;\n\t\t\t\tconst message =\n\t\t\t\t\ttypeof detail?.message === \"string\" ? detail.message : undefined;\n\t\t\t\tif (message) {\n\t\t\t\t\tengine.handleSubmit({ text: message, files: [] });\n\t\t\t\t}\n\t\t\t\tfocusInput();\n\t\t\t};\n\t\t\twindow.addEventListener(triggerEvent, handler);\n\t\t\treturn () => window.removeEventListener(triggerEvent, handler);\n\t\t}, [triggerEvent, engine.handleSubmit, focusInput]);\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={cardRef}\n\t\t\t\tstyle={{ ...cssVars, width, height }}\n\t\t\t\tdata-waniwani-chat=\"\"\n\t\t\t\tdata-waniwani-layout=\"card\"\n\t\t\t\t{...(isDark ? { \"data-waniwani-dark\": \"\" } : {})}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"ww:flex ww:flex-col ww:font-[family-name:var(--ww-font)] ww:text-foreground ww:bg-background ww:rounded-[var(--ww-radius)] ww:overflow-hidden\",\n\t\t\t\t\tisHighlighted &&\n\t\t\t\t\t\t\"ww:ring-2 ww:ring-blue-400/70 ww:ring-offset-2 ww:ring-offset-background\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{/* Header */}\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"ww:shrink-0 ww:flex ww:items-center ww:px-6 ww:py-3\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tbackgroundColor: resolvedTheme.headerBackgroundColor,\n\t\t\t\t\t\tcolor: resolvedTheme.headerTextColor,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<div className=\"ww:text-sm ww:font-semibold ww:truncate\">{title}</div>\n\t\t\t\t\t<ExportSessionButton\n\t\t\t\t\t\tmessages={engine.messages}\n\t\t\t\t\t\tevalEnabled={config.eval}\n\t\t\t\t\t\tapi={effectiveApi}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\n\t\t\t\t{/* Messages */}\n\t\t\t\t<Conversation className=\"ww:flex-1 ww:min-h-0 ww:bg-background\">\n\t\t\t\t\t<ConversationContent\n\t\t\t\t\t\tscrollClassName={\n\t\t\t\t\t\t\tfullscreenToolCallId\n\t\t\t\t\t\t\t\t? \"ww:!relative ww:!overflow-hidden\"\n\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t}\n\t\t\t\t\t>\n\t\t\t\t\t\t<MessageList\n\t\t\t\t\t\t\tmessages={engine.messages}\n\t\t\t\t\t\t\tstatus={engine.status}\n\t\t\t\t\t\t\twelcomeMessage={welcomeMessage}\n\t\t\t\t\t\t\twelcome={welcome}\n\t\t\t\t\t\t\tonSuggestionSelect={handleSuggestionSelect}\n\t\t\t\t\t\t\tresourceEndpoint={effectiveResourceEndpoint}\n\t\t\t\t\t\t\tchatSessionId={engine.sessionId}\n\t\t\t\t\t\t\tisDark={isDark}\n\t\t\t\t\t\t\tonFollowUp={handleWidgetMessage}\n\t\t\t\t\t\t\tonCallTool={handleCallTool}\n\t\t\t\t\t\t\tfullscreenToolCallId={fullscreenToolCallId}\n\t\t\t\t\t\t\tdebug={effectiveDebug}\n\t\t\t\t\t\t\tonWidgetDisplayModeChange={(mode, widget) => {\n\t\t\t\t\t\t\t\tsetFullscreenToolCallId(\n\t\t\t\t\t\t\t\t\tmode === \"fullscreen\" ? widget.toolCallId : null,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ConversationContent>\n\t\t\t\t\t<ConversationScrollButton />\n\t\t\t\t</Conversation>\n\n\t\t\t\t{/* Suggestions — hide when fullscreen */}\n\t\t\t\t<div style={fullscreenToolCallId ? { display: \"none\" } : undefined}>\n\t\t\t\t\t<Suggestions\n\t\t\t\t\t\tsuggestions={suggestionsState.suggestions}\n\t\t\t\t\t\tisLoading={suggestionsState.isLoading}\n\t\t\t\t\t\tonSelect={handleSuggestionSelect}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\n\t\t\t\t{/* Queue — hide when fullscreen */}\n\t\t\t\t<div style={fullscreenToolCallId ? { display: \"none\" } : undefined}>\n\t\t\t\t\t<ChatQueue\n\t\t\t\t\t\tqueuedMessages={engine.queuedMessages}\n\t\t\t\t\t\tonRemove={engine.removeQueuedMessage}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\n\t\t\t\t{/* Input — hide when fullscreen */}\n\t\t\t\t<div style={fullscreenToolCallId ? { display: \"none\" } : undefined}>\n\t\t\t\t\t<div className=\"ww:shrink-0 ww:px-4 ww:pb-8 ww:pt-2 ww:bg-background\">\n\t\t\t\t\t\t<div className=\"ww:mx-auto ww:w-full ww:max-w-3xl\">\n\t\t\t\t\t\t\t<PromptInput\n\t\t\t\t\t\t\t\tonSubmit={engine.handleSubmit}\n\t\t\t\t\t\t\t\tglobalDrop={allowAttachments}\n\t\t\t\t\t\t\t\tmultiple={allowAttachments}\n\t\t\t\t\t\t\t\tclassName=\"ww:rounded-2xl ww:border-border ww:bg-input\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<div className=\"ww:flex ww:items-center ww:gap-1 ww:pl-4 ww:pr-3 ww:py-2.5\">\n\t\t\t\t\t\t\t\t\t{allowAttachments && <PromptInputAddAttachments />}\n\t\t\t\t\t\t\t\t\t<PromptInputTextarea\n\t\t\t\t\t\t\t\t\t\tonChange={engine.handleTextChange}\n\t\t\t\t\t\t\t\t\t\tvalue={engine.text}\n\t\t\t\t\t\t\t\t\t\tplaceholder={animatedPlaceholder}\n\t\t\t\t\t\t\t\t\t\tclassName=\"ww:min-h-0 ww:py-1 ww:px-0\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<PromptInputSubmit\n\t\t\t\t\t\t\t\t\t\tstatus={engine.status}\n\t\t\t\t\t\t\t\t\t\tdisabled={engine.queueFull}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</PromptInput>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t},\n);\n","\"use client\";\n\nimport {\n\tforwardRef,\n\tuseCallback,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseRef,\n\tuseState,\n} from \"react\";\nimport type { ModelContextUpdate } from \"../../../shared/model-context\";\nimport type { ChatEmbedProps, ChatHandle } from \"../@types\";\nimport {\n\tConversation,\n\tConversationContent,\n\tConversationScrollButton,\n} from \"../ai-elements/conversation\";\nimport {\n\tPromptInput,\n\tPromptInputAddAttachments,\n\tPromptInputSubmit,\n\tPromptInputTextarea,\n} from \"../ai-elements/prompt-input\";\nimport { ChatQueue } from \"../components/chat-queue\";\nimport { MessageList } from \"../components/message-list\";\nimport { Suggestions } from \"../components/suggestions\";\nimport { useCallTool } from \"../hooks/use-call-tool\";\nimport { useChatEngine } from \"../hooks/use-chat-engine\";\nimport { useSuggestions } from \"../hooks/use-suggestions\";\nimport { useTypingPlaceholder } from \"../hooks/use-typing-placeholder\";\nimport { cn } from \"../lib/utils\";\nimport { isDarkTheme, mergeTheme, themeToCSSProperties } from \"../theme\";\n\n/**\n * Standalone, borderless chat component — bring your own backend.\n *\n * Fills its parent container with no header, border, or shadow.\n * Does **not** call any WaniWani-specific endpoints (`/config`, `/tool`, `/sessions`).\n * Point `api` at your own AI-SDK-compatible streaming endpoint and pass extra\n * request fields via `body`.\n *\n * Supports the same ref API as ChatCard (`sendMessage`, `sendMessageAndWait`, `focus`).\n *\n * @example\n * ```tsx\n * <ChatEmbed\n * api={`/api/mcp/projects/${projectId}/chat`}\n * body={{ environmentId, chatSessionId }}\n * suggestions={{ initial: [\"What can you do?\"] }}\n * />\n * ```\n */\nexport const ChatEmbed = forwardRef<ChatHandle, ChatEmbedProps>(\n\tfunction ChatEmbed(props, ref) {\n\t\tconst {\n\t\t\ttheme: userTheme,\n\t\t\tclassName,\n\t\t\tallowAttachments = false,\n\t\t\twelcomeMessage,\n\t\t\twelcome,\n\t\t\tplaceholder = \"Ask me anything...\",\n\t\t\ttriggerEvent = \"triggerDemoRequest\",\n\t\t\tapi,\n\t\t\tmcp,\n\t\t\tdebug = false,\n\t\t} = props;\n\n\t\tconst resolvedTheme = mergeTheme(userTheme);\n\t\tconst cssVars = themeToCSSProperties(resolvedTheme);\n\t\tconst isDark = isDarkTheme(resolvedTheme);\n\n\t\tconst engine = useChatEngine({ ...props, api });\n\t\tconst handleCallTool = useCallTool({\n\t\t\t...props,\n\t\t\tapi,\n\t\t\tsessionId: engine.sessionId,\n\t\t\tonCallTool: mcp?.onCallTool,\n\t\t});\n\n\t\tconst animatedPlaceholder = useTypingPlaceholder(placeholder, !engine.text);\n\n\t\tconst [fullscreenToolCallId, setFullscreenToolCallId] = useState<\n\t\t\tstring | null\n\t\t>(null);\n\t\tconst panelRef = useRef<HTMLDivElement>(null);\n\n\t\tconst focusInput = useCallback(() => {\n\t\t\tconst container = panelRef.current;\n\t\t\tif (!container) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst textarea = container.querySelector(\"textarea\");\n\t\t\tif (textarea) {\n\t\t\t\ttextarea.focus();\n\t\t\t}\n\t\t}, []);\n\n\t\tconst suggestionsState = useSuggestions({\n\t\t\tmessages: engine.messages,\n\t\t\tstatus: engine.status,\n\t\t\tconfig: props.suggestions,\n\t\t});\n\n\t\tconst handleWidgetMessage = useCallback(\n\t\t\t(message: {\n\t\t\t\trole: string;\n\t\t\t\tcontent: Array<{ type: string; text?: string }>;\n\t\t\t\tmodelContext?: ModelContextUpdate;\n\t\t\t}) => {\n\t\t\t\tconst text = message.content\n\t\t\t\t\t.map((c) => c.text ?? \"\")\n\t\t\t\t\t.join(\"\")\n\t\t\t\t\t.trim();\n\t\t\t\tif (text) {\n\t\t\t\t\tengine.handleSubmit({\n\t\t\t\t\t\ttext,\n\t\t\t\t\t\tfiles: [],\n\t\t\t\t\t\tmodelContext: message.modelContext,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t\t[engine.handleSubmit],\n\t\t);\n\n\t\tconst handleSuggestionSelect = useCallback(\n\t\t\t(suggestion: string) => {\n\t\t\t\tsuggestionsState.clear();\n\t\t\t\tengine.handleSubmit({ text: suggestion, files: [] });\n\t\t\t},\n\t\t\t[suggestionsState.clear, engine.handleSubmit],\n\t\t);\n\n\t\tuseImperativeHandle(\n\t\t\tref,\n\t\t\t() => ({\n\t\t\t\tsendMessage: (text: string) => {\n\t\t\t\t\tengine.handleSubmit({ text, files: [] });\n\t\t\t\t\tfocusInput();\n\t\t\t\t},\n\t\t\t\tsendMessageAndWait: (text: string) => engine.sendMessageAndWait(text),\n\t\t\t\treset: engine.reset,\n\t\t\t\tfocus: focusInput,\n\t\t\t\tget messages() {\n\t\t\t\t\treturn engine.messages;\n\t\t\t\t},\n\t\t\t}),\n\t\t\t[\n\t\t\t\tengine.handleSubmit,\n\t\t\t\tengine.sendMessageAndWait,\n\t\t\t\tengine.reset,\n\t\t\t\tengine.messages,\n\t\t\t\tfocusInput,\n\t\t\t],\n\t\t);\n\n\t\t// Listen for custom trigger event\n\t\tuseEffect(() => {\n\t\t\tif (!triggerEvent) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst handler = (e: Event) => {\n\t\t\t\tconst detail = (e as CustomEvent).detail;\n\t\t\t\tconst message =\n\t\t\t\t\ttypeof detail?.message === \"string\" ? detail.message : undefined;\n\t\t\t\tif (message) {\n\t\t\t\t\tengine.handleSubmit({ text: message, files: [] });\n\t\t\t\t}\n\t\t\t\tfocusInput();\n\t\t\t};\n\t\t\twindow.addEventListener(triggerEvent, handler);\n\t\t\treturn () => window.removeEventListener(triggerEvent, handler);\n\t\t}, [triggerEvent, engine.handleSubmit, focusInput]);\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={panelRef}\n\t\t\t\tstyle={cssVars}\n\t\t\t\tdata-waniwani-chat=\"\"\n\t\t\t\tdata-waniwani-layout=\"embed\"\n\t\t\t\t{...(isDark ? { \"data-waniwani-dark\": \"\" } : {})}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"ww:flex ww:flex-col ww:w-full ww:h-full ww:font-[family-name:var(--ww-font)] ww:text-foreground ww:bg-background ww:overflow-hidden\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{/* Messages */}\n\t\t\t\t<Conversation className=\"ww:flex-1 ww:min-h-0 ww:bg-background\">\n\t\t\t\t\t<ConversationContent\n\t\t\t\t\t\tscrollClassName={\n\t\t\t\t\t\t\tfullscreenToolCallId\n\t\t\t\t\t\t\t\t? \"ww:!relative ww:!overflow-hidden\"\n\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t}\n\t\t\t\t\t>\n\t\t\t\t\t\t<MessageList\n\t\t\t\t\t\t\tmessages={engine.messages}\n\t\t\t\t\t\t\tstatus={engine.status}\n\t\t\t\t\t\t\twelcomeMessage={welcomeMessage}\n\t\t\t\t\t\t\twelcome={welcome}\n\t\t\t\t\t\t\tonSuggestionSelect={handleSuggestionSelect}\n\t\t\t\t\t\t\tresourceEndpoint={mcp?.resourceEndpoint}\n\t\t\t\t\t\t\tchatSessionId={engine.sessionId}\n\t\t\t\t\t\t\tisDark={isDark}\n\t\t\t\t\t\t\tonFollowUp={handleWidgetMessage}\n\t\t\t\t\t\t\tonCallTool={handleCallTool}\n\t\t\t\t\t\t\tfullscreenToolCallId={fullscreenToolCallId}\n\t\t\t\t\t\t\tdebug={debug}\n\t\t\t\t\t\t\tonWidgetDisplayModeChange={(mode, widget) => {\n\t\t\t\t\t\t\t\tsetFullscreenToolCallId(\n\t\t\t\t\t\t\t\t\tmode === \"fullscreen\" ? widget.toolCallId : null,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ConversationContent>\n\t\t\t\t\t<ConversationScrollButton />\n\t\t\t\t</Conversation>\n\n\t\t\t\t{/* Suggestions — hide when fullscreen */}\n\t\t\t\t<div style={fullscreenToolCallId ? { display: \"none\" } : undefined}>\n\t\t\t\t\t<Suggestions\n\t\t\t\t\t\tsuggestions={suggestionsState.suggestions}\n\t\t\t\t\t\tisLoading={suggestionsState.isLoading}\n\t\t\t\t\t\tonSelect={handleSuggestionSelect}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\n\t\t\t\t{/* Queue — hide when fullscreen */}\n\t\t\t\t<div style={fullscreenToolCallId ? { display: \"none\" } : undefined}>\n\t\t\t\t\t<ChatQueue\n\t\t\t\t\t\tqueuedMessages={engine.queuedMessages}\n\t\t\t\t\t\tonRemove={engine.removeQueuedMessage}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\n\t\t\t\t{/* Input — hide when fullscreen */}\n\t\t\t\t<div style={fullscreenToolCallId ? { display: \"none\" } : undefined}>\n\t\t\t\t\t<div className=\"ww:shrink-0 ww:px-4 ww:pb-8 ww:pt-2 ww:bg-background\">\n\t\t\t\t\t\t<div className=\"ww:mx-auto ww:w-full ww:max-w-3xl\">\n\t\t\t\t\t\t\t<PromptInput\n\t\t\t\t\t\t\t\tonSubmit={engine.handleSubmit}\n\t\t\t\t\t\t\t\tglobalDrop={allowAttachments}\n\t\t\t\t\t\t\t\tmultiple={allowAttachments}\n\t\t\t\t\t\t\t\tclassName=\"ww:rounded-2xl ww:border-border ww:bg-input\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<div className=\"ww:flex ww:items-center ww:gap-1 ww:pl-4 ww:pr-3 ww:py-2.5\">\n\t\t\t\t\t\t\t\t\t{allowAttachments && <PromptInputAddAttachments />}\n\t\t\t\t\t\t\t\t\t<PromptInputTextarea\n\t\t\t\t\t\t\t\t\t\tonChange={engine.handleTextChange}\n\t\t\t\t\t\t\t\t\t\tvalue={engine.text}\n\t\t\t\t\t\t\t\t\t\tplaceholder={animatedPlaceholder}\n\t\t\t\t\t\t\t\t\t\tclassName=\"ww:min-h-0 ww:py-1 ww:px-0\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<PromptInputSubmit\n\t\t\t\t\t\t\t\t\t\tstatus={engine.status}\n\t\t\t\t\t\t\t\t\t\tdisabled={engine.queueFull}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</PromptInput>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t},\n);\n"],"mappings":"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ACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAWA,GAAK,OACrBA,GAAK,OAAWA,GAAK,OACrBA,GAAK,OAAWA,GAAK,QACrBA,GAAK,QAAWA,GAAK,QACrBA,GAAK,QAAWA,GAAK,QACrBA,GAAK,QAAWA,GAAK,QACrBA,GAAK,QAAWA,GAAK,QACrBA,IAAM,QACNA,IAAM,QACNA,GAAK,QAAWA,GAAK,QACrBA,IAAM,QACNA,GAAK,QAAWA,GAAK,QACrBA,IAAM,QACNA,GAAK,QAAWA,GAAK,QACrBA,GAAK,QAAWA,GAAK,QACrBA,GAAK,QAAWA,GAAK,QACrBA,GAAK,QAAWA,GAAK,QACrBA,IAAM,QACNA,IAAM,QACNA,IAAM,QACNA,GAAK,QAAWA,GAAK,QACrBA,GAAK,QAAWA,GAAK,QACrBA,GAAK,QAAWA,GAAK,QACrBA,GAAK,QAAWA,GAAK,QACrBA,IAAM,QACNA,IAAM,QACNA,GAAK,QAAWA,GAAK,QACrBA,GAAK,QAAWA,GAAK,QACrBA,GAAK,QAAWA,GAAK,QACrBA,GAAK,QAAWA,GAAK,QACrBA,GAAK,QAAWA,GAAK,QACrBA,GAAK,QAAWA,GAAK,QACrBA,GAAK,QAAWA,GAAK,QACrBA,GAAK,QAAWA,GAAK,QACrBA,IAAM,QACNA,GAAK,QAAWA,GAAK,QACrBA,IAAM,QACNA,GAAK,QAAWA,GAAK,QACrBA,GAAK,QAAWA,GAAK,QACrBA,GAAK,QAAWA,GAAK,QACrBA,GAAK,QAAWA,GAAK,QACrBA,IAAM,QACNA,IAAM,QACNA,IAAM,QACNA,IAAM,QACNA,GAAK,QAAWA,GAAK,QACrBA,GAAK,QAAWA,GAAK,QACrBA,IAAM,QACNA,GAAK,QAAWA,GAAK,QACrBA,GAAK,QAAWA,GAAK,QACrBA,GAAK,QAAWA,GAAK,QACrBA,IAAM,QACNA,IAAM,QACNA,GAAK,QAAWA,GAAK,QACrBA,GAAK,QA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","names":["forwardRef","useCallback","useEffect","useImperativeHandle","useRef","useState","mergeClasses","classes","className","index","array","toKebabCase","string","toCamelCase","string","match","p1","p2","toPascalCase","string","camelCase","toCamelCase","defaultAttributes","hasA11yProp","props","prop","Icon","forwardRef","color","size","strokeWidth","absoluteStrokeWidth","className","children","iconNode","rest","ref","createElement","defaultAttributes","mergeClasses","hasA11yProp","tag","attrs","createLucideIcon","iconName","iconNode","Component","forwardRef","className","props","ref","createElement","Icon","mergeClasses","toKebabCase","toPascalCase","__iconNode","ArrowDown","createLucideIcon","__iconNode","ArrowUp","createLucideIcon","__iconNode","Braces","createLucideIcon","__iconNode","Check","createLucideIcon","__iconNode","ChevronDown","createLucideIcon","__iconNode","ChevronRight","createLucideIcon","__iconNode","ClipboardCopy","createLucideIcon","__iconNode","File","createLucideIcon","__iconNode","Loader","createLucideIcon","__iconNode","Paperclip","createLucideIcon","__iconNode","Square","createLucideIcon","__iconNode","X","createLucideIcon","useCallback","useCallback","useMemo","useRef","useState","DEFAULT_SPRING_ANIMATION","STICK_TO_BOTTOM_OFFSET_PX","SIXTY_FPS_INTERVAL_MS","RETAIN_ANIMATION_DURATION_MS","mouseDown","useStickToBottom","options","escapedFromLock","updateEscapedFromLock","isAtBottom","updateIsAtBottom","isNearBottom","setIsNearBottom","optionsRef","isSelecting","selection","range","scrollRef","setIsAtBottom","state","setEscapedFromLock","lastCalculation","scrollTop","contentRef","targetScrollTop","calculatedScrollTop","scrollToBottom","scrollOptions","waitElapsed","behavior","mergeAnimations","ignoreEscapes","durationElapsed","startTarget","next","promise","tick","tickDelta","stopScroll","handleScroll","target","ignoreScrollToTop","lastScrollTop","isScrollingDown","isScrollingUp","handleWheel","deltaY","element","useRefCallback","scroll","content","previousHeight","entry","height","difference","animation","callback","deps","result","ref","animationCache","animations","instant","key","React","createContext","useContext","useEffect","useImperativeHandle","useLayoutEffect","useMemo","useRef","StickToBottomContext","createContext","useIsomorphicLayoutEffect","useLayoutEffect","useEffect","StickToBottom","instance","children","resize","initial","mass","damping","stiffness","currentTargetScrollTop","contextRef","props","customTargetScrollTop","useRef","targetScrollTop","target","elements","context","defaultInstance","useStickToBottom","scrollRef","contentRef","scrollToBottom","stopScroll","isAtBottom","escapedFromLock","state","useMemo","useImperativeHandle","Content","scrollClassName","useStickToBottomContext","useContext","twMerge","extendTailwindMerge","cn","inputs","clsx","jsx","Button","className","variant","size","type","props","cn","jsx","Conversation","className","props","StickToBottom","cn","ConversationContent","ConversationScrollButton","isAtBottom","scrollToBottom","useStickToBottomContext","handleScrollToBottom","useCallback","Button","ArrowDown","crypto","urlAlphabet","POOL_SIZE_MULTIPLIER","pool","poolOffset","fillPool","bytes","crypto","nanoid","size","fillPool","id","i","poolOffset","urlAlphabet","pool","createContext","useCallback","useContext","useEffect","useMemo","useRef","useState","jsx","jsxs","convertBlobUrlToDataUrl","url","blob","resolve","reader","LocalAttachmentsContext","createContext","usePromptInputAttachments","context","useContext","PromptInput","className","accept","multiple","globalDrop","maxFiles","maxFileSize","onSubmit","children","props","inputRef","useRef","formRef","items","setItems","useState","filesRef","useEffect","openFileDialog","useCallback","add","fileList","incoming","withinSize","f","valid","prev","capacity","capped","file","nanoid","remove","id","found","clear","handleChange","event","onDragOver","e","onDrop","handleSubmit","form","text","convertedFiles","_id","item","dataUrl","result","attachmentsCtx","useMemo","cn","PromptInputTextarea","onChange","onKeyDown","className","placeholder","props","attachments","usePromptInputAttachments","isComposing","setIsComposing","useState","handleKeyDown","useCallback","e","form","lastAttachment","handlePaste","event","items","files","item","file","jsx","cn","PromptInputSubmit","status","onStop","onClick","children","isGenerating","Icon","ArrowUp","Loader","Square","handleClick","Button","PromptInputAddAttachments","jsxs","X","Paperclip","memo","useCallback","jsx","Queue","className","props","cn","QueueItem","QueueItemIndicator","QueueItemContent","QueueItemActions","QueueItemAction","Button","jsx","jsxs","ChatQueueItem","memo","message","onRemove","handleRemove","useCallback","QueueItem","QueueItemIndicator","QueueItemContent","QueueItemActions","QueueItemAction","X","ChatQueue","queuedMessages","className","Queue","cn","msg","useState","jsx","ExportSessionButton","messages","evalEnabled","api","saving","setSaving","feedback","setFeedback","handleExport","session","res","jsx","jsxs","Attachments","files","className","props","cn","file","i","AttachmentItem","File","jsx","Loader","className","size","props","cn","i","codes","constants","types","isAmbiguous","x","isFullWidth","isWide","getCategory","validate","codePoint","eastAsianWidthType","getCategory","__defProp","__defNormalProp","obj","key","value","__publicField","isEmoji","uc","cjkOrIvs","eastAsianWidthType","isCjkAmbiguousPunctuation","main","vs","nonEmojiGeneralUseVS","code","unicodePunctuation","regexCheck","unicodeWhitespace","regex","check","constantsEx","constantsEx2","classifyCharacter","codes","markdownLineEndingOrSpace","constants","classifyPrecedingCharacter","before","get2Previous","previous","isNonEmojiGeneralUseVS","twoPrevious","twoBefore","isUnicodeWhitespace","stripIvs","category","isNonCjkPunctuation","isCjk","isIvs","isCjkOrIvs","isSpaceOrPunctuation","isCodeHighSurrogate","isCodeLowSurrogate","tryGetGenuinePreviousCode","nowPoint","sliceSerialize","previousCandidate","tryGetCodeTwoBefore","previousCode","previousWidth","idealStart","twoPreviousBuffer","twoPreviousLast","twoPreviousCandidate","TwoPreviousCode","tryGetGenuineNextCode","nextCandidate","attention","resolveAllAttention","tokenizeAttention","events","context","index","open","group","text","openingSequence","closingSequence","use","nextEvents","offset","start","end","movePoint","types","push","resolveAll","splice","effects","ok","attentionMarkers","now","sliceSerialize","tentativePrevious","previous","isCodeLowSurrogate","tryGetGenuinePreviousCode","before","classifyCharacter","twoPrevious","TwoPreviousCode","beforePrimary","classifyPrecedingCharacter","marker","code","codes","inside","token","next","isCodeHighSurrogate","tryGetGenuineNextCode","after","beforeNonCjkPunctuation","isNonCjkPunctuation","beforeSpaceOrNonCjkPunctuation","isUnicodeWhitespace","afterNonCjkPunctuation","afterSpaceOrNonCjkPunctuation","beforeCjkOrIvs","isCjkOrIvs","close","isCjk","isSpaceOrPunctuation","point","cjkFriendlyExtension","remarkCjkFriendly","data","cjkFriendlyExtension","gfmStrikethroughCjkFriendly","options","single","tokenizer","tokenizeStrikethrough","resolveAllStrikethrough","codes","events","context","index","open","strikethrough","text","nextEvents","insideSpan","splice","resolveAll","types","effects","ok","nok","now","sliceSerialize","tentativePrevious","previous","isCodeLowSurrogate","tryGetGenuinePreviousCode","before","classifyCharacter","twoPrevious","TwoPreviousCode","beforePrimary","classifyPrecedingCharacter","size","start","code","more","before2","token","next","isCodeHighSurrogate","tryGetGenuineNextCode","after","beforeSpaceOrNonCjkPunctuation","isNonCjkPunctuation","isUnicodeWhitespace","afterSpaceOrNonCjkPunctuation","beforeCjkOrIvs","isCjk","isIvs","constants","remarkGfmStrikethroughCjkFriendly","options","data","gfmStrikethroughCjkFriendly","k","m","f","t","r","P","e","p","d","y","visit","i","n","l","u","o","s","b","remarkCjkFriendly","remarkGfmStrikethroughCjkFriendly","A","ShikiError","message","clone","something","doClone","cloneArray","cloneObj","arr","r","i","len","obj","key","mergeObjects","target","sources","source","basename","path","idx","CAPTURING_REGEX_SOURCE","RegexSource","regexSource","captureSource","captureIndices","match","index","commandIndex","command","capture","result","strcmp","a","b","strArrCmp","len1","len2","res","isValidHexColor","hex","escapeRegExpCharacters","value","CachedFn","fn","Theme","_colorMap","_defaults","_root","colorMap","parseTheme","resolveParsedThemeRules","scopeName","scopePath","effectiveRule","v","_scopePathMatchesParentScopes","StyleAttributes","ScopeStack","_ScopeStack","parent","scopeNames","name","segments","item","other","base","parentScopes","scopePattern","scopeMustMatch","_matchesScope","fontStyle","foregroundId","backgroundId","settings","resultLen","entry","scopes","_scope","j","lenJ","foreground","background","scope","ParsedThemeRule","FontStyle","FontStyle2","parsedThemeRules","defaultFontStyle","defaultForeground","defaultBackground","incomingDefaults","ColorMap","defaults","root","ThemeTrieElement","ThemeTrieElementRule","rule","color","emptyParentScopes","_ThemeTrieElementRule","scopeDepth","_ThemeTrieElement","_mainRule","rulesWithParentScopes","_children","aParentIndex","bParentIndex","parentScopeLengthDiff","dotIndex","head","tail","rules","child","EncodedTokenMetadata","_EncodedTokenMetadata","encodedTokenAttributes","languageId","tokenType","containsBalancedBrackets","_languageId","_tokenType","_containsBalancedBracketsBit","_fontStyle","_foreground","_background","createMatchers","selector","matchesName","results","tokenizer","newTokenizer","token","priority","matcher","parseConjunction","parseOperand","expressionToNegate","matcherInput","expressionInParents","parseInnerExpression","isIdentifier","identifiers","matchers","matcher2","input","regex","match","res","disposeOnigString","str","TopLevelRuleReference","scopeName","TopLevelRepositoryRuleReference","ruleName","ExternalReferenceCollector","reference","key","ScopeDependencyProcessor","repo","initialScopeName","q","deps","dep","collectReferencesOfReference","baseGrammarScopeName","result","selfGrammar","baseGrammar","collectExternalReferencesInTopLevelRule","collectExternalReferencesInTopLevelRepositoryRule","injections","injection","context","rule","collectExternalReferencesInRules","rules","patternRepository","mergeObjects","include","parseInclude","newContext","BaseReference","SelfReference","RelativeReference","TopLevelReference","TopLevelRepositoryReference","indexOfSharp","HAS_BACK_REFERENCES","BACK_REFERENCING_END","endRuleId","whileRuleId","Rule","$location","id","name","contentName","RegexSource","location","basename","lineText","captureIndices","CaptureRule","retokenizeCapturedWithRuleId","grammar","out","endRegexSource","allowA","allowG","MatchRule","match","captures","RegExpSource","RegExpSourceList","IncludeOnlyRule","patterns","pattern","BeginEndRule","begin","beginCaptures","end","endCaptures","applyEndPatternLast","BeginWhileRule","_while","whileCaptures","whileRuleId","RuleFactory","_RuleFactory","helper","desc","repository","mergeObjects","maximumCaptureId","captureId","numericCaptureId","i","len","ruleId","reference","parseInclude","localIncludedRule","externalGrammarName","externalGrammarInclude","externalGrammar","externalIncludedRule","rule","skipRule","_RegExpSource","regExpSource","lastPushedPos","output","hasAnchor","pos","nextCh","HAS_BACK_REFERENCES","newSource","capturedValues","capture","BACK_REFERENCING_END","g1","escapeRegExpCharacters","A0_G0_result","A0_G1_result","A1_G0_result","A1_G1_result","ch","item","index","onigLib","regExps","e","CompiledRule","rules","r","string","startPosition","options","result","BasicScopeAttributes","languageId","tokenType","BasicScopeAttributesProvider","_BasicScopeAttributesProvider","initialLanguageId","embeddedLanguages","ScopeMatcher","scopeName","CachedFn","standardTokenType","scope","m","values","escapedScopes","value","DebugFlags","UseOnigurumaFindOptions","TokenizeStringResult","stack","stoppedEarly","_tokenizeString","isFirstLine","linePos","lineTokens","checkWhileConditions","timeLimit","lineLength","STOP","anchorPosition","whileCheckResult","_checkWhileConditions","startTime","scanNext","matchRuleOrInjections","matchedRuleId","hasAdvanced","endRuleId","poppedRule","handleCaptures","popped","_rule","beforePush","nameScopesList","pushedRule","contentNameScopesList","whileRules","node","nodeRule","whileRule","ruleScanner","findOptions","prepareRuleWhileSearch","matchResult","matchRule","injections","injectionResult","matchInjections","matchResultScore","injectionResultScore","prepareRuleSearch","bestMatchRating","bestMatchCaptureIndices","bestMatchRuleId","bestMatchResultPriority","scopes","injection","matchRating","ruleScanner2","getFindOptions","lineTextContent","localStack","maxEnd","captureRule","captureIndex","stackClone","onigSubStr","disposeOnigString","captureRuleScopeName","captureRuleScopesList","LocalStackElement","endPos","createGrammar","initialLanguage","tokenTypes","balancedBracketSelectors","grammarRepository","Grammar","collectInjections","selector","ruleFactoryHelper","matchers","createMatchers","nameMatcher","matcher","identifers","lastIndex","identifier","scopesAreMatching","thisScopeName","_rootScopeName","_onigLib","initGrammar","sources","scopeName2","rawInjections","expression","injectionScopeNames","injectionScopeName","injectionGrammar","i1","i2","factory","rawIncludedGrammar","prevState","emitBinaryTokens","StateStackImpl","rawDefaultMetadata","defaultStyle","defaultMetadata","EncodedTokenMetadata","rootScopeName","scopeList","AttributedScopeStack","onigLineText","LineTokens","base","clone","_AttributedScopeStack","parent","scopePath","tokenAttributes","namesScopeList","current","scopeNames","frame","ScopeStack","rawRootMetadata","rootStyle","resolvedTokenAttributes","other","a","b","existingTokenAttributes","basicScopeAttributes","styleAttributes","fontStyle","foreground","background","target","rawMetadata","newPath","scopeThemeMatchResult","metadata","self","_StateStackImpl","enterPos","anchorPos","beginRuleCapturedEOL","endRule","el","res","outIndex","contentNameScopeStack","BalancedBracketSelectors","balancedBracketScopes","unbalancedBracketScopes","excluder","includer","tokenTypeOverrides","endIndex","scopesList","containsBalancedBrackets","scopes2","SyncRegistry","theme","targetScope","rawGrammar","Registry","Theme","colorMap","initialScopeName","configuration","dependencyProcessor","ScopeDependencyProcessor","request","INITIAL","defaultSubsetRegex","surrogatePairsRegex","controlCharactersRegex","regexEscapeRegex","subsetToRegexCache","core","value","options","charactersToExpressionCached","basic","surrogate","pair","index","all","character","subset","cached","charactersToExpression","groups","hexadecimalRegex","toHexadecimal","code","next","omit","value","decimalRegex","toDecimal","code","next","omit","value","characterEntitiesLegacy","characterEntitiesHtml4","dangerous","own","characters","key","characterEntitiesHtml4","notAlphanumericRegex","toNamed","code","next","omit","attribute","character","name","value","characterEntitiesLegacy","dangerous","formatSmart","code","next","options","numeric","toHexadecimal","named","toNamed","decimal","toDecimal","stringifyEntities","value","options","core","formatSmart","htmlCommentRegex","bogusCommentEntitySubset","commentEntitySubset","comment","node","_1","_2","state","stringifyEntities","encode","$0","doctype","_1","_2","_3","state","siblingAfter","siblings","siblingBefore","emptyChildren","increment","sibling","parent","index","includeWhitespace","offset","next","whitespace","own","omission","handlers","omit","node","index","parent","closing","omission","body","headOrColgroupOrCaption","dd","dt","html","li","optgroup","option","p","rubyElement","tbody","cells","tfoot","thead","tr","_","index","parent","next","siblingAfter","whitespace","opening","omission","body","colgroup","head","html","tbody","node","siblingAfter","seen","child","whitespace","index","parent","previous","siblingBefore","closing","constants","element","node","index","parent","state","schema","omit","selfClosing","parts","last","svg","attributes","serializeAttributes","content","opening","closing","properties","values","key","value","serializeAttribute","info","find","x","y","quote","result","name","stringifyEntities","stringify","ccount","textEntitySubset","text","node","_","parent","state","stringifyEntities","raw","node","index","parent","state","text","root","node","_1","_2","state","handle","zwitch","invalid","unknown","comment","doctype","element","raw","root","text","node","node_","emptyOptions","emptyCharacterReferences","emptyChildren","toHtml","tree","options","options_","quote","alternative","one","all","htmlVoidElements","svg","html","node","index","parent","handle","results","children","resolveColorReplacements","theme","options","replacements","themeName","key","value","applyColorReplacements","color","toArray","x","normalizeGetter","p","r","isPlainLang","lang","isSpecialLang","isNoneTheme","isSpecialTheme","addClassToHast","node","className","targets","c","splitLines","code","preserveEnding","parts","index","lines","i","line","createPositionConverter","indexToPos","character","lineText","posToIndex","guessEmbeddedLanguages","_lang","highlighter","langs","match","fullType","bundle","l","DEFAULT_COLOR_LIGHT_DARK","COLOR_KEYS","splitToken","token","offsets","lastOffset","tokens","offset","splitTokens","breakpoints","sorted","a","b","breakpointsInToken","flatTokenVariants","merged","variantsOrder","cssVariablePrefix","defaultColor","colorsRendering","styles","t","getTokenStyleObject","styleKeys","mergedStyles","varKey","idx","keyName","cur","lightIndex","darkIndex","ShikiError","lightValue","darkValue","FontStyle","decorations","stringifyTokenStyle","_grammarStateMap","setLastGrammarStateToMap","keys","state","getLastGrammarStateFromMap","GrammarState","_GrammarState","themes","INITIAL","args","stacksMap","stack","getScopes","scopes","visited","pushScope","stack2","name","getGrammarStack","transformerDecorations","map","getContext","shiki","normalizePosition","converter","d","verifyIntersections","codeEl","ctx","applyLineSection","start","end","decoration","lineEl","text","startIndex","endIndex","stringify","children","applyDecoration","wrapper","applyLine","el","type","properties","transform","lineApplies","items","foo","j","bar","isFooHasBarStart","isFooHasBarEnd","isBarHasFooStart","isBarHasFooEnd","builtInTransformers","getTransformers","transformers","sortTransformersByEnforcement","pre","post","normal","transformer","namedColors","findSequence","position","nextEscape","nextClose","parseColor","sequence","colorMode","rgb","parseSequence","commands","codeInt","createAnsiSequenceParser","foreground","background","decorations2","findResult","styleToken","defaultNamedColorsMap","createColorPalette","namedColorsMap","namedColor","rgbColor","colorTable","getColorTable","levels","g","level","tableColor","defaultAnsiColors","tokenizeAnsiWithTheme","fileContents","colorReplacements","ansiPalette","themeColor","colorPalette","parser","bgColor","dimColor","fontStyle","hexMatch","hex","alpha","cssVarMatch","codeToTokensBase","internal","colorMap","_grammar","tokenizeWithTheme","getLastGrammarState","_tokenizeWithTheme","grammar","result","grammarState","tokenizeMaxLineLength","tokenizeTimeLimit","stateStack","actual","final","len","lineOffset","resultWithScopes","tokensWithScopes","tokensWithScopesIndex","tokensLength","nextStartIndex","metadata","EncodedTokenMetadata","themeSettingsSelectors","setting","selectors","scope","selector","tokenWithScopes","tokenWithScopesText","explainThemeScopesNameOnly","explainThemeScopesFull","themeSelectors","explainThemeScope","matchesOne","matches","parentScopes","selectorParentIndex","parentIndex","settings","selectorPieces","codeToTokensWithThemes","themedTokens","tokens2","syncThemesTokenization","mergedTokens","lineIdx","_token","tokenIdx","mergedToken","themeIdx","_","__","___","mergedGrammarState","s","outThemes","count","outLines","i2","indexes","current","minLength","n","codeToTokens","bg","fg","rootStyle","themeTokens","themeRegs","themesOrder","themeColorReplacements","mapThemeColors","_theme","property","cssVar","t2","codeToHast","transformerContext","_code","_options","input","mergeWhitespaces","mergeSameStyleTokens","mergeWhitespaceTokens","splitWhitespaceTokens","mergeAdjacentStyledTokens","contextSource","tokensToHast","root","structure","tabindex","preNode","codeNode","lineNodes","context","lineNode","col","tokenNode","style","syntheticLines","currentLine","child","transformedCode","newLine","carryOnContent","firstOffset","couldMerge","leading","content","trailing","expanded","prevToken","prevStyle","currentStyle","isPrevDecorated","isDecorated","hastToHtml","toHtml","codeToHtml","VSCODE_FALLBACK_EDITOR_FG","VSCODE_FALLBACK_EDITOR_BG","RESOLVED_KEY","normalizeTheme","rawTheme","globalSetting","replacementCount","replacementMap","getReplacementColor","replaceFg","replaceBg","clone","replacement","resolveLangs","resolveThemes","_emitDeprecation","_emitError","warnDeprecated","message","version","_emitDeprecation","_emitError","ShikiError","resolveLangAlias","name","alias","resolved","Registry","_resolver","_themes","_langs","_alias","t","theme","_theme","normalizeTheme","textmateTheme","Theme","lang","embeddedLazilyBy","i","grammarConfig","g","e","langs","langsGraphArray","missingLangs","_","dependents","embedded","embeddedLang","Resolver","engine","patterns","s","langIdOrAlias","scopeName","l","scopeParts","injections","subScopeName","instancesCount","createShikiInternalSync","options","isDisposed","themes","resolver","_registry","_lastTheme","resolveLangAlias$1","getLanguage","ensureNotDisposed","_lang","getTheme","setTheme","colorMap","getLoadedThemes","getLoadedLanguages","loadLanguageSync","langs2","loadLanguage","resolveLangs","loadThemeSync","themes2","loadTheme","resolveThemes","dispose","createShikiInternal","createHighlighterCore","internal","args","getLastGrammarState","code","options2","codeToTokensBase","codeToTokensWithThemes","codeToTokens","codeToHast","codeToHtml","createBundledHighlighter","options","bundledLanguages","bundledThemes","engine","createHighlighter","options2","resolveLang","lang","isSpecialLang","bundle","ShikiError","resolveTheme","theme","isSpecialTheme","_themes","i","langs","core","createHighlighterCore","langs2","themes","makeSingletonHighlighter","_shiki","getSingletonHighlighter","s","createSingletonShorthands","config","get","code","shiki","bundledLanguagesInfo","bundledLanguagesBase","i","bundledLanguagesAlias","a","bundledLanguages","bundledThemesInfo","bundledThemes","i","ShikiError","message","getHeapMax","_emscripten_get_now","alignUp","x","multiple","main","init","wasmMemory","buffer","binding","updateGlobalBufferAndViews","buf","_emscripten_memcpy_big","dest","src","num","emscripten_realloc_buffer","size","_emscripten_resize_heap","requestedSize","oldSize","maxHeapSize","cutDown","overGrownHeapSize","newSize","UTF8Decoder","UTF8ArrayToString","heapOrArray","idx","maxBytesToRead","endIdx","endPtr","str","u0","u1","u2","ch","UTF8ToString","ptr","asmLibraryArg","createWasm","exports$1","__defProp","__defNormalProp","obj","key","value","__publicField","onigBinding","throwLastOnigError","onigBinding2","UtfString","_UtfString","utf16Length","utf8Length","computeIndicesMapping","utf16OffsetToUtf8","utf8OffsetToUtf16","utf8Value","i8","i16","charCode","codePoint","wasSurrogatePair","nextCharCode","result","i","len","codepoint","_OnigString","utfString","utf8Offset","utf16Offset","OnigString","OnigScanner","patterns","strPtrsArr","strLenArr","strPtrsPtr","strLenPtr","scannerPtr","string","startPosition","arg","options","debugCall","resultPtr","HEAPU32","offset","index","count","captureIndices","beg","end","isInstantiatorOptionsObject","dataOrOptions","isInstantiatorModule","isDataOptionsObject","isResponse","isArrayBuffer","data","initPromise","loadWasm","_load","info","instance","_makeResponseStreamingLoader","_makeResponseNonStreamingLoader","_makeArrayBufferLoader","importObject","arrayBuffer","createOnigurumaEngine","options","loadWasm","patterns","OnigScanner","p","s","OnigString","createHighlighter","createBundledHighlighter","bundledLanguages","bundledThemes","createOnigurumaEngine","codeToHtml","codeToHast","codeToTokens","codeToTokensBase","codeToTokensWithThemes","getSingletonHighlighter","getLastGrammarState","createSingletonShorthands","guessEmbeddedLanguages","p","bundledLanguages","a","h","l","H","k","n","g","i","b","createHighlighter","f","t","r","d","s","u","B","o","c","L","R","memo","jsx","Message","className","from","children","props","cn","MessageContent","streamdownPlugins","A","R","MessageResponse","memo","xn","prevProps","nextProps","jsx","Reasoning","className","text","props","cn","createContext","useCallback","useContext","useEffect","useMemo","useRef","useState","Fragment","jsx","jsxs","truncateJSON","data","maxLength","stringified","entries","parts","remaining","key","value","keyAbbrev","valStr","part","CopyButton","text","className","copied","setCopied","useState","timeoutRef","useRef","useEffect","handleCopy","useCallback","e","Button","cn","Check","ClipboardCopy","CollapsibleJSON","label","props","expanded","setExpanded","fullJSON","useMemo","preview","v","ChevronRight","ToolOpenContext","createContext","Tool","defaultOpen","children","open","setOpen","o","ToolHeader","title","state","toggle","useContext","isRunning","Braces","ChevronDown","ToolContent","className","children","props","open","useContext","ToolOpenContext","jsx","cn","ToolInput","input","debug","filtered","useMemo","_meta","rest","CollapsibleJSON","getUiMeta","output","meta","ui","getResourceUri","uri","getAutoHeight","ToolOutput","errorText","jsxs","useCallback","useEffect","useMemo","useRef","useState","hasModelContext","value","hasContent","hasStructuredContent","mergeModelContext","current","next","jsx","DEFAULT_RESOURCE_ENDPOINT","MAX_HEIGHT","DEFAULT_HEIGHT","AUTOHEIGHT_PADDING","PROTOCOL_VERSION","RESIZE_ANIMATION_MS","HANDSHAKE_TIMEOUT_MS","MAX_RETRIES","normalizeString","value","trimmed","resultProducesWidget","result","meta","uiMeta","shouldAutoInjectToolResultText","McpAppFrame","resourceUri","toolInput","toolResult","resourceEndpoint","chatSessionId","isDark","className","autoHeight","onOpenLink","onFollowUp","onCallTool","onDisplayModeChange","isFullscreen","iframeRef","useRef","toolInputRef","toolResultRef","lastSizeRef","animationRef","initializedRef","retryCountRef","displayModeRef","height","setHeight","useState","width","setWidth","onOpenLinkRef","onFollowUpRef","onCallToolRef","onDisplayModeChangeRef","chatSessionIdRef","clampHeight","useCallback","h","iframeSrc","useMemo","isDarkRef","useEffect","iframe","disposed","handshakeReceived","pendingModelContext","pendingToolResult","handshakeTimer","url","postToIframe","msg","handleMessage","event","data","method","id","input","resultMeta","normalizedChatSessionId","waniwaniMeta","forwardedWaniwaniMeta","forwardedMeta","content","params","newHeight","newWidth","last","heightChanged","widthChanged","clamped","from","anim","modelContext","toolText","existingText","c","mergeModelContext","handler","text","err","message","requested","granted","cn","jsx","jsxs","WelcomeScreen","icon","title","description","suggestions","onSuggestionSelect","suggestion","index","cn","Component","jsx","jsxs","WidgetErrorBoundary","error","Fragment","jsx","jsxs","formatToolName","name","c","MessageList","messages","status","welcomeMessage","welcome","onSuggestionSelect","resourceEndpoint","chatSessionId","isDark","onFollowUp","onCallTool","onWidgetDisplayModeChange","fullscreenToolCallId","debug","isLoading","lastMessage","hasMessages","showLoaderBubble","isFullscreenActive","WelcomeScreen","Message","MessageContent","MessageResponse","message","textParts","p","reasoningParts","fileParts","toolParts","isLastAssistant","hasTextContent","containsFullscreenTool","part","i","Reasoning","output","resourceUri","getResourceUri","autoHeight","getAutoHeight","isFullscreen","Tool","ToolHeader","ToolContent","ToolInput","ToolOutput","WidgetErrorBoundary","McpAppFrame","mode","Attachments","Loader","jsx","Suggestions","suggestions","isLoading","onSelect","className","props","cn","i","suggestion","index","useCallback","useRef","useCallTool","props","propsRef","params","api","headers","onCallTool","sessionId","endpoint","normalizedSessionId","res","useChat","DefaultChatTransport","useCallback","useEffect","useRef","useState","VISITOR_ID_KEY","match","ua","pattern","parseBrowser","browsers","name","version","parseOS","systems","detectDeviceType","sha256","input","data","hash","b","computeVisitorId","stored","raw","id","collectVisitorContext","visitorId","SESSION_HEADER_NAME","normalizeSessionId","value","trimmed","useChatEngine","props","api","userHeaders","body","onMessageSent","onResponseReceived","headersRef","useRef","bodyRef","pendingModelContextRef","visitorContextRef","sessionId","setSessionIdState","useState","sessionIdRef","getSessionId","useCallback","setSessionId","clearSessionId","useEffect","collectVisitorContext","ctx","transportRef","DefaultChatTransport","resolvedBody","hasExplicitSessionId","bodySessionId","storedSessionId","hasModelContext","vc","input","init","response","pendingWaitRef","messages","sendMessage","setMessages","status","useChat","message","error","text","setText","queuedMessages","setQueuedMessages","isLoading","removeQueuedMessage","id","prev","m","queueFull","handleSubmit","hasText","hasFiles","nanoid","sendMessageAndWait","resolve","reject","first","rest","reset","handleTextChange","e","lastMessage","hasMessages","showLoaderBubble","useEffect","useState","defaultConfig","useConfig","api","config","setConfig","data","useCallback","useEffect","useRef","useState","extractSuggestions","message","part","p","data","isConfigObject","config","useSuggestions","options","messages","status","suggestions","setSuggestions","prevStatusRef","isDynamicEnabled","clear","lastMessage","prevStatus","lastAssistant","m","extracted","useEffect","useRef","useState","TYPE_SPEED_MS","DELETE_SPEED_MS","PAUSE_AFTER_TYPE_MS","PAUSE_AFTER_DELETE_MS","useTypingPlaceholder","text","active","displayed","setDisplayed","timerRef","i","deleting","disposed","tick","DEFAULT_THEME","DARK_THEME","CSS_VAR_MAP","mergeTheme","userTheme","isDarkTheme","theme","hex","r","g","b","themeToCSSProperties","vars","key","cssVars","value","resolved","cssVar","jsx","jsxs","ChatBar","forwardRef","props","ref","userTheme","title","width","userExpandedWidth","expandedHeight","allowAttachments","welcomeMessage","welcome","placeholder","triggerEvent","api","expandedWidth","effectiveApi","effectiveResourceEndpoint","resolvedTheme","mergeTheme","cssVars","themeToCSSProperties","isDark","isDarkTheme","config","useConfig","engine","useChatEngine","handleCallTool","useCallTool","suggestionsState","useSuggestions","handleWidgetMessage","useCallback","message","text","c","handleSuggestionSelect","suggestion","animatedPlaceholder","useTypingPlaceholder","isFocused","setIsFocused","useState","isHighlighted","setIsHighlighted","fullscreenToolCallId","setFullscreenToolCallId","containerRef","useRef","highlightTimerRef","focusInput","container","textarea","useImperativeHandle","useEffect","handler","e","detail","isExpanded","handleClickOutside","handleFocus","ExportSessionButton","Conversation","ConversationContent","MessageList","mode","widget","ConversationScrollButton","Suggestions","ChatQueue","PromptInput","cn","PromptInputAddAttachments","PromptInputTextarea","PromptInputSubmit","useRef","useState","useCallback","useEffect","useState","useScenarios","api","enabled","scenarios","setScenarios","isLoading","setIsLoading","load","r","data","jsx","jsxs","getUserText","msg","p","ScenarioSkeleton","i","PANEL_WIDTH","ScenarioPanel","api","chatRef","effectiveApi","selected","setSelected","useState","running","setRunning","abortRef","useRef","config","useConfig","scenarios","isLoading","reload","useScenarios","runScenario","scenario","userMessages","text","e","s","cn","forwardRef","useCallback","useEffect","useImperativeHandle","useRef","useState","jsx","jsxs","ChatCard","forwardRef","props","ref","userTheme","title","width","height","className","allowAttachments","welcomeMessage","welcome","placeholder","triggerEvent","api","debug","effectiveApi","effectiveResourceEndpoint","resolvedTheme","mergeTheme","cssVars","themeToCSSProperties","isDark","isDarkTheme","config","useConfig","effectiveDebug","engine","useChatEngine","handleCallTool","useCallTool","animatedPlaceholder","useTypingPlaceholder","isHighlighted","setIsHighlighted","useState","fullscreenToolCallId","setFullscreenToolCallId","cardRef","useRef","highlightTimerRef","focusInput","useCallback","container","textarea","suggestionsState","useSuggestions","handleWidgetMessage","message","text","c","handleSuggestionSelect","suggestion","useImperativeHandle","useEffect","handler","e","detail","cn","ExportSessionButton","Conversation","ConversationContent","MessageList","mode","widget","ConversationScrollButton","Suggestions","ChatQueue","PromptInput","PromptInputAddAttachments","PromptInputTextarea","PromptInputSubmit","forwardRef","useCallback","useEffect","useImperativeHandle","useRef","useState","jsx","jsxs","ChatEmbed","forwardRef","props","ref","userTheme","className","allowAttachments","welcomeMessage","welcome","placeholder","triggerEvent","api","mcp","debug","resolvedTheme","mergeTheme","cssVars","themeToCSSProperties","isDark","isDarkTheme","engine","useChatEngine","handleCallTool","useCallTool","animatedPlaceholder","useTypingPlaceholder","fullscreenToolCallId","setFullscreenToolCallId","useState","panelRef","useRef","focusInput","useCallback","container","textarea","suggestionsState","useSuggestions","handleWidgetMessage","message","text","c","handleSuggestionSelect","suggestion","useImperativeHandle","useEffect","handler","e","detail","cn","Conversation","ConversationContent","MessageList","mode","widget","ConversationScrollButton","Suggestions","ChatQueue","PromptInput","PromptInputAddAttachments","PromptInputTextarea","PromptInputSubmit"]}