vue-stream-markdown 0.1.1 → 0.1.3

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.
Files changed (72) hide show
  1. package/README.md +9 -0
  2. package/dist/button-2wMU7qkH.js +5 -0
  3. package/dist/{button-dU2iYZBS.js → button-CJyeXWq2.js} +1 -1
  4. package/dist/{code-BfJ58lYO.js → code-CJ4tMt6L.js} +8 -8
  5. package/dist/code-block-BucFZooo.js +9 -0
  6. package/dist/{code-block-CZHD64ft.js → code-block-CQ4lgva1.js} +13 -17
  7. package/dist/{composables-BwAY_BDJ.js → composables-Cj6_jbwr.js} +54 -33
  8. package/dist/dropdown-dsCfq0Hl.js +5 -0
  9. package/dist/error-component-B0mmLhh6.js +4 -0
  10. package/dist/{error-component-CiIR_1Cg.js → error-component-ClGLfmwy.js} +1 -1
  11. package/dist/{image-BporCeem.js → image-xeiC5YFM.js} +4 -4
  12. package/dist/index.css +627 -17
  13. package/dist/index.d.ts +34 -4
  14. package/dist/index.js +63 -17
  15. package/dist/{inline-math-BfG4600m.js → inline-math-C2NUSasr.js} +12 -15
  16. package/dist/{link-D-OnakwP.js → link-BceXudNH.js} +2 -2
  17. package/dist/{math-CvKkCYb9.js → math-DXOLG3Xg.js} +12 -15
  18. package/dist/{mermaid-FgnWaZtT.js → mermaid-CU4hpB6S.js} +5 -5
  19. package/dist/{previewers-CoU4RlpQ.js → previewers-qHMi6xZ3.js} +1 -1
  20. package/dist/segmented-BeHqXuFx.js +6 -0
  21. package/dist/{segmented-Baxxk3UJ.js → segmented-CF6exjdD.js} +1 -1
  22. package/dist/{shiki-BHOZKGKS.js → shiki-BlfngIRi.js} +9 -14
  23. package/dist/{renderer-CZ41eK_V.js → shiki-token-renderer-D164wC7Y.js} +10 -23
  24. package/dist/{table-B__TdLr7.js → table-C5VHgkTQ.js} +3 -3
  25. package/dist/tooltip-BzVZqo7w.js +4 -0
  26. package/dist/{tooltip-CA6Kp7Ek.js → tooltip-gxsqaBNg.js} +1 -1
  27. package/dist/vanilla-CKj7EQLx.js +4 -0
  28. package/dist/vanilla-D5DzB31q.js +39 -0
  29. package/dist/zoom-container-CwEDlKRx.js +6 -0
  30. package/dist/{zoom-container-Dlqv-z-t.js → zoom-container-D_fBClW2.js} +8 -10
  31. package/package.json +2 -1
  32. package/dist/blockquote-DFANmQEB.css +0 -13
  33. package/dist/button-Bz0s_F3s.js +0 -5
  34. package/dist/button-C12sn_G5.css +0 -24
  35. package/dist/code-NAXHb0o2.css +0 -4
  36. package/dist/code-block-BFUXyGQH.js +0 -9
  37. package/dist/code-block-Bv8s2E8I.css +0 -62
  38. package/dist/delete-Ci7IJDoT.css +0 -4
  39. package/dist/dropdown-RWgcV-8w.js +0 -5
  40. package/dist/emphasis-BseYvUae.css +0 -4
  41. package/dist/error-component-BIPPxd-M.css +0 -21
  42. package/dist/error-component-CR9t-T1D.js +0 -4
  43. package/dist/heading-KxpVX3-u.css +0 -30
  44. package/dist/html-C5_wsY4-.css +0 -5
  45. package/dist/image-B77jbMUB.css +0 -46
  46. package/dist/inline-code-Eo65bj3F.css +0 -12
  47. package/dist/inline-math-DgBjIrPT.css +0 -7
  48. package/dist/link-BA_j8di3.css +0 -12
  49. package/dist/list-CcVBNIly.css +0 -11
  50. package/dist/list-item-Y6Cphjrp.css +0 -15
  51. package/dist/math-Cq89zpB6.css +0 -11
  52. package/dist/mermaid-C9ZUejzK.css +0 -8
  53. package/dist/modal-CWdgVkH_.css +0 -48
  54. package/dist/node-list-C9O-A1aZ.css +0 -11
  55. package/dist/paragraph-wRNmMYAI.css +0 -6
  56. package/dist/segmented-C0uEAYuJ.js +0 -6
  57. package/dist/segmented-DLmggl-e.css +0 -8
  58. package/dist/shiki-CMgjqKKu.css +0 -20
  59. package/dist/spin-B2FU3Sx6.css +0 -19
  60. package/dist/strong-DpeQmP2J.css +0 -4
  61. package/dist/table-BWn_kG8W.css +0 -19
  62. package/dist/table-CJzlDdmv.css +0 -34
  63. package/dist/text-D098eCyi.css +0 -5
  64. package/dist/thematic-break-C5zxgoE9.css +0 -6
  65. package/dist/tooltip-DAngu9Wp.css +0 -5
  66. package/dist/tooltip-DoIUaZgq.js +0 -4
  67. package/dist/vanilla-BZ8bn5Yz.css +0 -4
  68. package/dist/vanilla-CA9QO96X.js +0 -3
  69. package/dist/vanilla-DkX6g0dm.js +0 -87
  70. package/dist/yaml-McBkYbxI.css +0 -5
  71. package/dist/zoom-container-BENM7TpV.css +0 -28
  72. package/dist/zoom-container-BPbftW_I.js +0 -6
package/README.md CHANGED
@@ -42,6 +42,7 @@ For detailed usage and API documentation, please refer to the [Documentation](ht
42
42
  <script setup lang="ts">
43
43
  import { ref } from 'vue'
44
44
  import { Markdown } from 'vue-stream-markdown'
45
+ import 'vue-stream-markdown/index.css'
45
46
  // If you don't have shadcn CSS variables globally, import the theme
46
47
  import 'vue-stream-markdown/theme.css'
47
48
 
@@ -65,6 +66,14 @@ This project also uses and benefits from:
65
66
  - [KaTeX](https://katex.org/) - Fast math typesetting library for the web
66
67
  - [Remend](https://github.com/vercel/streamdown/tree/main/packages/remend) - Intelligently parses and styles incomplete Markdown blocks
67
68
 
69
+ ### Code Sources
70
+ - [markstream-vue](https://github.com/Simon-He95/markstream-vue) - The original inspiration for learning AST-based custom markdown rendering, and the source of the animation implementation used in this project
71
+ - [ast-explorer](https://github.com/sxzz/ast-explorer) - Learned AST knowledge from this project, and the playground layout inspiration and AST syntax tree filtering code are derived from it
72
+
73
+ ## Acknowledgments
74
+
75
+ I would like to express my sincere gratitude to those who provided guidance and support during the project selection phase and promotion phase of this project. Without their encouragement and support, I would not have been able to complete this work. In particular, the [streamdown](https://streamdown.ai/) community provided excellent code guidance and even helped fix several issues.
76
+
68
77
  ## Troubleshooting
69
78
 
70
79
  The playground supports generating shareable links and provides streaming controls (forward/backward navigation) for debugging streaming rendering issues.
@@ -0,0 +1,5 @@
1
+ import "./composables-Cj6_jbwr.js";
2
+ import "./tooltip-gxsqaBNg.js";
3
+ import { t as button_default } from "./button-CJyeXWq2.js";
4
+
5
+ export { button_default as default };
@@ -1,4 +1,4 @@
1
- import { t as tooltip_default } from "./tooltip-CA6Kp7Ek.js";
1
+ import { t as tooltip_default } from "./tooltip-gxsqaBNg.js";
2
2
  import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, defineComponent, h, normalizeClass, normalizeStyle, openBlock, ref, renderList, renderSlot, resolveDynamicComponent, toDisplayString, withCtx } from "vue";
3
3
 
4
4
  //#region src/components/dropdown.vue?vue&type=script&setup=true&lang.ts
@@ -1,10 +1,10 @@
1
- import "./previewers-CoU4RlpQ.js";
2
- import { i as useShiki } from "./composables-BwAY_BDJ.js";
3
- import "./tooltip-CA6Kp7Ek.js";
4
- import "./button-dU2iYZBS.js";
1
+ import "./previewers-qHMi6xZ3.js";
2
+ import { i as useShiki } from "./composables-Cj6_jbwr.js";
3
+ import "./tooltip-gxsqaBNg.js";
4
+ import "./button-CJyeXWq2.js";
5
5
  import "./modal-CuQR21UD.js";
6
- import { t as code_block_default } from "./code-block-CZHD64ft.js";
7
- import "./segmented-Baxxk3UJ.js";
6
+ import { t as code_block_default } from "./code-block-CQ4lgva1.js";
7
+ import "./segmented-CF6exjdD.js";
8
8
  import { computed, createBlock, createCommentVNode, defineAsyncComponent, defineComponent, mergeProps, normalizeProps, openBlock, resolveDynamicComponent, withCtx } from "vue";
9
9
 
10
10
  //#region src/components/renderers/code/index.vue?vue&type=script&setup=true&lang.ts
@@ -82,8 +82,8 @@ var index_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCo
82
82
  const languageClass = computed(() => `language-${props.node.lang}`);
83
83
  const { installed: hasShiki } = useShiki();
84
84
  const components = {
85
- vanilla: defineAsyncComponent(() => import("./vanilla-CA9QO96X.js")),
86
- shiki: defineAsyncComponent(() => import("./shiki-BHOZKGKS.js"))
85
+ vanilla: defineAsyncComponent(() => import("./vanilla-CKj7EQLx.js")),
86
+ shiki: defineAsyncComponent(() => import("./shiki-BlfngIRi.js"))
87
87
  };
88
88
  const component = computed(() => {
89
89
  if (hasShiki.value) return components.shiki;
@@ -0,0 +1,9 @@
1
+ import "./previewers-qHMi6xZ3.js";
2
+ import "./composables-Cj6_jbwr.js";
3
+ import "./tooltip-gxsqaBNg.js";
4
+ import "./button-CJyeXWq2.js";
5
+ import "./modal-CuQR21UD.js";
6
+ import { t as code_block_default } from "./code-block-CQ4lgva1.js";
7
+ import "./segmented-CF6exjdD.js";
8
+
9
+ export { code_block_default as default };
@@ -1,8 +1,8 @@
1
- import { t as CODE_PREVIEWERS } from "./previewers-CoU4RlpQ.js";
2
- import { B as useContext, I as LANGUAGE_ALIAS, L as LANGUAGE_EXTENSIONS, M as ICONS, O as save, R as LANGUAGE_ICONS, a as useMermaid, u as useI18n, z as useControls } from "./composables-BwAY_BDJ.js";
3
- import { t as button_default } from "./button-dU2iYZBS.js";
1
+ import { t as CODE_PREVIEWERS } from "./previewers-qHMi6xZ3.js";
2
+ import { B as useContext, I as LANGUAGE_ALIAS, L as LANGUAGE_EXTENSIONS, M as ICONS, O as save, R as LANGUAGE_ICONS, V as useCodeOptions, a as useMermaid, u as useI18n, z as useControls } from "./composables-Cj6_jbwr.js";
3
+ import { t as button_default } from "./button-CJyeXWq2.js";
4
4
  import { t as modal_default } from "./modal-CuQR21UD.js";
5
- import { t as segmented_default } from "./segmented-Baxxk3UJ.js";
5
+ import { t as segmented_default } from "./segmented-CF6exjdD.js";
6
6
  import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createVNode, defineAsyncComponent, defineComponent, mergeProps, normalizeClass, normalizeProps, openBlock, ref, renderList, renderSlot, resolveDynamicComponent, toDisplayString, toRefs, unref, useModel, vShow, watch, withCtx, withDirectives } from "vue";
7
7
  import { useClipboard } from "@vueuse/core";
8
8
 
@@ -204,11 +204,11 @@ var index_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCo
204
204
  },
205
205
  setup(__props) {
206
206
  const props = __props;
207
- const { controls, previewers } = toRefs(props);
207
+ const { controls, previewers, codeOptions } = toRefs(props);
208
208
  const { t } = useI18n();
209
209
  const { isControlEnabled } = useControls({ controls });
210
210
  const { installed: hasMermaid } = useMermaid();
211
- const CodeNode = defineAsyncComponent(() => import("./code-BfJ58lYO.js"));
211
+ const CodeNode = defineAsyncComponent(() => import("./code-CJ4tMt6L.js"));
212
212
  const { onCopied } = useContext();
213
213
  const { copy, copied } = useClipboard({ legacy: true });
214
214
  const { saveMermaid } = useMermaid();
@@ -221,13 +221,9 @@ var index_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCo
221
221
  if (LANGUAGE_ALIAS[lang]) return LANGUAGE_ALIAS[lang];
222
222
  return lang;
223
223
  });
224
- const showLanguageIcon = computed(() => {
225
- var _props$codeOptions;
226
- return typeof ((_props$codeOptions = props.codeOptions) === null || _props$codeOptions === void 0 ? void 0 : _props$codeOptions.languageIcon) === "boolean" ? props.codeOptions.languageIcon : true;
227
- });
228
- const showLanguageName = computed(() => {
229
- var _props$codeOptions2;
230
- return typeof ((_props$codeOptions2 = props.codeOptions) === null || _props$codeOptions2 === void 0 ? void 0 : _props$codeOptions2.languageName) === "boolean" ? props.codeOptions.languageName : true;
224
+ const { showLanguageIcon, showLanguageName } = useCodeOptions({
225
+ codeOptions,
226
+ language
231
227
  });
232
228
  const showLanguageTitle = computed(() => showLanguageIcon.value || showLanguageName.value);
233
229
  const showCollapse = computed(() => isControlEnabled("code.collapse"));
@@ -337,8 +333,8 @@ var index_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCo
337
333
  key: 0,
338
334
  icon: icon.value,
339
335
  language: language.value,
340
- "show-icon": showLanguageIcon.value,
341
- "show-name": showLanguageName.value
336
+ "show-icon": unref(showLanguageIcon),
337
+ "show-name": unref(showLanguageName)
342
338
  }, null, 8, [
343
339
  "icon",
344
340
  "language",
@@ -370,8 +366,8 @@ var index_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCo
370
366
  key: 0,
371
367
  icon: icon.value,
372
368
  language: language.value,
373
- "show-icon": showLanguageIcon.value,
374
- "show-name": showLanguageName.value
369
+ "show-icon": unref(showLanguageIcon),
370
+ "show-name": unref(showLanguageName)
375
371
  }, null, 8, [
376
372
  "icon",
377
373
  "language",
@@ -6,6 +6,32 @@ import "tippy.js/themes/light.css";
6
6
  import "tippy.js/dist/border.css";
7
7
  import "tippy.js/dist/svg-arrow.css";
8
8
 
9
+ //#region src/composables/use-code-options.ts
10
+ function useCodeOptions(options) {
11
+ const language = computed(() => unref(options.language) || "");
12
+ const codeOptions = computed(() => unref(options.codeOptions));
13
+ const languageCodeOptions = computed(() => {
14
+ var _codeOptions$value;
15
+ return ((_codeOptions$value = codeOptions.value) === null || _codeOptions$value === void 0 || (_codeOptions$value = _codeOptions$value.language) === null || _codeOptions$value === void 0 ? void 0 : _codeOptions$value[language.value]) ?? codeOptions.value;
16
+ });
17
+ return {
18
+ languageCodeOptions,
19
+ showLanguageIcon: computed(() => {
20
+ var _languageCodeOptions$;
21
+ return typeof ((_languageCodeOptions$ = languageCodeOptions.value) === null || _languageCodeOptions$ === void 0 ? void 0 : _languageCodeOptions$.languageIcon) === "boolean" ? languageCodeOptions.value.languageIcon : true;
22
+ }),
23
+ showLanguageName: computed(() => {
24
+ var _languageCodeOptions$2;
25
+ return typeof ((_languageCodeOptions$2 = languageCodeOptions.value) === null || _languageCodeOptions$2 === void 0 ? void 0 : _languageCodeOptions$2.languageName) === "boolean" ? languageCodeOptions.value.languageName : true;
26
+ }),
27
+ showLineNumbers: computed(() => {
28
+ var _languageCodeOptions$3;
29
+ return typeof ((_languageCodeOptions$3 = languageCodeOptions.value) === null || _languageCodeOptions$3 === void 0 ? void 0 : _languageCodeOptions$3.lineNumbers) === "boolean" ? languageCodeOptions.value.lineNumbers : true;
30
+ })
31
+ };
32
+ }
33
+
34
+ //#endregion
9
35
  //#region src/composables/use-context.ts
10
36
  const CONTEXT_KEY = Symbol("stream-markdown-context");
11
37
  function useContext() {
@@ -624,21 +650,6 @@ const SHADCN_SCHEMAS = [
624
650
 
625
651
  //#endregion
626
652
  //#region src/utils/harden.ts
627
- const safeProtocols = new Set([
628
- "https:",
629
- "http:",
630
- "irc:",
631
- "ircs:",
632
- "mailto:",
633
- "xmpp:",
634
- "blob:"
635
- ]);
636
- const blockedProtocols = new Set([
637
- "javascript:",
638
- "data:",
639
- "file:",
640
- "vbscript:"
641
- ]);
642
653
  function parseUrl(url, defaultOrigin) {
643
654
  if (typeof url !== "string") return null;
644
655
  try {
@@ -649,13 +660,33 @@ function parseUrl(url, defaultOrigin) {
649
660
  } catch {
650
661
  return null;
651
662
  }
663
+ if (url.startsWith("/") || url.startsWith("./") || url.startsWith("../")) try {
664
+ return new URL(url, "http://example.com");
665
+ } catch {
666
+ return null;
667
+ }
652
668
  return null;
653
669
  }
654
670
  }
655
671
  function isPathRelativeUrl(url) {
656
672
  if (typeof url !== "string") return false;
657
- return url.startsWith("/");
673
+ return url.startsWith("/") || url.startsWith("./") || url.startsWith("../");
658
674
  }
675
+ const safeProtocols = new Set([
676
+ "https:",
677
+ "http:",
678
+ "irc:",
679
+ "ircs:",
680
+ "mailto:",
681
+ "xmpp:",
682
+ "blob:"
683
+ ]);
684
+ const blockedProtocols = new Set([
685
+ "javascript:",
686
+ "data:",
687
+ "file:",
688
+ "vbscript:"
689
+ ]);
659
690
  function transformUrl(url, allowedPrefixes, defaultOrigin, allowDataImages = false, isImage = false, allowedProtocols = []) {
660
691
  if (!url) return null;
661
692
  if (typeof url === "string" && url.startsWith("#") && !isImage) try {
@@ -1578,28 +1609,18 @@ function useZoom(options = {}) {
1578
1609
  }
1579
1610
  function startDrag(e) {
1580
1611
  isDragging.value = true;
1581
- if (e instanceof MouseEvent) dragStart.value = {
1612
+ dragStart.value = {
1582
1613
  x: e.clientX - translateX.value,
1583
1614
  y: e.clientY - translateY.value
1584
1615
  };
1585
- else dragStart.value = {
1586
- x: e.touches[0].clientX - translateX.value,
1587
- y: e.touches[0].clientY - translateY.value
1588
- };
1616
+ if (e.pointerType !== "mouse") {
1617
+ if (e.target instanceof HTMLElement) e.target.setPointerCapture(e.pointerId);
1618
+ }
1589
1619
  }
1590
1620
  function onDrag(e) {
1591
1621
  if (!isDragging.value) return;
1592
- let clientX;
1593
- let clientY;
1594
- if (e instanceof MouseEvent) {
1595
- clientX = e.clientX;
1596
- clientY = e.clientY;
1597
- } else {
1598
- clientX = e.touches[0].clientX;
1599
- clientY = e.touches[0].clientY;
1600
- }
1601
- translateX.value = clientX - dragStart.value.x;
1602
- translateY.value = clientY - dragStart.value.y;
1622
+ translateX.value = e.clientX - dragStart.value.x;
1623
+ translateY.value = e.clientY - dragStart.value.y;
1603
1624
  }
1604
1625
  function stopDrag() {
1605
1626
  isDragging.value = false;
@@ -1657,4 +1678,4 @@ function useZoom(options = {}) {
1657
1678
  }
1658
1679
 
1659
1680
  //#endregion
1660
- export { transformUrl as A, useContext as B, findNodeParent as C, flow as D, hasShiki as E, DEFAULT_LIGHT_THEME as F, LANGUAGE_ALIAS as I, LANGUAGE_EXTENSIONS as L, ICONS as M, DEFAULT_HARDEN_OPTIONS as N, save as O, DEFAULT_DARK_THEME as P, LANGUAGE_ICONS as R, findLastLeafNode as S, hasMermaid as T, escapeMarkdownTableCell as _, useMermaid as a, tableDataToMarkdown as b, _defineProperty as c, SUPPORT_LANGUAGES as d, currentLocale as f, useHardenSanitizers as g, localesGlob as h, useShiki as i, SHADCN_SCHEMAS as j, svgToPngBlob as k, useKatex as l, localeMessages as m, useTippy as n, useMathRenderer as o, loadLocaleMessages as p, useTailwindV3Theme as r, throttle as s, useZoom as t, useI18n as u, extractTableDataFromElement as v, hasKatex as w, tableDataToTSV as x, tableDataToCSV as y, useControls as z };
1681
+ export { transformUrl as A, useContext as B, findNodeParent as C, flow as D, hasShiki as E, DEFAULT_LIGHT_THEME as F, LANGUAGE_ALIAS as I, LANGUAGE_EXTENSIONS as L, ICONS as M, DEFAULT_HARDEN_OPTIONS as N, save as O, DEFAULT_DARK_THEME as P, LANGUAGE_ICONS as R, findLastLeafNode as S, hasMermaid as T, useCodeOptions as V, escapeMarkdownTableCell as _, useMermaid as a, tableDataToMarkdown as b, _defineProperty as c, SUPPORT_LANGUAGES as d, currentLocale as f, useHardenSanitizers as g, localesGlob as h, useShiki as i, SHADCN_SCHEMAS as j, svgToPngBlob as k, useKatex as l, localeMessages as m, useTippy as n, useMathRenderer as o, loadLocaleMessages as p, useTailwindV3Theme as r, throttle as s, useZoom as t, useI18n as u, extractTableDataFromElement as v, hasKatex as w, tableDataToTSV as x, tableDataToCSV as y, useControls as z };
@@ -0,0 +1,5 @@
1
+ import "./composables-Cj6_jbwr.js";
2
+ import "./tooltip-gxsqaBNg.js";
3
+ import { n as dropdown_default } from "./button-CJyeXWq2.js";
4
+
5
+ export { dropdown_default as default };
@@ -0,0 +1,4 @@
1
+ import "./composables-Cj6_jbwr.js";
2
+ import { t as error_component_default } from "./error-component-ClGLfmwy.js";
3
+
4
+ export { error_component_default as default };
@@ -1,4 +1,4 @@
1
- import { M as ICONS, u as useI18n } from "./composables-BwAY_BDJ.js";
1
+ import { M as ICONS, u as useI18n } from "./composables-Cj6_jbwr.js";
2
2
  import { computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, defineComponent, openBlock, renderSlot, resolveDynamicComponent, toDisplayString } from "vue";
3
3
 
4
4
  //#region src/components/error-component.vue?vue&type=script&setup=true&lang.ts
@@ -1,7 +1,7 @@
1
- import { M as ICONS, O as save, g as useHardenSanitizers, u as useI18n, z as useControls } from "./composables-BwAY_BDJ.js";
2
- import "./tooltip-CA6Kp7Ek.js";
3
- import { t as button_default } from "./button-dU2iYZBS.js";
4
- import { t as error_component_default } from "./error-component-CiIR_1Cg.js";
1
+ import { M as ICONS, O as save, g as useHardenSanitizers, u as useI18n, z as useControls } from "./composables-Cj6_jbwr.js";
2
+ import "./tooltip-gxsqaBNg.js";
3
+ import { t as button_default } from "./button-CJyeXWq2.js";
4
+ import { t as error_component_default } from "./error-component-ClGLfmwy.js";
5
5
  import { t as spin_default } from "./spin-Ds5W7qC_.js";
6
6
  import { Transition, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, mergeProps, normalizeStyle, openBlock, ref, resolveDynamicComponent, toDisplayString, toRefs, unref, withCtx } from "vue";
7
7