@deot/docs-client 1.1.0 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -3,11 +3,11 @@ let vue = require("vue");
3
3
  let _deot_docs_locale = require("@deot/docs-locale");
4
4
  let _deot_vc = require("@deot/vc");
5
5
  let vue_router = require("vue-router");
6
+ let _deot_docs_markdown = require("@deot/docs-markdown");
6
7
  let _deot_helper_cache = require("@deot/helper-cache");
7
8
  let _deot_docs_theme = require("@deot/docs-theme");
8
9
  let _deot_helper_fp = require("@deot/helper-fp");
9
10
  let _deot_http = require("@deot/http");
10
- let _deot_docs_markdown = require("@deot/docs-markdown");
11
11
  let _deot_docs_renderer = require("@deot/docs-renderer");
12
12
  let es_module_lexer = require("es-module-lexer");
13
13
  let _deot_docs_playground = require("@deot/docs-playground");
@@ -5389,7 +5389,8 @@ var default_sidebar_default = /* @__PURE__ */ (0, vue.defineComponent)({
5389
5389
  __name: "default-sidebar",
5390
5390
  props: {
5391
5391
  items: {},
5392
- nested: { type: Boolean }
5392
+ nested: { type: Boolean },
5393
+ depth: { default: 0 }
5393
5394
  },
5394
5395
  setup(__props) {
5395
5396
  const route = (0, vue_router.useRoute)();
@@ -5403,7 +5404,10 @@ var default_sidebar_default = /* @__PURE__ */ (0, vue.defineComponent)({
5403
5404
  };
5404
5405
  return (_ctx, _cache) => {
5405
5406
  const _component_DefaultSidebar = (0, vue.resolveComponent)("DefaultSidebar", true);
5406
- return (0, vue.openBlock)(), (0, vue.createElementBlock)("ul", { class: (0, vue.normalizeClass)(["docs-sidebar", { "docs-sidebar--nested": __props.nested }]) }, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(__props.items, (item) => {
5407
+ return (0, vue.openBlock)(), (0, vue.createElementBlock)("ul", {
5408
+ class: (0, vue.normalizeClass)(["docs-sidebar", { "docs-sidebar--nested": __props.nested }]),
5409
+ style: (0, vue.normalizeStyle)(__props.nested ? { "--docs-sidebar-depth": __props.depth } : void 0)
5410
+ }, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(__props.items, (item) => {
5407
5411
  return (0, vue.openBlock)(), (0, vue.createElementBlock)("li", {
5408
5412
  key: `${item.label}:${item.value || ""}`,
5409
5413
  class: "docs-sidebar__item"
@@ -5436,9 +5440,10 @@ var default_sidebar_default = /* @__PURE__ */ (0, vue.defineComponent)({
5436
5440
  ])), item.children?.length ? ((0, vue.openBlock)(), (0, vue.createBlock)(_component_DefaultSidebar, {
5437
5441
  key: 3,
5438
5442
  items: item.children,
5439
- nested: ""
5440
- }, null, 8, ["items"])) : (0, vue.createCommentVNode)("v-if", true)]);
5441
- }), 128))], 2);
5443
+ nested: "",
5444
+ depth: __props.depth + 1
5445
+ }, null, 8, ["items", "depth"])) : (0, vue.createCommentVNode)("v-if", true)]);
5446
+ }), 128))], 6);
5442
5447
  };
5443
5448
  }
5444
5449
  });
@@ -5609,7 +5614,13 @@ var page_footer_default = /* @__PURE__ */ (0, vue.defineComponent)({
5609
5614
  //#region packages/client/src/utils/outline.ts
5610
5615
  var markdownArticleKey = Symbol("docs-markdown-article");
5611
5616
  var HEADING_SELECTOR = "h1[id], h2[id], h3[id], h4[id], h5[id], h6[id]";
5612
- var SKIP_CLOSEST = "pre, .docs-markdown-code-preview, [data-playground][data-code], [data-playground][data-files]";
5617
+ var SKIP_CLOSEST = [
5618
+ "pre",
5619
+ ".docs-markdown-code-preview",
5620
+ "[data-playground][data-code]",
5621
+ "[data-playground][data-files]",
5622
+ ".docs-markdown-tabs__panel[hidden]"
5623
+ ].join(", ");
5613
5624
  /**
5614
5625
  * 去掉 markdown-it-anchor 的井号后,读取标题的可见文案。
5615
5626
  * @param element 当前标题节点。
@@ -5985,6 +5996,23 @@ var page_outline_default = /* @__PURE__ */ (0, vue.defineComponent)({
5985
5996
  }
5986
5997
  });
5987
5998
  //#endregion
5999
+ //#region packages/client/src/utils/query.ts
6000
+ /**
6001
+ * 复制 query 并去掉指定键,用于比较「内容导航」相关的 query 是否变化。
6002
+ * @param query 当前路由 query。
6003
+ * @param keys 需要忽略的键,例如 `tab`。
6004
+ * @returns 去掉指定键后的普通对象,便于 JSON.stringify。
6005
+ */
6006
+ var omitRouteQuery = (query, keys) => {
6007
+ const ignored = new Set(keys);
6008
+ const next = {};
6009
+ Object.keys(query).forEach((key) => {
6010
+ if (ignored.has(key)) return;
6011
+ next[key] = query[key];
6012
+ });
6013
+ return next;
6014
+ };
6015
+ //#endregion
5988
6016
  //#region packages/client/src/components/layout/resource-slot.vue?vue&type=script&setup=true&lang.ts
5989
6017
  var _hoisted_1$13 = [
5990
6018
  "data-slot",
@@ -6344,7 +6372,7 @@ var resource_slot_default = /* @__PURE__ */ (0, vue.defineComponent)({
6344
6372
  };
6345
6373
  (0, vue.watch)([
6346
6374
  () => route.path,
6347
- () => JSON.stringify(route.query),
6375
+ () => JSON.stringify(omitRouteQuery(route.query, ["tab"])),
6348
6376
  () => props.name
6349
6377
  ], load, { immediate: true });
6350
6378
  (0, vue.watch)(() => route.hash, (hash) => {
@@ -7560,6 +7588,7 @@ var app_default = /* @__PURE__ */ (0, vue.defineComponent)({
7560
7588
  __name: "app",
7561
7589
  setup(__props) {
7562
7590
  const route = (0, vue_router.useRoute)();
7591
+ const router = (0, vue_router.useRouter)();
7563
7592
  const { t } = (0, _deot_docs_locale.useLocale)();
7564
7593
  const mainScroller = (0, vue.ref)();
7565
7594
  const mobileSidebarOpen = (0, vue.ref)(false);
@@ -7574,7 +7603,24 @@ var app_default = /* @__PURE__ */ (0, vue.defineComponent)({
7574
7603
  const handleSidebarNavigation = (event) => {
7575
7604
  if (event.target?.closest("a")) closeMobileSidebar();
7576
7605
  };
7577
- (0, vue.watch)([() => route.path, () => JSON.stringify(route.query)], async () => {
7606
+ (0, vue.provide)(_deot_docs_markdown.markdownTabQueryKey, {
7607
+ get: () => {
7608
+ const value = route.query.tab;
7609
+ return typeof value === "string" ? value : Array.isArray(value) ? String(value[0] || "") : "";
7610
+ },
7611
+ set: (tab) => {
7612
+ const query = { ...route.query };
7613
+ if (tab) query.tab = tab;
7614
+ else delete query.tab;
7615
+ router.replace({
7616
+ path: route.path,
7617
+ query,
7618
+ hash: route.hash
7619
+ });
7620
+ },
7621
+ subscribe: (listener) => (0, vue.watch)(() => route.query.tab, () => listener())
7622
+ });
7623
+ (0, vue.watch)([() => route.path, () => JSON.stringify(omitRouteQuery(route.query, ["tab"]))], async () => {
7578
7624
  closeMobileSidebar();
7579
7625
  await (0, vue.nextTick)();
7580
7626
  mainScroller.value?.setScrollTop(0);
@@ -7702,8 +7748,13 @@ var connectResourceEvents = () => {
7702
7748
  return;
7703
7749
  }
7704
7750
  const configuredLanguages = Object.keys(config.locales);
7705
- (event.lang ? [event.lang] : configuredLanguages.length ? configuredLanguages : [getDefaultLanguage(config)]).forEach((lang) => {
7706
- const identity = createResourceIdentity(config, lang, event.resourceType, event.source);
7751
+ /**
7752
+ * 共享目录(docs/markdown.md)若被服务端误拆成 `{ lang: 'docs', source: './markdown.md' }`,
7753
+ * 仍还原成 Client 订阅使用的 logical source。
7754
+ */
7755
+ const sharedSource = event.lang && !configuredLanguages.includes(event.lang) ? `${event.lang}/${event.source.replace(/^\.\//, "")}` : event.source;
7756
+ (event.lang && configuredLanguages.includes(event.lang) ? [event.lang] : configuredLanguages.length ? configuredLanguages : [getDefaultLanguage(config)]).forEach((lang) => {
7757
+ const identity = createResourceIdentity(config, lang, event.resourceType, sharedSource);
7707
7758
  if (!Gateway.isSubscribed(identity) && !Gateway.isPrefetched(identity)) return;
7708
7759
  revalidateSilently(identity);
7709
7760
  });