@incremark/vue 0.0.4 → 0.0.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.
- package/README.md +180 -1
- package/dist/index.css +6 -0
- package/dist/index.css.map +1 -1
- package/dist/index.js +272 -33
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
- package/src/components/AutoScrollContainer.vue +164 -0
- package/src/components/Incremark.vue +3 -1
- package/src/components/IncremarkInline.vue +3 -0
- package/src/components/index.ts +3 -0
- package/src/composables/index.ts +3 -0
- package/src/composables/useBlockTransformer.ts +141 -0
- package/src/index.ts +35 -4
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/composables/useIncremark.ts","../src/composables/useStreamRenderer.ts","../src/composables/useDevTools.ts","src/components/Incremark.vue","src/components/IncremarkHeading.vue","src/components/IncremarkMath.vue","sfc-template:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkMath.vue?type=template","../src/components/IncremarkMath.vue","src/components/IncremarkInline.vue","sfc-template:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkInline.vue?type=template","../src/components/IncremarkInline.vue","sfc-template:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkHeading.vue?type=template","../src/components/IncremarkHeading.vue","sfc-template:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkParagraph.vue?type=template","../src/components/IncremarkParagraph.vue","src/components/IncremarkCode.vue","sfc-template:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkCode.vue?type=template","../src/components/IncremarkCode.vue","src/components/IncremarkList.vue","sfc-template:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkList.vue?type=template","../src/components/IncremarkList.vue","src/components/IncremarkTable.vue","sfc-template:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkTable.vue?type=template","../src/components/IncremarkTable.vue","sfc-template:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkBlockquote.vue?type=template","../src/components/IncremarkBlockquote.vue","sfc-template:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkThematicBreak.vue?type=template","../src/components/IncremarkThematicBreak.vue","sfc-template:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkDefault.vue?type=template","../src/components/IncremarkDefault.vue","sfc-template:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/Incremark.vue?type=template","../src/components/Incremark.vue","src/components/IncremarkRenderer.vue","sfc-template:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkRenderer.vue?type=template","../src/components/IncremarkRenderer.vue"],"sourcesContent":["import { ref, shallowRef, computed, markRaw } from 'vue'\nimport {\n IncremarkParser,\n createIncremarkParser,\n type ParserOptions,\n type ParsedBlock,\n type IncrementalUpdate,\n type Root\n} from '@incremark/core'\n\nexport interface UseIncremarkOptions extends ParserOptions {}\n\n/** useIncremark 的返回类型 */\nexport type UseIncremarkReturn = ReturnType<typeof useIncremark>\n\n/**\n * Vue 3 Composable: Incremark 流式 Markdown 解析器\n *\n * @example\n * ```vue\n * <script setup>\n * import { useIncremark } from '@incremark/vue'\n *\n * const { markdown, blocks, append, finalize } = useIncremark()\n *\n * // 处理 AI 流式输出\n * async function handleStream(stream) {\n * for await (const chunk of stream) {\n * append(chunk)\n * }\n * finalize()\n * }\n * </script>\n *\n * <template>\n * <div>已接收: {{ markdown.length }} 字符</div>\n * </template>\n * ```\n */\nexport function useIncremark(options: UseIncremarkOptions = {}) {\n const parser = createIncremarkParser(options)\n const completedBlocks = shallowRef<ParsedBlock[]>([])\n const pendingBlocks = shallowRef<ParsedBlock[]>([])\n const isLoading = ref(false)\n // 使用 ref 存储 markdown,确保响应式\n const markdown = ref('')\n\n const ast = computed<Root>(() => ({\n type: 'root',\n children: [\n ...completedBlocks.value.map((b) => b.node),\n ...pendingBlocks.value.map((b) => b.node)\n ]\n }))\n\n // 所有块,带稳定 ID(已完成块用真实 ID,待处理块用索引)\n const blocks = computed(() => {\n const result: Array<ParsedBlock & { stableId: string }> = []\n\n for (const block of completedBlocks.value) {\n result.push({ ...block, stableId: block.id })\n }\n\n for (let i = 0; i < pendingBlocks.value.length; i++) {\n result.push({\n ...pendingBlocks.value[i],\n stableId: `pending-${i}`\n })\n }\n\n return result\n })\n\n function append(chunk: string): IncrementalUpdate {\n isLoading.value = true\n const update = parser.append(chunk)\n\n // 更新 markdown ref\n markdown.value = parser.getBuffer()\n\n // 使用 markRaw 避免深层响应式\n if (update.completed.length > 0) {\n completedBlocks.value = [\n ...completedBlocks.value,\n ...update.completed.map((b) => markRaw(b))\n ]\n }\n pendingBlocks.value = update.pending.map((b) => markRaw(b))\n\n return update\n }\n\n function finalize(): IncrementalUpdate {\n const update = parser.finalize()\n\n // 更新 markdown ref\n markdown.value = parser.getBuffer()\n\n if (update.completed.length > 0) {\n completedBlocks.value = [\n ...completedBlocks.value,\n ...update.completed.map((b) => markRaw(b))\n ]\n }\n pendingBlocks.value = []\n isLoading.value = false\n\n return update\n }\n\n function abort(): IncrementalUpdate {\n return finalize()\n }\n\n function reset(): void {\n parser.reset()\n completedBlocks.value = []\n pendingBlocks.value = []\n markdown.value = ''\n isLoading.value = false\n }\n\n /**\n * 一次性渲染完整 Markdown(reset + append + finalize)\n * @param content 完整的 Markdown 内容\n */\n function render(content: string): IncrementalUpdate {\n // 调用 parser 的 render 方法\n const update = parser.render(content)\n\n // 同步状态\n markdown.value = parser.getBuffer()\n completedBlocks.value = parser.getCompletedBlocks().map(b => markRaw(b))\n pendingBlocks.value = []\n isLoading.value = false\n\n return update\n }\n\n return {\n /** 已收集的完整 Markdown 字符串 */\n markdown,\n /** 已完成的块列表 */\n completedBlocks,\n /** 待处理的块列表 */\n pendingBlocks,\n /** 当前完整的 AST */\n ast,\n /** 所有块(完成 + 待处理),带稳定 ID */\n blocks,\n /** 是否正在加载 */\n isLoading,\n /** 追加内容 */\n append,\n /** 完成解析 */\n finalize,\n /** 强制中断 */\n abort,\n /** 重置解析器 */\n reset,\n /** 一次性渲染(reset + append + finalize) */\n render,\n /** 解析器实例 */\n parser\n }\n}\n","import { ref, computed, type Ref, type ComputedRef } from 'vue'\nimport type { ParsedBlock } from '@incremark/core'\n\nexport interface BlockWithStableId extends ParsedBlock {\n /** 稳定的渲染 ID(用于 Vue key) */\n stableId: string\n}\n\nexport interface UseStreamRendererOptions {\n /** 已完成的块 */\n completedBlocks: Ref<ParsedBlock[]>\n /** 待处理的块 */\n pendingBlocks: Ref<ParsedBlock[]>\n}\n\nexport interface UseStreamRendererReturn {\n /** 带稳定 ID 的已完成块 */\n stableCompletedBlocks: ComputedRef<BlockWithStableId[]>\n /** 带稳定 ID 的待处理块 */\n stablePendingBlocks: ComputedRef<BlockWithStableId[]>\n /** 所有带稳定 ID 的块 */\n allStableBlocks: ComputedRef<BlockWithStableId[]>\n}\n\n/**\n * Vue 3 Composable: 流式渲染辅助\n *\n * 为块分配稳定的渲染 ID,确保 Vue 的虚拟 DOM 复用\n */\nexport function useStreamRenderer(options: UseStreamRendererOptions): UseStreamRendererReturn {\n const { completedBlocks, pendingBlocks } = options\n\n const stableCompletedBlocks = computed<BlockWithStableId[]>(() =>\n completedBlocks.value.map((block) => ({\n ...block,\n stableId: block.id\n }))\n )\n\n const stablePendingBlocks = computed<BlockWithStableId[]>(() =>\n pendingBlocks.value.map((block, index) => ({\n ...block,\n stableId: `pending-${index}`\n }))\n )\n\n const allStableBlocks = computed(() => [...stableCompletedBlocks.value, ...stablePendingBlocks.value])\n\n return {\n stableCompletedBlocks,\n stablePendingBlocks,\n allStableBlocks\n }\n}\n\n","import { onMounted, onUnmounted } from 'vue'\nimport { createDevTools, type DevToolsOptions } from '@incremark/devtools'\nimport type { UseIncremarkReturn } from './useIncremark'\n\nexport interface UseDevToolsOptions extends DevToolsOptions {}\n\n/**\n * Vue 3 DevTools 一行接入\n *\n * @example\n * ```vue\n * <script setup>\n * import { useIncremark, useDevTools } from '@incremark/vue'\n *\n * const incremark = useIncremark()\n * useDevTools(incremark) // 就这一行!\n * </script>\n * ```\n */\nexport function useDevTools(\n incremark: UseIncremarkReturn,\n options: UseDevToolsOptions = {}\n) {\n const devtools = createDevTools(options)\n\n // 设置 parser 的 onChange 回调\n incremark.parser.setOnChange((state) => {\n const blocks = [\n ...state.completedBlocks.map((b) => ({ ...b, stableId: b.id })),\n ...state.pendingBlocks.map((b, i) => ({ ...b, stableId: `pending-${i}` }))\n ]\n\n devtools.update({\n blocks,\n completedBlocks: state.completedBlocks,\n pendingBlocks: state.pendingBlocks,\n markdown: state.markdown,\n ast: state.ast,\n isLoading: state.pendingBlocks.length > 0\n })\n })\n\n onMounted(() => {\n devtools.mount()\n })\n\n onUnmounted(() => {\n devtools.unmount()\n // 清理回调\n incremark.parser.setOnChange(undefined)\n })\n\n return devtools\n}\n","<script setup lang=\"ts\">\nimport { computed, type Component } from 'vue'\nimport type { ParsedBlock } from '@incremark/core'\nimport IncremarkHeading from './IncremarkHeading.vue'\nimport IncremarkParagraph from './IncremarkParagraph.vue'\nimport IncremarkCode from './IncremarkCode.vue'\nimport IncremarkList from './IncremarkList.vue'\nimport IncremarkTable from './IncremarkTable.vue'\nimport IncremarkBlockquote from './IncremarkBlockquote.vue'\nimport IncremarkThematicBreak from './IncremarkThematicBreak.vue'\nimport IncremarkMath from './IncremarkMath.vue'\nimport IncremarkDefault from './IncremarkDefault.vue'\n\n// 组件映射类型\nexport type ComponentMap = Partial<Record<string, Component>>\n\n// 带稳定 ID 的块类型\nexport interface BlockWithStableId extends ParsedBlock {\n stableId: string\n}\n\nconst props = withDefaults(\n defineProps<{\n /** 要渲染的块列表(来自 useIncremark 的 blocks) */\n blocks: BlockWithStableId[]\n /** 自定义组件映射,key 为节点类型 */\n components?: ComponentMap\n /** 待处理块的样式类名 */\n pendingClass?: string\n /** 已完成块的样式类名 */\n completedClass?: string\n /** 是否显示块状态边框 */\n showBlockStatus?: boolean\n }>(),\n {\n components: () => ({}),\n pendingClass: 'incremark-pending',\n completedClass: 'incremark-completed',\n showBlockStatus: false\n }\n)\n\n// 默认组件映射\nconst defaultComponents: Record<string, Component> = {\n heading: IncremarkHeading,\n paragraph: IncremarkParagraph,\n code: IncremarkCode,\n list: IncremarkList,\n table: IncremarkTable,\n blockquote: IncremarkBlockquote,\n thematicBreak: IncremarkThematicBreak,\n math: IncremarkMath,\n inlineMath: IncremarkMath\n}\n\n// 合并用户组件和默认组件\nconst mergedComponents = computed(() => ({\n ...defaultComponents,\n ...props.components\n}))\n\nfunction getComponent(type: string): Component {\n return mergedComponents.value[type] || props.components?.default || IncremarkDefault\n}\n</script>\n\n<template>\n <div class=\"incremark\">\n <TransitionGroup name=\"incremark-fade\">\n <div\n v-for=\"block in blocks\"\n :key=\"block.stableId\"\n :class=\"[\n 'incremark-block',\n block.status === 'completed' ? completedClass : pendingClass,\n { 'incremark-show-status': showBlockStatus }\n ]\"\n >\n <component :is=\"getComponent(block.node.type)\" :node=\"block.node\" />\n </div>\n </TransitionGroup>\n </div>\n</template>\n\n<style scoped>\n.incremark-block.incremark-show-status.incremark-pending {\n border-left: 3px solid #a855f7;\n padding-left: 12px;\n opacity: 0.8;\n}\n\n.incremark-fade-enter-active {\n transition: opacity 0.2s ease-out;\n}\n\n.incremark-fade-enter-from {\n opacity: 0;\n}\n</style>\n","<script setup lang=\"ts\">\nimport type { Heading } from 'mdast'\nimport { computed } from 'vue'\nimport IncremarkInline from './IncremarkInline.vue'\n\nconst props = defineProps<{\n node: Heading\n}>()\n\nconst tag = computed(() => `h${props.node.depth}`)\n</script>\n\n<template>\n <component :is=\"tag\" class=\"incremark-heading\">\n <IncremarkInline :nodes=\"node.children\" />\n </component>\n</template>\n\n<style scoped>\n.incremark-heading {\n margin: 0.5em 0;\n font-weight: 600;\n line-height: 1.3;\n}\n\nh1 { font-size: 2em; border-bottom: 1px solid #eee; padding-bottom: 0.3em; }\nh2 { font-size: 1.5em; }\nh3 { font-size: 1.25em; }\nh4 { font-size: 1em; }\nh5 { font-size: 0.875em; }\nh6 { font-size: 0.85em; color: #666; }\n</style>\n\n","<script setup lang=\"ts\">\nimport { computed, ref, watch, shallowRef, onUnmounted } from 'vue'\n\n// Math 节点类型(来自 mdast-util-math)\ninterface MathNode {\n type: 'math' | 'inlineMath'\n value: string\n data?: {\n hName?: string\n hProperties?: Record<string, any>\n }\n}\n\nconst props = withDefaults(\n defineProps<{\n node: MathNode\n /** 渲染延迟(毫秒),用于流式输入时防抖 */\n renderDelay?: number\n }>(),\n {\n renderDelay: 300\n }\n)\n\nconst renderedHtml = ref('')\nconst renderError = ref('')\nconst isLoading = ref(false)\nconst katexRef = shallowRef<any>(null)\nlet renderTimer: ReturnType<typeof setTimeout> | null = null\n\nconst isInline = computed(() => props.node.type === 'inlineMath')\nconst formula = computed(() => props.node.value)\n\n// 带防抖动的渲染\nfunction scheduleRender() {\n if (!formula.value) {\n renderedHtml.value = ''\n return\n }\n\n // 清除之前的定时器\n if (renderTimer) {\n clearTimeout(renderTimer)\n }\n\n isLoading.value = true\n\n // 防抖动延迟渲染\n renderTimer = setTimeout(() => {\n doRender()\n }, props.renderDelay)\n}\n\nasync function doRender() {\n if (!formula.value) return\n\n try {\n // 动态导入 KaTeX\n if (!katexRef.value) {\n // @ts-ignore - katex 是可选依赖\n const katexModule = await import('katex')\n katexRef.value = katexModule.default\n }\n\n const katex = katexRef.value\n renderedHtml.value = katex.renderToString(formula.value, {\n displayMode: !isInline.value,\n throwOnError: false,\n strict: false\n })\n renderError.value = ''\n } catch (e: any) {\n // 静默失败,可能是公式不完整\n renderError.value = ''\n renderedHtml.value = ''\n } finally {\n isLoading.value = false\n }\n}\n\nonUnmounted(() => {\n if (renderTimer) {\n clearTimeout(renderTimer)\n }\n})\n\nwatch(formula, scheduleRender, { immediate: true })\n</script>\n\n<template>\n <!-- 行内公式 -->\n <span v-if=\"isInline\" class=\"incremark-math-inline\">\n <!-- 渲染成功 -->\n <span v-if=\"renderedHtml && !isLoading\" v-html=\"renderedHtml\" />\n <!-- 加载中或未渲染:显示源码 -->\n <code v-else class=\"math-source\">{{ formula }}</code>\n </span>\n <!-- 块级公式 -->\n <div v-else class=\"incremark-math-block\">\n <!-- 渲染成功 -->\n <div v-if=\"renderedHtml && !isLoading\" v-html=\"renderedHtml\" class=\"math-rendered\" />\n <!-- 加载中或未渲染:显示源码 -->\n <pre v-else class=\"math-source-block\"><code>{{ formula }}</code></pre>\n </div>\n</template>\n\n<style scoped>\n.incremark-math-inline {\n display: inline;\n}\n\n.incremark-math-block {\n margin: 1em 0;\n padding: 1em;\n overflow-x: auto;\n text-align: center;\n}\n\n.math-source {\n background: #f3f4f6;\n padding: 0.1em 0.3em;\n border-radius: 3px;\n font-size: 0.9em;\n color: #6b7280;\n}\n\n.math-source-block {\n margin: 0;\n padding: 1em;\n background: #f3f4f6;\n border-radius: 6px;\n text-align: left;\n}\n\n.math-source-block code {\n font-family: 'Fira Code', monospace;\n font-size: 0.9em;\n color: #374151;\n}\n\n.math-rendered :deep(.katex) {\n font-size: 1.1em;\n}\n\n.math-rendered :deep(.katex-display) {\n margin: 0;\n overflow-x: auto;\n overflow-y: hidden;\n}\n</style>\n","import { createCommentVNode as _createCommentVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, Fragment as _Fragment } from \"vue\"\n\nconst _hoisted_1 = {\n key: 0,\n class: \"incremark-math-inline\"\n}\nconst _hoisted_2 = [\"innerHTML\"]\nconst _hoisted_3 = { class: \"math-source\" }\nconst _hoisted_4 = { class: \"incremark-math-block\" }\nconst _hoisted_5 = [\"innerHTML\"]\nconst _hoisted_6 = { class: \"math-source-block\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n _createCommentVNode(\" 行内公式 \"),\n ($setup.isInline)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_1, [\n _createCommentVNode(\" 渲染成功 \"),\n ($setup.renderedHtml && !$setup.isLoading)\n ? (_openBlock(), _createElementBlock(\"span\", {\n key: 0,\n innerHTML: $setup.renderedHtml\n }, null, 8 /* PROPS */, _hoisted_2))\n : (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n _createCommentVNode(\" 加载中或未渲染:显示源码 \"),\n _createElementVNode(\"code\", _hoisted_3, _toDisplayString($setup.formula), 1 /* TEXT */)\n ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n ]))\n : (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n _createCommentVNode(\" 块级公式 \"),\n _createElementVNode(\"div\", _hoisted_4, [\n _createCommentVNode(\" 渲染成功 \"),\n ($setup.renderedHtml && !$setup.isLoading)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n innerHTML: $setup.renderedHtml,\n class: \"math-rendered\"\n }, null, 8 /* PROPS */, _hoisted_5))\n : (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n _createCommentVNode(\" 加载中或未渲染:显示源码 \"),\n _createElementVNode(\"pre\", _hoisted_6, [\n _createElementVNode(\"code\", null, _toDisplayString($setup.formula), 1 /* TEXT */)\n ])\n ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n ])\n ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n}","import script from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkMath.vue?type=script\";import \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkMath.vue?type=style&index=0\";import { render } from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkMath.vue?type=template\"; script.render = render;script.__file = \"src/components/IncremarkMath.vue\";script.__scopeId = \"data-v-6146c361\";export default script;","<script setup lang=\"ts\">\nimport type { PhrasingContent } from 'mdast'\nimport IncremarkMath from './IncremarkMath.vue'\n\ndefineProps<{\n nodes: PhrasingContent[]\n}>()\n\nfunction escapeHtml(str: string): string {\n return str\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n}\n</script>\n\n<template>\n <template v-for=\"(node, idx) in nodes\" :key=\"idx\">\n <!-- 文本 -->\n <template v-if=\"node.type === 'text'\">{{ node.value }}</template>\n\n <!-- 行内公式 -->\n <IncremarkMath v-else-if=\"(node as any).type === 'inlineMath'\" :node=\"node as any\" />\n\n <!-- 加粗 -->\n <strong v-else-if=\"node.type === 'strong'\">\n <IncremarkInline :nodes=\"(node.children as PhrasingContent[])\" />\n </strong>\n\n <!-- 斜体 -->\n <em v-else-if=\"node.type === 'emphasis'\">\n <IncremarkInline :nodes=\"(node.children as PhrasingContent[])\" />\n </em>\n\n <!-- 行内代码 -->\n <code v-else-if=\"node.type === 'inlineCode'\" class=\"incremark-inline-code\">{{ node.value }}</code>\n\n <!-- 链接 -->\n <a\n v-else-if=\"node.type === 'link'\"\n :href=\"node.url\"\n target=\"_blank\"\n rel=\"noopener\"\n >\n <IncremarkInline :nodes=\"(node.children as PhrasingContent[])\" />\n </a>\n\n <!-- 图片 -->\n <img\n v-else-if=\"node.type === 'image'\"\n :src=\"node.url\"\n :alt=\"node.alt || ''\"\n loading=\"lazy\"\n />\n\n <!-- 换行 -->\n <br v-else-if=\"node.type === 'break'\" />\n\n <!-- 删除线 -->\n <del v-else-if=\"node.type === 'delete'\">\n <IncremarkInline :nodes=\"(node.children as PhrasingContent[])\" />\n </del>\n </template>\n</template>\n\n<style>\n.incremark-inline-code {\n padding: 0.2em 0.4em;\n background: rgba(0, 0, 0, 0.06);\n border-radius: 4px;\n font-family: 'Fira Code', 'SF Mono', Consolas, monospace;\n font-size: 0.9em;\n}\n</style>\n","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createVNode as _createVNode, resolveComponent as _resolveComponent, createElementVNode as _createElementVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"incremark-inline-code\" }\nconst _hoisted_2 = [\"href\"]\nconst _hoisted_3 = [\"src\", \"alt\"]\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_IncremarkInline = _resolveComponent(\"IncremarkInline\", true)\n\n return (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($props.nodes, (node, idx) => {\n return (_openBlock(), _createElementBlock(_Fragment, { key: idx }, [\n _createCommentVNode(\" 文本 \"),\n (node.type === 'text')\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n _createTextVNode(_toDisplayString(node.value), 1 /* TEXT */)\n ], 64 /* STABLE_FRAGMENT */))\n : ((node as any).type === 'inlineMath')\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n _createCommentVNode(\" 行内公式 \"),\n _createVNode($setup[\"IncremarkMath\"], {\n node: node as any\n }, null, 8 /* PROPS */, [\"node\"])\n ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n : (node.type === 'strong')\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 2 }, [\n _createCommentVNode(\" 加粗 \"),\n _createElementVNode(\"strong\", null, [\n _createVNode(_component_IncremarkInline, {\n nodes: (node.children as PhrasingContent[])\n }, null, 8 /* PROPS */, [\"nodes\"])\n ])\n ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n : (node.type === 'emphasis')\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 3 }, [\n _createCommentVNode(\" 斜体 \"),\n _createElementVNode(\"em\", null, [\n _createVNode(_component_IncremarkInline, {\n nodes: (node.children as PhrasingContent[])\n }, null, 8 /* PROPS */, [\"nodes\"])\n ])\n ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n : (node.type === 'inlineCode')\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 4 }, [\n _createCommentVNode(\" 行内代码 \"),\n _createElementVNode(\"code\", _hoisted_1, _toDisplayString(node.value), 1 /* TEXT */)\n ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n : (node.type === 'link')\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 5 }, [\n _createCommentVNode(\" 链接 \"),\n _createElementVNode(\"a\", {\n href: node.url,\n target: \"_blank\",\n rel: \"noopener\"\n }, [\n _createVNode(_component_IncremarkInline, {\n nodes: (node.children as PhrasingContent[])\n }, null, 8 /* PROPS */, [\"nodes\"])\n ], 8 /* PROPS */, _hoisted_2)\n ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n : (node.type === 'image')\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 6 }, [\n _createCommentVNode(\" 图片 \"),\n _createElementVNode(\"img\", {\n src: node.url,\n alt: node.alt || '',\n loading: \"lazy\"\n }, null, 8 /* PROPS */, _hoisted_3)\n ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n : (node.type === 'break')\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 7 }, [\n _createCommentVNode(\" 换行 \"),\n _cache[0] || (_cache[0] = _createElementVNode(\"br\", null, null, -1 /* CACHED */))\n ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n : (node.type === 'delete')\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 8 }, [\n _createCommentVNode(\" 删除线 \"),\n _createElementVNode(\"del\", null, [\n _createVNode(_component_IncremarkInline, {\n nodes: (node.children as PhrasingContent[])\n }, null, 8 /* PROPS */, [\"nodes\"])\n ])\n ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n : _createCommentVNode(\"v-if\", true)\n ], 64 /* STABLE_FRAGMENT */))\n }), 128 /* KEYED_FRAGMENT */))\n}","import script from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkInline.vue?type=script\";import \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkInline.vue?type=style&index=0\";import { render } from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkInline.vue?type=template\"; script.render = render;script.__file = \"src/components/IncremarkInline.vue\";export default script;","import { createVNode as _createVNode, resolveDynamicComponent as _resolveDynamicComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n return (_openBlock(), _createBlock(_resolveDynamicComponent($setup.tag), { class: \"incremark-heading\" }, {\n default: _withCtx(() => [\n _createVNode($setup[\"IncremarkInline\"], {\n nodes: $props.node.children\n }, null, 8 /* PROPS */, [\"nodes\"])\n ]),\n _: 1 /* STABLE */\n }))\n}","import script from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkHeading.vue?type=script\";import \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkHeading.vue?type=style&index=0\";import { render } from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkHeading.vue?type=template\"; script.render = render;script.__file = \"src/components/IncremarkHeading.vue\";script.__scopeId = \"data-v-56c8779f\";export default script;","import { createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"incremark-paragraph\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n return (_openBlock(), _createElementBlock(\"p\", _hoisted_1, [\n _createVNode($setup[\"IncremarkInline\"], {\n nodes: $props.node.children\n }, null, 8 /* PROPS */, [\"nodes\"])\n ]))\n}","import script from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkParagraph.vue?type=script\";import \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkParagraph.vue?type=style&index=0\";import { render } from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkParagraph.vue?type=template\"; script.render = render;script.__file = \"src/components/IncremarkParagraph.vue\";script.__scopeId = \"data-v-6fa83031\";export default script;","<script setup lang=\"ts\">\nimport type { Code } from 'mdast'\nimport { computed, ref, watch, shallowRef, onUnmounted } from 'vue'\n\nconst props = withDefaults(\n defineProps<{\n node: Code\n /** Shiki 主题,默认 github-dark */\n theme?: string\n /** 是否禁用代码高亮 */\n disableHighlight?: boolean\n /** Mermaid 渲染延迟(毫秒),用于流式输入时防抖 */\n mermaidDelay?: number\n }>(),\n {\n theme: 'github-dark',\n disableHighlight: false,\n mermaidDelay: 500\n }\n)\n\nconst copied = ref(false)\nconst highlightedHtml = ref('')\nconst isHighlighting = ref(false)\nconst highlightError = ref(false)\n\n// Mermaid 支持\nconst mermaidSvg = ref('')\nconst mermaidError = ref('')\nconst mermaidLoading = ref(false)\nconst mermaidRef = shallowRef<any>(null)\nlet mermaidTimer: ReturnType<typeof setTimeout> | null = null\n// 视图模式:'preview' | 'source'\nconst mermaidViewMode = ref<'preview' | 'source'>('preview')\n\nfunction toggleMermaidView() {\n mermaidViewMode.value = mermaidViewMode.value === 'preview' ? 'source' : 'preview'\n}\n\nconst language = computed(() => props.node.lang || 'text')\nconst code = computed(() => props.node.value)\nconst isMermaid = computed(() => language.value === 'mermaid')\n\n// 缓存 highlighter\nconst highlighterRef = shallowRef<any>(null)\nconst loadedLanguages = new Set<string>()\nconst loadedThemes = new Set<string>()\n\n// Mermaid 渲染(带防抖动)\nfunction scheduleRenderMermaid() {\n if (!isMermaid.value || !code.value) return\n\n // 清除之前的定时器\n if (mermaidTimer) {\n clearTimeout(mermaidTimer)\n }\n\n // 显示加载状态\n mermaidLoading.value = true\n\n // 防抖动延迟渲染\n mermaidTimer = setTimeout(() => {\n doRenderMermaid()\n }, props.mermaidDelay)\n}\n\nasync function doRenderMermaid() {\n if (!code.value) return\n\n mermaidError.value = ''\n\n try {\n // 动态导入 mermaid\n if (!mermaidRef.value) {\n // @ts-ignore - mermaid 是可选依赖\n const mermaidModule = await import('mermaid')\n mermaidRef.value = mermaidModule.default\n mermaidRef.value.initialize({\n startOnLoad: false,\n theme: 'dark',\n securityLevel: 'loose'\n })\n }\n\n const mermaid = mermaidRef.value\n const id = `mermaid-${Date.now()}-${Math.random().toString(36).slice(2)}`\n\n const { svg } = await mermaid.render(id, code.value)\n mermaidSvg.value = svg\n } catch (e: any) {\n // 不显示错误,可能是代码还不完整\n mermaidError.value = ''\n mermaidSvg.value = ''\n } finally {\n mermaidLoading.value = false\n }\n}\n\nonUnmounted(() => {\n if (mermaidTimer) {\n clearTimeout(mermaidTimer)\n }\n})\n\n// 动态加载 shiki 并高亮\nasync function highlight() {\n if (isMermaid.value) {\n scheduleRenderMermaid()\n return\n }\n\n if (!code.value || props.disableHighlight) {\n highlightedHtml.value = ''\n return\n }\n\n isHighlighting.value = true\n highlightError.value = false\n\n try {\n // 动态导入 shiki\n if (!highlighterRef.value) {\n const { createHighlighter } = await import('shiki')\n highlighterRef.value = await createHighlighter({\n themes: [props.theme as any],\n langs: []\n })\n loadedThemes.add(props.theme)\n }\n\n const highlighter = highlighterRef.value\n const lang = language.value\n\n // 按需加载语言\n if (!loadedLanguages.has(lang) && lang !== 'text') {\n try {\n await highlighter.loadLanguage(lang)\n loadedLanguages.add(lang)\n } catch {\n // 语言不支持,标记但不阻止\n }\n }\n\n // 按需加载主题\n if (!loadedThemes.has(props.theme)) {\n try {\n await highlighter.loadTheme(props.theme)\n loadedThemes.add(props.theme)\n } catch {\n // 主题不支持\n }\n }\n\n const html = highlighter.codeToHtml(code.value, {\n lang: loadedLanguages.has(lang) ? lang : 'text',\n theme: loadedThemes.has(props.theme) ? props.theme : 'github-dark'\n })\n highlightedHtml.value = html\n } catch (e) {\n // Shiki 不可用或加载失败\n highlightError.value = true\n highlightedHtml.value = ''\n } finally {\n isHighlighting.value = false\n }\n}\n\n// 监听代码变化,重新高亮/渲染\nwatch([code, () => props.theme, isMermaid], highlight, { immediate: true })\n\nasync function copyCode() {\n try {\n await navigator.clipboard.writeText(code.value)\n copied.value = true\n setTimeout(() => {\n copied.value = false\n }, 2000)\n } catch {\n // 复制失败静默处理\n }\n}\n</script>\n\n<template>\n <!-- Mermaid 图表 -->\n <div v-if=\"isMermaid\" class=\"incremark-mermaid\">\n <div class=\"mermaid-header\">\n <span class=\"language\">MERMAID</span>\n <div class=\"mermaid-actions\">\n <button \n class=\"view-toggle\" \n @click=\"toggleMermaidView\" \n type=\"button\"\n :disabled=\"!mermaidSvg\"\n >\n {{ mermaidViewMode === 'preview' ? '源码' : '预览' }}\n </button>\n <button class=\"copy-btn\" @click=\"copyCode\" type=\"button\">\n {{ copied ? '✓ 已复制' : '复制' }}\n </button>\n </div>\n </div>\n <div class=\"mermaid-content\">\n <!-- 加载中 -->\n <div v-if=\"mermaidLoading && !mermaidSvg\" class=\"mermaid-loading\">\n <pre class=\"mermaid-source-code\">{{ code }}</pre>\n </div>\n <!-- 源码模式 -->\n <pre v-else-if=\"mermaidViewMode === 'source'\" class=\"mermaid-source-code\">{{ code }}</pre>\n <!-- 预览模式 -->\n <div v-else-if=\"mermaidSvg\" v-html=\"mermaidSvg\" class=\"mermaid-svg\" />\n <!-- 无法渲染时显示源码 -->\n <pre v-else class=\"mermaid-source-code\">{{ code }}</pre>\n </div>\n </div>\n\n <!-- 普通代码块 -->\n <div v-else class=\"incremark-code\">\n <div class=\"code-header\">\n <span class=\"language\">{{ language }}</span>\n <button class=\"copy-btn\" @click=\"copyCode\" type=\"button\">\n {{ copied ? '✓ 已复制' : '复制' }}\n </button>\n </div>\n <div class=\"code-content\">\n <!-- 正在加载高亮 -->\n <div v-if=\"isHighlighting && !highlightedHtml\" class=\"code-loading\">\n <pre><code>{{ code }}</code></pre>\n </div>\n <!-- 高亮后的代码 -->\n <div v-else-if=\"highlightedHtml\" v-html=\"highlightedHtml\" class=\"shiki-wrapper\" />\n <!-- 回退:无高亮 -->\n <pre v-else class=\"code-fallback\"><code>{{ code }}</code></pre>\n </div>\n </div>\n</template>\n\n<style scoped>\n/* Mermaid 样式 */\n.incremark-mermaid {\n margin: 1em 0;\n border-radius: 8px;\n overflow: hidden;\n background: #1a1a2e;\n}\n\n.mermaid-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 8px 16px;\n background: #16213e;\n border-bottom: 1px solid #0f3460;\n font-size: 12px;\n}\n\n.mermaid-actions {\n display: flex;\n gap: 8px;\n}\n\n.view-toggle {\n padding: 4px 10px;\n border: 1px solid #0f3460;\n border-radius: 6px;\n background: transparent;\n color: #8b949e;\n font-size: 12px;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.view-toggle:hover:not(:disabled) {\n background: #0f3460;\n color: #e0e0e0;\n}\n\n.view-toggle:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.mermaid-content {\n padding: 16px;\n min-height: 100px;\n}\n\n.mermaid-loading {\n color: #8b949e;\n font-size: 14px;\n}\n\n.mermaid-source-code {\n margin: 0;\n padding: 12px;\n background: #0d1117;\n border-radius: 6px;\n color: #c9d1d9;\n font-family: 'Fira Code', 'SF Mono', monospace;\n font-size: 13px;\n line-height: 1.5;\n white-space: pre-wrap;\n overflow-x: auto;\n}\n\n.mermaid-svg {\n overflow-x: auto;\n}\n\n.mermaid-svg :deep(svg) {\n max-width: 100%;\n height: auto;\n}\n\n/* 代码块样式 */\n.incremark-code {\n margin: 1em 0;\n border-radius: 8px;\n overflow: hidden;\n background: #24292e;\n}\n\n.code-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 8px 16px;\n background: #1f2428;\n border-bottom: 1px solid #30363d;\n font-size: 12px;\n}\n\n.language {\n color: #8b949e;\n text-transform: uppercase;\n font-weight: 500;\n letter-spacing: 0.5px;\n}\n\n.copy-btn {\n padding: 4px 12px;\n border: 1px solid #30363d;\n border-radius: 6px;\n background: transparent;\n color: #8b949e;\n font-size: 12px;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.copy-btn:hover {\n background: #30363d;\n color: #c9d1d9;\n}\n\n.code-content {\n overflow-x: auto;\n}\n\n.code-loading {\n opacity: 0.7;\n}\n\n/* Shiki 生成的代码样式 */\n.shiki-wrapper :deep(pre) {\n margin: 0;\n padding: 16px;\n background: transparent !important;\n overflow-x: auto;\n}\n\n.shiki-wrapper :deep(code) {\n font-family: 'Fira Code', 'SF Mono', 'Monaco', 'Consolas', monospace;\n font-size: 14px;\n line-height: 1.6;\n}\n\n/* 回退样式 */\n.code-fallback,\n.code-loading pre {\n margin: 0;\n padding: 16px;\n overflow-x: auto;\n background: transparent;\n}\n\n.code-fallback code,\n.code-loading code {\n font-family: 'Fira Code', 'SF Mono', 'Monaco', 'Consolas', monospace;\n font-size: 14px;\n line-height: 1.6;\n color: #c9d1d9;\n}\n</style>\n","import { createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, Fragment as _Fragment } from \"vue\"\n\nconst _hoisted_1 = {\n key: 0,\n class: \"incremark-mermaid\"\n}\nconst _hoisted_2 = { class: \"mermaid-header\" }\nconst _hoisted_3 = { class: \"mermaid-actions\" }\nconst _hoisted_4 = [\"disabled\"]\nconst _hoisted_5 = { class: \"mermaid-content\" }\nconst _hoisted_6 = {\n key: 0,\n class: \"mermaid-loading\"\n}\nconst _hoisted_7 = { class: \"mermaid-source-code\" }\nconst _hoisted_8 = { class: \"mermaid-source-code\" }\nconst _hoisted_9 = [\"innerHTML\"]\nconst _hoisted_10 = { class: \"mermaid-source-code\" }\nconst _hoisted_11 = { class: \"incremark-code\" }\nconst _hoisted_12 = { class: \"code-header\" }\nconst _hoisted_13 = { class: \"language\" }\nconst _hoisted_14 = { class: \"code-content\" }\nconst _hoisted_15 = {\n key: 0,\n class: \"code-loading\"\n}\nconst _hoisted_16 = [\"innerHTML\"]\nconst _hoisted_17 = { class: \"code-fallback\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n _createCommentVNode(\" Mermaid 图表 \"),\n ($setup.isMermaid)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _cache[0] || (_cache[0] = _createElementVNode(\"span\", { class: \"language\" }, \"MERMAID\", -1 /* CACHED */)),\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"button\", {\n class: \"view-toggle\",\n onClick: $setup.toggleMermaidView,\n type: \"button\",\n disabled: !$setup.mermaidSvg\n }, _toDisplayString($setup.mermaidViewMode === 'preview' ? '源码' : '预览'), 9 /* TEXT, PROPS */, _hoisted_4),\n _createElementVNode(\"button\", {\n class: \"copy-btn\",\n onClick: $setup.copyCode,\n type: \"button\"\n }, _toDisplayString($setup.copied ? '✓ 已复制' : '复制'), 1 /* TEXT */)\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_5, [\n _createCommentVNode(\" 加载中 \"),\n ($setup.mermaidLoading && !$setup.mermaidSvg)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n _createElementVNode(\"pre\", _hoisted_7, _toDisplayString($setup.code), 1 /* TEXT */)\n ]))\n : ($setup.mermaidViewMode === 'source')\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n _createCommentVNode(\" 源码模式 \"),\n _createElementVNode(\"pre\", _hoisted_8, _toDisplayString($setup.code), 1 /* TEXT */)\n ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n : ($setup.mermaidSvg)\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 2 }, [\n _createCommentVNode(\" 预览模式 \"),\n _createElementVNode(\"div\", {\n innerHTML: $setup.mermaidSvg,\n class: \"mermaid-svg\"\n }, null, 8 /* PROPS */, _hoisted_9)\n ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n : (_openBlock(), _createElementBlock(_Fragment, { key: 3 }, [\n _createCommentVNode(\" 无法渲染时显示源码 \"),\n _createElementVNode(\"pre\", _hoisted_10, _toDisplayString($setup.code), 1 /* TEXT */)\n ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n ])\n ]))\n : (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n _createCommentVNode(\" 普通代码块 \"),\n _createElementVNode(\"div\", _hoisted_11, [\n _createElementVNode(\"div\", _hoisted_12, [\n _createElementVNode(\"span\", _hoisted_13, _toDisplayString($setup.language), 1 /* TEXT */),\n _createElementVNode(\"button\", {\n class: \"copy-btn\",\n onClick: $setup.copyCode,\n type: \"button\"\n }, _toDisplayString($setup.copied ? '✓ 已复制' : '复制'), 1 /* TEXT */)\n ]),\n _createElementVNode(\"div\", _hoisted_14, [\n _createCommentVNode(\" 正在加载高亮 \"),\n ($setup.isHighlighting && !$setup.highlightedHtml)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_15, [\n _createElementVNode(\"pre\", null, [\n _createElementVNode(\"code\", null, _toDisplayString($setup.code), 1 /* TEXT */)\n ])\n ]))\n : ($setup.highlightedHtml)\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n _createCommentVNode(\" 高亮后的代码 \"),\n _createElementVNode(\"div\", {\n innerHTML: $setup.highlightedHtml,\n class: \"shiki-wrapper\"\n }, null, 8 /* PROPS */, _hoisted_16)\n ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n : (_openBlock(), _createElementBlock(_Fragment, { key: 2 }, [\n _createCommentVNode(\" 回退:无高亮 \"),\n _createElementVNode(\"pre\", _hoisted_17, [\n _createElementVNode(\"code\", null, _toDisplayString($setup.code), 1 /* TEXT */)\n ])\n ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n ])\n ])\n ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n}","import script from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkCode.vue?type=script\";import \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkCode.vue?type=style&index=0\";import { render } from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkCode.vue?type=template\"; script.render = render;script.__file = \"src/components/IncremarkCode.vue\";script.__scopeId = \"data-v-c48b1022\";export default script;","<script setup lang=\"ts\">\nimport type { List, ListItem, PhrasingContent } from 'mdast'\nimport { computed } from 'vue'\nimport IncremarkInline from './IncremarkInline.vue'\n\nconst props = defineProps<{\n node: List\n}>()\n\nconst tag = computed(() => props.node.ordered ? 'ol' : 'ul')\n\nfunction getItemContent(item: ListItem): PhrasingContent[] {\n const firstChild = item.children[0]\n if (firstChild?.type === 'paragraph') {\n return firstChild.children as PhrasingContent[]\n }\n return []\n}\n</script>\n\n<template>\n <component :is=\"tag\" class=\"incremark-list\" :class=\"{ 'task-list': node.children.some(item => item.checked !== null && item.checked !== undefined) }\">\n <li \n v-for=\"(item, index) in node.children\" \n :key=\"index\" \n class=\"incremark-list-item\"\n :class=\"{ 'task-item': item.checked !== null && item.checked !== undefined }\"\n >\n <label v-if=\"item.checked !== null && item.checked !== undefined\" class=\"task-label\">\n <input \n type=\"checkbox\" \n :checked=\"item.checked\" \n disabled \n class=\"checkbox\"\n />\n <span class=\"task-content\">\n <IncremarkInline :nodes=\"getItemContent(item)\" />\n </span>\n </label>\n <template v-else>\n <IncremarkInline :nodes=\"getItemContent(item)\" />\n </template>\n </li>\n </component>\n</template>\n\n<style scoped>\n.incremark-list {\n margin: 0.75em 0;\n padding-left: 2em;\n}\n\n.incremark-list.task-list {\n list-style: none;\n padding-left: 0;\n}\n\n.incremark-list-item {\n margin: 0.25em 0;\n line-height: 1.6;\n}\n\n.task-item {\n list-style: none;\n}\n\n.task-label {\n display: flex;\n align-items: flex-start;\n gap: 0.5em;\n cursor: default;\n}\n\n.checkbox {\n margin-top: 0.3em;\n flex-shrink: 0;\n}\n\n.task-content {\n flex: 1;\n}\n</style>\n\n","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, createVNode as _createVNode, createCommentVNode as _createCommentVNode, createBlock as _createBlock, normalizeClass as _normalizeClass, resolveDynamicComponent as _resolveDynamicComponent, withCtx as _withCtx } from \"vue\"\n\nconst _hoisted_1 = {\n key: 0,\n class: \"task-label\"\n}\nconst _hoisted_2 = [\"checked\"]\nconst _hoisted_3 = { class: \"task-content\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n return (_openBlock(), _createBlock(_resolveDynamicComponent($setup.tag), {\n class: _normalizeClass([\"incremark-list\", { 'task-list': $props.node.children.some(item => item.checked !== null && item.checked !== undefined) }])\n }, {\n default: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($props.node.children, (item, index) => {\n return (_openBlock(), _createElementBlock(\"li\", {\n key: index,\n class: _normalizeClass([\"incremark-list-item\", { 'task-item': item.checked !== null && item.checked !== undefined }])\n }, [\n (item.checked !== null && item.checked !== undefined)\n ? (_openBlock(), _createElementBlock(\"label\", _hoisted_1, [\n _createElementVNode(\"input\", {\n type: \"checkbox\",\n checked: item.checked,\n disabled: \"\",\n class: \"checkbox\"\n }, null, 8 /* PROPS */, _hoisted_2),\n _createElementVNode(\"span\", _hoisted_3, [\n _createVNode($setup[\"IncremarkInline\"], {\n nodes: $setup.getItemContent(item)\n }, null, 8 /* PROPS */, [\"nodes\"])\n ])\n ]))\n : (_openBlock(), _createBlock($setup[\"IncremarkInline\"], {\n key: 1,\n nodes: $setup.getItemContent(item)\n }, null, 8 /* PROPS */, [\"nodes\"]))\n ], 2 /* CLASS */))\n }), 128 /* KEYED_FRAGMENT */))\n ]),\n _: 1 /* STABLE */\n }, 8 /* PROPS */, [\"class\"]))\n}","import script from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkList.vue?type=script\";import \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkList.vue?type=style&index=0\";import { render } from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkList.vue?type=template\"; script.render = render;script.__file = \"src/components/IncremarkList.vue\";script.__scopeId = \"data-v-0778ccea\";export default script;","<script setup lang=\"ts\">\nimport type { Table, TableCell, PhrasingContent } from 'mdast'\nimport IncremarkInline from './IncremarkInline.vue'\n\ndefineProps<{\n node: Table\n}>()\n\nfunction getCellContent(cell: TableCell): PhrasingContent[] {\n return cell.children as PhrasingContent[]\n}\n</script>\n\n<template>\n <div class=\"incremark-table-wrapper\">\n <table class=\"incremark-table\">\n <thead>\n <tr v-if=\"node.children[0]\">\n <th \n v-for=\"(cell, cellIndex) in node.children[0].children\" \n :key=\"cellIndex\"\n :style=\"{ textAlign: node.align?.[cellIndex] || 'left' }\"\n >\n <IncremarkInline :nodes=\"getCellContent(cell)\" />\n </th>\n </tr>\n </thead>\n <tbody>\n <tr v-for=\"(row, rowIndex) in node.children.slice(1)\" :key=\"rowIndex\">\n <td \n v-for=\"(cell, cellIndex) in row.children\" \n :key=\"cellIndex\"\n :style=\"{ textAlign: node.align?.[cellIndex] || 'left' }\"\n >\n <IncremarkInline :nodes=\"getCellContent(cell)\" />\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n</template>\n\n<style scoped>\n.incremark-table-wrapper {\n overflow-x: auto;\n margin: 1em 0;\n}\n\n.incremark-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 14px;\n}\n\n.incremark-table th,\n.incremark-table td {\n border: 1px solid #ddd;\n padding: 10px 14px;\n}\n\n.incremark-table th {\n background: #f8f9fa;\n font-weight: 600;\n}\n\n.incremark-table tr:nth-child(even) {\n background: #fafafa;\n}\n\n.incremark-table tr:hover {\n background: #f0f0f0;\n}\n</style>\n\n","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createVNode as _createVNode, normalizeStyle as _normalizeStyle, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"incremark-table-wrapper\" }\nconst _hoisted_2 = { class: \"incremark-table\" }\nconst _hoisted_3 = { key: 0 }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"table\", _hoisted_2, [\n _createElementVNode(\"thead\", null, [\n ($props.node.children[0])\n ? (_openBlock(), _createElementBlock(\"tr\", _hoisted_3, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($props.node.children[0].children, (cell, cellIndex) => {\n return (_openBlock(), _createElementBlock(\"th\", {\n key: cellIndex,\n style: _normalizeStyle({ textAlign: $props.node.align?.[cellIndex] || 'left' })\n }, [\n _createVNode($setup[\"IncremarkInline\"], {\n nodes: $setup.getCellContent(cell)\n }, null, 8 /* PROPS */, [\"nodes\"])\n ], 4 /* STYLE */))\n }), 128 /* KEYED_FRAGMENT */))\n ]))\n : _createCommentVNode(\"v-if\", true)\n ]),\n _createElementVNode(\"tbody\", null, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($props.node.children.slice(1), (row, rowIndex) => {\n return (_openBlock(), _createElementBlock(\"tr\", { key: rowIndex }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(row.children, (cell, cellIndex) => {\n return (_openBlock(), _createElementBlock(\"td\", {\n key: cellIndex,\n style: _normalizeStyle({ textAlign: $props.node.align?.[cellIndex] || 'left' })\n }, [\n _createVNode($setup[\"IncremarkInline\"], {\n nodes: $setup.getCellContent(cell)\n }, null, 8 /* PROPS */, [\"nodes\"])\n ], 4 /* STYLE */))\n }), 128 /* KEYED_FRAGMENT */))\n ]))\n }), 128 /* KEYED_FRAGMENT */))\n ])\n ])\n ]))\n}","import script from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkTable.vue?type=script\";import \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkTable.vue?type=style&index=0\";import { render } from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkTable.vue?type=template\"; script.render = render;script.__file = \"src/components/IncremarkTable.vue\";script.__scopeId = \"data-v-7aea7ba6\";export default script;","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString } from \"vue\"\n\nconst _hoisted_1 = { class: \"incremark-blockquote\" }\nconst _hoisted_2 = {\n key: 1,\n class: \"unknown-child\"\n}\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n return (_openBlock(), _createElementBlock(\"blockquote\", _hoisted_1, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($props.node.children, (child, index) => {\n return (_openBlock(), _createElementBlock(_Fragment, { key: index }, [\n (child.type === 'paragraph')\n ? (_openBlock(), _createBlock($setup[\"IncremarkParagraph\"], {\n key: 0,\n node: child\n }, null, 8 /* PROPS */, [\"node\"]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_2, _toDisplayString(child.type), 1 /* TEXT */))\n ], 64 /* STABLE_FRAGMENT */))\n }), 128 /* KEYED_FRAGMENT */))\n ]))\n}","import script from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkBlockquote.vue?type=script\";import \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkBlockquote.vue?type=style&index=0\";import { render } from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkBlockquote.vue?type=template\"; script.render = render;script.__file = \"src/components/IncremarkBlockquote.vue\";script.__scopeId = \"data-v-67363f13\";export default script;","import { openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"incremark-hr\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n return (_openBlock(), _createElementBlock(\"hr\", _hoisted_1))\n}","import script from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkThematicBreak.vue?type=script\";import \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkThematicBreak.vue?type=style&index=0\";import { render } from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkThematicBreak.vue?type=template\"; script.render = render;script.__file = \"src/components/IncremarkThematicBreak.vue\";script.__scopeId = \"data-v-cb316429\";export default script;","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"incremark-default\" }\nconst _hoisted_2 = { class: \"type-badge\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"span\", _hoisted_2, _toDisplayString($props.node.type), 1 /* TEXT */),\n _createElementVNode(\"pre\", null, _toDisplayString(JSON.stringify($props.node, null, 2)), 1 /* TEXT */)\n ]))\n}","import script from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkDefault.vue?type=script\";import \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkDefault.vue?type=style&index=0\";import { render } from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkDefault.vue?type=template\"; script.render = render;script.__file = \"src/components/IncremarkDefault.vue\";script.__scopeId = \"data-v-5542d517\";export default script;","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveDynamicComponent as _resolveDynamicComponent, createBlock as _createBlock, normalizeClass as _normalizeClass, TransitionGroup as _TransitionGroup, withCtx as _withCtx, createVNode as _createVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"incremark\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_TransitionGroup, { name: \"incremark-fade\" }, {\n default: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($props.blocks, (block) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n key: block.stableId,\n class: _normalizeClass([\n 'incremark-block',\n block.status === 'completed' ? $props.completedClass : $props.pendingClass,\n { 'incremark-show-status': $props.showBlockStatus }\n ])\n }, [\n (_openBlock(), _createBlock(_resolveDynamicComponent($setup.getComponent(block.node.type)), {\n node: block.node\n }, null, 8 /* PROPS */, [\"node\"]))\n ], 2 /* CLASS */))\n }), 128 /* KEYED_FRAGMENT */))\n ]),\n _: 1 /* STABLE */\n })\n ]))\n}","import script from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/Incremark.vue?type=script\";import \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/Incremark.vue?type=style&index=0\";import { render } from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/Incremark.vue?type=template\"; script.render = render;script.__file = \"src/components/Incremark.vue\";script.__scopeId = \"data-v-5966b843\";export default script;","<script setup lang=\"ts\">\nimport type { RootContent } from 'mdast'\nimport type { Component } from 'vue'\nimport IncremarkHeading from './IncremarkHeading.vue'\nimport IncremarkParagraph from './IncremarkParagraph.vue'\nimport IncremarkCode from './IncremarkCode.vue'\nimport IncremarkList from './IncremarkList.vue'\nimport IncremarkTable from './IncremarkTable.vue'\nimport IncremarkBlockquote from './IncremarkBlockquote.vue'\nimport IncremarkThematicBreak from './IncremarkThematicBreak.vue'\nimport IncremarkMath from './IncremarkMath.vue'\nimport IncremarkDefault from './IncremarkDefault.vue'\n\ndefineProps<{\n node: RootContent\n}>()\n\nconst componentMap: Record<string, Component> = {\n heading: IncremarkHeading,\n paragraph: IncremarkParagraph,\n code: IncremarkCode,\n list: IncremarkList,\n table: IncremarkTable,\n blockquote: IncremarkBlockquote,\n thematicBreak: IncremarkThematicBreak,\n math: IncremarkMath,\n inlineMath: IncremarkMath,\n}\n\nfunction getComponent(type: string): Component {\n return componentMap[type] || IncremarkDefault\n}\n</script>\n\n<template>\n <component :is=\"getComponent(node.type)\" :node=\"node\" />\n</template>\n\n","import { resolveDynamicComponent as _resolveDynamicComponent, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n return (_openBlock(), _createBlock(_resolveDynamicComponent($setup.getComponent($props.node.type)), { node: $props.node }, null, 8 /* PROPS */, [\"node\"]))\n}","import script from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkRenderer.vue?type=script\";import { render } from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkRenderer.vue?type=template\"; script.render = render;script.__file = \"src/components/IncremarkRenderer.vue\";export default script;"],"mappings":";AAAA,SAAS,KAAK,YAAY,UAAU,eAAe;AACnD;AAAA,EAEE;AAAA,OAKK;AA+BA,SAAS,aAAa,UAA+B,CAAC,GAAG;AAC9D,QAAM,SAAS,sBAAsB,OAAO;AAC5C,QAAM,kBAAkB,WAA0B,CAAC,CAAC;AACpD,QAAM,gBAAgB,WAA0B,CAAC,CAAC;AAClD,QAAM,YAAY,IAAI,KAAK;AAE3B,QAAM,WAAW,IAAI,EAAE;AAEvB,QAAM,MAAM,SAAe,OAAO;AAAA,IAChC,MAAM;AAAA,IACN,UAAU;AAAA,MACR,GAAG,gBAAgB,MAAM,IAAI,CAAC,MAAM,EAAE,IAAI;AAAA,MAC1C,GAAG,cAAc,MAAM,IAAI,CAAC,MAAM,EAAE,IAAI;AAAA,IAC1C;AAAA,EACF,EAAE;AAGF,QAAM,SAAS,SAAS,MAAM;AAC5B,UAAM,SAAoD,CAAC;AAE3D,eAAW,SAAS,gBAAgB,OAAO;AACzC,aAAO,KAAK,EAAE,GAAG,OAAO,UAAU,MAAM,GAAG,CAAC;AAAA,IAC9C;AAEA,aAAS,IAAI,GAAG,IAAI,cAAc,MAAM,QAAQ,KAAK;AACnD,aAAO,KAAK;AAAA,QACV,GAAG,cAAc,MAAM,CAAC;AAAA,QACxB,UAAU,WAAW,CAAC;AAAA,MACxB,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,EACT,CAAC;AAED,WAAS,OAAO,OAAkC;AAChD,cAAU,QAAQ;AAClB,UAAM,SAAS,OAAO,OAAO,KAAK;AAGlC,aAAS,QAAQ,OAAO,UAAU;AAGlC,QAAI,OAAO,UAAU,SAAS,GAAG;AAC/B,sBAAgB,QAAQ;AAAA,QACtB,GAAG,gBAAgB;AAAA,QACnB,GAAG,OAAO,UAAU,IAAI,CAAC,MAAM,QAAQ,CAAC,CAAC;AAAA,MAC3C;AAAA,IACF;AACA,kBAAc,QAAQ,OAAO,QAAQ,IAAI,CAAC,MAAM,QAAQ,CAAC,CAAC;AAE1D,WAAO;AAAA,EACT;AAEA,WAAS,WAA8B;AACrC,UAAM,SAAS,OAAO,SAAS;AAG/B,aAAS,QAAQ,OAAO,UAAU;AAElC,QAAI,OAAO,UAAU,SAAS,GAAG;AAC/B,sBAAgB,QAAQ;AAAA,QACtB,GAAG,gBAAgB;AAAA,QACnB,GAAG,OAAO,UAAU,IAAI,CAAC,MAAM,QAAQ,CAAC,CAAC;AAAA,MAC3C;AAAA,IACF;AACA,kBAAc,QAAQ,CAAC;AACvB,cAAU,QAAQ;AAElB,WAAO;AAAA,EACT;AAEA,WAAS,QAA2B;AAClC,WAAO,SAAS;AAAA,EAClB;AAEA,WAAS,QAAc;AACrB,WAAO,MAAM;AACb,oBAAgB,QAAQ,CAAC;AACzB,kBAAc,QAAQ,CAAC;AACvB,aAAS,QAAQ;AACjB,cAAU,QAAQ;AAAA,EACpB;AAMA,WAASA,SAAO,SAAoC;AAElD,UAAM,SAAS,OAAO,OAAO,OAAO;AAGpC,aAAS,QAAQ,OAAO,UAAU;AAClC,oBAAgB,QAAQ,OAAO,mBAAmB,EAAE,IAAI,OAAK,QAAQ,CAAC,CAAC;AACvE,kBAAc,QAAQ,CAAC;AACvB,cAAU,QAAQ;AAElB,WAAO;AAAA,EACT;AAEA,SAAO;AAAA;AAAA,IAEL;AAAA;AAAA,IAEA;AAAA;AAAA,IAEA;AAAA;AAAA,IAEA;AAAA;AAAA,IAEA;AAAA;AAAA,IAEA;AAAA;AAAA,IAEA;AAAA;AAAA,IAEA;AAAA;AAAA,IAEA;AAAA;AAAA,IAEA;AAAA;AAAA,IAEA,QAAAA;AAAA;AAAA,IAEA;AAAA,EACF;AACF;;;ACrKA,SAAc,YAAAC,iBAA4C;AA6BnD,SAAS,kBAAkB,SAA4D;AAC5F,QAAM,EAAE,iBAAiB,cAAc,IAAI;AAE3C,QAAM,wBAAwBA;AAAA,IAA8B,MAC1D,gBAAgB,MAAM,IAAI,CAAC,WAAW;AAAA,MACpC,GAAG;AAAA,MACH,UAAU,MAAM;AAAA,IAClB,EAAE;AAAA,EACJ;AAEA,QAAM,sBAAsBA;AAAA,IAA8B,MACxD,cAAc,MAAM,IAAI,CAAC,OAAO,WAAW;AAAA,MACzC,GAAG;AAAA,MACH,UAAU,WAAW,KAAK;AAAA,IAC5B,EAAE;AAAA,EACJ;AAEA,QAAM,kBAAkBA,UAAS,MAAM,CAAC,GAAG,sBAAsB,OAAO,GAAG,oBAAoB,KAAK,CAAC;AAErG,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;ACrDA,SAAS,WAAW,mBAAmB;AACvC,SAAS,sBAA4C;AAkB9C,SAAS,YACd,WACA,UAA8B,CAAC,GAC/B;AACA,QAAM,WAAW,eAAe,OAAO;AAGvC,YAAU,OAAO,YAAY,CAAC,UAAU;AACtC,UAAM,SAAS;AAAA,MACb,GAAG,MAAM,gBAAgB,IAAI,CAAC,OAAO,EAAE,GAAG,GAAG,UAAU,EAAE,GAAG,EAAE;AAAA,MAC9D,GAAG,MAAM,cAAc,IAAI,CAAC,GAAG,OAAO,EAAE,GAAG,GAAG,UAAU,WAAW,CAAC,GAAG,EAAE;AAAA,IAC3E;AAEA,aAAS,OAAO;AAAA,MACd;AAAA,MACA,iBAAiB,MAAM;AAAA,MACvB,eAAe,MAAM;AAAA,MACrB,UAAU,MAAM;AAAA,MAChB,KAAK,MAAM;AAAA,MACX,WAAW,MAAM,cAAc,SAAS;AAAA,IAC1C,CAAC;AAAA,EACH,CAAC;AAED,YAAU,MAAM;AACd,aAAS,MAAM;AAAA,EACjB,CAAC;AAED,cAAY,MAAM;AAChB,aAAS,QAAQ;AAEjB,cAAU,OAAO,YAAY,MAAS;AAAA,EACxC,CAAC;AAED,SAAO;AACT;;;;ACpDA,SAAS,YAAAC,iBAAgC;;;;ACCzC,SAAS,YAAAC,iBAAgB;A;;;;;;ACDzB,SAAS,YAAAC,WAAU,OAAAC,MAAK,OAAO,cAAAC,aAAY,eAAAC,oBAAmB;;;;;;;;;AAY9D,UAAM,QAAQ;AAWd,UAAM,eAAeF,KAAI,EAAE;AAC3B,UAAM,cAAcA,KAAI,EAAE;AAC1B,UAAM,YAAYA,KAAI,KAAK;AAC3B,UAAM,WAAWC,YAAgB,IAAI;AACrC,QAAI,cAAoD;AAExD,UAAM,WAAWF,UAAS,MAAM,MAAM,KAAK,SAAS,YAAY;AAChE,UAAM,UAAUA,UAAS,MAAM,MAAM,KAAK,KAAK;AAG/C,aAAS,iBAAiB;AACxB,UAAI,CAAC,QAAQ,OAAO;AAClB,qBAAa,QAAQ;AACrB;MACF;AAGA,UAAI,aAAa;AACf,qBAAa,WAAW;MAC1B;AAEA,gBAAU,QAAQ;AAGlB,oBAAc,WAAW,MAAM;AAC7B,iBAAS;MACX,GAAG,MAAM,WAAW;IACtB;AAEA,mBAAe,WAAW;AACxB,UAAI,CAAC,QAAQ,MAAO;AAEpB,UAAI;AAEF,YAAI,CAAC,SAAS,OAAO;AAEnB,gBAAM,cAAc,MAAM,OAAO,OAAO;AACxC,mBAAS,QAAQ,YAAY;QAC/B;AAEA,cAAM,QAAQ,SAAS;AACvB,qBAAa,QAAQ,MAAM,eAAe,QAAQ,OAAO;UACvD,aAAa,CAAC,SAAS;UACvB,cAAc;UACd,QAAQ;QACV,CAAC;AACD,oBAAY,QAAQ;MACtB,SAAS,GAAQ;AAEf,oBAAY,QAAQ;AACpB,qBAAa,QAAQ;MACvB,UAAE;AACA,kBAAU,QAAQ;MACpB;IACF;AAEA,IAAAG,aAAY,MAAM;AAChB,UAAI,aAAa;AACf,qBAAa,WAAW;MAC1B;IACF,CAAC;AAED,UAAM,SAAS,gBAAgB,EAAE,WAAW,KAAK,CAAC;;;;;;;;;;;;ACtFlD,SAAS,sBAAsB,qBAAqB,aAAa,YAAY,sBAAsB,qBAAqB,mBAAmB,kBAAkB,sBAAsB,qBAAqB,YAAY,iBAAiB;AAErO,IAAM,aAAa;AAAA,EACjB,KAAK;AAAA,EACL,OAAO;AACT;AACA,IAAM,aAAa,CAAC,WAAW;AAC/B,IAAM,aAAa,EAAE,OAAO,cAAc;AAC1C,IAAM,aAAa,EAAE,OAAO,uBAAuB;AACnD,IAAM,aAAa,CAAC,WAAW;AAC/B,IAAM,aAAa,EAAE,OAAO,oBAAoB;AAEzC,SAAS,OAAO,MAAM,QAAQ,QAAQ,QAAQ,OAAO,UAAU;AACpE,SAAQ,WAAW,GAAG;AAAA,IAAoB;AAAA,IAAW;AAAA,IAAM;AAAA,MACzD,oBAAoB,4BAAQ;AAAA,MAC3B,OAAO,YACH,WAAW,GAAG,oBAAoB,QAAQ,YAAY;AAAA,QACrD,oBAAoB,4BAAQ;AAAA,QAC3B,OAAO,gBAAgB,CAAC,OAAO,aAC3B,WAAW,GAAG,oBAAoB,QAAQ;AAAA,UACzC,KAAK;AAAA,UACL,WAAW,OAAO;AAAA,QACpB,GAAG,MAAM,GAAe,UAAU,MACjC,WAAW,GAAG;AAAA,UAAoB;AAAA,UAAW,EAAE,KAAK,EAAE;AAAA,UAAG;AAAA,YACxD,oBAAoB,4EAAgB;AAAA,YACpC;AAAA,cAAoB;AAAA,cAAQ;AAAA,cAAY,iBAAiB,OAAO,OAAO;AAAA,cAAG;AAAA;AAAA,YAAY;AAAA,UACxF;AAAA,UAAG;AAAA;AAAA,QAA6C;AAAA,MACtD,CAAC,MACA,WAAW,GAAG;AAAA,QAAoB;AAAA,QAAW,EAAE,KAAK,EAAE;AAAA,QAAG;AAAA,UACxD,oBAAoB,4BAAQ;AAAA,UAC5B,oBAAoB,OAAO,YAAY;AAAA,YACrC,oBAAoB,4BAAQ;AAAA,YAC3B,OAAO,gBAAgB,CAAC,OAAO,aAC3B,WAAW,GAAG,oBAAoB,OAAO;AAAA,cACxC,KAAK;AAAA,cACL,WAAW,OAAO;AAAA,cAClB,OAAO;AAAA,YACT,GAAG,MAAM,GAAe,UAAU,MACjC,WAAW,GAAG;AAAA,cAAoB;AAAA,cAAW,EAAE,KAAK,EAAE;AAAA,cAAG;AAAA,gBACxD,oBAAoB,4EAAgB;AAAA,gBACpC,oBAAoB,OAAO,YAAY;AAAA,kBACrC;AAAA,oBAAoB;AAAA,oBAAQ;AAAA,oBAAM,iBAAiB,OAAO,OAAO;AAAA,oBAAG;AAAA;AAAA,kBAAY;AAAA,gBAClF,CAAC;AAAA,cACH;AAAA,cAAG;AAAA;AAAA,YAA6C;AAAA,UACtD,CAAC;AAAA,QACH;AAAA,QAAG;AAAA;AAAA,MAA6C;AAAA,IACtD;AAAA,IAAG;AAAA;AAAA,EAA6C;AAClD;;;AC/CwV,sBAAO,SAAS;AAAO,sBAAO,SAAS;AAAmC,sBAAO,YAAY;AAAkB,IAAOC,yBAAQ;;;;;;;;;;ACQtd,aAAS,WAAW,KAAqB;AACvC,aAAO,IACJ,QAAQ,MAAM,OAAO,EACrB,QAAQ,MAAM,MAAM,EACpB,QAAQ,MAAM,MAAM,EACpB,QAAQ,MAAM,QAAQ;IAC3B;;;;;;;;ACdA,SAAS,cAAc,aAAa,YAAYC,YAAW,aAAaC,aAAY,sBAAsBC,sBAAqB,sBAAsBC,sBAAqB,mBAAmBC,mBAAkB,mBAAmB,kBAAkB,eAAe,cAAc,oBAAoB,mBAAmB,sBAAsBC,4BAA2B;AAEzW,IAAMC,cAAa,EAAE,OAAO,wBAAwB;AACpD,IAAMC,cAAa,CAAC,MAAM;AAC1B,IAAMC,cAAa,CAAC,OAAO,KAAK;AAEzB,SAASC,QAAO,MAAM,QAAQ,QAAQ,QAAQ,OAAO,UAAU;AACpE,QAAM,6BAA6B,kBAAkB,mBAAmB,IAAI;AAE5E,SAAQR,YAAW,IAAI,GAAGC;AAAA,IAAoBF;AAAA,IAAW;AAAA,IAAM,YAAY,OAAO,OAAO,CAAC,MAAM,QAAQ;AACtG,aAAQC,YAAW,GAAGC;AAAA,QAAoBF;AAAA,QAAW,EAAE,KAAK,IAAI;AAAA,QAAG;AAAA,UACjEG,qBAAoB,gBAAM;AAAA,UACzB,KAAK,SAAS,UACVF,YAAW,GAAGC;AAAA,YAAoBF;AAAA,YAAW,EAAE,KAAK,EAAE;AAAA,YAAG;AAAA,cACxD;AAAA,gBAAiBI,kBAAiB,KAAK,KAAK;AAAA,gBAAG;AAAA;AAAA,cAAY;AAAA,YAC7D;AAAA,YAAG;AAAA;AAAA,UAAwB,KACzB,KAAa,SAAS,gBACrBH,YAAW,GAAGC;AAAA,YAAoBF;AAAA,YAAW,EAAE,KAAK,EAAE;AAAA,YAAG;AAAA,cACxDG,qBAAoB,4BAAQ;AAAA,cAC5B,aAAa,OAAO,eAAe,GAAG;AAAA,gBACpC;AAAA,cACF,GAAG,MAAM,GAAe,CAAC,MAAM,CAAC;AAAA,YAClC;AAAA,YAAG;AAAA;AAAA,UAA6C,KAC/C,KAAK,SAAS,YACZF,YAAW,GAAGC;AAAA,YAAoBF;AAAA,YAAW,EAAE,KAAK,EAAE;AAAA,YAAG;AAAA,cACxDG,qBAAoB,gBAAM;AAAA,cAC1BE,qBAAoB,UAAU,MAAM;AAAA,gBAClC,aAAa,4BAA4B;AAAA,kBACvC,OAAQ,KAAK;AAAA,gBACf,GAAG,MAAM,GAAe,CAAC,OAAO,CAAC;AAAA,cACnC,CAAC;AAAA,YACH;AAAA,YAAG;AAAA;AAAA,UAA6C,KAC/C,KAAK,SAAS,cACZJ,YAAW,GAAGC;AAAA,YAAoBF;AAAA,YAAW,EAAE,KAAK,EAAE;AAAA,YAAG;AAAA,cACxDG,qBAAoB,gBAAM;AAAA,cAC1BE,qBAAoB,MAAM,MAAM;AAAA,gBAC9B,aAAa,4BAA4B;AAAA,kBACvC,OAAQ,KAAK;AAAA,gBACf,GAAG,MAAM,GAAe,CAAC,OAAO,CAAC;AAAA,cACnC,CAAC;AAAA,YACH;AAAA,YAAG;AAAA;AAAA,UAA6C,KAC/C,KAAK,SAAS,gBACZJ,YAAW,GAAGC;AAAA,YAAoBF;AAAA,YAAW,EAAE,KAAK,EAAE;AAAA,YAAG;AAAA,cACxDG,qBAAoB,4BAAQ;AAAA,cAC5BE;AAAA,gBAAoB;AAAA,gBAAQC;AAAA,gBAAYF,kBAAiB,KAAK,KAAK;AAAA,gBAAG;AAAA;AAAA,cAAY;AAAA,YACpF;AAAA,YAAG;AAAA;AAAA,UAA6C,KAC/C,KAAK,SAAS,UACZH,YAAW,GAAGC;AAAA,YAAoBF;AAAA,YAAW,EAAE,KAAK,EAAE;AAAA,YAAG;AAAA,cACxDG,qBAAoB,gBAAM;AAAA,cAC1BE,qBAAoB,KAAK;AAAA,gBACvB,MAAM,KAAK;AAAA,gBACX,QAAQ;AAAA,gBACR,KAAK;AAAA,cACP,GAAG;AAAA,gBACD,aAAa,4BAA4B;AAAA,kBACvC,OAAQ,KAAK;AAAA,gBACf,GAAG,MAAM,GAAe,CAAC,OAAO,CAAC;AAAA,cACnC,GAAG,GAAeE,WAAU;AAAA,YAC9B;AAAA,YAAG;AAAA;AAAA,UAA6C,KAC/C,KAAK,SAAS,WACZN,YAAW,GAAGC;AAAA,YAAoBF;AAAA,YAAW,EAAE,KAAK,EAAE;AAAA,YAAG;AAAA,cACxDG,qBAAoB,gBAAM;AAAA,cAC1BE,qBAAoB,OAAO;AAAA,gBACzB,KAAK,KAAK;AAAA,gBACV,KAAK,KAAK,OAAO;AAAA,gBACjB,SAAS;AAAA,cACX,GAAG,MAAM,GAAeG,WAAU;AAAA,YACpC;AAAA,YAAG;AAAA;AAAA,UAA6C,KAC/C,KAAK,SAAS,WACZP,YAAW,GAAGC;AAAA,YAAoBF;AAAA,YAAW,EAAE,KAAK,EAAE;AAAA,YAAG;AAAA,cACxDG,qBAAoB,gBAAM;AAAA,cAC1B,OAAO,CAAC,MAAM,OAAO,CAAC,IAAIE;AAAA,gBAAoB;AAAA,gBAAM;AAAA,gBAAM;AAAA,gBAAM;AAAA;AAAA,cAAe;AAAA,YACjF;AAAA,YAAG;AAAA;AAAA,UAA6C,KAC/C,KAAK,SAAS,YACZJ,YAAW,GAAGC;AAAA,YAAoBF;AAAA,YAAW,EAAE,KAAK,EAAE;AAAA,YAAG;AAAA,cACxDG,qBAAoB,sBAAO;AAAA,cAC3BE,qBAAoB,OAAO,MAAM;AAAA,gBAC/B,aAAa,4BAA4B;AAAA,kBACvC,OAAQ,KAAK;AAAA,gBACf,GAAG,MAAM,GAAe,CAAC,OAAO,CAAC;AAAA,cACnC,CAAC;AAAA,YACH;AAAA,YAAG;AAAA;AAAA,UAA6C,KAChDF,qBAAoB,QAAQ,IAAI;AAAA,QACtD;AAAA,QAAG;AAAA;AAAA,MAAwB;AAAA,IAC7B,CAAC;AAAA,IAAG;AAAA;AAAA,EAAwB;AAC9B;;;ACrF8V,wBAAO,SAASO;AAAO,wBAAO,SAAS;AAAqC,IAAOC,2BAAQ;;;;;;;;;;ANKzb,UAAM,QAAQ;AAId,UAAM,MAAMC,UAAS,MAAM,IAAI,MAAM,KAAK,KAAK,EAAE;;;;;;;;AOTjD,SAAS,eAAeC,eAAc,2BAA2B,0BAA0B,WAAW,UAAU,aAAaC,aAAY,eAAe,oBAAoB;AAErK,SAASC,QAAO,MAAM,QAAQ,QAAQ,QAAQ,OAAO,UAAU;AACpE,SAAQD,YAAW,GAAG,aAAa,yBAAyB,OAAO,GAAG,GAAG,EAAE,OAAO,oBAAoB,GAAG;AAAA,IACvG,SAAS,SAAS,MAAM;AAAA,MACtBD,cAAa,OAAO,iBAAiB,GAAG;AAAA,QACtC,OAAO,OAAO,KAAK;AAAA,MACrB,GAAG,MAAM,GAAe,CAAC,OAAO,CAAC;AAAA,IACnC,CAAC;AAAA,IACD,GAAG;AAAA;AAAA,EACL,CAAC;AACH;;;ACXiW,yBAAO,SAASG;AAAO,yBAAO,SAAS;AAAsC,yBAAO,YAAY;AAAkB,IAAOC,4BAAQ;A;;;;;;;;;;;;;;;;;ACAle,SAAS,eAAeC,eAAc,aAAaC,aAAY,sBAAsBC,4BAA2B;AAEhH,IAAMC,cAAa,EAAE,OAAO,sBAAsB;AAE3C,SAASC,QAAO,MAAM,QAAQ,QAAQ,QAAQ,OAAO,UAAU;AACpE,SAAQH,YAAW,GAAGC,qBAAoB,KAAKC,aAAY;AAAA,IACzDH,cAAa,OAAO,iBAAiB,GAAG;AAAA,MACtC,OAAO,OAAO,KAAK;AAAA,IACrB,GAAG,MAAM,GAAe,CAAC,OAAO,CAAC;AAAA,EACnC,CAAC;AACH;;;ACVuW,2BAAO,SAASK;AAAO,2BAAO,SAAS;AAAwC,2BAAO,YAAY;AAAkB,IAAOC,8BAAQ;;;;ACE1e,SAAS,YAAAC,WAAU,OAAAC,MAAK,SAAAC,QAAO,cAAAC,aAAY,eAAAC,oBAAmB;;;;;;;;;;;AAE9D,UAAM,QAAQ;AAiBd,UAAM,SAASH,KAAI,KAAK;AACxB,UAAM,kBAAkBA,KAAI,EAAE;AAC9B,UAAM,iBAAiBA,KAAI,KAAK;AAChC,UAAM,iBAAiBA,KAAI,KAAK;AAGhC,UAAM,aAAaA,KAAI,EAAE;AACzB,UAAM,eAAeA,KAAI,EAAE;AAC3B,UAAM,iBAAiBA,KAAI,KAAK;AAChC,UAAM,aAAaE,YAAgB,IAAI;AACvC,QAAI,eAAqD;AAEzD,UAAM,kBAAkBF,KAA0B,SAAS;AAE3D,aAAS,oBAAoB;AAC3B,sBAAgB,QAAQ,gBAAgB,UAAU,YAAY,WAAW;IAC3E;AAEA,UAAM,WAAWD,UAAS,MAAM,MAAM,KAAK,QAAQ,MAAM;AACzD,UAAM,OAAOA,UAAS,MAAM,MAAM,KAAK,KAAK;AAC5C,UAAM,YAAYA,UAAS,MAAM,SAAS,UAAU,SAAS;AAG7D,UAAM,iBAAiBG,YAAgB,IAAI;AAC3C,UAAM,kBAAkB,oBAAI,IAAY;AACxC,UAAM,eAAe,oBAAI,IAAY;AAGrC,aAAS,wBAAwB;AAC/B,UAAI,CAAC,UAAU,SAAS,CAAC,KAAK,MAAO;AAGrC,UAAI,cAAc;AAChB,qBAAa,YAAY;MAC3B;AAGA,qBAAe,QAAQ;AAGvB,qBAAe,WAAW,MAAM;AAC9B,wBAAgB;MAClB,GAAG,MAAM,YAAY;IACvB;AAEA,mBAAe,kBAAkB;AAC/B,UAAI,CAAC,KAAK,MAAO;AAEjB,mBAAa,QAAQ;AAErB,UAAI;AAEF,YAAI,CAAC,WAAW,OAAO;AAErB,gBAAM,gBAAgB,MAAM,OAAO,SAAS;AAC5C,qBAAW,QAAQ,cAAc;AACjC,qBAAW,MAAM,WAAW;YAC1B,aAAa;YACb,OAAO;YACP,eAAe;UACjB,CAAC;QACH;AAEA,cAAM,UAAU,WAAW;AAC3B,cAAM,KAAK,WAAW,KAAK,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,CAAC,CAAC;AAEvE,cAAM,EAAE,IAAI,IAAI,MAAM,QAAQ,OAAO,IAAI,KAAK,KAAK;AACnD,mBAAW,QAAQ;MACrB,SAAS,GAAQ;AAEf,qBAAa,QAAQ;AACrB,mBAAW,QAAQ;MACrB,UAAE;AACA,uBAAe,QAAQ;MACzB;IACF;AAEA,IAAAC,aAAY,MAAM;AAChB,UAAI,cAAc;AAChB,qBAAa,YAAY;MAC3B;IACF,CAAC;AAGD,mBAAe,YAAY;AACzB,UAAI,UAAU,OAAO;AACnB,8BAAsB;AACtB;MACF;AAEA,UAAI,CAAC,KAAK,SAAS,MAAM,kBAAkB;AACzC,wBAAgB,QAAQ;AACxB;MACF;AAEA,qBAAe,QAAQ;AACvB,qBAAe,QAAQ;AAEvB,UAAI;AAEF,YAAI,CAAC,eAAe,OAAO;AACzB,gBAAM,EAAE,kBAAkB,IAAI,MAAM,OAAO,OAAO;AAClD,yBAAe,QAAQ,MAAM,kBAAkB;YAC7C,QAAQ,CAAC,MAAM,KAAY;YAC3B,OAAO,CAAC;UACV,CAAC;AACD,uBAAa,IAAI,MAAM,KAAK;QAC9B;AAEA,cAAM,cAAc,eAAe;AACnC,cAAM,OAAO,SAAS;AAGtB,YAAI,CAAC,gBAAgB,IAAI,IAAI,KAAK,SAAS,QAAQ;AACjD,cAAI;AACF,kBAAM,YAAY,aAAa,IAAI;AACnC,4BAAgB,IAAI,IAAI;UAC1B,QAAQ;UAER;QACF;AAGA,YAAI,CAAC,aAAa,IAAI,MAAM,KAAK,GAAG;AAClC,cAAI;AACF,kBAAM,YAAY,UAAU,MAAM,KAAK;AACvC,yBAAa,IAAI,MAAM,KAAK;UAC9B,QAAQ;UAER;QACF;AAEA,cAAM,OAAO,YAAY,WAAW,KAAK,OAAO;UAC9C,MAAM,gBAAgB,IAAI,IAAI,IAAI,OAAO;UACzC,OAAO,aAAa,IAAI,MAAM,KAAK,IAAI,MAAM,QAAQ;QACvD,CAAC;AACD,wBAAgB,QAAQ;MAC1B,SAAS,GAAG;AAEV,uBAAe,QAAQ;AACvB,wBAAgB,QAAQ;MAC1B,UAAE;AACA,uBAAe,QAAQ;MACzB;IACF;AAGA,IAAAF,OAAM,CAAC,MAAM,MAAM,MAAM,OAAO,SAAS,GAAG,WAAW,EAAE,WAAW,KAAK,CAAC;AAE1E,mBAAe,WAAW;AACxB,UAAI;AACF,cAAM,UAAU,UAAU,UAAU,KAAK,KAAK;AAC9C,eAAO,QAAQ;AACf,mBAAW,MAAM;AACf,iBAAO,QAAQ;QACjB,GAAG,GAAI;MACT,QAAQ;MAER;IACF;;;;;;;;;;;;ACpLA,SAAS,sBAAsBG,sBAAqB,sBAAsBC,sBAAqB,mBAAmBC,mBAAkB,aAAaC,aAAY,sBAAsBC,sBAAqB,YAAYC,kBAAiB;AAErO,IAAMC,cAAa;AAAA,EACjB,KAAK;AAAA,EACL,OAAO;AACT;AACA,IAAMC,cAAa,EAAE,OAAO,iBAAiB;AAC7C,IAAMC,cAAa,EAAE,OAAO,kBAAkB;AAC9C,IAAMC,cAAa,CAAC,UAAU;AAC9B,IAAMC,cAAa,EAAE,OAAO,kBAAkB;AAC9C,IAAMC,cAAa;AAAA,EACjB,KAAK;AAAA,EACL,OAAO;AACT;AACA,IAAM,aAAa,EAAE,OAAO,sBAAsB;AAClD,IAAM,aAAa,EAAE,OAAO,sBAAsB;AAClD,IAAM,aAAa,CAAC,WAAW;AAC/B,IAAM,cAAc,EAAE,OAAO,sBAAsB;AACnD,IAAM,cAAc,EAAE,OAAO,iBAAiB;AAC9C,IAAMC,eAAc,EAAE,OAAO,cAAc;AAC3C,IAAMC,eAAc,EAAE,OAAO,WAAW;AACxC,IAAMC,eAAc,EAAE,OAAO,eAAe;AAC5C,IAAM,cAAc;AAAA,EAClB,KAAK;AAAA,EACL,OAAO;AACT;AACA,IAAM,cAAc,CAAC,WAAW;AAChC,IAAM,cAAc,EAAE,OAAO,gBAAgB;AAEtC,SAASC,QAAO,MAAM,QAAQ,QAAQ,QAAQ,OAAO,UAAU;AACpE,SAAQZ,YAAW,GAAGC;AAAA,IAAoBC;AAAA,IAAW;AAAA,IAAM;AAAA,MACzDL,qBAAoB,wBAAc;AAAA,MACjC,OAAO,aACHG,YAAW,GAAGC,qBAAoB,OAAOE,aAAY;AAAA,QACpDL,qBAAoB,OAAOM,aAAY;AAAA,UACrC,OAAO,CAAC,MAAM,OAAO,CAAC,IAAIN;AAAA,YAAoB;AAAA,YAAQ,EAAE,OAAO,WAAW;AAAA,YAAG;AAAA,YAAW;AAAA;AAAA,UAAe;AAAA,UACvGA,qBAAoB,OAAOO,aAAY;AAAA,YACrCP,qBAAoB,UAAU;AAAA,cAC5B,OAAO;AAAA,cACP,SAAS,OAAO;AAAA,cAChB,MAAM;AAAA,cACN,UAAU,CAAC,OAAO;AAAA,YACpB,GAAGC,kBAAiB,OAAO,oBAAoB,YAAY,iBAAO,cAAI,GAAG,GAAqBO,WAAU;AAAA,YACxGR;AAAA,cAAoB;AAAA,cAAU;AAAA,gBAC5B,OAAO;AAAA,gBACP,SAAS,OAAO;AAAA,gBAChB,MAAM;AAAA,cACR;AAAA,cAAGC,kBAAiB,OAAO,SAAS,8BAAU,cAAI;AAAA,cAAG;AAAA;AAAA,YAAY;AAAA,UACnE,CAAC;AAAA,QACH,CAAC;AAAA,QACDD,qBAAoB,OAAOS,aAAY;AAAA,UACrCV,qBAAoB,sBAAO;AAAA,UAC1B,OAAO,kBAAkB,CAAC,OAAO,cAC7BG,YAAW,GAAGC,qBAAoB,OAAOO,aAAY;AAAA,YACpDV;AAAA,cAAoB;AAAA,cAAO;AAAA,cAAYC,kBAAiB,OAAO,IAAI;AAAA,cAAG;AAAA;AAAA,YAAY;AAAA,UACpF,CAAC,KACA,OAAO,oBAAoB,YACzBC,YAAW,GAAGC;AAAA,YAAoBC;AAAA,YAAW,EAAE,KAAK,EAAE;AAAA,YAAG;AAAA,cACxDL,qBAAoB,4BAAQ;AAAA,cAC5BC;AAAA,gBAAoB;AAAA,gBAAO;AAAA,gBAAYC,kBAAiB,OAAO,IAAI;AAAA,gBAAG;AAAA;AAAA,cAAY;AAAA,YACpF;AAAA,YAAG;AAAA;AAAA,UAA6C,KAC/C,OAAO,cACLC,YAAW,GAAGC;AAAA,YAAoBC;AAAA,YAAW,EAAE,KAAK,EAAE;AAAA,YAAG;AAAA,cACxDL,qBAAoB,4BAAQ;AAAA,cAC5BC,qBAAoB,OAAO;AAAA,gBACzB,WAAW,OAAO;AAAA,gBAClB,OAAO;AAAA,cACT,GAAG,MAAM,GAAe,UAAU;AAAA,YACpC;AAAA,YAAG;AAAA;AAAA,UAA6C,MAC/CE,YAAW,GAAGC;AAAA,YAAoBC;AAAA,YAAW,EAAE,KAAK,EAAE;AAAA,YAAG;AAAA,cACxDL,qBAAoB,0DAAa;AAAA,cACjCC;AAAA,gBAAoB;AAAA,gBAAO;AAAA,gBAAaC,kBAAiB,OAAO,IAAI;AAAA,gBAAG;AAAA;AAAA,cAAY;AAAA,YACrF;AAAA,YAAG;AAAA;AAAA,UAA6C;AAAA,QAC1D,CAAC;AAAA,MACH,CAAC,MACAC,YAAW,GAAGC;AAAA,QAAoBC;AAAA,QAAW,EAAE,KAAK,EAAE;AAAA,QAAG;AAAA,UACxDL,qBAAoB,kCAAS;AAAA,UAC7BC,qBAAoB,OAAO,aAAa;AAAA,YACtCA,qBAAoB,OAAOW,cAAa;AAAA,cACtCX;AAAA,gBAAoB;AAAA,gBAAQY;AAAA,gBAAaX,kBAAiB,OAAO,QAAQ;AAAA,gBAAG;AAAA;AAAA,cAAY;AAAA,cACxFD;AAAA,gBAAoB;AAAA,gBAAU;AAAA,kBAC5B,OAAO;AAAA,kBACP,SAAS,OAAO;AAAA,kBAChB,MAAM;AAAA,gBACR;AAAA,gBAAGC,kBAAiB,OAAO,SAAS,8BAAU,cAAI;AAAA,gBAAG;AAAA;AAAA,cAAY;AAAA,YACnE,CAAC;AAAA,YACDD,qBAAoB,OAAOa,cAAa;AAAA,cACtCd,qBAAoB,wCAAU;AAAA,cAC7B,OAAO,kBAAkB,CAAC,OAAO,mBAC7BG,YAAW,GAAGC,qBAAoB,OAAO,aAAa;AAAA,gBACrDH,qBAAoB,OAAO,MAAM;AAAA,kBAC/BA;AAAA,oBAAoB;AAAA,oBAAQ;AAAA,oBAAMC,kBAAiB,OAAO,IAAI;AAAA,oBAAG;AAAA;AAAA,kBAAY;AAAA,gBAC/E,CAAC;AAAA,cACH,CAAC,KACA,OAAO,mBACLC,YAAW,GAAGC;AAAA,gBAAoBC;AAAA,gBAAW,EAAE,KAAK,EAAE;AAAA,gBAAG;AAAA,kBACxDL,qBAAoB,wCAAU;AAAA,kBAC9BC,qBAAoB,OAAO;AAAA,oBACzB,WAAW,OAAO;AAAA,oBAClB,OAAO;AAAA,kBACT,GAAG,MAAM,GAAe,WAAW;AAAA,gBACrC;AAAA,gBAAG;AAAA;AAAA,cAA6C,MAC/CE,YAAW,GAAGC;AAAA,gBAAoBC;AAAA,gBAAW,EAAE,KAAK,EAAE;AAAA,gBAAG;AAAA,kBACxDL,qBAAoB,wCAAU;AAAA,kBAC9BC,qBAAoB,OAAO,aAAa;AAAA,oBACtCA;AAAA,sBAAoB;AAAA,sBAAQ;AAAA,sBAAMC,kBAAiB,OAAO,IAAI;AAAA,sBAAG;AAAA;AAAA,oBAAY;AAAA,kBAC/E,CAAC;AAAA,gBACH;AAAA,gBAAG;AAAA;AAAA,cAA6C;AAAA,YACxD,CAAC;AAAA,UACH,CAAC;AAAA,QACH;AAAA,QAAG;AAAA;AAAA,MAA6C;AAAA,IACtD;AAAA,IAAG;AAAA;AAAA,EAA6C;AAClD;;;AChHwV,sBAAO,SAASc;AAAO,sBAAO,SAAS;AAAmC,sBAAO,YAAY;AAAkB,IAAOC,yBAAQ;;;;ACEtd,SAAS,YAAAC,iBAAgB;;;;;;;;AAGzB,UAAM,QAAQ;AAId,UAAM,MAAMC,UAAS,MAAM,MAAM,KAAK,UAAU,OAAO,IAAI;AAE3D,aAAS,eAAe,MAAmC;AACzD,YAAM,aAAa,KAAK,SAAS,CAAC;AAClC,UAAI,YAAY,SAAS,aAAa;AACpC,eAAO,WAAW;MACpB;AACA,aAAO,CAAC;IACV;;;;;;;;ACjBA,SAAS,cAAcC,cAAa,YAAYC,YAAW,aAAaC,aAAY,sBAAsBC,sBAAqB,sBAAsBC,sBAAqB,eAAeC,eAAyD,eAAeC,eAAc,kBAAkB,iBAAiB,2BAA2BC,2BAA0B,WAAWC,iBAAgB;AAElY,IAAMC,cAAa;AAAA,EACjB,KAAK;AAAA,EACL,OAAO;AACT;AACA,IAAMC,cAAa,CAAC,SAAS;AAC7B,IAAMC,cAAa,EAAE,OAAO,eAAe;AAEpC,SAASC,QAAO,MAAM,QAAQ,QAAQ,QAAQ,OAAO,UAAU;AACpE,SAAQV,YAAW,GAAGI,cAAaC,0BAAyB,OAAO,GAAG,GAAG;AAAA,IACvE,OAAO,gBAAgB,CAAC,kBAAkB,EAAE,aAAa,OAAO,KAAK,SAAS,KAAK,UAAQ,KAAK,YAAY,QAAQ,KAAK,YAAY,MAAS,EAAE,CAAC,CAAC;AAAA,EACpJ,GAAG;AAAA,IACD,SAASC,UAAS,MAAM;AAAA,OACrBN,YAAW,IAAI,GAAGC;AAAA,QAAoBF;AAAA,QAAW;AAAA,QAAMD,aAAY,OAAO,KAAK,UAAU,CAAC,MAAM,UAAU;AACzG,iBAAQE,YAAW,GAAGC;AAAA,YAAoB;AAAA,YAAM;AAAA,cAC9C,KAAK;AAAA,cACL,OAAO,gBAAgB,CAAC,uBAAuB,EAAE,aAAa,KAAK,YAAY,QAAQ,KAAK,YAAY,OAAU,CAAC,CAAC;AAAA,YACtH;AAAA,YAAG;AAAA,cACA,KAAK,YAAY,QAAQ,KAAK,YAAY,UACtCD,YAAW,GAAGC,qBAAoB,SAASM,aAAY;AAAA,gBACtDL,qBAAoB,SAAS;AAAA,kBAC3B,MAAM;AAAA,kBACN,SAAS,KAAK;AAAA,kBACd,UAAU;AAAA,kBACV,OAAO;AAAA,gBACT,GAAG,MAAM,GAAeM,WAAU;AAAA,gBAClCN,qBAAoB,QAAQO,aAAY;AAAA,kBACtCN,cAAa,OAAO,iBAAiB,GAAG;AAAA,oBACtC,OAAO,OAAO,eAAe,IAAI;AAAA,kBACnC,GAAG,MAAM,GAAe,CAAC,OAAO,CAAC;AAAA,gBACnC,CAAC;AAAA,cACH,CAAC,MACAH,YAAW,GAAGI,cAAa,OAAO,iBAAiB,GAAG;AAAA,gBACrD,KAAK;AAAA,gBACL,OAAO,OAAO,eAAe,IAAI;AAAA,cACnC,GAAG,MAAM,GAAe,CAAC,OAAO,CAAC;AAAA,YACvC;AAAA,YAAG;AAAA;AAAA,UAAa;AAAA,QAClB,CAAC;AAAA,QAAG;AAAA;AAAA,MAAwB;AAAA,IAC9B,CAAC;AAAA,IACD,GAAG;AAAA;AAAA,EACL,GAAG,GAAe,CAAC,OAAO,CAAC;AAC7B;;;AC1CwV,sBAAO,SAASO;AAAO,sBAAO,SAAS;AAAmC,sBAAO,YAAY;AAAkB,IAAOC,yBAAQ;A;;;;;;;;;;ACQtd,aAAS,eAAe,MAAoC;AAC1D,aAAO,KAAK;IACd;;;;;;;;ACVA,SAAS,cAAcC,cAAa,YAAYC,YAAW,aAAaC,aAAY,sBAAsBC,sBAAqB,eAAeC,eAAc,kBAAkB,iBAAiB,sBAAsBC,sBAAqB,sBAAsBC,4BAA2B;AAE3R,IAAMC,cAAa,EAAE,OAAO,0BAA0B;AACtD,IAAMC,cAAa,EAAE,OAAO,kBAAkB;AAC9C,IAAMC,cAAa,EAAE,KAAK,EAAE;AAErB,SAASC,QAAO,MAAM,QAAQ,QAAQ,QAAQ,OAAO,UAAU;AACpE,SAAQR,YAAW,GAAGC,qBAAoB,OAAOI,aAAY;AAAA,IAC3DD,qBAAoB,SAASE,aAAY;AAAA,MACvCF,qBAAoB,SAAS,MAAM;AAAA,QAChC,OAAO,KAAK,SAAS,CAAC,KAClBJ,YAAW,GAAGC,qBAAoB,MAAMM,aAAY;AAAA,WAClDP,YAAW,IAAI,GAAGC;AAAA,YAAoBF;AAAA,YAAW;AAAA,YAAMD,aAAY,OAAO,KAAK,SAAS,CAAC,EAAE,UAAU,CAAC,MAAM,cAAc;AACzH,qBAAQE,YAAW,GAAGC;AAAA,gBAAoB;AAAA,gBAAM;AAAA,kBAC9C,KAAK;AAAA,kBACL,OAAO,gBAAgB,EAAE,WAAW,OAAO,KAAK,QAAQ,SAAS,KAAK,OAAO,CAAC;AAAA,gBAChF;AAAA,gBAAG;AAAA,kBACDC,cAAa,OAAO,iBAAiB,GAAG;AAAA,oBACtC,OAAO,OAAO,eAAe,IAAI;AAAA,kBACnC,GAAG,MAAM,GAAe,CAAC,OAAO,CAAC;AAAA,gBACnC;AAAA,gBAAG;AAAA;AAAA,cAAa;AAAA,YAClB,CAAC;AAAA,YAAG;AAAA;AAAA,UAAwB;AAAA,QAC9B,CAAC,KACDC,qBAAoB,QAAQ,IAAI;AAAA,MACtC,CAAC;AAAA,MACDC,qBAAoB,SAAS,MAAM;AAAA,SAChCJ,YAAW,IAAI,GAAGC;AAAA,UAAoBF;AAAA,UAAW;AAAA,UAAMD,aAAY,OAAO,KAAK,SAAS,MAAM,CAAC,GAAG,CAAC,KAAK,aAAa;AACpH,mBAAQE,YAAW,GAAGC,qBAAoB,MAAM,EAAE,KAAK,SAAS,GAAG;AAAA,eAChED,YAAW,IAAI,GAAGC;AAAA,gBAAoBF;AAAA,gBAAW;AAAA,gBAAMD,aAAY,IAAI,UAAU,CAAC,MAAM,cAAc;AACrG,yBAAQE,YAAW,GAAGC;AAAA,oBAAoB;AAAA,oBAAM;AAAA,sBAC9C,KAAK;AAAA,sBACL,OAAO,gBAAgB,EAAE,WAAW,OAAO,KAAK,QAAQ,SAAS,KAAK,OAAO,CAAC;AAAA,oBAChF;AAAA,oBAAG;AAAA,sBACDC,cAAa,OAAO,iBAAiB,GAAG;AAAA,wBACtC,OAAO,OAAO,eAAe,IAAI;AAAA,sBACnC,GAAG,MAAM,GAAe,CAAC,OAAO,CAAC;AAAA,oBACnC;AAAA,oBAAG;AAAA;AAAA,kBAAa;AAAA,gBAClB,CAAC;AAAA,gBAAG;AAAA;AAAA,cAAwB;AAAA,YAC9B,CAAC;AAAA,UACH,CAAC;AAAA,UAAG;AAAA;AAAA,QAAwB;AAAA,MAC9B,CAAC;AAAA,IACH,CAAC;AAAA,EACH,CAAC;AACH;;;AC3C2V,uBAAO,SAASO;AAAO,uBAAO,SAAS;AAAoC,uBAAO,YAAY;AAAkB,IAAOC,0BAAQ;A;;;;;;;;;;;;;;;;;ACA1d,SAAS,cAAcC,cAAa,YAAYC,YAAW,aAAaC,aAAY,sBAAsBC,sBAAqB,eAAeC,eAAyD,mBAAmBC,yBAAwB;AAElP,IAAMC,eAAa,EAAE,OAAO,uBAAuB;AACnD,IAAMC,cAAa;AAAA,EACjB,KAAK;AAAA,EACL,OAAO;AACT;AAEO,SAASC,QAAO,MAAM,QAAQ,QAAQ,QAAQ,OAAO,UAAU;AACpE,SAAQN,YAAW,GAAGC,qBAAoB,cAAcG,cAAY;AAAA,KACjEJ,YAAW,IAAI,GAAGC;AAAA,MAAoBF;AAAA,MAAW;AAAA,MAAMD,aAAY,OAAO,KAAK,UAAU,CAAC,OAAO,UAAU;AAC1G,eAAQE,YAAW,GAAGC;AAAA,UAAoBF;AAAA,UAAW,EAAE,KAAK,MAAM;AAAA,UAAG;AAAA,YAClE,MAAM,SAAS,eACXC,YAAW,GAAGE,cAAa,OAAO,oBAAoB,GAAG;AAAA,cACxD,KAAK;AAAA,cACL,MAAM;AAAA,YACR,GAAG,MAAM,GAAe,CAAC,MAAM,CAAC,MAC/BF,YAAW,GAAGC;AAAA,cAAoB;AAAA,cAAOI;AAAA,cAAYF,kBAAiB,MAAM,IAAI;AAAA,cAAG;AAAA;AAAA,YAAY;AAAA,UACtG;AAAA,UAAG;AAAA;AAAA,QAAwB;AAAA,MAC7B,CAAC;AAAA,MAAG;AAAA;AAAA,IAAwB;AAAA,EAC9B,CAAC;AACH;;;ACrB0W,4BAAO,SAASI;AAAO,4BAAO,SAAS;AAAyC,4BAAO,YAAY;AAAkB,IAAOC,+BAAQ;A;;;;;;;;;;;;;;ACA9e,SAAS,aAAaC,aAAY,sBAAsBC,4BAA2B;AAEnF,IAAMC,eAAa,EAAE,OAAO,eAAe;AAEpC,SAASC,QAAO,MAAM,QAAQ,QAAQ,QAAQ,OAAO,UAAU;AACpE,SAAQH,YAAW,GAAGC,qBAAoB,MAAMC,YAAU;AAC5D;;;ACNmX,+BAAO,SAASE;AAAO,+BAAO,SAAS;AAA4C,+BAAO,YAAY;AAAkB,IAAOC,kCAAQ;A;;;;;;;;;;;;;;;;;ACA1f,SAAS,mBAAmBC,mBAAkB,sBAAsBC,sBAAqB,aAAaC,cAAY,sBAAsBC,4BAA2B;AAEnK,IAAMC,eAAa,EAAE,OAAO,oBAAoB;AAChD,IAAMC,cAAa,EAAE,OAAO,aAAa;AAElC,SAASC,SAAO,MAAM,QAAQ,QAAQ,QAAQ,OAAO,UAAU;AACpE,SAAQJ,aAAW,GAAGC,qBAAoB,OAAOC,cAAY;AAAA,IAC3DH;AAAA,MAAoB;AAAA,MAAQI;AAAA,MAAYL,kBAAiB,OAAO,KAAK,IAAI;AAAA,MAAG;AAAA;AAAA,IAAY;AAAA,IACxFC;AAAA,MAAoB;AAAA,MAAO;AAAA,MAAMD,kBAAiB,KAAK,UAAU,OAAO,MAAM,MAAM,CAAC,CAAC;AAAA,MAAG;AAAA;AAAA,IAAY;AAAA,EACvG,CAAC;AACH;;;ACViW,yBAAO,SAASO;AAAO,yBAAO,SAAS;AAAsC,yBAAO,YAAY;AAAkB,IAAOC,4BAAQ;;;;;;;;;;;;;;A1BqBle,UAAM,QAAQ;AAsBd,UAAM,oBAA+C;MACnD,SAASC;MACT,WAAWC;MACX,MAAMC;MACN,MAAMC;MACN,OAAOC;MACP,YAAYC;MACZ,eAAeC;MACf,MAAMC;MACN,YAAYA;IACd;AAGA,UAAM,mBAAmBC,UAAS,OAAO;MACvC,GAAG;MACH,GAAG,MAAM;IACX,EAAE;AAEF,aAAS,aAAa,MAAyB;AAC7C,aAAO,iBAAiB,MAAM,IAAI,KAAK,MAAM,YAAY,WAAWC;IACtE;;;;;;;;A2B/DA,SAAS,cAAcC,cAAa,YAAYC,YAAW,aAAaC,cAAY,sBAAsBC,uBAAqB,2BAA2BC,2BAA0B,eAAeC,eAAc,kBAAkBC,kBAAiB,mBAAmB,kBAAkB,WAAWC,WAAU,eAAeC,qBAAoB;AAEjV,IAAMC,eAAa,EAAE,OAAO,YAAY;AAEjC,SAASC,SAAO,MAAM,QAAQ,QAAQ,QAAQ,OAAO,UAAU;AACpE,SAAQR,aAAW,GAAGC,sBAAoB,OAAOM,cAAY;AAAA,IAC3DD,cAAa,kBAAkB,EAAE,MAAM,iBAAiB,GAAG;AAAA,MACzD,SAASD,UAAS,MAAM;AAAA,SACrBL,aAAW,IAAI,GAAGC;AAAA,UAAoBF;AAAA,UAAW;AAAA,UAAMD,aAAY,OAAO,QAAQ,CAAC,UAAU;AAC5F,mBAAQE,aAAW,GAAGC;AAAA,cAAoB;AAAA,cAAO;AAAA,gBAC/C,KAAK,MAAM;AAAA,gBACX,OAAOG,iBAAgB;AAAA,kBACzB;AAAA,kBACA,MAAM,WAAW,cAAc,OAAO,iBAAiB,OAAO;AAAA,kBAC9D,EAAE,yBAAyB,OAAO,gBAAgB;AAAA,gBACpD,CAAC;AAAA,cACC;AAAA,cAAG;AAAA,iBACAJ,aAAW,GAAGG,cAAaD,0BAAyB,OAAO,aAAa,MAAM,KAAK,IAAI,CAAC,GAAG;AAAA,kBAC1F,MAAM,MAAM;AAAA,gBACd,GAAG,MAAM,GAAe,CAAC,MAAM,CAAC;AAAA,cAClC;AAAA,cAAG;AAAA;AAAA,YAAa;AAAA,UAClB,CAAC;AAAA,UAAG;AAAA;AAAA,QAAwB;AAAA,MAC9B,CAAC;AAAA,MACD,GAAG;AAAA;AAAA,IACL,CAAC;AAAA,EACH,CAAC;AACH;;;AC1B4U,kBAAO,SAASO;AAAO,kBAAO,SAAS;AAA+B,kBAAO,YAAY;AAAkB,IAAOC,qBAAQ;A;;;;;;;;;;ACiBtc,UAAM,eAA0C;MAC9C,SAASC;MACT,WAAWC;MACX,MAAMC;MACN,MAAMC;MACN,OAAOC;MACP,YAAYC;MACZ,eAAeC;MACf,MAAMC;MACN,YAAYA;IACd;AAEA,aAAS,aAAa,MAAyB;AAC7C,aAAO,aAAa,IAAI,KAAKC;IAC/B;;;;;;;;AC/BA,SAAS,2BAA2BC,2BAA0B,aAAaC,cAAY,eAAeC,qBAAoB;AAEnH,SAASC,SAAO,MAAM,QAAQ,QAAQ,QAAQ,OAAO,UAAU;AACpE,SAAQF,aAAW,GAAGC,cAAaF,0BAAyB,OAAO,aAAa,OAAO,KAAK,IAAI,CAAC,GAAG,EAAE,MAAM,OAAO,KAAK,GAAG,MAAM,GAAe,CAAC,MAAM,CAAC;AAC1J;;;ACJmP,0BAAO,SAASI;AAAO,0BAAO,SAAS;AAAuC,IAAOC,6BAAQ;","names":["render","computed","computed","computed","computed","ref","shallowRef","onUnmounted","IncremarkMath_default","_Fragment","_openBlock","_createElementBlock","_createCommentVNode","_toDisplayString","_createElementVNode","_hoisted_1","_hoisted_2","_hoisted_3","render","render","IncremarkInline_default","computed","_createVNode","_openBlock","render","render","IncremarkHeading_default","_createVNode","_openBlock","_createElementBlock","_hoisted_1","render","render","IncremarkParagraph_default","computed","ref","watch","shallowRef","onUnmounted","_createCommentVNode","_createElementVNode","_toDisplayString","_openBlock","_createElementBlock","_Fragment","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_12","_hoisted_13","_hoisted_14","render","render","IncremarkCode_default","computed","computed","_renderList","_Fragment","_openBlock","_createElementBlock","_createElementVNode","_createVNode","_createBlock","_resolveDynamicComponent","_withCtx","_hoisted_1","_hoisted_2","_hoisted_3","render","render","IncremarkList_default","_renderList","_Fragment","_openBlock","_createElementBlock","_createVNode","_createCommentVNode","_createElementVNode","_hoisted_1","_hoisted_2","_hoisted_3","render","render","IncremarkTable_default","_renderList","_Fragment","_openBlock","_createElementBlock","_createBlock","_toDisplayString","_hoisted_1","_hoisted_2","render","render","IncremarkBlockquote_default","_openBlock","_createElementBlock","_hoisted_1","render","render","IncremarkThematicBreak_default","_toDisplayString","_createElementVNode","_openBlock","_createElementBlock","_hoisted_1","_hoisted_2","render","render","IncremarkDefault_default","IncremarkHeading_default","IncremarkParagraph_default","IncremarkCode_default","IncremarkList_default","IncremarkTable_default","IncremarkBlockquote_default","IncremarkThematicBreak_default","IncremarkMath_default","computed","IncremarkDefault_default","_renderList","_Fragment","_openBlock","_createElementBlock","_resolveDynamicComponent","_createBlock","_normalizeClass","_withCtx","_createVNode","_hoisted_1","render","render","Incremark_default","IncremarkHeading_default","IncremarkParagraph_default","IncremarkCode_default","IncremarkList_default","IncremarkTable_default","IncremarkBlockquote_default","IncremarkThematicBreak_default","IncremarkMath_default","IncremarkDefault_default","_resolveDynamicComponent","_openBlock","_createBlock","render","render","IncremarkRenderer_default"]}
|
|
1
|
+
{"version":3,"sources":["../src/composables/useIncremark.ts","../src/composables/useStreamRenderer.ts","../src/composables/useDevTools.ts","../src/composables/useBlockTransformer.ts","src/components/Incremark.vue","src/components/IncremarkHeading.vue","src/components/IncremarkMath.vue","sfc-template:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkMath.vue?type=template","../src/components/IncremarkMath.vue","src/components/IncremarkInline.vue","sfc-template:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkInline.vue?type=template","../src/components/IncremarkInline.vue","sfc-template:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkHeading.vue?type=template","../src/components/IncremarkHeading.vue","sfc-template:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkParagraph.vue?type=template","../src/components/IncremarkParagraph.vue","src/components/IncremarkCode.vue","sfc-template:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkCode.vue?type=template","../src/components/IncremarkCode.vue","src/components/IncremarkList.vue","sfc-template:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkList.vue?type=template","../src/components/IncremarkList.vue","src/components/IncremarkTable.vue","sfc-template:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkTable.vue?type=template","../src/components/IncremarkTable.vue","sfc-template:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkBlockquote.vue?type=template","../src/components/IncremarkBlockquote.vue","sfc-template:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkThematicBreak.vue?type=template","../src/components/IncremarkThematicBreak.vue","sfc-template:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkDefault.vue?type=template","../src/components/IncremarkDefault.vue","sfc-template:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/Incremark.vue?type=template","../src/components/Incremark.vue","src/components/IncremarkRenderer.vue","sfc-template:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkRenderer.vue?type=template","../src/components/IncremarkRenderer.vue","src/components/AutoScrollContainer.vue","sfc-template:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/AutoScrollContainer.vue?type=template","../src/components/AutoScrollContainer.vue","../src/index.ts"],"sourcesContent":["import { ref, shallowRef, computed, markRaw } from 'vue'\nimport {\n IncremarkParser,\n createIncremarkParser,\n type ParserOptions,\n type ParsedBlock,\n type IncrementalUpdate,\n type Root\n} from '@incremark/core'\n\nexport interface UseIncremarkOptions extends ParserOptions {}\n\n/** useIncremark 的返回类型 */\nexport type UseIncremarkReturn = ReturnType<typeof useIncremark>\n\n/**\n * Vue 3 Composable: Incremark 流式 Markdown 解析器\n *\n * @example\n * ```vue\n * <script setup>\n * import { useIncremark } from '@incremark/vue'\n *\n * const { markdown, blocks, append, finalize } = useIncremark()\n *\n * // 处理 AI 流式输出\n * async function handleStream(stream) {\n * for await (const chunk of stream) {\n * append(chunk)\n * }\n * finalize()\n * }\n * </script>\n *\n * <template>\n * <div>已接收: {{ markdown.length }} 字符</div>\n * </template>\n * ```\n */\nexport function useIncremark(options: UseIncremarkOptions = {}) {\n const parser = createIncremarkParser(options)\n const completedBlocks = shallowRef<ParsedBlock[]>([])\n const pendingBlocks = shallowRef<ParsedBlock[]>([])\n const isLoading = ref(false)\n // 使用 ref 存储 markdown,确保响应式\n const markdown = ref('')\n\n const ast = computed<Root>(() => ({\n type: 'root',\n children: [\n ...completedBlocks.value.map((b) => b.node),\n ...pendingBlocks.value.map((b) => b.node)\n ]\n }))\n\n // 所有块,带稳定 ID(已完成块用真实 ID,待处理块用索引)\n const blocks = computed(() => {\n const result: Array<ParsedBlock & { stableId: string }> = []\n\n for (const block of completedBlocks.value) {\n result.push({ ...block, stableId: block.id })\n }\n\n for (let i = 0; i < pendingBlocks.value.length; i++) {\n result.push({\n ...pendingBlocks.value[i],\n stableId: `pending-${i}`\n })\n }\n\n return result\n })\n\n function append(chunk: string): IncrementalUpdate {\n isLoading.value = true\n const update = parser.append(chunk)\n\n // 更新 markdown ref\n markdown.value = parser.getBuffer()\n\n // 使用 markRaw 避免深层响应式\n if (update.completed.length > 0) {\n completedBlocks.value = [\n ...completedBlocks.value,\n ...update.completed.map((b) => markRaw(b))\n ]\n }\n pendingBlocks.value = update.pending.map((b) => markRaw(b))\n\n return update\n }\n\n function finalize(): IncrementalUpdate {\n const update = parser.finalize()\n\n // 更新 markdown ref\n markdown.value = parser.getBuffer()\n\n if (update.completed.length > 0) {\n completedBlocks.value = [\n ...completedBlocks.value,\n ...update.completed.map((b) => markRaw(b))\n ]\n }\n pendingBlocks.value = []\n isLoading.value = false\n\n return update\n }\n\n function abort(): IncrementalUpdate {\n return finalize()\n }\n\n function reset(): void {\n parser.reset()\n completedBlocks.value = []\n pendingBlocks.value = []\n markdown.value = ''\n isLoading.value = false\n }\n\n /**\n * 一次性渲染完整 Markdown(reset + append + finalize)\n * @param content 完整的 Markdown 内容\n */\n function render(content: string): IncrementalUpdate {\n // 调用 parser 的 render 方法\n const update = parser.render(content)\n\n // 同步状态\n markdown.value = parser.getBuffer()\n completedBlocks.value = parser.getCompletedBlocks().map(b => markRaw(b))\n pendingBlocks.value = []\n isLoading.value = false\n\n return update\n }\n\n return {\n /** 已收集的完整 Markdown 字符串 */\n markdown,\n /** 已完成的块列表 */\n completedBlocks,\n /** 待处理的块列表 */\n pendingBlocks,\n /** 当前完整的 AST */\n ast,\n /** 所有块(完成 + 待处理),带稳定 ID */\n blocks,\n /** 是否正在加载 */\n isLoading,\n /** 追加内容 */\n append,\n /** 完成解析 */\n finalize,\n /** 强制中断 */\n abort,\n /** 重置解析器 */\n reset,\n /** 一次性渲染(reset + append + finalize) */\n render,\n /** 解析器实例 */\n parser\n }\n}\n","import { ref, computed, type Ref, type ComputedRef } from 'vue'\nimport type { ParsedBlock } from '@incremark/core'\n\nexport interface BlockWithStableId extends ParsedBlock {\n /** 稳定的渲染 ID(用于 Vue key) */\n stableId: string\n}\n\nexport interface UseStreamRendererOptions {\n /** 已完成的块 */\n completedBlocks: Ref<ParsedBlock[]>\n /** 待处理的块 */\n pendingBlocks: Ref<ParsedBlock[]>\n}\n\nexport interface UseStreamRendererReturn {\n /** 带稳定 ID 的已完成块 */\n stableCompletedBlocks: ComputedRef<BlockWithStableId[]>\n /** 带稳定 ID 的待处理块 */\n stablePendingBlocks: ComputedRef<BlockWithStableId[]>\n /** 所有带稳定 ID 的块 */\n allStableBlocks: ComputedRef<BlockWithStableId[]>\n}\n\n/**\n * Vue 3 Composable: 流式渲染辅助\n *\n * 为块分配稳定的渲染 ID,确保 Vue 的虚拟 DOM 复用\n */\nexport function useStreamRenderer(options: UseStreamRendererOptions): UseStreamRendererReturn {\n const { completedBlocks, pendingBlocks } = options\n\n const stableCompletedBlocks = computed<BlockWithStableId[]>(() =>\n completedBlocks.value.map((block) => ({\n ...block,\n stableId: block.id\n }))\n )\n\n const stablePendingBlocks = computed<BlockWithStableId[]>(() =>\n pendingBlocks.value.map((block, index) => ({\n ...block,\n stableId: `pending-${index}`\n }))\n )\n\n const allStableBlocks = computed(() => [...stableCompletedBlocks.value, ...stablePendingBlocks.value])\n\n return {\n stableCompletedBlocks,\n stablePendingBlocks,\n allStableBlocks\n }\n}\n\n","import { onMounted, onUnmounted } from 'vue'\nimport { createDevTools, type DevToolsOptions } from '@incremark/devtools'\nimport type { UseIncremarkReturn } from './useIncremark'\n\nexport interface UseDevToolsOptions extends DevToolsOptions {}\n\n/**\n * Vue 3 DevTools 一行接入\n *\n * @example\n * ```vue\n * <script setup>\n * import { useIncremark, useDevTools } from '@incremark/vue'\n *\n * const incremark = useIncremark()\n * useDevTools(incremark) // 就这一行!\n * </script>\n * ```\n */\nexport function useDevTools(\n incremark: UseIncremarkReturn,\n options: UseDevToolsOptions = {}\n) {\n const devtools = createDevTools(options)\n\n // 设置 parser 的 onChange 回调\n incremark.parser.setOnChange((state) => {\n const blocks = [\n ...state.completedBlocks.map((b) => ({ ...b, stableId: b.id })),\n ...state.pendingBlocks.map((b, i) => ({ ...b, stableId: `pending-${i}` }))\n ]\n\n devtools.update({\n blocks,\n completedBlocks: state.completedBlocks,\n pendingBlocks: state.pendingBlocks,\n markdown: state.markdown,\n ast: state.ast,\n isLoading: state.pendingBlocks.length > 0\n })\n })\n\n onMounted(() => {\n devtools.mount()\n })\n\n onUnmounted(() => {\n devtools.unmount()\n // 清理回调\n incremark.parser.setOnChange(undefined)\n })\n\n return devtools\n}\n","import { ref, watch, computed, onUnmounted, type Ref, type ComputedRef } from 'vue'\nimport {\n BlockTransformer,\n createBlockTransformer,\n type TransformerOptions,\n type DisplayBlock,\n type SourceBlock,\n type AnimationEffect\n} from '@incremark/core'\n\nexport interface UseBlockTransformerOptions extends Omit<TransformerOptions, 'onChange'> {}\n\nexport interface UseBlockTransformerReturn<T = unknown> {\n /** 用于渲染的 display blocks */\n displayBlocks: ComputedRef<DisplayBlock<T>[]>\n /** 是否正在处理中 */\n isProcessing: ComputedRef<boolean>\n /** 是否已暂停 */\n isPaused: ComputedRef<boolean>\n /** 当前动画效果 */\n effect: ComputedRef<AnimationEffect>\n /** 跳过所有动画 */\n skip: () => void\n /** 重置状态 */\n reset: () => void\n /** 暂停动画 */\n pause: () => void\n /** 恢复动画 */\n resume: () => void\n /** 动态更新配置 */\n setOptions: (options: Partial<Pick<TransformerOptions, 'charsPerTick' | 'tickInterval' | 'effect' | 'pauseOnHidden'>>) => void\n /** transformer 实例(用于高级用法) */\n transformer: BlockTransformer<T>\n}\n\n/**\n * Vue 3 Composable: Block Transformer\n *\n * 用于控制 blocks 的逐步显示(打字机效果)\n * 作为解析器和渲染器之间的中间层\n *\n * 特性:\n * - 使用 requestAnimationFrame 实现流畅动画\n * - 支持随机步长 `charsPerTick: [1, 3]`\n * - 支持动画效果 `effect: 'typing'`\n * - 页面不可见时自动暂停\n *\n * @example\n * ```vue\n * <script setup>\n * import { useIncremark, useBlockTransformer, defaultPlugins } from '@incremark/vue'\n *\n * const { blocks, completedBlocks, append, finalize } = useIncremark()\n *\n * // 使用 completedBlocks 作为输入(ID 稳定)\n * const sourceBlocks = computed(() => completedBlocks.value.map(b => ({\n * id: b.id,\n * node: b.node,\n * status: b.status\n * })))\n *\n * // 添加打字机效果\n * const { displayBlocks, isProcessing, skip, effect } = useBlockTransformer(sourceBlocks, {\n * charsPerTick: [1, 3], // 随机步长\n * tickInterval: 30,\n * effect: 'typing', // 光标效果\n * plugins: defaultPlugins\n * })\n * </script>\n *\n * <template>\n * <Incremark :blocks=\"displayBlocks\" :class=\"{ 'typing': effect === 'typing' }\" />\n * <button v-if=\"isProcessing\" @click=\"skip\">跳过</button>\n * </template>\n * ```\n */\nexport function useBlockTransformer<T = unknown>(\n sourceBlocks: Ref<SourceBlock<T>[]> | ComputedRef<SourceBlock<T>[]>,\n options: UseBlockTransformerOptions = {}\n): UseBlockTransformerReturn<T> {\n const displayBlocksRef = ref<DisplayBlock<T>[]>([])\n const isProcessingRef = ref(false)\n const isPausedRef = ref(false)\n const effectRef = ref<AnimationEffect>(options.effect ?? 'none')\n\n const transformer = createBlockTransformer<T>({\n ...options,\n onChange: (blocks) => {\n displayBlocksRef.value = blocks as DisplayBlock<T>[]\n isProcessingRef.value = transformer.isProcessing()\n isPausedRef.value = transformer.isPausedState()\n }\n })\n\n // 监听源 blocks 变化\n watch(\n sourceBlocks,\n (blocks) => {\n // 推入新 blocks\n transformer.push(blocks)\n\n // 处理正在显示的 block 内容更新\n const currentDisplaying = displayBlocksRef.value.find((b) => !b.isDisplayComplete)\n if (currentDisplaying) {\n const updated = blocks.find((b) => b.id === currentDisplaying.id)\n if (updated) {\n transformer.update(updated)\n }\n }\n },\n { immediate: true, deep: true }\n )\n\n onUnmounted(() => {\n transformer.destroy()\n })\n\n return {\n displayBlocks: computed(() => displayBlocksRef.value) as ComputedRef<DisplayBlock<T>[]>,\n isProcessing: computed(() => isProcessingRef.value),\n isPaused: computed(() => isPausedRef.value),\n effect: computed(() => effectRef.value),\n skip: () => transformer.skip(),\n reset: () => transformer.reset(),\n pause: () => {\n transformer.pause()\n isPausedRef.value = true\n },\n resume: () => {\n transformer.resume()\n isPausedRef.value = false\n },\n setOptions: (opts) => {\n transformer.setOptions(opts)\n if (opts.effect !== undefined) {\n effectRef.value = opts.effect\n }\n },\n transformer\n }\n}\n","<script setup lang=\"ts\">\nimport { computed, type Component } from 'vue'\nimport type { ParsedBlock } from '@incremark/core'\nimport IncremarkHeading from './IncremarkHeading.vue'\nimport IncremarkParagraph from './IncremarkParagraph.vue'\nimport IncremarkCode from './IncremarkCode.vue'\nimport IncremarkList from './IncremarkList.vue'\nimport IncremarkTable from './IncremarkTable.vue'\nimport IncremarkBlockquote from './IncremarkBlockquote.vue'\nimport IncremarkThematicBreak from './IncremarkThematicBreak.vue'\nimport IncremarkMath from './IncremarkMath.vue'\nimport IncremarkDefault from './IncremarkDefault.vue'\n\n// 组件映射类型\nexport type ComponentMap = Partial<Record<string, Component>>\n\n// 带稳定 ID 的块类型\nexport interface BlockWithStableId extends ParsedBlock {\n stableId: string\n isLastPending?: boolean // 是否是最后一个 pending 块\n}\n\nconst props = withDefaults(\n defineProps<{\n /** 要渲染的块列表(来自 useIncremark 的 blocks) */\n blocks: BlockWithStableId[]\n /** 自定义组件映射,key 为节点类型 */\n components?: ComponentMap\n /** 待处理块的样式类名 */\n pendingClass?: string\n /** 已完成块的样式类名 */\n completedClass?: string\n /** 是否显示块状态边框 */\n showBlockStatus?: boolean\n }>(),\n {\n components: () => ({}),\n pendingClass: 'incremark-pending',\n completedClass: 'incremark-completed',\n showBlockStatus: false\n }\n)\n\n// 默认组件映射\nconst defaultComponents: Record<string, Component> = {\n heading: IncremarkHeading,\n paragraph: IncremarkParagraph,\n code: IncremarkCode,\n list: IncremarkList,\n table: IncremarkTable,\n blockquote: IncremarkBlockquote,\n thematicBreak: IncremarkThematicBreak,\n math: IncremarkMath,\n inlineMath: IncremarkMath\n}\n\n// 合并用户组件和默认组件\nconst mergedComponents = computed(() => ({\n ...defaultComponents,\n ...props.components\n}))\n\nfunction getComponent(type: string): Component {\n return mergedComponents.value[type] || props.components?.default || IncremarkDefault\n}\n</script>\n\n<template>\n <div class=\"incremark\">\n <TransitionGroup name=\"incremark-fade\">\n <div\n v-for=\"block in blocks\"\n :key=\"block.stableId\"\n :class=\"[\n 'incremark-block',\n block.status === 'completed' ? completedClass : pendingClass,\n { 'incremark-show-status': showBlockStatus },\n { 'incremark-last-pending': block.isLastPending }\n ]\"\n >\n <component :is=\"getComponent(block.node.type)\" :node=\"block.node\" />\n </div>\n </TransitionGroup>\n </div>\n</template>\n\n<style scoped>\n.incremark-block.incremark-show-status.incremark-pending {\n border-left: 3px solid #a855f7;\n padding-left: 12px;\n opacity: 0.8;\n}\n\n.incremark-fade-enter-active {\n transition: opacity 0.2s ease-out;\n}\n\n.incremark-fade-enter-from {\n opacity: 0;\n}\n</style>\n","<script setup lang=\"ts\">\nimport type { Heading } from 'mdast'\nimport { computed } from 'vue'\nimport IncremarkInline from './IncremarkInline.vue'\n\nconst props = defineProps<{\n node: Heading\n}>()\n\nconst tag = computed(() => `h${props.node.depth}`)\n</script>\n\n<template>\n <component :is=\"tag\" class=\"incremark-heading\">\n <IncremarkInline :nodes=\"node.children\" />\n </component>\n</template>\n\n<style scoped>\n.incremark-heading {\n margin: 0.5em 0;\n font-weight: 600;\n line-height: 1.3;\n}\n\nh1 { font-size: 2em; border-bottom: 1px solid #eee; padding-bottom: 0.3em; }\nh2 { font-size: 1.5em; }\nh3 { font-size: 1.25em; }\nh4 { font-size: 1em; }\nh5 { font-size: 0.875em; }\nh6 { font-size: 0.85em; color: #666; }\n</style>\n\n","<script setup lang=\"ts\">\nimport { computed, ref, watch, shallowRef, onUnmounted } from 'vue'\n\n// Math 节点类型(来自 mdast-util-math)\ninterface MathNode {\n type: 'math' | 'inlineMath'\n value: string\n data?: {\n hName?: string\n hProperties?: Record<string, any>\n }\n}\n\nconst props = withDefaults(\n defineProps<{\n node: MathNode\n /** 渲染延迟(毫秒),用于流式输入时防抖 */\n renderDelay?: number\n }>(),\n {\n renderDelay: 300\n }\n)\n\nconst renderedHtml = ref('')\nconst renderError = ref('')\nconst isLoading = ref(false)\nconst katexRef = shallowRef<any>(null)\nlet renderTimer: ReturnType<typeof setTimeout> | null = null\n\nconst isInline = computed(() => props.node.type === 'inlineMath')\nconst formula = computed(() => props.node.value)\n\n// 带防抖动的渲染\nfunction scheduleRender() {\n if (!formula.value) {\n renderedHtml.value = ''\n return\n }\n\n // 清除之前的定时器\n if (renderTimer) {\n clearTimeout(renderTimer)\n }\n\n isLoading.value = true\n\n // 防抖动延迟渲染\n renderTimer = setTimeout(() => {\n doRender()\n }, props.renderDelay)\n}\n\nasync function doRender() {\n if (!formula.value) return\n\n try {\n // 动态导入 KaTeX\n if (!katexRef.value) {\n // @ts-ignore - katex 是可选依赖\n const katexModule = await import('katex')\n katexRef.value = katexModule.default\n }\n\n const katex = katexRef.value\n renderedHtml.value = katex.renderToString(formula.value, {\n displayMode: !isInline.value,\n throwOnError: false,\n strict: false\n })\n renderError.value = ''\n } catch (e: any) {\n // 静默失败,可能是公式不完整\n renderError.value = ''\n renderedHtml.value = ''\n } finally {\n isLoading.value = false\n }\n}\n\nonUnmounted(() => {\n if (renderTimer) {\n clearTimeout(renderTimer)\n }\n})\n\nwatch(formula, scheduleRender, { immediate: true })\n</script>\n\n<template>\n <!-- 行内公式 -->\n <span v-if=\"isInline\" class=\"incremark-math-inline\">\n <!-- 渲染成功 -->\n <span v-if=\"renderedHtml && !isLoading\" v-html=\"renderedHtml\" />\n <!-- 加载中或未渲染:显示源码 -->\n <code v-else class=\"math-source\">{{ formula }}</code>\n </span>\n <!-- 块级公式 -->\n <div v-else class=\"incremark-math-block\">\n <!-- 渲染成功 -->\n <div v-if=\"renderedHtml && !isLoading\" v-html=\"renderedHtml\" class=\"math-rendered\" />\n <!-- 加载中或未渲染:显示源码 -->\n <pre v-else class=\"math-source-block\"><code>{{ formula }}</code></pre>\n </div>\n</template>\n\n<style scoped>\n.incremark-math-inline {\n display: inline;\n}\n\n.incremark-math-block {\n margin: 1em 0;\n padding: 1em;\n overflow-x: auto;\n text-align: center;\n}\n\n.math-source {\n background: #f3f4f6;\n padding: 0.1em 0.3em;\n border-radius: 3px;\n font-size: 0.9em;\n color: #6b7280;\n}\n\n.math-source-block {\n margin: 0;\n padding: 1em;\n background: #f3f4f6;\n border-radius: 6px;\n text-align: left;\n}\n\n.math-source-block code {\n font-family: 'Fira Code', monospace;\n font-size: 0.9em;\n color: #374151;\n}\n\n.math-rendered :deep(.katex) {\n font-size: 1.1em;\n}\n\n.math-rendered :deep(.katex-display) {\n margin: 0;\n overflow-x: auto;\n overflow-y: hidden;\n}\n</style>\n","import { createCommentVNode as _createCommentVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, Fragment as _Fragment } from \"vue\"\n\nconst _hoisted_1 = {\n key: 0,\n class: \"incremark-math-inline\"\n}\nconst _hoisted_2 = [\"innerHTML\"]\nconst _hoisted_3 = { class: \"math-source\" }\nconst _hoisted_4 = { class: \"incremark-math-block\" }\nconst _hoisted_5 = [\"innerHTML\"]\nconst _hoisted_6 = { class: \"math-source-block\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n _createCommentVNode(\" 行内公式 \"),\n ($setup.isInline)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_1, [\n _createCommentVNode(\" 渲染成功 \"),\n ($setup.renderedHtml && !$setup.isLoading)\n ? (_openBlock(), _createElementBlock(\"span\", {\n key: 0,\n innerHTML: $setup.renderedHtml\n }, null, 8 /* PROPS */, _hoisted_2))\n : (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n _createCommentVNode(\" 加载中或未渲染:显示源码 \"),\n _createElementVNode(\"code\", _hoisted_3, _toDisplayString($setup.formula), 1 /* TEXT */)\n ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n ]))\n : (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n _createCommentVNode(\" 块级公式 \"),\n _createElementVNode(\"div\", _hoisted_4, [\n _createCommentVNode(\" 渲染成功 \"),\n ($setup.renderedHtml && !$setup.isLoading)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n innerHTML: $setup.renderedHtml,\n class: \"math-rendered\"\n }, null, 8 /* PROPS */, _hoisted_5))\n : (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n _createCommentVNode(\" 加载中或未渲染:显示源码 \"),\n _createElementVNode(\"pre\", _hoisted_6, [\n _createElementVNode(\"code\", null, _toDisplayString($setup.formula), 1 /* TEXT */)\n ])\n ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n ])\n ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n}","import script from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkMath.vue?type=script\";import \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkMath.vue?type=style&index=0\";import { render } from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkMath.vue?type=template\"; script.render = render;script.__file = \"src/components/IncremarkMath.vue\";script.__scopeId = \"data-v-6146c361\";export default script;","<script setup lang=\"ts\">\nimport type { PhrasingContent } from 'mdast'\nimport IncremarkMath from './IncremarkMath.vue'\n\ndefineProps<{\n nodes: PhrasingContent[]\n}>()\n\nfunction escapeHtml(str: string): string {\n return str\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n}\n</script>\n\n<template>\n <template v-for=\"(node, idx) in nodes\" :key=\"idx\">\n <!-- 文本 -->\n <template v-if=\"node.type === 'text'\">{{ node.value }}</template>\n\n <!-- 行内公式 -->\n <IncremarkMath v-else-if=\"(node as any).type === 'inlineMath'\" :node=\"node as any\" />\n\n <!-- 加粗 -->\n <strong v-else-if=\"node.type === 'strong'\">\n <IncremarkInline :nodes=\"(node.children as PhrasingContent[])\" />\n </strong>\n\n <!-- 斜体 -->\n <em v-else-if=\"node.type === 'emphasis'\">\n <IncremarkInline :nodes=\"(node.children as PhrasingContent[])\" />\n </em>\n\n <!-- 行内代码 -->\n <code v-else-if=\"node.type === 'inlineCode'\" class=\"incremark-inline-code\">{{ node.value }}</code>\n\n <!-- 链接 -->\n <a\n v-else-if=\"node.type === 'link'\"\n :href=\"node.url\"\n target=\"_blank\"\n rel=\"noopener\"\n >\n <IncremarkInline :nodes=\"(node.children as PhrasingContent[])\" />\n </a>\n\n <!-- 图片 -->\n <img\n v-else-if=\"node.type === 'image'\"\n :src=\"node.url\"\n :alt=\"node.alt || ''\"\n loading=\"lazy\"\n />\n\n <!-- 换行 -->\n <br v-else-if=\"node.type === 'break'\" />\n\n <!-- 删除线 -->\n <del v-else-if=\"node.type === 'delete'\">\n <IncremarkInline :nodes=\"(node.children as PhrasingContent[])\" />\n </del>\n\n <!-- 原始 HTML(用于 fade-mask 等特殊元素) -->\n <span v-else-if=\"(node as any).type === 'html'\" v-html=\"(node as any).value\"></span>\n </template>\n</template>\n\n<style>\n.incremark-inline-code {\n padding: 0.2em 0.4em;\n background: rgba(0, 0, 0, 0.06);\n border-radius: 4px;\n font-family: 'Fira Code', 'SF Mono', Consolas, monospace;\n font-size: 0.9em;\n}\n</style>\n","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createVNode as _createVNode, resolveComponent as _resolveComponent, createElementVNode as _createElementVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"incremark-inline-code\" }\nconst _hoisted_2 = [\"href\"]\nconst _hoisted_3 = [\"src\", \"alt\"]\nconst _hoisted_4 = [\"innerHTML\"]\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_IncremarkInline = _resolveComponent(\"IncremarkInline\", true)\n\n return (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($props.nodes, (node, idx) => {\n return (_openBlock(), _createElementBlock(_Fragment, { key: idx }, [\n _createCommentVNode(\" 文本 \"),\n (node.type === 'text')\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n _createTextVNode(_toDisplayString(node.value), 1 /* TEXT */)\n ], 64 /* STABLE_FRAGMENT */))\n : ((node as any).type === 'inlineMath')\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n _createCommentVNode(\" 行内公式 \"),\n _createVNode($setup[\"IncremarkMath\"], {\n node: node as any\n }, null, 8 /* PROPS */, [\"node\"])\n ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n : (node.type === 'strong')\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 2 }, [\n _createCommentVNode(\" 加粗 \"),\n _createElementVNode(\"strong\", null, [\n _createVNode(_component_IncremarkInline, {\n nodes: (node.children as PhrasingContent[])\n }, null, 8 /* PROPS */, [\"nodes\"])\n ])\n ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n : (node.type === 'emphasis')\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 3 }, [\n _createCommentVNode(\" 斜体 \"),\n _createElementVNode(\"em\", null, [\n _createVNode(_component_IncremarkInline, {\n nodes: (node.children as PhrasingContent[])\n }, null, 8 /* PROPS */, [\"nodes\"])\n ])\n ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n : (node.type === 'inlineCode')\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 4 }, [\n _createCommentVNode(\" 行内代码 \"),\n _createElementVNode(\"code\", _hoisted_1, _toDisplayString(node.value), 1 /* TEXT */)\n ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n : (node.type === 'link')\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 5 }, [\n _createCommentVNode(\" 链接 \"),\n _createElementVNode(\"a\", {\n href: node.url,\n target: \"_blank\",\n rel: \"noopener\"\n }, [\n _createVNode(_component_IncremarkInline, {\n nodes: (node.children as PhrasingContent[])\n }, null, 8 /* PROPS */, [\"nodes\"])\n ], 8 /* PROPS */, _hoisted_2)\n ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n : (node.type === 'image')\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 6 }, [\n _createCommentVNode(\" 图片 \"),\n _createElementVNode(\"img\", {\n src: node.url,\n alt: node.alt || '',\n loading: \"lazy\"\n }, null, 8 /* PROPS */, _hoisted_3)\n ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n : (node.type === 'break')\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 7 }, [\n _createCommentVNode(\" 换行 \"),\n _cache[0] || (_cache[0] = _createElementVNode(\"br\", null, null, -1 /* CACHED */))\n ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n : (node.type === 'delete')\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 8 }, [\n _createCommentVNode(\" 删除线 \"),\n _createElementVNode(\"del\", null, [\n _createVNode(_component_IncremarkInline, {\n nodes: (node.children as PhrasingContent[])\n }, null, 8 /* PROPS */, [\"nodes\"])\n ])\n ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n : ((node as any).type === 'html')\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 9 }, [\n _createCommentVNode(\" 原始 HTML(用于 fade-mask 等特殊元素) \"),\n _createElementVNode(\"span\", {\n innerHTML: (node as any).value\n }, null, 8 /* PROPS */, _hoisted_4)\n ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n : _createCommentVNode(\"v-if\", true)\n ], 64 /* STABLE_FRAGMENT */))\n }), 128 /* KEYED_FRAGMENT */))\n}","import script from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkInline.vue?type=script\";import \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkInline.vue?type=style&index=0\";import { render } from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkInline.vue?type=template\"; script.render = render;script.__file = \"src/components/IncremarkInline.vue\";export default script;","import { createVNode as _createVNode, resolveDynamicComponent as _resolveDynamicComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n return (_openBlock(), _createBlock(_resolveDynamicComponent($setup.tag), { class: \"incremark-heading\" }, {\n default: _withCtx(() => [\n _createVNode($setup[\"IncremarkInline\"], {\n nodes: $props.node.children\n }, null, 8 /* PROPS */, [\"nodes\"])\n ]),\n _: 1 /* STABLE */\n }))\n}","import script from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkHeading.vue?type=script\";import \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkHeading.vue?type=style&index=0\";import { render } from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkHeading.vue?type=template\"; script.render = render;script.__file = \"src/components/IncremarkHeading.vue\";script.__scopeId = \"data-v-56c8779f\";export default script;","import { createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"incremark-paragraph\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n return (_openBlock(), _createElementBlock(\"p\", _hoisted_1, [\n _createVNode($setup[\"IncremarkInline\"], {\n nodes: $props.node.children\n }, null, 8 /* PROPS */, [\"nodes\"])\n ]))\n}","import script from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkParagraph.vue?type=script\";import \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkParagraph.vue?type=style&index=0\";import { render } from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkParagraph.vue?type=template\"; script.render = render;script.__file = \"src/components/IncremarkParagraph.vue\";script.__scopeId = \"data-v-6fa83031\";export default script;","<script setup lang=\"ts\">\nimport type { Code } from 'mdast'\nimport { computed, ref, watch, shallowRef, onUnmounted } from 'vue'\n\nconst props = withDefaults(\n defineProps<{\n node: Code\n /** Shiki 主题,默认 github-dark */\n theme?: string\n /** 是否禁用代码高亮 */\n disableHighlight?: boolean\n /** Mermaid 渲染延迟(毫秒),用于流式输入时防抖 */\n mermaidDelay?: number\n }>(),\n {\n theme: 'github-dark',\n disableHighlight: false,\n mermaidDelay: 500\n }\n)\n\nconst copied = ref(false)\nconst highlightedHtml = ref('')\nconst isHighlighting = ref(false)\nconst highlightError = ref(false)\n\n// Mermaid 支持\nconst mermaidSvg = ref('')\nconst mermaidError = ref('')\nconst mermaidLoading = ref(false)\nconst mermaidRef = shallowRef<any>(null)\nlet mermaidTimer: ReturnType<typeof setTimeout> | null = null\n// 视图模式:'preview' | 'source'\nconst mermaidViewMode = ref<'preview' | 'source'>('preview')\n\nfunction toggleMermaidView() {\n mermaidViewMode.value = mermaidViewMode.value === 'preview' ? 'source' : 'preview'\n}\n\nconst language = computed(() => props.node.lang || 'text')\nconst code = computed(() => props.node.value)\nconst isMermaid = computed(() => language.value === 'mermaid')\n\n// 缓存 highlighter\nconst highlighterRef = shallowRef<any>(null)\nconst loadedLanguages = new Set<string>()\nconst loadedThemes = new Set<string>()\n\n// Mermaid 渲染(带防抖动)\nfunction scheduleRenderMermaid() {\n if (!isMermaid.value || !code.value) return\n\n // 清除之前的定时器\n if (mermaidTimer) {\n clearTimeout(mermaidTimer)\n }\n\n // 显示加载状态\n mermaidLoading.value = true\n\n // 防抖动延迟渲染\n mermaidTimer = setTimeout(() => {\n doRenderMermaid()\n }, props.mermaidDelay)\n}\n\nasync function doRenderMermaid() {\n if (!code.value) return\n\n mermaidError.value = ''\n\n try {\n // 动态导入 mermaid\n if (!mermaidRef.value) {\n // @ts-ignore - mermaid 是可选依赖\n const mermaidModule = await import('mermaid')\n mermaidRef.value = mermaidModule.default\n mermaidRef.value.initialize({\n startOnLoad: false,\n theme: 'dark',\n securityLevel: 'loose'\n })\n }\n\n const mermaid = mermaidRef.value\n const id = `mermaid-${Date.now()}-${Math.random().toString(36).slice(2)}`\n\n const { svg } = await mermaid.render(id, code.value)\n mermaidSvg.value = svg\n } catch (e: any) {\n // 不显示错误,可能是代码还不完整\n mermaidError.value = ''\n mermaidSvg.value = ''\n } finally {\n mermaidLoading.value = false\n }\n}\n\nonUnmounted(() => {\n if (mermaidTimer) {\n clearTimeout(mermaidTimer)\n }\n})\n\n// 动态加载 shiki 并高亮\nasync function highlight() {\n if (isMermaid.value) {\n scheduleRenderMermaid()\n return\n }\n\n if (!code.value || props.disableHighlight) {\n highlightedHtml.value = ''\n return\n }\n\n isHighlighting.value = true\n highlightError.value = false\n\n try {\n // 动态导入 shiki\n if (!highlighterRef.value) {\n const { createHighlighter } = await import('shiki')\n highlighterRef.value = await createHighlighter({\n themes: [props.theme as any],\n langs: []\n })\n loadedThemes.add(props.theme)\n }\n\n const highlighter = highlighterRef.value\n const lang = language.value\n\n // 按需加载语言\n if (!loadedLanguages.has(lang) && lang !== 'text') {\n try {\n await highlighter.loadLanguage(lang)\n loadedLanguages.add(lang)\n } catch {\n // 语言不支持,标记但不阻止\n }\n }\n\n // 按需加载主题\n if (!loadedThemes.has(props.theme)) {\n try {\n await highlighter.loadTheme(props.theme)\n loadedThemes.add(props.theme)\n } catch {\n // 主题不支持\n }\n }\n\n const html = highlighter.codeToHtml(code.value, {\n lang: loadedLanguages.has(lang) ? lang : 'text',\n theme: loadedThemes.has(props.theme) ? props.theme : 'github-dark'\n })\n highlightedHtml.value = html\n } catch (e) {\n // Shiki 不可用或加载失败\n highlightError.value = true\n highlightedHtml.value = ''\n } finally {\n isHighlighting.value = false\n }\n}\n\n// 监听代码变化,重新高亮/渲染\nwatch([code, () => props.theme, isMermaid], highlight, { immediate: true })\n\nasync function copyCode() {\n try {\n await navigator.clipboard.writeText(code.value)\n copied.value = true\n setTimeout(() => {\n copied.value = false\n }, 2000)\n } catch {\n // 复制失败静默处理\n }\n}\n</script>\n\n<template>\n <!-- Mermaid 图表 -->\n <div v-if=\"isMermaid\" class=\"incremark-mermaid\">\n <div class=\"mermaid-header\">\n <span class=\"language\">MERMAID</span>\n <div class=\"mermaid-actions\">\n <button \n class=\"view-toggle\" \n @click=\"toggleMermaidView\" \n type=\"button\"\n :disabled=\"!mermaidSvg\"\n >\n {{ mermaidViewMode === 'preview' ? '源码' : '预览' }}\n </button>\n <button class=\"copy-btn\" @click=\"copyCode\" type=\"button\">\n {{ copied ? '✓ 已复制' : '复制' }}\n </button>\n </div>\n </div>\n <div class=\"mermaid-content\">\n <!-- 加载中 -->\n <div v-if=\"mermaidLoading && !mermaidSvg\" class=\"mermaid-loading\">\n <pre class=\"mermaid-source-code\">{{ code }}</pre>\n </div>\n <!-- 源码模式 -->\n <pre v-else-if=\"mermaidViewMode === 'source'\" class=\"mermaid-source-code\">{{ code }}</pre>\n <!-- 预览模式 -->\n <div v-else-if=\"mermaidSvg\" v-html=\"mermaidSvg\" class=\"mermaid-svg\" />\n <!-- 无法渲染时显示源码 -->\n <pre v-else class=\"mermaid-source-code\">{{ code }}</pre>\n </div>\n </div>\n\n <!-- 普通代码块 -->\n <div v-else class=\"incremark-code\">\n <div class=\"code-header\">\n <span class=\"language\">{{ language }}</span>\n <button class=\"copy-btn\" @click=\"copyCode\" type=\"button\">\n {{ copied ? '✓ 已复制' : '复制' }}\n </button>\n </div>\n <div class=\"code-content\">\n <!-- 正在加载高亮 -->\n <div v-if=\"isHighlighting && !highlightedHtml\" class=\"code-loading\">\n <pre><code>{{ code }}</code></pre>\n </div>\n <!-- 高亮后的代码 -->\n <div v-else-if=\"highlightedHtml\" v-html=\"highlightedHtml\" class=\"shiki-wrapper\" />\n <!-- 回退:无高亮 -->\n <pre v-else class=\"code-fallback\"><code>{{ code }}</code></pre>\n </div>\n </div>\n</template>\n\n<style scoped>\n/* Mermaid 样式 */\n.incremark-mermaid {\n margin: 1em 0;\n border-radius: 8px;\n overflow: hidden;\n background: #1a1a2e;\n}\n\n.mermaid-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 8px 16px;\n background: #16213e;\n border-bottom: 1px solid #0f3460;\n font-size: 12px;\n}\n\n.mermaid-actions {\n display: flex;\n gap: 8px;\n}\n\n.view-toggle {\n padding: 4px 10px;\n border: 1px solid #0f3460;\n border-radius: 6px;\n background: transparent;\n color: #8b949e;\n font-size: 12px;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.view-toggle:hover:not(:disabled) {\n background: #0f3460;\n color: #e0e0e0;\n}\n\n.view-toggle:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.mermaid-content {\n padding: 16px;\n min-height: 100px;\n}\n\n.mermaid-loading {\n color: #8b949e;\n font-size: 14px;\n}\n\n.mermaid-source-code {\n margin: 0;\n padding: 12px;\n background: #0d1117;\n border-radius: 6px;\n color: #c9d1d9;\n font-family: 'Fira Code', 'SF Mono', monospace;\n font-size: 13px;\n line-height: 1.5;\n white-space: pre-wrap;\n overflow-x: auto;\n}\n\n.mermaid-svg {\n overflow-x: auto;\n}\n\n.mermaid-svg :deep(svg) {\n max-width: 100%;\n height: auto;\n}\n\n/* 代码块样式 */\n.incremark-code {\n margin: 1em 0;\n border-radius: 8px;\n overflow: hidden;\n background: #24292e;\n}\n\n.code-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 8px 16px;\n background: #1f2428;\n border-bottom: 1px solid #30363d;\n font-size: 12px;\n}\n\n.language {\n color: #8b949e;\n text-transform: uppercase;\n font-weight: 500;\n letter-spacing: 0.5px;\n}\n\n.copy-btn {\n padding: 4px 12px;\n border: 1px solid #30363d;\n border-radius: 6px;\n background: transparent;\n color: #8b949e;\n font-size: 12px;\n cursor: pointer;\n transition: all 0.2s;\n}\n\n.copy-btn:hover {\n background: #30363d;\n color: #c9d1d9;\n}\n\n.code-content {\n overflow-x: auto;\n}\n\n.code-loading {\n opacity: 0.7;\n}\n\n/* Shiki 生成的代码样式 */\n.shiki-wrapper :deep(pre) {\n margin: 0;\n padding: 16px;\n background: transparent !important;\n overflow-x: auto;\n}\n\n.shiki-wrapper :deep(code) {\n font-family: 'Fira Code', 'SF Mono', 'Monaco', 'Consolas', monospace;\n font-size: 14px;\n line-height: 1.6;\n}\n\n/* 回退样式 */\n.code-fallback,\n.code-loading pre {\n margin: 0;\n padding: 16px;\n overflow-x: auto;\n background: transparent;\n}\n\n.code-fallback code,\n.code-loading code {\n font-family: 'Fira Code', 'SF Mono', 'Monaco', 'Consolas', monospace;\n font-size: 14px;\n line-height: 1.6;\n color: #c9d1d9;\n}\n</style>\n","import { createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, Fragment as _Fragment } from \"vue\"\n\nconst _hoisted_1 = {\n key: 0,\n class: \"incremark-mermaid\"\n}\nconst _hoisted_2 = { class: \"mermaid-header\" }\nconst _hoisted_3 = { class: \"mermaid-actions\" }\nconst _hoisted_4 = [\"disabled\"]\nconst _hoisted_5 = { class: \"mermaid-content\" }\nconst _hoisted_6 = {\n key: 0,\n class: \"mermaid-loading\"\n}\nconst _hoisted_7 = { class: \"mermaid-source-code\" }\nconst _hoisted_8 = { class: \"mermaid-source-code\" }\nconst _hoisted_9 = [\"innerHTML\"]\nconst _hoisted_10 = { class: \"mermaid-source-code\" }\nconst _hoisted_11 = { class: \"incremark-code\" }\nconst _hoisted_12 = { class: \"code-header\" }\nconst _hoisted_13 = { class: \"language\" }\nconst _hoisted_14 = { class: \"code-content\" }\nconst _hoisted_15 = {\n key: 0,\n class: \"code-loading\"\n}\nconst _hoisted_16 = [\"innerHTML\"]\nconst _hoisted_17 = { class: \"code-fallback\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n _createCommentVNode(\" Mermaid 图表 \"),\n ($setup.isMermaid)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _cache[0] || (_cache[0] = _createElementVNode(\"span\", { class: \"language\" }, \"MERMAID\", -1 /* CACHED */)),\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"button\", {\n class: \"view-toggle\",\n onClick: $setup.toggleMermaidView,\n type: \"button\",\n disabled: !$setup.mermaidSvg\n }, _toDisplayString($setup.mermaidViewMode === 'preview' ? '源码' : '预览'), 9 /* TEXT, PROPS */, _hoisted_4),\n _createElementVNode(\"button\", {\n class: \"copy-btn\",\n onClick: $setup.copyCode,\n type: \"button\"\n }, _toDisplayString($setup.copied ? '✓ 已复制' : '复制'), 1 /* TEXT */)\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_5, [\n _createCommentVNode(\" 加载中 \"),\n ($setup.mermaidLoading && !$setup.mermaidSvg)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n _createElementVNode(\"pre\", _hoisted_7, _toDisplayString($setup.code), 1 /* TEXT */)\n ]))\n : ($setup.mermaidViewMode === 'source')\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n _createCommentVNode(\" 源码模式 \"),\n _createElementVNode(\"pre\", _hoisted_8, _toDisplayString($setup.code), 1 /* TEXT */)\n ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n : ($setup.mermaidSvg)\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 2 }, [\n _createCommentVNode(\" 预览模式 \"),\n _createElementVNode(\"div\", {\n innerHTML: $setup.mermaidSvg,\n class: \"mermaid-svg\"\n }, null, 8 /* PROPS */, _hoisted_9)\n ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n : (_openBlock(), _createElementBlock(_Fragment, { key: 3 }, [\n _createCommentVNode(\" 无法渲染时显示源码 \"),\n _createElementVNode(\"pre\", _hoisted_10, _toDisplayString($setup.code), 1 /* TEXT */)\n ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n ])\n ]))\n : (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n _createCommentVNode(\" 普通代码块 \"),\n _createElementVNode(\"div\", _hoisted_11, [\n _createElementVNode(\"div\", _hoisted_12, [\n _createElementVNode(\"span\", _hoisted_13, _toDisplayString($setup.language), 1 /* TEXT */),\n _createElementVNode(\"button\", {\n class: \"copy-btn\",\n onClick: $setup.copyCode,\n type: \"button\"\n }, _toDisplayString($setup.copied ? '✓ 已复制' : '复制'), 1 /* TEXT */)\n ]),\n _createElementVNode(\"div\", _hoisted_14, [\n _createCommentVNode(\" 正在加载高亮 \"),\n ($setup.isHighlighting && !$setup.highlightedHtml)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_15, [\n _createElementVNode(\"pre\", null, [\n _createElementVNode(\"code\", null, _toDisplayString($setup.code), 1 /* TEXT */)\n ])\n ]))\n : ($setup.highlightedHtml)\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n _createCommentVNode(\" 高亮后的代码 \"),\n _createElementVNode(\"div\", {\n innerHTML: $setup.highlightedHtml,\n class: \"shiki-wrapper\"\n }, null, 8 /* PROPS */, _hoisted_16)\n ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n : (_openBlock(), _createElementBlock(_Fragment, { key: 2 }, [\n _createCommentVNode(\" 回退:无高亮 \"),\n _createElementVNode(\"pre\", _hoisted_17, [\n _createElementVNode(\"code\", null, _toDisplayString($setup.code), 1 /* TEXT */)\n ])\n ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n ])\n ])\n ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n}","import script from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkCode.vue?type=script\";import \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkCode.vue?type=style&index=0\";import { render } from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkCode.vue?type=template\"; script.render = render;script.__file = \"src/components/IncremarkCode.vue\";script.__scopeId = \"data-v-c48b1022\";export default script;","<script setup lang=\"ts\">\nimport type { List, ListItem, PhrasingContent } from 'mdast'\nimport { computed } from 'vue'\nimport IncremarkInline from './IncremarkInline.vue'\n\nconst props = defineProps<{\n node: List\n}>()\n\nconst tag = computed(() => props.node.ordered ? 'ol' : 'ul')\n\nfunction getItemContent(item: ListItem): PhrasingContent[] {\n const firstChild = item.children[0]\n if (firstChild?.type === 'paragraph') {\n return firstChild.children as PhrasingContent[]\n }\n return []\n}\n</script>\n\n<template>\n <component :is=\"tag\" class=\"incremark-list\" :class=\"{ 'task-list': node.children.some(item => item.checked !== null && item.checked !== undefined) }\">\n <li \n v-for=\"(item, index) in node.children\" \n :key=\"index\" \n class=\"incremark-list-item\"\n :class=\"{ 'task-item': item.checked !== null && item.checked !== undefined }\"\n >\n <label v-if=\"item.checked !== null && item.checked !== undefined\" class=\"task-label\">\n <input \n type=\"checkbox\" \n :checked=\"item.checked\" \n disabled \n class=\"checkbox\"\n />\n <span class=\"task-content\">\n <IncremarkInline :nodes=\"getItemContent(item)\" />\n </span>\n </label>\n <template v-else>\n <IncremarkInline :nodes=\"getItemContent(item)\" />\n </template>\n </li>\n </component>\n</template>\n\n<style scoped>\n.incremark-list {\n margin: 0.75em 0;\n padding-left: 2em;\n}\n\n.incremark-list.task-list {\n list-style: none;\n padding-left: 0;\n}\n\n.incremark-list-item {\n margin: 0.25em 0;\n line-height: 1.6;\n}\n\n.task-item {\n list-style: none;\n}\n\n.task-label {\n display: flex;\n align-items: flex-start;\n gap: 0.5em;\n cursor: default;\n}\n\n.checkbox {\n margin-top: 0.3em;\n flex-shrink: 0;\n}\n\n.task-content {\n flex: 1;\n}\n</style>\n\n","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, createVNode as _createVNode, createCommentVNode as _createCommentVNode, createBlock as _createBlock, normalizeClass as _normalizeClass, resolveDynamicComponent as _resolveDynamicComponent, withCtx as _withCtx } from \"vue\"\n\nconst _hoisted_1 = {\n key: 0,\n class: \"task-label\"\n}\nconst _hoisted_2 = [\"checked\"]\nconst _hoisted_3 = { class: \"task-content\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n return (_openBlock(), _createBlock(_resolveDynamicComponent($setup.tag), {\n class: _normalizeClass([\"incremark-list\", { 'task-list': $props.node.children.some(item => item.checked !== null && item.checked !== undefined) }])\n }, {\n default: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($props.node.children, (item, index) => {\n return (_openBlock(), _createElementBlock(\"li\", {\n key: index,\n class: _normalizeClass([\"incremark-list-item\", { 'task-item': item.checked !== null && item.checked !== undefined }])\n }, [\n (item.checked !== null && item.checked !== undefined)\n ? (_openBlock(), _createElementBlock(\"label\", _hoisted_1, [\n _createElementVNode(\"input\", {\n type: \"checkbox\",\n checked: item.checked,\n disabled: \"\",\n class: \"checkbox\"\n }, null, 8 /* PROPS */, _hoisted_2),\n _createElementVNode(\"span\", _hoisted_3, [\n _createVNode($setup[\"IncremarkInline\"], {\n nodes: $setup.getItemContent(item)\n }, null, 8 /* PROPS */, [\"nodes\"])\n ])\n ]))\n : (_openBlock(), _createBlock($setup[\"IncremarkInline\"], {\n key: 1,\n nodes: $setup.getItemContent(item)\n }, null, 8 /* PROPS */, [\"nodes\"]))\n ], 2 /* CLASS */))\n }), 128 /* KEYED_FRAGMENT */))\n ]),\n _: 1 /* STABLE */\n }, 8 /* PROPS */, [\"class\"]))\n}","import script from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkList.vue?type=script\";import \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkList.vue?type=style&index=0\";import { render } from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkList.vue?type=template\"; script.render = render;script.__file = \"src/components/IncremarkList.vue\";script.__scopeId = \"data-v-0778ccea\";export default script;","<script setup lang=\"ts\">\nimport type { Table, TableCell, PhrasingContent } from 'mdast'\nimport IncremarkInline from './IncremarkInline.vue'\n\ndefineProps<{\n node: Table\n}>()\n\nfunction getCellContent(cell: TableCell): PhrasingContent[] {\n return cell.children as PhrasingContent[]\n}\n</script>\n\n<template>\n <div class=\"incremark-table-wrapper\">\n <table class=\"incremark-table\">\n <thead>\n <tr v-if=\"node.children[0]\">\n <th \n v-for=\"(cell, cellIndex) in node.children[0].children\" \n :key=\"cellIndex\"\n :style=\"{ textAlign: node.align?.[cellIndex] || 'left' }\"\n >\n <IncremarkInline :nodes=\"getCellContent(cell)\" />\n </th>\n </tr>\n </thead>\n <tbody>\n <tr v-for=\"(row, rowIndex) in node.children.slice(1)\" :key=\"rowIndex\">\n <td \n v-for=\"(cell, cellIndex) in row.children\" \n :key=\"cellIndex\"\n :style=\"{ textAlign: node.align?.[cellIndex] || 'left' }\"\n >\n <IncremarkInline :nodes=\"getCellContent(cell)\" />\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n</template>\n\n<style scoped>\n.incremark-table-wrapper {\n overflow-x: auto;\n margin: 1em 0;\n}\n\n.incremark-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 14px;\n}\n\n.incremark-table th,\n.incremark-table td {\n border: 1px solid #ddd;\n padding: 10px 14px;\n}\n\n.incremark-table th {\n background: #f8f9fa;\n font-weight: 600;\n}\n\n.incremark-table tr:nth-child(even) {\n background: #fafafa;\n}\n\n.incremark-table tr:hover {\n background: #f0f0f0;\n}\n</style>\n\n","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createVNode as _createVNode, normalizeStyle as _normalizeStyle, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"incremark-table-wrapper\" }\nconst _hoisted_2 = { class: \"incremark-table\" }\nconst _hoisted_3 = { key: 0 }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"table\", _hoisted_2, [\n _createElementVNode(\"thead\", null, [\n ($props.node.children[0])\n ? (_openBlock(), _createElementBlock(\"tr\", _hoisted_3, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($props.node.children[0].children, (cell, cellIndex) => {\n return (_openBlock(), _createElementBlock(\"th\", {\n key: cellIndex,\n style: _normalizeStyle({ textAlign: $props.node.align?.[cellIndex] || 'left' })\n }, [\n _createVNode($setup[\"IncremarkInline\"], {\n nodes: $setup.getCellContent(cell)\n }, null, 8 /* PROPS */, [\"nodes\"])\n ], 4 /* STYLE */))\n }), 128 /* KEYED_FRAGMENT */))\n ]))\n : _createCommentVNode(\"v-if\", true)\n ]),\n _createElementVNode(\"tbody\", null, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($props.node.children.slice(1), (row, rowIndex) => {\n return (_openBlock(), _createElementBlock(\"tr\", { key: rowIndex }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(row.children, (cell, cellIndex) => {\n return (_openBlock(), _createElementBlock(\"td\", {\n key: cellIndex,\n style: _normalizeStyle({ textAlign: $props.node.align?.[cellIndex] || 'left' })\n }, [\n _createVNode($setup[\"IncremarkInline\"], {\n nodes: $setup.getCellContent(cell)\n }, null, 8 /* PROPS */, [\"nodes\"])\n ], 4 /* STYLE */))\n }), 128 /* KEYED_FRAGMENT */))\n ]))\n }), 128 /* KEYED_FRAGMENT */))\n ])\n ])\n ]))\n}","import script from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkTable.vue?type=script\";import \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkTable.vue?type=style&index=0\";import { render } from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkTable.vue?type=template\"; script.render = render;script.__file = \"src/components/IncremarkTable.vue\";script.__scopeId = \"data-v-7aea7ba6\";export default script;","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString } from \"vue\"\n\nconst _hoisted_1 = { class: \"incremark-blockquote\" }\nconst _hoisted_2 = {\n key: 1,\n class: \"unknown-child\"\n}\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n return (_openBlock(), _createElementBlock(\"blockquote\", _hoisted_1, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($props.node.children, (child, index) => {\n return (_openBlock(), _createElementBlock(_Fragment, { key: index }, [\n (child.type === 'paragraph')\n ? (_openBlock(), _createBlock($setup[\"IncremarkParagraph\"], {\n key: 0,\n node: child\n }, null, 8 /* PROPS */, [\"node\"]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_2, _toDisplayString(child.type), 1 /* TEXT */))\n ], 64 /* STABLE_FRAGMENT */))\n }), 128 /* KEYED_FRAGMENT */))\n ]))\n}","import script from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkBlockquote.vue?type=script\";import \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkBlockquote.vue?type=style&index=0\";import { render } from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkBlockquote.vue?type=template\"; script.render = render;script.__file = \"src/components/IncremarkBlockquote.vue\";script.__scopeId = \"data-v-67363f13\";export default script;","import { openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"incremark-hr\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n return (_openBlock(), _createElementBlock(\"hr\", _hoisted_1))\n}","import script from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkThematicBreak.vue?type=script\";import \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkThematicBreak.vue?type=style&index=0\";import { render } from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkThematicBreak.vue?type=template\"; script.render = render;script.__file = \"src/components/IncremarkThematicBreak.vue\";script.__scopeId = \"data-v-cb316429\";export default script;","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"incremark-default\" }\nconst _hoisted_2 = { class: \"type-badge\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"span\", _hoisted_2, _toDisplayString($props.node.type), 1 /* TEXT */),\n _createElementVNode(\"pre\", null, _toDisplayString(JSON.stringify($props.node, null, 2)), 1 /* TEXT */)\n ]))\n}","import script from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkDefault.vue?type=script\";import \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkDefault.vue?type=style&index=0\";import { render } from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkDefault.vue?type=template\"; script.render = render;script.__file = \"src/components/IncremarkDefault.vue\";script.__scopeId = \"data-v-5542d517\";export default script;","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveDynamicComponent as _resolveDynamicComponent, createBlock as _createBlock, normalizeClass as _normalizeClass, TransitionGroup as _TransitionGroup, withCtx as _withCtx, createVNode as _createVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"incremark\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_TransitionGroup, { name: \"incremark-fade\" }, {\n default: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($props.blocks, (block) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n key: block.stableId,\n class: _normalizeClass([\n 'incremark-block',\n block.status === 'completed' ? $props.completedClass : $props.pendingClass,\n { 'incremark-show-status': $props.showBlockStatus },\n { 'incremark-last-pending': block.isLastPending }\n ])\n }, [\n (_openBlock(), _createBlock(_resolveDynamicComponent($setup.getComponent(block.node.type)), {\n node: block.node\n }, null, 8 /* PROPS */, [\"node\"]))\n ], 2 /* CLASS */))\n }), 128 /* KEYED_FRAGMENT */))\n ]),\n _: 1 /* STABLE */\n })\n ]))\n}","import script from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/Incremark.vue?type=script\";import \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/Incremark.vue?type=style&index=0\";import { render } from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/Incremark.vue?type=template\"; script.render = render;script.__file = \"src/components/Incremark.vue\";script.__scopeId = \"data-v-5966b843\";export default script;","<script setup lang=\"ts\">\nimport type { RootContent } from 'mdast'\nimport type { Component } from 'vue'\nimport IncremarkHeading from './IncremarkHeading.vue'\nimport IncremarkParagraph from './IncremarkParagraph.vue'\nimport IncremarkCode from './IncremarkCode.vue'\nimport IncremarkList from './IncremarkList.vue'\nimport IncremarkTable from './IncremarkTable.vue'\nimport IncremarkBlockquote from './IncremarkBlockquote.vue'\nimport IncremarkThematicBreak from './IncremarkThematicBreak.vue'\nimport IncremarkMath from './IncremarkMath.vue'\nimport IncremarkDefault from './IncremarkDefault.vue'\n\ndefineProps<{\n node: RootContent\n}>()\n\nconst componentMap: Record<string, Component> = {\n heading: IncremarkHeading,\n paragraph: IncremarkParagraph,\n code: IncremarkCode,\n list: IncremarkList,\n table: IncremarkTable,\n blockquote: IncremarkBlockquote,\n thematicBreak: IncremarkThematicBreak,\n math: IncremarkMath,\n inlineMath: IncremarkMath,\n}\n\nfunction getComponent(type: string): Component {\n return componentMap[type] || IncremarkDefault\n}\n</script>\n\n<template>\n <component :is=\"getComponent(node.type)\" :node=\"node\" />\n</template>\n\n","import { resolveDynamicComponent as _resolveDynamicComponent, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n return (_openBlock(), _createBlock(_resolveDynamicComponent($setup.getComponent($props.node.type)), { node: $props.node }, null, 8 /* PROPS */, [\"node\"]))\n}","import script from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkRenderer.vue?type=script\";import { render } from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkRenderer.vue?type=template\"; script.render = render;script.__file = \"src/components/IncremarkRenderer.vue\";export default script;","<script setup lang=\"ts\">\nimport { ref, watch, onMounted, onUnmounted, nextTick } from 'vue'\n\nconst props = withDefaults(defineProps<{\n /** 是否启用自动滚动 */\n enabled?: boolean\n /** 触发自动滚动的底部阈值(像素) */\n threshold?: number\n /** 滚动行为 */\n behavior?: ScrollBehavior\n}>(), {\n enabled: true,\n threshold: 50,\n behavior: 'instant'\n})\n\nconst containerRef = ref<HTMLDivElement | null>(null)\nconst isUserScrolledUp = ref(false)\n\n// 记录上一次滚动位置,用于判断滚动方向\nlet lastScrollTop = 0\nlet lastScrollHeight = 0\n\n/**\n * 检查是否在底部附近\n */\nfunction isNearBottom(): boolean {\n const container = containerRef.value\n if (!container) return true\n \n const { scrollTop, scrollHeight, clientHeight } = container\n return scrollHeight - scrollTop - clientHeight <= props.threshold\n}\n\n/**\n * 滚动到底部\n */\nfunction scrollToBottom(force = false): void {\n const container = containerRef.value\n if (!container) return\n \n // 如果用户手动向上滚动了,且不是强制滚动,则不自动滚动\n if (isUserScrolledUp.value && !force) return\n \n container.scrollTo({\n top: container.scrollHeight,\n behavior: props.behavior\n })\n}\n\n/**\n * 检查是否有滚动条\n */\nfunction hasScrollbar(): boolean {\n const container = containerRef.value\n if (!container) return false\n return container.scrollHeight > container.clientHeight\n}\n\n/**\n * 处理滚动事件\n */\nfunction handleScroll(): void {\n const container = containerRef.value\n if (!container) return\n \n const { scrollTop, scrollHeight, clientHeight } = container\n \n // 如果没有滚动条,恢复自动滚动\n if (scrollHeight <= clientHeight) {\n isUserScrolledUp.value = false\n lastScrollTop = 0\n lastScrollHeight = scrollHeight\n return\n }\n \n // 检查用户是否滚动到底部附近\n if (isNearBottom()) {\n // 用户滚动到底部,恢复自动滚动\n isUserScrolledUp.value = false\n } else {\n // 判断是否是用户主动向上滚动\n // 条件:scrollTop 减少(向上滚动)且 scrollHeight 没有变化(不是因为内容增加)\n const isScrollingUp = scrollTop < lastScrollTop\n const isContentUnchanged = scrollHeight === lastScrollHeight\n \n if (isScrollingUp && isContentUnchanged) {\n // 用户主动向上滚动,暂停自动滚动\n isUserScrolledUp.value = true\n }\n }\n \n // 更新记录\n lastScrollTop = scrollTop\n lastScrollHeight = scrollHeight\n}\n\n// 监听 slot 内容变化(使用 MutationObserver)\nlet observer: MutationObserver | null = null\n\nonMounted(() => {\n if (!containerRef.value) return\n \n // 初始化滚动位置记录\n lastScrollTop = containerRef.value.scrollTop\n lastScrollHeight = containerRef.value.scrollHeight\n \n observer = new MutationObserver(() => {\n nextTick(() => {\n if (!containerRef.value) return\n \n // 如果没有滚动条,重置状态\n if (!hasScrollbar()) {\n isUserScrolledUp.value = false\n }\n \n // 更新 scrollHeight 记录(内容变化后)\n lastScrollHeight = containerRef.value.scrollHeight\n \n // 自动滚动\n if (props.enabled && !isUserScrolledUp.value) {\n scrollToBottom()\n }\n })\n })\n \n observer.observe(containerRef.value, {\n childList: true,\n subtree: true,\n characterData: true\n })\n})\n\nonUnmounted(() => {\n observer?.disconnect()\n})\n\n// 暴露方法给父组件\ndefineExpose({\n /** 强制滚动到底部 */\n scrollToBottom: () => scrollToBottom(true),\n /** 是否用户手动向上滚动了 */\n isUserScrolledUp: () => isUserScrolledUp.value,\n /** 容器元素引用 */\n container: containerRef\n})\n</script>\n\n<template>\n <div\n ref=\"containerRef\"\n class=\"auto-scroll-container\"\n @scroll=\"handleScroll\"\n >\n <slot />\n </div>\n</template>\n\n<style scoped>\n.auto-scroll-container {\n overflow-y: auto;\n height: 100%;\n}\n</style>\n","import { renderSlot as _renderSlot, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n return (_openBlock(), _createElementBlock(\"div\", {\n ref: \"containerRef\",\n class: \"auto-scroll-container\",\n onScroll: $setup.handleScroll\n }, [\n _renderSlot(_ctx.$slots, \"default\", {}, undefined, true)\n ], 544 /* NEED_HYDRATION, NEED_PATCH */))\n}","import script from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/AutoScrollContainer.vue?type=script\";import \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/AutoScrollContainer.vue?type=style&index=0\";import { render } from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/AutoScrollContainer.vue?type=template\"; script.render = render;script.__file = \"src/components/AutoScrollContainer.vue\";script.__scopeId = \"data-v-e0d180b8\";export default script;","// Composables\nexport { useIncremark, useStreamRenderer, useDevTools, useBlockTransformer } from './composables'\nexport type {\n UseIncremarkOptions,\n UseStreamRendererOptions,\n UseDevToolsOptions,\n UseBlockTransformerOptions,\n UseBlockTransformerReturn\n} from './composables'\n\n// Components\nexport {\n Incremark,\n IncremarkRenderer,\n IncremarkHeading,\n IncremarkParagraph,\n IncremarkCode,\n IncremarkList,\n IncremarkTable,\n IncremarkBlockquote,\n IncremarkThematicBreak,\n IncremarkInline,\n IncremarkMath,\n IncremarkDefault,\n AutoScrollContainer\n} from './components'\nexport type { ComponentMap, BlockWithStableId } from './components'\n\n// Re-export core types\nexport type {\n ParsedBlock,\n IncrementalUpdate,\n ParserOptions,\n BlockStatus,\n Root,\n RootContent,\n // Transformer types\n SourceBlock,\n DisplayBlock,\n TransformerPlugin,\n TransformerOptions,\n TransformerState,\n AnimationEffect\n} from '@incremark/core'\n\n// Re-export transformer utilities and plugins\nexport {\n BlockTransformer,\n createBlockTransformer,\n countChars,\n sliceAst,\n cloneNode,\n codeBlockPlugin,\n mermaidPlugin,\n imagePlugin,\n mathPlugin,\n thematicBreakPlugin,\n defaultPlugins,\n allPlugins,\n createPlugin\n} from '@incremark/core'\n"],"mappings":"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","names":["render","computed","ref","computed","onUnmounted","computed","computed","computed","ref","watch","shallowRef","onUnmounted","IncremarkMath_default","_Fragment","_openBlock","_createElementBlock","_createCommentVNode","_toDisplayString","_createElementVNode","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","render","render","IncremarkInline_default","computed","_createVNode","_openBlock","render","render","IncremarkHeading_default","_createVNode","_openBlock","_createElementBlock","_hoisted_1","render","render","IncremarkParagraph_default","computed","ref","watch","shallowRef","onUnmounted","_createCommentVNode","_createElementVNode","_toDisplayString","_openBlock","_createElementBlock","_Fragment","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_12","_hoisted_13","_hoisted_14","render","render","IncremarkCode_default","computed","computed","_renderList","_Fragment","_openBlock","_createElementBlock","_createElementVNode","_createVNode","_createBlock","_resolveDynamicComponent","_withCtx","_hoisted_1","_hoisted_2","_hoisted_3","render","render","IncremarkList_default","_renderList","_Fragment","_openBlock","_createElementBlock","_createVNode","_createCommentVNode","_createElementVNode","_hoisted_1","_hoisted_2","_hoisted_3","render","render","IncremarkTable_default","_renderList","_Fragment","_openBlock","_createElementBlock","_createBlock","_toDisplayString","_hoisted_1","_hoisted_2","render","render","IncremarkBlockquote_default","_openBlock","_createElementBlock","_hoisted_1","render","render","IncremarkThematicBreak_default","_toDisplayString","_createElementVNode","_openBlock","_createElementBlock","_hoisted_1","_hoisted_2","render","render","IncremarkDefault_default","IncremarkHeading_default","IncremarkParagraph_default","IncremarkCode_default","IncremarkList_default","IncremarkTable_default","IncremarkBlockquote_default","IncremarkThematicBreak_default","IncremarkMath_default","computed","IncremarkDefault_default","_renderList","_Fragment","_openBlock","_createElementBlock","_resolveDynamicComponent","_createBlock","_normalizeClass","_withCtx","_createVNode","_hoisted_1","render","render","Incremark_default","IncremarkHeading_default","IncremarkParagraph_default","IncremarkCode_default","IncremarkList_default","IncremarkTable_default","IncremarkBlockquote_default","IncremarkThematicBreak_default","IncremarkMath_default","IncremarkDefault_default","_resolveDynamicComponent","_openBlock","_createBlock","render","render","IncremarkRenderer_default","ref","onMounted","onUnmounted","_openBlock","_createElementBlock","render","render","AutoScrollContainer_default","BlockTransformer","createBlockTransformer"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@incremark/vue",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.5",
|
|
4
4
|
"description": "Incremark Vue 3 集成",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -22,8 +22,8 @@
|
|
|
22
22
|
],
|
|
23
23
|
"dependencies": {
|
|
24
24
|
"shiki": "^3.20.0",
|
|
25
|
-
"@incremark/core": "0.0.
|
|
26
|
-
"@incremark/devtools": "0.0.
|
|
25
|
+
"@incremark/core": "0.0.5",
|
|
26
|
+
"@incremark/devtools": "0.0.5"
|
|
27
27
|
},
|
|
28
28
|
"peerDependencies": {
|
|
29
29
|
"vue": "^3.3.0",
|