workdesktop-ai 1.2.1 → 1.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/CHANGELOG.md +190 -190
  2. package/dist/chunks/Path-pIP0JQ0c.mjs +245 -0
  3. package/dist/chunks/Path-pIP0JQ0c.mjs.map +1 -0
  4. package/dist/chunks/Station-BTP0SbBg.mjs +818 -0
  5. package/dist/chunks/Station-BTP0SbBg.mjs.map +1 -0
  6. package/dist/index.esm.js +2 -2
  7. package/dist/index.umd.js +19 -19
  8. package/dist/index.umd.js.map +1 -1
  9. package/dist/path/index.mjs +1 -1
  10. package/dist/path/style.css +1 -1
  11. package/dist/station/index.mjs +1 -1
  12. package/dist/station/style.css +1 -1
  13. package/dist/style.css +1 -1
  14. package/dist/types/src/components/buttons/ApiButton.vue.d.ts +134 -0
  15. package/dist/types/src/components/buttons/ConfirmButton.vue.d.ts +169 -0
  16. package/dist/types/src/components/buttons/DialogButton.vue.d.ts +167 -0
  17. package/dist/types/src/components/buttons/DrawerButton.vue.d.ts +186 -0
  18. package/dist/types/src/components/buttons/PopconfirmButton.vue.d.ts +317 -0
  19. package/dist/types/src/components/buttons/PromptButton.vue.d.ts +180 -0
  20. package/dist/types/src/components/buttons/RouteButton.vue.d.ts +122 -0
  21. package/dist/types/src/components/buttons/TipsButton.vue.d.ts +66 -0
  22. package/dist/types/src/components/buttons/useApiAction.d.ts +20 -0
  23. package/dist/types/src/components/common/props.d.ts +122 -0
  24. package/dist/types/src/components/containers/Drawer.vue.d.ts +172 -0
  25. package/dist/types/src/components/containers/Iframe.vue.d.ts +81 -0
  26. package/dist/types/src/components/containers/containerContext.d.ts +15 -0
  27. package/dist/types/src/components/containers/useContainerController.d.ts +24 -0
  28. package/dist/types/src/components/containers/useIframeContainer.d.ts +20 -0
  29. package/dist/types/src/components/core/Requester.vue.d.ts +41 -0
  30. package/dist/types/src/components/data/datagrid/DataGrid.vue.d.ts +542 -0
  31. package/dist/types/src/components/data/datagrid/useColumnSettings.d.ts +62 -0
  32. package/dist/types/src/components/data/editable-grid/EditableGrid.vue.d.ts +586 -0
  33. package/dist/types/src/components/data/viewer/Viewer.vue.d.ts +187 -0
  34. package/dist/types/src/components/form/FormItem.vue.d.ts +62 -0
  35. package/dist/types/src/components/form/SearchItem.vue.d.ts +62 -0
  36. package/dist/types/src/components/form/SearchPanel.vue.d.ts +167 -0
  37. package/dist/types/src/components/form/data-form/DataForm.vue.d.ts +311 -0
  38. package/dist/types/src/components/index.d.ts +32 -0
  39. package/dist/types/src/components/inputs/AutoComplete.vue.d.ts +166 -0
  40. package/dist/types/src/components/inputs/CheckboxList.vue.d.ts +166 -0
  41. package/dist/types/src/components/inputs/RadioList.vue.d.ts +166 -0
  42. package/dist/types/src/components/inputs/Select.vue.d.ts +176 -0
  43. package/dist/types/src/components/inputs/Switch.vue.d.ts +116 -0
  44. package/dist/types/src/components/inputs/useOptionsLoader.d.ts +32 -0
  45. package/dist/types/src/components/layout/Station.vue.d.ts +313 -0
  46. package/dist/types/src/components/layout/StationMenuNode.vue.d.ts +20 -0
  47. package/dist/types/src/components/layout/types.d.ts +67 -0
  48. package/dist/types/src/components/styles/Panel.vue.d.ts +94 -0
  49. package/dist/types/src/components/styles/Path.vue.d.ts +103 -0
  50. package/dist/types/src/components/styles/Tips.vue.d.ts +60 -0
  51. package/dist/types/src/components/upload/ImageUpload.vue.d.ts +176 -0
  52. package/dist/types/src/components/upload/Upload.vue.d.ts +235 -0
  53. package/dist/types/src/entries/api-button.d.ts +9 -0
  54. package/dist/types/src/entries/auto-complete.d.ts +9 -0
  55. package/dist/types/src/entries/checkbox-list.d.ts +9 -0
  56. package/dist/types/src/entries/components-map.d.ts +8 -0
  57. package/dist/types/src/entries/confirm-button.d.ts +9 -0
  58. package/dist/types/src/entries/data-form.d.ts +9 -0
  59. package/dist/types/src/entries/data-grid.d.ts +9 -0
  60. package/dist/types/src/entries/dialog-button.d.ts +9 -0
  61. package/dist/types/src/entries/drawer-button.d.ts +9 -0
  62. package/dist/types/src/entries/drawer.d.ts +9 -0
  63. package/dist/types/src/entries/editable-grid.d.ts +9 -0
  64. package/dist/types/src/entries/form-item.d.ts +9 -0
  65. package/dist/types/src/entries/iframe.d.ts +9 -0
  66. package/dist/types/src/entries/image-upload.d.ts +9 -0
  67. package/dist/types/src/entries/panel.d.ts +9 -0
  68. package/dist/types/src/entries/path.d.ts +9 -0
  69. package/dist/types/src/entries/prompt-button.d.ts +9 -0
  70. package/dist/types/src/entries/radio-list.d.ts +9 -0
  71. package/dist/types/src/entries/requester.d.ts +9 -0
  72. package/dist/types/src/entries/route-button.d.ts +9 -0
  73. package/dist/types/src/entries/search-item.d.ts +9 -0
  74. package/dist/types/src/entries/search-panel.d.ts +9 -0
  75. package/dist/types/src/entries/select.d.ts +9 -0
  76. package/dist/types/src/entries/station.d.ts +9 -0
  77. package/dist/types/src/entries/switch.d.ts +9 -0
  78. package/dist/types/src/entries/tips-button.d.ts +9 -0
  79. package/dist/types/src/entries/tips.d.ts +9 -0
  80. package/dist/types/src/entries/upload.d.ts +9 -0
  81. package/dist/types/src/entries/viewer.d.ts +9 -0
  82. package/dist/types/src/index.d.ts +24 -0
  83. package/dist/types/src/lib/composables/useConfig.d.ts +19 -0
  84. package/dist/types/src/lib/composables/useDataGrid.d.ts +69 -0
  85. package/dist/types/src/lib/composables/useEventBus.d.ts +16 -0
  86. package/dist/types/src/lib/composables/useGlobalState.d.ts +5 -0
  87. package/dist/types/src/lib/composables/useRequest.d.ts +42 -0
  88. package/dist/types/src/lib/configs/default-config.d.ts +6 -0
  89. package/dist/types/src/lib/core/config.d.ts +28 -0
  90. package/dist/types/src/lib/core/http.d.ts +100 -0
  91. package/dist/types/src/lib/core/linkage.d.ts +48 -0
  92. package/dist/types/src/lib/core/skins/apple.d.ts +3 -0
  93. package/dist/types/src/lib/core/skins/business.d.ts +3 -0
  94. package/dist/types/src/lib/core/skins/chinese.d.ts +3 -0
  95. package/dist/types/src/lib/core/skins/cool.d.ts +3 -0
  96. package/dist/types/src/lib/core/skins/cyberpunk.d.ts +3 -0
  97. package/dist/types/src/lib/core/skins/default.d.ts +3 -0
  98. package/dist/types/src/lib/core/skins/fashion.d.ts +3 -0
  99. package/dist/types/src/lib/core/skins/flat.d.ts +3 -0
  100. package/dist/types/src/lib/core/skins/governance.d.ts +3 -0
  101. package/dist/types/src/lib/core/skins/index.d.ts +15 -0
  102. package/dist/types/src/lib/core/skins/tech.d.ts +3 -0
  103. package/dist/types/src/lib/core/skins/types.d.ts +19 -0
  104. package/dist/types/src/lib/core/station-linkage.d.ts +72 -0
  105. package/dist/types/src/lib/core/theme.d.ts +11 -0
  106. package/dist/types/src/lib/core/utils.d.ts +28 -0
  107. package/dist/types/src/lib/install.d.ts +11 -0
  108. package/dist/types/src/types/config.d.ts +130 -0
  109. package/dist/types/src/types/index.d.ts +4 -0
  110. package/dist/types/vite.config.d.ts +7 -0
  111. package/package.json +7 -2
  112. package/dist/chunks/Path-C_oyo6Dg.mjs +0 -200
  113. package/dist/chunks/Path-C_oyo6Dg.mjs.map +0 -1
  114. package/dist/chunks/Station-DLV19USa.mjs +0 -780
  115. package/dist/chunks/Station-DLV19USa.mjs.map +0 -1
@@ -0,0 +1,245 @@
1
+ import { defineComponent as ce, getCurrentInstance as le, computed as g, ref as S, watch as y, onMounted as ue, onUnmounted as se, resolveComponent as E, openBlock as c, createElementBlock as P, createVNode as me, withCtx as h, createBlock as s, TransitionGroup as de, Fragment as z, renderList as G, normalizeClass as U, resolveDynamicComponent as Y, createCommentVNode as K, createTextVNode as Q, toDisplayString as X } from "vue";
2
+ import * as fe from "@element-plus/icons-vue";
3
+ import { f as pe } from "./props-DAytpx7D.mjs";
4
+ import { b as Z, g as he } from "./station-linkage-D54-_iyL.mjs";
5
+ import { _ as ve } from "./_plugin-vue_export-helper-CHgC5LLL.mjs";
6
+ const ge = ["data-animation"], ye = /* @__PURE__ */ ce({
7
+ name: "WdPath",
8
+ __name: "Path",
9
+ props: {
10
+ ...pe,
11
+ /** 模式:manual=手动填写路径 / auto=自动联动(Station 菜单链 + 页面标题) */
12
+ mode: { type: String, default: "manual" },
13
+ /** 手动模式路径节点(PathItem[],支持 JSON 字符串) */
14
+ items: { type: [Array, String], default: void 0 },
15
+ /** 自动模式:首页节点标题 */
16
+ home: { type: String, default: "首页" },
17
+ /** 自动模式:是否显示首页节点 */
18
+ showHome: { type: Boolean, default: !0 },
19
+ /** 分隔符 */
20
+ separator: { type: String, default: "/" },
21
+ /** 路径内容(路径段)变动时的动画:none=无 / fade=淡入淡出 / slide=横向滑移+淡入 */
22
+ animation: { type: String, default: "none" },
23
+ /** 标题扫描范围:CSS 选择器或元素;默认最近的 Station 内容区(.wd-station__content),无则整页 */
24
+ container: { type: [String, Object], default: void 0 }
25
+ },
26
+ emits: ["change", "item-click"],
27
+ setup(m, { expose: ee, emit: te }) {
28
+ const n = m, A = te, l = le(), I = g(() => {
29
+ var t, a;
30
+ const e = (a = (t = l == null ? void 0 : l.appContext) == null ? void 0 : t.config) == null ? void 0 : a.globalProperties;
31
+ return !!(e != null && e.$router);
32
+ });
33
+ function ne() {
34
+ if (!n.items) return [];
35
+ if (typeof n.items == "string")
36
+ try {
37
+ return JSON.parse(n.items);
38
+ } catch (e) {
39
+ return console.error("[WorkDesktop] WdPath items JSON 解析失败,已回退空路径:", e), [];
40
+ }
41
+ return n.items;
42
+ }
43
+ const C = S(null), N = S([]), _ = S([]), v = S(-1);
44
+ function B() {
45
+ var a;
46
+ const e = (a = l == null ? void 0 : l.proxy) == null ? void 0 : a.$el;
47
+ if (n.container) {
48
+ if (typeof n.container == "string") {
49
+ const r = document.querySelector(n.container);
50
+ if (r) return r;
51
+ } else if (n.container.nodeType === 1)
52
+ return n.container;
53
+ }
54
+ return (e == null ? void 0 : e.closest(".wd-station__content")) || document.body;
55
+ }
56
+ function oe() {
57
+ const e = C.value || document.body, t = [];
58
+ return e.querySelectorAll("h1,h2,h3,h4").forEach((a) => {
59
+ const r = (a.textContent || "").trim();
60
+ r && t.push({ el: a, level: Number(a.tagName.charAt(1)), title: r });
61
+ }), t;
62
+ }
63
+ function R(e) {
64
+ return e.map((t) => `${t.level}:${t.title}`).join("|");
65
+ }
66
+ function ae(e, t) {
67
+ const a = [];
68
+ for (let r = 0; r <= t; r++) {
69
+ const i = e[r];
70
+ for (; a.length && a[a.length - 1].level >= i.level; ) a.pop();
71
+ a.push(i);
72
+ }
73
+ return a.map((r) => ({ title: r.title, source: "heading", level: r.level }));
74
+ }
75
+ function T(e) {
76
+ return e === document.body || e === document.documentElement;
77
+ }
78
+ function H() {
79
+ const e = _.value;
80
+ if (!e.length) return -1;
81
+ const t = C.value || document.body, a = t.getBoundingClientRect(), r = T(t) ? window.scrollY || document.documentElement.scrollTop : t.scrollTop;
82
+ let i = e.length - 1;
83
+ for (let o = 0; o < e.length; o++)
84
+ if (e[o].el.getBoundingClientRect().top - a.top + r >= r - 1) {
85
+ i = o;
86
+ break;
87
+ }
88
+ return i;
89
+ }
90
+ function b() {
91
+ N.value = he(!0, n.filter).map((e) => ({
92
+ ...e,
93
+ source: "menu"
94
+ }));
95
+ }
96
+ function M() {
97
+ const e = oe();
98
+ R(e) !== R(_.value) && (_.value = e);
99
+ const t = H();
100
+ t !== v.value && (v.value = t);
101
+ }
102
+ function d() {
103
+ if (n.mode !== "auto") {
104
+ x();
105
+ return;
106
+ }
107
+ b(), M(), x();
108
+ }
109
+ const re = g(() => {
110
+ const e = _.value;
111
+ return e.length ? v.value >= 0 ? ae(e, v.value) : [] : [];
112
+ }), k = g(() => n.mode === "auto" ? [...n.showHome ? [{ title: n.home, source: "home" }] : [], ...N.value, ...re.value] : ne().map((e) => ({ ...e, source: e.source || "manual" }))), O = g(
113
+ () => k.value.map((e, t) => ({ ...e, key: `${e.source || "seg"}:${t}:${e.title}` }))
114
+ );
115
+ let W = "";
116
+ function x() {
117
+ const e = k.value.map((t) => `${t.level ?? ""}:${t.title}`).join("|");
118
+ e !== W && (W = e, A("change", k.value));
119
+ }
120
+ y(k, () => x());
121
+ let $ = !1;
122
+ function L() {
123
+ n.mode !== "auto" || $ || ($ = !0, requestAnimationFrame(() => {
124
+ $ = !1, n.mode === "auto" && (v.value = H());
125
+ }));
126
+ }
127
+ let f = null, p = null;
128
+ function V(e) {
129
+ j(), C.value = e, p = T(e) ? window : e, p.addEventListener("scroll", L, { passive: !0 }), typeof MutationObserver < "u" && (f = new MutationObserver((t) => {
130
+ if (n.mode !== "auto") return;
131
+ t.some((r) => {
132
+ const i = r.target;
133
+ return !(i && typeof i.closest == "function" && i.closest(".wd-path"));
134
+ }) && M();
135
+ }), f.observe(e, { childList: !0, subtree: !0 }));
136
+ }
137
+ function j() {
138
+ C.value = null, p == null || p.removeEventListener("scroll", L), p = null, f == null || f.disconnect(), f = null;
139
+ }
140
+ function q(e) {
141
+ A("item-click", e);
142
+ }
143
+ function w(e) {
144
+ return e ? typeof e == "string" ? fe[e] || null : e : null;
145
+ }
146
+ let u = null;
147
+ function D() {
148
+ n.mode === "auto" && (u = Z(n.filter, b), V(B()), d());
149
+ }
150
+ function F() {
151
+ j(), u == null || u(), u = null;
152
+ }
153
+ ue(() => {
154
+ D(), d();
155
+ }), y(
156
+ () => n.mode,
157
+ (e) => {
158
+ e === "auto" ? D() : (F(), d());
159
+ }
160
+ ), y(
161
+ () => n.filter,
162
+ () => {
163
+ n.mode === "auto" && (u == null || u(), u = Z(n.filter, b), b());
164
+ }
165
+ ), y(
166
+ () => n.container,
167
+ () => {
168
+ n.mode === "auto" && V(B()), d();
169
+ }
170
+ );
171
+ const ie = g(() => {
172
+ var e, t;
173
+ return (t = (e = l == null ? void 0 : l.proxy) == null ? void 0 : e.$route) == null ? void 0 : t.path;
174
+ });
175
+ return y(ie, () => {
176
+ n.mode === "auto" && d();
177
+ }), se(() => F()), ee({ refresh: d }), (e, t) => {
178
+ const a = E("el-icon"), r = E("el-breadcrumb-item"), i = E("el-breadcrumb");
179
+ return c(), P("div", {
180
+ class: "wd-path",
181
+ "data-animation": m.animation
182
+ }, [
183
+ me(i, { separator: m.separator }, {
184
+ default: h(() => [
185
+ m.animation !== "none" ? (c(), s(de, {
186
+ key: 0,
187
+ name: `wd-path-anim--${m.animation}`,
188
+ tag: "span",
189
+ class: "wd-path__anim",
190
+ "data-animation": m.animation
191
+ }, {
192
+ default: h(() => [
193
+ (c(!0), P(z, null, G(O.value, (o) => (c(), s(r, {
194
+ key: o.key,
195
+ class: U({ "is-heading": o.source === "heading", "is-active": o.source === "heading" || o.source === "home" }),
196
+ to: o.path && I.value ? { path: o.path } : void 0,
197
+ onClick: (J) => q(o)
198
+ }, {
199
+ default: h(() => [
200
+ w(o.icon) ? (c(), s(a, {
201
+ key: 0,
202
+ class: "wd-path__icon"
203
+ }, {
204
+ default: h(() => [
205
+ (c(), s(Y(w(o.icon))))
206
+ ]),
207
+ _: 2
208
+ }, 1024)) : K("", !0),
209
+ Q(" " + X(o.title), 1)
210
+ ]),
211
+ _: 2
212
+ }, 1032, ["class", "to", "onClick"]))), 128))
213
+ ]),
214
+ _: 1
215
+ }, 8, ["name", "data-animation"])) : (c(!0), P(z, { key: 1 }, G(O.value, (o) => (c(), s(r, {
216
+ key: o.key,
217
+ class: U({ "is-heading": o.source === "heading", "is-active": o.source === "heading" || o.source === "home" }),
218
+ to: o.path && I.value ? { path: o.path } : void 0,
219
+ onClick: (J) => q(o)
220
+ }, {
221
+ default: h(() => [
222
+ w(o.icon) ? (c(), s(a, {
223
+ key: 0,
224
+ class: "wd-path__icon"
225
+ }, {
226
+ default: h(() => [
227
+ (c(), s(Y(w(o.icon))))
228
+ ]),
229
+ _: 2
230
+ }, 1024)) : K("", !0),
231
+ Q(" " + X(o.title), 1)
232
+ ]),
233
+ _: 2
234
+ }, 1032, ["class", "to", "onClick"]))), 128))
235
+ ]),
236
+ _: 1
237
+ }, 8, ["separator"])
238
+ ], 8, ge);
239
+ };
240
+ }
241
+ }), Se = /* @__PURE__ */ ve(ye, [["__scopeId", "data-v-dd570e17"]]);
242
+ export {
243
+ Se as W
244
+ };
245
+ //# sourceMappingURL=Path-pIP0JQ0c.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Path-pIP0JQ0c.mjs","sources":["../../src/components/styles/Path.vue"],"sourcesContent":["<template>\n <div class=\"wd-path\" :data-animation=\"animation\">\n <el-breadcrumb :separator=\"separator\">\n <!-- 内容变动动画:fade/slide 时以 TransitionGroup 包裹路径段,段增删替换播放过渡 -->\n <TransitionGroup\n v-if=\"animation !== 'none'\"\n :name=\"`wd-path-anim--${animation}`\"\n tag=\"span\"\n class=\"wd-path__anim\"\n :data-animation=\"animation\"\n >\n <el-breadcrumb-item\n v-for=\"seg in segmentViews\"\n :key=\"seg.key\"\n :class=\"{ 'is-heading': seg.source === 'heading', 'is-active': seg.source === 'heading' || seg.source === 'home' }\"\n :to=\"seg.path && hasRouter ? { path: seg.path } : undefined\"\n @click=\"onSegmentClick(seg)\"\n >\n <el-icon v-if=\"resolveIcon(seg.icon)\" class=\"wd-path__icon\">\n <component :is=\"resolveIcon(seg.icon)\" />\n </el-icon>\n {{ seg.title }}\n </el-breadcrumb-item>\n </TransitionGroup>\n <template v-else>\n <el-breadcrumb-item\n v-for=\"seg in segmentViews\"\n :key=\"seg.key\"\n :class=\"{ 'is-heading': seg.source === 'heading', 'is-active': seg.source === 'heading' || seg.source === 'home' }\"\n :to=\"seg.path && hasRouter ? { path: seg.path } : undefined\"\n @click=\"onSegmentClick(seg)\"\n >\n <el-icon v-if=\"resolveIcon(seg.icon)\" class=\"wd-path__icon\">\n <component :is=\"resolveIcon(seg.icon)\" />\n </el-icon>\n {{ seg.title }}\n </el-breadcrumb-item>\n </template>\n </el-breadcrumb>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {\n computed,\n getCurrentInstance,\n onMounted,\n onUnmounted,\n ref,\n watch,\n type PropType\n} from 'vue'\nimport * as ElIcons from '@element-plus/icons-vue'\nimport { filterProp } from '../common/props'\nimport { getStationMenuChain, subscribeStationChange } from '../../lib/core/station-linkage'\nimport type { PathItem } from '../layout/types'\n\ndefineOptions({ name: 'WdPath' })\n\nconst props = defineProps({\n ...filterProp,\n /** 模式:manual=手动填写路径 / auto=自动联动(Station 菜单链 + 页面标题) */\n mode: { type: String as PropType<'manual' | 'auto'>, default: 'manual' },\n /** 手动模式路径节点(PathItem[],支持 JSON 字符串) */\n items: { type: [Array, String] as PropType<PathItem[] | string>, default: undefined },\n /** 自动模式:首页节点标题 */\n home: { type: String, default: '首页' },\n /** 自动模式:是否显示首页节点 */\n showHome: { type: Boolean, default: true },\n /** 分隔符 */\n separator: { type: String, default: '/' },\n /** 路径内容(路径段)变动时的动画:none=无 / fade=淡入淡出 / slide=横向滑移+淡入 */\n animation: { type: String as PropType<'none' | 'fade' | 'slide'>, default: 'none' },\n /** 标题扫描范围:CSS 选择器或元素;默认最近的 Station 内容区(.wd-station__content),无则整页 */\n container: { type: [String, Object] as PropType<string | HTMLElement>, default: undefined }\n})\n\nconst emit = defineEmits<{\n (e: 'change', segments: PathItem[]): void\n (e: 'item-click', item: PathItem): void\n}>()\n\nconst instance = getCurrentInstance()\nconst hasRouter = computed(() => {\n const root = instance?.appContext?.config?.globalProperties as any\n return !!(root?.$router)\n})\n\n/* ---------- 手动模式:路径解析 ---------- */\nfunction parseItems(): PathItem[] {\n if (!props.items) return []\n if (typeof props.items === 'string') {\n try {\n return JSON.parse(props.items)\n } catch (e) {\n console.error('[WorkDesktop] WdPath items JSON 解析失败,已回退空路径:', e)\n return []\n }\n }\n return props.items\n}\n\n/* ---------- 自动模式:标题扫描 ---------- */\ninterface HeadingNode {\n el: HTMLElement\n level: number\n title: string\n}\n\nconst containerEl = ref<HTMLElement | null>(null)\nconst menuChain = ref<PathItem[]>([])\nconst headings = ref<HeadingNode[]>([])\nconst activeIndex = ref(-1)\n\nfunction resolveContainer(): HTMLElement {\n const root = instance?.proxy?.$el as HTMLElement | undefined\n if (props.container) {\n if (typeof props.container === 'string') {\n const el = document.querySelector(props.container)\n if (el) return el as HTMLElement\n } else if ((props.container as HTMLElement).nodeType === 1) {\n return props.container as HTMLElement\n }\n }\n // 默认:最近的 Station 内容区;无则整页\n const content = root?.closest('.wd-station__content') as HTMLElement | null\n return content || document.body\n}\n\nfunction collectHeadings(): HeadingNode[] {\n const container = containerEl.value || document.body\n const nodes: HeadingNode[] = []\n container.querySelectorAll('h1,h2,h3,h4').forEach((el) => {\n const title = (el.textContent || '').trim()\n if (!title) return\n nodes.push({ el: el as HTMLElement, level: Number(el.tagName.charAt(1)), title })\n })\n return nodes\n}\n\n/** 标题结构签名:层级+标题有序列表,用于判断容器变化是否真的影响标题集合 */\nfunction headingsSignature(list: HeadingNode[]): string {\n return list.map((h) => `${h.level}:${h.title}`).join('|')\n}\n\n/** 大纲链:以 end 位置的标题为终点,逐级收敛(h1→h2→h3→h4) */\nfunction buildChain(list: HeadingNode[], end: number): PathItem[] {\n const stack: HeadingNode[] = []\n for (let i = 0; i <= end; i++) {\n const h = list[i]\n while (stack.length && stack[stack.length - 1].level >= h.level) stack.pop()\n stack.push(h)\n }\n return stack.map((h) => ({ title: h.title, source: 'heading', level: h.level } as PathItem))\n}\n\nfunction isPageContainer(el: HTMLElement): boolean {\n return el === document.body || el === document.documentElement\n}\n\n/** 当前可视范围内的第一个标题:容器滚动位置处最先映入视口/容器顶部的 H1~H4(滚动跟随) */\nfunction computeActiveIndex(): number {\n const list = headings.value\n if (!list.length) return -1\n const container = containerEl.value || document.body\n const cRect = container.getBoundingClientRect()\n const scrollTop = isPageContainer(container)\n ? window.scrollY || document.documentElement.scrollTop\n : container.scrollTop\n // 默认取最后一个(全部标题均已滚出顶部时,锚定末尾章节)\n let active = list.length - 1\n for (let i = 0; i < list.length; i++) {\n const hRect = list[i].el.getBoundingClientRect()\n const top = hRect.top - cRect.top + scrollTop\n // 容器滚动内容中,位置位于可视区起点(scrollTop)之下的第一个标题即当前章节\n if (top >= scrollTop - 1) { active = i; break }\n }\n return active\n}\n\n/* ---------- 自动模式:数据刷新 ---------- */\nfunction refreshMenuChain() {\n menuChain.value = getStationMenuChain(true, props.filter).map((c) => ({\n ...c,\n source: 'menu'\n }) as PathItem)\n}\n\nfunction refreshHeadings() {\n const next = collectHeadings()\n // 标题结构未变(仅非标题节点变动)时不重建列表,避免无意义的全链重算\n if (headingsSignature(next) !== headingsSignature(headings.value)) {\n headings.value = next\n }\n const idx = computeActiveIndex()\n if (idx !== activeIndex.value) activeIndex.value = idx\n}\n\n/** 完整刷新(手动模式仅触发 change 事件;自动模式重读菜单链与标题) */\nfunction refresh() {\n if (props.mode !== 'auto') {\n emitChange()\n return\n }\n refreshMenuChain()\n refreshHeadings()\n emitChange()\n}\n\n/* ---------- 段组装 ---------- */\nconst displayHeadings = computed<PathItem[]>(() => {\n const list = headings.value\n if (!list.length) return []\n return activeIndex.value >= 0 ? buildChain(list, activeIndex.value) : []\n})\n\nconst segments = computed<PathItem[]>(() => {\n if (props.mode === 'auto') {\n const head: PathItem[] = props.showHome ? [{ title: props.home, source: 'home' }] : []\n return [...head, ...menuChain.value, ...displayHeadings.value]\n }\n return parseItems().map((it) => ({ ...it, source: it.source || 'manual' }))\n})\n\nconst segmentViews = computed(() =>\n segments.value.map((s, i) => ({ ...s, key: `${s.source || 'seg'}:${i}:${s.title}` }))\n)\n\nlet lastSig = ''\nfunction emitChange() {\n const sig = segments.value.map((s) => `${s.level ?? ''}:${s.title}`).join('|')\n if (sig === lastSig) return\n lastSig = sig\n emit('change', segments.value)\n}\n\nwatch(segments, () => emitChange())\n\n/* ---------- 容器事件绑定(标题扫描 + 滚动跟随当前可视范围内第一个标题) ---------- */\nlet scrollTicking = false\nfunction onScroll() {\n if (props.mode !== 'auto' || scrollTicking) return\n scrollTicking = true\n requestAnimationFrame(() => {\n scrollTicking = false\n if (props.mode === 'auto') {\n activeIndex.value = computeActiveIndex()\n }\n })\n}\n\nlet observer: MutationObserver | null = null\nlet scrollTarget: HTMLElement | Window | null = null\nfunction bindContainer(el: HTMLElement) {\n unbindContainer()\n containerEl.value = el\n // 页面级容器(body/documentElement)滚动事件挂在 window;元素级挂在自身\n scrollTarget = isPageContainer(el) ? window : el\n scrollTarget.addEventListener('scroll', onScroll, { passive: true })\n if (typeof MutationObserver !== 'undefined') {\n observer = new MutationObserver((records) => {\n if (props.mode !== 'auto') return\n // 路径自身(TransitionGroup 动画导致的段节点增删)位于观察容器内部,\n // 忽略全部落在 .wd-path 子树内的变动,避免「动画改 DOM → 触发重扫 → 重渲染 → 再触发动画」的自激循环\n const fromContent = records.some((r) => {\n const target = r.target as HTMLElement | null\n return !(target && typeof target.closest === 'function' && target.closest('.wd-path'))\n })\n if (fromContent) refreshHeadings()\n })\n observer.observe(el, { childList: true, subtree: true })\n }\n}\n\nfunction unbindContainer() {\n containerEl.value = null\n scrollTarget?.removeEventListener('scroll', onScroll)\n scrollTarget = null\n observer?.disconnect()\n observer = null\n}\n\n/* ---------- 事件 ---------- */\nfunction onSegmentClick(seg: PathItem) {\n emit('item-click', seg)\n}\n\nfunction resolveIcon(icon: any) {\n if (!icon) return null\n if (typeof icon === 'string') return (ElIcons as any)[icon] || null\n return icon\n}\n\n/* ---------- 生命周期:自动模式联动(Station 菜单链 + 路由 + 标题) ---------- */\nlet unsub: (() => void) | null = null\nfunction bindAuto() {\n if (props.mode !== 'auto') return\n unsub = subscribeStationChange(props.filter, refreshMenuChain)\n bindContainer(resolveContainer())\n refresh()\n}\n\nfunction unbindAuto() {\n unbindContainer()\n unsub?.()\n unsub = null\n}\n\nonMounted(() => {\n bindAuto()\n refresh()\n})\n\nwatch(\n () => props.mode,\n (mode) => {\n if (mode === 'auto') {\n bindAuto()\n } else {\n unbindAuto()\n refresh()\n }\n }\n)\n\nwatch(\n () => props.filter,\n () => {\n if (props.mode !== 'auto') return\n unsub?.()\n unsub = subscribeStationChange(props.filter, refreshMenuChain)\n refreshMenuChain()\n }\n)\n\n// 容器变化(如 :container=\"ref\" 延迟就绪)→ 重绑并重扫\nwatch(\n () => props.container,\n () => {\n if (props.mode === 'auto') bindContainer(resolveContainer())\n refresh()\n }\n)\n\n// router 模式:路由变化 → 重读菜单链与标题\nconst routePath = computed(() => (instance?.proxy as any)?.$route?.path)\nwatch(routePath, () => {\n if (props.mode === 'auto') refresh()\n})\n\nonUnmounted(() => unbindAuto())\n\ndefineExpose({ refresh })\n</script>\n\n<style scoped>\n.wd-path {\n display: inline-flex;\n align-items: center;\n min-width: 0;\n}\n.wd-path :deep(.el-breadcrumb__item) {\n /* 不限制单个路径段宽度(长标题如“HTTP 请求(RequestAPI / request 单例 / useRequest)”\n 按内容自然撑开,不被截断);整体宽度由容器(如顶栏)约束 */\n overflow: hidden;\n white-space: nowrap;\n}\n.wd-path :deep(.el-breadcrumb__inner) {\n display: inline-flex;\n align-items: center;\n color: var(--wd-text-color-secondary, #909399);\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.wd-path :deep(.el-breadcrumb__inner.is-link) {\n color: var(--wd-color-primary, #409eff);\n font-weight: 400;\n}\n.wd-path :deep(.el-breadcrumb__inner.is-link:hover) {\n color: var(--wd-color-primary-light-3, #79bbff);\n}\n/* 首页与标题段:主色加粗,标识当前位置 */\n.wd-path :deep(.el-breadcrumb__item.is-active .el-breadcrumb__inner) {\n color: var(--wd-text-color-primary, #303133);\n font-weight: 600;\n}\n.wd-path__icon {\n margin-right: 4px;\n vertical-align: -2px;\n}\n\n/* —— 内容变动动画(TransitionGroup 过渡类作用于各路径段根节点) —— */\n.wd-path__anim {\n position: relative;\n display: inline-flex;\n align-items: center;\n}\n/* fade:纯淡入淡出 */\n.wd-path-anim--fade-enter-active,\n.wd-path-anim--fade-leave-active {\n transition: opacity 0.2s ease;\n}\n.wd-path-anim--fade-enter-from,\n.wd-path-anim--fade-leave-to {\n opacity: 0;\n}\n/* slide:新段自左滑入、旧段向右滑出,留存段 FLIP 位移 */\n.wd-path-anim--slide-enter-active,\n.wd-path-anim--slide-leave-active {\n transition: opacity 0.2s ease, transform 0.2s ease;\n}\n.wd-path-anim--slide-enter-from {\n opacity: 0;\n transform: translateX(-8px);\n}\n.wd-path-anim--slide-leave-to {\n opacity: 0;\n transform: translateX(8px);\n}\n.wd-path-anim--slide-leave-active {\n position: absolute;\n}\n.wd-path-anim--slide-move {\n transition: transform 0.2s ease;\n}\n</style>\n"],"names":["props","__props","emit","__emit","instance","getCurrentInstance","hasRouter","computed","root","_b","_a","parseItems","containerEl","ref","menuChain","headings","activeIndex","resolveContainer","el","collectHeadings","container","nodes","title","headingsSignature","list","h","buildChain","end","stack","i","isPageContainer","computeActiveIndex","cRect","scrollTop","active","refreshMenuChain","getStationMenuChain","c","refreshHeadings","next","idx","refresh","emitChange","displayHeadings","segments","it","segmentViews","s","lastSig","sig","watch","scrollTicking","onScroll","observer","scrollTarget","bindContainer","unbindContainer","records","target","onSegmentClick","seg","resolveIcon","icon","ElIcons","unsub","bindAuto","subscribeStationChange","unbindAuto","onMounted","mode","routePath","onUnmounted","__expose","_createElementBlock","_createVNode","_component_el_breadcrumb","_createBlock","_TransitionGroup","_Fragment","_renderList","_component_el_breadcrumb_item","_normalizeClass","$event","_component_el_icon","_openBlock","_resolveDynamicComponent","_toDisplayString"],"mappings":"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"}