@incremark/vue 0.0.1

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.js ADDED
@@ -0,0 +1,1342 @@
1
+ // src/composables/useIncremark.ts
2
+ import { ref, shallowRef, computed, markRaw } from "vue";
3
+ import {
4
+ createIncremarkParser
5
+ } from "@incremark/core";
6
+ function useIncremark(options = {}) {
7
+ const parser = createIncremarkParser(options);
8
+ const completedBlocks = shallowRef([]);
9
+ const pendingBlocks = shallowRef([]);
10
+ const isLoading = ref(false);
11
+ const markdown = ref("");
12
+ const ast = computed(() => ({
13
+ type: "root",
14
+ children: [
15
+ ...completedBlocks.value.map((b) => b.node),
16
+ ...pendingBlocks.value.map((b) => b.node)
17
+ ]
18
+ }));
19
+ const blocks = computed(() => {
20
+ const result = [];
21
+ for (const block of completedBlocks.value) {
22
+ result.push({ ...block, stableId: block.id });
23
+ }
24
+ for (let i = 0; i < pendingBlocks.value.length; i++) {
25
+ result.push({
26
+ ...pendingBlocks.value[i],
27
+ stableId: `pending-${i}`
28
+ });
29
+ }
30
+ return result;
31
+ });
32
+ function append(chunk) {
33
+ isLoading.value = true;
34
+ const update = parser.append(chunk);
35
+ markdown.value = parser.getBuffer();
36
+ if (update.completed.length > 0) {
37
+ completedBlocks.value = [
38
+ ...completedBlocks.value,
39
+ ...update.completed.map((b) => markRaw(b))
40
+ ];
41
+ }
42
+ pendingBlocks.value = update.pending.map((b) => markRaw(b));
43
+ return update;
44
+ }
45
+ function finalize() {
46
+ const update = parser.finalize();
47
+ markdown.value = parser.getBuffer();
48
+ if (update.completed.length > 0) {
49
+ completedBlocks.value = [
50
+ ...completedBlocks.value,
51
+ ...update.completed.map((b) => markRaw(b))
52
+ ];
53
+ }
54
+ pendingBlocks.value = [];
55
+ isLoading.value = false;
56
+ return update;
57
+ }
58
+ function abort() {
59
+ return finalize();
60
+ }
61
+ function reset() {
62
+ parser.reset();
63
+ completedBlocks.value = [];
64
+ pendingBlocks.value = [];
65
+ markdown.value = "";
66
+ isLoading.value = false;
67
+ }
68
+ return {
69
+ /** 已收集的完整 Markdown 字符串 */
70
+ markdown,
71
+ /** 已完成的块列表 */
72
+ completedBlocks,
73
+ /** 待处理的块列表 */
74
+ pendingBlocks,
75
+ /** 当前完整的 AST */
76
+ ast,
77
+ /** 所有块(完成 + 待处理),带稳定 ID */
78
+ blocks,
79
+ /** 是否正在加载 */
80
+ isLoading,
81
+ /** 追加内容 */
82
+ append,
83
+ /** 完成解析 */
84
+ finalize,
85
+ /** 强制中断 */
86
+ abort,
87
+ /** 重置解析器 */
88
+ reset,
89
+ /** 解析器实例 */
90
+ parser
91
+ };
92
+ }
93
+
94
+ // src/composables/useStreamRenderer.ts
95
+ import { computed as computed2 } from "vue";
96
+ function useStreamRenderer(options) {
97
+ const { completedBlocks, pendingBlocks } = options;
98
+ const stableCompletedBlocks = computed2(
99
+ () => completedBlocks.value.map((block) => ({
100
+ ...block,
101
+ stableId: block.id
102
+ }))
103
+ );
104
+ const stablePendingBlocks = computed2(
105
+ () => pendingBlocks.value.map((block, index) => ({
106
+ ...block,
107
+ stableId: `pending-${index}`
108
+ }))
109
+ );
110
+ const allStableBlocks = computed2(() => [...stableCompletedBlocks.value, ...stablePendingBlocks.value]);
111
+ return {
112
+ stableCompletedBlocks,
113
+ stablePendingBlocks,
114
+ allStableBlocks
115
+ };
116
+ }
117
+
118
+ // src/composables/useDevTools.ts
119
+ import { onMounted, onUnmounted } from "vue";
120
+ import { createDevTools } from "@incremark/devtools";
121
+ function useDevTools(incremark, options = {}) {
122
+ const devtools = createDevTools(options);
123
+ incremark.parser.setOnChange((state) => {
124
+ const blocks = [
125
+ ...state.completedBlocks.map((b) => ({ ...b, stableId: b.id })),
126
+ ...state.pendingBlocks.map((b, i) => ({ ...b, stableId: `pending-${i}` }))
127
+ ];
128
+ devtools.update({
129
+ blocks,
130
+ completedBlocks: state.completedBlocks,
131
+ pendingBlocks: state.pendingBlocks,
132
+ markdown: state.markdown,
133
+ ast: state.ast,
134
+ isLoading: state.pendingBlocks.length > 0
135
+ });
136
+ });
137
+ onMounted(() => {
138
+ devtools.mount();
139
+ });
140
+ onUnmounted(() => {
141
+ devtools.unmount();
142
+ incremark.parser.setOnChange(void 0);
143
+ });
144
+ return devtools;
145
+ }
146
+
147
+ // sfc-script:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/Incremark.vue?type=script
148
+ import { defineComponent as _defineComponent11 } from "vue";
149
+ import { computed as computed7 } from "vue";
150
+
151
+ // sfc-script:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkHeading.vue?type=script
152
+ import { defineComponent as _defineComponent3 } from "vue";
153
+ import { computed as computed4 } from "vue";
154
+
155
+ // sfc-script:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkInline.vue?type=script
156
+ import { defineComponent as _defineComponent2 } from "vue";
157
+
158
+ // sfc-script:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkMath.vue?type=script
159
+ import { defineComponent as _defineComponent } from "vue";
160
+ import { computed as computed3, ref as ref3, watch, shallowRef as shallowRef2, onUnmounted as onUnmounted2 } from "vue";
161
+ var IncremarkMath_default = /* @__PURE__ */ _defineComponent({
162
+ __name: "IncremarkMath",
163
+ props: {
164
+ node: { type: Object, required: true },
165
+ renderDelay: { type: Number, required: false, default: 300 }
166
+ },
167
+ setup(__props, { expose: __expose }) {
168
+ __expose();
169
+ const props = __props;
170
+ const renderedHtml = ref3("");
171
+ const renderError = ref3("");
172
+ const isLoading = ref3(false);
173
+ const katexRef = shallowRef2(null);
174
+ let renderTimer = null;
175
+ const isInline = computed3(() => props.node.type === "inlineMath");
176
+ const formula = computed3(() => props.node.value);
177
+ function scheduleRender() {
178
+ if (!formula.value) {
179
+ renderedHtml.value = "";
180
+ return;
181
+ }
182
+ if (renderTimer) {
183
+ clearTimeout(renderTimer);
184
+ }
185
+ isLoading.value = true;
186
+ renderTimer = setTimeout(() => {
187
+ doRender();
188
+ }, props.renderDelay);
189
+ }
190
+ async function doRender() {
191
+ if (!formula.value) return;
192
+ try {
193
+ if (!katexRef.value) {
194
+ const katexModule = await import("katex");
195
+ katexRef.value = katexModule.default;
196
+ }
197
+ const katex = katexRef.value;
198
+ renderedHtml.value = katex.renderToString(formula.value, {
199
+ displayMode: !isInline.value,
200
+ throwOnError: false,
201
+ strict: false
202
+ });
203
+ renderError.value = "";
204
+ } catch (e) {
205
+ renderError.value = "";
206
+ renderedHtml.value = "";
207
+ } finally {
208
+ isLoading.value = false;
209
+ }
210
+ }
211
+ onUnmounted2(() => {
212
+ if (renderTimer) {
213
+ clearTimeout(renderTimer);
214
+ }
215
+ });
216
+ watch(formula, scheduleRender, { immediate: true });
217
+ const __returned__ = { props, renderedHtml, renderError, isLoading, katexRef, get renderTimer() {
218
+ return renderTimer;
219
+ }, set renderTimer(v) {
220
+ renderTimer = v;
221
+ }, isInline, formula, scheduleRender, doRender };
222
+ Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
223
+ return __returned__;
224
+ }
225
+ });
226
+
227
+ // sfc-template:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkMath.vue?type=template
228
+ import { createCommentVNode as _createCommentVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, Fragment as _Fragment } from "vue";
229
+ var _hoisted_1 = {
230
+ key: 0,
231
+ class: "incremark-math-inline"
232
+ };
233
+ var _hoisted_2 = ["innerHTML"];
234
+ var _hoisted_3 = { class: "math-source" };
235
+ var _hoisted_4 = { class: "incremark-math-block" };
236
+ var _hoisted_5 = ["innerHTML"];
237
+ var _hoisted_6 = { class: "math-source-block" };
238
+ function render(_ctx, _cache, $props, $setup, $data, $options) {
239
+ return _openBlock(), _createElementBlock(
240
+ _Fragment,
241
+ null,
242
+ [
243
+ _createCommentVNode(" \u884C\u5185\u516C\u5F0F "),
244
+ $setup.isInline ? (_openBlock(), _createElementBlock("span", _hoisted_1, [
245
+ _createCommentVNode(" \u6E32\u67D3\u6210\u529F "),
246
+ $setup.renderedHtml && !$setup.isLoading ? (_openBlock(), _createElementBlock("span", {
247
+ key: 0,
248
+ innerHTML: $setup.renderedHtml
249
+ }, null, 8, _hoisted_2)) : (_openBlock(), _createElementBlock(
250
+ _Fragment,
251
+ { key: 1 },
252
+ [
253
+ _createCommentVNode(" \u52A0\u8F7D\u4E2D\u6216\u672A\u6E32\u67D3\uFF1A\u663E\u793A\u6E90\u7801 "),
254
+ _createElementVNode(
255
+ "code",
256
+ _hoisted_3,
257
+ _toDisplayString($setup.formula),
258
+ 1
259
+ /* TEXT */
260
+ )
261
+ ],
262
+ 2112
263
+ /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
264
+ ))
265
+ ])) : (_openBlock(), _createElementBlock(
266
+ _Fragment,
267
+ { key: 1 },
268
+ [
269
+ _createCommentVNode(" \u5757\u7EA7\u516C\u5F0F "),
270
+ _createElementVNode("div", _hoisted_4, [
271
+ _createCommentVNode(" \u6E32\u67D3\u6210\u529F "),
272
+ $setup.renderedHtml && !$setup.isLoading ? (_openBlock(), _createElementBlock("div", {
273
+ key: 0,
274
+ innerHTML: $setup.renderedHtml,
275
+ class: "math-rendered"
276
+ }, null, 8, _hoisted_5)) : (_openBlock(), _createElementBlock(
277
+ _Fragment,
278
+ { key: 1 },
279
+ [
280
+ _createCommentVNode(" \u52A0\u8F7D\u4E2D\u6216\u672A\u6E32\u67D3\uFF1A\u663E\u793A\u6E90\u7801 "),
281
+ _createElementVNode("pre", _hoisted_6, [
282
+ _createElementVNode(
283
+ "code",
284
+ null,
285
+ _toDisplayString($setup.formula),
286
+ 1
287
+ /* TEXT */
288
+ )
289
+ ])
290
+ ],
291
+ 2112
292
+ /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
293
+ ))
294
+ ])
295
+ ],
296
+ 2112
297
+ /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
298
+ ))
299
+ ],
300
+ 2112
301
+ /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
302
+ );
303
+ }
304
+
305
+ // src/components/IncremarkMath.vue
306
+ IncremarkMath_default.render = render;
307
+ IncremarkMath_default.__file = "src/components/IncremarkMath.vue";
308
+ IncremarkMath_default.__scopeId = "data-v-6146c361";
309
+ var IncremarkMath_default2 = IncremarkMath_default;
310
+
311
+ // sfc-script:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkInline.vue?type=script
312
+ var IncremarkInline_default = /* @__PURE__ */ _defineComponent2({
313
+ __name: "IncremarkInline",
314
+ props: {
315
+ nodes: { type: Array, required: true }
316
+ },
317
+ setup(__props, { expose: __expose }) {
318
+ __expose();
319
+ function escapeHtml(str) {
320
+ return str.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
321
+ }
322
+ const __returned__ = { escapeHtml, IncremarkMath: IncremarkMath_default2 };
323
+ Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
324
+ return __returned__;
325
+ }
326
+ });
327
+
328
+ // sfc-template:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkInline.vue?type=template
329
+ import { renderList as _renderList, Fragment as _Fragment2, openBlock as _openBlock2, createElementBlock as _createElementBlock2, createCommentVNode as _createCommentVNode2, toDisplayString as _toDisplayString2, createTextVNode as _createTextVNode, createVNode as _createVNode, resolveComponent as _resolveComponent, createElementVNode as _createElementVNode2 } from "vue";
330
+ var _hoisted_12 = { class: "incremark-inline-code" };
331
+ var _hoisted_22 = ["href"];
332
+ var _hoisted_32 = ["src", "alt"];
333
+ function render2(_ctx, _cache, $props, $setup, $data, $options) {
334
+ const _component_IncremarkInline = _resolveComponent("IncremarkInline", true);
335
+ return _openBlock2(true), _createElementBlock2(
336
+ _Fragment2,
337
+ null,
338
+ _renderList($props.nodes, (node, idx) => {
339
+ return _openBlock2(), _createElementBlock2(
340
+ _Fragment2,
341
+ { key: idx },
342
+ [
343
+ _createCommentVNode2(" \u6587\u672C "),
344
+ node.type === "text" ? (_openBlock2(), _createElementBlock2(
345
+ _Fragment2,
346
+ { key: 0 },
347
+ [
348
+ _createTextVNode(
349
+ _toDisplayString2(node.value),
350
+ 1
351
+ /* TEXT */
352
+ )
353
+ ],
354
+ 64
355
+ /* STABLE_FRAGMENT */
356
+ )) : node.type === "inlineMath" ? (_openBlock2(), _createElementBlock2(
357
+ _Fragment2,
358
+ { key: 1 },
359
+ [
360
+ _createCommentVNode2(" \u884C\u5185\u516C\u5F0F "),
361
+ _createVNode($setup["IncremarkMath"], {
362
+ node
363
+ }, null, 8, ["node"])
364
+ ],
365
+ 2112
366
+ /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
367
+ )) : node.type === "strong" ? (_openBlock2(), _createElementBlock2(
368
+ _Fragment2,
369
+ { key: 2 },
370
+ [
371
+ _createCommentVNode2(" \u52A0\u7C97 "),
372
+ _createElementVNode2("strong", null, [
373
+ _createVNode(_component_IncremarkInline, {
374
+ nodes: node.children
375
+ }, null, 8, ["nodes"])
376
+ ])
377
+ ],
378
+ 2112
379
+ /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
380
+ )) : node.type === "emphasis" ? (_openBlock2(), _createElementBlock2(
381
+ _Fragment2,
382
+ { key: 3 },
383
+ [
384
+ _createCommentVNode2(" \u659C\u4F53 "),
385
+ _createElementVNode2("em", null, [
386
+ _createVNode(_component_IncremarkInline, {
387
+ nodes: node.children
388
+ }, null, 8, ["nodes"])
389
+ ])
390
+ ],
391
+ 2112
392
+ /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
393
+ )) : node.type === "inlineCode" ? (_openBlock2(), _createElementBlock2(
394
+ _Fragment2,
395
+ { key: 4 },
396
+ [
397
+ _createCommentVNode2(" \u884C\u5185\u4EE3\u7801 "),
398
+ _createElementVNode2(
399
+ "code",
400
+ _hoisted_12,
401
+ _toDisplayString2(node.value),
402
+ 1
403
+ /* TEXT */
404
+ )
405
+ ],
406
+ 2112
407
+ /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
408
+ )) : node.type === "link" ? (_openBlock2(), _createElementBlock2(
409
+ _Fragment2,
410
+ { key: 5 },
411
+ [
412
+ _createCommentVNode2(" \u94FE\u63A5 "),
413
+ _createElementVNode2("a", {
414
+ href: node.url,
415
+ target: "_blank",
416
+ rel: "noopener"
417
+ }, [
418
+ _createVNode(_component_IncremarkInline, {
419
+ nodes: node.children
420
+ }, null, 8, ["nodes"])
421
+ ], 8, _hoisted_22)
422
+ ],
423
+ 2112
424
+ /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
425
+ )) : node.type === "image" ? (_openBlock2(), _createElementBlock2(
426
+ _Fragment2,
427
+ { key: 6 },
428
+ [
429
+ _createCommentVNode2(" \u56FE\u7247 "),
430
+ _createElementVNode2("img", {
431
+ src: node.url,
432
+ alt: node.alt || "",
433
+ loading: "lazy"
434
+ }, null, 8, _hoisted_32)
435
+ ],
436
+ 2112
437
+ /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
438
+ )) : node.type === "break" ? (_openBlock2(), _createElementBlock2(
439
+ _Fragment2,
440
+ { key: 7 },
441
+ [
442
+ _createCommentVNode2(" \u6362\u884C "),
443
+ _cache[0] || (_cache[0] = _createElementVNode2(
444
+ "br",
445
+ null,
446
+ null,
447
+ -1
448
+ /* CACHED */
449
+ ))
450
+ ],
451
+ 2112
452
+ /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
453
+ )) : node.type === "delete" ? (_openBlock2(), _createElementBlock2(
454
+ _Fragment2,
455
+ { key: 8 },
456
+ [
457
+ _createCommentVNode2(" \u5220\u9664\u7EBF "),
458
+ _createElementVNode2("del", null, [
459
+ _createVNode(_component_IncremarkInline, {
460
+ nodes: node.children
461
+ }, null, 8, ["nodes"])
462
+ ])
463
+ ],
464
+ 2112
465
+ /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
466
+ )) : _createCommentVNode2("v-if", true)
467
+ ],
468
+ 64
469
+ /* STABLE_FRAGMENT */
470
+ );
471
+ }),
472
+ 128
473
+ /* KEYED_FRAGMENT */
474
+ );
475
+ }
476
+
477
+ // src/components/IncremarkInline.vue
478
+ IncremarkInline_default.render = render2;
479
+ IncremarkInline_default.__file = "src/components/IncremarkInline.vue";
480
+ var IncremarkInline_default2 = IncremarkInline_default;
481
+
482
+ // sfc-script:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkHeading.vue?type=script
483
+ var IncremarkHeading_default = /* @__PURE__ */ _defineComponent3({
484
+ __name: "IncremarkHeading",
485
+ props: {
486
+ node: { type: null, required: true }
487
+ },
488
+ setup(__props, { expose: __expose }) {
489
+ __expose();
490
+ const props = __props;
491
+ const tag = computed4(() => `h${props.node.depth}`);
492
+ const __returned__ = { props, tag, IncremarkInline: IncremarkInline_default2 };
493
+ Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
494
+ return __returned__;
495
+ }
496
+ });
497
+
498
+ // sfc-template:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkHeading.vue?type=template
499
+ import { createVNode as _createVNode2, resolveDynamicComponent as _resolveDynamicComponent, withCtx as _withCtx, openBlock as _openBlock3, createBlock as _createBlock } from "vue";
500
+ function render3(_ctx, _cache, $props, $setup, $data, $options) {
501
+ return _openBlock3(), _createBlock(_resolveDynamicComponent($setup.tag), { class: "incremark-heading" }, {
502
+ default: _withCtx(() => [
503
+ _createVNode2($setup["IncremarkInline"], {
504
+ nodes: $props.node.children
505
+ }, null, 8, ["nodes"])
506
+ ]),
507
+ _: 1
508
+ /* STABLE */
509
+ });
510
+ }
511
+
512
+ // src/components/IncremarkHeading.vue
513
+ IncremarkHeading_default.render = render3;
514
+ IncremarkHeading_default.__file = "src/components/IncremarkHeading.vue";
515
+ IncremarkHeading_default.__scopeId = "data-v-56c8779f";
516
+ var IncremarkHeading_default2 = IncremarkHeading_default;
517
+
518
+ // sfc-script:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkParagraph.vue?type=script
519
+ import { defineComponent as _defineComponent4 } from "vue";
520
+ var IncremarkParagraph_default = /* @__PURE__ */ _defineComponent4({
521
+ __name: "IncremarkParagraph",
522
+ props: {
523
+ node: { type: null, required: true }
524
+ },
525
+ setup(__props, { expose: __expose }) {
526
+ __expose();
527
+ const __returned__ = { IncremarkInline: IncremarkInline_default2 };
528
+ Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
529
+ return __returned__;
530
+ }
531
+ });
532
+
533
+ // sfc-template:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkParagraph.vue?type=template
534
+ import { createVNode as _createVNode3, openBlock as _openBlock4, createElementBlock as _createElementBlock3 } from "vue";
535
+ var _hoisted_13 = { class: "incremark-paragraph" };
536
+ function render4(_ctx, _cache, $props, $setup, $data, $options) {
537
+ return _openBlock4(), _createElementBlock3("p", _hoisted_13, [
538
+ _createVNode3($setup["IncremarkInline"], {
539
+ nodes: $props.node.children
540
+ }, null, 8, ["nodes"])
541
+ ]);
542
+ }
543
+
544
+ // src/components/IncremarkParagraph.vue
545
+ IncremarkParagraph_default.render = render4;
546
+ IncremarkParagraph_default.__file = "src/components/IncremarkParagraph.vue";
547
+ IncremarkParagraph_default.__scopeId = "data-v-6fa83031";
548
+ var IncremarkParagraph_default2 = IncremarkParagraph_default;
549
+
550
+ // sfc-script:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkCode.vue?type=script
551
+ import { defineComponent as _defineComponent5 } from "vue";
552
+ import { computed as computed5, ref as ref4, watch as watch2, shallowRef as shallowRef3, onUnmounted as onUnmounted3 } from "vue";
553
+ var IncremarkCode_default = /* @__PURE__ */ _defineComponent5({
554
+ __name: "IncremarkCode",
555
+ props: {
556
+ node: { type: null, required: true },
557
+ theme: { type: String, required: false, default: "github-dark" },
558
+ disableHighlight: { type: Boolean, required: false, default: false },
559
+ mermaidDelay: { type: Number, required: false, default: 500 }
560
+ },
561
+ setup(__props, { expose: __expose }) {
562
+ __expose();
563
+ const props = __props;
564
+ const copied = ref4(false);
565
+ const highlightedHtml = ref4("");
566
+ const isHighlighting = ref4(false);
567
+ const highlightError = ref4(false);
568
+ const mermaidSvg = ref4("");
569
+ const mermaidError = ref4("");
570
+ const mermaidLoading = ref4(false);
571
+ const mermaidRef = shallowRef3(null);
572
+ let mermaidTimer = null;
573
+ const mermaidViewMode = ref4("preview");
574
+ function toggleMermaidView() {
575
+ mermaidViewMode.value = mermaidViewMode.value === "preview" ? "source" : "preview";
576
+ }
577
+ const language = computed5(() => props.node.lang || "text");
578
+ const code = computed5(() => props.node.value);
579
+ const isMermaid = computed5(() => language.value === "mermaid");
580
+ const highlighterRef = shallowRef3(null);
581
+ const loadedLanguages = /* @__PURE__ */ new Set();
582
+ const loadedThemes = /* @__PURE__ */ new Set();
583
+ function scheduleRenderMermaid() {
584
+ if (!isMermaid.value || !code.value) return;
585
+ if (mermaidTimer) {
586
+ clearTimeout(mermaidTimer);
587
+ }
588
+ mermaidLoading.value = true;
589
+ mermaidTimer = setTimeout(() => {
590
+ doRenderMermaid();
591
+ }, props.mermaidDelay);
592
+ }
593
+ async function doRenderMermaid() {
594
+ if (!code.value) return;
595
+ mermaidError.value = "";
596
+ try {
597
+ if (!mermaidRef.value) {
598
+ const mermaidModule = await import("mermaid");
599
+ mermaidRef.value = mermaidModule.default;
600
+ mermaidRef.value.initialize({
601
+ startOnLoad: false,
602
+ theme: "dark",
603
+ securityLevel: "loose"
604
+ });
605
+ }
606
+ const mermaid = mermaidRef.value;
607
+ const id = `mermaid-${Date.now()}-${Math.random().toString(36).slice(2)}`;
608
+ const { svg } = await mermaid.render(id, code.value);
609
+ mermaidSvg.value = svg;
610
+ } catch (e) {
611
+ mermaidError.value = "";
612
+ mermaidSvg.value = "";
613
+ } finally {
614
+ mermaidLoading.value = false;
615
+ }
616
+ }
617
+ onUnmounted3(() => {
618
+ if (mermaidTimer) {
619
+ clearTimeout(mermaidTimer);
620
+ }
621
+ });
622
+ async function highlight() {
623
+ if (isMermaid.value) {
624
+ scheduleRenderMermaid();
625
+ return;
626
+ }
627
+ if (!code.value || props.disableHighlight) {
628
+ highlightedHtml.value = "";
629
+ return;
630
+ }
631
+ isHighlighting.value = true;
632
+ highlightError.value = false;
633
+ try {
634
+ if (!highlighterRef.value) {
635
+ const { createHighlighter } = await import("shiki");
636
+ highlighterRef.value = await createHighlighter({
637
+ themes: [props.theme],
638
+ langs: []
639
+ });
640
+ loadedThemes.add(props.theme);
641
+ }
642
+ const highlighter = highlighterRef.value;
643
+ const lang = language.value;
644
+ if (!loadedLanguages.has(lang) && lang !== "text") {
645
+ try {
646
+ await highlighter.loadLanguage(lang);
647
+ loadedLanguages.add(lang);
648
+ } catch {
649
+ }
650
+ }
651
+ if (!loadedThemes.has(props.theme)) {
652
+ try {
653
+ await highlighter.loadTheme(props.theme);
654
+ loadedThemes.add(props.theme);
655
+ } catch {
656
+ }
657
+ }
658
+ const html = highlighter.codeToHtml(code.value, {
659
+ lang: loadedLanguages.has(lang) ? lang : "text",
660
+ theme: loadedThemes.has(props.theme) ? props.theme : "github-dark"
661
+ });
662
+ highlightedHtml.value = html;
663
+ } catch (e) {
664
+ highlightError.value = true;
665
+ highlightedHtml.value = "";
666
+ } finally {
667
+ isHighlighting.value = false;
668
+ }
669
+ }
670
+ watch2([code, () => props.theme, isMermaid], highlight, { immediate: true });
671
+ async function copyCode() {
672
+ try {
673
+ await navigator.clipboard.writeText(code.value);
674
+ copied.value = true;
675
+ setTimeout(() => {
676
+ copied.value = false;
677
+ }, 2e3);
678
+ } catch {
679
+ }
680
+ }
681
+ const __returned__ = { props, copied, highlightedHtml, isHighlighting, highlightError, mermaidSvg, mermaidError, mermaidLoading, mermaidRef, get mermaidTimer() {
682
+ return mermaidTimer;
683
+ }, set mermaidTimer(v) {
684
+ mermaidTimer = v;
685
+ }, mermaidViewMode, toggleMermaidView, language, code, isMermaid, highlighterRef, loadedLanguages, loadedThemes, scheduleRenderMermaid, doRenderMermaid, highlight, copyCode };
686
+ Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
687
+ return __returned__;
688
+ }
689
+ });
690
+
691
+ // sfc-template:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkCode.vue?type=template
692
+ import { createCommentVNode as _createCommentVNode3, createElementVNode as _createElementVNode3, toDisplayString as _toDisplayString3, openBlock as _openBlock5, createElementBlock as _createElementBlock4, Fragment as _Fragment3 } from "vue";
693
+ var _hoisted_14 = {
694
+ key: 0,
695
+ class: "incremark-mermaid"
696
+ };
697
+ var _hoisted_23 = { class: "mermaid-header" };
698
+ var _hoisted_33 = { class: "mermaid-actions" };
699
+ var _hoisted_42 = ["disabled"];
700
+ var _hoisted_52 = { class: "mermaid-content" };
701
+ var _hoisted_62 = {
702
+ key: 0,
703
+ class: "mermaid-loading"
704
+ };
705
+ var _hoisted_7 = { class: "mermaid-source-code" };
706
+ var _hoisted_8 = { class: "mermaid-source-code" };
707
+ var _hoisted_9 = ["innerHTML"];
708
+ var _hoisted_10 = { class: "mermaid-source-code" };
709
+ var _hoisted_11 = { class: "incremark-code" };
710
+ var _hoisted_122 = { class: "code-header" };
711
+ var _hoisted_132 = { class: "language" };
712
+ var _hoisted_142 = { class: "code-content" };
713
+ var _hoisted_15 = {
714
+ key: 0,
715
+ class: "code-loading"
716
+ };
717
+ var _hoisted_16 = ["innerHTML"];
718
+ var _hoisted_17 = { class: "code-fallback" };
719
+ function render5(_ctx, _cache, $props, $setup, $data, $options) {
720
+ return _openBlock5(), _createElementBlock4(
721
+ _Fragment3,
722
+ null,
723
+ [
724
+ _createCommentVNode3(" Mermaid \u56FE\u8868 "),
725
+ $setup.isMermaid ? (_openBlock5(), _createElementBlock4("div", _hoisted_14, [
726
+ _createElementVNode3("div", _hoisted_23, [
727
+ _cache[0] || (_cache[0] = _createElementVNode3(
728
+ "span",
729
+ { class: "language" },
730
+ "MERMAID",
731
+ -1
732
+ /* CACHED */
733
+ )),
734
+ _createElementVNode3("div", _hoisted_33, [
735
+ _createElementVNode3("button", {
736
+ class: "view-toggle",
737
+ onClick: $setup.toggleMermaidView,
738
+ type: "button",
739
+ disabled: !$setup.mermaidSvg
740
+ }, _toDisplayString3($setup.mermaidViewMode === "preview" ? "\u6E90\u7801" : "\u9884\u89C8"), 9, _hoisted_42),
741
+ _createElementVNode3(
742
+ "button",
743
+ {
744
+ class: "copy-btn",
745
+ onClick: $setup.copyCode,
746
+ type: "button"
747
+ },
748
+ _toDisplayString3($setup.copied ? "\u2713 \u5DF2\u590D\u5236" : "\u590D\u5236"),
749
+ 1
750
+ /* TEXT */
751
+ )
752
+ ])
753
+ ]),
754
+ _createElementVNode3("div", _hoisted_52, [
755
+ _createCommentVNode3(" \u52A0\u8F7D\u4E2D "),
756
+ $setup.mermaidLoading && !$setup.mermaidSvg ? (_openBlock5(), _createElementBlock4("div", _hoisted_62, [
757
+ _createElementVNode3(
758
+ "pre",
759
+ _hoisted_7,
760
+ _toDisplayString3($setup.code),
761
+ 1
762
+ /* TEXT */
763
+ )
764
+ ])) : $setup.mermaidViewMode === "source" ? (_openBlock5(), _createElementBlock4(
765
+ _Fragment3,
766
+ { key: 1 },
767
+ [
768
+ _createCommentVNode3(" \u6E90\u7801\u6A21\u5F0F "),
769
+ _createElementVNode3(
770
+ "pre",
771
+ _hoisted_8,
772
+ _toDisplayString3($setup.code),
773
+ 1
774
+ /* TEXT */
775
+ )
776
+ ],
777
+ 2112
778
+ /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
779
+ )) : $setup.mermaidSvg ? (_openBlock5(), _createElementBlock4(
780
+ _Fragment3,
781
+ { key: 2 },
782
+ [
783
+ _createCommentVNode3(" \u9884\u89C8\u6A21\u5F0F "),
784
+ _createElementVNode3("div", {
785
+ innerHTML: $setup.mermaidSvg,
786
+ class: "mermaid-svg"
787
+ }, null, 8, _hoisted_9)
788
+ ],
789
+ 2112
790
+ /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
791
+ )) : (_openBlock5(), _createElementBlock4(
792
+ _Fragment3,
793
+ { key: 3 },
794
+ [
795
+ _createCommentVNode3(" \u65E0\u6CD5\u6E32\u67D3\u65F6\u663E\u793A\u6E90\u7801 "),
796
+ _createElementVNode3(
797
+ "pre",
798
+ _hoisted_10,
799
+ _toDisplayString3($setup.code),
800
+ 1
801
+ /* TEXT */
802
+ )
803
+ ],
804
+ 2112
805
+ /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
806
+ ))
807
+ ])
808
+ ])) : (_openBlock5(), _createElementBlock4(
809
+ _Fragment3,
810
+ { key: 1 },
811
+ [
812
+ _createCommentVNode3(" \u666E\u901A\u4EE3\u7801\u5757 "),
813
+ _createElementVNode3("div", _hoisted_11, [
814
+ _createElementVNode3("div", _hoisted_122, [
815
+ _createElementVNode3(
816
+ "span",
817
+ _hoisted_132,
818
+ _toDisplayString3($setup.language),
819
+ 1
820
+ /* TEXT */
821
+ ),
822
+ _createElementVNode3(
823
+ "button",
824
+ {
825
+ class: "copy-btn",
826
+ onClick: $setup.copyCode,
827
+ type: "button"
828
+ },
829
+ _toDisplayString3($setup.copied ? "\u2713 \u5DF2\u590D\u5236" : "\u590D\u5236"),
830
+ 1
831
+ /* TEXT */
832
+ )
833
+ ]),
834
+ _createElementVNode3("div", _hoisted_142, [
835
+ _createCommentVNode3(" \u6B63\u5728\u52A0\u8F7D\u9AD8\u4EAE "),
836
+ $setup.isHighlighting && !$setup.highlightedHtml ? (_openBlock5(), _createElementBlock4("div", _hoisted_15, [
837
+ _createElementVNode3("pre", null, [
838
+ _createElementVNode3(
839
+ "code",
840
+ null,
841
+ _toDisplayString3($setup.code),
842
+ 1
843
+ /* TEXT */
844
+ )
845
+ ])
846
+ ])) : $setup.highlightedHtml ? (_openBlock5(), _createElementBlock4(
847
+ _Fragment3,
848
+ { key: 1 },
849
+ [
850
+ _createCommentVNode3(" \u9AD8\u4EAE\u540E\u7684\u4EE3\u7801 "),
851
+ _createElementVNode3("div", {
852
+ innerHTML: $setup.highlightedHtml,
853
+ class: "shiki-wrapper"
854
+ }, null, 8, _hoisted_16)
855
+ ],
856
+ 2112
857
+ /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
858
+ )) : (_openBlock5(), _createElementBlock4(
859
+ _Fragment3,
860
+ { key: 2 },
861
+ [
862
+ _createCommentVNode3(" \u56DE\u9000\uFF1A\u65E0\u9AD8\u4EAE "),
863
+ _createElementVNode3("pre", _hoisted_17, [
864
+ _createElementVNode3(
865
+ "code",
866
+ null,
867
+ _toDisplayString3($setup.code),
868
+ 1
869
+ /* TEXT */
870
+ )
871
+ ])
872
+ ],
873
+ 2112
874
+ /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
875
+ ))
876
+ ])
877
+ ])
878
+ ],
879
+ 2112
880
+ /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
881
+ ))
882
+ ],
883
+ 2112
884
+ /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
885
+ );
886
+ }
887
+
888
+ // src/components/IncremarkCode.vue
889
+ IncremarkCode_default.render = render5;
890
+ IncremarkCode_default.__file = "src/components/IncremarkCode.vue";
891
+ IncremarkCode_default.__scopeId = "data-v-c48b1022";
892
+ var IncremarkCode_default2 = IncremarkCode_default;
893
+
894
+ // sfc-script:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkList.vue?type=script
895
+ import { defineComponent as _defineComponent6 } from "vue";
896
+ import { computed as computed6 } from "vue";
897
+ var IncremarkList_default = /* @__PURE__ */ _defineComponent6({
898
+ __name: "IncremarkList",
899
+ props: {
900
+ node: { type: null, required: true }
901
+ },
902
+ setup(__props, { expose: __expose }) {
903
+ __expose();
904
+ const props = __props;
905
+ const tag = computed6(() => props.node.ordered ? "ol" : "ul");
906
+ function getItemContent(item) {
907
+ const firstChild = item.children[0];
908
+ if (firstChild?.type === "paragraph") {
909
+ return firstChild.children;
910
+ }
911
+ return [];
912
+ }
913
+ const __returned__ = { props, tag, getItemContent, IncremarkInline: IncremarkInline_default2 };
914
+ Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
915
+ return __returned__;
916
+ }
917
+ });
918
+
919
+ // sfc-template:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkList.vue?type=template
920
+ import { renderList as _renderList2, Fragment as _Fragment4, openBlock as _openBlock6, createElementBlock as _createElementBlock5, createElementVNode as _createElementVNode4, createVNode as _createVNode4, createBlock as _createBlock2, normalizeClass as _normalizeClass, resolveDynamicComponent as _resolveDynamicComponent2, withCtx as _withCtx2 } from "vue";
921
+ var _hoisted_18 = {
922
+ key: 0,
923
+ class: "task-label"
924
+ };
925
+ var _hoisted_24 = ["checked"];
926
+ var _hoisted_34 = { class: "task-content" };
927
+ function render6(_ctx, _cache, $props, $setup, $data, $options) {
928
+ return _openBlock6(), _createBlock2(_resolveDynamicComponent2($setup.tag), {
929
+ class: _normalizeClass(["incremark-list", { "task-list": $props.node.children.some((item) => item.checked !== null && item.checked !== void 0) }])
930
+ }, {
931
+ default: _withCtx2(() => [
932
+ (_openBlock6(true), _createElementBlock5(
933
+ _Fragment4,
934
+ null,
935
+ _renderList2($props.node.children, (item, index) => {
936
+ return _openBlock6(), _createElementBlock5(
937
+ "li",
938
+ {
939
+ key: index,
940
+ class: _normalizeClass(["incremark-list-item", { "task-item": item.checked !== null && item.checked !== void 0 }])
941
+ },
942
+ [
943
+ item.checked !== null && item.checked !== void 0 ? (_openBlock6(), _createElementBlock5("label", _hoisted_18, [
944
+ _createElementVNode4("input", {
945
+ type: "checkbox",
946
+ checked: item.checked,
947
+ disabled: "",
948
+ class: "checkbox"
949
+ }, null, 8, _hoisted_24),
950
+ _createElementVNode4("span", _hoisted_34, [
951
+ _createVNode4($setup["IncremarkInline"], {
952
+ nodes: $setup.getItemContent(item)
953
+ }, null, 8, ["nodes"])
954
+ ])
955
+ ])) : (_openBlock6(), _createBlock2($setup["IncremarkInline"], {
956
+ key: 1,
957
+ nodes: $setup.getItemContent(item)
958
+ }, null, 8, ["nodes"]))
959
+ ],
960
+ 2
961
+ /* CLASS */
962
+ );
963
+ }),
964
+ 128
965
+ /* KEYED_FRAGMENT */
966
+ ))
967
+ ]),
968
+ _: 1
969
+ /* STABLE */
970
+ }, 8, ["class"]);
971
+ }
972
+
973
+ // src/components/IncremarkList.vue
974
+ IncremarkList_default.render = render6;
975
+ IncremarkList_default.__file = "src/components/IncremarkList.vue";
976
+ IncremarkList_default.__scopeId = "data-v-0778ccea";
977
+ var IncremarkList_default2 = IncremarkList_default;
978
+
979
+ // sfc-script:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkTable.vue?type=script
980
+ import { defineComponent as _defineComponent7 } from "vue";
981
+ var IncremarkTable_default = /* @__PURE__ */ _defineComponent7({
982
+ __name: "IncremarkTable",
983
+ props: {
984
+ node: { type: null, required: true }
985
+ },
986
+ setup(__props, { expose: __expose }) {
987
+ __expose();
988
+ function getCellContent(cell) {
989
+ return cell.children;
990
+ }
991
+ const __returned__ = { getCellContent, IncremarkInline: IncremarkInline_default2 };
992
+ Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
993
+ return __returned__;
994
+ }
995
+ });
996
+
997
+ // sfc-template:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkTable.vue?type=template
998
+ import { renderList as _renderList3, Fragment as _Fragment5, openBlock as _openBlock7, createElementBlock as _createElementBlock6, createVNode as _createVNode5, normalizeStyle as _normalizeStyle, createCommentVNode as _createCommentVNode5, createElementVNode as _createElementVNode5 } from "vue";
999
+ var _hoisted_19 = { class: "incremark-table-wrapper" };
1000
+ var _hoisted_25 = { class: "incremark-table" };
1001
+ var _hoisted_35 = { key: 0 };
1002
+ function render7(_ctx, _cache, $props, $setup, $data, $options) {
1003
+ return _openBlock7(), _createElementBlock6("div", _hoisted_19, [
1004
+ _createElementVNode5("table", _hoisted_25, [
1005
+ _createElementVNode5("thead", null, [
1006
+ $props.node.children[0] ? (_openBlock7(), _createElementBlock6("tr", _hoisted_35, [
1007
+ (_openBlock7(true), _createElementBlock6(
1008
+ _Fragment5,
1009
+ null,
1010
+ _renderList3($props.node.children[0].children, (cell, cellIndex) => {
1011
+ return _openBlock7(), _createElementBlock6(
1012
+ "th",
1013
+ {
1014
+ key: cellIndex,
1015
+ style: _normalizeStyle({ textAlign: $props.node.align?.[cellIndex] || "left" })
1016
+ },
1017
+ [
1018
+ _createVNode5($setup["IncremarkInline"], {
1019
+ nodes: $setup.getCellContent(cell)
1020
+ }, null, 8, ["nodes"])
1021
+ ],
1022
+ 4
1023
+ /* STYLE */
1024
+ );
1025
+ }),
1026
+ 128
1027
+ /* KEYED_FRAGMENT */
1028
+ ))
1029
+ ])) : _createCommentVNode5("v-if", true)
1030
+ ]),
1031
+ _createElementVNode5("tbody", null, [
1032
+ (_openBlock7(true), _createElementBlock6(
1033
+ _Fragment5,
1034
+ null,
1035
+ _renderList3($props.node.children.slice(1), (row, rowIndex) => {
1036
+ return _openBlock7(), _createElementBlock6("tr", { key: rowIndex }, [
1037
+ (_openBlock7(true), _createElementBlock6(
1038
+ _Fragment5,
1039
+ null,
1040
+ _renderList3(row.children, (cell, cellIndex) => {
1041
+ return _openBlock7(), _createElementBlock6(
1042
+ "td",
1043
+ {
1044
+ key: cellIndex,
1045
+ style: _normalizeStyle({ textAlign: $props.node.align?.[cellIndex] || "left" })
1046
+ },
1047
+ [
1048
+ _createVNode5($setup["IncremarkInline"], {
1049
+ nodes: $setup.getCellContent(cell)
1050
+ }, null, 8, ["nodes"])
1051
+ ],
1052
+ 4
1053
+ /* STYLE */
1054
+ );
1055
+ }),
1056
+ 128
1057
+ /* KEYED_FRAGMENT */
1058
+ ))
1059
+ ]);
1060
+ }),
1061
+ 128
1062
+ /* KEYED_FRAGMENT */
1063
+ ))
1064
+ ])
1065
+ ])
1066
+ ]);
1067
+ }
1068
+
1069
+ // src/components/IncremarkTable.vue
1070
+ IncremarkTable_default.render = render7;
1071
+ IncremarkTable_default.__file = "src/components/IncremarkTable.vue";
1072
+ IncremarkTable_default.__scopeId = "data-v-7aea7ba6";
1073
+ var IncremarkTable_default2 = IncremarkTable_default;
1074
+
1075
+ // sfc-script:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkBlockquote.vue?type=script
1076
+ import { defineComponent as _defineComponent8 } from "vue";
1077
+ var IncremarkBlockquote_default = /* @__PURE__ */ _defineComponent8({
1078
+ __name: "IncremarkBlockquote",
1079
+ props: {
1080
+ node: { type: null, required: true }
1081
+ },
1082
+ setup(__props, { expose: __expose }) {
1083
+ __expose();
1084
+ const __returned__ = { IncremarkParagraph: IncremarkParagraph_default2 };
1085
+ Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
1086
+ return __returned__;
1087
+ }
1088
+ });
1089
+
1090
+ // sfc-template:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkBlockquote.vue?type=template
1091
+ import { renderList as _renderList4, Fragment as _Fragment6, openBlock as _openBlock8, createElementBlock as _createElementBlock7, createBlock as _createBlock3, toDisplayString as _toDisplayString4 } from "vue";
1092
+ var _hoisted_110 = { class: "incremark-blockquote" };
1093
+ var _hoisted_26 = {
1094
+ key: 1,
1095
+ class: "unknown-child"
1096
+ };
1097
+ function render8(_ctx, _cache, $props, $setup, $data, $options) {
1098
+ return _openBlock8(), _createElementBlock7("blockquote", _hoisted_110, [
1099
+ (_openBlock8(true), _createElementBlock7(
1100
+ _Fragment6,
1101
+ null,
1102
+ _renderList4($props.node.children, (child, index) => {
1103
+ return _openBlock8(), _createElementBlock7(
1104
+ _Fragment6,
1105
+ { key: index },
1106
+ [
1107
+ child.type === "paragraph" ? (_openBlock8(), _createBlock3($setup["IncremarkParagraph"], {
1108
+ key: 0,
1109
+ node: child
1110
+ }, null, 8, ["node"])) : (_openBlock8(), _createElementBlock7(
1111
+ "div",
1112
+ _hoisted_26,
1113
+ _toDisplayString4(child.type),
1114
+ 1
1115
+ /* TEXT */
1116
+ ))
1117
+ ],
1118
+ 64
1119
+ /* STABLE_FRAGMENT */
1120
+ );
1121
+ }),
1122
+ 128
1123
+ /* KEYED_FRAGMENT */
1124
+ ))
1125
+ ]);
1126
+ }
1127
+
1128
+ // src/components/IncremarkBlockquote.vue
1129
+ IncremarkBlockquote_default.render = render8;
1130
+ IncremarkBlockquote_default.__file = "src/components/IncremarkBlockquote.vue";
1131
+ IncremarkBlockquote_default.__scopeId = "data-v-67363f13";
1132
+ var IncremarkBlockquote_default2 = IncremarkBlockquote_default;
1133
+
1134
+ // sfc-script:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkThematicBreak.vue?type=script
1135
+ import { defineComponent as _defineComponent9 } from "vue";
1136
+ var IncremarkThematicBreak_default = /* @__PURE__ */ _defineComponent9({
1137
+ __name: "IncremarkThematicBreak",
1138
+ setup(__props, { expose: __expose }) {
1139
+ __expose();
1140
+ const __returned__ = {};
1141
+ Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
1142
+ return __returned__;
1143
+ }
1144
+ });
1145
+
1146
+ // sfc-template:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkThematicBreak.vue?type=template
1147
+ import { openBlock as _openBlock9, createElementBlock as _createElementBlock8 } from "vue";
1148
+ var _hoisted_111 = { class: "incremark-hr" };
1149
+ function render9(_ctx, _cache, $props, $setup, $data, $options) {
1150
+ return _openBlock9(), _createElementBlock8("hr", _hoisted_111);
1151
+ }
1152
+
1153
+ // src/components/IncremarkThematicBreak.vue
1154
+ IncremarkThematicBreak_default.render = render9;
1155
+ IncremarkThematicBreak_default.__file = "src/components/IncremarkThematicBreak.vue";
1156
+ IncremarkThematicBreak_default.__scopeId = "data-v-cb316429";
1157
+ var IncremarkThematicBreak_default2 = IncremarkThematicBreak_default;
1158
+
1159
+ // sfc-script:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkDefault.vue?type=script
1160
+ import { defineComponent as _defineComponent10 } from "vue";
1161
+ var IncremarkDefault_default = /* @__PURE__ */ _defineComponent10({
1162
+ __name: "IncremarkDefault",
1163
+ props: {
1164
+ node: { type: null, required: true }
1165
+ },
1166
+ setup(__props, { expose: __expose }) {
1167
+ __expose();
1168
+ const __returned__ = {};
1169
+ Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
1170
+ return __returned__;
1171
+ }
1172
+ });
1173
+
1174
+ // sfc-template:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkDefault.vue?type=template
1175
+ import { toDisplayString as _toDisplayString5, createElementVNode as _createElementVNode6, openBlock as _openBlock10, createElementBlock as _createElementBlock9 } from "vue";
1176
+ var _hoisted_112 = { class: "incremark-default" };
1177
+ var _hoisted_27 = { class: "type-badge" };
1178
+ function render10(_ctx, _cache, $props, $setup, $data, $options) {
1179
+ return _openBlock10(), _createElementBlock9("div", _hoisted_112, [
1180
+ _createElementVNode6(
1181
+ "span",
1182
+ _hoisted_27,
1183
+ _toDisplayString5($props.node.type),
1184
+ 1
1185
+ /* TEXT */
1186
+ ),
1187
+ _createElementVNode6(
1188
+ "pre",
1189
+ null,
1190
+ _toDisplayString5(JSON.stringify($props.node, null, 2)),
1191
+ 1
1192
+ /* TEXT */
1193
+ )
1194
+ ]);
1195
+ }
1196
+
1197
+ // src/components/IncremarkDefault.vue
1198
+ IncremarkDefault_default.render = render10;
1199
+ IncremarkDefault_default.__file = "src/components/IncremarkDefault.vue";
1200
+ IncremarkDefault_default.__scopeId = "data-v-5542d517";
1201
+ var IncremarkDefault_default2 = IncremarkDefault_default;
1202
+
1203
+ // sfc-script:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/Incremark.vue?type=script
1204
+ var Incremark_default = /* @__PURE__ */ _defineComponent11({
1205
+ __name: "Incremark",
1206
+ props: {
1207
+ blocks: { type: Array, required: true },
1208
+ components: { type: Object, required: false, default: () => ({}) },
1209
+ pendingClass: { type: String, required: false, default: "incremark-pending" },
1210
+ completedClass: { type: String, required: false, default: "incremark-completed" },
1211
+ showBlockStatus: { type: Boolean, required: false, default: false }
1212
+ },
1213
+ setup(__props, { expose: __expose }) {
1214
+ __expose();
1215
+ const props = __props;
1216
+ const defaultComponents = {
1217
+ heading: IncremarkHeading_default2,
1218
+ paragraph: IncremarkParagraph_default2,
1219
+ code: IncremarkCode_default2,
1220
+ list: IncremarkList_default2,
1221
+ table: IncremarkTable_default2,
1222
+ blockquote: IncremarkBlockquote_default2,
1223
+ thematicBreak: IncremarkThematicBreak_default2,
1224
+ math: IncremarkMath_default2,
1225
+ inlineMath: IncremarkMath_default2
1226
+ };
1227
+ const mergedComponents = computed7(() => ({
1228
+ ...defaultComponents,
1229
+ ...props.components
1230
+ }));
1231
+ function getComponent(type) {
1232
+ return mergedComponents.value[type] || props.components?.default || IncremarkDefault_default2;
1233
+ }
1234
+ const __returned__ = { props, defaultComponents, mergedComponents, getComponent };
1235
+ Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
1236
+ return __returned__;
1237
+ }
1238
+ });
1239
+
1240
+ // sfc-template:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/Incremark.vue?type=template
1241
+ import { renderList as _renderList5, Fragment as _Fragment7, openBlock as _openBlock11, createElementBlock as _createElementBlock10, resolveDynamicComponent as _resolveDynamicComponent3, createBlock as _createBlock4, normalizeClass as _normalizeClass2, TransitionGroup as _TransitionGroup, withCtx as _withCtx3, createVNode as _createVNode6 } from "vue";
1242
+ var _hoisted_113 = { class: "incremark" };
1243
+ function render11(_ctx, _cache, $props, $setup, $data, $options) {
1244
+ return _openBlock11(), _createElementBlock10("div", _hoisted_113, [
1245
+ _createVNode6(_TransitionGroup, { name: "incremark-fade" }, {
1246
+ default: _withCtx3(() => [
1247
+ (_openBlock11(true), _createElementBlock10(
1248
+ _Fragment7,
1249
+ null,
1250
+ _renderList5($props.blocks, (block) => {
1251
+ return _openBlock11(), _createElementBlock10(
1252
+ "div",
1253
+ {
1254
+ key: block.stableId,
1255
+ class: _normalizeClass2([
1256
+ "incremark-block",
1257
+ block.status === "completed" ? $props.completedClass : $props.pendingClass,
1258
+ { "incremark-show-status": $props.showBlockStatus }
1259
+ ])
1260
+ },
1261
+ [
1262
+ (_openBlock11(), _createBlock4(_resolveDynamicComponent3($setup.getComponent(block.node.type)), {
1263
+ node: block.node
1264
+ }, null, 8, ["node"]))
1265
+ ],
1266
+ 2
1267
+ /* CLASS */
1268
+ );
1269
+ }),
1270
+ 128
1271
+ /* KEYED_FRAGMENT */
1272
+ ))
1273
+ ]),
1274
+ _: 1
1275
+ /* STABLE */
1276
+ })
1277
+ ]);
1278
+ }
1279
+
1280
+ // src/components/Incremark.vue
1281
+ Incremark_default.render = render11;
1282
+ Incremark_default.__file = "src/components/Incremark.vue";
1283
+ Incremark_default.__scopeId = "data-v-5966b843";
1284
+ var Incremark_default2 = Incremark_default;
1285
+
1286
+ // sfc-script:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkRenderer.vue?type=script
1287
+ import { defineComponent as _defineComponent12 } from "vue";
1288
+ var IncremarkRenderer_default = /* @__PURE__ */ _defineComponent12({
1289
+ __name: "IncremarkRenderer",
1290
+ props: {
1291
+ node: { type: null, required: true }
1292
+ },
1293
+ setup(__props, { expose: __expose }) {
1294
+ __expose();
1295
+ const componentMap = {
1296
+ heading: IncremarkHeading_default2,
1297
+ paragraph: IncremarkParagraph_default2,
1298
+ code: IncremarkCode_default2,
1299
+ list: IncremarkList_default2,
1300
+ table: IncremarkTable_default2,
1301
+ blockquote: IncremarkBlockquote_default2,
1302
+ thematicBreak: IncremarkThematicBreak_default2,
1303
+ math: IncremarkMath_default2,
1304
+ inlineMath: IncremarkMath_default2
1305
+ };
1306
+ function getComponent(type) {
1307
+ return componentMap[type] || IncremarkDefault_default2;
1308
+ }
1309
+ const __returned__ = { componentMap, getComponent };
1310
+ Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
1311
+ return __returned__;
1312
+ }
1313
+ });
1314
+
1315
+ // sfc-template:/Users/yishuai/develop/ai/markdown/packages/vue/src/components/IncremarkRenderer.vue?type=template
1316
+ import { resolveDynamicComponent as _resolveDynamicComponent4, openBlock as _openBlock12, createBlock as _createBlock5 } from "vue";
1317
+ function render12(_ctx, _cache, $props, $setup, $data, $options) {
1318
+ return _openBlock12(), _createBlock5(_resolveDynamicComponent4($setup.getComponent($props.node.type)), { node: $props.node }, null, 8, ["node"]);
1319
+ }
1320
+
1321
+ // src/components/IncremarkRenderer.vue
1322
+ IncremarkRenderer_default.render = render12;
1323
+ IncremarkRenderer_default.__file = "src/components/IncremarkRenderer.vue";
1324
+ var IncremarkRenderer_default2 = IncremarkRenderer_default;
1325
+ export {
1326
+ Incremark_default2 as Incremark,
1327
+ IncremarkBlockquote_default2 as IncremarkBlockquote,
1328
+ IncremarkCode_default2 as IncremarkCode,
1329
+ IncremarkDefault_default2 as IncremarkDefault,
1330
+ IncremarkHeading_default2 as IncremarkHeading,
1331
+ IncremarkInline_default2 as IncremarkInline,
1332
+ IncremarkList_default2 as IncremarkList,
1333
+ IncremarkMath_default2 as IncremarkMath,
1334
+ IncremarkParagraph_default2 as IncremarkParagraph,
1335
+ IncremarkRenderer_default2 as IncremarkRenderer,
1336
+ IncremarkTable_default2 as IncremarkTable,
1337
+ IncremarkThematicBreak_default2 as IncremarkThematicBreak,
1338
+ useDevTools,
1339
+ useIncremark,
1340
+ useStreamRenderer
1341
+ };
1342
+ //# sourceMappingURL=index.js.map