@deot/docs-client 1.1.4 → 1.1.6

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 (79) hide show
  1. package/README.md +86 -1
  2. package/dist/chunks/{compile-Bw7v7QE--Dd1-R95H.js → compile-CM_OyqYN-Bd7bk_OB.js} +1711 -2816
  3. package/dist/chunks/{compiler-sfc.esm-browser-B4_kBkG5.js → compiler-sfc.esm-browser-5dA1IWMJ.js} +185 -305
  4. package/dist/chunks/{script-xKUjE8pf-oF69rg-w.js → css-DleINdoA-FdeEznDX.js} +2669 -2480
  5. package/dist/chunks/{dist-DlmO7OlF.js → dist-B44jICwZ.js} +1 -1
  6. package/dist/chunks/{dist-COjpr4FU.js → dist-DHJhaOSs.js} +2 -2
  7. package/dist/chunks/{dist-C8z9l0mA.js → dist-DSypl37f.js} +1 -1
  8. package/dist/chunks/dist-DWn6r6un.js +76 -0
  9. package/dist/chunks/{dist-CuJyl-ef.js → dist-Wm6vE6kM.js} +8 -8
  10. package/dist/chunks/{echarts-Dk-pu7GM.js → echarts-BBzcOaek.js} +1075 -1290
  11. package/dist/chunks/{html2canvas-Deo0mM5K.js → html2canvas-DoKTvaOT.js} +3 -13
  12. package/dist/chunks/{index.es-UlJ0gfdF.js → index.es-wVPQxEPP.js} +32 -37
  13. package/dist/chunks/{jspdf.es.min-CJc40v7q.js → jspdf.es.min-Zm27YeAg.js} +1080 -1053
  14. package/dist/chunks/{jsx-CwMPlI4_-CAiik-V7.js → jsx-CwMPlI4_-CBhlIHLh.js} +8002 -8541
  15. package/dist/chunks/{jszip.min-BbVwZKYP.js → jszip.min-Da8UgalE.js} +5 -5
  16. package/dist/chunks/{lodash-Cxf6dD_I.js → lodash-CYyW02I7.js} +10 -14
  17. package/dist/chunks/{photoswipe.esm-B0V-xGTB.js → photoswipe.esm-D52MAtDT.js} +11 -38
  18. package/dist/chunks/{purify.es-BiqY1C6m.js → purify.es-DhHsvqCe.js} +1 -23
  19. package/dist/chunks/{vue-router-C0mj8Ot5.js → vue-router-DZ-KfC9f.js} +373 -361
  20. package/dist/chunks/{vue.runtime.esm-bundler-XxHGOLq2.js → vue.runtime.esm-bundler-zZTAiuf6.js} +10 -38
  21. package/dist/eval/chunks/browser-Cmwcvs-d.js +4 -0
  22. package/dist/eval/chunks/chunk-rhk8Qtmk-CUgXtmq_.js +4 -0
  23. package/dist/eval/chunks/compile-CM_OyqYN-Bd7bk_OB.js +7 -0
  24. package/dist/eval/chunks/compiler-sfc.esm-browser-5dA1IWMJ.js +4 -0
  25. package/dist/eval/chunks/css-DleINdoA-FdeEznDX.js +8 -0
  26. package/dist/eval/chunks/dayjs.min-B3g34Qcz.js +4 -0
  27. package/dist/eval/chunks/dist-0ySyXNpo.js +4 -0
  28. package/dist/eval/chunks/dist-B44jICwZ.js +5 -0
  29. package/dist/eval/chunks/dist-BUw25nXJ.js +6 -0
  30. package/dist/eval/chunks/dist-BeOE8qTX.js +4 -0
  31. package/dist/eval/chunks/dist-C3V7reR4.js +4 -0
  32. package/dist/eval/chunks/dist-CI9Lp9Cj.js +4 -0
  33. package/dist/eval/chunks/dist-CQir6D4y.js +5 -0
  34. package/dist/eval/chunks/dist-Cxf7_ocf.js +4 -0
  35. package/dist/eval/chunks/dist-DF4kisl2.js +5 -0
  36. package/dist/eval/chunks/dist-DHJhaOSs.js +5 -0
  37. package/dist/eval/chunks/dist-DLj8yJdm.js +4 -0
  38. package/dist/eval/chunks/dist-DSypl37f.js +5 -0
  39. package/dist/eval/chunks/dist-DWn6r6un.js +4 -0
  40. package/dist/eval/chunks/dist-DWqBe2Ah.js +6 -0
  41. package/dist/eval/chunks/dist-D_Uqh6m9.js +4 -0
  42. package/dist/eval/chunks/dist-DcIU51zW.js +4 -0
  43. package/dist/eval/chunks/dist-Wm6vE6kM.js +1 -0
  44. package/dist/eval/chunks/dist-kiZUqqzR.js +4 -0
  45. package/dist/eval/chunks/dist-oZ12SGqg.js +4 -0
  46. package/dist/eval/chunks/dist-va7FmnW4.js +4 -0
  47. package/dist/eval/chunks/echarts-BBzcOaek.js +4 -0
  48. package/dist/eval/chunks/eval-runtime-e7f6eb9af5d4.js +1 -0
  49. package/dist/eval/chunks/html2canvas-DoKTvaOT.js +4 -0
  50. package/dist/eval/chunks/index.es-wVPQxEPP.js +5 -0
  51. package/dist/eval/chunks/jspdf.es.min-Zm27YeAg.js +78 -0
  52. package/dist/eval/chunks/jsx-CwMPlI4_-CBhlIHLh.js +4 -0
  53. package/dist/eval/chunks/jszip.min-Da8UgalE.js +4 -0
  54. package/dist/eval/chunks/lodash-CYyW02I7.js +4 -0
  55. package/dist/eval/chunks/photoswipe.esm-D52MAtDT.js +4 -0
  56. package/dist/eval/chunks/purify.es-DhHsvqCe.js +4 -0
  57. package/dist/eval/chunks/rolldown-runtime-Ce3zPWPd.js +4 -0
  58. package/dist/eval/chunks/vue-router-DZ-KfC9f.js +5 -0
  59. package/dist/eval/chunks/vue.runtime.esm-bundler-zZTAiuf6.js +4 -0
  60. package/dist/eval/index.js +24 -0
  61. package/dist/eval/index.style.css +21 -0
  62. package/dist/index.cjs +986 -325
  63. package/dist/index.d.ts +1 -0
  64. package/dist/index.js +73526 -30926
  65. package/dist/index.style.css +3 -3
  66. package/package.json +12 -12
  67. package/dist/chunks/cdn-DEvdGJu2-bmlgKy4E.js +0 -38
  68. package/dist/chunks/dist-Bm7SK-km.js +0 -24517
  69. package/dist/chunks/dist-DN0sqx7H.js +0 -39
  70. package/dist/chunks/dist-uXnwGrO3.js +0 -76
  71. package/dist/chunks/files-C5UMzYxA-q9oJ4PrI.js +0 -110
  72. package/dist/chunks/linker-JHdz37DK-CWgUtxZ5.js +0 -118
  73. package/dist/chunks/local-sandbox-B8IJ5jWb-BgfU3iQ4.js +0 -300
  74. package/dist/chunks/modules-DlLJF_vd-DcNdL6sc.js +0 -153
  75. package/dist/chunks/pinia-pDJilYOg.js +0 -326
  76. package/dist/chunks/remote-DfXAsO9n-C_MtPVYr.js +0 -75
  77. package/dist/chunks/store-D8vwi-HV-RFStijWr.js +0 -16936
  78. package/dist/chunks/vc-components-C7ruefOT.js +0 -6
  79. package/dist/chunks/vc-components-m3l_xrd8.js +0 -6
package/dist/index.cjs CHANGED
@@ -10,6 +10,7 @@ let _deot_helper_fp = require("@deot/helper-fp");
10
10
  let _deot_http = require("@deot/http");
11
11
  let _deot_docs_renderer = require("@deot/docs-renderer");
12
12
  let es_module_lexer = require("es-module-lexer");
13
+ let _deot_helper_unicode = require("@deot/helper-unicode");
13
14
  let _deot_docs_playground = require("@deot/docs-playground");
14
15
  let _deot_helper_dom = require("@deot/helper-dom");
15
16
  //#region packages/client/src/utils/runtime.ts
@@ -73,9 +74,9 @@ var getEnvironmentBase = (config) => {
73
74
  const segments = location.pathname.split("/").filter(Boolean);
74
75
  const configuredLanguages = Object.keys(config.locales);
75
76
  const languages = configuredLanguages.length ? configuredLanguages : ["zh-CN"];
76
- const languageIndex = segments.findIndex((segment) => languages.includes(segment));
77
- if (languageIndex >= 0) {
78
- const deploymentSegments = segments.slice(0, languageIndex);
77
+ const routeIndex = /^__docs\/preview(?:-config-generate)?$/.test(segments.slice(-2).join("/")) ? segments.length - 2 : segments.findIndex((segment) => languages.includes(segment));
78
+ if (routeIndex >= 0) {
79
+ const deploymentSegments = segments.slice(0, routeIndex);
79
80
  return new URL(`/${deploymentSegments.join("/")}${deploymentSegments.length ? "/" : ""}`, location.origin).href;
80
81
  }
81
82
  return new URL("./", location.href).href;
@@ -747,25 +748,25 @@ var setSidebarItems = (next) => {
747
748
  };
748
749
  //#endregion
749
750
  //#region packages/client/src/components/layout/default-footer.vue?vue&type=script&setup=true&lang.ts
750
- var _hoisted_1$30 = ["data-content-width"];
751
- var _hoisted_2$24 = {
751
+ var _hoisted_1$31 = ["data-content-width"];
752
+ var _hoisted_2$25 = {
752
753
  key: 0,
753
754
  class: "docs-footer__inner"
754
755
  };
755
756
  var _hoisted_3$18 = { class: "docs-footer__content" };
756
- var _hoisted_4$11 = { class: "docs-footer__title" };
757
- var _hoisted_5$8 = {
757
+ var _hoisted_4$12 = { class: "docs-footer__title" };
758
+ var _hoisted_5$9 = {
758
759
  key: 0,
759
760
  class: "docs-footer__links"
760
761
  };
761
- var _hoisted_6$6 = ["href"];
762
- var _hoisted_7$6 = { key: 2 };
763
- var _hoisted_8$5 = { class: "docs-footer__bar" };
764
- var _hoisted_9$4 = { class: "docs-footer__bar-inner" };
765
- var _hoisted_10$4 = ["href"];
766
- var _hoisted_11$4 = ["src"];
767
- var _hoisted_12$4 = ["src"];
768
- var _hoisted_13$3 = {
762
+ var _hoisted_6$7 = ["href"];
763
+ var _hoisted_7$7 = { key: 2 };
764
+ var _hoisted_8$7 = { class: "docs-footer__bar" };
765
+ var _hoisted_9$5 = { class: "docs-footer__bar-inner" };
766
+ var _hoisted_10$5 = ["href"];
767
+ var _hoisted_11$5 = ["src"];
768
+ var _hoisted_12$5 = ["src"];
769
+ var _hoisted_13$4 = {
769
770
  key: 2,
770
771
  class: "docs-footer__powered-by"
771
772
  };
@@ -887,25 +888,25 @@ var default_footer_default = /* @__PURE__ */ (0, vue.defineComponent)({
887
888
  key: 0,
888
889
  class: "docs-footer",
889
890
  "data-content-width": contentWidth.value
890
- }, [groups.value.length ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_2$24, [(0, vue.createElementVNode)("div", _hoisted_3$18, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(groups.value, (group) => {
891
+ }, [groups.value.length ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_2$25, [(0, vue.createElementVNode)("div", _hoisted_3$18, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(groups.value, (group) => {
891
892
  return (0, vue.openBlock)(), (0, vue.createElementBlock)("section", {
892
893
  key: group.label,
893
894
  class: "docs-footer__group"
894
- }, [(0, vue.createElementVNode)("h2", _hoisted_4$11, (0, vue.toDisplayString)(group.label), 1), group.children?.length ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("ul", _hoisted_5$8, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(group.children, (item) => {
895
+ }, [(0, vue.createElementVNode)("h2", _hoisted_4$12, (0, vue.toDisplayString)(group.label), 1), group.children?.length ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("ul", _hoisted_5$9, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(group.children, (item) => {
895
896
  return (0, vue.openBlock)(), (0, vue.createElementBlock)("li", { key: `${item.label}:${item.value || ""}` }, [item.value && isExternal(item.value) ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("a", {
896
897
  key: 0,
897
898
  href: item.value,
898
899
  target: "_blank",
899
900
  rel: "noopener noreferrer"
900
- }, (0, vue.toDisplayString)(item.label), 9, _hoisted_6$6)) : item.value ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(vue_router.RouterLink), {
901
+ }, (0, vue.toDisplayString)(item.label), 9, _hoisted_6$7)) : item.value ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(vue_router.RouterLink), {
901
902
  key: 1,
902
903
  to: toPath(item.value)
903
904
  }, {
904
905
  default: (0, vue.withCtx)(() => [(0, vue.createTextVNode)((0, vue.toDisplayString)(item.label), 1)]),
905
906
  _: 2
906
- }, 1032, ["to"])) : ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", _hoisted_7$6, (0, vue.toDisplayString)(item.label), 1))]);
907
+ }, 1032, ["to"])) : ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", _hoisted_7$7, (0, vue.toDisplayString)(item.label), 1))]);
907
908
  }), 128))])) : (0, vue.createCommentVNode)("v-if", true)]);
908
- }), 128))])])) : (0, vue.createCommentVNode)("v-if", true), (0, vue.createElementVNode)("div", _hoisted_8$5, [(0, vue.createElementVNode)("div", _hoisted_9$4, [brandExternal.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("a", {
909
+ }), 128))])])) : (0, vue.createCommentVNode)("v-if", true), (0, vue.createElementVNode)("div", _hoisted_8$7, [(0, vue.createElementVNode)("div", _hoisted_9$5, [brandExternal.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("a", {
909
910
  key: 0,
910
911
  class: "docs-footer__brand",
911
912
  href: brandValue.value,
@@ -916,7 +917,7 @@ var default_footer_default = /* @__PURE__ */ (0, vue.defineComponent)({
916
917
  class: "docs-footer__brand-logo",
917
918
  src: brandLogo.value,
918
919
  alt: ""
919
- }, null, 8, _hoisted_11$4)) : (0, vue.createCommentVNode)("v-if", true), (0, vue.createTextVNode)(" " + (0, vue.toDisplayString)(brandLabel.value), 1)], 8, _hoisted_10$4)) : ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(vue_router.RouterLink), {
920
+ }, null, 8, _hoisted_11$5)) : (0, vue.createCommentVNode)("v-if", true), (0, vue.createTextVNode)(" " + (0, vue.toDisplayString)(brandLabel.value), 1)], 8, _hoisted_10$5)) : ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(vue_router.RouterLink), {
920
921
  key: 1,
921
922
  class: "docs-footer__brand",
922
923
  to: brandPath.value
@@ -926,15 +927,15 @@ var default_footer_default = /* @__PURE__ */ (0, vue.defineComponent)({
926
927
  class: "docs-footer__brand-logo",
927
928
  src: brandLogo.value,
928
929
  alt: ""
929
- }, null, 8, _hoisted_12$4)) : (0, vue.createCommentVNode)("v-if", true), (0, vue.createTextVNode)(" " + (0, vue.toDisplayString)(brandLabel.value), 1)]),
930
+ }, null, 8, _hoisted_12$5)) : (0, vue.createCommentVNode)("v-if", true), (0, vue.createTextVNode)(" " + (0, vue.toDisplayString)(brandLabel.value), 1)]),
930
931
  _: 1
931
- }, 8, ["to"])), poweredBy.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_13$3, (0, vue.toDisplayString)(poweredBy.value), 1)) : (0, vue.createCommentVNode)("v-if", true)])])], 8, _hoisted_1$30)) : (0, vue.createCommentVNode)("v-if", true);
932
+ }, 8, ["to"])), poweredBy.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_13$4, (0, vue.toDisplayString)(poweredBy.value), 1)) : (0, vue.createCommentVNode)("v-if", true)])])], 8, _hoisted_1$31)) : (0, vue.createCommentVNode)("v-if", true);
932
933
  };
933
934
  }
934
935
  });
935
936
  //#endregion
936
937
  //#region packages/client/src/components/search/highlight-text.vue?vue&type=script&setup=true&lang.ts
937
- var _hoisted_1$29 = {
938
+ var _hoisted_1$30 = {
938
939
  key: 0,
939
940
  class: "docs-search-highlight"
940
941
  };
@@ -963,7 +964,7 @@ var highlight_text_default = /* @__PURE__ */ (0, vue.defineComponent)({
963
964
  });
964
965
  return (_ctx, _cache) => {
965
966
  return (0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(parts.value, (part, index) => {
966
- return (0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: `${index}:${part.text}` }, [part.match ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("mark", _hoisted_1$29, (0, vue.toDisplayString)(part.text), 1)) : ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 1 }, [(0, vue.createTextVNode)((0, vue.toDisplayString)(part.text), 1)], 64))], 64);
967
+ return (0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: `${index}:${part.text}` }, [part.match ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("mark", _hoisted_1$30, (0, vue.toDisplayString)(part.text), 1)) : ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 1 }, [(0, vue.createTextVNode)((0, vue.toDisplayString)(part.text), 1)], 64))], 64);
967
968
  }), 128);
968
969
  };
969
970
  }
@@ -1915,24 +1916,32 @@ var ResourceGateway = class {
1915
1916
  var Gateway = new ResourceGateway();
1916
1917
  //#endregion
1917
1918
  //#region packages/client/src/utils/resource-graph.ts
1918
- var SUPPORTED_DEPENDENCY_RE = /\.(?:vue|[jt]s|css)(?:$|[?#])/i;
1919
- var STYLE_IMPORT_RE = /@import\s+(?:url\(\s*(?:(['"])(.*?)\1|([^'")\s]+))\s*\)|(['"])(.*?)\4)/gi;
1919
+ var SUPPORTED_DEPENDENCY_RE = /\.(?:vue|[jt]sx?|json|css|scss|sass)(?:$|[?#])/i;
1920
+ var STYLE_IMPORT_RE = /@(?:import|use|forward)\s+(?:url\(\s*(?:(['"])(.*?)\1|([^'")\s]+))\s*\)|(['"])(.*?)\4)/gi;
1920
1921
  var SFC_BLOCK_RE = /<(script|style)\b([^>]*)>([\s\S]*?)<\/\1>/gi;
1921
1922
  var SOURCE_ATTRIBUTE_RE = /\bsrc\s*=\s*(['"])(.*?)\1/i;
1922
1923
  var getResourceType = (url) => {
1923
1924
  if (/\.vue(?:$|[?#])/i.test(url)) return "sfc";
1924
- if (/\.css(?:$|[?#])/i.test(url)) return "style";
1925
+ if (/\.(?:css|scss|sass)(?:$|[?#])/i.test(url)) return "style";
1925
1926
  return "module";
1926
1927
  };
1927
- var isSupportedDependency = (value) => value.startsWith(".") && SUPPORTED_DEPENDENCY_RE.test(value);
1928
+ var isSupportedDependency = (value) => value.startsWith(".") && (SUPPORTED_DEPENDENCY_RE.test(value) || /\.m(?:$|[?#])/.test(value) || !/\.[^/]+$/.test(value.split(/[?#]/)[0]));
1928
1929
  var resolveDependencyUrl = (specifier, importer) => {
1929
1930
  const fallbackBase = typeof location === "undefined" ? "http://localhost/" : location.href;
1930
1931
  return new URL(specifier, new URL(importer, fallbackBase)).href;
1931
1932
  };
1932
- var collectStyleImports = (code) => [...code.matchAll(STYLE_IMPORT_RE)].map((match) => match[2] || match[3] || match[5]);
1933
+ var collectStyleImports = (code) => [...code.matchAll(STYLE_IMPORT_RE)].map((match) => match[2] || match[3] || match[5]).filter((value) => !/^(?:[a-z][a-z\d+.-]*:|\/)/i.test(value)).map((value) => value.startsWith(".") ? value : `./${value}`);
1933
1934
  var collectModuleImports = async (code) => {
1934
- await es_module_lexer.init;
1935
- return (0, es_module_lexer.parse)(code)[0].map((item) => item.n).filter((item) => Boolean(item));
1935
+ await (0, es_module_lexer.init)();
1936
+ try {
1937
+ return (0, es_module_lexer.parse)(code)[0].flatMap((item) => {
1938
+ if (item.type === "dynamic") return item.specifier && !item.glob ? [item.specifier] : [];
1939
+ if (item.type === "import-meta" || item.typeOnly) return [];
1940
+ return [item.specifier];
1941
+ });
1942
+ } catch {
1943
+ return [...code.replace(/\b(?:import|export)\s+type\b(?!\s+from\b)\s*(?:\{[^}]*\}|\*\s+as\s+[\w$]+|[\w$]+)(?:\s+from\s*(['"])[^'"]+\1)?\s*;?/g, "").matchAll(/(?:\bfrom\s+|import\s*\(\s*|import\s+)['"]([^'"]+)['"]/g)].map((match) => match[1]);
1944
+ }
1936
1945
  };
1937
1946
  var collectResourceImports = async (code, type) => {
1938
1947
  if (type === "style") return [...new Set(collectStyleImports(code))];
@@ -1957,6 +1966,189 @@ var toLogicalResourceSource = (config, lang, url) => {
1957
1966
  if (resolved.origin !== root.origin || !resolved.pathname.startsWith(root.pathname)) return resolved.href;
1958
1967
  return `./${resolved.pathname.slice(root.pathname.length)}${resolved.search}${resolved.hash}`;
1959
1968
  };
1969
+ /**
1970
+ * 远程静态文件没有 Vite 的扩展名补全,按源码类型探测实际文件。
1971
+ * @param specifier 源码中的相对引用。
1972
+ * @param importer 发起引用的源文件 URL。
1973
+ * @param style 是否使用 Sass 样式路径规则。
1974
+ * @returns 按优先级排列的候选 URL。
1975
+ */
1976
+ var dependencyUrlCandidates = (specifier, importer, style = false) => {
1977
+ const url = new URL(resolveDependencyUrl(specifier, importer));
1978
+ const path = url.pathname.replace(/\/$/, "");
1979
+ const partial = (value) => value.replace(/([^/]+)$/, "_$1");
1980
+ const hasExtension = SUPPORTED_DEPENDENCY_RE.test(path);
1981
+ const paths = style ? hasExtension ? [path, partial(path)] : [
1982
+ ".scss",
1983
+ ".sass",
1984
+ ".css"
1985
+ ].flatMap((ext) => [
1986
+ `${path}${ext}`,
1987
+ partial(`${path}${ext}`),
1988
+ `${path}/index${ext}`,
1989
+ `${path}/_index${ext}`
1990
+ ]) : hasExtension ? [path] : [
1991
+ path,
1992
+ ...[
1993
+ ".vue",
1994
+ ".ts",
1995
+ ".js",
1996
+ ".tsx",
1997
+ ".jsx",
1998
+ ".json"
1999
+ ].map((ext) => `${path}${ext}`),
2000
+ ...[
2001
+ ".vue",
2002
+ ".ts",
2003
+ ".js",
2004
+ ".tsx",
2005
+ ".jsx",
2006
+ ".json"
2007
+ ].map((ext) => `${path}/index${ext}`)
2008
+ ];
2009
+ return [...new Set(paths)].map((value) => {
2010
+ const candidate = new URL(url);
2011
+ candidate.pathname = value;
2012
+ return candidate.href;
2013
+ });
2014
+ };
2015
+ var collectResourceStyleImports = (code, type) => {
2016
+ if (type === "style") return collectStyleImports(code);
2017
+ if (type !== "sfc") return [];
2018
+ return [...code.matchAll(SFC_BLOCK_RE)].filter((match) => match[1].toLowerCase() === "style").flatMap((match) => collectStyleImports(match[3]));
2019
+ };
2020
+ var resolveDependencyRequestUrl = (url) => {
2021
+ const resolved = new URL(url, typeof location === "undefined" ? "http://localhost/" : location.href);
2022
+ if (resolved.hostname !== "raw.githubusercontent.com") return url;
2023
+ const index = resolved.pathname.indexOf("/node_modules/");
2024
+ return index < 0 ? url : `https://cdn.jsdelivr.net/npm/${resolved.pathname.slice(index + 14)}${resolved.search}`;
2025
+ };
2026
+ //#endregion
2027
+ //#region packages/client/src/utils/github-source.ts
2028
+ /**
2029
+ * GitHub Raw 不提供目录列表,用 Git tree 确定源码文件和 glob 匹配项。
2030
+ * @param rootUrl 入口源码的 URL。
2031
+ * @param signal 资源图的取消信号。
2032
+ * @returns GitHub 文件解析器,非 GitHub 地址返回 null。
2033
+ */
2034
+ var createGithubSourceResolver = (rootUrl, signal) => {
2035
+ const root = new URL(rootUrl, typeof location === "undefined" ? "http://localhost/" : location.href);
2036
+ const match = root.hostname === "raw.githubusercontent.com" ? root.pathname.match(/^\/([^/]+)\/([^/]+)\/(refs\/(?:heads|tags)\/)?([^/]+)\//) : null;
2037
+ if (!match) return null;
2038
+ const [, owner, repo, , ref] = match;
2039
+ const base = `${root.origin}${match[0]}`;
2040
+ let pending;
2041
+ let globTree;
2042
+ const tree = () => {
2043
+ pending ??= (async () => {
2044
+ try {
2045
+ const apiUrl = `https://api.github.com/repos/${owner}/${repo}/git/trees/${encodeURIComponent(ref)}?recursive=1`;
2046
+ const response = await fetch(apiUrl, { signal });
2047
+ if (!response.ok) return null;
2048
+ const data = await response.json();
2049
+ if (data.truncated) return null;
2050
+ return new Set(data.tree.filter((item) => item.type === "blob").map((item) => `${base}${item.path}`));
2051
+ } catch (reason) {
2052
+ if (signal?.aborted) throw reason;
2053
+ return null;
2054
+ }
2055
+ })();
2056
+ return pending;
2057
+ };
2058
+ const fallbackGlobTree = () => {
2059
+ globTree ??= (async () => {
2060
+ const url = `https://data.jsdelivr.com/v1/package/gh/${owner}/${repo}@${encodeURIComponent(ref)}/flat`;
2061
+ const response = await fetch(url, { signal });
2062
+ if (!response.ok) throw new Error(`[RemoteSfc] glob 备用文件清单加载失败: ${response.status}`);
2063
+ const data = await response.json();
2064
+ return new Set(data.files.map((item) => `${base}${item.name.replace(/^\//, "")}`));
2065
+ })();
2066
+ return globTree;
2067
+ };
2068
+ return {
2069
+ base,
2070
+ resolve: async (specifier, importer, style) => {
2071
+ const candidates = dependencyUrlCandidates(specifier, importer, style);
2072
+ if (!candidates[0].startsWith(base) || candidates[0].includes("/node_modules/")) return candidates;
2073
+ const files = await tree();
2074
+ if (!files) return candidates;
2075
+ const found = candidates.find((value) => files.has(value.split(/[?#]/)[0]));
2076
+ if (!found) throw new Error(`[RemoteSfc] 无法解析依赖 "${specifier}"(来自 ${importer})`);
2077
+ return [found];
2078
+ },
2079
+ expandGlob: async (code, importer) => {
2080
+ if (!code.includes("import.meta.glob")) return code;
2081
+ const files = await tree() ?? await fallbackGlobTree();
2082
+ const imports = [];
2083
+ const transformed = code.replace(/import\.meta\.glob(?:<[^;\n]+?>)?\(\s*(['"])([^'"]+)\1\s*,\s*\{\s*eager\s*:\s*true\s*\}\s*\)/g, (_call, _quote, pattern) => {
2084
+ const expression = new URL(pattern, importer).href.split("*").map((part) => part.replace(/[.+?^${}()|[\]\\]/g, "\\$&")).join("[^/]*");
2085
+ const matcher = new RegExp(`^${expression}$`);
2086
+ const directory = new URL(".", importer).href;
2087
+ return `({${[...files].filter((value) => matcher.test(value)).sort().map((value) => {
2088
+ const path = `./${value.slice(directory.length)}`;
2089
+ const name = `__docs_glob_${imports.length}`;
2090
+ imports.push(`import * as ${name} from ${JSON.stringify(path)};`);
2091
+ return `${JSON.stringify(path)}: ${name}`;
2092
+ }).join(",")}})`;
2093
+ });
2094
+ if (transformed.includes("import.meta.glob")) throw new Error(`[RemoteSfc] 不支持的 glob 调用: ${importer}`);
2095
+ return `${imports.join("\n")}\n${transformed}`;
2096
+ }
2097
+ };
2098
+ };
2099
+ var rewritePackageStyleImports = (code) => code.replace(/@import\s+(['"])([^.'"/][^'"]*\.css)\1/g, (statement, quote, path) => /^[a-z][a-z\d+.-]*:/i.test(path) ? statement : `@import ${quote}https://cdn.jsdelivr.net/npm/${path}${quote}`);
2100
+ //#endregion
2101
+ //#region packages/client/src/utils/source-dependencies.ts
2102
+ var assertResolvableSourceGlobs = (code, url) => {
2103
+ if (code.includes("import.meta.glob")) throw new Error(`[RemoteSfc] 普通 HTTP 资源无法枚举 glob 文件,请使用显式 import 或预先展开的文件清单: ${url}`);
2104
+ };
2105
+ var createResourceDependencyResolver = (knownUrls = []) => {
2106
+ const files = new Set(knownUrls);
2107
+ const resolutions = /* @__PURE__ */ new Map();
2108
+ const githubResolvers = [];
2109
+ return async (code, type, url, probe) => {
2110
+ files.add(url);
2111
+ if (/\.json(?:$|[?#])/i.test(url)) return [];
2112
+ let github = githubResolvers.find((resolver) => url.startsWith(resolver.base));
2113
+ if (!github) {
2114
+ github = createGithubSourceResolver(url) ?? void 0;
2115
+ if (github) githubResolvers.push(github);
2116
+ }
2117
+ let source = code;
2118
+ if (type === "module") {
2119
+ if (github) source = await github.expandGlob(source, url);
2120
+ }
2121
+ if (!github && type !== "style") assertResolvableSourceGlobs(source, url);
2122
+ if (type === "style") source = rewritePackageStyleImports(source);
2123
+ const imports = await collectResourceImports(source, type);
2124
+ const styles = collectResourceStyleImports(source, type);
2125
+ return await Promise.all(imports.filter(isSupportedDependency).map(async (specifier) => {
2126
+ const style = styles.includes(specifier) || /\.(?:scss|sass)(?:$|[?#])/i.test(specifier);
2127
+ const candidates = github ? await github.resolve(specifier, url, style) : dependencyUrlCandidates(specifier, url, style);
2128
+ const found = candidates.find((candidate) => files.has(candidate));
2129
+ if (found) return resolveDependencyRequestUrl(found);
2130
+ if (!probe || candidates.length === 1) return resolveDependencyRequestUrl(candidates[0]);
2131
+ const key = JSON.stringify(candidates);
2132
+ let pending = resolutions.get(key);
2133
+ if (!pending) {
2134
+ pending = (async () => {
2135
+ for (let index = 0;; index += 1) {
2136
+ const candidate = candidates[index];
2137
+ try {
2138
+ await probe(candidate);
2139
+ files.add(candidate);
2140
+ return candidate;
2141
+ } catch (reason) {
2142
+ if (!(reason instanceof ResourceRequestError) || reason.status !== 404 || index === candidates.length - 1) throw reason;
2143
+ }
2144
+ }
2145
+ })();
2146
+ resolutions.set(key, pending);
2147
+ }
2148
+ return resolveDependencyRequestUrl(await pending);
2149
+ }));
2150
+ };
2151
+ };
1960
2152
  //#endregion
1961
2153
  //#region packages/client/src/utils/content.ts
1962
2154
  var isRendererDocument = (value) => Boolean(value && typeof value === "object" && "schemaVersion" in value);
@@ -1998,7 +2190,7 @@ var writeHomeContent = (config, lang, value) => {
1998
2190
  };
1999
2191
  //#endregion
2000
2192
  //#region packages/client/src/utils/components.ts
2001
- var isPlainObject$1 = (value) => Boolean(value) && typeof value === "object" && !Array.isArray(value);
2193
+ var isPlainObject$2 = (value) => Boolean(value) && typeof value === "object" && !Array.isArray(value);
2002
2194
  /**
2003
2195
  * 归一化站点 Markdown 排版皮肤;非法值回退 `default`。
2004
2196
  * @param value `components.markdown.theme`。
@@ -2012,7 +2204,7 @@ var resolveDocsMarkdownTheme = (value) => value === "traditional" ? "traditional
2012
2204
  */
2013
2205
  var resolveDocsMarkdownComponent = (config) => {
2014
2206
  const markdown = config.components?.markdown;
2015
- if (!isPlainObject$1(markdown)) return { theme: "default" };
2207
+ if (!isPlainObject$2(markdown)) return { theme: "default" };
2016
2208
  const options = { theme: resolveDocsMarkdownTheme(markdown.theme) };
2017
2209
  if ("indicator" in markdown) options.indicator = markdown.indicator;
2018
2210
  return options;
@@ -2024,7 +2216,7 @@ var resolveDocsMarkdownComponent = (config) => {
2024
2216
  */
2025
2217
  var resolveDocsPlaygroundComponent = (config) => {
2026
2218
  const playground = config.components?.playground;
2027
- if (!isPlainObject$1(playground)) return {};
2219
+ if (!isPlainObject$2(playground)) return {};
2028
2220
  return { ...playground };
2029
2221
  };
2030
2222
  var RENDERER_FITS = /* @__PURE__ */ new Set([
@@ -2039,7 +2231,7 @@ var RENDERER_FITS = /* @__PURE__ */ new Set([
2039
2231
  */
2040
2232
  var resolveDocsRendererComponent = (config) => {
2041
2233
  const renderer = config.components?.renderer;
2042
- if (!isPlainObject$1(renderer)) return {};
2234
+ if (!isPlainObject$2(renderer)) return {};
2043
2235
  const options = {};
2044
2236
  if (typeof renderer.fit === "string" && RENDERER_FITS.has(renderer.fit)) options.fit = renderer.fit;
2045
2237
  return options;
@@ -2047,7 +2239,7 @@ var resolveDocsRendererComponent = (config) => {
2047
2239
  //#endregion
2048
2240
  //#region packages/client/src/components/renderer/markdown-props.ts
2049
2241
  var INDICATOR_POSITIONS = /* @__PURE__ */ new Set(["left", "right"]);
2050
- var isPlainObject = (value) => Boolean(value) && typeof value === "object" && !Array.isArray(value);
2242
+ var isPlainObject$1 = (value) => Boolean(value) && typeof value === "object" && !Array.isArray(value);
2051
2243
  /**
2052
2244
  * 规范化指示器配置。非法值丢弃,合法对象只保留已知字段。
2053
2245
  * @param value 原始 indicator。
@@ -2055,7 +2247,7 @@ var isPlainObject = (value) => Boolean(value) && typeof value === "object" && !A
2055
2247
  */
2056
2248
  var normalizeDocsMarkdownIndicator = (value) => {
2057
2249
  if (value === true || value === false) return value;
2058
- if (!isPlainObject(value)) return void 0;
2250
+ if (!isPlainObject$1(value)) return void 0;
2059
2251
  const options = {};
2060
2252
  if (typeof value.preview === "boolean") options.preview = value.preview;
2061
2253
  if (typeof value.draggable === "boolean") options.draggable = value.draggable;
@@ -2070,7 +2262,7 @@ var normalizeDocsMarkdownIndicator = (value) => {
2070
2262
  * @returns 可写入模块 props 的 options。
2071
2263
  */
2072
2264
  var normalizeDocsMarkdownOptions = (value) => {
2073
- if (!isPlainObject(value)) return void 0;
2265
+ if (!isPlainObject$1(value)) return void 0;
2074
2266
  const options = { ...value };
2075
2267
  if ("indicator" in options) {
2076
2268
  const indicator = normalizeDocsMarkdownIndicator(options.indicator);
@@ -2085,7 +2277,7 @@ var normalizeDocsMarkdownOptions = (value) => {
2085
2277
  * @returns source / content / options。
2086
2278
  */
2087
2279
  var normalizeDocsMarkdownProps = (value) => {
2088
- const record = isPlainObject(value) ? value : {};
2280
+ const record = isPlainObject$1(value) ? value : {};
2089
2281
  const props = { source: typeof record.source === "string" ? record.source : "" };
2090
2282
  if (typeof record.content === "string") props.content = record.content;
2091
2283
  const options = normalizeDocsMarkdownOptions(record.options);
@@ -2123,8 +2315,8 @@ var docsMarkdownIndicator = (options) => {
2123
2315
  var docsMarkdownInlineContent = (props) => typeof props.content === "string" ? props.content : void 0;
2124
2316
  //#endregion
2125
2317
  //#region packages/client/src/components/renderer/markdown.vue?vue&type=script&setup=true&lang.ts
2126
- var _hoisted_1$28 = { class: "docs-renderer-markdown" };
2127
- var _hoisted_2$23 = {
2318
+ var _hoisted_1$29 = { class: "docs-renderer-markdown" };
2319
+ var _hoisted_2$24 = {
2128
2320
  key: 0,
2129
2321
  class: "docs-renderer-markdown__error"
2130
2322
  };
@@ -2220,7 +2412,7 @@ var markdown_default = /* @__PURE__ */ (0, vue.defineComponent)({
2220
2412
  unsubscribe?.();
2221
2413
  });
2222
2414
  return (_ctx, _cache) => {
2223
- return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_1$28, [error.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_2$23, (0, vue.toDisplayString)(error.value), 1)) : loading.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_3$17, (0, vue.toDisplayString)((0, vue.unref)(t)("client.common.loading")), 1)) : ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(_deot_docs_markdown.Markdown), {
2415
+ return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_1$29, [error.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_2$24, (0, vue.toDisplayString)(error.value), 1)) : loading.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_3$17, (0, vue.toDisplayString)((0, vue.unref)(t)("client.common.loading")), 1)) : ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(_deot_docs_markdown.Markdown), {
2224
2416
  key: 2,
2225
2417
  value: content.value,
2226
2418
  indicator: indicator.value,
@@ -2239,10 +2431,10 @@ var markdown_default = /* @__PURE__ */ (0, vue.defineComponent)({
2239
2431
  });
2240
2432
  //#endregion
2241
2433
  //#region packages/client/src/components/renderer/markdown-editor.vue?vue&type=script&setup=true&lang.ts
2242
- var _hoisted_1$27 = { class: "docs-renderer-module-editor" };
2243
- var _hoisted_2$22 = { class: "docs-renderer-field is-wide" };
2434
+ var _hoisted_1$28 = { class: "docs-renderer-module-editor" };
2435
+ var _hoisted_2$23 = { class: "docs-renderer-field is-wide" };
2244
2436
  var _hoisted_3$16 = { class: "docs-renderer-field is-wide" };
2245
- var _hoisted_4$10 = { class: "docs-renderer-field is-wide is-inline" };
2437
+ var _hoisted_4$11 = { class: "docs-renderer-field is-wide is-inline" };
2246
2438
  //#endregion
2247
2439
  //#region packages/client/src/components/renderer/markdown-editor.vue
2248
2440
  var markdown_editor_default = /* @__PURE__ */ (0, vue.defineComponent)({
@@ -2281,8 +2473,8 @@ var markdown_editor_default = /* @__PURE__ */ (0, vue.defineComponent)({
2281
2473
  } });
2282
2474
  };
2283
2475
  return (_ctx, _cache) => {
2284
- return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_1$27, [
2285
- (0, vue.createElementVNode)("div", _hoisted_2$22, [(0, vue.createElementVNode)("label", null, (0, vue.toDisplayString)((0, vue.unref)(t)("renderer.editor.source")), 1), (0, vue.createVNode)((0, vue.unref)(_deot_vc.Input), {
2476
+ return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_1$28, [
2477
+ (0, vue.createElementVNode)("div", _hoisted_2$23, [(0, vue.createElementVNode)("label", null, (0, vue.toDisplayString)((0, vue.unref)(t)("renderer.editor.source")), 1), (0, vue.createVNode)((0, vue.unref)(_deot_vc.Input), {
2286
2478
  "model-value": String(__props.modelValue.source || ""),
2287
2479
  placeholder: (0, vue.unref)(t)("renderer.editor.markdownSourceHint"),
2288
2480
  "onUpdate:modelValue": _cache[0] || (_cache[0] = (value) => update({ source: value }))
@@ -2293,7 +2485,7 @@ var markdown_editor_default = /* @__PURE__ */ (0, vue.defineComponent)({
2293
2485
  placeholder: (0, vue.unref)(t)("renderer.editor.markdownContentHint"),
2294
2486
  "onUpdate:modelValue": handleContent
2295
2487
  }, null, 8, ["model-value", "placeholder"])]),
2296
- (0, vue.createElementVNode)("div", _hoisted_4$10, [(0, vue.createElementVNode)("label", null, (0, vue.toDisplayString)((0, vue.unref)(t)("markdown.indicator.label")), 1), (0, vue.createVNode)((0, vue.unref)(_deot_vc.Switch), {
2488
+ (0, vue.createElementVNode)("div", _hoisted_4$11, [(0, vue.createElementVNode)("label", null, (0, vue.toDisplayString)((0, vue.unref)(t)("markdown.indicator.label")), 1), (0, vue.createVNode)((0, vue.unref)(_deot_vc.Switch), {
2297
2489
  "model-value": indicatorEnabled.value,
2298
2490
  "onUpdate:modelValue": patchIndicator
2299
2491
  }, null, 8, ["model-value"])])
@@ -2302,13 +2494,158 @@ var markdown_editor_default = /* @__PURE__ */ (0, vue.defineComponent)({
2302
2494
  }
2303
2495
  });
2304
2496
  //#endregion
2497
+ //#region packages/client/src/modules/preview/config.ts
2498
+ var previewConfigKey = Symbol("preview-config");
2499
+ var isPlainObject = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
2500
+ var playgroundFields = [
2501
+ "local",
2502
+ "styleless",
2503
+ "views",
2504
+ "viewport",
2505
+ "previewInset",
2506
+ "expandable",
2507
+ "previewScroller",
2508
+ "title"
2509
+ ];
2510
+ var normalizePlayground = (value) => {
2511
+ if (!isPlainObject(value)) throw new TypeError("playground must be an object");
2512
+ return Object.fromEntries(playgroundFields.filter((key) => key in value).map((key) => [key, value[key]]));
2513
+ };
2514
+ /**
2515
+ * 校验链接中可序列化的预览配置,不混入站点配置。
2516
+ * @param value JSON 解码后的配置。
2517
+ * @returns 规范化的预览配置。
2518
+ */
2519
+ var normalizePreviewConfig = (value) => {
2520
+ if (!isPlainObject(value)) throw new TypeError("raw must contain a configuration object");
2521
+ const input = value;
2522
+ if (typeof input.url !== "string" || !input.url.trim()) throw new TypeError("url must be a non-empty string");
2523
+ if (input.styles !== void 0 && (!Array.isArray(input.styles) || input.styles.some((item) => typeof item !== "string"))) throw new TypeError("styles must be an array of URL strings");
2524
+ if (input.modules !== void 0 && (!isPlainObject(input.modules) || Object.entries(input.modules).some(([key, url]) => !key.trim() || typeof url !== "string" || !url.trim()))) throw new TypeError("modules must map module names to URL strings");
2525
+ if (input.lang !== void 0 && typeof input.lang !== "string") throw new TypeError("lang must be a string");
2526
+ return {
2527
+ url: input.url.trim(),
2528
+ styles: input.styles || [],
2529
+ modules: input.modules || {},
2530
+ ...input.lang ? { lang: input.lang } : {},
2531
+ ...input.playground !== void 0 ? { playground: normalizePlayground(input.playground) } : {}
2532
+ };
2533
+ };
2534
+ /**
2535
+ * raw 是完整配置;未指定时兼容现有 url/styles/lang 查询参数。
2536
+ * @param query Vue Router 已解码的查询参数。
2537
+ * @returns 当前链接的预览配置。
2538
+ */
2539
+ var readPreviewConfig = (query) => {
2540
+ if (query.raw !== void 0) {
2541
+ if (typeof query.raw !== "string" || !query.raw) throw new TypeError("raw must be a single encoded configuration");
2542
+ return normalizePreviewConfig(JSON.parse((0, _deot_helper_unicode.decode)(query.raw)));
2543
+ }
2544
+ const styles = Array.isArray(query.styles) ? query.styles : typeof query.styles === "string" ? query.styles.split(",") : [];
2545
+ return {
2546
+ url: typeof query.url === "string" ? query.url.trim() : "",
2547
+ styles: styles.filter((item) => typeof item === "string"),
2548
+ modules: {},
2549
+ ...typeof query.lang === "string" ? { lang: query.lang } : {}
2550
+ };
2551
+ };
2552
+ /**
2553
+ * 使用 Unicode helper 编码并正确转义 Base64 的 +、/、=。
2554
+ * @param config 预览配置。
2555
+ * @param base 站点部署根地址。
2556
+ * @returns 可直接分享的预览链接。
2557
+ */
2558
+ var createPreviewUrl = (config, base) => {
2559
+ const url = new URL("__docs/preview", base);
2560
+ url.searchParams.set("raw", (0, _deot_helper_unicode.encode)(JSON.stringify(config)));
2561
+ return url.href;
2562
+ };
2563
+ /**
2564
+ * 根据资源 URL 的 pathname 选择预览组件。
2565
+ * @param source 资源地址。
2566
+ * @param base 解析相对地址的页面地址。
2567
+ * @returns 支持的资源类型;其他资源返回 undefined。
2568
+ */
2569
+ var resolvePreviewType = (source, base) => {
2570
+ const url = new URL(source, base);
2571
+ if (!/^https?:$/.test(url.protocol)) return void 0;
2572
+ if (/\.vue$/i.test(url.pathname)) return "sfc";
2573
+ if (/(?:^|\/|\.)page\.json$/i.test(url.pathname)) return "page";
2574
+ };
2575
+ //#endregion
2576
+ //#region packages/client/src/modules/preview/styles.ts
2577
+ /**
2578
+ * 单个 styles 参数按逗号分隔;重复参数各自是一条完整 URL。
2579
+ * @param value Router 已解码的 styles 参数。
2580
+ * @param base 用于解析站点根路径的页面地址。
2581
+ * @returns 按声明顺序去重的样式 URL。
2582
+ */
2583
+ var parsePreviewStyleUrls = (value, base) => {
2584
+ const items = Array.isArray(value) ? value : typeof value === "string" ? value.split(",") : [];
2585
+ return [...new Set(items.flatMap((item) => {
2586
+ const href = item?.trim();
2587
+ if (!href) return [];
2588
+ if (href.includes("\\") || !/^https?:\/\//i.test(href) && !(href.startsWith("/") && !href.startsWith("//"))) throw new TypeError(`Invalid stylesheet URL: ${href}`);
2589
+ const url = new URL(href, base);
2590
+ if (!/^https?:$/.test(url.protocol)) throw new TypeError(`Invalid stylesheet URL: ${href}`);
2591
+ return [url.href];
2592
+ }))];
2593
+ };
2594
+ var sharedStyles = /* @__PURE__ */ new Map();
2595
+ /**
2596
+ * 复用同一 URL 的 stylesheet,只清理本工具创建且已无引用的节点。
2597
+ * @param urls 已归一化的样式 URL,按加载顺序排列。
2598
+ * @param onError 当前预览的样式加载错误回调。
2599
+ * @returns 释放当前预览引用的函数。
2600
+ */
2601
+ var acquirePreviewStyles = (urls, onError) => {
2602
+ const listener = (url) => onError(url);
2603
+ const records = [...new Set(urls)].map((url) => {
2604
+ let record = sharedStyles.get(url);
2605
+ if (!record) {
2606
+ const existing = [...document.querySelectorAll("link[rel~=\"stylesheet\"]")].find((link) => link.href === url && !link.disabled);
2607
+ const link = existing || document.createElement("link");
2608
+ record = {
2609
+ link,
2610
+ owned: !existing,
2611
+ listeners: /* @__PURE__ */ new Set(),
2612
+ failed: false,
2613
+ handleError: () => {
2614
+ record.failed = true;
2615
+ record.listeners.forEach((callback) => callback(url));
2616
+ }
2617
+ };
2618
+ sharedStyles.set(url, record);
2619
+ link.addEventListener("error", record.handleError);
2620
+ if (!existing) {
2621
+ link.rel = "stylesheet";
2622
+ link.href = url;
2623
+ link.setAttribute("data-docs-preview-style", "");
2624
+ document.head.appendChild(link);
2625
+ }
2626
+ }
2627
+ record.listeners.add(listener);
2628
+ if (record.failed) listener(url);
2629
+ return {
2630
+ url,
2631
+ record
2632
+ };
2633
+ });
2634
+ return () => records.forEach(({ url, record }) => {
2635
+ record.listeners.delete(listener);
2636
+ if (record.listeners.size || sharedStyles.get(url) !== record) return;
2637
+ record.link.removeEventListener("error", record.handleError);
2638
+ if (record.owned) record.link.remove();
2639
+ sharedStyles.delete(url);
2640
+ });
2641
+ };
2642
+ //#endregion
2305
2643
  //#region packages/client/src/components/remote-sfc/remote-sfc.vue?vue&type=script&setup=true&lang.ts
2306
- var _hoisted_1$26 = { class: "docs-remote-sfc" };
2307
- var _hoisted_2$21 = {
2644
+ var _hoisted_1$27 = {
2308
2645
  key: 0,
2309
2646
  class: "docs-remote-sfc__error"
2310
2647
  };
2311
- var _hoisted_3$15 = {
2648
+ var _hoisted_2$22 = {
2312
2649
  key: 1,
2313
2650
  class: "docs-remote-sfc__loading"
2314
2651
  };
@@ -2325,6 +2662,7 @@ var remote_sfc_default = /* @__PURE__ */ (0, vue.defineComponent)({
2325
2662
  const { locale, t } = (0, _deot_docs_locale.useLocale)();
2326
2663
  const router = (0, vue_router.useRouter)();
2327
2664
  const config = getDocsConfig();
2665
+ const preview = (0, vue.inject)(previewConfigKey, void 0);
2328
2666
  const loading = (0, vue.ref)(true);
2329
2667
  const error = (0, vue.ref)("");
2330
2668
  const files = (0, vue.ref)({});
@@ -2335,29 +2673,49 @@ var remote_sfc_default = /* @__PURE__ */ (0, vue.defineComponent)({
2335
2673
  let controller;
2336
2674
  let generation = 0;
2337
2675
  const playgroundDefaults = (0, vue.computed)(() => resolveDocsPlaygroundComponent(config));
2676
+ const previewModules = (0, vue.computed)(() => JSON.stringify(preview?.value?.modules || {}));
2677
+ const previewPlayground = (0, vue.computed)(() => JSON.stringify(preview?.value?.playground || {}));
2678
+ const playgroundOptions = (0, vue.computed)(() => {
2679
+ const siteOptions = playgroundDefaults.value.options || {};
2680
+ const siteImportMap = siteOptions.builtinImportMap || {};
2681
+ return {
2682
+ ...siteOptions,
2683
+ builtinImportMap: {
2684
+ ...siteImportMap,
2685
+ imports: {
2686
+ ...siteImportMap.imports,
2687
+ ...config.modules,
2688
+ ...JSON.parse(previewModules.value)
2689
+ }
2690
+ }
2691
+ };
2692
+ });
2338
2693
  const playgroundProps = (0, vue.computed)(() => {
2339
2694
  const site = playgroundDefaults.value;
2340
- const siteOptions = site.options && typeof site.options === "object" ? site.options : {};
2341
- const siteImportMap = siteOptions.builtinImportMap && typeof siteOptions.builtinImportMap === "object" ? siteOptions.builtinImportMap : {};
2342
- const siteImports = "imports" in siteImportMap && siteImportMap.imports && typeof siteImportMap.imports === "object" ? siteImportMap.imports : {};
2695
+ const overrides = JSON.parse(previewPlayground.value);
2343
2696
  return {
2344
2697
  ...site,
2345
2698
  files: files.value,
2346
2699
  entry: entry.value,
2347
2700
  locale: locale.value,
2348
2701
  styleless: true,
2349
- options: {
2350
- ...siteOptions,
2351
- builtinImportMap: {
2352
- ...siteImportMap,
2353
- imports: {
2354
- ...siteImports,
2355
- ...config.modules
2356
- }
2357
- }
2358
- }
2702
+ ...overrides,
2703
+ local: overrides.local ?? site.local ?? true,
2704
+ ...previewStyleHead.value ? { previewOptions: {
2705
+ ...site.previewOptions,
2706
+ headHTML: `${site.previewOptions?.headHTML || ""}${previewStyleHead.value}`
2707
+ } } : {},
2708
+ options: playgroundOptions.value
2359
2709
  };
2360
2710
  });
2711
+ const useIframeViewport = (0, vue.computed)(() => !!preview?.value && !playgroundProps.value.local && playgroundProps.value.styleless && !Array.isArray(playgroundProps.value.viewport));
2712
+ const previewStyleHead = (0, vue.computed)(() => {
2713
+ try {
2714
+ return parsePreviewStyleUrls(preview?.value?.styles, location.href).map((url) => `<link rel="stylesheet" href="${url.replaceAll("&", "&amp;").replaceAll("\"", "&quot;")}">`).join("");
2715
+ } catch {
2716
+ return "";
2717
+ }
2718
+ });
2361
2719
  const clearSubscriptions = () => {
2362
2720
  while (subscriptions.length) subscriptions.pop()?.();
2363
2721
  };
@@ -2388,12 +2746,12 @@ var remote_sfc_default = /* @__PURE__ */ (0, vue.defineComponent)({
2388
2746
  lang: langSnapshot
2389
2747
  });
2390
2748
  if (current !== generation || activeController.signal.aborted) return;
2749
+ const github = createGithubSourceResolver(rootUrl, activeController.signal);
2391
2750
  const nextFiles = {};
2392
2751
  const visited = /* @__PURE__ */ new Set();
2393
2752
  const activeLoads = /* @__PURE__ */ new Set();
2394
2753
  const visit = async (url, logicalSource) => {
2395
2754
  if (current !== generation || visited.has(url)) return;
2396
- visited.add(url);
2397
2755
  const type = getResourceType(url);
2398
2756
  const source = logicalSource || toLogicalResourceSource(config, langSnapshot, url);
2399
2757
  const identity = createResourceIdentity(config, langSnapshot, type, source);
@@ -2401,12 +2759,11 @@ var remote_sfc_default = /* @__PURE__ */ (0, vue.defineComponent)({
2401
2759
  const reload = () => {
2402
2760
  if (!activeLoads.has(key)) loadFiles();
2403
2761
  };
2404
- subscriptions.push(Gateway.subscribe(identity, reload));
2405
2762
  activeLoads.add(key);
2406
2763
  let record;
2407
2764
  try {
2408
2765
  record = await Gateway.load(identity, {
2409
- url,
2766
+ url: resolveDependencyRequestUrl(url),
2410
2767
  priority: 100,
2411
2768
  signal: activeController.signal
2412
2769
  });
@@ -2414,11 +2771,24 @@ var remote_sfc_default = /* @__PURE__ */ (0, vue.defineComponent)({
2414
2771
  activeLoads.delete(key);
2415
2772
  }
2416
2773
  if (current !== generation) return;
2417
- nextFiles[getFilename(url, langSnapshot)] = record.content;
2418
- const imports = await collectResourceImports(record.content, type);
2774
+ visited.add(url);
2775
+ subscriptions.push(Gateway.subscribe(identity, reload));
2776
+ let content = github && type === "module" ? await github.expandGlob(record.content, url) : record.content;
2777
+ if (!github && type !== "style") assertResolvableSourceGlobs(content, url);
2778
+ if (github && type === "style") content = rewritePackageStyleImports(content);
2779
+ nextFiles[getFilename(url, langSnapshot)] = content;
2780
+ const imports = /\.json(?:$|[?#])/i.test(url) ? [] : await collectResourceImports(content, type);
2781
+ const styles = collectResourceStyleImports(content, type);
2419
2782
  await Promise.all(imports.filter(isSupportedDependency).map(async (value) => {
2420
- const dependency = resolveDependencyUrl(value, url);
2421
- await visit(dependency);
2783
+ const style = styles.includes(value) || /\.(?:scss|sass)(?:$|[?#])/i.test(value);
2784
+ const candidates = github ? await github.resolve(value, url, style) : dependencyUrlCandidates(value, url, style);
2785
+ if (candidates.some((dependency) => visited.has(dependency))) return;
2786
+ for (const [index, dependency] of candidates.entries()) try {
2787
+ await visit(dependency);
2788
+ break;
2789
+ } catch (reason) {
2790
+ if (visited.has(dependency) || !(reason instanceof ResourceRequestError) || reason.status !== 404 || index === candidates.length - 1) throw reason;
2791
+ }
2422
2792
  }));
2423
2793
  };
2424
2794
  await visit(rootUrl, sourceSnapshot);
@@ -2457,7 +2827,7 @@ var remote_sfc_default = /* @__PURE__ */ (0, vue.defineComponent)({
2457
2827
  clearSubscriptions();
2458
2828
  });
2459
2829
  return (_ctx, _cache) => {
2460
- return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_1$26, [error.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_2$21, (0, vue.toDisplayString)(error.value), 1)) : loading.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_3$15, (0, vue.toDisplayString)((0, vue.unref)(t)("client.common.loading")), 1)) : PlaygroundComponent.value ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(PlaygroundComponent.value), (0, vue.mergeProps)({ key: revision.value }, playgroundProps.value, { onNavigate: handleNavigate }), null, 16)) : (0, vue.createCommentVNode)("v-if", true)]);
2830
+ return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", { class: (0, vue.normalizeClass)(["docs-remote-sfc", { "docs-remote-sfc--viewport": useIframeViewport.value }]) }, [error.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_1$27, (0, vue.toDisplayString)(error.value), 1)) : loading.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_2$22, (0, vue.toDisplayString)((0, vue.unref)(t)("client.common.loading")), 1)) : PlaygroundComponent.value ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(PlaygroundComponent.value), (0, vue.mergeProps)({ key: `${revision.value}:${playgroundProps.value.local}` }, playgroundProps.value, { onNavigate: handleNavigate }), null, 16)) : (0, vue.createCommentVNode)("v-if", true)], 2);
2461
2831
  };
2462
2832
  }
2463
2833
  });
@@ -2483,7 +2853,7 @@ var sfc_default = /* @__PURE__ */ (0, vue.defineComponent)({
2483
2853
  });
2484
2854
  //#endregion
2485
2855
  //#region packages/client/src/components/renderer/source-editor.vue?vue&type=script&setup=true&lang.ts
2486
- var _hoisted_1$25 = { class: "docs-renderer-module-editor" };
2856
+ var _hoisted_1$26 = { class: "docs-renderer-module-editor" };
2487
2857
  //#endregion
2488
2858
  //#region packages/client/src/components/renderer/source-editor.vue
2489
2859
  var source_editor_default$1 = /* @__PURE__ */ (0, vue.defineComponent)({
@@ -2503,7 +2873,7 @@ var source_editor_default$1 = /* @__PURE__ */ (0, vue.defineComponent)({
2503
2873
  source
2504
2874
  });
2505
2875
  return (_ctx, _cache) => {
2506
- return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_1$25, [(0, vue.createElementVNode)("label", null, (0, vue.toDisplayString)((0, vue.unref)(t)("renderer.editor.source")), 1), (0, vue.createVNode)((0, vue.unref)(_deot_vc.Input), {
2876
+ return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_1$26, [(0, vue.createElementVNode)("label", null, (0, vue.toDisplayString)((0, vue.unref)(t)("renderer.editor.source")), 1), (0, vue.createVNode)((0, vue.unref)(_deot_vc.Input), {
2507
2877
  "model-value": String(__props.modelValue.source || ""),
2508
2878
  "onUpdate:modelValue": handleUpdate
2509
2879
  }, null, 8, ["model-value"])]);
@@ -2918,6 +3288,7 @@ var ResourcePlanner = class {
2918
3288
  return parsedKeys;
2919
3289
  }
2920
3290
  async collectResourcesDepthFirst(config, collector, records) {
3291
+ const resolveDependencies = createResourceDependencyResolver(records.filter((record) => typeof record.content === "string").map((record) => record.url));
2921
3292
  const recordsByKey = new Map(records.map((record) => [resourceIdentityKey(record.identity), record]));
2922
3293
  const ordered = [];
2923
3294
  const visited = /* @__PURE__ */ new Set();
@@ -2946,20 +3317,19 @@ var ResourcePlanner = class {
2946
3317
  if (!record || typeof record.content !== "string") return;
2947
3318
  let imports;
2948
3319
  try {
2949
- imports = await collectResourceImports(record.content, identity.type);
3320
+ imports = await resolveDependencies(record.content, identity.type, record.url);
2950
3321
  } catch {
2951
3322
  return;
2952
3323
  }
2953
- for (const specifier of imports.filter(isSupportedDependency)) {
3324
+ for (const url of imports) {
2954
3325
  let source;
2955
3326
  try {
2956
- const url = resolveDependencyUrl(specifier, record.url);
2957
3327
  source = toLogicalResourceSource(config, identity.lang, url);
2958
3328
  } catch {
2959
3329
  continue;
2960
3330
  }
2961
- const candidate = createResourceIdentity(config, identity.lang, classifyResourceSource(source), source);
2962
- const dependency = collector.add(identity.lang, source) || collector.identities.get(resourceIdentityKey(candidate));
3331
+ const candidate = createResourceIdentity(config, identity.lang, getResourceType(source), source);
3332
+ const dependency = collector.add(identity.lang, source, getResourceType(source)) || collector.identities.get(resourceIdentityKey(candidate));
2963
3333
  if (dependency) await visit(dependency);
2964
3334
  }
2965
3335
  };
@@ -3166,6 +3536,7 @@ var ResourcePlanner = class {
3166
3536
  return results;
3167
3537
  }
3168
3538
  async collectDependencyResources({ config, collector, seeds, strict, loadResources }) {
3539
+ const resolveDependencies = createResourceDependencyResolver((await this.gateway.list()).filter((record) => typeof record.content === "string").map((record) => record.url));
3169
3540
  const results = [];
3170
3541
  const processed = /* @__PURE__ */ new Set();
3171
3542
  let queue = seeds;
@@ -3183,21 +3554,24 @@ var ResourcePlanner = class {
3183
3554
  }
3184
3555
  let imports;
3185
3556
  try {
3186
- imports = await collectResourceImports(record.content, identity.type);
3557
+ imports = await resolveDependencies(record.content, identity.type, record.url, async (url) => {
3558
+ const source = toLogicalResourceSource(config, identity.lang, url);
3559
+ const [result] = await loadResources([createResourceIdentity(config, identity.lang, getResourceType(url), source)]);
3560
+ if (result.status === "rejected") throw result.reason;
3561
+ });
3187
3562
  } catch (reason) {
3188
3563
  if (strict) throw reason;
3189
3564
  continue;
3190
3565
  }
3191
- for (const specifier of imports.filter(isSupportedDependency)) {
3566
+ for (const url of imports) {
3192
3567
  let source;
3193
3568
  try {
3194
- const url = resolveDependencyUrl(specifier, record.url);
3195
3569
  source = toLogicalResourceSource(config, identity.lang, url);
3196
3570
  } catch (reason) {
3197
3571
  if (strict) throw reason;
3198
3572
  continue;
3199
3573
  }
3200
- const dependency = collector.add(identity.lang, source);
3574
+ const dependency = collector.add(identity.lang, source, getResourceType(source));
3201
3575
  if (dependency) discovered.push(dependency);
3202
3576
  }
3203
3577
  }
@@ -4211,52 +4585,52 @@ var SearchManager = class {
4211
4585
  var Search = new SearchManager();
4212
4586
  //#endregion
4213
4587
  //#region packages/client/src/components/search/search.vue?vue&type=script&setup=true&lang.ts
4214
- var _hoisted_1$24 = ["aria-label"];
4215
- var _hoisted_2$20 = { class: "docs-search__header" };
4216
- var _hoisted_3$14 = ["placeholder", "aria-label"];
4217
- var _hoisted_4$9 = { class: "docs-search__actions" };
4218
- var _hoisted_5$7 = ["aria-label"];
4219
- var _hoisted_6$5 = { class: "docs-search__body" };
4220
- var _hoisted_7$5 = { class: "docs-search__content" };
4221
- var _hoisted_8$4 = {
4588
+ var _hoisted_1$25 = ["aria-label"];
4589
+ var _hoisted_2$21 = { class: "docs-search__header" };
4590
+ var _hoisted_3$15 = ["placeholder", "aria-label"];
4591
+ var _hoisted_4$10 = { class: "docs-search__actions" };
4592
+ var _hoisted_5$8 = ["aria-label"];
4593
+ var _hoisted_6$6 = { class: "docs-search__body" };
4594
+ var _hoisted_7$6 = { class: "docs-search__content" };
4595
+ var _hoisted_8$6 = {
4222
4596
  key: 0,
4223
4597
  class: "docs-search__state"
4224
4598
  };
4225
- var _hoisted_9$3 = {
4599
+ var _hoisted_9$4 = {
4226
4600
  key: 1,
4227
4601
  class: "docs-search__state docs-search__state--error"
4228
4602
  };
4229
- var _hoisted_10$3 = { class: "docs-search__group-title" };
4230
- var _hoisted_11$3 = [
4603
+ var _hoisted_10$4 = { class: "docs-search__group-title" };
4604
+ var _hoisted_11$4 = [
4231
4605
  "data-search-index",
4232
4606
  "onMouseenter",
4233
4607
  "onClick"
4234
4608
  ];
4235
- var _hoisted_12$3 = {
4609
+ var _hoisted_12$4 = {
4236
4610
  class: "docs-search__result-icon",
4237
4611
  "aria-hidden": "true"
4238
4612
  };
4239
- var _hoisted_13$2 = { class: "docs-search__result-content" };
4240
- var _hoisted_14$1 = { class: "docs-search__result-title" };
4241
- var _hoisted_15$1 = {
4613
+ var _hoisted_13$3 = { class: "docs-search__result-content" };
4614
+ var _hoisted_14$2 = { class: "docs-search__result-title" };
4615
+ var _hoisted_15$2 = {
4242
4616
  key: 0,
4243
4617
  class: "docs-search__result-parent"
4244
4618
  };
4245
- var _hoisted_16$1 = {
4619
+ var _hoisted_16$2 = {
4246
4620
  key: 1,
4247
4621
  class: "docs-search__result-excerpt"
4248
4622
  };
4249
- var _hoisted_17$1 = {
4623
+ var _hoisted_17$2 = {
4250
4624
  key: 0,
4251
4625
  class: "docs-search__state"
4252
4626
  };
4253
- var _hoisted_18 = { class: "docs-search__group-title" };
4254
- var _hoisted_19 = [
4627
+ var _hoisted_18$1 = { class: "docs-search__group-title" };
4628
+ var _hoisted_19$1 = [
4255
4629
  "data-search-index",
4256
4630
  "onMouseenter",
4257
4631
  "onClick"
4258
4632
  ];
4259
- var _hoisted_20 = { class: "docs-search__result-content" };
4633
+ var _hoisted_20$1 = { class: "docs-search__result-content" };
4260
4634
  var _hoisted_21 = { class: "docs-search__result-title" };
4261
4635
  var _hoisted_22 = {
4262
4636
  key: 0,
@@ -4466,7 +4840,7 @@ var search_default = /* @__PURE__ */ (0, vue.defineComponent)({
4466
4840
  "aria-label": (0, vue.unref)(t)("client.search.dialogLabel"),
4467
4841
  onKeydown: handleKeydown
4468
4842
  }, [
4469
- (0, vue.createElementVNode)("header", _hoisted_2$20, [
4843
+ (0, vue.createElementVNode)("header", _hoisted_2$21, [
4470
4844
  _cache[2] || (_cache[2] = (0, vue.createElementVNode)("span", {
4471
4845
  class: "docs-search__icon",
4472
4846
  "aria-hidden": "true"
@@ -4482,8 +4856,8 @@ var search_default = /* @__PURE__ */ (0, vue.defineComponent)({
4482
4856
  "aria-label": (0, vue.unref)(t)("client.search.placeholder"),
4483
4857
  onCompositionstart: _cache[1] || (_cache[1] = ($event) => composing.value = true),
4484
4858
  onCompositionend: handleCompositionEnd
4485
- }, null, 40, _hoisted_3$14), [[vue.vModelText, keyword.value]]),
4486
- (0, vue.createElementVNode)("div", _hoisted_4$9, [keyword.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
4859
+ }, null, 40, _hoisted_3$15), [[vue.vModelText, keyword.value]]),
4860
+ (0, vue.createElementVNode)("div", _hoisted_4$10, [keyword.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
4487
4861
  key: 0,
4488
4862
  class: "docs-search__clear",
4489
4863
  type: "button",
@@ -4493,9 +4867,9 @@ var search_default = /* @__PURE__ */ (0, vue.defineComponent)({
4493
4867
  type: "button",
4494
4868
  "aria-label": (0, vue.unref)(t)("client.search.close"),
4495
4869
  onClick: handleClose
4496
- }, " esc ", 8, _hoisted_5$7)])
4870
+ }, " esc ", 8, _hoisted_5$8)])
4497
4871
  ]),
4498
- (0, vue.createElementVNode)("div", _hoisted_6$5, [(0, vue.createVNode)((0, vue.unref)(_deot_vc.Scroller), {
4872
+ (0, vue.createElementVNode)("div", _hoisted_6$6, [(0, vue.createVNode)((0, vue.unref)(_deot_vc.Scroller), {
4499
4873
  class: "docs-search__scroller",
4500
4874
  "auto-resize": true,
4501
4875
  native: false,
@@ -4503,8 +4877,8 @@ var search_default = /* @__PURE__ */ (0, vue.defineComponent)({
4503
4877
  height: "100%",
4504
4878
  "wrapper-style": "overflow-x: hidden;"
4505
4879
  }, {
4506
- default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", _hoisted_7$5, [loading.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_8$4, (0, vue.toDisplayString)((0, vue.unref)(t)("client.search.searching")), 1)) : error.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_9$3, (0, vue.toDisplayString)(error.value), 1)) : keyword.value.trim() ? ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 2 }, [
4507
- (0, vue.createElementVNode)("div", _hoisted_10$3, (0, vue.toDisplayString)((0, vue.unref)(t)("client.search.documentation")), 1),
4880
+ default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", _hoisted_7$6, [loading.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_8$6, (0, vue.toDisplayString)((0, vue.unref)(t)("client.search.searching")), 1)) : error.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_9$4, (0, vue.toDisplayString)(error.value), 1)) : keyword.value.trim() ? ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 2 }, [
4881
+ (0, vue.createElementVNode)("div", _hoisted_10$4, (0, vue.toDisplayString)((0, vue.unref)(t)("client.search.documentation")), 1),
4508
4882
  ((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(results.value, (item, index) => {
4509
4883
  return (0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
4510
4884
  key: `${item.id}:${item.kind}`,
@@ -4517,11 +4891,11 @@ var search_default = /* @__PURE__ */ (0, vue.defineComponent)({
4517
4891
  onMouseenter: ($event) => handleMouseenter(index),
4518
4892
  onClick: ($event) => handleSelect(item)
4519
4893
  }, [
4520
- (0, vue.createElementVNode)("span", _hoisted_12$3, (0, vue.toDisplayString)(item.kind === "section" ? "#" : "▤"), 1),
4521
- (0, vue.createElementVNode)("span", _hoisted_13$2, [(0, vue.createElementVNode)("span", _hoisted_14$1, [(0, vue.createVNode)(highlight_text_default, {
4894
+ (0, vue.createElementVNode)("span", _hoisted_12$4, (0, vue.toDisplayString)(item.kind === "section" ? "#" : "▤"), 1),
4895
+ (0, vue.createElementVNode)("span", _hoisted_13$3, [(0, vue.createElementVNode)("span", _hoisted_14$2, [(0, vue.createVNode)(highlight_text_default, {
4522
4896
  text: item.sectionTitle || item.title,
4523
4897
  keyword: keyword.value
4524
- }, null, 8, ["text", "keyword"])]), item.kind === "section" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", _hoisted_15$1, (0, vue.toDisplayString)(item.title), 1)) : item.excerpt ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", _hoisted_16$1, [(0, vue.createVNode)(highlight_text_default, {
4898
+ }, null, 8, ["text", "keyword"])]), item.kind === "section" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", _hoisted_15$2, (0, vue.toDisplayString)(item.title), 1)) : item.excerpt ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", _hoisted_16$2, [(0, vue.createVNode)(highlight_text_default, {
4525
4899
  text: item.excerpt,
4526
4900
  keyword: keyword.value
4527
4901
  }, null, 8, ["text", "keyword"])])) : (0, vue.createCommentVNode)("v-if", true)]),
@@ -4529,11 +4903,11 @@ var search_default = /* @__PURE__ */ (0, vue.defineComponent)({
4529
4903
  class: "docs-search__enter",
4530
4904
  "aria-hidden": "true"
4531
4905
  }, "↵", -1))
4532
- ], 42, _hoisted_11$3);
4906
+ ], 42, _hoisted_11$4);
4533
4907
  }), 128)),
4534
- !results.value.length ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_17$1, (0, vue.toDisplayString)(preparedCount.value ? (0, vue.unref)(t)("client.search.noResults") : (0, vue.unref)(t)("client.search.noCachedDocuments")), 1)) : (0, vue.createCommentVNode)("v-if", true)
4908
+ !results.value.length ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_17$2, (0, vue.toDisplayString)(preparedCount.value ? (0, vue.unref)(t)("client.search.noResults") : (0, vue.unref)(t)("client.search.noCachedDocuments")), 1)) : (0, vue.createCommentVNode)("v-if", true)
4535
4909
  ], 64)) : ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 3 }, [
4536
- (0, vue.createElementVNode)("div", _hoisted_18, (0, vue.toDisplayString)((0, vue.unref)(t)("client.search.recent")), 1),
4910
+ (0, vue.createElementVNode)("div", _hoisted_18$1, (0, vue.toDisplayString)((0, vue.unref)(t)("client.search.recent")), 1),
4537
4911
  ((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(history.value, (item, index) => {
4538
4912
  return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
4539
4913
  key: item.id,
@@ -4548,7 +4922,7 @@ var search_default = /* @__PURE__ */ (0, vue.defineComponent)({
4548
4922
  class: "docs-search__history-icon",
4549
4923
  "aria-hidden": "true"
4550
4924
  }, "↶", -1)),
4551
- (0, vue.createElementVNode)("span", _hoisted_20, [(0, vue.createElementVNode)("span", _hoisted_21, (0, vue.toDisplayString)(item.sectionTitle || item.title), 1), item.sectionTitle ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", _hoisted_22, (0, vue.toDisplayString)(item.title), 1)) : (0, vue.createCommentVNode)("v-if", true)]),
4925
+ (0, vue.createElementVNode)("span", _hoisted_20$1, [(0, vue.createElementVNode)("span", _hoisted_21, (0, vue.toDisplayString)(item.sectionTitle || item.title), 1), item.sectionTitle ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", _hoisted_22, (0, vue.toDisplayString)(item.title), 1)) : (0, vue.createCommentVNode)("v-if", true)]),
4552
4926
  (0, vue.createElementVNode)("button", {
4553
4927
  class: (0, vue.normalizeClass)(["docs-search__history-action", { "docs-search__history-action--active": item.pinned }]),
4554
4928
  type: "button",
@@ -4561,7 +4935,7 @@ var search_default = /* @__PURE__ */ (0, vue.defineComponent)({
4561
4935
  "aria-label": (0, vue.unref)(t)("client.search.remove"),
4562
4936
  onClick: (0, vue.withModifiers)(($event) => handleRemoveHistory(item.id), ["stop"])
4563
4937
  }, " × ", 8, _hoisted_24)
4564
- ], 42, _hoisted_19);
4938
+ ], 42, _hoisted_19$1);
4565
4939
  }), 128)),
4566
4940
  !history.value.length ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_25, (0, vue.toDisplayString)((0, vue.unref)(t)("client.search.noRecent")), 1)) : (0, vue.createCommentVNode)("v-if", true)
4567
4941
  ], 64))])]),
@@ -4576,7 +4950,7 @@ var search_default = /* @__PURE__ */ (0, vue.defineComponent)({
4576
4950
  (0, vue.createElementVNode)("span", null, [_cache[7] || (_cache[7] = (0, vue.createElementVNode)("kbd", null, "↵", -1)), (0, vue.createTextVNode)(" " + (0, vue.toDisplayString)((0, vue.unref)(t)("client.search.selectHint")), 1)]),
4577
4951
  (0, vue.createElementVNode)("span", null, [_cache[8] || (_cache[8] = (0, vue.createElementVNode)("kbd", null, "ESC", -1)), (0, vue.createTextVNode)(" " + (0, vue.toDisplayString)((0, vue.unref)(t)("client.search.closeHint")), 1)])
4578
4952
  ])
4579
- ], 40, _hoisted_1$24)]);
4953
+ ], 40, _hoisted_1$25)]);
4580
4954
  };
4581
4955
  }
4582
4956
  });
@@ -4593,8 +4967,8 @@ var DocsSearch = new _deot_vc.Portal(search_default, {
4593
4967
  });
4594
4968
  //#endregion
4595
4969
  //#region packages/client/src/components/search/trigger.vue?vue&type=script&setup=true&lang.ts
4596
- var _hoisted_1$23 = ["aria-label"];
4597
- var _hoisted_2$19 = { class: "docs-search-trigger__shortcut" };
4970
+ var _hoisted_1$24 = ["aria-label"];
4971
+ var _hoisted_2$20 = { class: "docs-search-trigger__shortcut" };
4598
4972
  //#endregion
4599
4973
  //#region packages/client/src/components/search/trigger.vue
4600
4974
  var trigger_default = /* @__PURE__ */ (0, vue.defineComponent)({
@@ -4638,7 +5012,7 @@ var trigger_default = /* @__PURE__ */ (0, vue.defineComponent)({
4638
5012
  }, [_cache[0] || (_cache[0] = (0, vue.createElementVNode)("span", {
4639
5013
  class: "docs-search-trigger__icon",
4640
5014
  "aria-hidden": "true"
4641
- }, null, -1)), (0, vue.createElementVNode)("kbd", _hoisted_2$19, (0, vue.toDisplayString)((0, vue.unref)(shortcut)), 1)], 8, _hoisted_1$23);
5015
+ }, null, -1)), (0, vue.createElementVNode)("kbd", _hoisted_2$20, (0, vue.toDisplayString)((0, vue.unref)(shortcut)), 1)], 8, _hoisted_1$24);
4642
5016
  };
4643
5017
  }
4644
5018
  });
@@ -4747,12 +5121,12 @@ var CLIENT_ICON_DEFINITIONS = {
4747
5121
  };
4748
5122
  //#endregion
4749
5123
  //#region packages/client/src/components/icon/icon.vue?vue&type=script&setup=true&lang.ts
4750
- var _hoisted_1$22 = [
5124
+ var _hoisted_1$23 = [
4751
5125
  "data-icon",
4752
5126
  "fill",
4753
5127
  "stroke"
4754
5128
  ];
4755
- var _hoisted_2$18 = ["d"];
5129
+ var _hoisted_2$19 = ["d"];
4756
5130
  //#endregion
4757
5131
  //#region packages/client/src/components/icon/icon.vue
4758
5132
  var icon_default = /* @__PURE__ */ (0, vue.defineComponent)({
@@ -4784,13 +5158,13 @@ var icon_default = /* @__PURE__ */ (0, vue.defineComponent)({
4784
5158
  "stroke-linecap": "round",
4785
5159
  "stroke-linejoin": "round",
4786
5160
  "aria-hidden": "true"
4787
- }, [(0, vue.createElementVNode)("path", { d: definition.value.path }, null, 8, _hoisted_2$18)], 12, _hoisted_1$22);
5161
+ }, [(0, vue.createElementVNode)("path", { d: definition.value.path }, null, 8, _hoisted_2$19)], 12, _hoisted_1$23);
4788
5162
  };
4789
5163
  }
4790
5164
  });
4791
5165
  //#endregion
4792
5166
  //#region packages/client/src/components/theme-toggler/index.vue?vue&type=script&setup=true&lang.ts
4793
- var _hoisted_1$21 = [
5167
+ var _hoisted_1$22 = [
4794
5168
  "aria-checked",
4795
5169
  "aria-label",
4796
5170
  "onKeydown"
@@ -4828,7 +5202,7 @@ var theme_toggler_default = /* @__PURE__ */ (0, vue.defineComponent)({
4828
5202
  }, null, 8, ["model-value"]), (0, vue.createVNode)((0, vue.unref)(icon_default), {
4829
5203
  name: isDark.value ? "moon" : "sun",
4830
5204
  class: (0, vue.normalizeClass)(["theme-toggler__icon", isDark.value ? "is-dark" : "is-light"])
4831
- }, null, 8, ["name", "class"])], 40, _hoisted_1$21)) : (0, vue.createCommentVNode)("v-if", true);
5205
+ }, null, 8, ["name", "class"])], 40, _hoisted_1$22)) : (0, vue.createCommentVNode)("v-if", true);
4832
5206
  };
4833
5207
  }
4834
5208
  });
@@ -4876,37 +5250,37 @@ var takeInlineRendererDocument = (from) => {
4876
5250
  };
4877
5251
  //#endregion
4878
5252
  //#region packages/client/src/components/layout/default-header.vue?vue&type=script&setup=true&lang.ts
4879
- var _hoisted_1$20 = { class: "docs-header" };
4880
- var _hoisted_2$17 = ["href"];
4881
- var _hoisted_3$13 = ["src"];
4882
- var _hoisted_4$8 = ["src"];
4883
- var _hoisted_5$6 = { class: "docs-header__search" };
4884
- var _hoisted_6$4 = ["aria-label"];
4885
- var _hoisted_7$4 = ["aria-expanded"];
4886
- var _hoisted_8$3 = ["href"];
4887
- var _hoisted_9$2 = { key: 2 };
4888
- var _hoisted_10$2 = ["href"];
4889
- var _hoisted_11$2 = {
5253
+ var _hoisted_1$21 = { class: "docs-header" };
5254
+ var _hoisted_2$18 = ["href"];
5255
+ var _hoisted_3$14 = ["src"];
5256
+ var _hoisted_4$9 = ["src"];
5257
+ var _hoisted_5$7 = { class: "docs-header__search" };
5258
+ var _hoisted_6$5 = ["aria-label"];
5259
+ var _hoisted_7$5 = ["aria-expanded"];
5260
+ var _hoisted_8$5 = ["href"];
5261
+ var _hoisted_9$3 = { key: 2 };
5262
+ var _hoisted_10$3 = ["href"];
5263
+ var _hoisted_11$3 = {
4890
5264
  key: 3,
4891
5265
  class: "docs-header__nav-item"
4892
5266
  };
4893
- var _hoisted_12$2 = { class: "docs-header__actions" };
4894
- var _hoisted_13$1 = {
5267
+ var _hoisted_12$3 = { class: "docs-header__actions" };
5268
+ var _hoisted_13$2 = {
4895
5269
  key: 0,
4896
5270
  class: "docs-header__locales"
4897
5271
  };
4898
- var _hoisted_14 = [
5272
+ var _hoisted_14$1 = [
4899
5273
  "title",
4900
5274
  "aria-label",
4901
5275
  "aria-expanded"
4902
5276
  ];
4903
- var _hoisted_15 = [
5277
+ var _hoisted_15$1 = [
4904
5278
  "href",
4905
5279
  "title",
4906
5280
  "aria-label"
4907
5281
  ];
4908
- var _hoisted_16 = { class: "docs-header__tools" };
4909
- var _hoisted_17 = [
5282
+ var _hoisted_16$1 = { class: "docs-header__tools" };
5283
+ var _hoisted_17$1 = [
4910
5284
  "title",
4911
5285
  "aria-label",
4912
5286
  "aria-expanded"
@@ -5069,7 +5443,7 @@ var default_header_default = /* @__PURE__ */ (0, vue.defineComponent)({
5069
5443
  if (action === "database") router.push(databasePath.value);
5070
5444
  };
5071
5445
  return (_ctx, _cache) => {
5072
- return (0, vue.openBlock)(), (0, vue.createElementBlock)("header", _hoisted_1$20, [
5446
+ return (0, vue.openBlock)(), (0, vue.createElementBlock)("header", _hoisted_1$21, [
5073
5447
  brandExternal.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("a", {
5074
5448
  key: 0,
5075
5449
  class: "docs-header__brand",
@@ -5081,7 +5455,7 @@ var default_header_default = /* @__PURE__ */ (0, vue.defineComponent)({
5081
5455
  class: "docs-header__brand-logo",
5082
5456
  src: brandLogo.value,
5083
5457
  alt: ""
5084
- }, null, 8, _hoisted_3$13)) : (0, vue.createCommentVNode)("v-if", true), (0, vue.createTextVNode)(" " + (0, vue.toDisplayString)(brandLabel.value), 1)], 8, _hoisted_2$17)) : ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(vue_router.RouterLink), {
5458
+ }, null, 8, _hoisted_3$14)) : (0, vue.createCommentVNode)("v-if", true), (0, vue.createTextVNode)(" " + (0, vue.toDisplayString)(brandLabel.value), 1)], 8, _hoisted_2$18)) : ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(vue_router.RouterLink), {
5085
5459
  key: 1,
5086
5460
  class: "docs-header__brand",
5087
5461
  to: brandPath.value
@@ -5091,10 +5465,10 @@ var default_header_default = /* @__PURE__ */ (0, vue.defineComponent)({
5091
5465
  class: "docs-header__brand-logo",
5092
5466
  src: brandLogo.value,
5093
5467
  alt: ""
5094
- }, null, 8, _hoisted_4$8)) : (0, vue.createCommentVNode)("v-if", true), (0, vue.createTextVNode)(" " + (0, vue.toDisplayString)(brandLabel.value), 1)]),
5468
+ }, null, 8, _hoisted_4$9)) : (0, vue.createCommentVNode)("v-if", true), (0, vue.createTextVNode)(" " + (0, vue.toDisplayString)(brandLabel.value), 1)]),
5095
5469
  _: 1
5096
5470
  }, 8, ["to"])),
5097
- (0, vue.createElementVNode)("div", _hoisted_5$6, [(0, vue.createVNode)((0, vue.unref)(trigger_default))]),
5471
+ (0, vue.createElementVNode)("div", _hoisted_5$7, [(0, vue.createVNode)((0, vue.unref)(trigger_default))]),
5098
5472
  navItems.value.length ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("nav", {
5099
5473
  key: 2,
5100
5474
  class: "docs-header__nav",
@@ -5126,13 +5500,13 @@ var default_header_default = /* @__PURE__ */ (0, vue.defineComponent)({
5126
5500
  href: child.value,
5127
5501
  target: "_blank",
5128
5502
  rel: "noopener noreferrer"
5129
- }, (0, vue.toDisplayString)(child.label), 9, _hoisted_8$3)) : child.value ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(vue_router.RouterLink), {
5503
+ }, (0, vue.toDisplayString)(child.label), 9, _hoisted_8$5)) : child.value ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(vue_router.RouterLink), {
5130
5504
  key: 1,
5131
5505
  to: (0, vue.unref)(localizePath)((0, vue.unref)(config), lang.value, child.value)
5132
5506
  }, {
5133
5507
  default: (0, vue.withCtx)(() => [(0, vue.createTextVNode)((0, vue.toDisplayString)(child.label), 1)]),
5134
5508
  _: 2
5135
- }, 1032, ["to"])) : ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", _hoisted_9$2, (0, vue.toDisplayString)(child.label), 1))]),
5509
+ }, 1032, ["to"])) : ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", _hoisted_9$3, (0, vue.toDisplayString)(child.label), 1))]),
5136
5510
  _: 2
5137
5511
  }, 1032, ["value"]);
5138
5512
  }), 128))]),
@@ -5143,7 +5517,7 @@ var default_header_default = /* @__PURE__ */ (0, vue.defineComponent)({
5143
5517
  class: (0, vue.normalizeClass)(["docs-header__nav-item docs-header__nav-trigger", { "is-active": isNavItemActive(item) }]),
5144
5518
  "aria-expanded": Boolean(navMenuVisible.value[index]),
5145
5519
  "aria-haspopup": "menu"
5146
- }, (0, vue.toDisplayString)(item.label), 11, _hoisted_7$4)]),
5520
+ }, (0, vue.toDisplayString)(item.label), 11, _hoisted_7$5)]),
5147
5521
  _: 2
5148
5522
  }, 1032, ["model-value", "onUpdate:modelValue"])) : item.value && (0, vue.unref)(isExternalLink)(item.value) ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("a", {
5149
5523
  key: 1,
@@ -5151,18 +5525,18 @@ var default_header_default = /* @__PURE__ */ (0, vue.defineComponent)({
5151
5525
  href: item.value,
5152
5526
  target: "_blank",
5153
5527
  rel: "noopener noreferrer"
5154
- }, (0, vue.toDisplayString)(item.label), 9, _hoisted_10$2)) : item.value ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(vue_router.RouterLink), {
5528
+ }, (0, vue.toDisplayString)(item.label), 9, _hoisted_10$3)) : item.value ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(vue_router.RouterLink), {
5155
5529
  key: 2,
5156
5530
  class: (0, vue.normalizeClass)(["docs-header__nav-item", { "is-active": isNavItemActive(item) }]),
5157
5531
  to: (0, vue.unref)(localizePath)((0, vue.unref)(config), lang.value, item.value)
5158
5532
  }, {
5159
5533
  default: (0, vue.withCtx)(() => [(0, vue.createTextVNode)((0, vue.toDisplayString)(item.label), 1)]),
5160
5534
  _: 2
5161
- }, 1032, ["class", "to"])) : ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", _hoisted_11$2, (0, vue.toDisplayString)(item.label), 1))], 64);
5162
- }), 128))], 8, _hoisted_6$4)) : (0, vue.createCommentVNode)("v-if", true),
5163
- (0, vue.createElementVNode)("div", _hoisted_12$2, [
5535
+ }, 1032, ["class", "to"])) : ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", _hoisted_11$3, (0, vue.toDisplayString)(item.label), 1))], 64);
5536
+ }), 128))], 8, _hoisted_6$5)) : (0, vue.createCommentVNode)("v-if", true),
5537
+ (0, vue.createElementVNode)("div", _hoisted_12$3, [
5164
5538
  (0, vue.createVNode)((0, vue.unref)(theme_toggler_default), { class: "docs-header__theme" }),
5165
- localeOptions.value.length > 1 ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("nav", _hoisted_13$1, [(0, vue.createVNode)((0, vue.unref)(_deot_vc.Dropdown), {
5539
+ localeOptions.value.length > 1 ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("nav", _hoisted_13$2, [(0, vue.createVNode)((0, vue.unref)(_deot_vc.Dropdown), {
5166
5540
  modelValue: localeMenuVisible.value,
5167
5541
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => localeMenuVisible.value = $event),
5168
5542
  class: "docs-header__locale-dropdown",
@@ -5205,7 +5579,7 @@ var default_header_default = /* @__PURE__ */ (0, vue.defineComponent)({
5205
5579
  }, [(0, vue.createVNode)((0, vue.unref)(icon_default), {
5206
5580
  name: "language",
5207
5581
  size: 22
5208
- })], 8, _hoisted_14)]),
5582
+ })], 8, _hoisted_14$1)]),
5209
5583
  _: 1
5210
5584
  }, 8, ["modelValue"])])) : (0, vue.createCommentVNode)("v-if", true),
5211
5585
  repositoryHref.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("a", {
@@ -5219,8 +5593,8 @@ var default_header_default = /* @__PURE__ */ (0, vue.defineComponent)({
5219
5593
  }, [(0, vue.createVNode)((0, vue.unref)(icon_default), {
5220
5594
  name: repositoryIcon.value,
5221
5595
  size: 24
5222
- }, null, 8, ["name"])], 8, _hoisted_15)) : (0, vue.createCommentVNode)("v-if", true),
5223
- (0, vue.createElementVNode)("nav", _hoisted_16, [(0, vue.createVNode)((0, vue.unref)(_deot_vc.Dropdown), {
5596
+ }, null, 8, ["name"])], 8, _hoisted_15$1)) : (0, vue.createCommentVNode)("v-if", true),
5597
+ (0, vue.createElementVNode)("nav", _hoisted_16$1, [(0, vue.createVNode)((0, vue.unref)(_deot_vc.Dropdown), {
5224
5598
  modelValue: toolsMenuVisible.value,
5225
5599
  "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => toolsMenuVisible.value = $event),
5226
5600
  class: "docs-header__tools-dropdown",
@@ -5261,7 +5635,7 @@ var default_header_default = /* @__PURE__ */ (0, vue.defineComponent)({
5261
5635
  }, [(0, vue.createVNode)((0, vue.unref)(icon_default), {
5262
5636
  name: "more",
5263
5637
  size: 22
5264
- })], 8, _hoisted_17)]),
5638
+ })], 8, _hoisted_17$1)]),
5265
5639
  _: 1
5266
5640
  }, 8, ["modelValue"])])
5267
5641
  ])
@@ -5326,11 +5700,11 @@ var pickSidebarIconValue = (icon, selected) => {
5326
5700
  };
5327
5701
  //#endregion
5328
5702
  //#region packages/client/src/components/layout/sidebar-glyph.vue?vue&type=script&setup=true&lang.ts
5329
- var _hoisted_1$19 = {
5703
+ var _hoisted_1$20 = {
5330
5704
  key: 0,
5331
5705
  class: "docs-sidebar__icon"
5332
5706
  };
5333
- var _hoisted_2$16 = ["src"];
5707
+ var _hoisted_2$17 = ["src"];
5334
5708
  //#endregion
5335
5709
  //#region packages/client/src/components/layout/sidebar-glyph.vue
5336
5710
  var sidebar_glyph_default = /* @__PURE__ */ (0, vue.defineComponent)({
@@ -5346,12 +5720,12 @@ var sidebar_glyph_default = /* @__PURE__ */ (0, vue.defineComponent)({
5346
5720
  const kind = (0, vue.computed)(() => resolveSidebarIconKind(value.value));
5347
5721
  const src = (0, vue.computed)(() => toSidebarIconSrc(value.value));
5348
5722
  return (_ctx, _cache) => {
5349
- return value.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", _hoisted_1$19, [kind.value === "url" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("img", {
5723
+ return value.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", _hoisted_1$20, [kind.value === "url" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("img", {
5350
5724
  key: 0,
5351
5725
  class: "docs-sidebar__media",
5352
5726
  src: src.value,
5353
5727
  alt: ""
5354
- }, null, 8, _hoisted_2$16)) : kind.value === "type" ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(_deot_vc.Icon), {
5728
+ }, null, 8, _hoisted_2$17)) : kind.value === "type" ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(_deot_vc.Icon), {
5355
5729
  key: 1,
5356
5730
  class: "docs-sidebar__glyph",
5357
5731
  type: value.value,
@@ -5362,23 +5736,23 @@ var sidebar_glyph_default = /* @__PURE__ */ (0, vue.defineComponent)({
5362
5736
  });
5363
5737
  //#endregion
5364
5738
  //#region packages/client/src/components/layout/default-sidebar.vue?vue&type=script&setup=true&lang.ts
5365
- var _hoisted_1$18 = ["href"];
5366
- var _hoisted_2$15 = { class: "docs-sidebar__text" };
5367
- var _hoisted_3$12 = {
5739
+ var _hoisted_1$19 = ["href"];
5740
+ var _hoisted_2$16 = { class: "docs-sidebar__text" };
5741
+ var _hoisted_3$13 = {
5368
5742
  key: 0,
5369
5743
  class: "docs-sidebar__tag"
5370
5744
  };
5371
- var _hoisted_4$7 = { class: "docs-sidebar__text" };
5372
- var _hoisted_5$5 = {
5745
+ var _hoisted_4$8 = { class: "docs-sidebar__text" };
5746
+ var _hoisted_5$6 = {
5373
5747
  key: 0,
5374
5748
  class: "docs-sidebar__tag"
5375
5749
  };
5376
- var _hoisted_6$3 = {
5750
+ var _hoisted_6$4 = {
5377
5751
  key: 2,
5378
5752
  class: "docs-sidebar__label"
5379
5753
  };
5380
- var _hoisted_7$3 = { class: "docs-sidebar__text" };
5381
- var _hoisted_8$2 = {
5754
+ var _hoisted_7$4 = { class: "docs-sidebar__text" };
5755
+ var _hoisted_8$4 = {
5382
5756
  key: 0,
5383
5757
  class: "docs-sidebar__tag"
5384
5758
  };
@@ -5417,9 +5791,9 @@ var default_sidebar_default = /* @__PURE__ */ (0, vue.defineComponent)({
5417
5791
  href: item.value
5418
5792
  }, [
5419
5793
  (0, vue.createVNode)(sidebar_glyph_default, { item }, null, 8, ["item"]),
5420
- (0, vue.createElementVNode)("span", _hoisted_2$15, (0, vue.toDisplayString)(item.label), 1),
5421
- item.tag ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", _hoisted_3$12, (0, vue.toDisplayString)(item.tag), 1)) : (0, vue.createCommentVNode)("v-if", true)
5422
- ], 8, _hoisted_1$18)) : item.value ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(vue_router.RouterLink), {
5794
+ (0, vue.createElementVNode)("span", _hoisted_2$16, (0, vue.toDisplayString)(item.label), 1),
5795
+ item.tag ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", _hoisted_3$13, (0, vue.toDisplayString)(item.tag), 1)) : (0, vue.createCommentVNode)("v-if", true)
5796
+ ], 8, _hoisted_1$19)) : item.value ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(vue_router.RouterLink), {
5423
5797
  key: 1,
5424
5798
  class: (0, vue.normalizeClass)(["docs-sidebar__link", { "is-active": isItemActive(item.value) }]),
5425
5799
  to: toPath(item.value)
@@ -5429,14 +5803,14 @@ var default_sidebar_default = /* @__PURE__ */ (0, vue.defineComponent)({
5429
5803
  item,
5430
5804
  selected: isItemActive(item.value)
5431
5805
  }, null, 8, ["item", "selected"]),
5432
- (0, vue.createElementVNode)("span", _hoisted_4$7, (0, vue.toDisplayString)(item.label), 1),
5433
- item.tag ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", _hoisted_5$5, (0, vue.toDisplayString)(item.tag), 1)) : (0, vue.createCommentVNode)("v-if", true)
5806
+ (0, vue.createElementVNode)("span", _hoisted_4$8, (0, vue.toDisplayString)(item.label), 1),
5807
+ item.tag ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", _hoisted_5$6, (0, vue.toDisplayString)(item.tag), 1)) : (0, vue.createCommentVNode)("v-if", true)
5434
5808
  ]),
5435
5809
  _: 2
5436
- }, 1032, ["class", "to"])) : ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", _hoisted_6$3, [
5810
+ }, 1032, ["class", "to"])) : ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", _hoisted_6$4, [
5437
5811
  (0, vue.createVNode)(sidebar_glyph_default, { item }, null, 8, ["item"]),
5438
- (0, vue.createElementVNode)("span", _hoisted_7$3, (0, vue.toDisplayString)(item.label), 1),
5439
- item.tag ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", _hoisted_8$2, (0, vue.toDisplayString)(item.tag), 1)) : (0, vue.createCommentVNode)("v-if", true)
5812
+ (0, vue.createElementVNode)("span", _hoisted_7$4, (0, vue.toDisplayString)(item.label), 1),
5813
+ item.tag ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", _hoisted_8$4, (0, vue.toDisplayString)(item.tag), 1)) : (0, vue.createCommentVNode)("v-if", true)
5440
5814
  ])), item.children?.length ? ((0, vue.openBlock)(), (0, vue.createBlock)(_component_DefaultSidebar, {
5441
5815
  key: 3,
5442
5816
  items: item.children,
@@ -5449,8 +5823,8 @@ var default_sidebar_default = /* @__PURE__ */ (0, vue.defineComponent)({
5449
5823
  });
5450
5824
  //#endregion
5451
5825
  //#region packages/client/src/components/layout/content-width-toggle.vue?vue&type=script&setup=true&lang.ts
5452
- var _hoisted_1$17 = ["aria-label"];
5453
- var _hoisted_2$14 = [
5826
+ var _hoisted_1$18 = ["aria-label"];
5827
+ var _hoisted_2$15 = [
5454
5828
  "aria-checked",
5455
5829
  "aria-label",
5456
5830
  "tabindex",
@@ -5517,20 +5891,20 @@ var content_width_toggle_default = /* @__PURE__ */ (0, vue.defineComponent)({
5517
5891
  class: "docs-content-width__icon",
5518
5892
  name: option.icon,
5519
5893
  size: 12
5520
- }, null, 8, ["name"])], 10, _hoisted_2$14);
5521
- }), 128))], 40, _hoisted_1$17);
5894
+ }, null, 8, ["name"])], 10, _hoisted_2$15);
5895
+ }), 128))], 40, _hoisted_1$18);
5522
5896
  };
5523
5897
  }
5524
5898
  });
5525
5899
  //#endregion
5526
5900
  //#region packages/client/src/components/layout/page-header.vue?vue&type=script&setup=true&lang.ts
5527
- var _hoisted_1$16 = { class: "docs-page-header" };
5528
- var _hoisted_2$13 = {
5901
+ var _hoisted_1$17 = { class: "docs-page-header" };
5902
+ var _hoisted_2$14 = {
5529
5903
  key: 0,
5530
5904
  class: "docs-page-header__start"
5531
5905
  };
5532
- var _hoisted_3$11 = { class: "docs-page-header__eyebrow" };
5533
- var _hoisted_4$6 = { class: "docs-page-header__end" };
5906
+ var _hoisted_3$12 = { class: "docs-page-header__eyebrow" };
5907
+ var _hoisted_4$7 = { class: "docs-page-header__end" };
5534
5908
  //#endregion
5535
5909
  //#region packages/client/src/components/layout/page-header.vue
5536
5910
  var page_header_default = /* @__PURE__ */ (0, vue.defineComponent)({
@@ -5544,13 +5918,13 @@ var page_header_default = /* @__PURE__ */ (0, vue.defineComponent)({
5544
5918
  return findSidebarSection(sidebarItems.value, route.path, lang.value);
5545
5919
  });
5546
5920
  return (_ctx, _cache) => {
5547
- return (0, vue.openBlock)(), (0, vue.createElementBlock)("header", _hoisted_1$16, [section.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_2$13, [(0, vue.createElementVNode)("p", _hoisted_3$11, (0, vue.toDisplayString)(section.value.label), 1)])) : (0, vue.createCommentVNode)("v-if", true), (0, vue.createElementVNode)("div", _hoisted_4$6, [(0, vue.createVNode)(content_width_toggle_default)])]);
5921
+ return (0, vue.openBlock)(), (0, vue.createElementBlock)("header", _hoisted_1$17, [section.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_2$14, [(0, vue.createElementVNode)("p", _hoisted_3$12, (0, vue.toDisplayString)(section.value.label), 1)])) : (0, vue.createCommentVNode)("v-if", true), (0, vue.createElementVNode)("div", _hoisted_4$7, [(0, vue.createVNode)(content_width_toggle_default)])]);
5548
5922
  };
5549
5923
  }
5550
5924
  });
5551
5925
  //#endregion
5552
5926
  //#region packages/client/src/components/layout/page-footer.vue?vue&type=script&setup=true&lang.ts
5553
- var _hoisted_1$15 = ["aria-label"];
5927
+ var _hoisted_1$16 = ["aria-label"];
5554
5928
  //#endregion
5555
5929
  //#region packages/client/src/components/layout/page-footer.vue
5556
5930
  var page_footer_default = /* @__PURE__ */ (0, vue.defineComponent)({
@@ -5606,7 +5980,7 @@ var page_footer_default = /* @__PURE__ */ (0, vue.defineComponent)({
5606
5980
  d: "M6.22 4.22a.75.75 0 0 1 1.06 0l3.25 3.25a.75.75 0 0 1 0\n 1.06l-3.25 3.25a.75.75 0 0 1-1.06-1.06L8.94 8 6.22 5.28a.75.75 0 0 1 0-1.06Z"
5607
5981
  })], -1))]),
5608
5982
  _: 1
5609
- }, 8, ["to", "aria-label"])) : (0, vue.createCommentVNode)("v-if", true)], 8, _hoisted_1$15)) : (0, vue.createCommentVNode)("v-if", true);
5983
+ }, 8, ["to", "aria-label"])) : (0, vue.createCommentVNode)("v-if", true)], 8, _hoisted_1$16)) : (0, vue.createCommentVNode)("v-if", true);
5610
5984
  };
5611
5985
  }
5612
5986
  });
@@ -5734,8 +6108,8 @@ var resolveOutlineScrollerHeight = (maxHeight, listSize) => {
5734
6108
  };
5735
6109
  //#endregion
5736
6110
  //#region packages/client/src/components/layout/page-outline.vue?vue&type=script&setup=true&lang.ts
5737
- var _hoisted_1$14 = ["aria-label"];
5738
- var _hoisted_2$12 = { class: "docs-page-outline__title" };
6111
+ var _hoisted_1$15 = ["aria-label"];
6112
+ var _hoisted_2$13 = { class: "docs-page-outline__title" };
5739
6113
  var SCROLL_THRESHOLD = 80;
5740
6114
  //#endregion
5741
6115
  //#region packages/client/src/components/layout/page-outline.vue
@@ -5975,7 +6349,7 @@ var page_outline_default = /* @__PURE__ */ (0, vue.defineComponent)({
5975
6349
  class: "docs-page-outline",
5976
6350
  style: (0, vue.normalizeStyle)(rootStyle.value),
5977
6351
  "aria-label": (0, vue.unref)(t)("client.page.outline")
5978
- }, [(0, vue.createElementVNode)("p", _hoisted_2$12, (0, vue.toDisplayString)((0, vue.unref)(t)("client.page.outline")), 1), (0, vue.createVNode)((0, vue.unref)(_deot_vc.Scroller), {
6352
+ }, [(0, vue.createElementVNode)("p", _hoisted_2$13, (0, vue.toDisplayString)((0, vue.unref)(t)("client.page.outline")), 1), (0, vue.createVNode)((0, vue.unref)(_deot_vc.Scroller), {
5979
6353
  ref_key: "outlineScroller",
5980
6354
  ref: outlineScroller,
5981
6355
  class: "docs-page-outline__scroller",
@@ -5991,7 +6365,7 @@ var page_outline_default = /* @__PURE__ */ (0, vue.defineComponent)({
5991
6365
  onSelect: handleSelect
5992
6366
  }, null, 8, ["items", "active-id"])]),
5993
6367
  _: 1
5994
- }, 8, ["show-bar", "height"])], 12, _hoisted_1$14)) : (0, vue.createCommentVNode)("v-if", true);
6368
+ }, 8, ["show-bar", "height"])], 12, _hoisted_1$15)) : (0, vue.createCommentVNode)("v-if", true);
5995
6369
  };
5996
6370
  }
5997
6371
  });
@@ -6014,32 +6388,37 @@ var omitRouteQuery = (query, keys) => {
6014
6388
  };
6015
6389
  //#endregion
6016
6390
  //#region packages/client/src/components/layout/resource-slot.vue?vue&type=script&setup=true&lang.ts
6017
- var _hoisted_1$13 = [
6391
+ var _hoisted_1$14 = [
6018
6392
  "data-slot",
6019
6393
  "data-resource-type",
6020
6394
  "data-content-width"
6021
6395
  ];
6022
- var _hoisted_2$11 = {
6023
- key: 4,
6396
+ var _hoisted_2$12 = {
6397
+ key: 0,
6398
+ class: "docs-resource-slot__error",
6399
+ role: "alert"
6400
+ };
6401
+ var _hoisted_3$11 = {
6402
+ key: 5,
6024
6403
  class: "docs-resource-slot__page"
6025
6404
  };
6026
- var _hoisted_3$10 = {
6405
+ var _hoisted_4$6 = {
6027
6406
  key: 0,
6028
6407
  class: "docs-resource-slot__error"
6029
6408
  };
6030
- var _hoisted_4$5 = {
6031
- key: 5,
6409
+ var _hoisted_5$5 = {
6410
+ key: 6,
6032
6411
  class: "docs-resource-slot__error"
6033
6412
  };
6034
- var _hoisted_5$4 = {
6035
- key: 6,
6413
+ var _hoisted_6$3 = {
6414
+ key: 7,
6036
6415
  class: "docs-resource-slot__loading"
6037
6416
  };
6038
- var _hoisted_6$2 = {
6039
- key: 7,
6417
+ var _hoisted_7$3 = {
6418
+ key: 8,
6040
6419
  class: "docs-resource-slot__body"
6041
6420
  };
6042
- var _hoisted_7$2 = ["data-builtin"];
6421
+ var _hoisted_8$3 = ["data-builtin"];
6043
6422
  //#endregion
6044
6423
  //#region packages/client/src/components/layout/resource-slot.vue
6045
6424
  var resource_slot_default = /* @__PURE__ */ (0, vue.defineComponent)({
@@ -6060,6 +6439,26 @@ var resource_slot_default = /* @__PURE__ */ (0, vue.defineComponent)({
6060
6439
  const contentWidth = ContentWidth.current;
6061
6440
  const content = (0, vue.ref)("");
6062
6441
  const error = (0, vue.ref)("");
6442
+ const styleError = (0, vue.ref)("");
6443
+ let releaseStyles;
6444
+ const preview = (0, vue.computed)(() => {
6445
+ if (!route.meta.docsPreview || props.name !== "content") return {
6446
+ config: void 0,
6447
+ error: ""
6448
+ };
6449
+ try {
6450
+ return {
6451
+ config: readPreviewConfig(route.query),
6452
+ error: ""
6453
+ };
6454
+ } catch (reason) {
6455
+ return {
6456
+ config: void 0,
6457
+ error: t("client.common.previewConfigFailed", { message: reason instanceof Error ? reason.message : String(reason) })
6458
+ };
6459
+ }
6460
+ });
6461
+ (0, vue.provide)(previewConfigKey, (0, vue.computed)(() => preview.value.config));
6063
6462
  const loading = (0, vue.ref)(false);
6064
6463
  const source = (0, vue.ref)("");
6065
6464
  const resourceType = (0, vue.ref)("");
@@ -6304,6 +6703,15 @@ var resource_slot_default = /* @__PURE__ */ (0, vue.defineComponent)({
6304
6703
  if (current === generation && stableSlotKey) activeStableSlotKey = stableSlotKey;
6305
6704
  };
6306
6705
  try {
6706
+ let directType;
6707
+ if (route.meta.docsPreview && props.name === "content") {
6708
+ if (preview.value.error) throw new TypeError(preview.value.error);
6709
+ const url = preview.value.config?.url;
6710
+ if (typeof url !== "string" || !url.trim()) throw new TypeError(t("client.common.previewUrlRequired"));
6711
+ slot = url.trim();
6712
+ directType = resolvePreviewType(slot, location.href);
6713
+ if (!directType) throw new TypeError(t("client.common.previewUrlUnsupported"));
6714
+ }
6307
6715
  if (slot === null) {
6308
6716
  markStableSlot();
6309
6717
  return;
@@ -6334,7 +6742,7 @@ var resource_slot_default = /* @__PURE__ */ (0, vue.defineComponent)({
6334
6742
  }) || `./${getRouteValue(route, config)}.md`;
6335
6743
  if (current !== generation || typeof slot !== "string") return;
6336
6744
  source.value = slot;
6337
- resourceType.value = classifyResourceSource(slot);
6745
+ resourceType.value = directType || classifyResourceSource(slot);
6338
6746
  if (resourceType.value === "sfc") {
6339
6747
  markStableSlot();
6340
6748
  return;
@@ -6370,9 +6778,32 @@ var resource_slot_default = /* @__PURE__ */ (0, vue.defineComponent)({
6370
6778
  }
6371
6779
  }
6372
6780
  };
6781
+ (0, vue.watch)(() => JSON.stringify([
6782
+ route.meta.docsPreview,
6783
+ route.path,
6784
+ preview.value.config?.url,
6785
+ preview.value.config?.styles,
6786
+ props.name
6787
+ ]), () => {
6788
+ releaseStyles?.();
6789
+ releaseStyles = void 0;
6790
+ styleError.value = "";
6791
+ if (!preview.value.config) return;
6792
+ try {
6793
+ releaseStyles = acquirePreviewStyles(parsePreviewStyleUrls(preview.value.config.styles, location.href), (url) => {
6794
+ styleError.value = t("client.common.previewStyleFailed", { url });
6795
+ });
6796
+ } catch (reason) {
6797
+ styleError.value = reason instanceof Error ? reason.message : String(reason);
6798
+ }
6799
+ }, { immediate: true });
6373
6800
  (0, vue.watch)([
6374
6801
  () => route.path,
6375
- () => JSON.stringify(omitRouteQuery(route.query, ["tab"])),
6802
+ () => route.meta.docsPreview ? JSON.stringify([
6803
+ preview.value.error,
6804
+ preview.value.config?.url,
6805
+ lang.value
6806
+ ]) : JSON.stringify(omitRouteQuery(route.query, ["tab"])),
6376
6807
  () => props.name
6377
6808
  ], load, { immediate: true });
6378
6809
  (0, vue.watch)(() => route.hash, (hash) => {
@@ -6395,6 +6826,7 @@ var resource_slot_default = /* @__PURE__ */ (0, vue.defineComponent)({
6395
6826
  });
6396
6827
  (0, vue.onBeforeUnmount)(() => {
6397
6828
  generation += 1;
6829
+ releaseStyles?.();
6398
6830
  clear();
6399
6831
  if (props.name === "sidebar") setSidebarItems(null);
6400
6832
  });
@@ -6407,14 +6839,14 @@ var resource_slot_default = /* @__PURE__ */ (0, vue.defineComponent)({
6407
6839
  "data-resource-type": resourceType.value || void 0,
6408
6840
  "data-content-width": __props.name === "content" && resourceType.value === "markdown" ? (0, vue.unref)(contentWidth) : void 0,
6409
6841
  style: (0, vue.normalizeStyle)({ minHeight: transitionMinHeight.value })
6410
- }, [builtin.value === "header" ? ((0, vue.openBlock)(), (0, vue.createBlock)(default_header_default, { key: 0 })) : builtin.value === "footer" ? ((0, vue.openBlock)(), (0, vue.createBlock)(default_footer_default, { key: 1 })) : sidebarItems.value ? ((0, vue.openBlock)(), (0, vue.createBlock)(default_sidebar_default, {
6411
- key: 2,
6842
+ }, [styleError.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_2$12, (0, vue.toDisplayString)(styleError.value), 1)) : (0, vue.createCommentVNode)("v-if", true), builtin.value === "header" ? ((0, vue.openBlock)(), (0, vue.createBlock)(default_header_default, { key: 1 })) : builtin.value === "footer" ? ((0, vue.openBlock)(), (0, vue.createBlock)(default_footer_default, { key: 2 })) : sidebarItems.value ? ((0, vue.openBlock)(), (0, vue.createBlock)(default_sidebar_default, {
6843
+ key: 3,
6412
6844
  items: sidebarItems.value
6413
6845
  }, null, 8, ["items"])) : resourceType.value === "sfc" && source.value ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(remote_sfc_default), {
6414
- key: 3,
6846
+ key: 4,
6415
6847
  source: source.value,
6416
6848
  lang: lang.value
6417
- }, null, 8, ["source", "lang"])) : pageDocument.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_2$11, [error.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_3$10, (0, vue.toDisplayString)(error.value), 1)) : (0, vue.createCommentVNode)("v-if", true), (0, vue.createVNode)((0, vue.unref)(_deot_docs_renderer.Renderer), {
6849
+ }, null, 8, ["source", "lang"])) : pageDocument.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_3$11, [error.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_4$6, (0, vue.toDisplayString)(error.value), 1)) : (0, vue.createCommentVNode)("v-if", true), (0, vue.createVNode)((0, vue.unref)(_deot_docs_renderer.Renderer), {
6418
6850
  document: pageDocument.value,
6419
6851
  modules: (0, vue.unref)(rendererModules),
6420
6852
  context: rendererContext.value,
@@ -6424,7 +6856,7 @@ var resource_slot_default = /* @__PURE__ */ (0, vue.defineComponent)({
6424
6856
  "modules",
6425
6857
  "context",
6426
6858
  "fit"
6427
- ])])) : error.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_4$5, (0, vue.toDisplayString)(error.value), 1)) : loading.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_5$4, (0, vue.toDisplayString)((0, vue.unref)(t)("client.common.loading")), 1)) : resourceType.value === "markdown" && __props.name === "content" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_6$2, [(0, vue.createElementVNode)("div", {
6859
+ ])])) : error.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_5$5, (0, vue.toDisplayString)(error.value), 1)) : loading.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_6$3, (0, vue.toDisplayString)((0, vue.unref)(t)("client.common.loading")), 1)) : resourceType.value === "markdown" && __props.name === "content" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_7$3, [(0, vue.createElementVNode)("div", {
6428
6860
  ref: bindArticle,
6429
6861
  class: "docs-resource-slot__article"
6430
6862
  }, [
@@ -6443,7 +6875,7 @@ var resource_slot_default = /* @__PURE__ */ (0, vue.defineComponent)({
6443
6875
  ]),
6444
6876
  (0, vue.createVNode)(page_footer_default)
6445
6877
  ], 512), (0, vue.createVNode)(page_outline_default, { target: article.value }, null, 8, ["target"])])) : resourceType.value === "markdown" ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(_deot_docs_markdown.Markdown), {
6446
- key: 8,
6878
+ key: 9,
6447
6879
  value: content.value,
6448
6880
  theme: markdownTheme.value,
6449
6881
  indicator: markdownIndicator.value,
@@ -6455,10 +6887,10 @@ var resource_slot_default = /* @__PURE__ */ (0, vue.defineComponent)({
6455
6887
  "indicator",
6456
6888
  "playground"
6457
6889
  ])) : builtin.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
6458
- key: 9,
6890
+ key: 10,
6459
6891
  class: "docs-resource-slot__builtin",
6460
6892
  "data-builtin": builtin.value
6461
- }, null, 8, _hoisted_7$2)) : (0, vue.createCommentVNode)("v-if", true)], 12, _hoisted_1$13);
6893
+ }, null, 8, _hoisted_8$3)) : (0, vue.createCommentVNode)("v-if", true)], 12, _hoisted_1$14);
6462
6894
  };
6463
6895
  }
6464
6896
  });
@@ -7577,11 +8009,11 @@ var listRendererEditorDemos = (lang) => RENDERER_EDITOR_DEMOS.map((name) => ({
7577
8009
  var createRendererEditorDemoDocument = (demo, lang) => factories[demo](lang);
7578
8010
  //#endregion
7579
8011
  //#region packages/client/src/app.vue?vue&type=script&setup=true&lang.ts
7580
- var _hoisted_1$12 = { class: "docs-app__header" };
7581
- var _hoisted_2$10 = ["aria-label", "aria-expanded"];
7582
- var _hoisted_3$9 = ["aria-label"];
7583
- var _hoisted_4$4 = { class: "docs-layout__main" };
7584
- var _hoisted_5$3 = { class: "docs-layout__footer" };
8012
+ var _hoisted_1$13 = { class: "docs-app__header" };
8013
+ var _hoisted_2$11 = ["aria-label", "aria-expanded"];
8014
+ var _hoisted_3$10 = ["aria-label"];
8015
+ var _hoisted_4$5 = { class: "docs-layout__main" };
8016
+ var _hoisted_5$4 = { class: "docs-layout__footer" };
7585
8017
  //#endregion
7586
8018
  //#region packages/client/src/app.vue
7587
8019
  var app_default = /* @__PURE__ */ (0, vue.defineComponent)({
@@ -7589,6 +8021,7 @@ var app_default = /* @__PURE__ */ (0, vue.defineComponent)({
7589
8021
  setup(__props) {
7590
8022
  const route = (0, vue_router.useRoute)();
7591
8023
  const router = (0, vue_router.useRouter)();
8024
+ const routeLayout = (0, vue.computed)(() => route.meta.docsRoute?.layout ?? "default");
7592
8025
  const { t } = (0, _deot_docs_locale.useLocale)();
7593
8026
  const mainScroller = (0, vue.ref)();
7594
8027
  const mobileSidebarOpen = (0, vue.ref)(false);
@@ -7626,21 +8059,25 @@ var app_default = /* @__PURE__ */ (0, vue.defineComponent)({
7626
8059
  mainScroller.value?.setScrollTop(0);
7627
8060
  });
7628
8061
  return (_ctx, _cache) => {
7629
- return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
8062
+ return routeLayout.value === "none" ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(vue_router.RouterView), {
8063
+ key: 0,
8064
+ class: "docs-page--none"
8065
+ })) : ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
8066
+ key: 1,
7630
8067
  class: (0, vue.normalizeClass)(["docs-app", {
7631
8068
  "docs-app--database": isUtilityShell.value,
7632
8069
  "docs-app--editor": isEditorShell.value,
7633
8070
  "docs-app--mobile-sidebar-open": mobileSidebarOpen.value
7634
8071
  }]),
7635
8072
  onKeydown: (0, vue.withKeys)(closeMobileSidebar, ["esc"])
7636
- }, [(0, vue.createElementVNode)("div", _hoisted_1$12, [(0, vue.createElementVNode)("button", {
8073
+ }, [(0, vue.createElementVNode)("div", _hoisted_1$13, [(0, vue.createElementVNode)("button", {
7637
8074
  type: "button",
7638
8075
  class: (0, vue.normalizeClass)(["docs-app__sidebar-toggle", { "is-open": mobileSidebarOpen.value }]),
7639
8076
  "aria-label": (0, vue.unref)(t)(mobileSidebarOpen.value ? "client.header.closeSidebar" : "client.header.openSidebar"),
7640
8077
  "aria-expanded": mobileSidebarOpen.value,
7641
8078
  "aria-controls": "docs-mobile-sidebar",
7642
8079
  onClick: toggleMobileSidebar
7643
- }, [(0, vue.createVNode)((0, vue.unref)(icon_default), { name: mobileSidebarOpen.value ? "close" : "menu" }, null, 8, ["name"])], 10, _hoisted_2$10), (0, vue.createVNode)((0, vue.unref)(resource_slot_default), { name: "header" })]), (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)(["docs-layout", {
8080
+ }, [(0, vue.createVNode)((0, vue.unref)(icon_default), { name: mobileSidebarOpen.value ? "close" : "menu" }, null, 8, ["name"])], 10, _hoisted_2$11), (0, vue.createVNode)((0, vue.unref)(resource_slot_default), { name: "header" })]), (0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)(["docs-layout", {
7644
8081
  "docs-layout--database": isUtilityShell.value,
7645
8082
  "docs-layout--editor": isEditorShell.value,
7646
8083
  "docs-layout--home": (0, vue.unref)(route).meta?.docsHome
@@ -7665,7 +8102,7 @@ var app_default = /* @__PURE__ */ (0, vue.defineComponent)({
7665
8102
  class: "docs-layout__sidebar-mask",
7666
8103
  "aria-label": (0, vue.unref)(t)("client.header.closeSidebar"),
7667
8104
  onClick: closeMobileSidebar
7668
- }, null, 8, _hoisted_3$9),
8105
+ }, null, 8, _hoisted_3$10),
7669
8106
  (0, vue.createVNode)((0, vue.unref)(_deot_vc.Scroller), {
7670
8107
  ref_key: "mainScroller",
7671
8108
  ref: mainScroller,
@@ -7682,16 +8119,16 @@ var app_default = /* @__PURE__ */ (0, vue.defineComponent)({
7682
8119
  class: "docs-layout__rail docs-layout__rail--start",
7683
8120
  "aria-hidden": "true"
7684
8121
  }, null, -1)),
7685
- (0, vue.createElementVNode)("main", _hoisted_4$4, [(0, vue.createVNode)((0, vue.unref)(vue_router.RouterView)), (0, vue.createVNode)((0, vue.unref)(vue_router.RouterView), { name: "extra" })]),
8122
+ (0, vue.createElementVNode)("main", _hoisted_4$5, [(0, vue.createVNode)((0, vue.unref)(vue_router.RouterView)), (0, vue.createVNode)((0, vue.unref)(vue_router.RouterView), { name: "extra" })]),
7686
8123
  _cache[1] || (_cache[1] = (0, vue.createElementVNode)("div", {
7687
8124
  class: "docs-layout__rail docs-layout__rail--end",
7688
8125
  "aria-hidden": "true"
7689
8126
  }, null, -1)),
7690
- (0, vue.createElementVNode)("div", _hoisted_5$3, [(0, vue.createVNode)((0, vue.unref)(resource_slot_default), { name: "footer" })])
8127
+ (0, vue.createElementVNode)("div", _hoisted_5$4, [(0, vue.createVNode)((0, vue.unref)(resource_slot_default), { name: "footer" })])
7691
8128
  ]),
7692
8129
  _: 1
7693
8130
  }, 512)
7694
- ], 2)], 34);
8131
+ ], 2)], 34));
7695
8132
  };
7696
8133
  }
7697
8134
  });
@@ -7815,16 +8252,16 @@ var prune = async () => {
7815
8252
  };
7816
8253
  //#endregion
7817
8254
  //#region packages/client/src/components/paging/filter/filter-item.vue?vue&type=script&setup=true&lang.ts
7818
- var _hoisted_1$11 = { class: "docs-paging-filter-item" };
7819
- var _hoisted_2$9 = {
8255
+ var _hoisted_1$12 = { class: "docs-paging-filter-item" };
8256
+ var _hoisted_2$10 = {
7820
8257
  key: 0,
7821
8258
  class: "docs-paging-filter-item__label"
7822
8259
  };
7823
- var _hoisted_3$8 = {
8260
+ var _hoisted_3$9 = {
7824
8261
  key: 1,
7825
8262
  class: "docs-paging-filter-item__range"
7826
8263
  };
7827
- var _hoisted_4$3 = { class: "docs-paging-filter-item__separator" };
8264
+ var _hoisted_4$4 = { class: "docs-paging-filter-item__separator" };
7828
8265
  //#endregion
7829
8266
  //#region packages/client/src/components/paging/filter/filter-item.vue
7830
8267
  var filter_item_default = /* @__PURE__ */ (0, vue.defineComponent)({
@@ -7873,7 +8310,7 @@ var filter_item_default = /* @__PURE__ */ (0, vue.defineComponent)({
7873
8310
  emit("search");
7874
8311
  };
7875
8312
  return (_ctx, _cache) => {
7876
- return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_1$11, [__props.module.label ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", _hoisted_2$9, (0, vue.toDisplayString)(__props.module.label), 1)) : (0, vue.createCommentVNode)("v-if", true), __props.module.type === "range" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_3$8, [
8313
+ return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_1$12, [__props.module.label ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", _hoisted_2$10, (0, vue.toDisplayString)(__props.module.label), 1)) : (0, vue.createCommentVNode)("v-if", true), __props.module.type === "range" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_3$9, [
7877
8314
  (0, vue.createVNode)((0, vue.unref)(_deot_vc.InputNumber), (0, vue.mergeProps)({
7878
8315
  "model-value": getNumberValue(__props.startValue),
7879
8316
  "data-filter": __props.module.field[0],
@@ -7886,7 +8323,7 @@ var filter_item_default = /* @__PURE__ */ (0, vue.defineComponent)({
7886
8323
  "data-filter",
7887
8324
  "placeholder"
7888
8325
  ]),
7889
- (0, vue.createElementVNode)("span", _hoisted_4$3, (0, vue.toDisplayString)(__props.module.separator || "-"), 1),
8326
+ (0, vue.createElementVNode)("span", _hoisted_4$4, (0, vue.toDisplayString)(__props.module.separator || "-"), 1),
7890
8327
  (0, vue.createVNode)((0, vue.unref)(_deot_vc.InputNumber), (0, vue.mergeProps)({
7891
8328
  "model-value": getNumberValue(__props.endValue),
7892
8329
  "data-filter": __props.module.field[1],
@@ -7949,8 +8386,8 @@ var filter_item_default = /* @__PURE__ */ (0, vue.defineComponent)({
7949
8386
  });
7950
8387
  //#endregion
7951
8388
  //#region packages/client/src/components/paging/filter/index.vue?vue&type=script&setup=true&lang.ts
7952
- var _hoisted_1$10 = { class: "docs-paging-filter" };
7953
- var _hoisted_2$8 = { class: "docs-paging-filter__operate" };
8389
+ var _hoisted_1$11 = { class: "docs-paging-filter" };
8390
+ var _hoisted_2$9 = { class: "docs-paging-filter__operate" };
7954
8391
  //#endregion
7955
8392
  //#region packages/client/src/components/paging/filter/index.vue
7956
8393
  var filter_default = /* @__PURE__ */ (0, vue.defineComponent)({
@@ -8004,7 +8441,7 @@ var filter_default = /* @__PURE__ */ (0, vue.defineComponent)({
8004
8441
  emit("search", value);
8005
8442
  };
8006
8443
  return (_ctx, _cache) => {
8007
- return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_1$10, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(__props.modules, (module) => {
8444
+ return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_1$11, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(__props.modules, (module) => {
8008
8445
  return (0, vue.openBlock)(), (0, vue.createBlock)(filter_item_default, {
8009
8446
  key: getModuleKey(module),
8010
8447
  module,
@@ -8024,7 +8461,7 @@ var filter_default = /* @__PURE__ */ (0, vue.defineComponent)({
8024
8461
  "onUpdate:startValue",
8025
8462
  "onUpdate:endValue"
8026
8463
  ]);
8027
- }), 128)), (0, vue.createElementVNode)("div", _hoisted_2$8, [(0, vue.createVNode)((0, vue.unref)(_deot_vc.Button), {
8464
+ }), 128)), (0, vue.createElementVNode)("div", _hoisted_2$9, [(0, vue.createVNode)((0, vue.unref)(_deot_vc.Button), {
8028
8465
  type: "primary",
8029
8466
  onClick: handleSearch
8030
8467
  }, {
@@ -8039,9 +8476,9 @@ var filter_default = /* @__PURE__ */ (0, vue.defineComponent)({
8039
8476
  });
8040
8477
  //#endregion
8041
8478
  //#region packages/client/src/components/paging/paging.vue?vue&type=script&setup=true&lang.ts
8042
- var _hoisted_1$9 = { class: "docs-paging" };
8043
- var _hoisted_2$7 = { class: "docs-paging__pagination" };
8044
- var _hoisted_3$7 = { class: "docs-paging__pagination-control" };
8479
+ var _hoisted_1$10 = { class: "docs-paging" };
8480
+ var _hoisted_2$8 = { class: "docs-paging__pagination" };
8481
+ var _hoisted_3$8 = { class: "docs-paging__pagination-control" };
8045
8482
  //#endregion
8046
8483
  //#region packages/client/src/components/paging/paging.vue
8047
8484
  var paging_default = /* @__PURE__ */ (0, vue.defineComponent)({
@@ -8187,7 +8624,7 @@ var paging_default = /* @__PURE__ */ (0, vue.defineComponent)({
8187
8624
  refreshAffix
8188
8625
  });
8189
8626
  return (_ctx, _cache) => {
8190
- return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_1$9, [
8627
+ return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_1$10, [
8191
8628
  __props.filterModules.length ? ((0, vue.openBlock)(), (0, vue.createBlock)(filter_default, {
8192
8629
  key: 0,
8193
8630
  modules: __props.filterModules,
@@ -8221,12 +8658,12 @@ var paging_default = /* @__PURE__ */ (0, vue.defineComponent)({
8221
8658
  ref_key: "footerAffix",
8222
8659
  ref: footerAffix
8223
8660
  }, affixOptions.value[1]), {
8224
- default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("footer", _hoisted_2$7, [(0, vue.renderSlot)(_ctx.$slots, "footer-extra", {
8661
+ default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("footer", _hoisted_2$8, [(0, vue.renderSlot)(_ctx.$slots, "footer-extra", {
8225
8662
  current: current.value,
8226
8663
  pageSize: pageSize.value,
8227
8664
  total: total.value,
8228
8665
  loading: loading.value
8229
- }), (0, vue.createElementVNode)("div", _hoisted_3$7, [(0, vue.createVNode)((0, vue.unref)(_deot_vc.Pagination), {
8666
+ }), (0, vue.createElementVNode)("div", _hoisted_3$8, [(0, vue.createVNode)((0, vue.unref)(_deot_vc.Pagination), {
8230
8667
  count: total.value,
8231
8668
  current: current.value,
8232
8669
  "page-size": pageSize.value,
@@ -8250,7 +8687,7 @@ var paging_default = /* @__PURE__ */ (0, vue.defineComponent)({
8250
8687
  });
8251
8688
  //#endregion
8252
8689
  //#region packages/client/src/components/tag/tag.vue?vue&type=script&setup=true&lang.ts
8253
- var _hoisted_1$8 = ["data-type"];
8690
+ var _hoisted_1$9 = ["data-type"];
8254
8691
  //#endregion
8255
8692
  //#region packages/client/src/components/tag/tag.vue
8256
8693
  var tag_default = /* @__PURE__ */ (0, vue.defineComponent)({
@@ -8295,24 +8732,24 @@ var tag_default = /* @__PURE__ */ (0, vue.defineComponent)({
8295
8732
  backgroundColor: currentColor.value[0],
8296
8733
  color: currentColor.value[1]
8297
8734
  })
8298
- }, [(0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)(["docs-tag__label", { "docs-tag__label--ellipsis": __props.ellipsis }]) }, [(0, vue.renderSlot)(_ctx.$slots, "default", {}, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(currentLabel.value), 1)])], 2)], 12, _hoisted_1$8);
8735
+ }, [(0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)(["docs-tag__label", { "docs-tag__label--ellipsis": __props.ellipsis }]) }, [(0, vue.renderSlot)(_ctx.$slots, "default", {}, () => [(0, vue.createTextVNode)((0, vue.toDisplayString)(currentLabel.value), 1)])], 2)], 12, _hoisted_1$9);
8299
8736
  };
8300
8737
  }
8301
8738
  });
8302
8739
  //#endregion
8303
8740
  //#region packages/client/src/pages/database/index.vue?vue&type=script&setup=true&lang.ts
8304
- var _hoisted_1$7 = { class: "docs-database" };
8305
- var _hoisted_2$6 = { class: "docs-database__header" };
8306
- var _hoisted_3$6 = ["title"];
8307
- var _hoisted_4$2 = { class: "docs-database__toolbar" };
8308
- var _hoisted_5$2 = { class: "docs-database__toolbar-primary" };
8309
- var _hoisted_6$1 = { class: "docs-database__button-content" };
8310
- var _hoisted_7$1 = { class: "docs-database__button-content" };
8311
- var _hoisted_8$1 = { class: "docs-database__columns" };
8312
- var _hoisted_9$1 = { class: "docs-database__toolbar-danger" };
8313
- var _hoisted_10$1 = ["title"];
8314
- var _hoisted_11$1 = ["title"];
8315
- var _hoisted_12$1 = { class: "docs-database__actions" };
8741
+ var _hoisted_1$8 = { class: "docs-database" };
8742
+ var _hoisted_2$7 = { class: "docs-database__header" };
8743
+ var _hoisted_3$7 = ["title"];
8744
+ var _hoisted_4$3 = { class: "docs-database__toolbar" };
8745
+ var _hoisted_5$3 = { class: "docs-database__toolbar-primary" };
8746
+ var _hoisted_6$2 = { class: "docs-database__button-content" };
8747
+ var _hoisted_7$2 = { class: "docs-database__button-content" };
8748
+ var _hoisted_8$2 = { class: "docs-database__columns" };
8749
+ var _hoisted_9$2 = { class: "docs-database__toolbar-danger" };
8750
+ var _hoisted_10$2 = ["title"];
8751
+ var _hoisted_11$2 = ["title"];
8752
+ var _hoisted_12$2 = { class: "docs-database__actions" };
8316
8753
  //#endregion
8317
8754
  //#region packages/client/src/pages/database/index.vue
8318
8755
  var database_default = /* @__PURE__ */ (0, vue.defineComponent)({
@@ -8541,17 +8978,17 @@ var database_default = /* @__PURE__ */ (0, vue.defineComponent)({
8541
8978
  statusRefreshTimer = void 0;
8542
8979
  });
8543
8980
  return (_ctx, _cache) => {
8544
- return (0, vue.openBlock)(), (0, vue.createElementBlock)("section", _hoisted_1$7, [(0, vue.createElementVNode)("header", _hoisted_2$6, [(0, vue.createElementVNode)("div", null, [(0, vue.createElementVNode)("h1", null, (0, vue.toDisplayString)((0, vue.unref)(t)("client.database.title")), 1), (0, vue.createElementVNode)("p", null, [
8981
+ return (0, vue.openBlock)(), (0, vue.createElementBlock)("section", _hoisted_1$8, [(0, vue.createElementVNode)("header", _hoisted_2$7, [(0, vue.createElementVNode)("div", null, [(0, vue.createElementVNode)("h1", null, (0, vue.toDisplayString)((0, vue.unref)(t)("client.database.title")), 1), (0, vue.createElementVNode)("p", null, [
8545
8982
  (0, vue.createTextVNode)(" deot-docs / resources · " + (0, vue.toDisplayString)((0, vue.unref)(t)("client.database.records", { count: records.value.length })) + " · ", 1),
8546
- (0, vue.createElementVNode)("span", { title: (0, vue.unref)(currentNamespace) }, (0, vue.toDisplayString)((0, vue.unref)(currentNamespace)), 9, _hoisted_3$6),
8983
+ (0, vue.createElementVNode)("span", { title: (0, vue.unref)(currentNamespace) }, (0, vue.toDisplayString)((0, vue.unref)(currentNamespace)), 9, _hoisted_3$7),
8547
8984
  (0, vue.createTextVNode)(" " + (0, vue.toDisplayString)((0, vue.unref)(t)("client.database.cache", { size: namespaceCacheSize.value })), 1)
8548
- ])]), (0, vue.createElementVNode)("div", _hoisted_4$2, [(0, vue.createElementVNode)("div", _hoisted_5$2, [
8985
+ ])]), (0, vue.createElementVNode)("div", _hoisted_4$3, [(0, vue.createElementVNode)("div", _hoisted_5$3, [
8549
8986
  (0, vue.createVNode)((0, vue.unref)(_deot_vc.Button), {
8550
8987
  type: "primary",
8551
8988
  disabled: loading.value,
8552
8989
  onClick: handleBack
8553
8990
  }, {
8554
- default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("span", _hoisted_6$1, [(0, vue.createVNode)((0, vue.unref)(icon_default), { name: "back" }), (0, vue.createTextVNode)(" " + (0, vue.toDisplayString)((0, vue.unref)(t)("client.database.back")), 1)])]),
8991
+ default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("span", _hoisted_6$2, [(0, vue.createVNode)((0, vue.unref)(icon_default), { name: "back" }), (0, vue.createTextVNode)(" " + (0, vue.toDisplayString)((0, vue.unref)(t)("client.database.back")), 1)])]),
8555
8992
  _: 1
8556
8993
  }, 8, ["disabled"]),
8557
8994
  (0, vue.createVNode)((0, vue.unref)(_deot_vc.Button), {
@@ -8559,14 +8996,14 @@ var database_default = /* @__PURE__ */ (0, vue.defineComponent)({
8559
8996
  disabled: loading.value,
8560
8997
  onClick: handleHome
8561
8998
  }, {
8562
- default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("span", _hoisted_7$1, [(0, vue.createVNode)((0, vue.unref)(icon_default), { name: "home" }), (0, vue.createTextVNode)(" " + (0, vue.toDisplayString)((0, vue.unref)(t)("client.database.home")), 1)])]),
8999
+ default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("span", _hoisted_7$2, [(0, vue.createVNode)((0, vue.unref)(icon_default), { name: "home" }), (0, vue.createTextVNode)(" " + (0, vue.toDisplayString)((0, vue.unref)(t)("client.database.home")), 1)])]),
8563
9000
  _: 1
8564
9001
  }, 8, ["disabled"]),
8565
9002
  (0, vue.createVNode)((0, vue.unref)(_deot_vc.Popover), {
8566
9003
  trigger: "click",
8567
9004
  placement: "bottom-right"
8568
9005
  }, {
8569
- content: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", _hoisted_8$1, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(optionalColumns.value, (item) => {
9006
+ content: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", _hoisted_8$2, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(optionalColumns.value, (item) => {
8570
9007
  return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(_deot_vc.Checkbox), {
8571
9008
  key: item.value,
8572
9009
  "model-value": isColumnVisible(item.value),
@@ -8611,7 +9048,7 @@ var database_default = /* @__PURE__ */ (0, vue.defineComponent)({
8611
9048
  default: (0, vue.withCtx)(() => [(0, vue.createTextVNode)((0, vue.toDisplayString)((0, vue.unref)(t)("client.database.prefetch")), 1)]),
8612
9049
  _: 1
8613
9050
  }, 8, ["disabled"])
8614
- ]), (0, vue.createElementVNode)("div", _hoisted_9$1, [(0, vue.createVNode)((0, vue.unref)(_deot_vc.Button), {
9051
+ ]), (0, vue.createElementVNode)("div", _hoisted_9$2, [(0, vue.createVNode)((0, vue.unref)(_deot_vc.Button), {
8615
9052
  type: "error",
8616
9053
  disabled: loading.value || !records.value.length,
8617
9054
  onClick: handleClearAll
@@ -8643,7 +9080,7 @@ var database_default = /* @__PURE__ */ (0, vue.defineComponent)({
8643
9080
  default: (0, vue.withCtx)(({ row }) => [(0, vue.createElementVNode)("span", {
8644
9081
  class: "docs-database__ellipsis",
8645
9082
  title: row.url
8646
- }, (0, vue.toDisplayString)(row.url), 9, _hoisted_10$1)]),
9083
+ }, (0, vue.toDisplayString)(row.url), 9, _hoisted_10$2)]),
8647
9084
  _: 1
8648
9085
  }, 8, ["label"]),
8649
9086
  isColumnVisible("source") ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(_deot_vc.TableColumn), {
@@ -8654,7 +9091,7 @@ var database_default = /* @__PURE__ */ (0, vue.defineComponent)({
8654
9091
  default: (0, vue.withCtx)(({ row }) => [(0, vue.createElementVNode)("span", {
8655
9092
  class: "docs-database__ellipsis",
8656
9093
  title: row.identity.source
8657
- }, (0, vue.toDisplayString)(row.identity.source), 9, _hoisted_11$1)]),
9094
+ }, (0, vue.toDisplayString)(row.identity.source), 9, _hoisted_11$2)]),
8658
9095
  _: 1
8659
9096
  }, 8, ["label"])) : (0, vue.createCommentVNode)("v-if", true),
8660
9097
  (0, vue.createVNode)((0, vue.unref)(_deot_vc.TableColumn), {
@@ -8768,7 +9205,7 @@ var database_default = /* @__PURE__ */ (0, vue.defineComponent)({
8768
9205
  align: "center",
8769
9206
  fixed: "right"
8770
9207
  }, {
8771
- default: (0, vue.withCtx)(({ row }) => [(0, vue.createElementVNode)("div", _hoisted_12$1, [(0, vue.createVNode)((0, vue.unref)(_deot_vc.Button), {
9208
+ default: (0, vue.withCtx)(({ row }) => [(0, vue.createElementVNode)("div", _hoisted_12$2, [(0, vue.createVNode)((0, vue.unref)(_deot_vc.Button), {
8772
9209
  class: "docs-database__action",
8773
9210
  type: "text",
8774
9211
  disabled: loading.value || busyKeys.value.has(getKey(row)),
@@ -8795,14 +9232,14 @@ var database_default = /* @__PURE__ */ (0, vue.defineComponent)({
8795
9232
  });
8796
9233
  //#endregion
8797
9234
  //#region packages/client/src/pages/renderer-editor-demos/components/card.vue?vue&type=script&setup=true&lang.ts
8798
- var _hoisted_1$6 = { class: "docs-renderer-editor-demos-card__name" };
8799
- var _hoisted_2$5 = { class: "docs-renderer-editor-demos-card__title" };
8800
- var _hoisted_3$5 = { class: "docs-renderer-editor-demos-card__desc" };
8801
- var _hoisted_4$1 = {
9235
+ var _hoisted_1$7 = { class: "docs-renderer-editor-demos-card__name" };
9236
+ var _hoisted_2$6 = { class: "docs-renderer-editor-demos-card__title" };
9237
+ var _hoisted_3$6 = { class: "docs-renderer-editor-demos-card__desc" };
9238
+ var _hoisted_4$2 = {
8802
9239
  key: 0,
8803
9240
  class: "docs-renderer-editor-demos-card__modules"
8804
9241
  };
8805
- var _hoisted_5$1 = { class: "docs-renderer-editor-demos-card__action" };
9242
+ var _hoisted_5$2 = { class: "docs-renderer-editor-demos-card__action" };
8806
9243
  //#endregion
8807
9244
  //#region packages/client/src/pages/renderer-editor-demos/components/card.vue
8808
9245
  var card_default = /* @__PURE__ */ (0, vue.defineComponent)({
@@ -8826,22 +9263,22 @@ var card_default = /* @__PURE__ */ (0, vue.defineComponent)({
8826
9263
  class: "docs-renderer-editor-demos-card__accent",
8827
9264
  "aria-hidden": "true"
8828
9265
  }, null, -1)),
8829
- (0, vue.createElementVNode)("span", _hoisted_1$6, (0, vue.toDisplayString)(__props.item.name), 1),
8830
- (0, vue.createElementVNode)("strong", _hoisted_2$5, (0, vue.toDisplayString)(__props.item.title), 1),
8831
- (0, vue.createElementVNode)("p", _hoisted_3$5, (0, vue.toDisplayString)(__props.item.description), 1),
8832
- __props.item.modules.length ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("ul", _hoisted_4$1, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(__props.item.modules, (type) => {
9266
+ (0, vue.createElementVNode)("span", _hoisted_1$7, (0, vue.toDisplayString)(__props.item.name), 1),
9267
+ (0, vue.createElementVNode)("strong", _hoisted_2$6, (0, vue.toDisplayString)(__props.item.title), 1),
9268
+ (0, vue.createElementVNode)("p", _hoisted_3$6, (0, vue.toDisplayString)(__props.item.description), 1),
9269
+ __props.item.modules.length ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("ul", _hoisted_4$2, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(__props.item.modules, (type) => {
8833
9270
  return (0, vue.openBlock)(), (0, vue.createElementBlock)("li", { key: type }, (0, vue.toDisplayString)(type), 1);
8834
9271
  }), 128))])) : (0, vue.createCommentVNode)("v-if", true),
8835
- (0, vue.createElementVNode)("span", _hoisted_5$1, (0, vue.toDisplayString)(__props.action || (0, vue.unref)(t)("client.demos.open")), 1)
9272
+ (0, vue.createElementVNode)("span", _hoisted_5$2, (0, vue.toDisplayString)(__props.action || (0, vue.unref)(t)("client.demos.open")), 1)
8836
9273
  ], 4);
8837
9274
  };
8838
9275
  }
8839
9276
  });
8840
9277
  //#endregion
8841
9278
  //#region packages/client/src/pages/renderer-editor-demos/components/gallery.vue?vue&type=script&setup=true&lang.ts
8842
- var _hoisted_1$5 = { class: "docs-renderer-editor-demos-gallery" };
8843
- var _hoisted_2$4 = { class: "docs-renderer-editor-demos-gallery__intro" };
8844
- var _hoisted_3$4 = { class: "docs-renderer-editor-demos-gallery__grid" };
9279
+ var _hoisted_1$6 = { class: "docs-renderer-editor-demos-gallery" };
9280
+ var _hoisted_2$5 = { class: "docs-renderer-editor-demos-gallery__intro" };
9281
+ var _hoisted_3$5 = { class: "docs-renderer-editor-demos-gallery__grid" };
8845
9282
  //#endregion
8846
9283
  //#region packages/client/src/pages/renderer-editor-demos/components/gallery.vue
8847
9284
  var gallery_default = /* @__PURE__ */ (0, vue.defineComponent)({
@@ -8862,7 +9299,7 @@ var gallery_default = /* @__PURE__ */ (0, vue.defineComponent)({
8862
9299
  if (isRendererEditorDemo(name)) emit("open", name);
8863
9300
  };
8864
9301
  return (_ctx, _cache) => {
8865
- return (0, vue.openBlock)(), (0, vue.createElementBlock)("section", _hoisted_1$5, [(0, vue.createElementVNode)("header", _hoisted_2$4, [(0, vue.createElementVNode)("h1", null, (0, vue.toDisplayString)((0, vue.unref)(t)("client.demos.title")), 1), (0, vue.createElementVNode)("p", null, (0, vue.toDisplayString)((0, vue.unref)(t)("client.demos.subtitle")), 1)]), (0, vue.createElementVNode)("div", _hoisted_3$4, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(items.value, (item) => {
9302
+ return (0, vue.openBlock)(), (0, vue.createElementBlock)("section", _hoisted_1$6, [(0, vue.createElementVNode)("header", _hoisted_2$5, [(0, vue.createElementVNode)("h1", null, (0, vue.toDisplayString)((0, vue.unref)(t)("client.demos.title")), 1), (0, vue.createElementVNode)("p", null, (0, vue.toDisplayString)((0, vue.unref)(t)("client.demos.subtitle")), 1)]), (0, vue.createElementVNode)("div", _hoisted_3$5, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(items.value, (item) => {
8866
9303
  return (0, vue.openBlock)(), (0, vue.createBlock)(card_default, {
8867
9304
  key: item.name,
8868
9305
  item,
@@ -8878,7 +9315,7 @@ var gallery_default = /* @__PURE__ */ (0, vue.defineComponent)({
8878
9315
  });
8879
9316
  //#endregion
8880
9317
  //#region packages/client/src/pages/renderer-editor-demos/components/stage.vue?vue&type=script&setup=true&lang.ts
8881
- var _hoisted_1$4 = { class: "docs-renderer-editor-demos-stage" };
9318
+ var _hoisted_1$5 = { class: "docs-renderer-editor-demos-stage" };
8882
9319
  //#endregion
8883
9320
  //#region packages/client/src/pages/renderer-editor-demos/components/stage.vue
8884
9321
  var stage_default = /* @__PURE__ */ (0, vue.defineComponent)({
@@ -8941,7 +9378,7 @@ var stage_default = /* @__PURE__ */ (0, vue.defineComponent)({
8941
9378
  document.value = createRendererEditorDemoDocument(props.name, lang.value);
8942
9379
  }, { immediate: true });
8943
9380
  return (_ctx, _cache) => {
8944
- return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_1$4, [document.value ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(_deot_docs_renderer.Combo), {
9381
+ return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_1$5, [document.value ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(_deot_docs_renderer.Combo), {
8945
9382
  key: 0,
8946
9383
  modelValue: document.value,
8947
9384
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => document.value = $event),
@@ -9001,12 +9438,12 @@ var renderer_editor_demos_default = /* @__PURE__ */ (0, vue.defineComponent)({
9001
9438
  });
9002
9439
  //#endregion
9003
9440
  //#region packages/client/src/pages/renderer-editor/index.vue?vue&type=script&setup=true&lang.ts
9004
- var _hoisted_1$3 = { class: "docs-renderer-editor-page" };
9005
- var _hoisted_2$3 = {
9441
+ var _hoisted_1$4 = { class: "docs-renderer-editor-page" };
9442
+ var _hoisted_2$4 = {
9006
9443
  key: 0,
9007
9444
  class: "docs-renderer-editor-page__error"
9008
9445
  };
9009
- var _hoisted_3$3 = {
9446
+ var _hoisted_3$4 = {
9010
9447
  key: 1,
9011
9448
  class: "docs-renderer-editor-page__loading"
9012
9449
  };
@@ -9209,7 +9646,7 @@ var renderer_editor_default = /* @__PURE__ */ (0, vue.defineComponent)({
9209
9646
  controller?.abort();
9210
9647
  });
9211
9648
  return (_ctx, _cache) => {
9212
- return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_1$3, [error.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_2$3, (0, vue.toDisplayString)(error.value), 1)) : loading.value || !document.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_3$3, (0, vue.toDisplayString)((0, vue.unref)(t)("client.common.loading")), 1)) : ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(_deot_docs_renderer.Combo), {
9649
+ return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_1$4, [error.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_2$4, (0, vue.toDisplayString)(error.value), 1)) : loading.value || !document.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_3$4, (0, vue.toDisplayString)((0, vue.unref)(t)("client.common.loading")), 1)) : ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(_deot_docs_renderer.Combo), {
9213
9650
  key: 2,
9214
9651
  modelValue: document.value,
9215
9652
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => document.value = $event),
@@ -9229,12 +9666,12 @@ var renderer_editor_default = /* @__PURE__ */ (0, vue.defineComponent)({
9229
9666
  });
9230
9667
  //#endregion
9231
9668
  //#region packages/client/src/pages/home/index.vue?vue&type=script&setup=true&lang.ts
9232
- var _hoisted_1$2 = { class: "docs-home" };
9233
- var _hoisted_2$2 = {
9669
+ var _hoisted_1$3 = { class: "docs-home" };
9670
+ var _hoisted_2$3 = {
9234
9671
  key: 0,
9235
9672
  class: "docs-home__error"
9236
9673
  };
9237
- var _hoisted_3$2 = {
9674
+ var _hoisted_3$3 = {
9238
9675
  key: 2,
9239
9676
  class: "docs-home__loading"
9240
9677
  };
@@ -9330,7 +9767,7 @@ var home_default = /* @__PURE__ */ (0, vue.defineComponent)({
9330
9767
  unsubscribe?.();
9331
9768
  });
9332
9769
  return (_ctx, _cache) => {
9333
- return (0, vue.openBlock)(), (0, vue.createElementBlock)("section", _hoisted_1$2, [error.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_2$2, (0, vue.toDisplayString)(error.value), 1)) : (0, vue.createCommentVNode)("v-if", true), document.value ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(_deot_docs_renderer.Renderer), {
9770
+ return (0, vue.openBlock)(), (0, vue.createElementBlock)("section", _hoisted_1$3, [error.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_2$3, (0, vue.toDisplayString)(error.value), 1)) : (0, vue.createCommentVNode)("v-if", true), document.value ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(_deot_docs_renderer.Renderer), {
9334
9771
  key: 1,
9335
9772
  document: document.value,
9336
9773
  modules: (0, vue.unref)(rendererModules),
@@ -9341,7 +9778,7 @@ var home_default = /* @__PURE__ */ (0, vue.defineComponent)({
9341
9778
  "modules",
9342
9779
  "context",
9343
9780
  "fit"
9344
- ])) : loading.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_3$2, (0, vue.toDisplayString)((0, vue.unref)(t)("client.common.loading")), 1)) : (0, vue.createCommentVNode)("v-if", true)]);
9781
+ ])) : loading.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_3$3, (0, vue.toDisplayString)((0, vue.unref)(t)("client.common.loading")), 1)) : (0, vue.createCommentVNode)("v-if", true)]);
9345
9782
  };
9346
9783
  }
9347
9784
  });
@@ -9357,9 +9794,9 @@ var retry = async (row) => Resource.playground.retry(getNamespace(), row);
9357
9794
  var subscribeStatus = (listener) => Resource.playground.subscribeStatus(listener);
9358
9795
  //#endregion
9359
9796
  //#region packages/client/src/pages/playground-resource/components/source-editor.vue?vue&type=script&setup=true&lang.ts
9360
- var _hoisted_1$1 = { class: "docs-playground-resource-source-editor__meta" };
9361
- var _hoisted_2$1 = ["title"];
9362
- var _hoisted_3$1 = { class: "docs-playground-resource-source-editor__label" };
9797
+ var _hoisted_1$2 = { class: "docs-playground-resource-source-editor__meta" };
9798
+ var _hoisted_2$2 = ["title"];
9799
+ var _hoisted_3$2 = { class: "docs-playground-resource-source-editor__label" };
9363
9800
  //#endregion
9364
9801
  //#region packages/client/src/pages/playground-resource/components/source-editor.vue
9365
9802
  var source_editor_default = /* @__PURE__ */ (0, vue.defineComponent)({
@@ -9401,15 +9838,15 @@ var source_editor_default = /* @__PURE__ */ (0, vue.defineComponent)({
9401
9838
  onClose: handleClose
9402
9839
  }, {
9403
9840
  default: (0, vue.withCtx)(() => [
9404
- (0, vue.createElementVNode)("div", _hoisted_1$1, [
9841
+ (0, vue.createElementVNode)("div", _hoisted_1$2, [
9405
9842
  (0, vue.createElementVNode)("p", null, [(0, vue.createElementVNode)("span", null, (0, vue.toDisplayString)((0, vue.unref)(t)("client.playgroundResource.kind")), 1), (0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)(["docs-playground-resource__kind", { "is-style": __props.row.kind === "style" }]) }, (0, vue.toDisplayString)(kindLabel.value), 3)]),
9406
9843
  (0, vue.createElementVNode)("p", null, [(0, vue.createElementVNode)("span", null, (0, vue.toDisplayString)((0, vue.unref)(t)("client.playgroundResource.alias")), 1), (0, vue.createElementVNode)("code", null, (0, vue.toDisplayString)(__props.row.alias), 1)]),
9407
9844
  (0, vue.createElementVNode)("p", null, [(0, vue.createElementVNode)("span", null, (0, vue.toDisplayString)((0, vue.unref)(t)("client.playgroundResource.defaultUrl")), 1), (0, vue.createElementVNode)("code", {
9408
9845
  class: "docs-playground-resource__ellipsis",
9409
9846
  title: __props.row.defaultUrl || "-"
9410
- }, (0, vue.toDisplayString)(__props.row.defaultUrl || "-"), 9, _hoisted_2$1)])
9847
+ }, (0, vue.toDisplayString)(__props.row.defaultUrl || "-"), 9, _hoisted_2$2)])
9411
9848
  ]),
9412
- (0, vue.createElementVNode)("label", _hoisted_3$1, (0, vue.toDisplayString)((0, vue.unref)(t)("client.playgroundResource.currentUrl")), 1),
9849
+ (0, vue.createElementVNode)("label", _hoisted_3$2, (0, vue.toDisplayString)((0, vue.unref)(t)("client.playgroundResource.currentUrl")), 1),
9413
9850
  (0, vue.createVNode)((0, vue.unref)(_deot_vc.Textarea), {
9414
9851
  modelValue: draft.value,
9415
9852
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => draft.value = $event),
@@ -9434,19 +9871,19 @@ var SourceEditor = new _deot_vc.Portal(source_editor_default, {
9434
9871
  });
9435
9872
  //#endregion
9436
9873
  //#region packages/client/src/pages/playground-resource/index.vue?vue&type=script&setup=true&lang.ts
9437
- var _hoisted_1 = { class: "docs-playground-resource" };
9438
- var _hoisted_2 = { class: "docs-playground-resource__header" };
9439
- var _hoisted_3 = ["title"];
9440
- var _hoisted_4 = { class: "docs-playground-resource__hint" };
9441
- var _hoisted_5 = { class: "docs-playground-resource__toolbar" };
9442
- var _hoisted_6 = { class: "docs-playground-resource__toolbar-primary" };
9443
- var _hoisted_7 = { class: "docs-playground-resource__button-content" };
9444
- var _hoisted_8 = { class: "docs-playground-resource__button-content" };
9445
- var _hoisted_9 = { class: "docs-playground-resource__columns" };
9446
- var _hoisted_10 = { class: "docs-playground-resource__toolbar-danger" };
9447
- var _hoisted_11 = ["title"];
9448
- var _hoisted_12 = ["title"];
9449
- var _hoisted_13 = { class: "docs-playground-resource__actions" };
9874
+ var _hoisted_1$1 = { class: "docs-playground-resource" };
9875
+ var _hoisted_2$1 = { class: "docs-playground-resource__header" };
9876
+ var _hoisted_3$1 = ["title"];
9877
+ var _hoisted_4$1 = { class: "docs-playground-resource__hint" };
9878
+ var _hoisted_5$1 = { class: "docs-playground-resource__toolbar" };
9879
+ var _hoisted_6$1 = { class: "docs-playground-resource__toolbar-primary" };
9880
+ var _hoisted_7$1 = { class: "docs-playground-resource__button-content" };
9881
+ var _hoisted_8$1 = { class: "docs-playground-resource__button-content" };
9882
+ var _hoisted_9$1 = { class: "docs-playground-resource__columns" };
9883
+ var _hoisted_10$1 = { class: "docs-playground-resource__toolbar-danger" };
9884
+ var _hoisted_11$1 = ["title"];
9885
+ var _hoisted_12$1 = ["title"];
9886
+ var _hoisted_13$1 = { class: "docs-playground-resource__actions" };
9450
9887
  //#endregion
9451
9888
  //#region packages/client/src/pages/playground-resource/index.vue
9452
9889
  var playground_resource_default = /* @__PURE__ */ (0, vue.defineComponent)({
@@ -9672,21 +10109,21 @@ var playground_resource_default = /* @__PURE__ */ (0, vue.defineComponent)({
9672
10109
  SourceEditor.destroy();
9673
10110
  });
9674
10111
  return (_ctx, _cache) => {
9675
- return (0, vue.openBlock)(), (0, vue.createElementBlock)("section", _hoisted_1, [(0, vue.createElementVNode)("header", _hoisted_2, [(0, vue.createElementVNode)("div", null, [
10112
+ return (0, vue.openBlock)(), (0, vue.createElementBlock)("section", _hoisted_1$1, [(0, vue.createElementVNode)("header", _hoisted_2$1, [(0, vue.createElementVNode)("div", null, [
9676
10113
  (0, vue.createElementVNode)("h1", null, (0, vue.toDisplayString)((0, vue.unref)(t)("client.playgroundResource.title")), 1),
9677
10114
  (0, vue.createElementVNode)("p", null, [
9678
10115
  (0, vue.createTextVNode)(" deot-docs-playground-resource / resources · " + (0, vue.toDisplayString)((0, vue.unref)(t)("client.playgroundResource.records", { count: rows.value.length })) + " · ", 1),
9679
- (0, vue.createElementVNode)("span", { title: (0, vue.unref)(currentNamespace) }, (0, vue.toDisplayString)((0, vue.unref)(currentNamespace)), 9, _hoisted_3),
10116
+ (0, vue.createElementVNode)("span", { title: (0, vue.unref)(currentNamespace) }, (0, vue.toDisplayString)((0, vue.unref)(currentNamespace)), 9, _hoisted_3$1),
9680
10117
  (0, vue.createTextVNode)(" " + (0, vue.toDisplayString)((0, vue.unref)(t)("client.playgroundResource.cache", { size: namespaceCacheSize.value })), 1)
9681
10118
  ]),
9682
- (0, vue.createElementVNode)("p", _hoisted_4, (0, vue.toDisplayString)((0, vue.unref)(t)("client.playgroundResource.hint")), 1)
9683
- ]), (0, vue.createElementVNode)("div", _hoisted_5, [(0, vue.createElementVNode)("div", _hoisted_6, [
10119
+ (0, vue.createElementVNode)("p", _hoisted_4$1, (0, vue.toDisplayString)((0, vue.unref)(t)("client.playgroundResource.hint")), 1)
10120
+ ]), (0, vue.createElementVNode)("div", _hoisted_5$1, [(0, vue.createElementVNode)("div", _hoisted_6$1, [
9684
10121
  (0, vue.createVNode)((0, vue.unref)(_deot_vc.Button), {
9685
10122
  type: "primary",
9686
10123
  disabled: loading.value,
9687
10124
  onClick: handleBack
9688
10125
  }, {
9689
- default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("span", _hoisted_7, [(0, vue.createVNode)((0, vue.unref)(icon_default), { name: "back" }), (0, vue.createTextVNode)(" " + (0, vue.toDisplayString)((0, vue.unref)(t)("client.playgroundResource.back")), 1)])]),
10126
+ default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("span", _hoisted_7$1, [(0, vue.createVNode)((0, vue.unref)(icon_default), { name: "back" }), (0, vue.createTextVNode)(" " + (0, vue.toDisplayString)((0, vue.unref)(t)("client.playgroundResource.back")), 1)])]),
9690
10127
  _: 1
9691
10128
  }, 8, ["disabled"]),
9692
10129
  (0, vue.createVNode)((0, vue.unref)(_deot_vc.Button), {
@@ -9694,14 +10131,14 @@ var playground_resource_default = /* @__PURE__ */ (0, vue.defineComponent)({
9694
10131
  disabled: loading.value,
9695
10132
  onClick: handleHome
9696
10133
  }, {
9697
- default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("span", _hoisted_8, [(0, vue.createVNode)((0, vue.unref)(icon_default), { name: "home" }), (0, vue.createTextVNode)(" " + (0, vue.toDisplayString)((0, vue.unref)(t)("client.playgroundResource.home")), 1)])]),
10134
+ default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("span", _hoisted_8$1, [(0, vue.createVNode)((0, vue.unref)(icon_default), { name: "home" }), (0, vue.createTextVNode)(" " + (0, vue.toDisplayString)((0, vue.unref)(t)("client.playgroundResource.home")), 1)])]),
9698
10135
  _: 1
9699
10136
  }, 8, ["disabled"]),
9700
10137
  (0, vue.createVNode)((0, vue.unref)(_deot_vc.Popover), {
9701
10138
  trigger: "click",
9702
10139
  placement: "bottom-right"
9703
10140
  }, {
9704
- content: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", _hoisted_9, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(optionalColumns.value, (item) => {
10141
+ content: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", _hoisted_9$1, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(optionalColumns.value, (item) => {
9705
10142
  return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(_deot_vc.Checkbox), {
9706
10143
  key: item.value,
9707
10144
  "model-value": isColumnVisible(item.value),
@@ -9738,7 +10175,7 @@ var playground_resource_default = /* @__PURE__ */ (0, vue.defineComponent)({
9738
10175
  default: (0, vue.withCtx)(() => [(0, vue.createTextVNode)((0, vue.toDisplayString)((0, vue.unref)(t)("client.playgroundResource.prefetch")), 1)]),
9739
10176
  _: 1
9740
10177
  }, 8, ["disabled"])
9741
- ]), (0, vue.createElementVNode)("div", _hoisted_10, [(0, vue.createVNode)((0, vue.unref)(_deot_vc.Button), {
10178
+ ]), (0, vue.createElementVNode)("div", _hoisted_10$1, [(0, vue.createVNode)((0, vue.unref)(_deot_vc.Button), {
9742
10179
  type: "error",
9743
10180
  disabled: loading.value || !rows.value.length,
9744
10181
  onClick: handleClear
@@ -9779,7 +10216,7 @@ var playground_resource_default = /* @__PURE__ */ (0, vue.defineComponent)({
9779
10216
  default: (0, vue.withCtx)(({ row }) => [(0, vue.createElementVNode)("span", {
9780
10217
  class: "docs-playground-resource__ellipsis",
9781
10218
  title: row.defaultUrl || "-"
9782
- }, (0, vue.toDisplayString)(row.defaultUrl || "-"), 9, _hoisted_11)]),
10219
+ }, (0, vue.toDisplayString)(row.defaultUrl || "-"), 9, _hoisted_11$1)]),
9783
10220
  _: 1
9784
10221
  }, 8, ["label"])) : (0, vue.createCommentVNode)("v-if", true),
9785
10222
  (0, vue.createVNode)((0, vue.unref)(_deot_vc.TableColumn), {
@@ -9789,7 +10226,7 @@ var playground_resource_default = /* @__PURE__ */ (0, vue.defineComponent)({
9789
10226
  default: (0, vue.withCtx)(({ row }) => [(0, vue.createElementVNode)("span", {
9790
10227
  class: "docs-playground-resource__ellipsis",
9791
10228
  title: row.currentUrl || "-"
9792
- }, (0, vue.toDisplayString)(row.currentUrl || "-"), 9, _hoisted_12)]),
10229
+ }, (0, vue.toDisplayString)(row.currentUrl || "-"), 9, _hoisted_12$1)]),
9793
10230
  _: 1
9794
10231
  }, 8, ["label"]),
9795
10232
  (0, vue.createVNode)((0, vue.unref)(_deot_vc.TableColumn), {
@@ -9840,7 +10277,7 @@ var playground_resource_default = /* @__PURE__ */ (0, vue.defineComponent)({
9840
10277
  align: "center",
9841
10278
  fixed: "right"
9842
10279
  }, {
9843
- default: (0, vue.withCtx)(({ row }) => [(0, vue.createElementVNode)("div", _hoisted_13, [
10280
+ default: (0, vue.withCtx)(({ row }) => [(0, vue.createElementVNode)("div", _hoisted_13$1, [
9844
10281
  (0, vue.createVNode)((0, vue.unref)(_deot_vc.Button), {
9845
10282
  class: "docs-playground-resource__action",
9846
10283
  type: "text",
@@ -9879,6 +10316,199 @@ var playground_resource_default = /* @__PURE__ */ (0, vue.defineComponent)({
9879
10316
  }
9880
10317
  });
9881
10318
  //#endregion
10319
+ //#region packages/client/src/pages/preview-config-generate/index.vue?vue&type=script&setup=true&lang.ts
10320
+ var _hoisted_1 = { class: "docs-preview-config-generate" };
10321
+ var _hoisted_2 = { class: "docs-preview-config-generate__body" };
10322
+ var _hoisted_3 = { class: "docs-preview-config-generate__import" };
10323
+ var _hoisted_4 = { for: "preview-import" };
10324
+ var _hoisted_5 = { class: "docs-preview-config-generate__actions" };
10325
+ var _hoisted_6 = ["placeholder"];
10326
+ var _hoisted_7 = ["disabled"];
10327
+ var _hoisted_8 = {
10328
+ key: 0,
10329
+ role: "alert",
10330
+ class: "docs-preview-config-generate__error"
10331
+ };
10332
+ var _hoisted_9 = { class: "docs-preview-config-generate__fields" };
10333
+ var _hoisted_10 = ["placeholder"];
10334
+ var _hoisted_11 = ["for"];
10335
+ var _hoisted_12 = ["id", "onUpdate:modelValue"];
10336
+ var _hoisted_13 = { for: "preview-lang" };
10337
+ var _hoisted_14 = {
10338
+ key: 0,
10339
+ role: "alert",
10340
+ class: "docs-preview-config-generate__error"
10341
+ };
10342
+ var _hoisted_15 = { class: "docs-preview-config-generate__output" };
10343
+ var _hoisted_16 = { for: "preview-link" };
10344
+ var _hoisted_17 = ["value"];
10345
+ var _hoisted_18 = { class: "docs-preview-config-generate__actions" };
10346
+ var _hoisted_19 = ["href"];
10347
+ var _hoisted_20 = { key: 0 };
10348
+ //#endregion
10349
+ //#region packages/client/src/pages/preview-config-generate/index.vue
10350
+ var preview_config_generate_default = /* @__PURE__ */ (0, vue.defineComponent)({
10351
+ __name: "index",
10352
+ setup(__props) {
10353
+ const route = (0, vue_router.useRoute)();
10354
+ const docs = getDocsConfig();
10355
+ const { t } = (0, _deot_docs_locale.useLocale)();
10356
+ const languageOptions = (0, vue.computed)(() => [{
10357
+ value: "",
10358
+ label: t("client.previewConfigGenerate.defaultLanguage")
10359
+ }, ...Object.entries(docs.locales).map(([value, item]) => ({
10360
+ value,
10361
+ label: item.label || value
10362
+ }))]);
10363
+ const defaults = {
10364
+ url: "",
10365
+ styles: "[]",
10366
+ modules: "{}",
10367
+ playground: "{}",
10368
+ lang: ""
10369
+ };
10370
+ const form = (0, vue.reactive)({ ...defaults });
10371
+ const jsonFields = [
10372
+ "styles",
10373
+ "modules",
10374
+ "playground"
10375
+ ];
10376
+ const importUrl = (0, vue.ref)("");
10377
+ const parseError = (0, vue.ref)("");
10378
+ const messageOf = (reason) => t("client.common.previewConfigFailed", { message: reason instanceof Error ? reason.message : String(reason) });
10379
+ const result = (0, vue.computed)(() => {
10380
+ try {
10381
+ const config = normalizePreviewConfig({
10382
+ url: form.url,
10383
+ lang: form.lang,
10384
+ ...Object.fromEntries(jsonFields.map((field) => [field, JSON.parse(form[field])]))
10385
+ });
10386
+ if (!resolvePreviewType(config.url, location.href)) throw new TypeError(t("client.common.previewUrlUnsupported"));
10387
+ parsePreviewStyleUrls(config.styles, location.href);
10388
+ return {
10389
+ config,
10390
+ href: createPreviewUrl(config, getDocsDeploymentBase(docs)),
10391
+ error: ""
10392
+ };
10393
+ } catch (reason) {
10394
+ return {
10395
+ config: void 0,
10396
+ href: "",
10397
+ error: form.url || jsonFields.some((field) => form[field] !== defaults[field]) ? messageOf(reason) : ""
10398
+ };
10399
+ }
10400
+ });
10401
+ const applyQuery = (query) => {
10402
+ try {
10403
+ const config = readPreviewConfig(query);
10404
+ if (!config.url) throw new TypeError(t("client.common.previewUrlRequired"));
10405
+ form.url = config.url;
10406
+ form.lang = config.lang || "";
10407
+ jsonFields.forEach((field) => form[field] = JSON.stringify(config[field] || {}, null, 2));
10408
+ parseError.value = "";
10409
+ } catch (reason) {
10410
+ parseError.value = messageOf(reason);
10411
+ }
10412
+ };
10413
+ const parseLink = () => {
10414
+ try {
10415
+ const target = new URL(importUrl.value.trim(), location.href);
10416
+ const query = {};
10417
+ target.searchParams.forEach((_, key) => {
10418
+ const values = target.searchParams.getAll(key);
10419
+ query[key] = values.length === 1 ? values[0] : values;
10420
+ });
10421
+ applyQuery(query);
10422
+ } catch (reason) {
10423
+ parseError.value = messageOf(reason);
10424
+ }
10425
+ };
10426
+ (0, vue.watch)(() => route.query, (query) => {
10427
+ if (query.raw !== void 0 || query.url !== void 0) applyQuery(query);
10428
+ }, { immediate: true });
10429
+ return (_ctx, _cache) => {
10430
+ return (0, vue.openBlock)(), (0, vue.createElementBlock)("section", _hoisted_1, [(0, vue.createElementVNode)("div", _hoisted_2, [
10431
+ (0, vue.createElementVNode)("header", null, [(0, vue.createElementVNode)("h1", null, (0, vue.toDisplayString)((0, vue.unref)(t)("client.previewConfigGenerate.title")), 1), (0, vue.createElementVNode)("p", null, (0, vue.toDisplayString)((0, vue.unref)(t)("client.previewConfigGenerate.description")), 1)]),
10432
+ (0, vue.createElementVNode)("div", _hoisted_3, [
10433
+ (0, vue.createElementVNode)("label", _hoisted_4, (0, vue.toDisplayString)((0, vue.unref)(t)("client.previewConfigGenerate.importLabel")), 1),
10434
+ (0, vue.createElementVNode)("div", _hoisted_5, [(0, vue.withDirectives)((0, vue.createElementVNode)("input", {
10435
+ id: "preview-import",
10436
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => importUrl.value = $event),
10437
+ class: "docs-preview-config-generate__input",
10438
+ placeholder: (0, vue.unref)(t)("client.previewConfigGenerate.parseHint")
10439
+ }, null, 8, _hoisted_6), [[vue.vModelText, importUrl.value]]), (0, vue.createElementVNode)("button", {
10440
+ type: "button",
10441
+ disabled: !importUrl.value.trim(),
10442
+ onClick: parseLink
10443
+ }, (0, vue.toDisplayString)((0, vue.unref)(t)("client.previewConfigGenerate.parse")), 9, _hoisted_7)]),
10444
+ parseError.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("p", _hoisted_8, (0, vue.toDisplayString)(parseError.value), 1)) : (0, vue.createCommentVNode)("v-if", true)
10445
+ ]),
10446
+ (0, vue.createElementVNode)("div", _hoisted_9, [
10447
+ _cache[3] || (_cache[3] = (0, vue.createElementVNode)("label", { for: "preview-url" }, "url", -1)),
10448
+ (0, vue.withDirectives)((0, vue.createElementVNode)("input", {
10449
+ id: "preview-url",
10450
+ "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => form.url = $event),
10451
+ class: "docs-preview-config-generate__input",
10452
+ placeholder: (0, vue.unref)(t)("client.previewConfigGenerate.urlHint")
10453
+ }, null, 8, _hoisted_10), [[vue.vModelText, form.url]]),
10454
+ ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(jsonFields, (field) => {
10455
+ return (0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: field }, [
10456
+ (0, vue.createElementVNode)("label", { for: `preview-${field}` }, (0, vue.toDisplayString)(field), 9, _hoisted_11),
10457
+ (0, vue.withDirectives)((0, vue.createElementVNode)("textarea", {
10458
+ id: `preview-${field}`,
10459
+ "onUpdate:modelValue": ($event) => form[field] = $event,
10460
+ rows: "4",
10461
+ spellcheck: "false"
10462
+ }, null, 8, _hoisted_12), [[vue.vModelText, form[field]]]),
10463
+ (0, vue.createElementVNode)("p", null, (0, vue.toDisplayString)((0, vue.unref)(t)(`client.previewConfigGenerate.${field}Hint`)), 1)
10464
+ ], 64);
10465
+ }), 64)),
10466
+ (0, vue.createElementVNode)("label", _hoisted_13, (0, vue.toDisplayString)((0, vue.unref)(t)("client.previewConfigGenerate.language")), 1),
10467
+ (0, vue.createVNode)((0, vue.unref)(_deot_vc.Select), {
10468
+ id: "preview-lang",
10469
+ modelValue: form.lang,
10470
+ "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => form.lang = $event),
10471
+ class: "docs-preview-config-generate__select",
10472
+ data: languageOptions.value,
10473
+ "null-value": "",
10474
+ placeholder: (0, vue.unref)(t)("client.previewConfigGenerate.defaultLanguage")
10475
+ }, null, 8, [
10476
+ "modelValue",
10477
+ "data",
10478
+ "placeholder"
10479
+ ])
10480
+ ]),
10481
+ result.value.error ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("p", _hoisted_14, (0, vue.toDisplayString)(result.value.error), 1)) : (0, vue.createCommentVNode)("v-if", true),
10482
+ (0, vue.createElementVNode)("div", _hoisted_15, [
10483
+ (0, vue.createElementVNode)("label", _hoisted_16, (0, vue.toDisplayString)((0, vue.unref)(t)("client.previewConfigGenerate.link")), 1),
10484
+ (0, vue.createElementVNode)("textarea", {
10485
+ id: "preview-link",
10486
+ value: result.value.href,
10487
+ rows: "4",
10488
+ readonly: "",
10489
+ spellcheck: "false"
10490
+ }, null, 8, _hoisted_17),
10491
+ (0, vue.createElementVNode)("div", _hoisted_18, [(0, vue.createVNode)((0, vue.unref)(_deot_vc.Clipboard), {
10492
+ tag: "button",
10493
+ type: "button",
10494
+ value: result.value.href,
10495
+ disabled: !result.value.href
10496
+ }, {
10497
+ default: (0, vue.withCtx)(() => [(0, vue.createTextVNode)((0, vue.toDisplayString)((0, vue.unref)(t)("client.previewConfigGenerate.copy")), 1)]),
10498
+ _: 1
10499
+ }, 8, ["value", "disabled"]), result.value.href ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("a", {
10500
+ key: 0,
10501
+ href: result.value.href,
10502
+ target: "_blank",
10503
+ rel: "noopener"
10504
+ }, (0, vue.toDisplayString)((0, vue.unref)(t)("client.previewConfigGenerate.preview")), 9, _hoisted_19)) : (0, vue.createCommentVNode)("v-if", true)]),
10505
+ result.value.config ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("details", _hoisted_20, [(0, vue.createElementVNode)("summary", null, (0, vue.toDisplayString)((0, vue.unref)(t)("client.previewConfigGenerate.configuration")), 1), (0, vue.createElementVNode)("pre", null, (0, vue.toDisplayString)(JSON.stringify(result.value.config, null, 2)), 1)])) : (0, vue.createCommentVNode)("v-if", true)
10506
+ ])
10507
+ ])]);
10508
+ };
10509
+ }
10510
+ });
10511
+ //#endregion
9882
10512
  //#region packages/client/src/router/index.ts
9883
10513
  var slotComponents = {
9884
10514
  default: resource_slot_default,
@@ -9942,6 +10572,29 @@ var createDocsRouter = (config, options = {}) => {
9942
10572
  const hasConfiguredDemosRoute = Object.keys(config.routes).some((path) => (path.startsWith("/") ? path : `/${path}`) === "/renderer-editor-demos");
9943
10573
  const isDevelopment = config.runtime?.mode === "development";
9944
10574
  const routes = [
10575
+ {
10576
+ path: "/__docs/preview-config-generate",
10577
+ component: preview_config_generate_default,
10578
+ meta: {
10579
+ docsPreviewConfigGenerate: true,
10580
+ docsRoute: {
10581
+ layout: "none",
10582
+ content: null
10583
+ }
10584
+ }
10585
+ },
10586
+ {
10587
+ path: "/__docs/preview",
10588
+ component: resource_slot_default,
10589
+ props: { name: "content" },
10590
+ meta: {
10591
+ docsPreview: true,
10592
+ docsRoute: {
10593
+ layout: "none",
10594
+ content: null
10595
+ }
10596
+ }
10597
+ },
9945
10598
  {
9946
10599
  path: "/:lang/__docs/database",
9947
10600
  component: database_default,
@@ -10060,6 +10713,14 @@ var createDocsRouter = (config, options = {}) => {
10060
10713
  routes
10061
10714
  });
10062
10715
  router.beforeEach((to) => {
10716
+ if (to.meta.docsPreview || to.meta.docsPreviewConfigGenerate) {
10717
+ let language = "";
10718
+ try {
10719
+ language = readPreviewConfig(to.query).lang || "";
10720
+ } catch {}
10721
+ to.params.lang = hasConfiguredLanguage(config, language) ? language : defaultLanguage;
10722
+ return true;
10723
+ }
10063
10724
  const lang = String(to.params.lang || "");
10064
10725
  const configuredLanguages = Object.keys(config.locales);
10065
10726
  if (lang && (hasConfiguredLanguage(config, lang) || !configuredLanguages.length && lang === defaultLanguage)) {
@@ -10148,7 +10809,7 @@ var bootstrap = async (config) => {
10148
10809
  disconnect
10149
10810
  };
10150
10811
  };
10151
- if (typeof window !== "undefined" && typeof document !== "undefined" && document.querySelector("#app")) bootstrap();
10812
+ if (typeof window !== "undefined" && typeof document !== "undefined" && document.querySelector("#app:not([data-v-app])")) bootstrap();
10152
10813
  //#endregion
10153
10814
  exports.DOCS_RESOURCE_TYPES = DOCS_RESOURCE_TYPES;
10154
10815
  exports.Gateway = Gateway;