@incremark/vue 0.2.1 → 0.2.2

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/dist/index.css CHANGED
@@ -1,11 +1,3 @@
1
- /* sfc-style:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkHtmlElement.vue?type=style&index=0 */
2
- .incremark-html-element[data-v-b3af0c5a] {
3
- }
4
- .incremark-unknown-child[data-v-b3af0c5a] {
5
- color: #999;
6
- font-style: italic;
7
- }
8
-
9
1
  /* sfc-style:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/AutoScrollContainer.vue?type=style&index=0 */
10
2
  .auto-scroll-container[data-v-e0d180b8] {
11
3
  overflow-y: auto;
@@ -1 +1 @@
1
- {"version":3,"sources":["sfc-style:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkHtmlElement.vue?type=style&index=0","sfc-style:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/AutoScrollContainer.vue?type=style&index=0"],"sourcesContent":["\n.incremark-html-element[data-v-b3af0c5a] {\n /* 保持原有样式 */\n}\n.incremark-unknown-child[data-v-b3af0c5a] {\n color: #999;\n font-style: italic;\n}\n","\n.auto-scroll-container[data-v-e0d180b8] {\n overflow-y: auto;\n height: 100%;\n}\n"],"mappings":";AACA,CAAC,sBAAsB,CAAC;AAExB;AACA,CAAC,uBAAuB,CAAC;AACvB,SAAO;AACP,cAAY;AACd;;;ACNA,CAAC,qBAAqB,CAAC;AACrB,cAAY;AACZ,UAAQ;AACV;","names":[]}
1
+ {"version":3,"sources":["sfc-style:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/AutoScrollContainer.vue?type=style&index=0"],"sourcesContent":["\n.auto-scroll-container[data-v-e0d180b8] {\n overflow-y: auto;\n height: 100%;\n}\n"],"mappings":";AACA,CAAC,qBAAqB,CAAC;AACrB,cAAY;AACZ,UAAQ;AACV;","names":[]}
package/dist/index.js CHANGED
@@ -831,7 +831,6 @@ function render2(_ctx, _cache, $props, $setup, $data, $options) {
831
831
  // src/components/IncremarkHtmlElement.vue
832
832
  IncremarkHtmlElement_default.render = render2;
833
833
  IncremarkHtmlElement_default.__file = "src/components/IncremarkHtmlElement.vue";
834
- IncremarkHtmlElement_default.__scopeId = "data-v-b3af0c5a";
835
834
  var IncremarkHtmlElement_default2 = IncremarkHtmlElement_default;
836
835
 
837
836
  // sfc-script:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkInline.vue?type=script
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/composables/useIncremark.ts","../src/composables/useProvideDefinations.ts","../src/composables/useTypewriter.ts","../src/utils/cursor.ts","../src/composables/useStreamRenderer.ts","../src/composables/useDevTools.ts","../src/composables/useBlockTransformer.ts","../src/composables/useDefinationsContext.ts","src/components/Incremark.vue","src/components/IncremarkHeading.vue","src/components/IncremarkInline.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/IncremarkHtmlElement.vue","sfc-template:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkHtmlElement.vue?type=template","../src/components/IncremarkHtmlElement.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","src/components/IncremarkFootnotes.vue","src/components/IncremarkRenderer.vue","sfc-template:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkRenderer.vue?type=template","../src/components/IncremarkRenderer.vue","sfc-template:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkFootnotes.vue?type=template","../src/components/IncremarkFootnotes.vue","sfc-template:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/Incremark.vue?type=template","../src/components/Incremark.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/ThemeProvider.vue","sfc-template:/Users/yishuai/develop/ai/markdown/packages/vue/src/ThemeProvider.vue?type=template","../src/ThemeProvider.vue","../src/index.ts"],"sourcesContent":["import { ref, shallowRef, computed, markRaw, type ComputedRef } from 'vue'\nimport {\n createIncremarkParser,\n type ParserOptions,\n type ParsedBlock,\n type IncrementalUpdate,\n type Root,\n type TransformerPlugin,\n type AnimationEffect\n} from '@incremark/core'\nimport { useProvideDefinations } from './useProvideDefinations'\nimport { useTypewriter } from './useTypewriter'\n\n/** 打字机效果配置 */\nexport interface TypewriterOptions {\n /** 是否启用打字机效果(可响应式切换) */\n enabled?: boolean\n /** 每次显示的字符数,可以是固定值或范围 [min, max] */\n charsPerTick?: number | [number, number]\n /** 更新间隔 (ms) */\n tickInterval?: number\n /** 动画效果: 'none' | 'fade-in' | 'typing' */\n effect?: AnimationEffect\n /** 光标字符(仅 typing 效果使用) */\n cursor?: string\n /** 页面不可见时暂停 */\n pauseOnHidden?: boolean\n /** 自定义插件 */\n plugins?: TransformerPlugin[]\n}\n\nexport interface UseIncremarkOptions extends ParserOptions {\n /** 打字机配置,传入即创建 transformer(可通过 enabled 控制是否启用) */\n typewriter?: TypewriterOptions\n}\n\n/** 打字机控制对象 */\nexport interface TypewriterControls {\n /** 是否启用(只读) */\n enabled: ComputedRef<boolean>\n /** 设置是否启用 */\n setEnabled: (enabled: boolean) => void\n /** 是否正在处理中 */\n isProcessing: ComputedRef<boolean>\n /** 是否已暂停 */\n isPaused: ComputedRef<boolean>\n /** 当前动画效果 */\n effect: ComputedRef<AnimationEffect>\n /** 跳过动画,直接显示全部 */\n skip: () => void\n /** 暂停动画 */\n pause: () => void\n /** 恢复动画 */\n resume: () => void\n /** 动态更新配置 */\n setOptions: (options: Partial<TypewriterOptions>) => void\n}\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, Incremark } from '@incremark/vue'\n *\n * // 基础用法\n * const { blocks, append, finalize } = useIncremark()\n *\n * // 启用打字机效果\n * const { blocks, append, finalize, typewriter } = useIncremark({\n * typewriter: {\n * enabled: true, // 可响应式切换\n * charsPerTick: [1, 3],\n * tickInterval: 30,\n * effect: 'typing',\n * cursor: '|'\n * }\n * })\n *\n * // 动态切换打字机效果\n * typewriter.enabled.value = false\n * </script>\n *\n * <template>\n * <Incremark :blocks=\"blocks\" />\n * <button v-if=\"typewriter.isProcessing.value\" @click=\"typewriter.skip\">跳过</button>\n * </template>\n * ```\n */\nexport function useIncremark(options: UseIncremarkOptions = {}) {\n // 内部自动提供 definitions context\n const { setDefinations, setFootnoteDefinitions, setFootnoteReferenceOrder } = useProvideDefinations()\n\n // 解析器\n const parser = createIncremarkParser({\n ...options,\n onChange: (state) => {\n setDefinations(state.definitions)\n setFootnoteDefinitions(state.footnoteDefinitions)\n // 调用用户提供的 onChange\n options.onChange?.(state)\n }\n })\n\n const completedBlocks = shallowRef<ParsedBlock[]>([])\n const pendingBlocks = shallowRef<ParsedBlock[]>([])\n const isLoading = ref(false)\n const markdown = ref('')\n const isFinalized = ref(false)\n const footnoteReferenceOrder = ref<string[]>([])\n\n // 使用 useTypewriter composable 管理打字机效果\n const { blocks, typewriter, transformer } = useTypewriter({\n typewriter: options.typewriter,\n completedBlocks,\n pendingBlocks\n })\n\n // AST\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 function append(chunk: string): IncrementalUpdate {\n isLoading.value = true\n const update = parser.append(chunk)\n\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 = update.pending.map((b) => markRaw(b))\n\n // 更新脚注引用顺序\n footnoteReferenceOrder.value = update.footnoteReferenceOrder\n setFootnoteReferenceOrder(update.footnoteReferenceOrder)\n\n return update\n }\n\n function finalize(): IncrementalUpdate {\n const update = parser.finalize()\n\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 isFinalized.value = true\n\n // 更新脚注引用顺序\n footnoteReferenceOrder.value = update.footnoteReferenceOrder\n setFootnoteReferenceOrder(update.footnoteReferenceOrder)\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 isFinalized.value = false\n footnoteReferenceOrder.value = []\n\n // 重置 transformer\n transformer?.reset()\n }\n\n function render(content: string): IncrementalUpdate {\n const update = parser.render(content)\n\n markdown.value = parser.getBuffer()\n completedBlocks.value = parser.getCompletedBlocks().map(b => markRaw(b))\n pendingBlocks.value = []\n isLoading.value = false\n isFinalized.value = true\n footnoteReferenceOrder.value = update.footnoteReferenceOrder\n setFootnoteReferenceOrder(update.footnoteReferenceOrder)\n\n return update\n }\n\n return {\n /** 已收集的完整 Markdown 字符串 */\n markdown,\n /** 已完成的块列表 */\n completedBlocks,\n /** 待处理的块列表 */\n pendingBlocks,\n /** 当前完整的 AST */\n ast,\n /** 用于渲染的 blocks(根据打字机设置自动处理) */\n blocks,\n /** 是否正在加载 */\n isLoading,\n /** 是否已完成(finalize) */\n isFinalized,\n /** 脚注引用的出现顺序 */\n footnoteReferenceOrder,\n /** 追加内容 */\n append,\n /** 完成解析 */\n finalize,\n /** 强制中断 */\n abort,\n /** 重置解析器和打字机 */\n reset,\n /** 一次性渲染(reset + append + finalize) */\n render,\n /** 解析器实例 */\n parser,\n /** 打字机控制 */\n typewriter\n }\n}\n","import { ref, provide, type InjectionKey, type Ref } from 'vue';\nimport type { Definition, FootnoteDefinition } from 'mdast';\n\nexport const definationsInjectionKey: InjectionKey<{\n definations: Ref<Record<string, Definition>>\n footnoteDefinitions: Ref<Record<string, FootnoteDefinition>>\n footnoteReferenceOrder: Ref<string[]>\n}> = Symbol('provideDefinations');\n\nexport function useProvideDefinations() {\n const definations = ref<Record<string, Definition>>({});\n const footnoteDefinitions = ref<Record<string, FootnoteDefinition>>({});\n const footnoteReferenceOrder = ref<string[]>([]);\n\n provide(definationsInjectionKey, {\n definations,\n footnoteDefinitions,\n footnoteReferenceOrder\n });\n\n function setDefinations(definitions: Record<string, Definition>) {\n definations.value = definitions;\n }\n\n function setFootnoteDefinitions(definitions: Record<string, FootnoteDefinition>) {\n footnoteDefinitions.value = definitions;\n }\n\n function setFootnoteReferenceOrder(order: string[]) {\n footnoteReferenceOrder.value = order;\n }\n\n function clearDefinations() {\n definations.value = {};\n }\n\n function clearFootnoteDefinitions() {\n footnoteDefinitions.value = {};\n }\n\n function clearFootnoteReferenceOrder() {\n footnoteReferenceOrder.value = [];\n }\n\n function clearAllDefinations() {\n clearDefinations();\n clearFootnoteDefinitions();\n clearFootnoteReferenceOrder();\n }\n\n return {\n setDefinations,\n setFootnoteDefinitions,\n setFootnoteReferenceOrder,\n clearDefinations,\n clearFootnoteDefinitions,\n clearFootnoteReferenceOrder,\n clearAllDefinations\n }\n\n}","/**\n * @file useTypewriter Composable - 打字机效果管理\n *\n * @description\n * 管理打字机效果的状态和控制逻辑,从 useIncremark 中拆分出来以简化代码。\n *\n * @author Incremark Team\n * @license MIT\n */\n\nimport { ref, shallowRef, computed, watch, onUnmounted, type Ref, type ComputedRef } from 'vue'\nimport {\n createBlockTransformer,\n defaultPlugins,\n type RootContent,\n type ParsedBlock,\n type DisplayBlock,\n type AnimationEffect,\n type BlockTransformer\n} from '@incremark/core'\nimport type { TypewriterOptions, TypewriterControls } from './useIncremark'\nimport { addCursorToNode } from '../utils/cursor'\n\nexport interface UseTypewriterOptions {\n typewriter?: TypewriterOptions\n completedBlocks: Ref<ParsedBlock[]>\n pendingBlocks: Ref<ParsedBlock[]>\n}\n\nexport interface UseTypewriterReturn {\n /** 用于渲染的 blocks(经过打字机处理或原始blocks) */\n blocks: ComputedRef<Array<ParsedBlock & { stableId: string }>>\n /** 打字机控制对象 */\n typewriter: TypewriterControls\n /** transformer 实例 */\n transformer: BlockTransformer<RootContent> | null\n}\n\n/**\n * useTypewriter Composable\n *\n * @description\n * 管理打字机效果的所有状态和逻辑。\n *\n * @param options - 打字机配置和数据\n * @returns 打字机状态和控制对象\n */\nexport function useTypewriter(options: UseTypewriterOptions): UseTypewriterReturn {\n const { typewriter: typewriterConfig, completedBlocks, pendingBlocks } = options\n\n // 打字机状态\n const typewriterEnabled = ref(typewriterConfig?.enabled ?? !!typewriterConfig)\n const displayBlocksRef = shallowRef<DisplayBlock<RootContent>[]>([])\n const isTypewriterProcessing = ref(false)\n const isTypewriterPaused = ref(false)\n const typewriterEffect = ref<AnimationEffect>(typewriterConfig?.effect ?? 'none')\n const typewriterCursor = ref(typewriterConfig?.cursor ?? '|')\n\n // 创建 transformer(如果有 typewriter 配置)\n let transformer: BlockTransformer<RootContent> | null = null\n\n if (typewriterConfig) {\n const twOptions = typewriterConfig\n transformer = createBlockTransformer<RootContent>({\n charsPerTick: twOptions.charsPerTick ?? [1, 3],\n tickInterval: twOptions.tickInterval ?? 30,\n effect: twOptions.effect ?? 'none',\n pauseOnHidden: twOptions.pauseOnHidden ?? true,\n plugins: twOptions.plugins ?? defaultPlugins,\n onChange: (blocks) => {\n displayBlocksRef.value = blocks as DisplayBlock<RootContent>[]\n isTypewriterProcessing.value = transformer?.isProcessing() ?? false\n isTypewriterPaused.value = transformer?.isPausedState() ?? false\n }\n })\n }\n\n // 将 completedBlocks 转换为 SourceBlock 格式\n const sourceBlocks = computed(() => {\n return completedBlocks.value.map(block => ({\n id: block.id,\n node: block.node,\n status: block.status as 'pending' | 'stable' | 'completed'\n }))\n })\n\n // 监听 sourceBlocks 变化,推送给 transformer\n if (transformer) {\n watch(\n sourceBlocks,\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\n // 原始 blocks(不经过打字机)\n const rawBlocks = 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 // 最终用于渲染的 blocks\n const blocks = computed(() => {\n // 未启用打字机或没有 transformer:返回原始 blocks\n if (!typewriterEnabled.value || !transformer) {\n return rawBlocks.value\n }\n\n // 启用打字机:使用 displayBlocks\n return displayBlocksRef.value.map((db, index) => {\n const isPending = !db.isDisplayComplete\n const isLastPending = isPending && index === displayBlocksRef.value.length - 1\n\n // typing 效果时添加光标\n let node = db.displayNode\n if (typewriterEffect.value === 'typing' && isLastPending) {\n node = addCursorToNode(db.displayNode, typewriterCursor.value)\n }\n\n return {\n id: db.id,\n stableId: db.id,\n status: (db.isDisplayComplete ? 'completed' : 'pending') as 'pending' | 'stable' | 'completed',\n isLastPending,\n node,\n startOffset: 0,\n endOffset: 0,\n rawText: ''\n }\n })\n })\n\n // 打字机控制对象\n const typewriterControls: TypewriterControls = {\n enabled: computed(() => typewriterEnabled.value),\n setEnabled: (value: boolean) => {\n typewriterEnabled.value = value\n },\n isProcessing: computed(() => isTypewriterProcessing.value),\n isPaused: computed(() => isTypewriterPaused.value),\n effect: computed(() => typewriterEffect.value),\n skip: () => transformer?.skip(),\n pause: () => {\n transformer?.pause()\n isTypewriterPaused.value = true\n },\n resume: () => {\n transformer?.resume()\n isTypewriterPaused.value = false\n },\n setOptions: (opts) => {\n if (opts.enabled !== undefined) {\n typewriterEnabled.value = opts.enabled\n }\n if (opts.charsPerTick !== undefined || opts.tickInterval !== undefined || opts.effect !== undefined || opts.pauseOnHidden !== undefined) {\n transformer?.setOptions({\n charsPerTick: opts.charsPerTick,\n tickInterval: opts.tickInterval,\n effect: opts.effect,\n pauseOnHidden: opts.pauseOnHidden\n })\n }\n if (opts.effect !== undefined) {\n typewriterEffect.value = opts.effect\n }\n if (opts.cursor !== undefined) {\n typewriterCursor.value = opts.cursor\n }\n }\n }\n\n // 清理\n onUnmounted(() => {\n transformer?.destroy()\n })\n\n return {\n blocks,\n typewriter: typewriterControls,\n transformer\n }\n}\n","/**\n * @file Cursor Utils - 光标工具函数\n *\n * @description\n * 用于在 AST 节点末尾添加光标的工具函数。\n *\n * @author Incremark Team\n * @license MIT\n */\n\nimport type { RootContent } from '@incremark/core'\n\n/**\n * 在节点末尾添加光标\n *\n * @param node - 要添加光标的节点\n * @param cursor - 光标字符\n * @returns 添加了光标的新节点\n */\nexport function addCursorToNode(node: RootContent, cursor: string): RootContent {\n const cloned = JSON.parse(JSON.stringify(node))\n\n function addToLast(n: { children?: unknown[]; type?: string; value?: string }): boolean {\n if (n.children && n.children.length > 0) {\n for (let i = n.children.length - 1; i >= 0; i--) {\n if (addToLast(n.children[i] as { children?: unknown[]; type?: string; value?: string })) {\n return true\n }\n }\n n.children.push({ type: 'text', value: cursor })\n return true\n }\n if (n.type === 'text' && typeof n.value === 'string') {\n n.value += cursor\n return true\n }\n if (typeof n.value === 'string') {\n n.value += cursor\n return true\n }\n return false\n }\n\n addToLast(cloned)\n return cloned\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","import { inject } from 'vue'\nimport { definationsInjectionKey } from './useProvideDefinations'\n\n/**\n * support definations and footnoteDefinitions\n * @returns \n */\nexport function useDefinationsContext() {\n const definationContext = inject(definationsInjectionKey);\n\n if (!definationContext) {\n throw new Error('definationContext not found');\n }\n\n return definationContext;\n}","<script setup lang=\"ts\">\nimport { computed, type Component } from 'vue'\nimport type { ParsedBlock, RootContent } from '@incremark/core'\nimport type { HTML } from 'mdast'\nimport { useDefinationsContext } from '../composables/useDefinationsContext'\nimport type { UseIncremarkReturn } from '../composables/useIncremark'\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 IncremarkHtmlElement from './IncremarkHtmlElement.vue'\nimport IncremarkDefault from './IncremarkDefault.vue'\nimport IncremarkFootnotes from './IncremarkFootnotes.vue'\n\n// 组件映射类型\nexport type ComponentMap = Partial<Record<string, Component>>\n\n/**\n * 检查是否是 html 节点\n */\nfunction isHtmlNode(node: RootContent): node is HTML {\n return node.type === 'html'\n}\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 /** 可选:useIncremark 返回的对象(用于自动注入数据) */\n incremark?: UseIncremarkReturn\n }>(),\n {\n blocks: () => [],\n components: () => ({}),\n pendingClass: 'incremark-pending',\n completedClass: 'incremark-completed',\n showBlockStatus: false\n }\n)\n\n// 从 context 获取 footnoteReferenceOrder(如果有的话)\nlet footnoteReferenceOrder\ntry {\n const context = useDefinationsContext()\n footnoteReferenceOrder = context.footnoteReferenceOrder\n} catch {\n // 如果没有 context,使用空数组\n footnoteReferenceOrder = computed(() => [])\n}\n\n// 计算实际使用的 blocks 和 isFinalized\nconst actualBlocks = computed<BlockWithStableId[]>(() => props.incremark?.blocks.value || props.blocks || [])\nconst actualIsFinalized = computed(() => {\n if (props.incremark) {\n return props.incremark.isFinalized.value\n }\n // 如果手动传入 blocks,自动判断是否所有 block 都是 completed\n const blocks = props.blocks || []\n return blocks.length > 0 && blocks.every(b => b.status === 'completed')\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 htmlElement: IncremarkHtmlElement\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 <!-- 主要内容块 -->\n <template v-for=\"block in actualBlocks\">\n <div\n v-if=\"block.node.type !== 'definition' && block.node.type !== 'footnoteDefinition'\"\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 <!-- HTML 节点:渲染为代码块显示源代码 -->\n <pre v-if=\"isHtmlNode(block.node)\" class=\"incremark-html-code\"><code>{{ (block.node as HTML).value }}</code></pre>\n <!-- 其他节点:使用对应组件 -->\n <component v-else :is=\"getComponent(block.node.type)\" :node=\"block.node\" />\n </div>\n </template>\n\n <!-- 脚注列表(仅在 finalize 后显示) -->\n <IncremarkFootnotes\n v-if=\"actualIsFinalized && (footnoteReferenceOrder as any).value?.length > 0\"\n />\n </div>\n</template>\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 h${node.depth}`\">\n <IncremarkInline :nodes=\"node.children\" />\n </component>\n</template>\n","<script setup lang=\"ts\">\nimport type { PhrasingContent, RootContent, ImageReference, LinkReference } from 'mdast'\nimport type { TextChunk } from '@incremark/core'\nimport {\n type TextNodeWithChunks,\n hasChunks,\n getStableText,\n isHtmlNode\n} from '@incremark/shared'\nimport IncremarkMath from './IncremarkMath.vue'\nimport IncremarkHtmlElement from './IncremarkHtmlElement.vue'\nimport { useDefinationsContext } from '../composables/useDefinationsContext'\n\n// Math 节点类型\ninterface MathNode {\n type: 'math' | 'inlineMath'\n value: string\n}\n\n// HtmlElement 节点类型\ninterface HtmlElementNode {\n type: 'htmlElement'\n tagName: string\n attrs: Record<string, string>\n children: RootContent[]\n}\n\n/**\n * 类型守卫:检查是否是 htmlElement 节点\n */\nfunction isHtmlElementNode(node: PhrasingContent): node is PhrasingContent & HtmlElementNode {\n return (node as unknown as HtmlElementNode).type === 'htmlElement'\n}\n\n/**\n * 类型守卫:检查是否是 imageReference 节点\n */\nfunction isImageReference(node: PhrasingContent): node is ImageReference {\n return node.type === 'imageReference'\n}\n\n/**\n * 类型守卫:检查是否是 linkReference 节点\n */\nfunction isLinkReference(node: PhrasingContent): node is LinkReference {\n return node.type === 'linkReference'\n}\n\nconst props = defineProps<{\n nodes: PhrasingContent[]\n}>()\n\nconst {\n definations,\n footnoteDefinitions\n} = useDefinationsContext()\n\n/**\n * 获取节点的 chunks(类型安全)\n */\nfunction getChunks(node: PhrasingContent): TextChunk[] | undefined {\n if (hasChunks(node)) {\n return (node as TextNodeWithChunks).chunks\n }\n return undefined\n}\n\n/**\n * 类型守卫:检查是否是 inlineMath 节点\n * inlineMath 是 mdast-util-math 扩展的类型,不在标准 PhrasingContent 中\n */\nfunction isInlineMath(node: PhrasingContent): node is PhrasingContent & MathNode {\n return (node as unknown as MathNode).type === 'inlineMath'\n}\n\n</script>\n\n<template>\n <template v-for=\"(node, idx) in nodes\" :key=\"idx\">\n <!-- 文本(支持 chunks 渐入动画) -->\n <template v-if=\"node.type === 'text'\">\n <!-- 稳定文本(已经显示过的部分,无动画) -->\n {{ getStableText(node as TextNodeWithChunks) }}\n <!-- 新增的 chunk 部分(带渐入动画) -->\n <span \n v-for=\"chunk in getChunks(node)\" \n :key=\"chunk.createdAt\"\n class=\"incremark-fade-in\"\n >{{ chunk.text }}</span>\n </template>\n\n <!-- 行内公式 -->\n <IncremarkMath v-else-if=\"isInlineMath(node)\" :node=\"(node as unknown as MathNode)\" />\n\n <!-- htmlElement 节点(结构化的 HTML 元素) -->\n <IncremarkHtmlElement \n v-else-if=\"isHtmlElementNode(node)\" \n :node=\"(node as unknown as HtmlElementNode)\" \n />\n\n <!-- HTML 节点(原始 HTML,如未启用 htmlTree 选项) -->\n <span v-else-if=\"isHtmlNode(node)\" style=\"display: contents;\" v-html=\"(node as any).value\"></span>\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 as any).value }}</code>\n\n <!-- 链接 -->\n <a\n v-else-if=\"node.type === 'link'\"\n class=\"incremark-link\"\n :href=\"node.url\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <IncremarkInline :nodes=\"(node.children as PhrasingContent[])\" />\n </a>\n\n <!-- 图片 -->\n <img\n v-else-if=\"node.type === 'image'\"\n class=\"incremark-image\"\n :src=\"node.url\"\n :alt=\"node.alt || ''\"\n :title=\"(node as any).title || undefined\"\n loading=\"lazy\"\n />\n\n <!-- 引用式图片(imageReference) -->\n <template v-else-if=\"isImageReference(node)\">\n <img\n v-if=\"definations[node.identifier]\"\n class=\"incremark-image incremark-reference-image\"\n :src=\"definations[node.identifier].url\"\n :alt=\"(node as ImageReference).alt || ''\"\n :title=\"definations[node.identifier].title || undefined\"\n loading=\"lazy\"\n />\n <!-- 如果没有找到定义,渲染为原始文本(降级处理) -->\n <span v-else class=\"incremark-image-ref-missing\">\n ![{{ (node as ImageReference).alt }}][{{ (node as ImageReference).identifier || (node as ImageReference).label }}]\n </span>\n </template>\n\n <!-- 引用式链接(linkReference) -->\n <template v-else-if=\"isLinkReference(node)\">\n <a\n v-if=\"definations[node.identifier]\"\n class=\"incremark-link incremark-reference-link\"\n :href=\"definations[node.identifier].url\"\n :title=\"definations[node.identifier].title || undefined\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <IncremarkInline :nodes=\"((node as LinkReference).children as PhrasingContent[])\" />\n </a>\n <!-- 如果没有找到定义,渲染为原始文本(降级处理) -->\n <span v-else class=\"incremark-link-ref-missing\">\n [{{ ((node as LinkReference).children as any[]).map((c: any) => c.value).join('') }}][{{ (node as LinkReference).identifier || (node as LinkReference).label }}]\n </span>\n </template>\n\n <!-- 脚注引用(footnoteReference) -->\n <sup v-else-if=\"node.type === 'footnoteReference'\" class=\"incremark-footnote-ref\">\n <a :href=\"`#fn-${(node as any).identifier}`\" :id=\"`fnref-${(node as any).identifier}`\">\n [{{ (node as any).identifier }}]\n </a>\n </sup>\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","<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","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 { render } from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkMath.vue?type=template\"; script.render = render;script.__file = \"src/components/IncremarkMath.vue\";export default script;","<script setup lang=\"ts\">\nimport type { RootContent, PhrasingContent } from 'mdast'\nimport IncremarkInline from './IncremarkInline.vue'\n\n/**\n * HtmlElementNode 类型定义(与 @incremark/core 中的定义一致)\n */\ninterface HtmlElementNode {\n type: 'htmlElement'\n tagName: string\n attrs: Record<string, string>\n children: RootContent[]\n data?: {\n rawHtml?: string\n parsed?: boolean\n originalType?: string\n }\n}\n\ndefineProps<{\n node: HtmlElementNode\n}>()\n\n/**\n * 判断是否是行内元素\n */\nfunction isInlineElement(tagName: string): boolean {\n const inlineElements = [\n 'a', 'abbr', 'acronym', 'b', 'bdo', 'big', 'br', 'button', 'cite', \n 'code', 'dfn', 'em', 'i', 'img', 'input', 'kbd', 'label', 'map', \n 'object', 'output', 'q', 'samp', 'script', 'select', 'small', \n 'span', 'strong', 'sub', 'sup', 'textarea', 'time', 'tt', 'var'\n ]\n return inlineElements.includes(tagName.toLowerCase())\n}\n\n/**\n * 判断是否是自闭合元素\n */\nfunction isVoidElement(tagName: string): boolean {\n const voidElements = [\n 'area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input', \n 'link', 'meta', 'param', 'source', 'track', 'wbr'\n ]\n return voidElements.includes(tagName.toLowerCase())\n}\n\n/**\n * 判断子节点是否都是行内内容\n */\nfunction hasOnlyInlineChildren(children: RootContent[]): boolean {\n if (!children || children.length === 0) return true\n \n return children.every(child => {\n const type = child.type\n // 常见的行内类型\n const inlineTypes = ['text', 'strong', 'emphasis', 'inlineCode', 'link', 'image', 'break', 'html', 'htmlElement']\n if (inlineTypes.includes(type)) {\n // 如果是 htmlElement,检查是否是行内元素\n if (type === 'htmlElement') {\n return isInlineElement((child as unknown as HtmlElementNode).tagName)\n }\n return true\n }\n return false\n })\n}\n\n/**\n * 将属性对象转换为 HTML 属性字符串(用于 v-bind)\n */\nfunction getAttrs(attrs: Record<string, string>): Record<string, string> {\n // 过滤掉可能有问题的属性\n const result: Record<string, string> = {}\n for (const [key, value] of Object.entries(attrs)) {\n // 跳过事件属性(已在解析时过滤,这里双重保险)\n if (key.startsWith('on')) continue\n result[key] = value\n }\n return result\n}\n</script>\n\n<template>\n <component \n :is=\"node.tagName\" \n v-bind=\"getAttrs(node.attrs)\"\n :class=\"['incremark-html-element', `incremark-${node.tagName}`]\"\n >\n <!-- 自闭合元素没有子节点 -->\n <template v-if=\"!isVoidElement(node.tagName)\">\n <!-- 如果子节点都是行内内容,使用 IncremarkInline -->\n <template v-if=\"hasOnlyInlineChildren(node.children)\">\n <IncremarkInline :nodes=\"(node.children as PhrasingContent[])\" />\n </template>\n \n <!-- 否则递归渲染每个子节点 -->\n <template v-else>\n <template v-for=\"(child, idx) in node.children\" :key=\"idx\">\n <!-- 如果子节点是 htmlElement,递归 -->\n <IncremarkHtmlElement \n v-if=\"child.type === 'htmlElement'\" \n :node=\"(child as unknown as HtmlElementNode)\" \n />\n <!-- 如果是文本节点 -->\n <template v-else-if=\"child.type === 'text'\">\n {{ (child as any).value }}\n </template>\n <!-- 其他类型尝试用 IncremarkInline -->\n <IncremarkInline \n v-else-if=\"['strong', 'emphasis', 'inlineCode', 'link', 'image', 'break'].includes(child.type)\"\n :nodes=\"[child as PhrasingContent]\" \n />\n <!-- 段落等块级元素 -->\n <template v-else-if=\"child.type === 'paragraph'\">\n <p><IncremarkInline :nodes=\"((child as any).children as PhrasingContent[])\" /></p>\n </template>\n <!-- 其他未知类型,显示原始 -->\n <template v-else>\n <div class=\"incremark-unknown-child\">{{ child.type }}</div>\n </template>\n </template>\n </template>\n </template>\n </component>\n</template>\n\n<style scoped>\n.incremark-html-element {\n /* 保持原有样式 */\n}\n\n.incremark-unknown-child {\n color: #999;\n font-style: italic;\n}\n</style>\n\n","import { createCommentVNode as _createCommentVNode, openBlock as _openBlock, createBlock as _createBlock, renderList as _renderList, Fragment as _Fragment, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createVNode as _createVNode, createElementVNode as _createElementVNode, resolveDynamicComponent as _resolveDynamicComponent, mergeProps as _mergeProps, withCtx as _withCtx } from \"vue\"\n\nconst _hoisted_1 = { class: \"incremark-unknown-child\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_IncremarkHtmlElement = _resolveComponent(\"IncremarkHtmlElement\", true)\n\n return (_openBlock(), _createBlock(_resolveDynamicComponent($props.node.tagName), _mergeProps($setup.getAttrs($props.node.attrs), {\n class: ['incremark-html-element', `incremark-${$props.node.tagName}`]\n }), {\n default: _withCtx(() => [\n _createCommentVNode(\" 自闭合元素没有子节点 \"),\n (!$setup.isVoidElement($props.node.tagName))\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n _createCommentVNode(\" 如果子节点都是行内内容,使用 IncremarkInline \"),\n ($setup.hasOnlyInlineChildren($props.node.children))\n ? (_openBlock(), _createBlock($setup[\"IncremarkInline\"], {\n key: 0,\n nodes: ($props.node.children as PhrasingContent[])\n }, null, 8 /* PROPS */, [\"nodes\"]))\n : (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n _createCommentVNode(\" 否则递归渲染每个子节点 \"),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($props.node.children, (child, idx) => {\n return (_openBlock(), _createElementBlock(_Fragment, { key: idx }, [\n _createCommentVNode(\" 如果子节点是 htmlElement,递归 \"),\n (child.type === 'htmlElement')\n ? (_openBlock(), _createBlock(_component_IncremarkHtmlElement, {\n key: 0,\n node: (child as unknown as HtmlElementNode)\n }, null, 8 /* PROPS */, [\"node\"]))\n : (child.type === 'text')\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n _createCommentVNode(\" 如果是文本节点 \"),\n _createTextVNode(_toDisplayString((child as any).value), 1 /* TEXT */)\n ], 64 /* STABLE_FRAGMENT */))\n : (['strong', 'emphasis', 'inlineCode', 'link', 'image', 'break'].includes(child.type))\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 2 }, [\n _createCommentVNode(\" 其他类型尝试用 IncremarkInline \"),\n _createVNode($setup[\"IncremarkInline\"], {\n nodes: [child as PhrasingContent]\n }, null, 8 /* PROPS */, [\"nodes\"])\n ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n : (child.type === 'paragraph')\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 3 }, [\n _createCommentVNode(\" 段落等块级元素 \"),\n _createElementVNode(\"p\", null, [\n _createVNode($setup[\"IncremarkInline\"], {\n nodes: ((child as any).children as PhrasingContent[])\n }, null, 8 /* PROPS */, [\"nodes\"])\n ])\n ], 64 /* STABLE_FRAGMENT */))\n : (_openBlock(), _createElementBlock(_Fragment, { key: 4 }, [\n _createCommentVNode(\" 其他未知类型,显示原始 \"),\n _createElementVNode(\"div\", _hoisted_1, _toDisplayString(child.type), 1 /* TEXT */)\n ], 64 /* STABLE_FRAGMENT */))\n ], 64 /* STABLE_FRAGMENT */))\n }), 128 /* KEYED_FRAGMENT */))\n ], 64 /* STABLE_FRAGMENT */))\n ], 64 /* STABLE_FRAGMENT */))\n : _createCommentVNode(\"v-if\", true)\n ]),\n _: 1 /* STABLE */\n }, 16 /* FULL_PROPS */, [\"class\"]))\n}","import script from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkHtmlElement.vue?type=script\";import \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkHtmlElement.vue?type=style&index=0\";import { render } from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkHtmlElement.vue?type=template\"; script.render = render;script.__file = \"src/components/IncremarkHtmlElement.vue\";script.__scopeId = \"data-v-b3af0c5a\";export default script;","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, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent } from \"vue\"\n\nconst _hoisted_1 = [\"innerHTML\"]\nconst _hoisted_2 = { class: \"incremark-inline-code\" }\nconst _hoisted_3 = [\"href\"]\nconst _hoisted_4 = [\"src\", \"alt\", \"title\"]\nconst _hoisted_5 = [\"src\", \"alt\", \"title\"]\nconst _hoisted_6 = { class: \"incremark-image-ref-missing\" }\nconst _hoisted_7 = [\"href\", \"title\"]\nconst _hoisted_8 = { class: \"incremark-link-ref-missing\" }\nconst _hoisted_9 = { class: \"incremark-footnote-ref\" }\nconst _hoisted_10 = [\"href\", \"id\"]\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(\" 文本(支持 chunks 渐入动画) \"),\n (node.type === 'text')\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n _createCommentVNode(\" 稳定文本(已经显示过的部分,无动画) \"),\n _createTextVNode(\" \" + _toDisplayString($setup.getStableText(node as TextNodeWithChunks)) + \" \", 1 /* TEXT */),\n _createCommentVNode(\" 新增的 chunk 部分(带渐入动画) \"),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.getChunks(node), (chunk) => {\n return (_openBlock(), _createElementBlock(\"span\", {\n key: chunk.createdAt,\n class: \"incremark-fade-in\"\n }, _toDisplayString(chunk.text), 1 /* TEXT */))\n }), 128 /* KEYED_FRAGMENT */))\n ], 64 /* STABLE_FRAGMENT */))\n : ($setup.isInlineMath(node))\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n _createCommentVNode(\" 行内公式 \"),\n _createVNode($setup[\"IncremarkMath\"], {\n node: (node as unknown as MathNode)\n }, null, 8 /* PROPS */, [\"node\"])\n ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n : ($setup.isHtmlElementNode(node))\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 2 }, [\n _createCommentVNode(\" htmlElement 节点(结构化的 HTML 元素) \"),\n _createVNode($setup[\"IncremarkHtmlElement\"], {\n node: (node as unknown as HtmlElementNode)\n }, null, 8 /* PROPS */, [\"node\"])\n ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n : ($setup.isHtmlNode(node))\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 3 }, [\n _createCommentVNode(\" HTML 节点(原始 HTML,如未启用 htmlTree 选项) \"),\n _createElementVNode(\"span\", {\n style: {\"display\":\"contents\"},\n innerHTML: (node as any).value\n }, null, 8 /* PROPS */, _hoisted_1)\n ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n : (node.type === 'strong')\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 4 }, [\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: 5 }, [\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: 6 }, [\n _createCommentVNode(\" 行内代码 \"),\n _createElementVNode(\"code\", _hoisted_2, _toDisplayString((node as any).value), 1 /* TEXT */)\n ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n : (node.type === 'link')\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 7 }, [\n _createCommentVNode(\" 链接 \"),\n _createElementVNode(\"a\", {\n class: \"incremark-link\",\n href: node.url,\n target: \"_blank\",\n rel: \"noopener noreferrer\"\n }, [\n _createVNode(_component_IncremarkInline, {\n nodes: (node.children as PhrasingContent[])\n }, null, 8 /* PROPS */, [\"nodes\"])\n ], 8 /* PROPS */, _hoisted_3)\n ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n : (node.type === 'image')\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 8 }, [\n _createCommentVNode(\" 图片 \"),\n _createElementVNode(\"img\", {\n class: \"incremark-image\",\n src: node.url,\n alt: node.alt || '',\n title: (node as any).title || undefined,\n loading: \"lazy\"\n }, null, 8 /* PROPS */, _hoisted_4)\n ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n : ($setup.isImageReference(node))\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 9 }, [\n _createCommentVNode(\" 引用式图片(imageReference) \"),\n ($setup.definations[node.identifier])\n ? (_openBlock(), _createElementBlock(\"img\", {\n key: 0,\n class: \"incremark-image incremark-reference-image\",\n src: $setup.definations[node.identifier].url,\n alt: (node as ImageReference).alt || '',\n title: $setup.definations[node.identifier].title || undefined,\n loading: \"lazy\"\n }, null, 8 /* PROPS */, _hoisted_5))\n : (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n _createCommentVNode(\" 如果没有找到定义,渲染为原始文本(降级处理) \"),\n _createElementVNode(\"span\", _hoisted_6, \" ![\" + _toDisplayString((node as ImageReference).alt) + \"][\" + _toDisplayString((node as ImageReference).identifier || (node as ImageReference).label) + \"] \", 1 /* TEXT */)\n ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n ], 64 /* STABLE_FRAGMENT */))\n : ($setup.isLinkReference(node))\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 10 }, [\n _createCommentVNode(\" 引用式链接(linkReference) \"),\n ($setup.definations[node.identifier])\n ? (_openBlock(), _createElementBlock(\"a\", {\n key: 0,\n class: \"incremark-link incremark-reference-link\",\n href: $setup.definations[node.identifier].url,\n title: $setup.definations[node.identifier].title || undefined,\n target: \"_blank\",\n rel: \"noopener noreferrer\"\n }, [\n _createVNode(_component_IncremarkInline, {\n nodes: ((node as LinkReference).children as PhrasingContent[])\n }, null, 8 /* PROPS */, [\"nodes\"])\n ], 8 /* PROPS */, _hoisted_7))\n : (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n _createCommentVNode(\" 如果没有找到定义,渲染为原始文本(降级处理) \"),\n _createElementVNode(\"span\", _hoisted_8, \" [\" + _toDisplayString(((node as LinkReference).children as any[]).map((c) => c.value).join('')) + \"][\" + _toDisplayString((node as LinkReference).identifier || (node as LinkReference).label) + \"] \", 1 /* TEXT */)\n ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n ], 64 /* STABLE_FRAGMENT */))\n : (node.type === 'footnoteReference')\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 11 }, [\n _createCommentVNode(\" 脚注引用(footnoteReference) \"),\n _createElementVNode(\"sup\", _hoisted_9, [\n _createElementVNode(\"a\", {\n href: `#fn-${(node as any).identifier}`,\n id: `fnref-${(node as any).identifier}`\n }, \" [\" + _toDisplayString((node as any).identifier) + \"] \", 9 /* TEXT, PROPS */, _hoisted_10)\n ])\n ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n : (node.type === 'break')\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 12 }, [\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: 13 }, [\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 { 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, normalizeClass as _normalizeClass, 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), {\n class: _normalizeClass(`incremark-heading h${$props.node.depth}`)\n }, {\n default: _withCtx(() => [\n _createVNode($setup[\"IncremarkInline\"], {\n nodes: $props.node.children\n }, null, 8 /* PROPS */, [\"nodes\"])\n ]),\n _: 1 /* STABLE */\n }, 8 /* PROPS */, [\"class\"]))\n}","import script from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkHeading.vue?type=script\";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\";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 { render } from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkParagraph.vue?type=template\"; script.render = render;script.__file = \"src/components/IncremarkParagraph.vue\";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=\"code-btn\" \n @click=\"toggleMermaidView\" \n type=\"button\"\n :disabled=\"!mermaidSvg\"\n >\n {{ mermaidViewMode === 'preview' ? '源码' : '预览' }}\n </button>\n <button class=\"code-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=\"code-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","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: \"code-btn\",\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: \"code-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: \"code-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 { render } from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkCode.vue?type=template\"; script.render = render;script.__file = \"src/components/IncremarkCode.vue\";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","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 { render } from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkList.vue?type=template\"; script.render = render;script.__file = \"src/components/IncremarkList.vue\";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","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 { render } from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkTable.vue?type=template\"; script.render = render;script.__file = \"src/components/IncremarkTable.vue\";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 { render } from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkBlockquote.vue?type=template\"; script.render = render;script.__file = \"src/components/IncremarkBlockquote.vue\";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 { render } from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkThematicBreak.vue?type=template\"; script.render = render;script.__file = \"src/components/IncremarkThematicBreak.vue\";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 { render } from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkDefault.vue?type=template\"; script.render = render;script.__file = \"src/components/IncremarkDefault.vue\";export default script;","<!--\n/**\n * 脚注列表组件\n *\n * 在文档底部渲染所有脚注定义,按引用出现的顺序排列\n *\n * @component IncremarkFootnotes\n *\n * @remarks\n * 样式定义在 @incremark/theme 中的 footnotes.less\n * footnoteReferenceOrder 自动从 context 获取,无需手动传递\n */\n-->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport type { FootnoteDefinition, RootContent } from 'mdast'\nimport { useDefinationsContext } from '../composables/useDefinationsContext'\nimport IncremarkRenderer from './IncremarkRenderer.vue'\n\nconst { definations, footnoteDefinitions, footnoteReferenceOrder } = useDefinationsContext()\n\n/**\n * 按引用顺序排列的脚注列表\n * 只显示已有定义的脚注\n */\nconst orderedFootnotes = computed<Array<{ identifier: string; definition: FootnoteDefinition }>>(() => {\n return footnoteReferenceOrder.value\n .map(identifier => ({\n identifier,\n definition: footnoteDefinitions.value[identifier]\n }))\n .filter(item => item.definition !== undefined)\n})\n\n/**\n * 是否有脚注需要显示\n */\nconst hasFootnotes = computed(() => orderedFootnotes.value.length > 0)\n</script>\n\n<template>\n <section v-if=\"hasFootnotes\" class=\"incremark-footnotes\">\n <hr class=\"incremark-footnotes-divider\" />\n <ol class=\"incremark-footnotes-list\">\n <li\n v-for=\"(item, index) in orderedFootnotes\"\n :key=\"item.identifier\"\n :id=\"`fn-${item.identifier}`\"\n class=\"incremark-footnote-item\"\n >\n <div class=\"incremark-footnote-content\">\n <!-- 脚注序号 -->\n <span class=\"incremark-footnote-number\">{{ index + 1 }}.</span>\n \n <!-- 脚注内容 -->\n <div class=\"incremark-footnote-body\">\n <IncremarkRenderer\n v-for=\"(child, childIndex) in item.definition.children\"\n :key=\"childIndex\"\n :node=\"(child as RootContent)\"\n />\n </div>\n </div>\n \n <!-- 返回链接 -->\n <a \n :href=\"`#fnref-${item.identifier}`\" \n class=\"incremark-footnote-backref\"\n aria-label=\"返回引用位置\"\n >\n ↩\n </a>\n </li>\n </ol>\n </section>\n</template>\n\n\n","<script setup lang=\"ts\">\nimport type { RootContent, HTML } 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 IncremarkHtmlElement from './IncremarkHtmlElement.vue'\nimport IncremarkDefault from './IncremarkDefault.vue'\n\nconst props = defineProps<{\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 htmlElement: IncremarkHtmlElement,\n}\n\nfunction getComponent(type: string): Component {\n return componentMap[type] || IncremarkDefault\n}\n\n/**\n * 检查是否是 html 节点\n */\nfunction isHtmlNode(node: RootContent): node is HTML {\n return node.type === 'html'\n}\n</script>\n\n<template>\n <!-- HTML 节点:渲染为代码块显示源代码 -->\n <pre v-if=\"isHtmlNode(node)\" class=\"incremark-html-code\"><code>{{ (node as HTML).value }}</code></pre>\n <!-- 其他节点:使用对应组件 -->\n <component v-else :is=\"getComponent(node.type)\" :node=\"node\" />\n</template>\n\n","import { createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveDynamicComponent as _resolveDynamicComponent, createBlock as _createBlock, Fragment as _Fragment } from \"vue\"\n\nconst _hoisted_1 = {\n key: 0,\n class: \"incremark-html-code\"\n}\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n _createCommentVNode(\" HTML 节点:渲染为代码块显示源代码 \"),\n ($setup.isHtmlNode($props.node))\n ? (_openBlock(), _createElementBlock(\"pre\", _hoisted_1, [\n _createElementVNode(\"code\", null, _toDisplayString(($props.node as HTML).value), 1 /* TEXT */)\n ]))\n : (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n _createCommentVNode(\" 其他节点:使用对应组件 \"),\n (_openBlock(), _createBlock(_resolveDynamicComponent($setup.getComponent($props.node.type)), { node: $props.node }, null, 8 /* PROPS */, [\"node\"]))\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/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;","import { createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = {\n key: 0,\n class: \"incremark-footnotes\"\n}\nconst _hoisted_2 = { class: \"incremark-footnotes-list\" }\nconst _hoisted_3 = [\"id\"]\nconst _hoisted_4 = { class: \"incremark-footnote-content\" }\nconst _hoisted_5 = { class: \"incremark-footnote-number\" }\nconst _hoisted_6 = { class: \"incremark-footnote-body\" }\nconst _hoisted_7 = [\"href\"]\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n return ($setup.hasFootnotes)\n ? (_openBlock(), _createElementBlock(\"section\", _hoisted_1, [\n _cache[0] || (_cache[0] = _createElementVNode(\"hr\", { class: \"incremark-footnotes-divider\" }, null, -1 /* CACHED */)),\n _createElementVNode(\"ol\", _hoisted_2, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.orderedFootnotes, (item, index) => {\n return (_openBlock(), _createElementBlock(\"li\", {\n key: item.identifier,\n id: `fn-${item.identifier}`,\n class: \"incremark-footnote-item\"\n }, [\n _createElementVNode(\"div\", _hoisted_4, [\n _createCommentVNode(\" 脚注序号 \"),\n _createElementVNode(\"span\", _hoisted_5, _toDisplayString(index + 1) + \".\", 1 /* TEXT */),\n _createCommentVNode(\" 脚注内容 \"),\n _createElementVNode(\"div\", _hoisted_6, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(item.definition.children, (child, childIndex) => {\n return (_openBlock(), _createBlock($setup[\"IncremarkRenderer\"], {\n key: childIndex,\n node: (child as RootContent)\n }, null, 8 /* PROPS */, [\"node\"]))\n }), 128 /* KEYED_FRAGMENT */))\n ])\n ]),\n _createCommentVNode(\" 返回链接 \"),\n _createElementVNode(\"a\", {\n href: `#fnref-${item.identifier}`,\n class: \"incremark-footnote-backref\",\n \"aria-label\": \"返回引用位置\"\n }, \" ↩ \", 8 /* PROPS */, _hoisted_7)\n ], 8 /* PROPS */, _hoisted_3))\n }), 128 /* KEYED_FRAGMENT */))\n ])\n ]))\n : _createCommentVNode(\"v-if\", true)\n}","import script from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkFootnotes.vue?type=script\";import { render } from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkFootnotes.vue?type=template\"; script.render = render;script.__file = \"src/components/IncremarkFootnotes.vue\";export default script;","import { createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveDynamicComponent as _resolveDynamicComponent, createBlock as _createBlock, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = { class: \"incremark\" }\nconst _hoisted_2 = {\n key: 0,\n class: \"incremark-html-code\"\n}\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createCommentVNode(\" 主要内容块 \"),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.actualBlocks, (block) => {\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n (block.node.type !== 'definition' && block.node.type !== 'footnoteDefinition')\n ? (_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 _createCommentVNode(\" HTML 节点:渲染为代码块显示源代码 \"),\n ($setup.isHtmlNode(block.node))\n ? (_openBlock(), _createElementBlock(\"pre\", _hoisted_2, [\n _createElementVNode(\"code\", null, _toDisplayString((block.node as HTML).value), 1 /* TEXT */)\n ]))\n : (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n _createCommentVNode(\" 其他节点:使用对应组件 \"),\n (_openBlock(), _createBlock(_resolveDynamicComponent($setup.getComponent(block.node.type)), {\n node: block.node\n }, null, 8 /* PROPS */, [\"node\"]))\n ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n ], 2 /* CLASS */))\n : _createCommentVNode(\"v-if\", true)\n ], 64 /* STABLE_FRAGMENT */))\n }), 256 /* UNKEYED_FRAGMENT */)),\n _createCommentVNode(\" 脚注列表(仅在 finalize 后显示) \"),\n ($setup.actualIsFinalized && ($setup.footnoteReferenceOrder as any).value?.length > 0)\n ? (_openBlock(), _createBlock($setup[\"IncremarkFootnotes\"], { key: 0 }))\n : _createCommentVNode(\"v-if\", true)\n ]))\n}","import script from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/Incremark.vue?type=script\";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\";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;","<script setup lang=\"ts\">\nimport { ref, watch } from 'vue'\nimport type { DesignTokens } from '@incremark/theme'\nimport { applyTheme } from '@incremark/theme'\n\n/**\n * 主题配置,可以是:\n * - 字符串:'default' | 'dark'\n * - 完整主题对象:DesignTokens\n * - 部分主题对象:Partial<DesignTokens>(会合并到默认主题)\n */\nconst props = withDefaults(\n defineProps<{\n theme: 'default' | 'dark' | DesignTokens | Partial<DesignTokens>\n class?: string\n }>(),\n {\n class: ''\n }\n)\n\nconst containerRef = ref<HTMLElement>()\n\nwatch(\n () => props.theme,\n (theme) => {\n if (containerRef.value) {\n // 应用主题到容器元素\n applyTheme(containerRef.value, theme)\n }\n },\n { immediate: true }\n)\n</script>\n\n<template>\n <div ref=\"containerRef\" :class=\"props.class\" class=\"incremark-theme-provider\">\n <slot />\n </div>\n</template>\n\n","import { renderSlot as _renderSlot, normalizeClass as _normalizeClass, 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: _normalizeClass([$setup.props.class, \"incremark-theme-provider\"])\n }, [\n _renderSlot(_ctx.$slots, \"default\")\n ], 2 /* CLASS */))\n}","import script from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/ThemeProvider.vue?type=script\";import { render } from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/ThemeProvider.vue?type=template\"; script.render = render;script.__file = \"src/ThemeProvider.vue\";export default script;","// Composables\nexport { useIncremark, useStreamRenderer, useDevTools, useBlockTransformer } from './composables'\nexport { useProvideDefinations } from './composables/useProvideDefinations'\nexport { useDefinationsContext } from './composables/useDefinationsContext'\nexport type {\n UseIncremarkOptions,\n TypewriterOptions,\n TypewriterControls,\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 IncremarkHtmlElement,\n IncremarkDefault,\n IncremarkFootnotes,\n AutoScrollContainer\n} from './components'\nexport type { ComponentMap, BlockWithStableId } from './components'\nexport { default as ThemeProvider } from './ThemeProvider.vue'\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\n// Re-export theme utilities\nexport {\n type DesignTokens,\n defaultTheme,\n darkTheme,\n generateCSSVars,\n mergeTheme,\n applyTheme\n} from '@incremark/theme'\n"],"mappings":"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","names":["ref","shallowRef","computed","ref","ref","blocks","shallowRef","ref","computed","render","computed","onUnmounted","ref","watch","computed","onUnmounted","createBlockTransformer","computed","computed","computed","ref","watch","shallowRef","onUnmounted","IncremarkMath_default","_createCommentVNode","_openBlock","_Fragment","_createElementBlock","_toDisplayString","_createElementVNode","_hoisted_1","render","render","IncremarkHtmlElement_default","_renderList","_Fragment","_openBlock","_createElementBlock","_createCommentVNode","_toDisplayString","_createTextVNode","_createVNode","_createElementVNode","_resolveComponent","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","render","IncremarkInline_default","render","computed","_createVNode","_resolveDynamicComponent","_withCtx","_openBlock","_createBlock","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_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","render","render","IncremarkCode_default","computed","computed","_renderList","_Fragment","_openBlock","_createElementBlock","_createElementVNode","_createVNode","_createBlock","_normalizeClass","_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","computed","IncremarkHeading_default","IncremarkParagraph_default","IncremarkCode_default","IncremarkList_default","IncremarkTable_default","IncremarkBlockquote_default","IncremarkThematicBreak_default","IncremarkMath_default","IncremarkHtmlElement_default","IncremarkDefault_default","isHtmlNode","_createCommentVNode","_toDisplayString","_createElementVNode","_openBlock","_createElementBlock","_resolveDynamicComponent","_createBlock","_Fragment","_hoisted_1","render","render","IncremarkRenderer_default","computed","_createElementVNode","_renderList","_Fragment","_openBlock","_createElementBlock","_createCommentVNode","_toDisplayString","_createBlock","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","render","render","IncremarkFootnotes_default","isHtmlNode","computed","IncremarkHeading_default","IncremarkParagraph_default","IncremarkCode_default","IncremarkList_default","IncremarkTable_default","IncremarkBlockquote_default","IncremarkThematicBreak_default","IncremarkMath_default","IncremarkHtmlElement_default","IncremarkDefault_default","_createCommentVNode","_renderList","_Fragment","_openBlock","_createElementBlock","_toDisplayString","_createElementVNode","_resolveDynamicComponent","_createBlock","_normalizeClass","_hoisted_1","_hoisted_2","render","render","Incremark_default","ref","onMounted","onUnmounted","_openBlock","_createElementBlock","render","render","AutoScrollContainer_default","ref","watch","_renderSlot","_normalizeClass","_openBlock","_createElementBlock","render","render","ThemeProvider_default","BlockTransformer","createBlockTransformer","defaultPlugins","applyTheme"]}
1
+ {"version":3,"sources":["../src/composables/useIncremark.ts","../src/composables/useProvideDefinations.ts","../src/composables/useTypewriter.ts","../src/utils/cursor.ts","../src/composables/useStreamRenderer.ts","../src/composables/useDevTools.ts","../src/composables/useBlockTransformer.ts","../src/composables/useDefinationsContext.ts","src/components/Incremark.vue","src/components/IncremarkHeading.vue","src/components/IncremarkInline.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/IncremarkHtmlElement.vue","sfc-template:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkHtmlElement.vue?type=template","../src/components/IncremarkHtmlElement.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","src/components/IncremarkFootnotes.vue","src/components/IncremarkRenderer.vue","sfc-template:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkRenderer.vue?type=template","../src/components/IncremarkRenderer.vue","sfc-template:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkFootnotes.vue?type=template","../src/components/IncremarkFootnotes.vue","sfc-template:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/Incremark.vue?type=template","../src/components/Incremark.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/ThemeProvider.vue","sfc-template:/Users/yishuai/develop/ai/markdown/packages/vue/src/ThemeProvider.vue?type=template","../src/ThemeProvider.vue","../src/index.ts"],"sourcesContent":["import { ref, shallowRef, computed, markRaw, type ComputedRef } from 'vue'\nimport {\n createIncremarkParser,\n type ParserOptions,\n type ParsedBlock,\n type IncrementalUpdate,\n type Root,\n type TransformerPlugin,\n type AnimationEffect\n} from '@incremark/core'\nimport { useProvideDefinations } from './useProvideDefinations'\nimport { useTypewriter } from './useTypewriter'\n\n/** 打字机效果配置 */\nexport interface TypewriterOptions {\n /** 是否启用打字机效果(可响应式切换) */\n enabled?: boolean\n /** 每次显示的字符数,可以是固定值或范围 [min, max] */\n charsPerTick?: number | [number, number]\n /** 更新间隔 (ms) */\n tickInterval?: number\n /** 动画效果: 'none' | 'fade-in' | 'typing' */\n effect?: AnimationEffect\n /** 光标字符(仅 typing 效果使用) */\n cursor?: string\n /** 页面不可见时暂停 */\n pauseOnHidden?: boolean\n /** 自定义插件 */\n plugins?: TransformerPlugin[]\n}\n\nexport interface UseIncremarkOptions extends ParserOptions {\n /** 打字机配置,传入即创建 transformer(可通过 enabled 控制是否启用) */\n typewriter?: TypewriterOptions\n}\n\n/** 打字机控制对象 */\nexport interface TypewriterControls {\n /** 是否启用(只读) */\n enabled: ComputedRef<boolean>\n /** 设置是否启用 */\n setEnabled: (enabled: boolean) => void\n /** 是否正在处理中 */\n isProcessing: ComputedRef<boolean>\n /** 是否已暂停 */\n isPaused: ComputedRef<boolean>\n /** 当前动画效果 */\n effect: ComputedRef<AnimationEffect>\n /** 跳过动画,直接显示全部 */\n skip: () => void\n /** 暂停动画 */\n pause: () => void\n /** 恢复动画 */\n resume: () => void\n /** 动态更新配置 */\n setOptions: (options: Partial<TypewriterOptions>) => void\n}\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, Incremark } from '@incremark/vue'\n *\n * // 基础用法\n * const { blocks, append, finalize } = useIncremark()\n *\n * // 启用打字机效果\n * const { blocks, append, finalize, typewriter } = useIncremark({\n * typewriter: {\n * enabled: true, // 可响应式切换\n * charsPerTick: [1, 3],\n * tickInterval: 30,\n * effect: 'typing',\n * cursor: '|'\n * }\n * })\n *\n * // 动态切换打字机效果\n * typewriter.enabled.value = false\n * </script>\n *\n * <template>\n * <Incremark :blocks=\"blocks\" />\n * <button v-if=\"typewriter.isProcessing.value\" @click=\"typewriter.skip\">跳过</button>\n * </template>\n * ```\n */\nexport function useIncremark(options: UseIncremarkOptions = {}) {\n // 内部自动提供 definitions context\n const { setDefinations, setFootnoteDefinitions, setFootnoteReferenceOrder } = useProvideDefinations()\n\n // 解析器\n const parser = createIncremarkParser({\n ...options,\n onChange: (state) => {\n setDefinations(state.definitions)\n setFootnoteDefinitions(state.footnoteDefinitions)\n // 调用用户提供的 onChange\n options.onChange?.(state)\n }\n })\n\n const completedBlocks = shallowRef<ParsedBlock[]>([])\n const pendingBlocks = shallowRef<ParsedBlock[]>([])\n const isLoading = ref(false)\n const markdown = ref('')\n const isFinalized = ref(false)\n const footnoteReferenceOrder = ref<string[]>([])\n\n // 使用 useTypewriter composable 管理打字机效果\n const { blocks, typewriter, transformer } = useTypewriter({\n typewriter: options.typewriter,\n completedBlocks,\n pendingBlocks\n })\n\n // AST\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 function append(chunk: string): IncrementalUpdate {\n isLoading.value = true\n const update = parser.append(chunk)\n\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 = update.pending.map((b) => markRaw(b))\n\n // 更新脚注引用顺序\n footnoteReferenceOrder.value = update.footnoteReferenceOrder\n setFootnoteReferenceOrder(update.footnoteReferenceOrder)\n\n return update\n }\n\n function finalize(): IncrementalUpdate {\n const update = parser.finalize()\n\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 isFinalized.value = true\n\n // 更新脚注引用顺序\n footnoteReferenceOrder.value = update.footnoteReferenceOrder\n setFootnoteReferenceOrder(update.footnoteReferenceOrder)\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 isFinalized.value = false\n footnoteReferenceOrder.value = []\n\n // 重置 transformer\n transformer?.reset()\n }\n\n function render(content: string): IncrementalUpdate {\n const update = parser.render(content)\n\n markdown.value = parser.getBuffer()\n completedBlocks.value = parser.getCompletedBlocks().map(b => markRaw(b))\n pendingBlocks.value = []\n isLoading.value = false\n isFinalized.value = true\n footnoteReferenceOrder.value = update.footnoteReferenceOrder\n setFootnoteReferenceOrder(update.footnoteReferenceOrder)\n\n return update\n }\n\n return {\n /** 已收集的完整 Markdown 字符串 */\n markdown,\n /** 已完成的块列表 */\n completedBlocks,\n /** 待处理的块列表 */\n pendingBlocks,\n /** 当前完整的 AST */\n ast,\n /** 用于渲染的 blocks(根据打字机设置自动处理) */\n blocks,\n /** 是否正在加载 */\n isLoading,\n /** 是否已完成(finalize) */\n isFinalized,\n /** 脚注引用的出现顺序 */\n footnoteReferenceOrder,\n /** 追加内容 */\n append,\n /** 完成解析 */\n finalize,\n /** 强制中断 */\n abort,\n /** 重置解析器和打字机 */\n reset,\n /** 一次性渲染(reset + append + finalize) */\n render,\n /** 解析器实例 */\n parser,\n /** 打字机控制 */\n typewriter\n }\n}\n","import { ref, provide, type InjectionKey, type Ref } from 'vue';\nimport type { Definition, FootnoteDefinition } from 'mdast';\n\nexport const definationsInjectionKey: InjectionKey<{\n definations: Ref<Record<string, Definition>>\n footnoteDefinitions: Ref<Record<string, FootnoteDefinition>>\n footnoteReferenceOrder: Ref<string[]>\n}> = Symbol('provideDefinations');\n\nexport function useProvideDefinations() {\n const definations = ref<Record<string, Definition>>({});\n const footnoteDefinitions = ref<Record<string, FootnoteDefinition>>({});\n const footnoteReferenceOrder = ref<string[]>([]);\n\n provide(definationsInjectionKey, {\n definations,\n footnoteDefinitions,\n footnoteReferenceOrder\n });\n\n function setDefinations(definitions: Record<string, Definition>) {\n definations.value = definitions;\n }\n\n function setFootnoteDefinitions(definitions: Record<string, FootnoteDefinition>) {\n footnoteDefinitions.value = definitions;\n }\n\n function setFootnoteReferenceOrder(order: string[]) {\n footnoteReferenceOrder.value = order;\n }\n\n function clearDefinations() {\n definations.value = {};\n }\n\n function clearFootnoteDefinitions() {\n footnoteDefinitions.value = {};\n }\n\n function clearFootnoteReferenceOrder() {\n footnoteReferenceOrder.value = [];\n }\n\n function clearAllDefinations() {\n clearDefinations();\n clearFootnoteDefinitions();\n clearFootnoteReferenceOrder();\n }\n\n return {\n setDefinations,\n setFootnoteDefinitions,\n setFootnoteReferenceOrder,\n clearDefinations,\n clearFootnoteDefinitions,\n clearFootnoteReferenceOrder,\n clearAllDefinations\n }\n\n}","/**\n * @file useTypewriter Composable - 打字机效果管理\n *\n * @description\n * 管理打字机效果的状态和控制逻辑,从 useIncremark 中拆分出来以简化代码。\n *\n * @author Incremark Team\n * @license MIT\n */\n\nimport { ref, shallowRef, computed, watch, onUnmounted, type Ref, type ComputedRef } from 'vue'\nimport {\n createBlockTransformer,\n defaultPlugins,\n type RootContent,\n type ParsedBlock,\n type DisplayBlock,\n type AnimationEffect,\n type BlockTransformer\n} from '@incremark/core'\nimport type { TypewriterOptions, TypewriterControls } from './useIncremark'\nimport { addCursorToNode } from '../utils/cursor'\n\nexport interface UseTypewriterOptions {\n typewriter?: TypewriterOptions\n completedBlocks: Ref<ParsedBlock[]>\n pendingBlocks: Ref<ParsedBlock[]>\n}\n\nexport interface UseTypewriterReturn {\n /** 用于渲染的 blocks(经过打字机处理或原始blocks) */\n blocks: ComputedRef<Array<ParsedBlock & { stableId: string }>>\n /** 打字机控制对象 */\n typewriter: TypewriterControls\n /** transformer 实例 */\n transformer: BlockTransformer<RootContent> | null\n}\n\n/**\n * useTypewriter Composable\n *\n * @description\n * 管理打字机效果的所有状态和逻辑。\n *\n * @param options - 打字机配置和数据\n * @returns 打字机状态和控制对象\n */\nexport function useTypewriter(options: UseTypewriterOptions): UseTypewriterReturn {\n const { typewriter: typewriterConfig, completedBlocks, pendingBlocks } = options\n\n // 打字机状态\n const typewriterEnabled = ref(typewriterConfig?.enabled ?? !!typewriterConfig)\n const displayBlocksRef = shallowRef<DisplayBlock<RootContent>[]>([])\n const isTypewriterProcessing = ref(false)\n const isTypewriterPaused = ref(false)\n const typewriterEffect = ref<AnimationEffect>(typewriterConfig?.effect ?? 'none')\n const typewriterCursor = ref(typewriterConfig?.cursor ?? '|')\n\n // 创建 transformer(如果有 typewriter 配置)\n let transformer: BlockTransformer<RootContent> | null = null\n\n if (typewriterConfig) {\n const twOptions = typewriterConfig\n transformer = createBlockTransformer<RootContent>({\n charsPerTick: twOptions.charsPerTick ?? [1, 3],\n tickInterval: twOptions.tickInterval ?? 30,\n effect: twOptions.effect ?? 'none',\n pauseOnHidden: twOptions.pauseOnHidden ?? true,\n plugins: twOptions.plugins ?? defaultPlugins,\n onChange: (blocks) => {\n displayBlocksRef.value = blocks as DisplayBlock<RootContent>[]\n isTypewriterProcessing.value = transformer?.isProcessing() ?? false\n isTypewriterPaused.value = transformer?.isPausedState() ?? false\n }\n })\n }\n\n // 将 completedBlocks 转换为 SourceBlock 格式\n const sourceBlocks = computed(() => {\n return completedBlocks.value.map(block => ({\n id: block.id,\n node: block.node,\n status: block.status as 'pending' | 'stable' | 'completed'\n }))\n })\n\n // 监听 sourceBlocks 变化,推送给 transformer\n if (transformer) {\n watch(\n sourceBlocks,\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\n // 原始 blocks(不经过打字机)\n const rawBlocks = 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 // 最终用于渲染的 blocks\n const blocks = computed(() => {\n // 未启用打字机或没有 transformer:返回原始 blocks\n if (!typewriterEnabled.value || !transformer) {\n return rawBlocks.value\n }\n\n // 启用打字机:使用 displayBlocks\n return displayBlocksRef.value.map((db, index) => {\n const isPending = !db.isDisplayComplete\n const isLastPending = isPending && index === displayBlocksRef.value.length - 1\n\n // typing 效果时添加光标\n let node = db.displayNode\n if (typewriterEffect.value === 'typing' && isLastPending) {\n node = addCursorToNode(db.displayNode, typewriterCursor.value)\n }\n\n return {\n id: db.id,\n stableId: db.id,\n status: (db.isDisplayComplete ? 'completed' : 'pending') as 'pending' | 'stable' | 'completed',\n isLastPending,\n node,\n startOffset: 0,\n endOffset: 0,\n rawText: ''\n }\n })\n })\n\n // 打字机控制对象\n const typewriterControls: TypewriterControls = {\n enabled: computed(() => typewriterEnabled.value),\n setEnabled: (value: boolean) => {\n typewriterEnabled.value = value\n },\n isProcessing: computed(() => isTypewriterProcessing.value),\n isPaused: computed(() => isTypewriterPaused.value),\n effect: computed(() => typewriterEffect.value),\n skip: () => transformer?.skip(),\n pause: () => {\n transformer?.pause()\n isTypewriterPaused.value = true\n },\n resume: () => {\n transformer?.resume()\n isTypewriterPaused.value = false\n },\n setOptions: (opts) => {\n if (opts.enabled !== undefined) {\n typewriterEnabled.value = opts.enabled\n }\n if (opts.charsPerTick !== undefined || opts.tickInterval !== undefined || opts.effect !== undefined || opts.pauseOnHidden !== undefined) {\n transformer?.setOptions({\n charsPerTick: opts.charsPerTick,\n tickInterval: opts.tickInterval,\n effect: opts.effect,\n pauseOnHidden: opts.pauseOnHidden\n })\n }\n if (opts.effect !== undefined) {\n typewriterEffect.value = opts.effect\n }\n if (opts.cursor !== undefined) {\n typewriterCursor.value = opts.cursor\n }\n }\n }\n\n // 清理\n onUnmounted(() => {\n transformer?.destroy()\n })\n\n return {\n blocks,\n typewriter: typewriterControls,\n transformer\n }\n}\n","/**\n * @file Cursor Utils - 光标工具函数\n *\n * @description\n * 用于在 AST 节点末尾添加光标的工具函数。\n *\n * @author Incremark Team\n * @license MIT\n */\n\nimport type { RootContent } from '@incremark/core'\n\n/**\n * 在节点末尾添加光标\n *\n * @param node - 要添加光标的节点\n * @param cursor - 光标字符\n * @returns 添加了光标的新节点\n */\nexport function addCursorToNode(node: RootContent, cursor: string): RootContent {\n const cloned = JSON.parse(JSON.stringify(node))\n\n function addToLast(n: { children?: unknown[]; type?: string; value?: string }): boolean {\n if (n.children && n.children.length > 0) {\n for (let i = n.children.length - 1; i >= 0; i--) {\n if (addToLast(n.children[i] as { children?: unknown[]; type?: string; value?: string })) {\n return true\n }\n }\n n.children.push({ type: 'text', value: cursor })\n return true\n }\n if (n.type === 'text' && typeof n.value === 'string') {\n n.value += cursor\n return true\n }\n if (typeof n.value === 'string') {\n n.value += cursor\n return true\n }\n return false\n }\n\n addToLast(cloned)\n return cloned\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","import { inject } from 'vue'\nimport { definationsInjectionKey } from './useProvideDefinations'\n\n/**\n * support definations and footnoteDefinitions\n * @returns \n */\nexport function useDefinationsContext() {\n const definationContext = inject(definationsInjectionKey);\n\n if (!definationContext) {\n throw new Error('definationContext not found');\n }\n\n return definationContext;\n}","<script setup lang=\"ts\">\nimport { computed, type Component } from 'vue'\nimport type { ParsedBlock, RootContent } from '@incremark/core'\nimport type { HTML } from 'mdast'\nimport { useDefinationsContext } from '../composables/useDefinationsContext'\nimport type { UseIncremarkReturn } from '../composables/useIncremark'\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 IncremarkHtmlElement from './IncremarkHtmlElement.vue'\nimport IncremarkDefault from './IncremarkDefault.vue'\nimport IncremarkFootnotes from './IncremarkFootnotes.vue'\n\n// 组件映射类型\nexport type ComponentMap = Partial<Record<string, Component>>\n\n/**\n * 检查是否是 html 节点\n */\nfunction isHtmlNode(node: RootContent): node is HTML {\n return node.type === 'html'\n}\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 /** 可选:useIncremark 返回的对象(用于自动注入数据) */\n incremark?: UseIncremarkReturn\n }>(),\n {\n blocks: () => [],\n components: () => ({}),\n pendingClass: 'incremark-pending',\n completedClass: 'incremark-completed',\n showBlockStatus: false\n }\n)\n\n// 从 context 获取 footnoteReferenceOrder(如果有的话)\nlet footnoteReferenceOrder\ntry {\n const context = useDefinationsContext()\n footnoteReferenceOrder = context.footnoteReferenceOrder\n} catch {\n // 如果没有 context,使用空数组\n footnoteReferenceOrder = computed(() => [])\n}\n\n// 计算实际使用的 blocks 和 isFinalized\nconst actualBlocks = computed<BlockWithStableId[]>(() => props.incremark?.blocks.value || props.blocks || [])\nconst actualIsFinalized = computed(() => {\n if (props.incremark) {\n return props.incremark.isFinalized.value\n }\n // 如果手动传入 blocks,自动判断是否所有 block 都是 completed\n const blocks = props.blocks || []\n return blocks.length > 0 && blocks.every(b => b.status === 'completed')\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 htmlElement: IncremarkHtmlElement\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 <!-- 主要内容块 -->\n <template v-for=\"block in actualBlocks\">\n <div\n v-if=\"block.node.type !== 'definition' && block.node.type !== 'footnoteDefinition'\"\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 <!-- HTML 节点:渲染为代码块显示源代码 -->\n <pre v-if=\"isHtmlNode(block.node)\" class=\"incremark-html-code\"><code>{{ (block.node as HTML).value }}</code></pre>\n <!-- 其他节点:使用对应组件 -->\n <component v-else :is=\"getComponent(block.node.type)\" :node=\"block.node\" />\n </div>\n </template>\n\n <!-- 脚注列表(仅在 finalize 后显示) -->\n <IncremarkFootnotes\n v-if=\"actualIsFinalized && (footnoteReferenceOrder as any).value?.length > 0\"\n />\n </div>\n</template>\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 h${node.depth}`\">\n <IncremarkInline :nodes=\"node.children\" />\n </component>\n</template>\n","<script setup lang=\"ts\">\nimport type { PhrasingContent, RootContent, ImageReference, LinkReference } from 'mdast'\nimport type { TextChunk } from '@incremark/core'\nimport {\n type TextNodeWithChunks,\n hasChunks,\n getStableText,\n isHtmlNode\n} from '@incremark/shared'\nimport IncremarkMath from './IncremarkMath.vue'\nimport IncremarkHtmlElement from './IncremarkHtmlElement.vue'\nimport { useDefinationsContext } from '../composables/useDefinationsContext'\n\n// Math 节点类型\ninterface MathNode {\n type: 'math' | 'inlineMath'\n value: string\n}\n\n// HtmlElement 节点类型\ninterface HtmlElementNode {\n type: 'htmlElement'\n tagName: string\n attrs: Record<string, string>\n children: RootContent[]\n}\n\n/**\n * 类型守卫:检查是否是 htmlElement 节点\n */\nfunction isHtmlElementNode(node: PhrasingContent): node is PhrasingContent & HtmlElementNode {\n return (node as unknown as HtmlElementNode).type === 'htmlElement'\n}\n\n/**\n * 类型守卫:检查是否是 imageReference 节点\n */\nfunction isImageReference(node: PhrasingContent): node is ImageReference {\n return node.type === 'imageReference'\n}\n\n/**\n * 类型守卫:检查是否是 linkReference 节点\n */\nfunction isLinkReference(node: PhrasingContent): node is LinkReference {\n return node.type === 'linkReference'\n}\n\nconst props = defineProps<{\n nodes: PhrasingContent[]\n}>()\n\nconst {\n definations,\n footnoteDefinitions\n} = useDefinationsContext()\n\n/**\n * 获取节点的 chunks(类型安全)\n */\nfunction getChunks(node: PhrasingContent): TextChunk[] | undefined {\n if (hasChunks(node)) {\n return (node as TextNodeWithChunks).chunks\n }\n return undefined\n}\n\n/**\n * 类型守卫:检查是否是 inlineMath 节点\n * inlineMath 是 mdast-util-math 扩展的类型,不在标准 PhrasingContent 中\n */\nfunction isInlineMath(node: PhrasingContent): node is PhrasingContent & MathNode {\n return (node as unknown as MathNode).type === 'inlineMath'\n}\n\n</script>\n\n<template>\n <template v-for=\"(node, idx) in nodes\" :key=\"idx\">\n <!-- 文本(支持 chunks 渐入动画) -->\n <template v-if=\"node.type === 'text'\">\n <!-- 稳定文本(已经显示过的部分,无动画) -->\n {{ getStableText(node as TextNodeWithChunks) }}\n <!-- 新增的 chunk 部分(带渐入动画) -->\n <span \n v-for=\"chunk in getChunks(node)\" \n :key=\"chunk.createdAt\"\n class=\"incremark-fade-in\"\n >{{ chunk.text }}</span>\n </template>\n\n <!-- 行内公式 -->\n <IncremarkMath v-else-if=\"isInlineMath(node)\" :node=\"(node as unknown as MathNode)\" />\n\n <!-- htmlElement 节点(结构化的 HTML 元素) -->\n <IncremarkHtmlElement \n v-else-if=\"isHtmlElementNode(node)\" \n :node=\"(node as unknown as HtmlElementNode)\" \n />\n\n <!-- HTML 节点(原始 HTML,如未启用 htmlTree 选项) -->\n <span v-else-if=\"isHtmlNode(node)\" style=\"display: contents;\" v-html=\"(node as any).value\"></span>\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 as any).value }}</code>\n\n <!-- 链接 -->\n <a\n v-else-if=\"node.type === 'link'\"\n class=\"incremark-link\"\n :href=\"node.url\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <IncremarkInline :nodes=\"(node.children as PhrasingContent[])\" />\n </a>\n\n <!-- 图片 -->\n <img\n v-else-if=\"node.type === 'image'\"\n class=\"incremark-image\"\n :src=\"node.url\"\n :alt=\"node.alt || ''\"\n :title=\"(node as any).title || undefined\"\n loading=\"lazy\"\n />\n\n <!-- 引用式图片(imageReference) -->\n <template v-else-if=\"isImageReference(node)\">\n <img\n v-if=\"definations[node.identifier]\"\n class=\"incremark-image incremark-reference-image\"\n :src=\"definations[node.identifier].url\"\n :alt=\"(node as ImageReference).alt || ''\"\n :title=\"definations[node.identifier].title || undefined\"\n loading=\"lazy\"\n />\n <!-- 如果没有找到定义,渲染为原始文本(降级处理) -->\n <span v-else class=\"incremark-image-ref-missing\">\n ![{{ (node as ImageReference).alt }}][{{ (node as ImageReference).identifier || (node as ImageReference).label }}]\n </span>\n </template>\n\n <!-- 引用式链接(linkReference) -->\n <template v-else-if=\"isLinkReference(node)\">\n <a\n v-if=\"definations[node.identifier]\"\n class=\"incremark-link incremark-reference-link\"\n :href=\"definations[node.identifier].url\"\n :title=\"definations[node.identifier].title || undefined\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <IncremarkInline :nodes=\"((node as LinkReference).children as PhrasingContent[])\" />\n </a>\n <!-- 如果没有找到定义,渲染为原始文本(降级处理) -->\n <span v-else class=\"incremark-link-ref-missing\">\n [{{ ((node as LinkReference).children as any[]).map((c: any) => c.value).join('') }}][{{ (node as LinkReference).identifier || (node as LinkReference).label }}]\n </span>\n </template>\n\n <!-- 脚注引用(footnoteReference) -->\n <sup v-else-if=\"node.type === 'footnoteReference'\" class=\"incremark-footnote-ref\">\n <a :href=\"`#fn-${(node as any).identifier}`\" :id=\"`fnref-${(node as any).identifier}`\">\n [{{ (node as any).identifier }}]\n </a>\n </sup>\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","<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","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 { render } from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkMath.vue?type=template\"; script.render = render;script.__file = \"src/components/IncremarkMath.vue\";export default script;","<script setup lang=\"ts\">\nimport type { RootContent, PhrasingContent } from 'mdast'\nimport IncremarkInline from './IncremarkInline.vue'\n\n/**\n * HtmlElementNode 类型定义(与 @incremark/core 中的定义一致)\n */\ninterface HtmlElementNode {\n type: 'htmlElement'\n tagName: string\n attrs: Record<string, string>\n children: RootContent[]\n data?: {\n rawHtml?: string\n parsed?: boolean\n originalType?: string\n }\n}\n\ndefineProps<{\n node: HtmlElementNode\n}>()\n\n/**\n * 判断是否是行内元素\n */\nfunction isInlineElement(tagName: string): boolean {\n const inlineElements = [\n 'a', 'abbr', 'acronym', 'b', 'bdo', 'big', 'br', 'button', 'cite', \n 'code', 'dfn', 'em', 'i', 'img', 'input', 'kbd', 'label', 'map', \n 'object', 'output', 'q', 'samp', 'script', 'select', 'small', \n 'span', 'strong', 'sub', 'sup', 'textarea', 'time', 'tt', 'var'\n ]\n return inlineElements.includes(tagName.toLowerCase())\n}\n\n/**\n * 判断是否是自闭合元素\n */\nfunction isVoidElement(tagName: string): boolean {\n const voidElements = [\n 'area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input', \n 'link', 'meta', 'param', 'source', 'track', 'wbr'\n ]\n return voidElements.includes(tagName.toLowerCase())\n}\n\n/**\n * 判断子节点是否都是行内内容\n */\nfunction hasOnlyInlineChildren(children: RootContent[]): boolean {\n if (!children || children.length === 0) return true\n \n return children.every(child => {\n const type = child.type\n // 常见的行内类型\n const inlineTypes = ['text', 'strong', 'emphasis', 'inlineCode', 'link', 'image', 'break', 'html', 'htmlElement']\n if (inlineTypes.includes(type)) {\n // 如果是 htmlElement,检查是否是行内元素\n if (type === 'htmlElement') {\n return isInlineElement((child as unknown as HtmlElementNode).tagName)\n }\n return true\n }\n return false\n })\n}\n\n/**\n * 将属性对象转换为 HTML 属性字符串(用于 v-bind)\n */\nfunction getAttrs(attrs: Record<string, string>): Record<string, string> {\n // 过滤掉可能有问题的属性\n const result: Record<string, string> = {}\n for (const [key, value] of Object.entries(attrs)) {\n // 跳过事件属性(已在解析时过滤,这里双重保险)\n if (key.startsWith('on')) continue\n result[key] = value\n }\n return result\n}\n</script>\n\n<template>\n <component \n :is=\"node.tagName\" \n v-bind=\"getAttrs(node.attrs)\"\n :class=\"['incremark-html-element', `incremark-${node.tagName}`]\"\n >\n <!-- 自闭合元素没有子节点 -->\n <template v-if=\"!isVoidElement(node.tagName)\">\n <!-- 如果子节点都是行内内容,使用 IncremarkInline -->\n <template v-if=\"hasOnlyInlineChildren(node.children)\">\n <IncremarkInline :nodes=\"(node.children as PhrasingContent[])\" />\n </template>\n \n <!-- 否则递归渲染每个子节点 -->\n <template v-else>\n <template v-for=\"(child, idx) in node.children\" :key=\"idx\">\n <!-- 如果子节点是 htmlElement,递归 -->\n <IncremarkHtmlElement \n v-if=\"child.type === 'htmlElement'\" \n :node=\"(child as unknown as HtmlElementNode)\" \n />\n <!-- 如果是文本节点 -->\n <template v-else-if=\"child.type === 'text'\">\n {{ (child as any).value }}\n </template>\n <!-- 其他类型尝试用 IncremarkInline -->\n <IncremarkInline \n v-else-if=\"['strong', 'emphasis', 'inlineCode', 'link', 'image', 'break'].includes(child.type)\"\n :nodes=\"[child as PhrasingContent]\" \n />\n <!-- 段落等块级元素 -->\n <template v-else-if=\"child.type === 'paragraph'\">\n <p><IncremarkInline :nodes=\"((child as any).children as PhrasingContent[])\" /></p>\n </template>\n <!-- 其他未知类型,显示原始 -->\n <template v-else>\n <div class=\"incremark-unknown-child\">{{ child.type }}</div>\n </template>\n </template>\n </template>\n </template>\n </component>\n</template>\n\n","import { createCommentVNode as _createCommentVNode, openBlock as _openBlock, createBlock as _createBlock, renderList as _renderList, Fragment as _Fragment, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createVNode as _createVNode, createElementVNode as _createElementVNode, resolveDynamicComponent as _resolveDynamicComponent, mergeProps as _mergeProps, withCtx as _withCtx } from \"vue\"\n\nconst _hoisted_1 = { class: \"incremark-unknown-child\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_IncremarkHtmlElement = _resolveComponent(\"IncremarkHtmlElement\", true)\n\n return (_openBlock(), _createBlock(_resolveDynamicComponent($props.node.tagName), _mergeProps($setup.getAttrs($props.node.attrs), {\n class: ['incremark-html-element', `incremark-${$props.node.tagName}`]\n }), {\n default: _withCtx(() => [\n _createCommentVNode(\" 自闭合元素没有子节点 \"),\n (!$setup.isVoidElement($props.node.tagName))\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n _createCommentVNode(\" 如果子节点都是行内内容,使用 IncremarkInline \"),\n ($setup.hasOnlyInlineChildren($props.node.children))\n ? (_openBlock(), _createBlock($setup[\"IncremarkInline\"], {\n key: 0,\n nodes: ($props.node.children as PhrasingContent[])\n }, null, 8 /* PROPS */, [\"nodes\"]))\n : (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n _createCommentVNode(\" 否则递归渲染每个子节点 \"),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($props.node.children, (child, idx) => {\n return (_openBlock(), _createElementBlock(_Fragment, { key: idx }, [\n _createCommentVNode(\" 如果子节点是 htmlElement,递归 \"),\n (child.type === 'htmlElement')\n ? (_openBlock(), _createBlock(_component_IncremarkHtmlElement, {\n key: 0,\n node: (child as unknown as HtmlElementNode)\n }, null, 8 /* PROPS */, [\"node\"]))\n : (child.type === 'text')\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n _createCommentVNode(\" 如果是文本节点 \"),\n _createTextVNode(_toDisplayString((child as any).value), 1 /* TEXT */)\n ], 64 /* STABLE_FRAGMENT */))\n : (['strong', 'emphasis', 'inlineCode', 'link', 'image', 'break'].includes(child.type))\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 2 }, [\n _createCommentVNode(\" 其他类型尝试用 IncremarkInline \"),\n _createVNode($setup[\"IncremarkInline\"], {\n nodes: [child as PhrasingContent]\n }, null, 8 /* PROPS */, [\"nodes\"])\n ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n : (child.type === 'paragraph')\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 3 }, [\n _createCommentVNode(\" 段落等块级元素 \"),\n _createElementVNode(\"p\", null, [\n _createVNode($setup[\"IncremarkInline\"], {\n nodes: ((child as any).children as PhrasingContent[])\n }, null, 8 /* PROPS */, [\"nodes\"])\n ])\n ], 64 /* STABLE_FRAGMENT */))\n : (_openBlock(), _createElementBlock(_Fragment, { key: 4 }, [\n _createCommentVNode(\" 其他未知类型,显示原始 \"),\n _createElementVNode(\"div\", _hoisted_1, _toDisplayString(child.type), 1 /* TEXT */)\n ], 64 /* STABLE_FRAGMENT */))\n ], 64 /* STABLE_FRAGMENT */))\n }), 128 /* KEYED_FRAGMENT */))\n ], 64 /* STABLE_FRAGMENT */))\n ], 64 /* STABLE_FRAGMENT */))\n : _createCommentVNode(\"v-if\", true)\n ]),\n _: 1 /* STABLE */\n }, 16 /* FULL_PROPS */, [\"class\"]))\n}","import script from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkHtmlElement.vue?type=script\";import { render } from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkHtmlElement.vue?type=template\"; script.render = render;script.__file = \"src/components/IncremarkHtmlElement.vue\";export default script;","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, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent } from \"vue\"\n\nconst _hoisted_1 = [\"innerHTML\"]\nconst _hoisted_2 = { class: \"incremark-inline-code\" }\nconst _hoisted_3 = [\"href\"]\nconst _hoisted_4 = [\"src\", \"alt\", \"title\"]\nconst _hoisted_5 = [\"src\", \"alt\", \"title\"]\nconst _hoisted_6 = { class: \"incremark-image-ref-missing\" }\nconst _hoisted_7 = [\"href\", \"title\"]\nconst _hoisted_8 = { class: \"incremark-link-ref-missing\" }\nconst _hoisted_9 = { class: \"incremark-footnote-ref\" }\nconst _hoisted_10 = [\"href\", \"id\"]\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(\" 文本(支持 chunks 渐入动画) \"),\n (node.type === 'text')\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n _createCommentVNode(\" 稳定文本(已经显示过的部分,无动画) \"),\n _createTextVNode(\" \" + _toDisplayString($setup.getStableText(node as TextNodeWithChunks)) + \" \", 1 /* TEXT */),\n _createCommentVNode(\" 新增的 chunk 部分(带渐入动画) \"),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.getChunks(node), (chunk) => {\n return (_openBlock(), _createElementBlock(\"span\", {\n key: chunk.createdAt,\n class: \"incremark-fade-in\"\n }, _toDisplayString(chunk.text), 1 /* TEXT */))\n }), 128 /* KEYED_FRAGMENT */))\n ], 64 /* STABLE_FRAGMENT */))\n : ($setup.isInlineMath(node))\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n _createCommentVNode(\" 行内公式 \"),\n _createVNode($setup[\"IncremarkMath\"], {\n node: (node as unknown as MathNode)\n }, null, 8 /* PROPS */, [\"node\"])\n ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n : ($setup.isHtmlElementNode(node))\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 2 }, [\n _createCommentVNode(\" htmlElement 节点(结构化的 HTML 元素) \"),\n _createVNode($setup[\"IncremarkHtmlElement\"], {\n node: (node as unknown as HtmlElementNode)\n }, null, 8 /* PROPS */, [\"node\"])\n ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n : ($setup.isHtmlNode(node))\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 3 }, [\n _createCommentVNode(\" HTML 节点(原始 HTML,如未启用 htmlTree 选项) \"),\n _createElementVNode(\"span\", {\n style: {\"display\":\"contents\"},\n innerHTML: (node as any).value\n }, null, 8 /* PROPS */, _hoisted_1)\n ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n : (node.type === 'strong')\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 4 }, [\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: 5 }, [\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: 6 }, [\n _createCommentVNode(\" 行内代码 \"),\n _createElementVNode(\"code\", _hoisted_2, _toDisplayString((node as any).value), 1 /* TEXT */)\n ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n : (node.type === 'link')\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 7 }, [\n _createCommentVNode(\" 链接 \"),\n _createElementVNode(\"a\", {\n class: \"incremark-link\",\n href: node.url,\n target: \"_blank\",\n rel: \"noopener noreferrer\"\n }, [\n _createVNode(_component_IncremarkInline, {\n nodes: (node.children as PhrasingContent[])\n }, null, 8 /* PROPS */, [\"nodes\"])\n ], 8 /* PROPS */, _hoisted_3)\n ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n : (node.type === 'image')\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 8 }, [\n _createCommentVNode(\" 图片 \"),\n _createElementVNode(\"img\", {\n class: \"incremark-image\",\n src: node.url,\n alt: node.alt || '',\n title: (node as any).title || undefined,\n loading: \"lazy\"\n }, null, 8 /* PROPS */, _hoisted_4)\n ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n : ($setup.isImageReference(node))\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 9 }, [\n _createCommentVNode(\" 引用式图片(imageReference) \"),\n ($setup.definations[node.identifier])\n ? (_openBlock(), _createElementBlock(\"img\", {\n key: 0,\n class: \"incremark-image incremark-reference-image\",\n src: $setup.definations[node.identifier].url,\n alt: (node as ImageReference).alt || '',\n title: $setup.definations[node.identifier].title || undefined,\n loading: \"lazy\"\n }, null, 8 /* PROPS */, _hoisted_5))\n : (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n _createCommentVNode(\" 如果没有找到定义,渲染为原始文本(降级处理) \"),\n _createElementVNode(\"span\", _hoisted_6, \" ![\" + _toDisplayString((node as ImageReference).alt) + \"][\" + _toDisplayString((node as ImageReference).identifier || (node as ImageReference).label) + \"] \", 1 /* TEXT */)\n ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n ], 64 /* STABLE_FRAGMENT */))\n : ($setup.isLinkReference(node))\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 10 }, [\n _createCommentVNode(\" 引用式链接(linkReference) \"),\n ($setup.definations[node.identifier])\n ? (_openBlock(), _createElementBlock(\"a\", {\n key: 0,\n class: \"incremark-link incremark-reference-link\",\n href: $setup.definations[node.identifier].url,\n title: $setup.definations[node.identifier].title || undefined,\n target: \"_blank\",\n rel: \"noopener noreferrer\"\n }, [\n _createVNode(_component_IncremarkInline, {\n nodes: ((node as LinkReference).children as PhrasingContent[])\n }, null, 8 /* PROPS */, [\"nodes\"])\n ], 8 /* PROPS */, _hoisted_7))\n : (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n _createCommentVNode(\" 如果没有找到定义,渲染为原始文本(降级处理) \"),\n _createElementVNode(\"span\", _hoisted_8, \" [\" + _toDisplayString(((node as LinkReference).children as any[]).map((c) => c.value).join('')) + \"][\" + _toDisplayString((node as LinkReference).identifier || (node as LinkReference).label) + \"] \", 1 /* TEXT */)\n ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n ], 64 /* STABLE_FRAGMENT */))\n : (node.type === 'footnoteReference')\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 11 }, [\n _createCommentVNode(\" 脚注引用(footnoteReference) \"),\n _createElementVNode(\"sup\", _hoisted_9, [\n _createElementVNode(\"a\", {\n href: `#fn-${(node as any).identifier}`,\n id: `fnref-${(node as any).identifier}`\n }, \" [\" + _toDisplayString((node as any).identifier) + \"] \", 9 /* TEXT, PROPS */, _hoisted_10)\n ])\n ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n : (node.type === 'break')\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 12 }, [\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: 13 }, [\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 { 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, normalizeClass as _normalizeClass, 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), {\n class: _normalizeClass(`incremark-heading h${$props.node.depth}`)\n }, {\n default: _withCtx(() => [\n _createVNode($setup[\"IncremarkInline\"], {\n nodes: $props.node.children\n }, null, 8 /* PROPS */, [\"nodes\"])\n ]),\n _: 1 /* STABLE */\n }, 8 /* PROPS */, [\"class\"]))\n}","import script from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkHeading.vue?type=script\";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\";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 { render } from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkParagraph.vue?type=template\"; script.render = render;script.__file = \"src/components/IncremarkParagraph.vue\";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=\"code-btn\" \n @click=\"toggleMermaidView\" \n type=\"button\"\n :disabled=\"!mermaidSvg\"\n >\n {{ mermaidViewMode === 'preview' ? '源码' : '预览' }}\n </button>\n <button class=\"code-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=\"code-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","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: \"code-btn\",\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: \"code-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: \"code-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 { render } from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkCode.vue?type=template\"; script.render = render;script.__file = \"src/components/IncremarkCode.vue\";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","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 { render } from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkList.vue?type=template\"; script.render = render;script.__file = \"src/components/IncremarkList.vue\";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","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 { render } from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkTable.vue?type=template\"; script.render = render;script.__file = \"src/components/IncremarkTable.vue\";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 { render } from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkBlockquote.vue?type=template\"; script.render = render;script.__file = \"src/components/IncremarkBlockquote.vue\";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 { render } from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkThematicBreak.vue?type=template\"; script.render = render;script.__file = \"src/components/IncremarkThematicBreak.vue\";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 { render } from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkDefault.vue?type=template\"; script.render = render;script.__file = \"src/components/IncremarkDefault.vue\";export default script;","<!--\n/**\n * 脚注列表组件\n *\n * 在文档底部渲染所有脚注定义,按引用出现的顺序排列\n *\n * @component IncremarkFootnotes\n *\n * @remarks\n * 样式定义在 @incremark/theme 中的 footnotes.less\n * footnoteReferenceOrder 自动从 context 获取,无需手动传递\n */\n-->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport type { FootnoteDefinition, RootContent } from 'mdast'\nimport { useDefinationsContext } from '../composables/useDefinationsContext'\nimport IncremarkRenderer from './IncremarkRenderer.vue'\n\nconst { definations, footnoteDefinitions, footnoteReferenceOrder } = useDefinationsContext()\n\n/**\n * 按引用顺序排列的脚注列表\n * 只显示已有定义的脚注\n */\nconst orderedFootnotes = computed<Array<{ identifier: string; definition: FootnoteDefinition }>>(() => {\n return footnoteReferenceOrder.value\n .map(identifier => ({\n identifier,\n definition: footnoteDefinitions.value[identifier]\n }))\n .filter(item => item.definition !== undefined)\n})\n\n/**\n * 是否有脚注需要显示\n */\nconst hasFootnotes = computed(() => orderedFootnotes.value.length > 0)\n</script>\n\n<template>\n <section v-if=\"hasFootnotes\" class=\"incremark-footnotes\">\n <hr class=\"incremark-footnotes-divider\" />\n <ol class=\"incremark-footnotes-list\">\n <li\n v-for=\"(item, index) in orderedFootnotes\"\n :key=\"item.identifier\"\n :id=\"`fn-${item.identifier}`\"\n class=\"incremark-footnote-item\"\n >\n <div class=\"incremark-footnote-content\">\n <!-- 脚注序号 -->\n <span class=\"incremark-footnote-number\">{{ index + 1 }}.</span>\n \n <!-- 脚注内容 -->\n <div class=\"incremark-footnote-body\">\n <IncremarkRenderer\n v-for=\"(child, childIndex) in item.definition.children\"\n :key=\"childIndex\"\n :node=\"(child as RootContent)\"\n />\n </div>\n </div>\n \n <!-- 返回链接 -->\n <a \n :href=\"`#fnref-${item.identifier}`\" \n class=\"incremark-footnote-backref\"\n aria-label=\"返回引用位置\"\n >\n ↩\n </a>\n </li>\n </ol>\n </section>\n</template>\n\n\n","<script setup lang=\"ts\">\nimport type { RootContent, HTML } 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 IncremarkHtmlElement from './IncremarkHtmlElement.vue'\nimport IncremarkDefault from './IncremarkDefault.vue'\n\nconst props = defineProps<{\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 htmlElement: IncremarkHtmlElement,\n}\n\nfunction getComponent(type: string): Component {\n return componentMap[type] || IncremarkDefault\n}\n\n/**\n * 检查是否是 html 节点\n */\nfunction isHtmlNode(node: RootContent): node is HTML {\n return node.type === 'html'\n}\n</script>\n\n<template>\n <!-- HTML 节点:渲染为代码块显示源代码 -->\n <pre v-if=\"isHtmlNode(node)\" class=\"incremark-html-code\"><code>{{ (node as HTML).value }}</code></pre>\n <!-- 其他节点:使用对应组件 -->\n <component v-else :is=\"getComponent(node.type)\" :node=\"node\" />\n</template>\n\n","import { createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveDynamicComponent as _resolveDynamicComponent, createBlock as _createBlock, Fragment as _Fragment } from \"vue\"\n\nconst _hoisted_1 = {\n key: 0,\n class: \"incremark-html-code\"\n}\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n _createCommentVNode(\" HTML 节点:渲染为代码块显示源代码 \"),\n ($setup.isHtmlNode($props.node))\n ? (_openBlock(), _createElementBlock(\"pre\", _hoisted_1, [\n _createElementVNode(\"code\", null, _toDisplayString(($props.node as HTML).value), 1 /* TEXT */)\n ]))\n : (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n _createCommentVNode(\" 其他节点:使用对应组件 \"),\n (_openBlock(), _createBlock(_resolveDynamicComponent($setup.getComponent($props.node.type)), { node: $props.node }, null, 8 /* PROPS */, [\"node\"]))\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/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;","import { createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = {\n key: 0,\n class: \"incremark-footnotes\"\n}\nconst _hoisted_2 = { class: \"incremark-footnotes-list\" }\nconst _hoisted_3 = [\"id\"]\nconst _hoisted_4 = { class: \"incremark-footnote-content\" }\nconst _hoisted_5 = { class: \"incremark-footnote-number\" }\nconst _hoisted_6 = { class: \"incremark-footnote-body\" }\nconst _hoisted_7 = [\"href\"]\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n return ($setup.hasFootnotes)\n ? (_openBlock(), _createElementBlock(\"section\", _hoisted_1, [\n _cache[0] || (_cache[0] = _createElementVNode(\"hr\", { class: \"incremark-footnotes-divider\" }, null, -1 /* CACHED */)),\n _createElementVNode(\"ol\", _hoisted_2, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.orderedFootnotes, (item, index) => {\n return (_openBlock(), _createElementBlock(\"li\", {\n key: item.identifier,\n id: `fn-${item.identifier}`,\n class: \"incremark-footnote-item\"\n }, [\n _createElementVNode(\"div\", _hoisted_4, [\n _createCommentVNode(\" 脚注序号 \"),\n _createElementVNode(\"span\", _hoisted_5, _toDisplayString(index + 1) + \".\", 1 /* TEXT */),\n _createCommentVNode(\" 脚注内容 \"),\n _createElementVNode(\"div\", _hoisted_6, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(item.definition.children, (child, childIndex) => {\n return (_openBlock(), _createBlock($setup[\"IncremarkRenderer\"], {\n key: childIndex,\n node: (child as RootContent)\n }, null, 8 /* PROPS */, [\"node\"]))\n }), 128 /* KEYED_FRAGMENT */))\n ])\n ]),\n _createCommentVNode(\" 返回链接 \"),\n _createElementVNode(\"a\", {\n href: `#fnref-${item.identifier}`,\n class: \"incremark-footnote-backref\",\n \"aria-label\": \"返回引用位置\"\n }, \" ↩ \", 8 /* PROPS */, _hoisted_7)\n ], 8 /* PROPS */, _hoisted_3))\n }), 128 /* KEYED_FRAGMENT */))\n ])\n ]))\n : _createCommentVNode(\"v-if\", true)\n}","import script from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkFootnotes.vue?type=script\";import { render } from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkFootnotes.vue?type=template\"; script.render = render;script.__file = \"src/components/IncremarkFootnotes.vue\";export default script;","import { createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveDynamicComponent as _resolveDynamicComponent, createBlock as _createBlock, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = { class: \"incremark\" }\nconst _hoisted_2 = {\n key: 0,\n class: \"incremark-html-code\"\n}\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createCommentVNode(\" 主要内容块 \"),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.actualBlocks, (block) => {\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n (block.node.type !== 'definition' && block.node.type !== 'footnoteDefinition')\n ? (_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 _createCommentVNode(\" HTML 节点:渲染为代码块显示源代码 \"),\n ($setup.isHtmlNode(block.node))\n ? (_openBlock(), _createElementBlock(\"pre\", _hoisted_2, [\n _createElementVNode(\"code\", null, _toDisplayString((block.node as HTML).value), 1 /* TEXT */)\n ]))\n : (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n _createCommentVNode(\" 其他节点:使用对应组件 \"),\n (_openBlock(), _createBlock(_resolveDynamicComponent($setup.getComponent(block.node.type)), {\n node: block.node\n }, null, 8 /* PROPS */, [\"node\"]))\n ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n ], 2 /* CLASS */))\n : _createCommentVNode(\"v-if\", true)\n ], 64 /* STABLE_FRAGMENT */))\n }), 256 /* UNKEYED_FRAGMENT */)),\n _createCommentVNode(\" 脚注列表(仅在 finalize 后显示) \"),\n ($setup.actualIsFinalized && ($setup.footnoteReferenceOrder as any).value?.length > 0)\n ? (_openBlock(), _createBlock($setup[\"IncremarkFootnotes\"], { key: 0 }))\n : _createCommentVNode(\"v-if\", true)\n ]))\n}","import script from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/components/Incremark.vue?type=script\";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\";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;","<script setup lang=\"ts\">\nimport { ref, watch } from 'vue'\nimport type { DesignTokens } from '@incremark/theme'\nimport { applyTheme } from '@incremark/theme'\n\n/**\n * 主题配置,可以是:\n * - 字符串:'default' | 'dark'\n * - 完整主题对象:DesignTokens\n * - 部分主题对象:Partial<DesignTokens>(会合并到默认主题)\n */\nconst props = withDefaults(\n defineProps<{\n theme: 'default' | 'dark' | DesignTokens | Partial<DesignTokens>\n class?: string\n }>(),\n {\n class: ''\n }\n)\n\nconst containerRef = ref<HTMLElement>()\n\nwatch(\n () => props.theme,\n (theme) => {\n if (containerRef.value) {\n // 应用主题到容器元素\n applyTheme(containerRef.value, theme)\n }\n },\n { immediate: true }\n)\n</script>\n\n<template>\n <div ref=\"containerRef\" :class=\"props.class\" class=\"incremark-theme-provider\">\n <slot />\n </div>\n</template>\n\n","import { renderSlot as _renderSlot, normalizeClass as _normalizeClass, 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: _normalizeClass([$setup.props.class, \"incremark-theme-provider\"])\n }, [\n _renderSlot(_ctx.$slots, \"default\")\n ], 2 /* CLASS */))\n}","import script from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/ThemeProvider.vue?type=script\";import { render } from \"/Users/yishuai/develop/ai/markdown/packages/vue/src/ThemeProvider.vue?type=template\"; script.render = render;script.__file = \"src/ThemeProvider.vue\";export default script;","// Composables\nexport { useIncremark, useStreamRenderer, useDevTools, useBlockTransformer } from './composables'\nexport { useProvideDefinations } from './composables/useProvideDefinations'\nexport { useDefinationsContext } from './composables/useDefinationsContext'\nexport type {\n UseIncremarkOptions,\n TypewriterOptions,\n TypewriterControls,\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 IncremarkHtmlElement,\n IncremarkDefault,\n IncremarkFootnotes,\n AutoScrollContainer\n} from './components'\nexport type { ComponentMap, BlockWithStableId } from './components'\nexport { default as ThemeProvider } from './ThemeProvider.vue'\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\n// Re-export theme utilities\nexport {\n type DesignTokens,\n defaultTheme,\n darkTheme,\n generateCSSVars,\n mergeTheme,\n applyTheme\n} from '@incremark/theme'\n"],"mappings":"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","names":["ref","shallowRef","computed","ref","ref","blocks","shallowRef","ref","computed","render","computed","onUnmounted","ref","watch","computed","onUnmounted","createBlockTransformer","computed","computed","computed","ref","watch","shallowRef","onUnmounted","IncremarkMath_default","_createCommentVNode","_openBlock","_Fragment","_createElementBlock","_toDisplayString","_createElementVNode","_hoisted_1","render","render","IncremarkHtmlElement_default","_renderList","_Fragment","_openBlock","_createElementBlock","_createCommentVNode","_toDisplayString","_createTextVNode","_createVNode","_createElementVNode","_resolveComponent","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","render","IncremarkInline_default","render","computed","_createVNode","_resolveDynamicComponent","_withCtx","_openBlock","_createBlock","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_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","render","render","IncremarkCode_default","computed","computed","_renderList","_Fragment","_openBlock","_createElementBlock","_createElementVNode","_createVNode","_createBlock","_normalizeClass","_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","computed","IncremarkHeading_default","IncremarkParagraph_default","IncremarkCode_default","IncremarkList_default","IncremarkTable_default","IncremarkBlockquote_default","IncremarkThematicBreak_default","IncremarkMath_default","IncremarkHtmlElement_default","IncremarkDefault_default","isHtmlNode","_createCommentVNode","_toDisplayString","_createElementVNode","_openBlock","_createElementBlock","_resolveDynamicComponent","_createBlock","_Fragment","_hoisted_1","render","render","IncremarkRenderer_default","computed","_createElementVNode","_renderList","_Fragment","_openBlock","_createElementBlock","_createCommentVNode","_toDisplayString","_createBlock","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","render","render","IncremarkFootnotes_default","isHtmlNode","computed","IncremarkHeading_default","IncremarkParagraph_default","IncremarkCode_default","IncremarkList_default","IncremarkTable_default","IncremarkBlockquote_default","IncremarkThematicBreak_default","IncremarkMath_default","IncremarkHtmlElement_default","IncremarkDefault_default","_createCommentVNode","_renderList","_Fragment","_openBlock","_createElementBlock","_toDisplayString","_createElementVNode","_resolveDynamicComponent","_createBlock","_normalizeClass","_hoisted_1","_hoisted_2","render","render","Incremark_default","ref","onMounted","onUnmounted","_openBlock","_createElementBlock","render","render","AutoScrollContainer_default","ref","watch","_renderSlot","_normalizeClass","_openBlock","_createElementBlock","render","render","ThemeProvider_default","BlockTransformer","createBlockTransformer","defaultPlugins","applyTheme"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@incremark/vue",
3
- "version": "0.2.1",
3
+ "version": "0.2.2",
4
4
  "description": "Incremark Vue 3 集成",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -22,10 +22,10 @@
22
22
  ],
23
23
  "dependencies": {
24
24
  "shiki": "^3.20.0",
25
- "@incremark/core": "0.2.1",
26
- "@incremark/shared": "0.2.1",
27
- "@incremark/theme": "0.2.1",
28
- "@incremark/devtools": "0.2.1"
25
+ "@incremark/core": "0.2.2",
26
+ "@incremark/devtools": "0.2.2",
27
+ "@incremark/shared": "0.2.2",
28
+ "@incremark/theme": "0.2.2"
29
29
  },
30
30
  "peerDependencies": {
31
31
  "vue": "^3.3.0",
@@ -41,6 +41,7 @@
41
41
  }
42
42
  },
43
43
  "devDependencies": {
44
+ "@types/mdast": "^4.0.0",
44
45
  "@vue/compiler-sfc": "^3.4.0",
45
46
  "esbuild-plugin-vue3": "^0.4.2",
46
47
  "tsup": "^8.0.0",
@@ -125,14 +125,3 @@ function getAttrs(attrs: Record<string, string>): Record<string, string> {
125
125
  </component>
126
126
  </template>
127
127
 
128
- <style scoped>
129
- .incremark-html-element {
130
- /* 保持原有样式 */
131
- }
132
-
133
- .incremark-unknown-child {
134
- color: #999;
135
- font-style: italic;
136
- }
137
- </style>
138
-