vue-stack-tabs 1.0.1 → 1.3.0

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 (116) hide show
  1. package/README.en.md +526 -0
  2. package/README.md +337 -520
  3. package/README.ru.md +526 -0
  4. package/dist/iframe-bridge.d.ts +8 -0
  5. package/dist/iframe-bridge.html +77 -0
  6. package/dist/iframe-bridge.mjs +20 -0
  7. package/dist/iframe-child.html +88 -0
  8. package/dist/nuxt/favicon.svg +10 -0
  9. package/dist/nuxt/iframe-bridge.html +77 -0
  10. package/dist/nuxt/iframe-child.html +88 -0
  11. package/dist/nuxt/module.d.ts +6 -0
  12. package/dist/nuxt/module.mjs +28 -0
  13. package/dist/nuxt/plugin.mjs +9 -0
  14. package/dist/nuxt/runtime/plugin.d.ts +2 -0
  15. package/dist/nuxt/runtime/plugin.mjs +9 -0
  16. package/dist/src/lib/StackTabs.vue.d.ts +30 -16
  17. package/dist/src/lib/components/ContextMenu/ContextMenuItem.vue.d.ts +7 -1
  18. package/dist/src/lib/components/ContextMenu/index.vue.d.ts +5 -4
  19. package/dist/src/lib/components/PageLoading.vue.d.ts +2 -1
  20. package/dist/src/lib/components/StackKeepAlive/StackCacheRenderer.vue.d.ts +25 -0
  21. package/dist/src/lib/components/StackKeepAlive/StackKeepAlive.vue.d.ts +12 -0
  22. package/dist/src/lib/components/TabHeader/TabHeaderButton.vue.d.ts +11 -12
  23. package/dist/src/lib/components/TabHeader/TabHeaderItem.vue.d.ts +5 -4
  24. package/dist/src/lib/components/TabHeader/TabHeaderScroll.vue.d.ts +8 -22
  25. package/dist/src/lib/components/TabHeader/index.vue.d.ts +11 -164
  26. package/dist/src/lib/hooks/stackTabsContext.d.ts +49 -0
  27. package/dist/src/lib/hooks/tabPanel/evict.d.ts +21 -23
  28. package/dist/src/lib/hooks/tabPanel/navigationTransaction.d.ts +35 -0
  29. package/dist/src/lib/hooks/tabPanel/refresh.d.ts +17 -0
  30. package/dist/src/lib/hooks/tabPanel/scroll.d.ts +8 -8
  31. package/dist/src/lib/hooks/tabPanel/session.d.ts +9 -8
  32. package/dist/src/lib/hooks/tabPanel/state.d.ts +20 -73
  33. package/dist/src/lib/hooks/useIframeManager.d.ts +35 -0
  34. package/dist/src/lib/hooks/useTabActions.d.ts +5 -46
  35. package/dist/src/lib/hooks/useTabEventBus.d.ts +22 -9
  36. package/dist/src/lib/hooks/useTabPanel.d.ts +17 -74
  37. package/dist/src/lib/hooks/useTabRouter.d.ts +5 -5
  38. package/dist/src/lib/i18n/index.d.ts +6 -4
  39. package/dist/src/lib/i18n/lang/en.d.ts +5 -0
  40. package/dist/src/lib/i18n/lang/zh-CN.d.ts +5 -0
  41. package/dist/src/lib/i18n/stackTabsLocale.d.ts +2 -0
  42. package/dist/src/lib/iframe-bridge.d.ts +8 -0
  43. package/dist/src/lib/iframe.vue.d.ts +2 -1
  44. package/dist/src/lib/index.d.ts +4 -5
  45. package/dist/src/lib/model/TabModel.d.ts +14 -33
  46. package/dist/src/lib/nuxt/module.d.ts +6 -0
  47. package/dist/src/lib/nuxt/runtime/plugin.client.d.ts +2 -0
  48. package/dist/src/lib/nuxt/runtime/plugin.d.ts +2 -0
  49. package/dist/src/lib/utils/iframeBridge.d.ts +11 -3
  50. package/dist/src/lib/utils/stackTabsA11y.d.ts +8 -0
  51. package/dist/src/lib/utils/stackTabsMessage.d.ts +7 -0
  52. package/dist/src/lib/utils/tabInfoEncoder.d.ts +1 -16
  53. package/dist/src/lib/utils/typeGuards.d.ts +2 -0
  54. package/dist/src/lib/utils/urlParser.d.ts +24 -3
  55. package/dist/src/lib/versionLogger.d.ts +1 -0
  56. package/dist/style.css +2 -1
  57. package/dist/utils/iframeBridge.d.ts +39 -0
  58. package/dist/vue-stack-tabs.css +2 -1
  59. package/dist/vue-stack-tabs.es.js +1 -2411
  60. package/package.json +68 -47
  61. package/src/lib/StackTabs.vue +216 -192
  62. package/src/lib/assets/style/stackTab.scss +84 -12
  63. package/src/lib/components/ContextMenu/ContextMenuItem.vue +23 -11
  64. package/src/lib/components/ContextMenu/index.vue +94 -10
  65. package/src/lib/components/PageLoading.vue +9 -7
  66. package/src/lib/components/StackKeepAlive/StackCacheRenderer.vue +70 -0
  67. package/src/lib/components/StackKeepAlive/StackKeepAlive.vue +57 -0
  68. package/src/lib/components/TabHeader/TabHeaderButton.vue +19 -8
  69. package/src/lib/components/TabHeader/TabHeaderItem.vue +45 -16
  70. package/src/lib/components/TabHeader/TabHeaderScroll.vue +47 -25
  71. package/src/lib/components/TabHeader/index.vue +109 -12
  72. package/src/lib/hooks/stackTabsContext.ts +135 -0
  73. package/src/lib/hooks/tabPanel/evict.ts +123 -41
  74. package/src/lib/hooks/tabPanel/navigationTransaction.ts +61 -0
  75. package/src/lib/hooks/tabPanel/refresh.ts +109 -0
  76. package/src/lib/hooks/tabPanel/scroll.ts +57 -36
  77. package/src/lib/hooks/tabPanel/session.ts +84 -22
  78. package/src/lib/hooks/tabPanel/state.ts +41 -44
  79. package/src/lib/hooks/useIframeManager.ts +253 -0
  80. package/src/lib/hooks/useTabActions.ts +62 -30
  81. package/src/lib/hooks/useTabEventBus.ts +29 -19
  82. package/src/lib/hooks/useTabLoading.ts +3 -2
  83. package/src/lib/hooks/useTabPanel.tsx +415 -213
  84. package/src/lib/hooks/useTabRouter.ts +172 -43
  85. package/src/lib/i18n/index.ts +53 -45
  86. package/src/lib/i18n/lang/en.ts +6 -1
  87. package/src/lib/i18n/lang/zh-CN.ts +6 -1
  88. package/src/lib/i18n/stackTabsLocale.ts +8 -0
  89. package/src/lib/iframe-bridge.ts +12 -0
  90. package/src/lib/index.ts +14 -19
  91. package/src/lib/model/TabModel.ts +34 -86
  92. package/src/lib/nuxt/module.d.ts +4 -0
  93. package/src/lib/nuxt/module.ts +8 -3
  94. package/src/lib/nuxt/runtime/plugin.client.ts +2 -3
  95. package/src/lib/nuxt/runtime/plugin.ts +11 -0
  96. package/src/lib/utils/iframeBridge.ts +29 -5
  97. package/src/lib/utils/scrollUtils.ts +9 -4
  98. package/src/lib/utils/stackTabsA11y.ts +12 -0
  99. package/src/lib/utils/stackTabsMessage.ts +99 -0
  100. package/src/lib/utils/tabInfoEncoder.ts +69 -42
  101. package/src/lib/utils/typeGuards.ts +3 -0
  102. package/src/lib/utils/urlParser.ts +144 -14
  103. package/src/lib/versionLogger.ts +7 -19
  104. package/dist/src/lib/hooks/tabPanel/evict.spec.d.ts +0 -1
  105. package/dist/src/lib/hooks/useTabPanel.spec.d.ts +0 -1
  106. package/dist/src/lib/model/TabModel.spec.d.ts +0 -1
  107. package/dist/src/lib/utils/iframeBridge.spec.d.ts +0 -1
  108. package/dist/src/lib/utils/tabInfoEncoder.spec.d.ts +0 -1
  109. package/dist/src/lib/utils/urlParser.spec.d.ts +0 -1
  110. package/dist/vue-stack-tabs.umd.js +0 -1
  111. package/src/lib/hooks/tabPanel/evict.spec.ts +0 -85
  112. package/src/lib/hooks/useTabPanel.spec.ts +0 -34
  113. package/src/lib/model/TabModel.spec.ts +0 -40
  114. package/src/lib/utils/iframeBridge.spec.ts +0 -37
  115. package/src/lib/utils/tabInfoEncoder.spec.ts +0 -42
  116. package/src/lib/utils/urlParser.spec.ts +0 -45
@@ -1,2411 +1 @@
1
- import { inject as mt, ref as D, reactive as ne, toRaw as Ln, readonly as Ct, defineComponent as q, onUnmounted as Ee, openBlock as B, createElementBlock as V, normalizeStyle as Ze, unref as C, createElementVNode as W, createCommentVNode as ie, onMounted as gt, onDeactivated as Bn, onActivated as zn, createVNode as $, resolveComponent as cn, normalizeClass as de, withModifiers as Le, toDisplayString as yt, createBlock as se, Fragment as Ke, renderList as Tt, nextTick as ot, computed as oe, renderSlot as _e, watch as rt, withDirectives as it, vShow as at, withCtx as te, TransitionGroup as ln, mergeProps as Dn, Transition as ct, provide as Nn, onBeforeMount as Pn, onBeforeUnmount as $n, KeepAlive as Vn, resolveDynamicComponent as Wn, getCurrentInstance as un } from "vue";
2
- import { useRouter as wt, useRoute as Un } from "vue-router";
3
- const Fn = {
4
- VueStackTab: {
5
- close: "close",
6
- closeLeft: "close left",
7
- closeRight: "close right",
8
- closeOthers: "close others",
9
- closeAll: "close all",
10
- reload: "reload",
11
- reloadAll: "reload all",
12
- maximum: "maximum",
13
- restore: "restore",
14
- undefined: "undefined",
15
- loading: "loading",
16
- openInNewWindow: "Open in new window"
17
- }
18
- }, Hn = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
19
- __proto__: null,
20
- default: Fn
21
- }, Symbol.toStringTag, { value: "Module" })), Gn = {
22
- VueStackTab: {
23
- close: "关闭",
24
- closeLeft: "关闭左侧",
25
- closeRight: "关闭右侧",
26
- closeOthers: "关闭其他",
27
- closeAll: "关闭所有",
28
- reload: "刷新",
29
- reloadAll: "刷新所有",
30
- maximum: "最大化",
31
- restore: "还原",
32
- undefined: "未命名",
33
- loading: "加载中",
34
- openInNewWindow: "在新窗口打开"
35
- }
36
- }, qn = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
37
- __proto__: null,
38
- default: Gn
39
- }, Symbol.toStringTag, { value: "Module" }));
40
- const jn = ["__proto__", "prototype", "constructor"];
41
- function Zn(e) {
42
- const t = typeof e;
43
- return e !== null && (t === "object" || t === "function");
44
- }
45
- function Kn(e) {
46
- return !(Array.isArray(e) ? e.length : Object.keys(e).length);
47
- }
48
- function Xn(e) {
49
- return !e.some((t) => jn.indexOf(t) !== -1);
50
- }
51
- function Yn(e) {
52
- const t = e.split("."), n = [];
53
- for (let s = 0; s < t.length; s++) {
54
- let o = t[s];
55
- for (; o[o.length - 1] === "\\" && t[s + 1] !== void 0; )
56
- o = o.slice(0, -1) + ".", o += t[++s];
57
- n.push(o);
58
- }
59
- return Xn(n) ? n : [];
60
- }
61
- function Lt(e, t) {
62
- if (!Zn(e))
63
- return "";
64
- const n = Yn(t);
65
- if (n.length === 0)
66
- return "";
67
- let s = Object.assign({}, e);
68
- for (let o = 0; o < n.length; o++) {
69
- if (typeof s[n[o]] == "string")
70
- return s[n[o]];
71
- if (s = s[n[o]], s == null) {
72
- if (o !== n.length - 1)
73
- return "";
74
- break;
75
- }
76
- }
77
- return "";
78
- }
79
- function Jn(e, t) {
80
- if (Array.isArray(t)) {
81
- const n = {}, s = [...e.matchAll(/{(.+?)}/g)];
82
- return s && s.forEach((o, r) => {
83
- t[r] && (n[o[1]] = t[r]);
84
- }), n;
85
- }
86
- return t;
87
- }
88
- function Qn(e, t) {
89
- for (const n in t)
90
- e = e.replace(`{${n}}`, String(t[n]));
91
- return e;
92
- }
93
- function fn(e, t) {
94
- return Object.keys(t).forEach((n) => {
95
- t[n] instanceof Object && n in e && (t[n] = { ...t[n], ...fn(e[n], t[n]) });
96
- }), { ...e || {}, ...t };
97
- }
98
- const es = typeof Symbol == "function" && typeof Symbol.toStringTag == "symbol", ts = (e) => es ? Symbol(e) : "_vt_" + e, dn = /* @__PURE__ */ ts("i18n");
99
- function ze() {
100
- return mt(dn);
101
- }
102
- function ns(e) {
103
- const t = Object.assign({ locale: "en", fallbackLocale: "en", messages: {} }, e), n = D(t.locale), s = ne({});
104
- return Object.entries(t.messages).forEach(([o, r]) => {
105
- s[o] = r;
106
- }), {
107
- t(o, r) {
108
- if (!o)
109
- return "";
110
- const i = typeof r == "string" && r ? r : n.value;
111
- let l = Lt(s[i], o) || Lt(s[t.fallbackLocale], o);
112
- if (r && typeof r != "string") {
113
- const a = Jn(l, r);
114
- Kn(a) || (l = Qn(l, a));
115
- }
116
- return l || o;
117
- },
118
- current: Ct(n),
119
- options: Ct(e || {}),
120
- install(o) {
121
- const r = this;
122
- o.config.globalProperties.$t = r.t, o.provide(dn, r);
123
- },
124
- changeLocale(o) {
125
- n.value = o;
126
- },
127
- setLocaleMessage(o, r) {
128
- s[o] = fn(Ln(s[o] || {}), r);
129
- },
130
- getLocaleMessage(o) {
131
- return s[o] || {};
132
- }
133
- };
134
- }
135
- const ss = () => {
136
- const e = /* @__PURE__ */ Object.assign({ "./lang/en.ts": Hn, "./lang/zh-CN.ts": qn });
137
- function t(o, r) {
138
- for (const i in o) {
139
- const l = o[i];
140
- if (l?.default) {
141
- const a = i.substring(i.lastIndexOf("/") + 1, i.lastIndexOf(".")), c = r[a];
142
- r[a] = c ? { ...c, ...l.default } : l.default;
143
- }
144
- }
145
- }
146
- const n = () => {
147
- const o = {};
148
- return t(e, o), o;
149
- };
150
- return {
151
- getI18n: (o) => {
152
- const r = { ...n() };
153
- if (o)
154
- for (const i of o)
155
- r[i.locale] = i.messages;
156
- return ns({
157
- locale: "zh-CN",
158
- fallbackLocale: "en",
159
- messages: r
160
- });
161
- }
162
- };
163
- }, hn = ({
164
- wrap: e,
165
- left: t = 0,
166
- top: n = 0,
167
- smooth: s = !0
168
- }) => {
169
- e && (e.scrollTo ? e.scrollTo({
170
- left: t,
171
- top: n,
172
- behavior: s ? "smooth" : "auto"
173
- }) : (e.scrollLeft = t, e.scrollTop = n));
174
- };
175
- function os({
176
- el: e,
177
- wrap: t,
178
- block: n = "start",
179
- inline: s = "nearest"
180
- }) {
181
- const o = t && typeof t == "object" && "value" in t ? t.value : t;
182
- if (!(!e || !o))
183
- if (e.scrollIntoView)
184
- e.scrollIntoView({ behavior: "smooth", block: n, inline: s });
185
- else {
186
- const { offsetLeft: r, offsetTop: i } = e;
187
- let l, a;
188
- n === "center" ? a = i + (e.clientHeight - o.clientHeight) / 2 : a = i, s === "center" ? l = r + (e.clientWidth - o.clientWidth) / 2 : l = r, hn({ wrap: o, left: l, top: a });
189
- }
190
- }
191
- const xt = (e = ".stack-tab__container *") => {
192
- const t = Array.from(document.querySelectorAll(e)).map(
193
- (n) => +window.getComputedStyle(n).zIndex || 0
194
- );
195
- return t.length ? Math.max(...t.filter((n) => n < 9e4)) + 1 : 1;
196
- };
197
- function Bt(e) {
198
- return !!(e && /^(javascript|data):/i.test(e));
199
- }
200
- function pn(e) {
201
- if (!e || !/^https?:\/\//i.test(e)) return !1;
202
- try {
203
- const t = typeof window < "u" ? window.location : { origin: "http://localhost" };
204
- return new URL(e, t.origin).origin !== t.origin;
205
- } catch {
206
- return !0;
207
- }
208
- }
209
- function _t(e) {
210
- const [t, n] = e.split("?");
211
- if (!n)
212
- return { path: t ?? "", query: {} };
213
- const s = {};
214
- for (const o of n.split("&")) {
215
- const [r, i] = o.split("=");
216
- r != null && i != null && i !== "" && (s[r] = i);
217
- }
218
- return { path: t ?? "", query: s };
219
- }
220
- var be = /* @__PURE__ */ ((e) => (e.WHEEL = "wheel", e.BUTTON = "button", e.BOTH = "both", e))(be || {});
221
- class lt {
222
- items;
223
- constructor(t) {
224
- if (this.items = /* @__PURE__ */ new Map(), t)
225
- for (const n of t)
226
- this.push(n);
227
- }
228
- /**
229
- * @description: 入栈
230
- * @param {T} element 要入栈的元素
231
- */
232
- push(t) {
233
- this.items.set(this.items.size, t);
234
- }
235
- /**
236
- * @description: 出栈
237
- * @return {T} 返回出栈的元素
238
- */
239
- pop() {
240
- if (this.isEmpty())
241
- return;
242
- const t = this.items.get(this.items.size - 1);
243
- return this.items.delete(this.items.size - 1), t;
244
- }
245
- /**
246
- * @description: 返回栈顶的元素
247
- * @return {T}
248
- */
249
- peek() {
250
- if (!this.isEmpty())
251
- return this.items.get(this.items.size - 1);
252
- }
253
- /**
254
- * @description: 返回栈是否为空
255
- * @return {Boolean}
256
- */
257
- isEmpty() {
258
- return this.items.size === 0;
259
- }
260
- /**
261
- * @description: 返回栈里的元素个数
262
- * @return {Number}
263
- */
264
- size() {
265
- return this.items.size;
266
- }
267
- /**
268
- * @description: 清空栈
269
- */
270
- clear() {
271
- this.items.clear();
272
- }
273
- list() {
274
- return Array.from(this.items.values());
275
- }
276
- /**
277
- * @description: 覆盖Object默认的toString
278
- * @return {String}
279
- */
280
- toString() {
281
- if (this.isEmpty())
282
- return "";
283
- let t = "";
284
- return this.items.forEach((n, s) => {
285
- t = `${t}${s === 0 ? "" : ", "}${n}`;
286
- }), t;
287
- }
288
- toJSON() {
289
- return Array.from(this.items.values());
290
- }
291
- }
292
- function rs(e, t, n) {
293
- var s = {}, o = s.noTrailing, r = o === void 0 ? !1 : o, i = s.noLeading, l = i === void 0 ? !1 : i, a = s.debounceMode, c = a === void 0 ? void 0 : a, b, d = !1, p = 0;
294
- function O() {
295
- b && clearTimeout(b);
296
- }
297
- function A(S) {
298
- var m = S || {}, _ = m.upcomingOnly, k = _ === void 0 ? !1 : _;
299
- O(), d = !k;
300
- }
301
- function I() {
302
- for (var S = arguments.length, m = new Array(S), _ = 0; _ < S; _++)
303
- m[_] = arguments[_];
304
- var k = this, h = Date.now() - p;
305
- if (d)
306
- return;
307
- function w() {
308
- p = Date.now(), t.apply(k, m);
309
- }
310
- function u() {
311
- b = void 0;
312
- }
313
- !l && c && !b && w(), O(), c === void 0 && h > e ? l ? (p = Date.now(), r || (b = setTimeout(c ? u : w, e))) : w() : r !== !0 && (b = setTimeout(c ? u : w, c === void 0 ? e - h : e));
314
- }
315
- return I.cancel = A, I;
316
- }
317
- function Qe(e) {
318
- if (e === null || typeof e != "object")
319
- return !1;
320
- const t = Object.getPrototypeOf(e);
321
- return t !== null && t !== Object.prototype && Object.getPrototypeOf(t) !== null || Symbol.iterator in e ? !1 : Symbol.toStringTag in e ? Object.prototype.toString.call(e) === "[object Module]" : !0;
322
- }
323
- function ut(e, t, n = ".", s) {
324
- if (!Qe(t))
325
- return ut(e, {}, n, s);
326
- const o = Object.assign({}, t);
327
- for (const r in e) {
328
- if (r === "__proto__" || r === "constructor")
329
- continue;
330
- const i = e[r];
331
- i != null && (s && s(o, r, i, n) || (Array.isArray(i) && Array.isArray(o[r]) ? o[r] = [...i, ...o[r]] : Qe(i) && Qe(o[r]) ? o[r] = ut(
332
- i,
333
- o[r],
334
- (n ? `${n}.` : "") + r.toString(),
335
- s
336
- ) : o[r] = i));
337
- }
338
- return o;
339
- }
340
- function is(e) {
341
- return (...t) => (
342
- // eslint-disable-next-line unicorn/no-array-reduce
343
- t.reduce((n, s) => ut(n, s, "", e), {})
344
- );
345
- }
346
- const re = is(), bn = "0123456789ABCDEFGHJKMNPQRSTVWXYZ", Ge = 32, as = 16, vn = 10, zt = 281474976710655;
347
- var ve;
348
- (function(e) {
349
- e.Base32IncorrectEncoding = "B32_ENC_INVALID", e.DecodeTimeInvalidCharacter = "DEC_TIME_CHAR", e.DecodeTimeValueMalformed = "DEC_TIME_MALFORMED", e.EncodeTimeNegative = "ENC_TIME_NEG", e.EncodeTimeSizeExceeded = "ENC_TIME_SIZE_EXCEED", e.EncodeTimeValueMalformed = "ENC_TIME_MALFORMED", e.PRNGDetectFailure = "PRNG_DETECT", e.ULIDInvalid = "ULID_INVALID", e.Unexpected = "UNEXPECTED", e.UUIDInvalid = "UUID_INVALID";
350
- })(ve || (ve = {}));
351
- class Ie extends Error {
352
- constructor(t, n) {
353
- super(`${n} (${t})`), this.name = "ULIDError", this.code = t;
354
- }
355
- }
356
- function cs(e) {
357
- const t = Math.floor(e() * Ge) % Ge;
358
- return bn.charAt(t);
359
- }
360
- function ls(e) {
361
- const t = us(), n = t && (t.crypto || t.msCrypto) || null;
362
- if (typeof n?.getRandomValues == "function")
363
- return () => {
364
- const s = new Uint8Array(1);
365
- return n.getRandomValues(s), s[0] / 256;
366
- };
367
- if (typeof n?.randomBytes == "function")
368
- return () => n.randomBytes(1).readUInt8() / 256;
369
- throw new Ie(ve.PRNGDetectFailure, "Failed to find a reliable PRNG");
370
- }
371
- function us() {
372
- return hs() ? self : typeof window < "u" ? window : typeof global < "u" ? global : typeof globalThis < "u" ? globalThis : null;
373
- }
374
- function fs(e, t) {
375
- let n = "";
376
- for (; e > 0; e--)
377
- n = cs(t) + n;
378
- return n;
379
- }
380
- function ds(e, t = vn) {
381
- if (isNaN(e))
382
- throw new Ie(ve.EncodeTimeValueMalformed, `Time must be a number: ${e}`);
383
- if (e > zt)
384
- throw new Ie(ve.EncodeTimeSizeExceeded, `Cannot encode a time larger than ${zt}: ${e}`);
385
- if (e < 0)
386
- throw new Ie(ve.EncodeTimeNegative, `Time must be positive: ${e}`);
387
- if (Number.isInteger(e) === !1)
388
- throw new Ie(ve.EncodeTimeValueMalformed, `Time must be an integer: ${e}`);
389
- let n, s = "";
390
- for (let o = t; o > 0; o--)
391
- n = e % Ge, s = bn.charAt(n) + s, e = (e - n) / Ge;
392
- return s;
393
- }
394
- function hs() {
395
- return typeof WorkerGlobalScope < "u" && self instanceof WorkerGlobalScope;
396
- }
397
- function We(e, t) {
398
- const n = ls(), s = Date.now();
399
- return ds(s, vn) + fs(as, n);
400
- }
401
- var et = { exports: {} }, Dt;
402
- function ps() {
403
- return Dt || (Dt = 1, (function(e) {
404
- var t = (function() {
405
- var n = String.fromCharCode, s = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", o = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$", r = {};
406
- function i(a, c) {
407
- if (!r[a]) {
408
- r[a] = {};
409
- for (var b = 0; b < a.length; b++)
410
- r[a][a.charAt(b)] = b;
411
- }
412
- return r[a][c];
413
- }
414
- var l = {
415
- compressToBase64: function(a) {
416
- if (a == null) return "";
417
- var c = l._compress(a, 6, function(b) {
418
- return s.charAt(b);
419
- });
420
- switch (c.length % 4) {
421
- // To produce valid Base64
422
- default:
423
- // When could this happen ?
424
- case 0:
425
- return c;
426
- case 1:
427
- return c + "===";
428
- case 2:
429
- return c + "==";
430
- case 3:
431
- return c + "=";
432
- }
433
- },
434
- decompressFromBase64: function(a) {
435
- return a == null ? "" : a == "" ? null : l._decompress(a.length, 32, function(c) {
436
- return i(s, a.charAt(c));
437
- });
438
- },
439
- compressToUTF16: function(a) {
440
- return a == null ? "" : l._compress(a, 15, function(c) {
441
- return n(c + 32);
442
- }) + " ";
443
- },
444
- decompressFromUTF16: function(a) {
445
- return a == null ? "" : a == "" ? null : l._decompress(a.length, 16384, function(c) {
446
- return a.charCodeAt(c) - 32;
447
- });
448
- },
449
- //compress into uint8array (UCS-2 big endian format)
450
- compressToUint8Array: function(a) {
451
- for (var c = l.compress(a), b = new Uint8Array(c.length * 2), d = 0, p = c.length; d < p; d++) {
452
- var O = c.charCodeAt(d);
453
- b[d * 2] = O >>> 8, b[d * 2 + 1] = O % 256;
454
- }
455
- return b;
456
- },
457
- //decompress from uint8array (UCS-2 big endian format)
458
- decompressFromUint8Array: function(a) {
459
- if (a == null)
460
- return l.decompress(a);
461
- for (var c = new Array(a.length / 2), b = 0, d = c.length; b < d; b++)
462
- c[b] = a[b * 2] * 256 + a[b * 2 + 1];
463
- var p = [];
464
- return c.forEach(function(O) {
465
- p.push(n(O));
466
- }), l.decompress(p.join(""));
467
- },
468
- //compress into a string that is already URI encoded
469
- compressToEncodedURIComponent: function(a) {
470
- return a == null ? "" : l._compress(a, 6, function(c) {
471
- return o.charAt(c);
472
- });
473
- },
474
- //decompress from an output of compressToEncodedURIComponent
475
- decompressFromEncodedURIComponent: function(a) {
476
- return a == null ? "" : a == "" ? null : (a = a.replace(/ /g, "+"), l._decompress(a.length, 32, function(c) {
477
- return i(o, a.charAt(c));
478
- }));
479
- },
480
- compress: function(a) {
481
- return l._compress(a, 16, function(c) {
482
- return n(c);
483
- });
484
- },
485
- _compress: function(a, c, b) {
486
- if (a == null) return "";
487
- var d, p, O = {}, A = {}, I = "", S = "", m = "", _ = 2, k = 3, h = 2, w = [], u = 0, T = 0, v;
488
- for (v = 0; v < a.length; v += 1)
489
- if (I = a.charAt(v), Object.prototype.hasOwnProperty.call(O, I) || (O[I] = k++, A[I] = !0), S = m + I, Object.prototype.hasOwnProperty.call(O, S))
490
- m = S;
491
- else {
492
- if (Object.prototype.hasOwnProperty.call(A, m)) {
493
- if (m.charCodeAt(0) < 256) {
494
- for (d = 0; d < h; d++)
495
- u = u << 1, T == c - 1 ? (T = 0, w.push(b(u)), u = 0) : T++;
496
- for (p = m.charCodeAt(0), d = 0; d < 8; d++)
497
- u = u << 1 | p & 1, T == c - 1 ? (T = 0, w.push(b(u)), u = 0) : T++, p = p >> 1;
498
- } else {
499
- for (p = 1, d = 0; d < h; d++)
500
- u = u << 1 | p, T == c - 1 ? (T = 0, w.push(b(u)), u = 0) : T++, p = 0;
501
- for (p = m.charCodeAt(0), d = 0; d < 16; d++)
502
- u = u << 1 | p & 1, T == c - 1 ? (T = 0, w.push(b(u)), u = 0) : T++, p = p >> 1;
503
- }
504
- _--, _ == 0 && (_ = Math.pow(2, h), h++), delete A[m];
505
- } else
506
- for (p = O[m], d = 0; d < h; d++)
507
- u = u << 1 | p & 1, T == c - 1 ? (T = 0, w.push(b(u)), u = 0) : T++, p = p >> 1;
508
- _--, _ == 0 && (_ = Math.pow(2, h), h++), O[S] = k++, m = String(I);
509
- }
510
- if (m !== "") {
511
- if (Object.prototype.hasOwnProperty.call(A, m)) {
512
- if (m.charCodeAt(0) < 256) {
513
- for (d = 0; d < h; d++)
514
- u = u << 1, T == c - 1 ? (T = 0, w.push(b(u)), u = 0) : T++;
515
- for (p = m.charCodeAt(0), d = 0; d < 8; d++)
516
- u = u << 1 | p & 1, T == c - 1 ? (T = 0, w.push(b(u)), u = 0) : T++, p = p >> 1;
517
- } else {
518
- for (p = 1, d = 0; d < h; d++)
519
- u = u << 1 | p, T == c - 1 ? (T = 0, w.push(b(u)), u = 0) : T++, p = 0;
520
- for (p = m.charCodeAt(0), d = 0; d < 16; d++)
521
- u = u << 1 | p & 1, T == c - 1 ? (T = 0, w.push(b(u)), u = 0) : T++, p = p >> 1;
522
- }
523
- _--, _ == 0 && (_ = Math.pow(2, h), h++), delete A[m];
524
- } else
525
- for (p = O[m], d = 0; d < h; d++)
526
- u = u << 1 | p & 1, T == c - 1 ? (T = 0, w.push(b(u)), u = 0) : T++, p = p >> 1;
527
- _--, _ == 0 && (_ = Math.pow(2, h), h++);
528
- }
529
- for (p = 2, d = 0; d < h; d++)
530
- u = u << 1 | p & 1, T == c - 1 ? (T = 0, w.push(b(u)), u = 0) : T++, p = p >> 1;
531
- for (; ; )
532
- if (u = u << 1, T == c - 1) {
533
- w.push(b(u));
534
- break;
535
- } else T++;
536
- return w.join("");
537
- },
538
- decompress: function(a) {
539
- return a == null ? "" : a == "" ? null : l._decompress(a.length, 32768, function(c) {
540
- return a.charCodeAt(c);
541
- });
542
- },
543
- _decompress: function(a, c, b) {
544
- var d = [], p = 4, O = 4, A = 3, I = "", S = [], m, _, k, h, w, u, T, v = { val: b(0), position: c, index: 1 };
545
- for (m = 0; m < 3; m += 1)
546
- d[m] = m;
547
- for (k = 0, w = Math.pow(2, 2), u = 1; u != w; )
548
- h = v.val & v.position, v.position >>= 1, v.position == 0 && (v.position = c, v.val = b(v.index++)), k |= (h > 0 ? 1 : 0) * u, u <<= 1;
549
- switch (k) {
550
- case 0:
551
- for (k = 0, w = Math.pow(2, 8), u = 1; u != w; )
552
- h = v.val & v.position, v.position >>= 1, v.position == 0 && (v.position = c, v.val = b(v.index++)), k |= (h > 0 ? 1 : 0) * u, u <<= 1;
553
- T = n(k);
554
- break;
555
- case 1:
556
- for (k = 0, w = Math.pow(2, 16), u = 1; u != w; )
557
- h = v.val & v.position, v.position >>= 1, v.position == 0 && (v.position = c, v.val = b(v.index++)), k |= (h > 0 ? 1 : 0) * u, u <<= 1;
558
- T = n(k);
559
- break;
560
- case 2:
561
- return "";
562
- }
563
- for (d[3] = T, _ = T, S.push(T); ; ) {
564
- if (v.index > a)
565
- return "";
566
- for (k = 0, w = Math.pow(2, A), u = 1; u != w; )
567
- h = v.val & v.position, v.position >>= 1, v.position == 0 && (v.position = c, v.val = b(v.index++)), k |= (h > 0 ? 1 : 0) * u, u <<= 1;
568
- switch (T = k) {
569
- case 0:
570
- for (k = 0, w = Math.pow(2, 8), u = 1; u != w; )
571
- h = v.val & v.position, v.position >>= 1, v.position == 0 && (v.position = c, v.val = b(v.index++)), k |= (h > 0 ? 1 : 0) * u, u <<= 1;
572
- d[O++] = n(k), T = O - 1, p--;
573
- break;
574
- case 1:
575
- for (k = 0, w = Math.pow(2, 16), u = 1; u != w; )
576
- h = v.val & v.position, v.position >>= 1, v.position == 0 && (v.position = c, v.val = b(v.index++)), k |= (h > 0 ? 1 : 0) * u, u <<= 1;
577
- d[O++] = n(k), T = O - 1, p--;
578
- break;
579
- case 2:
580
- return S.join("");
581
- }
582
- if (p == 0 && (p = Math.pow(2, A), A++), d[T])
583
- I = d[T];
584
- else if (T === O)
585
- I = _ + _.charAt(0);
586
- else
587
- return null;
588
- S.push(I), d[O++] = _ + I.charAt(0), p--, _ = I, p == 0 && (p = Math.pow(2, A), A++);
589
- }
590
- }
591
- };
592
- return l;
593
- })();
594
- e != null ? e.exports = t : typeof angular < "u" && angular != null && angular.module("LZString", []).factory("LZString", function() {
595
- return t;
596
- });
597
- })(et)), et.exports;
598
- }
599
- var mn = ps();
600
- const bs = new TextEncoder(), vs = new TextDecoder("utf-8", { ignoreBOM: !0 }), Nt = {
601
- /* API */
602
- encode: (e) => bs.encode(e),
603
- decode: (e) => vs.decode(e)
604
- }, gn = (() => {
605
- const t = [..."0123456789abcdef"], n = new Array(256);
606
- for (let s = 0; s < 256; s++)
607
- n[s] = `${t[s >>> 4 & 15]}${t[s & 15]}`;
608
- return n;
609
- })(), ms = (() => {
610
- const e = {};
611
- for (let t = 0; t < 256; t++) {
612
- const n = gn[t], s = n[0], o = s.toUpperCase(), r = n[1], i = r.toUpperCase();
613
- e[n] = t, e[`${s}${i}`] = t, e[`${o}${r}`] = t, e[`${o}${i}`] = t;
614
- }
615
- return e;
616
- })(), gs = (e) => !(e.length % 2 || !/^[a-fA-F0-9]*$/.test(e)), ft = {
617
- /* API */
618
- encode: (e) => {
619
- let t = "";
620
- for (let n = 0, s = e.length; n < s; n++)
621
- t += gn[e[n]];
622
- return t;
623
- },
624
- encodeStr: (e) => ft.encode(Nt.encode(e)),
625
- decode: (e) => {
626
- const t = e.length / 2, n = new Uint8Array(t);
627
- for (let s = 0; s < t; s++)
628
- n[s] = ms[e.slice(s * 2, s * 2 + 2)];
629
- return n;
630
- },
631
- decodeStr: (e) => Nt.decode(ft.decode(e)),
632
- is: gs
633
- };
634
- function ys(e) {
635
- return e instanceof Uint8Array || ArrayBuffer.isView(e) && e.constructor.name === "Uint8Array";
636
- }
637
- function dt(e, t = "") {
638
- if (!Number.isSafeInteger(e) || e < 0) {
639
- const n = t && `"${t}" `;
640
- throw new Error(`${n}expected integer >= 0, got ${e}`);
641
- }
642
- }
643
- function Re(e, t, n = "") {
644
- const s = ys(e), o = e?.length, r = t !== void 0;
645
- if (!s || r && o !== t) {
646
- const i = n && `"${n}" `, l = r ? ` of length ${t}` : "", a = s ? `length=${o}` : `type=${typeof e}`;
647
- throw new Error(i + "expected Uint8Array" + l + ", got " + a);
648
- }
649
- return e;
650
- }
651
- function ht(e, t = !0) {
652
- if (e.destroyed)
653
- throw new Error("Hash instance has been destroyed");
654
- if (t && e.finished)
655
- throw new Error("Hash#digest() has already been called");
656
- }
657
- function yn(e, t) {
658
- Re(e, void 0, "digestInto() output");
659
- const n = t.outputLen;
660
- if (e.length < n)
661
- throw new Error('"digestInto() output" expected to be of length >=' + n);
662
- }
663
- function Ts(e) {
664
- return new Uint8Array(e.buffer, e.byteOffset, e.byteLength);
665
- }
666
- function qe(e) {
667
- return new Uint32Array(e.buffer, e.byteOffset, Math.floor(e.byteLength / 4));
668
- }
669
- function Ue(...e) {
670
- for (let t = 0; t < e.length; t++)
671
- e[t].fill(0);
672
- }
673
- function je(e, t) {
674
- return e << 32 - t | e >>> t;
675
- }
676
- const Tn = new Uint8Array(new Uint32Array([287454020]).buffer)[0] === 68;
677
- function wn(e) {
678
- return e << 24 & 4278190080 | e << 8 & 16711680 | e >>> 8 & 65280 | e >>> 24 & 255;
679
- }
680
- const ws = Tn ? (e) => e : (e) => wn(e);
681
- function xs(e) {
682
- for (let t = 0; t < e.length; t++)
683
- e[t] = wn(e[t]);
684
- return e;
685
- }
686
- const U = Tn ? (e) => e : xs;
687
- function _s(e, t = {}) {
688
- const n = (o, r) => e(r).update(o).digest(), s = e(void 0);
689
- return n.outputLen = s.outputLen, n.blockLen = s.blockLen, n.create = (o) => e(o), Object.assign(n, t), Object.freeze(n);
690
- }
691
- const ks = /* @__PURE__ */ Uint32Array.from([
692
- 1779033703,
693
- 3144134277,
694
- 1013904242,
695
- 2773480762,
696
- 1359893119,
697
- 2600822924,
698
- 528734635,
699
- 1541459225
700
- ]), Ne = /* @__PURE__ */ BigInt(2 ** 32 - 1), Pt = /* @__PURE__ */ BigInt(32);
701
- function $t(e, t = !1) {
702
- return t ? { h: Number(e & Ne), l: Number(e >> Pt & Ne) } : { h: Number(e >> Pt & Ne) | 0, l: Number(e & Ne) | 0 };
703
- }
704
- function ce(e, t, n, s, o) {
705
- return e = e + t + o | 0, s = je(s ^ e, 16), n = n + s | 0, t = je(t ^ n, 12), { a: e, b: t, c: n, d: s };
706
- }
707
- function le(e, t, n, s, o) {
708
- return e = e + t + o | 0, s = je(s ^ e, 8), n = n + s | 0, t = je(t ^ n, 7), { a: e, b: t, c: n, d: s };
709
- }
710
- class Es {
711
- buffer;
712
- buffer32;
713
- finished = !1;
714
- destroyed = !1;
715
- length = 0;
716
- pos = 0;
717
- blockLen;
718
- outputLen;
719
- constructor(t, n) {
720
- dt(t), dt(n), this.blockLen = t, this.outputLen = n, this.buffer = new Uint8Array(t), this.buffer32 = qe(this.buffer);
721
- }
722
- update(t) {
723
- ht(this), Re(t);
724
- const { blockLen: n, buffer: s, buffer32: o } = this, r = t.length, i = t.byteOffset, l = t.buffer;
725
- for (let a = 0; a < r; ) {
726
- this.pos === n && (U(o), this.compress(o, 0, !1), U(o), this.pos = 0);
727
- const c = Math.min(n - this.pos, r - a), b = i + a;
728
- if (c === n && !(b % 4) && a + c < r) {
729
- const d = new Uint32Array(l, b, Math.floor((r - a) / 4));
730
- U(d);
731
- for (let p = 0; a + n < r; p += o.length, a += n)
732
- this.length += n, this.compress(d, p, !1);
733
- U(d);
734
- continue;
735
- }
736
- s.set(t.subarray(a, a + c), this.pos), this.pos += c, this.length += c, a += c;
737
- }
738
- return this;
739
- }
740
- digestInto(t) {
741
- ht(this), yn(t, this);
742
- const { pos: n, buffer32: s } = this;
743
- this.finished = !0, Ue(this.buffer.subarray(n)), U(s), this.compress(s, 0, !0), U(s);
744
- const o = qe(t);
745
- this.get().forEach((r, i) => o[i] = ws(r));
746
- }
747
- digest() {
748
- const { buffer: t, outputLen: n } = this;
749
- this.digestInto(t);
750
- const s = t.slice(0, n);
751
- return this.destroy(), s;
752
- }
753
- _cloneInto(t) {
754
- const { buffer: n, length: s, finished: o, destroyed: r, outputLen: i, pos: l } = this;
755
- return t ||= new this.constructor({ dkLen: i }), t.set(...this.get()), t.buffer.set(n), t.destroyed = r, t.finished = o, t.length = s, t.pos = l, t.outputLen = i, t;
756
- }
757
- clone() {
758
- return this._cloneInto();
759
- }
760
- }
761
- function Vt(e, t, n, s, o, r, i, l, a, c, b, d, p, O, A, I, S, m, _, k) {
762
- let h = 0;
763
- for (let w = 0; w < s; w++)
764
- ({ a: o, b: a, c: p, d: S } = ce(o, a, p, S, n[t + e[h++]])), { a: o, b: a, c: p, d: S } = le(o, a, p, S, n[t + e[h++]]), { a: r, b: c, c: O, d: m } = ce(r, c, O, m, n[t + e[h++]]), { a: r, b: c, c: O, d: m } = le(r, c, O, m, n[t + e[h++]]), { a: i, b, c: A, d: _ } = ce(i, b, A, _, n[t + e[h++]]), { a: i, b, c: A, d: _ } = le(i, b, A, _, n[t + e[h++]]), { a: l, b: d, c: I, d: k } = ce(l, d, I, k, n[t + e[h++]]), { a: l, b: d, c: I, d: k } = le(l, d, I, k, n[t + e[h++]]), { a: o, b: c, c: A, d: k } = ce(o, c, A, k, n[t + e[h++]]), { a: o, b: c, c: A, d: k } = le(o, c, A, k, n[t + e[h++]]), { a: r, b, c: I, d: S } = ce(r, b, I, S, n[t + e[h++]]), { a: r, b, c: I, d: S } = le(r, b, I, S, n[t + e[h++]]), { a: i, b: d, c: p, d: m } = ce(i, d, p, m, n[t + e[h++]]), { a: i, b: d, c: p, d: m } = le(i, d, p, m, n[t + e[h++]]), { a: l, b: a, c: O, d: _ } = ce(l, a, O, _, n[t + e[h++]]), { a: l, b: a, c: O, d: _ } = le(l, a, O, _, n[t + e[h++]]);
765
- return { v0: o, v1: r, v2: i, v3: l, v4: a, v5: c, v6: b, v7: d, v8: p, v9: O, v10: A, v11: I, v12: S, v13: m, v14: _, v15: k };
766
- }
767
- const Z = {
768
- CHUNK_START: 1,
769
- CHUNK_END: 2,
770
- PARENT: 4,
771
- ROOT: 8,
772
- KEYED_HASH: 16,
773
- DERIVE_KEY_CONTEXT: 32,
774
- DERIVE_KEY_MATERIAL: 64
775
- }, Y = /* @__PURE__ */ ks.slice(), Wt = /* @__PURE__ */ (() => {
776
- const e = Array.from({ length: 16 }, (s, o) => o), t = (s) => [2, 6, 3, 10, 7, 0, 4, 13, 1, 11, 12, 5, 9, 14, 15, 8].map((o) => s[o]), n = [];
777
- for (let s = 0, o = e; s < 7; s++, o = t(o))
778
- n.push(...o);
779
- return Uint8Array.from(n);
780
- })();
781
- class kt extends Es {
782
- chunkPos = 0;
783
- // Position of current block in chunk
784
- chunksDone = 0;
785
- // How many chunks we already have
786
- flags = 0;
787
- IV;
788
- state;
789
- stack = [];
790
- // Output
791
- posOut = 0;
792
- bufferOut32 = new Uint32Array(16);
793
- bufferOut;
794
- chunkOut = 0;
795
- // index of output chunk
796
- enableXOF = !0;
797
- constructor(t = {}, n = 0) {
798
- super(64, t.dkLen === void 0 ? 32 : t.dkLen);
799
- const { key: s, context: o } = t, r = o !== void 0;
800
- if (s !== void 0) {
801
- if (r)
802
- throw new Error('Only "key" or "context" can be specified at same time');
803
- Re(s, 32, "key");
804
- const i = s.slice();
805
- this.IV = qe(i), U(this.IV), this.flags = n | Z.KEYED_HASH;
806
- } else if (r) {
807
- Re(o, void 0, "context");
808
- const i = o, l = new kt({ dkLen: 32 }, Z.DERIVE_KEY_CONTEXT).update(i).digest();
809
- this.IV = qe(l), U(this.IV), this.flags = n | Z.DERIVE_KEY_MATERIAL;
810
- } else
811
- this.IV = Y.slice(), this.flags = n;
812
- this.state = this.IV.slice(), this.bufferOut = Ts(this.bufferOut32);
813
- }
814
- // Unused
815
- get() {
816
- return [];
817
- }
818
- set() {
819
- }
820
- b2Compress(t, n, s, o = 0) {
821
- const { state: r, pos: i } = this, { h: l, l: a } = $t(BigInt(t), !0), { v0: c, v1: b, v2: d, v3: p, v4: O, v5: A, v6: I, v7: S, v8: m, v9: _, v10: k, v11: h, v12: w, v13: u, v14: T, v15: v } = Vt(Wt, o, s, 7, r[0], r[1], r[2], r[3], r[4], r[5], r[6], r[7], Y[0], Y[1], Y[2], Y[3], l, a, i, n);
822
- r[0] = c ^ m, r[1] = b ^ _, r[2] = d ^ k, r[3] = p ^ h, r[4] = O ^ w, r[5] = A ^ u, r[6] = I ^ T, r[7] = S ^ v;
823
- }
824
- compress(t, n = 0, s = !1) {
825
- let o = this.flags;
826
- if (this.chunkPos || (o |= Z.CHUNK_START), (this.chunkPos === 15 || s) && (o |= Z.CHUNK_END), s || (this.pos = this.blockLen), this.b2Compress(this.chunksDone, o, t, n), this.chunkPos += 1, this.chunkPos === 16 || s) {
827
- let r = this.state;
828
- this.state = this.IV.slice();
829
- for (let i, l = this.chunksDone + 1; (s || !(l & 1)) && (i = this.stack.pop()); l >>= 1)
830
- this.buffer32.set(i, 0), this.buffer32.set(r, 8), this.pos = this.blockLen, this.b2Compress(0, this.flags | Z.PARENT, this.buffer32, 0), r = this.state, this.state = this.IV.slice();
831
- this.chunksDone++, this.chunkPos = 0, this.stack.push(r);
832
- }
833
- this.pos = 0;
834
- }
835
- _cloneInto(t) {
836
- t = super._cloneInto(t);
837
- const { IV: n, flags: s, state: o, chunkPos: r, posOut: i, chunkOut: l, stack: a, chunksDone: c } = this;
838
- return t.state.set(o.slice()), t.stack = a.map((b) => Uint32Array.from(b)), t.IV.set(n), t.flags = s, t.chunkPos = r, t.chunksDone = c, t.posOut = i, t.chunkOut = l, t.enableXOF = this.enableXOF, t.bufferOut32.set(this.bufferOut32), t;
839
- }
840
- destroy() {
841
- this.destroyed = !0, Ue(this.state, this.buffer32, this.IV, this.bufferOut32), Ue(...this.stack);
842
- }
843
- // Same as b2Compress, but doesn't modify state and returns 16 u32 array (instead of 8)
844
- b2CompressOut() {
845
- const { state: t, pos: n, flags: s, buffer32: o, bufferOut32: r } = this, { h: i, l } = $t(BigInt(this.chunkOut++));
846
- U(o);
847
- const { v0: a, v1: c, v2: b, v3: d, v4: p, v5: O, v6: A, v7: I, v8: S, v9: m, v10: _, v11: k, v12: h, v13: w, v14: u, v15: T } = Vt(Wt, 0, o, 7, t[0], t[1], t[2], t[3], t[4], t[5], t[6], t[7], Y[0], Y[1], Y[2], Y[3], l, i, n, s);
848
- r[0] = a ^ S, r[1] = c ^ m, r[2] = b ^ _, r[3] = d ^ k, r[4] = p ^ h, r[5] = O ^ w, r[6] = A ^ u, r[7] = I ^ T, r[8] = t[0] ^ S, r[9] = t[1] ^ m, r[10] = t[2] ^ _, r[11] = t[3] ^ k, r[12] = t[4] ^ h, r[13] = t[5] ^ w, r[14] = t[6] ^ u, r[15] = t[7] ^ T, U(o), U(r), this.posOut = 0;
849
- }
850
- finish() {
851
- if (this.finished)
852
- return;
853
- this.finished = !0, Ue(this.buffer.subarray(this.pos));
854
- let t = this.flags | Z.ROOT;
855
- this.stack.length ? (t |= Z.PARENT, U(this.buffer32), this.compress(this.buffer32, 0, !0), U(this.buffer32), this.chunksDone = 0, this.pos = this.blockLen) : t |= (this.chunkPos ? 0 : Z.CHUNK_START) | Z.CHUNK_END, this.flags = t, this.b2CompressOut();
856
- }
857
- writeInto(t) {
858
- ht(this, !1), Re(t), this.finish();
859
- const { blockLen: n, bufferOut: s } = this;
860
- for (let o = 0, r = t.length; o < r; ) {
861
- this.posOut >= n && this.b2CompressOut();
862
- const i = Math.min(n - this.posOut, r - o);
863
- t.set(s.subarray(this.posOut, this.posOut + i), o), this.posOut += i, o += i;
864
- }
865
- return t;
866
- }
867
- xofInto(t) {
868
- if (!this.enableXOF)
869
- throw new Error("XOF is not possible after digest call");
870
- return this.writeInto(t);
871
- }
872
- xof(t) {
873
- return dt(t), this.xofInto(new Uint8Array(t));
874
- }
875
- digestInto(t) {
876
- if (yn(t, this), this.finished)
877
- throw new Error("digest() was already called");
878
- return this.enableXOF = !1, this.writeInto(t), this.destroy(), t;
879
- }
880
- digest() {
881
- return this.digestInto(new Uint8Array(this.outputLen));
882
- }
883
- }
884
- const Ss = /* @__PURE__ */ _s((e = {}) => new kt(e)), pt = (e) => {
885
- const t = e.iframeRefreshMode === "reload" ? "R" : "P", n = `${e.id}|${e.title}|${e.iframe ? "Y" : "N"}|${e.closable ? "Y" : "N"}|${e.refreshable ? "Y" : "N"}|${t}`;
886
- return mn.compressToEncodedURIComponent(n);
887
- }, As = (e) => {
888
- const n = mn.decompressFromEncodedURIComponent(e).split("|"), s = n[5] === "R" ? "reload" : "postMessage";
889
- return {
890
- id: n[0] ?? "",
891
- title: n[1] ?? "",
892
- iframe: n[2] === "Y",
893
- closable: n[3] === "Y",
894
- refreshable: n[4] === "Y",
895
- iframeRefreshMode: s
896
- };
897
- }, Ut = (e, t, n) => {
898
- const s = [];
899
- for (const i in n)
900
- i.startsWith("__") || s.push({
901
- key: i,
902
- value: n[i]
903
- });
904
- s.sort((i, l) => {
905
- let a = 0;
906
- return i.key > l.key ? a = 1 : i.key < l.key && (a = -1), a;
907
- });
908
- const o = new TextEncoder().encode(`${e}|${t}|${JSON.stringify(s)}`), r = Ss(o);
909
- return ft.encode(r);
910
- };
911
- function Os(e) {
912
- return { all: e = e || /* @__PURE__ */ new Map(), on: function(t, n) {
913
- var s = e.get(t);
914
- s ? s.push(n) : e.set(t, [n]);
915
- }, off: function(t, n) {
916
- var s = e.get(t);
917
- s && (n ? s.splice(s.indexOf(n) >>> 0, 1) : e.set(t, []));
918
- }, emit: function(t, n) {
919
- var s = e.get(t);
920
- s && s.slice().map(function(o) {
921
- o(n);
922
- }), (s = e.get("*")) && s.slice().map(function(o) {
923
- o(t, n);
924
- });
925
- } };
926
- }
927
- const Is = Os(), Ms = {
928
- install(e) {
929
- e.provide("tabEmitter", Is);
930
- }
931
- }, Te = () => mt("tabEmitter");
932
- var H = /* @__PURE__ */ ((e) => (e.PAGE_LOADING = "PAGE_LOADING", e.TAB_ACTIVE = "TAB_ACTIVE", e))(H || {});
933
- const Rs = /* @__PURE__ */ q({
934
- __name: "PageLoading",
935
- props: {
936
- tabId: {}
937
- },
938
- setup(e) {
939
- const t = e, n = Te(), s = D(!1), o = (i) => {
940
- i.tId === t.tabId && (s.value = i.value);
941
- }, r = H.PAGE_LOADING;
942
- return n.on(r, o), Ee(() => {
943
- n.off(r, o);
944
- }), (i, l) => s.value ? (B(), V("div", {
945
- key: 0,
946
- class: "stack-tab-loading-mask",
947
- style: Ze({ zIndex: C(xt)(".cache-page-wrapper *") })
948
- }, [...l[0] || (l[0] = [
949
- W("div", { class: "stack-tab-loading--spin turn" }, null, -1)
950
- ])], 4)) : ie("", !0);
951
- }
952
- }), N = D([]), ke = D([]), Q = /* @__PURE__ */ new Map(), he = /* @__PURE__ */ new Set(), ee = /* @__PURE__ */ new Set(), tt = D(0), pe = D([]), me = /* @__PURE__ */ new Map(), Ft = D(!1), Cs = "stacktab-active-tab", ue = D({});
953
- let Fe = 0, xn = !1, _n = "";
954
- const Ls = (e) => {
955
- Fe = e;
956
- }, Bs = (e) => {
957
- xn = e;
958
- }, zs = (e) => {
959
- _n = e;
960
- }, Et = (e) => {
961
- he.add(e);
962
- }, Ae = (e) => {
963
- for (const t of e.pages.list()) Et(t.id);
964
- ee.add(e.id);
965
- }, Ds = (e) => {
966
- for (const t of e.pages.list()) Et(t.id);
967
- }, Oe = (e) => {
968
- ke.value.includes(e) || ke.value.push(e);
969
- }, kn = (e) => {
970
- const t = ke.value.indexOf(e);
971
- t >= 0 && ke.value.splice(t, 1);
972
- }, Ns = (e) => {
973
- e && (he.delete(e), kn(e), Q.delete(e));
974
- }, fe = () => {
975
- if (he.size > 0) {
976
- for (const e of [...he])
977
- Ns(e);
978
- he.clear();
979
- }
980
- }, Ps = (e) => {
981
- const t = me.get(e);
982
- if (t)
983
- for (const [n, s] of t) {
984
- const o = document.querySelector(n);
985
- o && (o.scrollTop = s.top, o.scrollLeft = s.left);
986
- }
987
- }, $s = (e) => {
988
- const t = me.get(e);
989
- if (t)
990
- for (const n of t.keys()) {
991
- const s = document.querySelector(n);
992
- t.set(n, {
993
- top: s?.scrollTop ?? 0,
994
- left: s?.scrollLeft ?? 0
995
- });
996
- }
997
- }, Vs = (e) => {
998
- const t = me.get(e);
999
- t && (t.clear(), me.delete(e));
1000
- }, Ht = (e, ...t) => {
1001
- me.has(e) || me.set(e, /* @__PURE__ */ new Map());
1002
- const n = me.get(e);
1003
- for (const s of t)
1004
- n.set(s, { top: 0, left: 0 });
1005
- }, St = () => _n + Cs, Gt = (e) => {
1006
- e.id && window.sessionStorage.setItem(St(), JSON.stringify(e));
1007
- }, qt = () => {
1008
- window.sessionStorage.removeItem(St());
1009
- }, Ws = (e) => e == null ? null : JSON.parse(
1010
- e,
1011
- (t, n) => t === "pages" ? new lt(n) : n
1012
- ), jt = /* @__PURE__ */ q({
1013
- name: "StackTabEmptyPlaceholder",
1014
- setup() {
1015
- return () => null;
1016
- }
1017
- }), Us = (e) => {
1018
- const n = e.matched[e.matched.length - 1]?.path ?? e.path, s = e.path.endsWith("/") ? e.path.slice(0, -1) : e.path;
1019
- return n === s ? s : e.path;
1020
- }, Xe = () => {
1021
- const e = wt(), t = Te(), {
1022
- t: n
1023
- } = ze(), s = () => N.value.length, o = (y) => {
1024
- for (const x of y) {
1025
- const E = re(x, {
1026
- id: We(),
1027
- refreshable: !0,
1028
- closable: !0,
1029
- iframe: !1
1030
- }), R = E.id ?? We();
1031
- E.id = R;
1032
- const z = _t(E.path), G = re(E, {
1033
- closable: !0,
1034
- refreshable: !0,
1035
- iframe: !1
1036
- }), De = Ut(R, z.path, z.query), Ye = {
1037
- id: De,
1038
- tabId: R,
1039
- path: z.path,
1040
- query: re(z.query, {
1041
- __tab: pt(E)
1042
- })
1043
- }, we = new lt();
1044
- we.push(Ye);
1045
- const Je = {
1046
- id: R,
1047
- title: G.title ?? "",
1048
- closable: G.closable,
1049
- refreshable: G.refreshable,
1050
- iframe: G.iframe,
1051
- iframeRefreshMode: G.iframeRefreshMode === "reload" ? "reload" : "postMessage",
1052
- active: !1,
1053
- pages: we
1054
- };
1055
- Oe(De), N.value.push({
1056
- ...Je
1057
- });
1058
- }
1059
- const g = sessionStorage.getItem(St()), f = Ws(g);
1060
- f && !N.value.some((x) => x.id === f.id) && (f.iframe && f.url && f.iframeRefreshMode === void 0 && (f.iframeRefreshMode = pn(f.url) ? "reload" : "postMessage"), N.value.push(f)), Ft.value = !0;
1061
- }, r = (y) => N.value.some((g) => g.id === y), i = () => Fe <= 0 || Fe > 0 && Fe > N.value.length, l = (y) => (N.value.push(y), Promise.resolve(!0)), a = (y) => N.value.find((g) => g.id === y) ?? null, c = (y) => {
1062
- if (y.query.__tab) return As(y.query.__tab);
1063
- const g = {
1064
- id: We(),
1065
- title: n("VueStackTab.undefined"),
1066
- closable: !0,
1067
- refreshable: !0,
1068
- iframe: !1
1069
- };
1070
- return y.query.__tab = pt(g), g;
1071
- }, b = (y, g, f, x) => {
1072
- let E = null;
1073
- for (const R of N.value)
1074
- R.active = !1, R.id === y.id && (E = R);
1075
- if (E === null) {
1076
- const R = new lt();
1077
- R.push(x);
1078
- const z = g.query.__src;
1079
- E = {
1080
- id: y.id,
1081
- title: y.title,
1082
- closable: y.closable,
1083
- refreshable: y.refreshable,
1084
- iframe: y.iframe,
1085
- iframeRefreshMode: y.iframeRefreshMode ?? "postMessage",
1086
- url: decodeURIComponent(z),
1087
- active: !0,
1088
- pages: R
1089
- }, l(E).then(() => {
1090
- t.emit(H.TAB_ACTIVE, {
1091
- id: y.id,
1092
- isRoute: !1
1093
- });
1094
- });
1095
- } else
1096
- E.active = !0, (E.pages.isEmpty() || E.pages.peek().id !== x.id) && E.pages.push(x);
1097
- return E;
1098
- }, d = (y) => {
1099
- const g = c(y);
1100
- if (ee.has(g.id)) return {
1101
- empty: !0
1102
- };
1103
- const f = Us(y), x = Ut(g.id, f, y.query.valueOf());
1104
- if (he.has(x)) {
1105
- he.delete(x);
1106
- const z = Q.get(x);
1107
- if (z) return {
1108
- recovered: z,
1109
- cacheName: x
1110
- };
1111
- }
1112
- const E = {
1113
- id: x,
1114
- tabId: g.id,
1115
- path: y.path,
1116
- query: y.query
1117
- }, R = b(g, y, x, E);
1118
- return Gt(R), {
1119
- cacheName: x,
1120
- tabInfo: g,
1121
- targetTab: R
1122
- };
1123
- }, p = (y, g) => {
1124
- const {
1125
- cacheName: f,
1126
- tabInfo: x
1127
- } = y;
1128
- if (Q.has(f))
1129
- return Oe(f), Q.get(f);
1130
- const E = /* @__PURE__ */ q({
1131
- name: f,
1132
- components: {
1133
- DynamicComponent: g
1134
- },
1135
- emits: ["onLoaded"],
1136
- setup(R, z) {
1137
- return gt(() => {
1138
- z.emit("onLoaded"), Ht(f, ".cache-page-wrapper");
1139
- }), Bn(() => $s(f)), zn(() => {
1140
- z.emit("onLoaded"), Ps(f), fe(), ee.clear(), O(f), g.props = null;
1141
- }), Ee(() => Vs(f)), () => $("div", {
1142
- class: "cache-page-wrapper",
1143
- id: "W-" + x.id,
1144
- style: [xn ? "overflow:auto" : "overflow:hidden"]
1145
- }, [$(cn("dynamic-component"), {
1146
- tId: x.id,
1147
- pId: f
1148
- }, null), $(Rs, {
1149
- tabId: x.id
1150
- }, null)]);
1151
- }
1152
- });
1153
- return Q.set(f, E), Oe(f), E;
1154
- }, O = (y) => {
1155
- pe.value = pe.value.filter((g) => g !== y);
1156
- }, A = (y, g) => {
1157
- if (!g) return jt;
1158
- const f = d(y);
1159
- return "empty" in f ? jt : "recovered" in f ? (Oe(f.cacheName), f.recovered) : p(f, g);
1160
- }, I = (y) => {
1161
- const g = a(y.id);
1162
- g && (Ds(g), fe(), g.pages.clear());
1163
- }, S = (y) => {
1164
- let g = "";
1165
- const f = a(y), x = N.value, E = x.findIndex((z) => z?.id === y);
1166
- if (E < 0) return "";
1167
- const R = x[E];
1168
- return R.closable ? (Ae(R), R.pages.clear(), x.length > 1 && R.active && (g = (E === 0 ? x[1] : x[E - 1])?.id ?? ""), x.splice(E, 1), g && t.emit(H.TAB_ACTIVE, {
1169
- id: g
1170
- }), f?.active || (fe(), ee.clear()), g) : y;
1171
- }, m = () => {
1172
- const y = N.value;
1173
- for (let x = y.length - 1; x >= 0; x--) {
1174
- const E = y[x];
1175
- E?.closable && (Ae(E), E.pages.clear(), y.splice(x, 1));
1176
- }
1177
- if (y.some((x) => x.active)) {
1178
- fe(), ee.clear();
1179
- return;
1180
- }
1181
- const f = y[y.length - 1];
1182
- f && t.emit(H.TAB_ACTIVE, {
1183
- id: f.id
1184
- });
1185
- };
1186
- return {
1187
- tabs: N,
1188
- caches: ke,
1189
- refreshKey: tt,
1190
- excludedCacheIdsForRefresh: pe,
1191
- isInitialized: Ft,
1192
- setMaxSize: Ls,
1193
- canAddTab: i,
1194
- initialize: o,
1195
- size: s,
1196
- active: (y, g = !0) => {
1197
- t.emit("FORWARD");
1198
- const f = a(y);
1199
- if (f && !f.active) {
1200
- for (const x of N.value)
1201
- x.active = x.id === y;
1202
- if (Gt(f), N.value = N.value.slice(), g) {
1203
- const x = f.pages.peek();
1204
- x && e.push({
1205
- path: x.path,
1206
- query: x.query
1207
- });
1208
- }
1209
- }
1210
- },
1211
- destroy: () => {
1212
- N.value.length = 0, he.clear(), ee.clear(), ue.value = {}, ke.value.length = 0, Q.clear(), qt();
1213
- },
1214
- reset: () => m(),
1215
- addCache: Oe,
1216
- removeCache: kn,
1217
- getTab: a,
1218
- addTab: l,
1219
- removeTab: S,
1220
- removeAllTabs: m,
1221
- removeLeftTabs: (y) => {
1222
- const g = N.value, f = g.findIndex((E) => E?.id === y);
1223
- if (f <= 0) return;
1224
- for (let E = f - 1; E >= 0; E--) {
1225
- const R = g[E];
1226
- R?.closable && (Ae(R), R.pages.clear(), g.splice(E, 1));
1227
- }
1228
- if (g.some((E) => E.active)) {
1229
- fe(), ee.clear();
1230
- return;
1231
- }
1232
- const x = g[0];
1233
- x && t.emit(H.TAB_ACTIVE, {
1234
- id: x.id
1235
- });
1236
- },
1237
- removeRightTabs: (y) => {
1238
- const g = N.value, f = g.findIndex((E) => E?.id === y);
1239
- if (f < 0 || f >= g.length - 1) return;
1240
- for (let E = g.length - 1; E > f; E--) {
1241
- const R = g[E];
1242
- R?.closable && (Ae(R), R.pages.clear(), g.splice(E, 1));
1243
- }
1244
- if (g.some((E) => E.active)) {
1245
- fe(), ee.clear();
1246
- return;
1247
- }
1248
- const x = g[g.length - 1];
1249
- x && t.emit(H.TAB_ACTIVE, {
1250
- id: x.id
1251
- });
1252
- },
1253
- removeOtherTabs: (y) => {
1254
- const g = N.value;
1255
- let f;
1256
- for (let x = g.length - 1; x >= 0; x--) {
1257
- const E = g[x];
1258
- E && (E.id === y ? f = E : E.closable && (Ae(E), E.pages.clear(), g.splice(x, 1)));
1259
- }
1260
- f && !f.active ? t.emit(H.TAB_ACTIVE, {
1261
- id: y
1262
- }) : (fe(), ee.clear());
1263
- },
1264
- hasTab: r,
1265
- renewTab: I,
1266
- addPage: A,
1267
- addComponent: (y, g) => Q.set(y, g),
1268
- getComponent: (y) => Q.get(y),
1269
- removeComponent: (y) => Q.delete(y),
1270
- markCacheForEviction: Et,
1271
- evictMarkedCaches: fe,
1272
- refreshTab: (y) => {
1273
- const g = a(y);
1274
- if (!g?.refreshable) return;
1275
- if (g.iframe) {
1276
- g.iframeRefreshMode === "reload" ? ue.value = {
1277
- ...ue.value,
1278
- [y]: (ue.value[y] ?? 0) + 1
1279
- } : t.emit("REFRESH_IFRAME_POSTMESSAGE", y);
1280
- return;
1281
- }
1282
- const f = g.pages.peek()?.id;
1283
- f && (pe.value = [...pe.value, f], g.active && tt.value++);
1284
- },
1285
- refreshAllTabs: () => {
1286
- const y = [];
1287
- for (const g of N.value)
1288
- if (g?.refreshable)
1289
- if (g.iframe)
1290
- g.iframeRefreshMode === "reload" ? ue.value = {
1291
- ...ue.value,
1292
- [g.id]: (ue.value[g.id] ?? 0) + 1
1293
- } : t.emit("REFRESH_IFRAME_POSTMESSAGE", g.id);
1294
- else {
1295
- const f = g.pages.peek()?.id;
1296
- f && y.push(f);
1297
- }
1298
- y.length > 0 && (pe.value = [...pe.value, ...y], tt.value++);
1299
- },
1300
- iframeRefreshKeys: ue,
1301
- addPageScroller: Ht,
1302
- setGlobalScroll: Bs,
1303
- clearSession: qt,
1304
- setSessionPrefix: zs
1305
- };
1306
- };
1307
- let Zt;
1308
- function At() {
1309
- const e = wt(), t = Te(), {
1310
- active: n,
1311
- hasTab: s,
1312
- refreshKey: o,
1313
- reset: r,
1314
- canAddTab: i,
1315
- renewTab: l,
1316
- getTab: a,
1317
- tabs: c,
1318
- removeTab: b,
1319
- removeAllTabs: d,
1320
- refreshTab: p,
1321
- refreshAllTabs: O
1322
- } = Xe(), A = (h) => {
1323
- const w = {
1324
- refreshable: !0,
1325
- closable: !0,
1326
- iframe: !1
1327
- };
1328
- h.iframe && h.iframeRefreshMode === void 0 ? w.iframeRefreshMode = pn(h.path ?? "") ? "reload" : "postMessage" : h.iframe && (w.iframeRefreshMode = h.iframeRefreshMode ?? "postMessage");
1329
- const u = re(h, w);
1330
- return u.id || (u.id = We()), u;
1331
- }, I = rs(500, (h, w = !1) => new Promise((u, T) => {
1332
- const v = A(h);
1333
- if (s(v.id) && !w) {
1334
- t.emit(H.TAB_ACTIVE, { id: v.id }), u(v.id);
1335
- return;
1336
- }
1337
- if (v.id && w && s(v.id) && (l(h), a(h.id)?.active && o.value++), !i()) {
1338
- T(new Error("Max Size"));
1339
- return;
1340
- }
1341
- S(h, v), u(v.id);
1342
- })), S = (h, w) => {
1343
- const u = pt(w);
1344
- let T = re({ __tab: u }, h.query), v;
1345
- if (h.iframe)
1346
- T.__src = encodeURIComponent(h.path), v = Zt;
1347
- else {
1348
- const P = _t(h.path);
1349
- v = P.path, T = re(P.query, T);
1350
- }
1351
- e.push({ path: v, query: T });
1352
- };
1353
- return {
1354
- // 打开
1355
- openTab: I,
1356
- // 关闭
1357
- closeTab: b,
1358
- closeAllTabs: d,
1359
- // 刷新
1360
- refreshTab: p,
1361
- refreshAllTabs: O,
1362
- // 激活与重置
1363
- activeTab: n,
1364
- reset: r,
1365
- // 数据与配置
1366
- tabs: c,
1367
- setIFramePath: (h) => {
1368
- Zt = h;
1369
- },
1370
- getWrapper: () => document.getElementsByClassName("cache-page-wrapper")[0],
1371
- openInNewWindow: (h) => {
1372
- const w = a(h);
1373
- w?.iframe && w.url && window.open(w.url, "_blank", "noopener,noreferrer");
1374
- }
1375
- };
1376
- }
1377
- const Fs = { class: "stack-tab__contextmenu-item" }, J = /* @__PURE__ */ q({
1378
- __name: "ContextMenuItem",
1379
- props: {
1380
- icon: {},
1381
- title: {}
1382
- },
1383
- setup(e) {
1384
- return (t, n) => (B(), V("div", Fs, [
1385
- W("div", {
1386
- class: de(["stack-tab__contextmenu-icon", e.icon])
1387
- }, null, 2),
1388
- W("div", {
1389
- style: { "margin-left": "8px" },
1390
- onContextmenu: n[0] || (n[0] = Le(() => {
1391
- }, ["prevent"]))
1392
- }, yt(e.title), 33)
1393
- ]));
1394
- }
1395
- }), Hs = {
1396
- key: 1,
1397
- class: "divider div-transparent"
1398
- }, Gs = /* @__PURE__ */ q({
1399
- __name: "index",
1400
- props: {
1401
- index: {},
1402
- left: { default: 0 },
1403
- top: { default: 0 },
1404
- contextMenu: { default: () => [] },
1405
- tabItem: {},
1406
- max: {}
1407
- },
1408
- emits: ["close"],
1409
- setup(e, { emit: t }) {
1410
- const n = e, s = t, { t: o } = ze(), r = D(), i = ne({ left: n.left, top: n.top }), { closeTab: l, closeAllTabs: a, refreshTab: c, refreshAllTabs: b, openInNewWindow: d } = At(), { removeLeftTabs: p, removeRightTabs: O, removeOtherTabs: A } = Xe(), I = (S) => {
1411
- S?.(), s("close");
1412
- };
1413
- return gt(() => {
1414
- const S = r.value?.clientWidth ?? 0;
1415
- i.left + S > window.innerWidth && (i.left = window.innerWidth - S - 5);
1416
- }), (S, m) => (B(), V("div", {
1417
- ref_key: "menuElementRef",
1418
- ref: r,
1419
- class: "stack-tab__contextmenu",
1420
- style: Ze({
1421
- left: `${i.left}px`,
1422
- top: `${i.top}px`,
1423
- "z-index": C(xt)(".stack-tab,.stack-tab *")
1424
- })
1425
- }, [
1426
- $(J, {
1427
- icon: "stack-tab__icon-reload svg-mask",
1428
- title: C(o)("VueStackTab.reload"),
1429
- disabled: e.tabItem.refreshable ? null : "disabled",
1430
- onClick: m[0] || (m[0] = (_) => I(() => C(c)(e.tabItem.id)))
1431
- }, null, 8, ["title", "disabled"]),
1432
- $(J, {
1433
- icon: "stack-tab__icon-reload-all svg-mask",
1434
- title: C(o)("VueStackTab.reloadAll"),
1435
- onClick: m[1] || (m[1] = (_) => I(C(b)))
1436
- }, null, 8, ["title"]),
1437
- $(J, {
1438
- icon: "stack-tab__icon-close svg-mask",
1439
- title: C(o)("VueStackTab.close"),
1440
- disabled: e.tabItem.closable ? null : "disabled",
1441
- onClick: m[2] || (m[2] = (_) => I(() => C(l)(e.tabItem.id)))
1442
- }, null, 8, ["title", "disabled"]),
1443
- $(J, {
1444
- icon: "stack-tab__icon-close-lefts svg-mask",
1445
- title: C(o)("VueStackTab.closeLeft"),
1446
- disabled: e.index <= 0 ? "disabled" : null,
1447
- onClick: m[3] || (m[3] = (_) => I(() => C(p)(e.tabItem.id)))
1448
- }, null, 8, ["title", "disabled"]),
1449
- $(J, {
1450
- icon: "stack-tab__icon-close-rights svg-mask",
1451
- title: C(o)("VueStackTab.closeRight"),
1452
- disabled: e.index >= e.max - 1 ? "disabled" : null,
1453
- onClick: m[4] || (m[4] = (_) => I(() => C(O)(e.tabItem.id)))
1454
- }, null, 8, ["title", "disabled"]),
1455
- $(J, {
1456
- icon: "stack-tab__icon-close-others svg-mask",
1457
- title: C(o)("VueStackTab.closeOthers"),
1458
- onClick: m[5] || (m[5] = (_) => I(() => C(A)(e.tabItem.id)))
1459
- }, null, 8, ["title"]),
1460
- $(J, {
1461
- icon: "stack-tab__icon-close-all svg-mask",
1462
- title: C(o)("VueStackTab.closeAll"),
1463
- onClick: m[6] || (m[6] = (_) => I(C(a)))
1464
- }, null, 8, ["title"]),
1465
- e.tabItem.iframe && e.tabItem.url ? (B(), se(J, {
1466
- key: 0,
1467
- icon: "stack-tab__icon-open svg-mask",
1468
- title: C(o)("VueStackTab.openInNewWindow"),
1469
- onClick: m[7] || (m[7] = (_) => I(() => C(d)(e.tabItem.id)))
1470
- }, null, 8, ["title"])) : ie("", !0),
1471
- e.contextMenu !== void 0 && e.contextMenu.length > 0 ? (B(), V("div", Hs)) : ie("", !0),
1472
- (B(!0), V(Ke, null, Tt(e.contextMenu, (_, k) => (B(), se(J, {
1473
- key: k,
1474
- icon: _.icon,
1475
- title: _.title,
1476
- disabled: _.disabled(e.tabItem) ? "disabled" : null,
1477
- onClick: (h) => I(() => !_.disabled(e.tabItem) && _.callback(e.tabItem.id))
1478
- }, null, 8, ["icon", "title", "disabled", "onClick"]))), 128))
1479
- ], 4));
1480
- }
1481
- }), qs = (e, t) => {
1482
- const n = e.__vccOpts || e;
1483
- for (const [s, o] of t)
1484
- n[s] = o;
1485
- return n;
1486
- }, js = /* @__PURE__ */ qs(Gs, [["__scopeId", "data-v-6f704637"]]), Zs = () => {
1487
- const e = ne({
1488
- item: {},
1489
- index: -1,
1490
- left: 0,
1491
- top: 0,
1492
- max: 0
1493
- }), t = D(!1), n = (o) => {
1494
- o.target.closest?.(".stack-tab__contextmenu") || (t.value = !1, document.removeEventListener("click", n));
1495
- };
1496
- return Ee(() => {
1497
- document.removeEventListener("click", n);
1498
- }), {
1499
- shown: t,
1500
- contextMenuData: e,
1501
- showContextMenu: async (o, r, i, l) => {
1502
- t.value = !1, document.removeEventListener("click", n), await ot(() => {
1503
- const { clientY: a, clientX: c } = o;
1504
- t.value = !0, Object.assign(e, { item: r, index: i, top: a, left: c, max: l }), ot(() => document.addEventListener("click", n));
1505
- });
1506
- }
1507
- };
1508
- }, Ks = { class: "stack-tab__item-title" }, Xs = ["title"], Ys = ["title"], Js = /* @__PURE__ */ q({
1509
- __name: "TabHeaderItem",
1510
- props: {
1511
- item: {}
1512
- },
1513
- emits: ["close", "active"],
1514
- setup(e, { emit: t }) {
1515
- const n = t, s = Te(), { t: o } = ze(), r = D(), i = e, l = (p) => {
1516
- i.item.id === p.id && d(p.isRoute ?? !0);
1517
- }, a = H.TAB_ACTIVE;
1518
- s.on(a, l), Ee(() => {
1519
- s.off(a, l);
1520
- });
1521
- const c = oe(() => i.item.title || o("undefined")), b = () => {
1522
- n("close", i.item);
1523
- }, d = (p = !0) => {
1524
- n("active", i.item, r.value, p);
1525
- };
1526
- return (p, O) => (B(), V("li", {
1527
- ref_key: "tabElementRef",
1528
- ref: r,
1529
- class: de(["stack-tab__item", {
1530
- "is-active": e.item.active,
1531
- "is-icon": e.item.closable
1532
- }]),
1533
- onClick: O[0] || (O[0] = (A) => d(!0))
1534
- }, [
1535
- W("div", Ks, [
1536
- W("div", {
1537
- class: "stack-tab__item-title-content",
1538
- title: c.value
1539
- }, yt(c.value), 9, Xs)
1540
- ]),
1541
- e.item.closable ? (B(), V("div", {
1542
- key: 0,
1543
- class: "stack-tab__icon-close-fill stack-tab__item-button",
1544
- title: C(o)("VueStackTab.close"),
1545
- onClick: Le(b, ["stop"])
1546
- }, null, 8, Ys)) : ie("", !0)
1547
- ], 2));
1548
- }
1549
- });
1550
- var ge = [], Qs = function() {
1551
- return ge.some(function(e) {
1552
- return e.activeTargets.length > 0;
1553
- });
1554
- }, eo = function() {
1555
- return ge.some(function(e) {
1556
- return e.skippedTargets.length > 0;
1557
- });
1558
- }, Kt = "ResizeObserver loop completed with undelivered notifications.", to = function() {
1559
- var e;
1560
- typeof ErrorEvent == "function" ? e = new ErrorEvent("error", {
1561
- message: Kt
1562
- }) : (e = document.createEvent("Event"), e.initEvent("error", !1, !1), e.message = Kt), window.dispatchEvent(e);
1563
- }, Be;
1564
- (function(e) {
1565
- e.BORDER_BOX = "border-box", e.CONTENT_BOX = "content-box", e.DEVICE_PIXEL_CONTENT_BOX = "device-pixel-content-box";
1566
- })(Be || (Be = {}));
1567
- var ye = function(e) {
1568
- return Object.freeze(e);
1569
- }, no = /* @__PURE__ */ (function() {
1570
- function e(t, n) {
1571
- this.inlineSize = t, this.blockSize = n, ye(this);
1572
- }
1573
- return e;
1574
- })(), En = (function() {
1575
- function e(t, n, s, o) {
1576
- return this.x = t, this.y = n, this.width = s, this.height = o, this.top = this.y, this.left = this.x, this.bottom = this.top + this.height, this.right = this.left + this.width, ye(this);
1577
- }
1578
- return e.prototype.toJSON = function() {
1579
- var t = this, n = t.x, s = t.y, o = t.top, r = t.right, i = t.bottom, l = t.left, a = t.width, c = t.height;
1580
- return { x: n, y: s, top: o, right: r, bottom: i, left: l, width: a, height: c };
1581
- }, e.fromRect = function(t) {
1582
- return new e(t.x, t.y, t.width, t.height);
1583
- }, e;
1584
- })(), Ot = function(e) {
1585
- return e instanceof SVGElement && "getBBox" in e;
1586
- }, Sn = function(e) {
1587
- if (Ot(e)) {
1588
- var t = e.getBBox(), n = t.width, s = t.height;
1589
- return !n && !s;
1590
- }
1591
- var o = e, r = o.offsetWidth, i = o.offsetHeight;
1592
- return !(r || i || e.getClientRects().length);
1593
- }, Xt = function(e) {
1594
- var t;
1595
- if (e instanceof Element)
1596
- return !0;
1597
- var n = (t = e?.ownerDocument) === null || t === void 0 ? void 0 : t.defaultView;
1598
- return !!(n && e instanceof n.Element);
1599
- }, so = function(e) {
1600
- switch (e.tagName) {
1601
- case "INPUT":
1602
- if (e.type !== "image")
1603
- break;
1604
- case "VIDEO":
1605
- case "AUDIO":
1606
- case "EMBED":
1607
- case "OBJECT":
1608
- case "CANVAS":
1609
- case "IFRAME":
1610
- case "IMG":
1611
- return !0;
1612
- }
1613
- return !1;
1614
- }, Ce = typeof window < "u" ? window : {}, Pe = /* @__PURE__ */ new WeakMap(), Yt = /auto|scroll/, oo = /^tb|vertical/, ro = /msie|trident/i.test(Ce.navigator && Ce.navigator.userAgent), K = function(e) {
1615
- return parseFloat(e || "0");
1616
- }, xe = function(e, t, n) {
1617
- return e === void 0 && (e = 0), t === void 0 && (t = 0), n === void 0 && (n = !1), new no((n ? t : e) || 0, (n ? e : t) || 0);
1618
- }, Jt = ye({
1619
- devicePixelContentBoxSize: xe(),
1620
- borderBoxSize: xe(),
1621
- contentBoxSize: xe(),
1622
- contentRect: new En(0, 0, 0, 0)
1623
- }), An = function(e, t) {
1624
- if (t === void 0 && (t = !1), Pe.has(e) && !t)
1625
- return Pe.get(e);
1626
- if (Sn(e))
1627
- return Pe.set(e, Jt), Jt;
1628
- var n = getComputedStyle(e), s = Ot(e) && e.ownerSVGElement && e.getBBox(), o = !ro && n.boxSizing === "border-box", r = oo.test(n.writingMode || ""), i = !s && Yt.test(n.overflowY || ""), l = !s && Yt.test(n.overflowX || ""), a = s ? 0 : K(n.paddingTop), c = s ? 0 : K(n.paddingRight), b = s ? 0 : K(n.paddingBottom), d = s ? 0 : K(n.paddingLeft), p = s ? 0 : K(n.borderTopWidth), O = s ? 0 : K(n.borderRightWidth), A = s ? 0 : K(n.borderBottomWidth), I = s ? 0 : K(n.borderLeftWidth), S = d + c, m = a + b, _ = I + O, k = p + A, h = l ? e.offsetHeight - k - e.clientHeight : 0, w = i ? e.offsetWidth - _ - e.clientWidth : 0, u = o ? S + _ : 0, T = o ? m + k : 0, v = s ? s.width : K(n.width) - u - w, P = s ? s.height : K(n.height) - T - h, F = v + S + w + _, y = P + m + h + k, g = ye({
1629
- devicePixelContentBoxSize: xe(Math.round(v * devicePixelRatio), Math.round(P * devicePixelRatio), r),
1630
- borderBoxSize: xe(F, y, r),
1631
- contentBoxSize: xe(v, P, r),
1632
- contentRect: new En(d, a, v, P)
1633
- });
1634
- return Pe.set(e, g), g;
1635
- }, On = function(e, t, n) {
1636
- var s = An(e, n), o = s.borderBoxSize, r = s.contentBoxSize, i = s.devicePixelContentBoxSize;
1637
- switch (t) {
1638
- case Be.DEVICE_PIXEL_CONTENT_BOX:
1639
- return i;
1640
- case Be.BORDER_BOX:
1641
- return o;
1642
- default:
1643
- return r;
1644
- }
1645
- }, io = /* @__PURE__ */ (function() {
1646
- function e(t) {
1647
- var n = An(t);
1648
- this.target = t, this.contentRect = n.contentRect, this.borderBoxSize = ye([n.borderBoxSize]), this.contentBoxSize = ye([n.contentBoxSize]), this.devicePixelContentBoxSize = ye([n.devicePixelContentBoxSize]);
1649
- }
1650
- return e;
1651
- })(), In = function(e) {
1652
- if (Sn(e))
1653
- return 1 / 0;
1654
- for (var t = 0, n = e.parentNode; n; )
1655
- t += 1, n = n.parentNode;
1656
- return t;
1657
- }, ao = function() {
1658
- var e = 1 / 0, t = [];
1659
- ge.forEach(function(i) {
1660
- if (i.activeTargets.length !== 0) {
1661
- var l = [];
1662
- i.activeTargets.forEach(function(c) {
1663
- var b = new io(c.target), d = In(c.target);
1664
- l.push(b), c.lastReportedSize = On(c.target, c.observedBox), d < e && (e = d);
1665
- }), t.push(function() {
1666
- i.callback.call(i.observer, l, i.observer);
1667
- }), i.activeTargets.splice(0, i.activeTargets.length);
1668
- }
1669
- });
1670
- for (var n = 0, s = t; n < s.length; n++) {
1671
- var o = s[n];
1672
- o();
1673
- }
1674
- return e;
1675
- }, Qt = function(e) {
1676
- ge.forEach(function(n) {
1677
- n.activeTargets.splice(0, n.activeTargets.length), n.skippedTargets.splice(0, n.skippedTargets.length), n.observationTargets.forEach(function(o) {
1678
- o.isActive() && (In(o.target) > e ? n.activeTargets.push(o) : n.skippedTargets.push(o));
1679
- });
1680
- });
1681
- }, co = function() {
1682
- var e = 0;
1683
- for (Qt(e); Qs(); )
1684
- e = ao(), Qt(e);
1685
- return eo() && to(), e > 0;
1686
- }, nt, Mn = [], lo = function() {
1687
- return Mn.splice(0).forEach(function(e) {
1688
- return e();
1689
- });
1690
- }, uo = function(e) {
1691
- if (!nt) {
1692
- var t = 0, n = document.createTextNode(""), s = { characterData: !0 };
1693
- new MutationObserver(function() {
1694
- return lo();
1695
- }).observe(n, s), nt = function() {
1696
- n.textContent = "".concat(t ? t-- : t++);
1697
- };
1698
- }
1699
- Mn.push(e), nt();
1700
- }, fo = function(e) {
1701
- uo(function() {
1702
- requestAnimationFrame(e);
1703
- });
1704
- }, He = 0, ho = function() {
1705
- return !!He;
1706
- }, po = 250, bo = { attributes: !0, characterData: !0, childList: !0, subtree: !0 }, en = [
1707
- "resize",
1708
- "load",
1709
- "transitionend",
1710
- "animationend",
1711
- "animationstart",
1712
- "animationiteration",
1713
- "keyup",
1714
- "keydown",
1715
- "mouseup",
1716
- "mousedown",
1717
- "mouseover",
1718
- "mouseout",
1719
- "blur",
1720
- "focus"
1721
- ], tn = function(e) {
1722
- return e === void 0 && (e = 0), Date.now() + e;
1723
- }, st = !1, vo = (function() {
1724
- function e() {
1725
- var t = this;
1726
- this.stopped = !0, this.listener = function() {
1727
- return t.schedule();
1728
- };
1729
- }
1730
- return e.prototype.run = function(t) {
1731
- var n = this;
1732
- if (t === void 0 && (t = po), !st) {
1733
- st = !0;
1734
- var s = tn(t);
1735
- fo(function() {
1736
- var o = !1;
1737
- try {
1738
- o = co();
1739
- } finally {
1740
- if (st = !1, t = s - tn(), !ho())
1741
- return;
1742
- o ? n.run(1e3) : t > 0 ? n.run(t) : n.start();
1743
- }
1744
- });
1745
- }
1746
- }, e.prototype.schedule = function() {
1747
- this.stop(), this.run();
1748
- }, e.prototype.observe = function() {
1749
- var t = this, n = function() {
1750
- return t.observer && t.observer.observe(document.body, bo);
1751
- };
1752
- document.body ? n() : Ce.addEventListener("DOMContentLoaded", n);
1753
- }, e.prototype.start = function() {
1754
- var t = this;
1755
- this.stopped && (this.stopped = !1, this.observer = new MutationObserver(this.listener), this.observe(), en.forEach(function(n) {
1756
- return Ce.addEventListener(n, t.listener, !0);
1757
- }));
1758
- }, e.prototype.stop = function() {
1759
- var t = this;
1760
- this.stopped || (this.observer && this.observer.disconnect(), en.forEach(function(n) {
1761
- return Ce.removeEventListener(n, t.listener, !0);
1762
- }), this.stopped = !0);
1763
- }, e;
1764
- })(), bt = new vo(), nn = function(e) {
1765
- !He && e > 0 && bt.start(), He += e, !He && bt.stop();
1766
- }, mo = function(e) {
1767
- return !Ot(e) && !so(e) && getComputedStyle(e).display === "inline";
1768
- }, go = (function() {
1769
- function e(t, n) {
1770
- this.target = t, this.observedBox = n || Be.CONTENT_BOX, this.lastReportedSize = {
1771
- inlineSize: 0,
1772
- blockSize: 0
1773
- };
1774
- }
1775
- return e.prototype.isActive = function() {
1776
- var t = On(this.target, this.observedBox, !0);
1777
- return mo(this.target) && (this.lastReportedSize = t), this.lastReportedSize.inlineSize !== t.inlineSize || this.lastReportedSize.blockSize !== t.blockSize;
1778
- }, e;
1779
- })(), yo = /* @__PURE__ */ (function() {
1780
- function e(t, n) {
1781
- this.activeTargets = [], this.skippedTargets = [], this.observationTargets = [], this.observer = t, this.callback = n;
1782
- }
1783
- return e;
1784
- })(), $e = /* @__PURE__ */ new WeakMap(), sn = function(e, t) {
1785
- for (var n = 0; n < e.length; n += 1)
1786
- if (e[n].target === t)
1787
- return n;
1788
- return -1;
1789
- }, Ve = (function() {
1790
- function e() {
1791
- }
1792
- return e.connect = function(t, n) {
1793
- var s = new yo(t, n);
1794
- $e.set(t, s);
1795
- }, e.observe = function(t, n, s) {
1796
- var o = $e.get(t), r = o.observationTargets.length === 0;
1797
- sn(o.observationTargets, n) < 0 && (r && ge.push(o), o.observationTargets.push(new go(n, s && s.box)), nn(1), bt.schedule());
1798
- }, e.unobserve = function(t, n) {
1799
- var s = $e.get(t), o = sn(s.observationTargets, n), r = s.observationTargets.length === 1;
1800
- o >= 0 && (r && ge.splice(ge.indexOf(s), 1), s.observationTargets.splice(o, 1), nn(-1));
1801
- }, e.disconnect = function(t) {
1802
- var n = this, s = $e.get(t);
1803
- s.observationTargets.slice().forEach(function(o) {
1804
- return n.unobserve(t, o.target);
1805
- }), s.activeTargets.splice(0, s.activeTargets.length);
1806
- }, e;
1807
- })(), on = (function() {
1808
- function e(t) {
1809
- if (arguments.length === 0)
1810
- throw new TypeError("Failed to construct 'ResizeObserver': 1 argument required, but only 0 present.");
1811
- if (typeof t != "function")
1812
- throw new TypeError("Failed to construct 'ResizeObserver': The callback provided as parameter 1 is not a function.");
1813
- Ve.connect(this, t);
1814
- }
1815
- return e.prototype.observe = function(t, n) {
1816
- if (arguments.length === 0)
1817
- throw new TypeError("Failed to execute 'observe' on 'ResizeObserver': 1 argument required, but only 0 present.");
1818
- if (!Xt(t))
1819
- throw new TypeError("Failed to execute 'observe' on 'ResizeObserver': parameter 1 is not of type 'Element");
1820
- Ve.observe(this, t, n);
1821
- }, e.prototype.unobserve = function(t) {
1822
- if (arguments.length === 0)
1823
- throw new TypeError("Failed to execute 'unobserve' on 'ResizeObserver': 1 argument required, but only 0 present.");
1824
- if (!Xt(t))
1825
- throw new TypeError("Failed to execute 'unobserve' on 'ResizeObserver': parameter 1 is not of type 'Element");
1826
- Ve.unobserve(this, t);
1827
- }, e.prototype.disconnect = function() {
1828
- Ve.disconnect(this);
1829
- }, e.toString = function() {
1830
- return "function ResizeObserver () { [polyfill code] }";
1831
- }, e;
1832
- })();
1833
- const To = ["disabled", "title"], wo = {
1834
- key: 1,
1835
- class: "stack-tab__button"
1836
- }, vt = /* @__PURE__ */ q({
1837
- __name: "TabHeaderButton",
1838
- props: {
1839
- disabled: { type: Boolean, default: !1 },
1840
- shadow: { default: null },
1841
- iconClass: { default: "" },
1842
- title: { default: "" }
1843
- },
1844
- setup(e) {
1845
- return (t, n) => (B(), V("div", {
1846
- class: de(["stack-tab__header-button", {
1847
- "stack-tab__shadow-right": e.shadow === "right",
1848
- "stack-tab__shadow-left": e.shadow === "left"
1849
- }]),
1850
- disabled: e.disabled ? "disabled" : null,
1851
- title: e.title
1852
- }, [
1853
- "icon" in t.$slots ? ie("", !0) : (B(), V("div", {
1854
- key: 0,
1855
- class: de(["stack-tab__mask-button", e.iconClass])
1856
- }, null, 2)),
1857
- "icon" in t.$slots ? (B(), V("div", wo, [
1858
- _e(t.$slots, "icon")
1859
- ])) : ie("", !0)
1860
- ], 10, To));
1861
- }
1862
- }), xo = /* @__PURE__ */ q({
1863
- __name: "TabHeaderScroll",
1864
- props: {
1865
- space: { default: 300 },
1866
- isScrollWheel: { type: Boolean, default: !0 },
1867
- isScrollButton: { type: Boolean, default: !0 }
1868
- },
1869
- setup(e, { expose: t }) {
1870
- const n = D(null), s = D(null), o = D(null), r = D(!1), i = D(!1), l = D(!1), a = D(!0), c = D(), b = e, d = ne({
1871
- clientWidth: 0,
1872
- scrollWidth: 0,
1873
- scrollLeft: 0
1874
- }), p = ne({
1875
- thumbLeft: 0,
1876
- startScrollLeft: 0,
1877
- startThumbLeft: 0,
1878
- startPageX: 0
1879
- });
1880
- rt(d, (f) => {
1881
- O(f);
1882
- });
1883
- const O = (f) => {
1884
- i.value = f.scrollLeft <= 10, l.value = f.clientWidth + f.scrollLeft - f.scrollWidth >= -10, a.value = f.scrollWidth !== f.clientWidth;
1885
- }, A = oe(() => d.scrollWidth > d.clientWidth), I = oe(() => {
1886
- if (!A.value) return 0;
1887
- const { clientWidth: f, scrollWidth: x } = d;
1888
- return f / x * f;
1889
- }), S = oe(() => {
1890
- if (!A.value) return 0;
1891
- const { clientWidth: f, scrollWidth: x, scrollLeft: E } = d;
1892
- return (f - I.value) * (E / (x - f));
1893
- }), m = () => {
1894
- if (!n.value) return;
1895
- const { clientWidth: f, scrollWidth: x, scrollLeft: E } = n.value;
1896
- Object.assign(d, { clientWidth: f, scrollWidth: x, scrollLeft: E });
1897
- }, _ = () => {
1898
- const f = n.value?.querySelector(".stack-tab__item.is-active");
1899
- f && !g(f) && y(f);
1900
- }, k = new on(() => {
1901
- m(), _();
1902
- }), h = new on(() => {
1903
- A.value || _(), m();
1904
- }), w = (f, x = !0) => {
1905
- hn({ wrap: n.value, left: f, top: 0, smooth: x });
1906
- }, u = (f) => {
1907
- w(n.value.scrollLeft + f);
1908
- }, T = (f) => {
1909
- const x = f.deltaY < 0;
1910
- w(n.value.scrollLeft + (x ? -b.space : b.space));
1911
- }, v = (f) => {
1912
- Object.assign(p, {
1913
- startPageX: f.pageX,
1914
- startScrollLeft: n.value?.scrollLeft,
1915
- startThumbLeft: S.value,
1916
- thumbLeft: S.value
1917
- }), r.value = !0, document.addEventListener("mousemove", P), document.addEventListener("mouseup", F);
1918
- }, P = (f) => {
1919
- const { clientWidth: x, scrollWidth: E } = d;
1920
- let R = p.startThumbLeft + f.pageX - p.startPageX;
1921
- const z = x - I.value;
1922
- R < 0 ? R = 0 : R > z && (R = z), p.thumbLeft = R, w(R * (E - x) / (x - I.value), !1), f.preventDefault();
1923
- }, F = () => {
1924
- r.value = !1, document.removeEventListener("mousemove", P), document.removeEventListener("mouseup", F);
1925
- };
1926
- gt(() => {
1927
- k.observe(c.value);
1928
- const f = n.value?.querySelector(".stack-tab__nav");
1929
- h.observe(f);
1930
- }), Ee(() => {
1931
- k.disconnect(), h.disconnect();
1932
- });
1933
- const y = (f) => {
1934
- os({ el: f, wrap: n.value, block: "end", inline: "center" });
1935
- }, g = (f) => {
1936
- if (!A.value)
1937
- return !0;
1938
- const x = f.offsetLeft, E = n.value.scrollLeft;
1939
- return !(x < E || x + f.clientWidth > E + n.value.clientWidth);
1940
- };
1941
- return t({ scrollIntoView: y, isInView: g }), (f, x) => (B(), V(Ke, null, [
1942
- a.value ? (B(), se(vt, {
1943
- key: 0,
1944
- "icon-class": "stack-tab__icon-left-arrow",
1945
- disabled: i.value,
1946
- onClick: x[0] || (x[0] = (E) => !i.value && u(-1 * e.space))
1947
- }, null, 8, ["disabled"])) : ie("", !0),
1948
- W("div", {
1949
- ref_key: "headerScroll",
1950
- ref: c,
1951
- class: "stack-tab__scroll",
1952
- onWheelPassive: T
1953
- }, [
1954
- W("div", {
1955
- ref_key: "container",
1956
- ref: n,
1957
- class: de(["stack-tab__scroll-container", {
1958
- "stack-tab__shadow-inset-left": !i.value && l.value,
1959
- "stack-tab__shadow-inset-right": !l.value && i.value,
1960
- "stack-tab__shadow-inset-all": !i.value && !l.value
1961
- }]),
1962
- onScrollPassive: m
1963
- }, [
1964
- _e(f.$slots, "default")
1965
- ], 34),
1966
- it(W("div", {
1967
- ref_key: "bar",
1968
- ref: s,
1969
- class: de(["stack-tab__scrollbar", { "is-dragging": r.value }])
1970
- }, [
1971
- W("div", {
1972
- ref_key: "thumb",
1973
- ref: o,
1974
- class: de(["stack-tab__scrollbar-thumb", { "is-dragging": r.value }]),
1975
- style: Ze({
1976
- width: `${I.value}px`,
1977
- transform: `translateX(${S.value}px)`
1978
- }),
1979
- onMousedown: Le(v, ["prevent"])
1980
- }, null, 38)
1981
- ], 2), [
1982
- [at, A.value]
1983
- ])
1984
- ], 544),
1985
- a.value ? (B(), se(vt, {
1986
- key: 1,
1987
- "icon-class": "stack-tab__icon-right-arrow",
1988
- disabled: l.value,
1989
- onClick: x[1] || (x[1] = (E) => !l.value && u(e.space))
1990
- }, null, 8, ["disabled"])) : ie("", !0)
1991
- ], 64));
1992
- }
1993
- }), _o = { class: "stack-tab__header" }, ko = /* @__PURE__ */ q({
1994
- __name: "index",
1995
- props: {
1996
- space: {},
1997
- tabScrollMode: { default: be.BOTH },
1998
- tabTransition: { default: () => ({
1999
- name: "stack-tab-zoom"
2000
- }) },
2001
- contextmenu: { type: [Boolean, Object], default: !0 },
2002
- max: { default: 20 }
2003
- },
2004
- emits: ["active"],
2005
- setup(e, { emit: t }) {
2006
- const { t: n } = ze(), s = mt("maximum"), o = t, r = D(), { shown: i, contextMenuData: l, showContextMenu: a } = Zs(), c = () => {
2007
- i.value = !1;
2008
- }, b = e, { closeTab: d, activeTab: p, tabs: O } = At(), A = oe(
2009
- () => typeof b.tabTransition == "string" ? { name: b.tabTransition } : b.tabTransition
2010
- ), I = oe(() => b.tabScrollMode === be.BOTH || b.tabScrollMode === be.BUTTON), S = b.tabScrollMode === be.BOTH || b.tabScrollMode === be.WHEEL, m = (k) => {
2011
- k.closable && d(k.id), i.value = !1;
2012
- }, _ = (k, h, w) => {
2013
- r.value && h && ot(() => {
2014
- r.value.isInView(h) || r.value.scrollIntoView(h);
2015
- }), p(k.id, w), o("active", k.id);
2016
- };
2017
- return (k, h) => (B(), V("div", _o, [
2018
- _e(k.$slots, "leftButton"),
2019
- $(xo, {
2020
- ref_key: "scrollContainerRef",
2021
- ref: r,
2022
- space: e.space,
2023
- "is-scroll-wheel": C(S),
2024
- "is-scroll-button": I.value
2025
- }, {
2026
- default: te(() => [
2027
- $(ln, Dn({
2028
- key: "tab-list-transition",
2029
- tag: "ul",
2030
- class: "stack-tab__nav"
2031
- }, A.value, { appear: "" }), {
2032
- default: te(() => [
2033
- (B(!0), V(Ke, null, Tt(C(O), (w, u) => (B(), se(Js, {
2034
- key: w.id,
2035
- contextmenu: e.contextmenu,
2036
- item: w,
2037
- onContextmenu: Le(
2038
- (T) => C(a)(T, w, u, C(O).length),
2039
- ["prevent"]
2040
- ),
2041
- onMouseup: Le((T) => m(w), ["middle", "prevent"]),
2042
- onClose: m,
2043
- onActive: _
2044
- }, null, 8, ["contextmenu", "item", "onContextmenu", "onMouseup"]))), 128))
2045
- ]),
2046
- _: 1
2047
- }, 16)
2048
- ]),
2049
- _: 1
2050
- }, 8, ["space", "is-scroll-wheel", "is-scroll-button"]),
2051
- _e(k.$slots, "rightButton"),
2052
- $(vt, {
2053
- "icon-class": C(s) ? "stack-tab__icon-restore" : "stack-tab__icon-fullscreen",
2054
- title: C(n)("VueStackTab.maximum"),
2055
- onClick: h[0] || (h[0] = (w) => s.value = !C(s))
2056
- }, null, 8, ["icon-class", "title"]),
2057
- $(ct, {
2058
- name: "stack-tab-zoom",
2059
- appear: ""
2060
- }, {
2061
- default: te(() => [
2062
- C(i) ? (B(), se(js, {
2063
- key: "context-menu-transition",
2064
- left: C(l).left,
2065
- top: C(l).top,
2066
- "tab-item": C(l).item,
2067
- max: C(l).max,
2068
- index: C(l).index,
2069
- onClose: c
2070
- }, null, 8, ["left", "top", "tab-item", "max", "index"])) : ie("", !0)
2071
- ]),
2072
- _: 1
2073
- })
2074
- ]));
2075
- }
2076
- }), Eo = { class: "stack-tab__container" }, So = { class: "stack-tab__iframe-wrapper" }, Ao = { class: "stack-tab__iframe-loading" }, Oo = { class: "stack-tab__iframe-loading-text" }, Io = ["src", "onLoad"], Mo = 5e3, Ro = /* @__PURE__ */ q({
2077
- __name: "StackTabs",
2078
- props: {
2079
- defaultTabs: { default: () => [] },
2080
- max: { default: 20 },
2081
- contextmenu: { type: [Boolean, Object], default: !0 },
2082
- pageTransition: { default: "stack-tab-swap" },
2083
- pageTransitionBack: { default: "stack-tab-swap-back" },
2084
- tabTransition: { default: "stack-tab-zoom" },
2085
- tabScrollMode: { default: be.BOTH },
2086
- width: { default: "100%" },
2087
- height: { default: "100%" },
2088
- i18n: { default: "zh-CN" },
2089
- space: { default: 300 },
2090
- globalScroll: { type: Boolean, default: !1 },
2091
- iframePath: {},
2092
- sessionPrefix: { default: "" },
2093
- iframeAllowedOrigins: { default: () => [] }
2094
- },
2095
- emits: ["onActive", "onPageLoaded"],
2096
- setup(e, { emit: t }) {
2097
- const {
2098
- tabs: n,
2099
- caches: s,
2100
- refreshKey: o,
2101
- excludedCacheIdsForRefresh: r,
2102
- iframeRefreshKeys: i,
2103
- destroy: l,
2104
- addPage: a,
2105
- initialize: c,
2106
- setMaxSize: b,
2107
- setGlobalScroll: d,
2108
- setSessionPrefix: p
2109
- } = Xe(), O = t, A = e, { changeLocale: I, t: S } = ze(), m = D(!1);
2110
- Nn("maximum", m);
2111
- const { setIFramePath: _, openTab: k } = At();
2112
- _(A.iframePath), d(A.globalScroll), I(A.i18n);
2113
- const h = (M, L) => a(M, L), w = (M) => {
2114
- O("onActive", M);
2115
- };
2116
- b(A.max);
2117
- const u = () => {
2118
- O("onPageLoaded");
2119
- }, T = D(A.pageTransition), v = Te(), P = () => {
2120
- T.value = A.pageTransition;
2121
- }, F = () => {
2122
- T.value = A.pageTransitionBack;
2123
- };
2124
- v.on("FORWARD", P), v.on("BACKWARD", F);
2125
- const y = oe(() => n.value.filter((M) => M.iframe)), g = ne({}), f = oe(
2126
- () => y.value.filter((M) => M.active && (M.url ?? "") && !Bt(M.url ?? ""))
2127
- );
2128
- rt(
2129
- f,
2130
- (M) => {
2131
- for (const L of M) g[L.id] = !0;
2132
- },
2133
- { immediate: !0, deep: !0 }
2134
- );
2135
- const x = (M) => {
2136
- const L = M.url ?? "";
2137
- return Bt(L) ? "about:blank" : g[M.id] ? L : "about:blank";
2138
- }, E = (M) => M.iframeRefreshMode === "reload" ? `${M.id}-${i.value[M.id] ?? 0}` : M.id, R = ne({}), z = ne({}), G = /* @__PURE__ */ new Map(), De = (M) => {
2139
- const L = G.get(M);
2140
- L && (clearTimeout(L), G.delete(M)), R[M] = !0, z[M] = !1;
2141
- }, Ye = (M) => {
2142
- if (R[M]) return;
2143
- z[M] = !0;
2144
- const L = G.get(M);
2145
- L && clearTimeout(L), G.set(
2146
- M,
2147
- setTimeout(() => {
2148
- G.delete(M), z[M] = !1;
2149
- }, Mo)
2150
- );
2151
- };
2152
- rt(
2153
- f,
2154
- (M) => {
2155
- for (const L of M) Ye(L.id);
2156
- },
2157
- { immediate: !0, deep: !0 }
2158
- );
2159
- const we = ne({}), Je = (M, L) => {
2160
- L ? we[M] = L : delete we[M];
2161
- }, Mt = (M) => {
2162
- const j = we[M];
2163
- if (j?.contentWindow)
2164
- try {
2165
- j.contentWindow.postMessage({ type: "vue-stack-tabs:refresh" }, "*");
2166
- } catch {
2167
- }
2168
- }, Cn = oe(() => {
2169
- const M = typeof window < "u" ? window.location.origin : "", L = A.iframeAllowedOrigins ?? [];
2170
- return [M, ...L].filter(Boolean);
2171
- }), Rt = (M) => {
2172
- if (!Cn.value.includes(M.origin)) return;
2173
- const L = M.data;
2174
- if (!L || typeof L != "object" || L.type !== "vue-stack-tabs:openTab") return;
2175
- const j = L.payload;
2176
- j && typeof j == "object" && j.title && j.path && k(j);
2177
- };
2178
- return v.on(
2179
- "REFRESH_IFRAME_POSTMESSAGE",
2180
- Mt
2181
- ), Pn(() => {
2182
- p(A.sessionPrefix), c(A.defaultTabs), window.addEventListener("message", Rt);
2183
- }), $n(() => {
2184
- window.removeEventListener("message", Rt), v.off(
2185
- "REFRESH_IFRAME_POSTMESSAGE",
2186
- Mt
2187
- ), v.off("FORWARD", P), v.off("BACKWARD", F), l();
2188
- }), (M, L) => {
2189
- const j = cn("router-view");
2190
- return B(), V("div", {
2191
- class: de(["stack-tab", { "stack-tab__maximum": m.value }]),
2192
- style: Ze({
2193
- width: e.width,
2194
- height: e.height,
2195
- "z-index": m.value ? C(xt)("body *:not(.stack-tab,.stack-tab *)") : void 0
2196
- })
2197
- }, [
2198
- $(ko, {
2199
- space: e.space,
2200
- "tab-transition": e.tabTransition,
2201
- max: e.max,
2202
- onActive: w
2203
- }, {
2204
- leftButton: te(() => [
2205
- _e(M.$slots, "leftButton")
2206
- ]),
2207
- rightButton: te(() => [
2208
- _e(M.$slots, "rightButton")
2209
- ]),
2210
- _: 3
2211
- }, 8, ["space", "tab-transition", "max"]),
2212
- W("div", Eo, [
2213
- $(j, null, {
2214
- default: te(({ Component: ae, route: Se }) => [
2215
- $(ct, {
2216
- name: T.value,
2217
- appear: "",
2218
- mode: "out-in"
2219
- }, {
2220
- default: te(() => [
2221
- (B(), se(Vn, {
2222
- include: C(s),
2223
- exclude: C(r)
2224
- }, [
2225
- (B(), se(Wn(h(Se, ae)), {
2226
- key: `${Se.fullPath}_${C(o)}`,
2227
- onOnLoaded: u
2228
- }, null, 32))
2229
- ], 1032, ["include", "exclude"]))
2230
- ]),
2231
- _: 2
2232
- }, 1032, ["name"])
2233
- ]),
2234
- _: 1
2235
- }),
2236
- $(ln, {
2237
- name: e.pageTransition,
2238
- tag: "div",
2239
- class: "stack-tab__iframes",
2240
- appear: ""
2241
- }, {
2242
- default: te(() => [
2243
- (B(!0), V(Ke, null, Tt(y.value, (ae) => (B(), se(ct, {
2244
- key: E(ae),
2245
- name: e.pageTransition,
2246
- appear: ""
2247
- }, {
2248
- default: te(() => [
2249
- it(W("div", So, [
2250
- it(W("div", Ao, [
2251
- W("span", Oo, yt(C(S)("VueStackTab.loading")), 1)
2252
- ], 512), [
2253
- [at, z[ae.id] !== !1]
2254
- ]),
2255
- W("iframe", {
2256
- ref_for: !0,
2257
- ref: (Se) => Je(ae.id, Se),
2258
- class: "stack-tab__iframe",
2259
- src: x(ae),
2260
- frameborder: "0",
2261
- onLoad: (Se) => De(ae.id)
2262
- }, null, 40, Io)
2263
- ], 512), [
2264
- [at, ae.active]
2265
- ])
2266
- ]),
2267
- _: 2
2268
- }, 1032, ["name"]))), 128))
2269
- ]),
2270
- _: 1
2271
- }, 8, ["name"])
2272
- ])
2273
- ], 6);
2274
- };
2275
- }
2276
- }), It = typeof Buffer == "function";
2277
- typeof TextDecoder == "function" && new TextDecoder();
2278
- const rn = typeof TextEncoder == "function" ? new TextEncoder() : void 0, Co = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", Me = Array.prototype.slice.call(Co);
2279
- ((e) => {
2280
- let t = {};
2281
- return e.forEach((n, s) => t[n] = s), t;
2282
- })(Me);
2283
- const X = String.fromCharCode.bind(String);
2284
- typeof Uint8Array.from == "function" && Uint8Array.from.bind(Uint8Array);
2285
- const Lo = (e) => e.replace(/=/g, "").replace(/[+\/]/g, (t) => t == "+" ? "-" : "_"), Bo = (e) => {
2286
- let t, n, s, o, r = "";
2287
- const i = e.length % 3;
2288
- for (let l = 0; l < e.length; ) {
2289
- if ((n = e.charCodeAt(l++)) > 255 || (s = e.charCodeAt(l++)) > 255 || (o = e.charCodeAt(l++)) > 255)
2290
- throw new TypeError("invalid character found");
2291
- t = n << 16 | s << 8 | o, r += Me[t >> 18 & 63] + Me[t >> 12 & 63] + Me[t >> 6 & 63] + Me[t & 63];
2292
- }
2293
- return i ? r.slice(0, i - 3) + "===".substring(i) : r;
2294
- }, Rn = typeof btoa == "function" ? (e) => btoa(e) : It ? (e) => Buffer.from(e, "binary").toString("base64") : Bo, zo = It ? (e) => Buffer.from(e).toString("base64") : (e) => {
2295
- let n = [];
2296
- for (let s = 0, o = e.length; s < o; s += 4096)
2297
- n.push(X.apply(null, e.subarray(s, s + 4096)));
2298
- return Rn(n.join(""));
2299
- }, Do = (e) => {
2300
- if (e.length < 2) {
2301
- var t = e.charCodeAt(0);
2302
- return t < 128 ? e : t < 2048 ? X(192 | t >>> 6) + X(128 | t & 63) : X(224 | t >>> 12 & 15) + X(128 | t >>> 6 & 63) + X(128 | t & 63);
2303
- } else {
2304
- var t = 65536 + (e.charCodeAt(0) - 55296) * 1024 + (e.charCodeAt(1) - 56320);
2305
- return X(240 | t >>> 18 & 7) + X(128 | t >>> 12 & 63) + X(128 | t >>> 6 & 63) + X(128 | t & 63);
2306
- }
2307
- }, No = /[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g, Po = (e) => e.replace(No, Do), an = It ? (e) => Buffer.from(e, "utf8").toString("base64") : rn ? (e) => zo(rn.encode(e)) : (e) => Rn(Po(e)), $o = (e, t = !1) => t ? Lo(an(e)) : an(e), Vo = (e) => {
2308
- const s = `<?xml version="1.0" encoding="UTF-8"?><svg id="a" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1167.06 237.75"><path d="M79.24,19.73h108.91v29.7h-108.91v-29.7Z" style="fill:#79a7ff; stroke-width:0px;"/><path d="M179.24,199.67H20.26c-11.21-.07-20.26-9.17-20.26-20.38V20.39C0,9.18,9.05.07,20.26,0h59.49c3.51.07,6.34,2.9,6.41,6.42v44.36c0,3.54-2.87,6.41-6.41,6.41s-6.41-2.86-6.42-6.4V12.36H20.25c-4.13.07-7.44,3.44-7.44,7.56v159.41c0,4.13,3.31,7.49,7.44,7.56h158.98c4.13-.07,7.44-3.44,7.44-7.56V51.84c0-3.54,2.87-6.41,6.41-6.42,3.55,0,6.42,2.87,6.42,6.42v127.45c0,11.21-9.05,20.32-20.26,20.39h0Z" style="fill:#377dff; stroke-width:0px;"/><path d="M192.8,60.77c-3.66-.07-6.61-3.02-6.68-6.68v-18.23c.09-4.29-3.32-7.83-7.6-7.92h-96.43c-3.69,0-6.69-2.99-6.69-6.69s2.99-6.69,6.69-6.69h96.27c11.69.08,21.13,9.58,21.13,21.27v18.25c0,3.69-2.99,6.68-6.68,6.68h0Z" style="fill:#377dff; stroke-width:0px;"/><path d="M193.08,58.67H10.15c-3.61-.08-6.48-3.07-6.41-6.68-.08-3.62,2.79-6.61,6.4-6.69,0,0,0,0,0,0h182.93c3.62.08,6.48,3.08,6.41,6.69.07,3.61-2.79,6.6-6.41,6.68h0Z" style="fill:#377dff; stroke-width:0px;"/><path d="M137.2,58.67c-3.42.24-6.4-2.32-6.68-5.74v-28.15c.55-3.69,4-6.24,7.69-5.69,2.94.44,5.24,2.75,5.69,5.69v28.15c-.28,3.42-3.26,5.98-6.68,5.74h-.02Z" style="fill:#377dff; stroke-width:0px;"/><path d="M99.78,100.48l-12.83-22.22h-18.39l31.22,54.05,31.22-54.05h-18.39l-12.83,22.22Z" style="fill:#00d797; stroke-width:0px;"/><path d="M135.28,78.26l-35.49,61.43-35.44-61.43h-20.11l55.55,96.2,55.55-96.2s-20.06,0-20.06,0ZM313.33,59.95c0,.52-.67,1.84-2,3.95s-3.3,5.2-5.9,9.28-5.75,9.28-9.46,15.61c-3.7,6.33-7.52,13.34-11.45,21.04-4.51,8.85-7.76,15.8-9.76,20.86s-2.99,9.41-2.99,13.05c0,2.89,1.53,5.44,4.6,7.63,3.7-2.89,7.34-6.33,10.93-10.32,3.58-3.99,7.13-8.44,10.63-13.36s7.55-11.13,12.14-18.65c4.6-7.52,8.69-14.43,12.27-20.73-.17-.52-.36-1.04-.56-1.56s-.3-.95-.3-1.3c0-2.72.55-5.26,1.65-7.63,1.1-2.37,2.47-4.68,4.12-6.94s4.12-5.44,7.42-9.54c.87-1.1,1.94-1.65,3.21-1.65,2.08,0,3.12,1.33,3.12,3.99s-1.08,6.84-3.25,12.53c-2.17,5.7-5.37,12.39-9.59,20.08s-9.47,16.29-15.74,25.81c-6.28,9.51-13.37,19.45-21.3,29.8-8.04,10.47-13.79,15.7-17.26,15.7-1.97,0-4.19-1.08-6.68-3.25s-4.63-5.13-6.42-8.89-2.69-7.78-2.69-12.06c0-2.54.53-5.81,1.6-9.8s2.75-8.78,5.03-14.36,4.87-11.09,7.76-16.53c3.01-5.72,5.65-10.47,7.94-14.23,2.28-3.76,4.87-7.94,7.76-12.53,2.89-4.6,4.34-7.1,4.34-7.5,0-.87-.58-1.3-1.73-1.3-3.35,0-7.82,1.71-13.4,5.12s-12.85,8.59-21.82,15.53c-3.41,2.66-5.57,4.38-6.46,5.16s-1.34,1.43-1.34,1.95c0,.69.55,1.04,1.65,1.04.46,0,2.02-.17,4.68-.52s4.77-.52,6.33-.52c2.6,0,3.9.46,3.9,1.39,0,.81-.54,1.45-1.61,1.91-1.07.46-2.54.93-4.42,1.39s-4.44,1.1-7.68,1.91c-3.47.93-7.16,2.25-11.06,3.99-3.9,1.73-6.14,2.6-6.72,2.6-1.1,0-1.78-.4-2.04-1.21s-.39-2.14-.39-3.99c0-8.21,1.36-14.56,4.08-19.04s7.58-9.15,14.57-14.01c7.98-5.55,15.61-10.16,22.9-13.84,7.29-3.67,13.58-6.36,18.87-8.07s9.18-2.56,11.67-2.56,4.84,1.56,7.24,4.68,3.6,6.42,3.6,9.89h0ZM366.34,124.75c-8.39,11.1-14.76,19-19.13,23.68s-7.94,7.03-10.71,7.03c-2.2,0-4.22-.91-6.07-2.73-1.85-1.82-3.28-4.28-4.29-7.37s-1.52-6.4-1.52-9.93c0-2.31.22-4.39.65-6.25.43-1.85,1.26-3.89,2.47-6.12s2.82-4.64,4.81-7.24c2-2.6,4.44-5.55,7.33-8.85,1.73-2.02,3.19-3.73,4.38-5.12,1.18-1.39,2.34-2.33,3.47-2.82s2.96-.74,5.51-.74c1.85,0,3.61.25,5.29.74,1.68.49,2.52,1,2.52,1.52,0,1.04-.85,2.92-2.56,5.64s-4.45,6.03-8.24,9.93c-3.79,3.9-8.17,7.74-13.14,11.49-1.1,3.41-1.65,6.01-1.65,7.81,0,2.49.95,3.73,2.86,3.73.69,0,1.85-.59,3.47-1.78,1.62-1.18,4.35-3.47,8.2-6.85,3.84-3.38,7.3-6.38,10.37-8.98,2.25-1.97,4.87-4.9,7.85-8.8s5.39-6.84,7.24-8.8c4.28-4.51,7.2-7.44,8.76-8.8s3.06-2.04,4.51-2.04,2.33.43,2.82,1.3c.49.87.74,2.63.74,5.29,0,1.21-.12,2.2-.35,2.95s-.71,1.72-1.43,2.91-2.18,3.37-4.38,6.55-4.8,6.94-7.81,11.28c-1.66,2.38-3.09,4.93-4.25,7.59-1.21,2.75-1.82,4.81-1.82,6.2,0,3.01,1.18,4.51,3.56,4.51,1.96,0,4.25-.81,6.85-2.43s6.59-4.54,11.97-8.76v5.81c-6.77,6.25-11.77,10.79-15.01,13.62s-6.04,4.97-8.41,6.42-4.63,2.17-6.77,2.17c-4.86,0-7.29-2.89-7.29-8.67,0-2.2.72-5.16,2.17-8.89,1.44-3.73,3.79-9.12,7.03-16.18v-.02Z" style="fill:#306fff; stroke-width:0px;"/><path d="M407.71,133.77v2.17c0,3.41.84,6.07,2.52,7.98,1.68,1.91,3.87,2.86,6.59,2.86s5.77-.66,8.8-2c3.04-1.33,6.06-3.09,9.07-5.29s6.68-5.15,11.02-8.85v5.29c-6.54,7.87-12.67,13.89-18.39,18.09-5.72,4.19-11.54,6.29-17.44,6.29-5.15,0-9.22-2-12.23-5.99s-4.51-9.46-4.51-16.39c0-6.07,1.42-11.58,4.25-16.52s7.46-10.16,13.88-15.66c4.39-3.76,8.76-6.59,13.1-8.5s8.21-2.86,11.62-2.86c2.72,0,4.87.62,6.46,1.86s2.39,3.11,2.39,5.59c0,3.64-1.36,7.27-4.08,10.89s-6.87,7.2-12.45,10.76c-5.58,3.56-12.45,6.98-20.6,10.28h0ZM408.58,128.13c5.2-2.02,9.66-4.54,13.36-7.55,3.7-3.01,6.43-5.88,8.2-8.63,1.76-2.75,2.65-4.76,2.65-6.03s-.61-2-1.82-2c-1.04,0-2.73.67-5.07,2s-4.71,3.07-7.11,5.21-4.55,4.66-6.46,7.55c-1.9,2.86-3.17,6.08-3.73,9.46h-.02ZM585.37,132.9c-1.45-2.66-3.61-5.06-6.51-7.2-2.89-2.14-6.15-3.86-9.76-5.16s-7.39-2.27-11.32-2.91c-11.68-1.74-22.58-5.52-32.7-11.36-.87-.46-1.79-1.44-2.78-2.95-.98-1.5-1.47-2.95-1.47-4.34,0-5.09.85-10.19,2.56-15.31,1.71-5.12,3.89-9.12,6.55-12.01,4.28-4.8,11.98-8.99,23.12-12.58,11.13-3.58,23.67-5.38,37.6-5.38,8.33,0,14.76.64,19.3,1.91s6.81,3.24,6.81,5.9c0,4.34-.59,7.69-1.78,10.06s-2.46,3.95-3.82,4.73c-1.36.78-3.75,1.84-7.16,3.17-3.64,1.27-6.81,2.6-9.5,3.99s-4.99,2.72-6.9,3.99c-1.91,1.27-3.09,1.91-3.56,1.91-.58,0-.87-.23-.87-.69,0-.98,1.03-2.47,3.08-4.47s4.58-3.74,7.59-5.25c3.18-1.68,4.77-2.75,4.77-3.21,0-.75-1.76-1.13-5.29-1.13-10.7,0-20.59.95-29.67,2.86s-16.24,4.42-21.47,7.55c-5.23,3.12-7.85,6.3-7.85,9.54,0,2.02,1.08,3.46,3.25,4.29,2.17.84,6.95,2.24,14.36,4.21,7.4,1.97,14.02,4.22,19.86,6.77,8.38,3.59,14.6,7.32,18.65,11.19,4.05,3.88,6.07,8.21,6.07,13.01,0,3.3-.8,6.61-2.39,9.93-1.59,3.33-3.92,6.38-6.98,9.15-3.07,2.78-6.59,5.06-10.58,6.85-3.41,1.45-7.71,2.8-12.88,4.08-5.18,1.27-10.79,2.27-16.83,2.99-6.04.72-11.81,1.08-17.31,1.08-10.12,0-18.26-.95-24.42-2.86s-9.24-4.8-9.24-8.67c0-1.74,1.04-4.44,3.12-8.11s4.54-6.14,7.37-7.42c2.49-.98,4.89-1.55,7.2-1.69,2.31-.14,3.47.13,3.47.82,0,.17-.09.35-.26.52s-.38.32-.61.43c-.23.12-.46.23-.69.35-1.16.46-2.1.82-2.82,1.08-.72.26-1.3.52-1.74.78-.43.26-.65.62-.65,1.08,0,1.21,5.99,1.82,17.96,1.82,10.41,0,18.94-.38,25.59-1.13s12.52-2.11,17.61-4.08c5.09-1.97,9.71-4.68,13.88-8.15l.04.02ZM640.8,85.63h3.73c3.06-5.49,5.84-9.38,8.33-11.67,2.49-2.28,5.32-3.43,8.5-3.43s4.77.72,4.77,2.17c0,.69-1.24,2.57-3.73,5.64s-4.37,5.64-5.64,7.72c1.96.23,3.71.43,5.25.61,1.53.17,2.73.32,3.6.43-3.3,6.13-7.43,12.4-12.4,18.82l-4.08-.3c-1.1-.09-2.21-.17-3.34-.26s-2.5-.19-4.12-.3c-3.12,5.03-5.74,9.53-7.85,13.49s-3.73,7.59-4.86,10.89-1.69,6.42-1.69,9.37c0,3.99,1.59,5.99,4.77,5.99,2.2,0,5.07-1.17,8.63-3.51s8.31-5.94,14.27-10.8v5.81c-15.61,16.95-27.15,25.42-34.61,25.42-2.6,0-4.7-1.01-6.29-3.04-1.59-2.02-2.38-4.63-2.38-7.81,0-2.14.45-4.68,1.34-7.63.9-2.95,2.5-7.4,4.81-13.36-.81.69-1.58,1.37-2.3,2.04s-1.39,1.27-2,1.82-1.26,1.13-1.95,1.73c-.69.61-1.39,1.23-2.08,1.87v-5.99c6.07-5.09,13.42-14.02,22.03-26.8-.87-.06-1.68-.1-2.43-.13s-1.65-.04-2.69-.04c-3.41,0-5.96.23-7.63.69-.69.17-1.34.36-1.95.56s-1.03.3-1.26.3-.35-.17-.35-.52c0-1.91,1.18-4.77,3.56-8.59,1.91-3.24,3.72-5.64,5.42-7.2,1.71-1.56,3.79-2.62,6.25-3.17,2.46-.55,5.91-.82,10.37-.82h0Z" style="fill:#306fff; stroke-width:0px;"/><path d="M664.91,115.12c8.79-7.98,17.32-13.91,25.59-17.78s14.66-5.81,19.17-5.81c1.21,0,2.34.51,3.38,1.52,1.04,1,1.88,2.19,2.47,3.51.61,1.33.91,2.31.91,2.95,0,1.04-.41,1.81-1.21,2.3-.81.49-2.23,1.08-4.25,1.78.4.93.92,2.11,1.56,3.56s1.13,2.62,1.47,3.51c.35.9.52,1.69.52,2.39,0,1.39-1.4,3.98-4.21,7.76-2.81,3.79-4.77,6.58-5.9,8.37-1.13,1.79-1.69,3.99-1.69,6.59,0,4.28,1.96,6.42,5.9,6.42s10.38-3.79,19-11.36v5.29c-14.63,16.25-25.1,24.38-31.4,24.38-2.26,0-3.86-.74-4.81-2.21s-1.43-3.66-1.43-6.55c0-4.57,1.65-11.19,4.94-19.86-8.44,9.37-14.72,16.03-18.82,20-4.11,3.96-7.49,5.94-10.15,5.94-1.27,0-2.86-1.1-4.77-3.3-1.91-2.2-3.6-5.04-5.07-8.54-1.47-3.5-2.21-7.13-2.21-10.89,0-2.72.26-4.99.78-6.81s1.53-3.69,3.04-5.59c1.5-1.91,3.9-4.42,7.2-7.55v-.02ZM706.46,105.58c-15.04,6.88-25.75,12.72-32.14,17.52s-9.59,9.75-9.59,14.83c0,1.85.32,3.37.95,4.55.64,1.19,1.5,1.78,2.6,1.78.64,0,1.76-.4,3.38-1.21,6.07-3.58,11.62-8.25,16.66-14.01,5.03-5.75,11.07-13.58,18.13-23.46h.01Z" style="fill:#306fff; stroke-width:0px;"/><path d="M779.07,130.82v5.81c-6.19,6.07-11.23,10.79-15.14,14.14-3.9,3.35-7.55,5.96-10.93,7.81-3.38,1.85-6.69,2.78-9.93,2.78s-6.1-1.26-8.76-3.77c-2.66-2.52-4.74-5.81-6.25-9.89-1.5-4.08-2.26-8.4-2.26-12.97,0-3.93.87-7.43,2.6-10.5,1.74-3.07,5.09-7.03,10.06-11.88,5.9-5.78,11.38-10.25,16.44-13.4s9.04-4.73,11.93-4.73c2.08,0,3.85.72,5.29,2.17s2.17,3.27,2.17,5.46c0,1.85-.95,4.48-2.86,7.89-1.91,3.41-4.05,6.38-6.42,8.89-2.37,2.52-4.25,3.77-5.64,3.77-1.5,0-2.25-.81-2.25-2.43.06-.46.1-.9.13-1.3s.04-.81.04-1.21c0-.69-.25-1.08-.74-1.17s-1.08.13-1.78.65c-5.78,4.05-9.75,6.9-11.88,8.54-2.14,1.65-3.83,3.31-5.07,4.99s-1.87,3.44-1.87,5.29c0,3.41,1.1,6.19,3.3,8.33s5.06,3.21,8.59,3.21,8.02-1.4,13.14-4.21c5.12-2.8,11.15-6.9,18.09-12.27h0Z" style="fill:#306fff; stroke-width:0px;"/><path d="M844.13,130.65v5.81c-6.48,7.58-11.91,13.32-16.31,17.22s-8.07,5.86-11.02,5.86-5.39-.84-7.68-2.52c-2.29-1.68-4.34-3.99-6.16-6.94-1.82-2.95-3.98-7.05-6.46-12.32-2.95,3.64-5.61,7.04-7.98,10.19-2.37,3.15-4.02,5.25-4.94,6.29-.93,1.04-1.77,1.56-2.52,1.56-1.56,0-2.69-1-3.38-2.99-.69-2-1.04-4.9-1.04-8.72,0-5.21.62-10.22,1.87-15.05,1.24-4.83,3.04-9.53,5.38-14.1s5.35-9.5,9.02-14.79c3.67-5.29,7.79-10.83,12.36-16.61,6.3-7.98,11.74-14.5,16.31-19.56,4.57-5.06,8.54-8.88,11.93-11.45,3.38-2.57,6.2-3.86,8.46-3.86,2.78,0,4.16,1.24,4.16,3.73,0,2.14-5.12,9.85-15.35,23.12-10.24,13.27-25.16,31.39-44.76,54.35v7.46c13.13-14.05,23.69-24.49,31.71-31.31,8.01-6.82,14.21-10.24,18.61-10.24,1.79,0,3.18,1.06,4.16,3.17s1.47,4.55,1.47,7.33c0,5.67-2.43,10.92-7.29,15.74-4.86,4.83-12.32,10.37-22.38,16.61,1.74,2.6,3.27,4.5,4.6,5.68,1.33,1.19,3.01,1.78,5.03,1.78,1.79,0,3.73-.61,5.81-1.82s4.21-2.75,6.38-4.6,5.51-4.86,10.02-9.02h-.01ZM809.86,135.07c2.2-1.45,4.93-3.69,8.2-6.72,3.27-3.04,6.06-6.19,8.37-9.46s3.47-6,3.47-8.2c0-.92-.41-1.39-1.21-1.39-2.2,0-5.97,2.11-11.32,6.33-5.35,4.22-10.57,9.63-15.66,16.22,2.2,0,4.92,1.07,8.15,3.21h0ZM951.78,140.71l2.86,2.17c-.75,1.62-1.47,3.04-2.17,4.25-.69,1.21-1.53,2.69-2.52,4.42-.98,1.73-1.73,3.04-2.25,3.9-4.34,7.58-8.41,11.36-12.23,11.36-1.62,0-3.01-.64-4.16-1.91-1.16-1.27-1.73-3.01-1.73-5.2,0-3.12,1.11-7.4,3.34-12.84,2.23-5.43,5.67-12.13,10.32-20.08s10.51-16.96,17.57-27.02c7.05-10.06,15.01-20.67,23.85-31.84-5.09-.75-11.13-1.13-18.13-1.13-8.04,0-16.99.9-26.85,2.69s-18.45,3.86-25.76,6.2c-7.32,2.34-10.97,4.06-10.97,5.16,0,.41.14.68.43.82.29.15.77.26,1.43.35s1.52.19,2.56.3c6.77.93,10.15,1.97,10.15,3.12,0,.58-1.47.85-4.42.82s-6.51-.04-10.67-.04c-3.3,0-5.68-.13-7.16-.39s-2.46-.75-2.95-1.47-.74-1.84-.74-3.34c0-.98.29-3.12.87-6.42,1.1-6.13,2.79-11.04,5.07-14.75,2.28-3.7,5.78-6.72,10.5-9.06,4.71-2.34,11.2-4.21,19.47-5.59,13.88-2.37,25.36-3.56,34.44-3.56,6.71,0,12,.27,15.88.82,3.87.55,6.72,1.34,8.54,2.39,1.82,1.04,2.98,2.07,3.47,3.08s1.14,2.76,1.95,5.25l2.69,7.98c.17.52.32.94.43,1.26.12.32.22.65.3,1,.09.35.13.67.13.95,0,2.26-.51,4.28-1.52,6.07s-2.86,4.48-5.55,8.07-4.67,6.39-5.94,8.41c-14.92,24.23-25.1,42.16-30.53,53.78v.02ZM991.94,115.12c8.79-7.98,17.32-13.91,25.59-17.78s14.66-5.81,19.17-5.81c1.21,0,2.34.51,3.38,1.52,1.04,1,1.88,2.19,2.47,3.51.61,1.33.91,2.31.91,2.95,0,1.04-.41,1.81-1.21,2.3-.81.49-2.23,1.08-4.25,1.78.4.93.92,2.11,1.56,3.56s1.13,2.62,1.47,3.51c.35.9.52,1.69.52,2.39,0,1.39-1.4,3.98-4.21,7.76-2.81,3.79-4.77,6.58-5.9,8.37-1.13,1.79-1.69,3.99-1.69,6.59,0,4.28,1.96,6.42,5.9,6.42s10.38-3.79,19-11.36v5.29c-14.63,16.25-25.1,24.38-31.4,24.38-2.26,0-3.86-.74-4.81-2.21s-1.43-3.66-1.43-6.55c0-4.57,1.65-11.19,4.94-19.86-8.44,9.37-14.72,16.03-18.82,20-4.11,3.96-7.49,5.94-10.15,5.94-1.27,0-2.86-1.1-4.77-3.3-1.91-2.2-3.6-5.04-5.07-8.54-1.47-3.5-2.21-7.13-2.21-10.89,0-2.72.26-4.99.78-6.81s1.53-3.69,3.04-5.59c1.5-1.91,3.9-4.42,7.2-7.55v-.02ZM1033.49,105.58c-15.04,6.88-25.75,12.72-32.14,17.52s-9.59,9.75-9.59,14.83c0,1.85.32,3.37.95,4.55.64,1.19,1.5,1.78,2.6,1.78.64,0,1.76-.4,3.38-1.21,6.07-3.58,11.62-8.25,16.66-14.01,5.03-5.75,11.07-13.58,18.13-23.46h.01Z" style="fill:#306fff; stroke-width:0px;"/><path d="M1111.3,130.82v5.64c-6.02,3.82-10.76,5.72-14.23,5.72-1.91,0-3.93-.32-6.07-.95-5.2,6.59-9.67,11.42-13.4,14.49s-7.47,4.6-11.23,4.6c-4.34,0-7.68-2.29-10.02-6.85-2.34-4.57-3.51-10.24-3.51-17,0-9.2,2.78-19.21,8.33-30.06,5.56-10.85,12.29-21.07,20.08-30.45,7.84-9.46,15.43-17.28,22.77-23.46,7.34-6.19,12.32-9.28,14.92-9.28s3.73,1.71,3.73,5.12c0,15.15-19.43,41.58-58.29,79.29-.12,1.04-.17,3.09-.17,6.16,0,7.98,2.14,11.97,6.42,11.97,1.68,0,3.37-.68,5.07-2.04,1.71-1.36,4.32-3.95,7.85-7.76-1.39-3.12-2.08-5.44-2.08-6.94,0-3.18,1.3-6.62,3.9-10.32s5.57-6.9,8.89-9.59c3.33-2.69,5.74-4.03,7.24-4.03,2.37,0,3.56,1.71,3.56,5.12,0,2.6-.68,5.72-2.04,9.37-1.36,3.64-3.34,7.81-5.94,12.49.98.81,1.76,1.4,2.34,1.78s1.45.56,2.6.56c2.66,0,5.75-1.18,9.28-3.56v-.02ZM1067.24,117.81c3.01-2.6,6.03-5.68,9.06-9.24s7.47-9.01,13.32-16.35c5.61-7.05,10.02-12.94,13.23-17.65s5.62-8.63,7.24-11.75c1.62-3.12,2.43-5.26,2.43-6.42,0-.87-.23-1.3-.69-1.3-1.27,0-3.92,2.1-7.94,6.29-4.02,4.19-8.6,9.93-13.75,17.22-7.11,10.06-12.26,17.64-15.44,22.73-3.18,5.09-5.67,10.58-7.46,16.48h0Z" style="fill:#306fff; stroke-width:0px;"/><path d="M1110.96,133.08v-2.08c14.92-15.73,25.18-26.75,30.79-33.05,1.27-7.11,4.34-10.67,9.19-10.67,1.21,0,2.52.35,3.9,1.04l.52,1.65c-.23.69-.35,1.68-.35,2.95,0,1.1.42,3.14,1.26,6.12s1.49,5.48,1.95,7.5.69,4.31.69,6.85c0,3.82-.87,7.48-2.6,10.97-1.73,3.5-4.25,6.85-7.55,10.06-3.3,3.21-7.55,6.49-12.75,9.85,2.08.35,3.73.52,4.94.52,2.37,0,4.93-.59,7.68-1.78,2.75-1.18,5.55-2.78,8.41-4.77,2.86-2,6.2-4.58,10.02-7.76v5.81c-7.4,7.23-14.02,12.71-19.86,16.44s-10.87,5.59-15.09,5.59c-5.44,0-10.47-2.31-15.09-6.94-2.72-2.78-4.41-5.43-5.08-7.98-.67-2.54-1-5.99-1-10.32h.02ZM1143.31,119.8l-1.56-12.66c-3.59,4.05-11.25,11.83-22.99,23.33,3.47.75,5.84,1.76,7.11,3.04,1.27,1.27,3.06,3.73,5.38,7.37,3.93-1.62,6.95-3.83,9.07-6.64,2.11-2.8,3.17-6.64,3.17-11.49,0-.58-.01-1.1-.04-1.56s-.07-.92-.13-1.39h0Z" style="fill:#306fff; stroke-width:0px;"/><g style="isolation:isolate;"><text transform="translate(943.45 229.96)" style="fill:#00d797; font-family:ArialMT, Arial; font-size:24px; isolation:isolate;"><tspan x="0" y="0">version: ${e}</tspan></text></g></svg>`, i = "data:image/svg+xml;base64," + $o(s), l = "font-size: 1px; padding: " + Math.floor(100 / 4) + "px " + Math.floor(580 / 2) + "px; line-height: " + Math.floor(100 / 2) + "px;";
2309
- window.console.log(
2310
- "%c+",
2311
- l + `background-image: url(${i});background-size: 580px 100px;background-repeat: norepeat; color: transparent;`
2312
- );
2313
- }, Wo = "FORWARD", Uo = "BACKWARD";
2314
- function Fo() {
2315
- const e = un(), { attrs: t, props: n } = e, s = t.tId ?? n.tId, o = t.pId ?? n.pId, r = Un(), i = wt(), l = Te(), { getTab: a, markCacheForEviction: c, getComponent: b, addPageScroller: d } = Xe(), p = r.query.__tab;
2316
- return {
2317
- forward: (S) => {
2318
- const m = re({ __tab: p }, S.query);
2319
- l.emit(Wo), i.push({ path: S.path, query: m });
2320
- },
2321
- backward: (S, m) => {
2322
- const _ = a(s);
2323
- if (!_) return;
2324
- const k = _.pages;
2325
- let h = 0;
2326
- if (typeof S == "number")
2327
- h = Math.abs(S);
2328
- else {
2329
- const T = _t(S);
2330
- m = re(T.query, m);
2331
- const v = k.list();
2332
- let P = !1;
2333
- for (let F = k.size() - 2; F >= 0; F--)
2334
- if (h++, v[F]?.path === T.path) {
2335
- P = !0;
2336
- break;
2337
- }
2338
- if (!P) return;
2339
- }
2340
- if (h <= 0 || k.size() <= h) return;
2341
- for (let T = 0; T < h; T++) {
2342
- const v = k.pop();
2343
- v && c(v.id);
2344
- }
2345
- const w = k.peek();
2346
- if (!w) return;
2347
- const u = b(w.id);
2348
- if (u && m) {
2349
- const v = u.components?.DynamicComponent;
2350
- v?.props && (v.props = re(m, v.props));
2351
- }
2352
- l.emit(Uo), i.push({ path: w.path, query: w.query });
2353
- },
2354
- addScrollTarget: (...S) => {
2355
- d(o, ...S);
2356
- }
2357
- };
2358
- }
2359
- const Zo = /* @__PURE__ */ q({
2360
- __name: "iframe",
2361
- setup(e) {
2362
- return Fo(), () => {
2363
- };
2364
- }
2365
- }), Ko = () => {
2366
- const e = Te(), { attrs: t } = un();
2367
- Ee(() => {
2368
- s();
2369
- });
2370
- const n = () => {
2371
- e.emit(H.PAGE_LOADING, { tId: t.tId, value: !0 });
2372
- }, s = () => {
2373
- e.emit(H.PAGE_LOADING, { tId: t.tId, value: !1 });
2374
- };
2375
- return { openTabLoading: n, closeTabLoading: s };
2376
- }, Ho = "vue-stack-tabs:refresh", Go = "vue-stack-tabs:openTab";
2377
- function Xo(e) {
2378
- typeof window > "u" || !window.parent || window.parent.postMessage(
2379
- { type: Go, payload: e },
2380
- "*"
2381
- // 父窗口可校验 origin,此处用 * 便于跨子域
2382
- );
2383
- }
2384
- function Yo(e = () => window.location.reload()) {
2385
- if (typeof window > "u") return () => {
2386
- };
2387
- const t = (n) => {
2388
- n.data?.type === Ho && e();
2389
- };
2390
- return window.addEventListener("message", t), () => window.removeEventListener("message", t);
2391
- }
2392
- const Jo = {
2393
- install(e, t) {
2394
- Vo("1.0.0"), e.component("VueStackTabs", Ro).use(Ms).use(ss().getI18n(t));
2395
- }
2396
- };
2397
- export {
2398
- Zo as IFrame,
2399
- Go as MSG_OPEN_TAB,
2400
- Ho as MSG_REFRESH,
2401
- lt as Stack,
2402
- Ro as StackTab,
2403
- vt as TabHeaderButton,
2404
- be as TabScrollMode,
2405
- Jo as default,
2406
- Yo as onRefreshRequest,
2407
- Xo as postOpenTab,
2408
- At as useTabActions,
2409
- Ko as useTabLoading,
2410
- Fo as useTabRouter
2411
- };
1
+ import{Fragment as e,KeepAlive as t,Transition as a,TransitionGroup as r,cloneVNode as o,computed as n,createBlock as l,createCommentVNode as s,createElementBlock as i,createElementVNode as c,createVNode as u,defineComponent as d,getCurrentInstance as f,hasInjectionContext as b,inject as m,mergeProps as p,nextTick as v,normalizeClass as h,normalizeStyle as g,onActivated as y,onBeforeMount as k,onBeforeUnmount as _,onDeactivated as T,onMounted as w,onUnmounted as S,openBlock as I,provide as A,reactive as x,readonly as R,ref as C,renderList as P,renderSlot as E,resolveComponent as L,resolveDynamicComponent as M,shallowRef as O,toDisplayString as V,toRaw as W,triggerRef as B,unref as q,vShow as F,watch as j,withCtx as D,withDirectives as N,withModifiers as K}from"vue";import{isNavigationFailure as $,useRoute as z,useRouter as G}from"vue-router";var U=Object.defineProperty,H=(e,t)=>{let a={};for(var r in e)U(a,r,{get:e[r],enumerable:!0});return t||U(a,Symbol.toStringTag,{value:"Module"}),a},X=/* @__PURE__ */H({default:()=>J}),J={VueStackTab:{close:"close",closeLeft:"close left",closeRight:"close right",closeOthers:"close others",closeAll:"close all",reload:"reload",reloadAll:"reload all",maximum:"maximum",restore:"restore",undefined:"undefined",loading:"loading",iframeTitle:"Embedded tab page",iframeLoadTimeout:"IFrame loading timed out",retry:"Retry",openInNewWindow:"Open in new window",scrollLeft:"Scroll left",scrollRight:"Scroll right"}},Y=/* @__PURE__ */H({default:()=>Q}),Q={VueStackTab:{close:"关闭",closeLeft:"关闭左侧",closeRight:"关闭右侧",closeOthers:"关闭其他",closeAll:"关闭所有",reload:"刷新",reloadAll:"刷新所有",maximum:"最大化",restore:"还原",undefined:"未命名",loading:"加载中",iframeTitle:"标签页内嵌页面",iframeLoadTimeout:"iframe 加载超时",retry:"重试",openInNewWindow:"在新窗口打开",scrollLeft:"向左滚动",scrollRight:"向右滚动"}},Z=["__proto__","prototype","constructor"];function ee(e){const t=e.split("."),a=[];for(let r=0;r<t.length;r++){let e=t[r];for(;"\\"===e[e.length-1]&&void 0!==t[r+1];)e=e.slice(0,-1)+".",e+=t[++r];a.push(e)}return a.some(e=>-1!==Z.indexOf(e))?[]:a}function te(e,t){if(!function(e){const t=typeof e;return null!==e&&("object"===t||"function"===t)}(e))return"";const a=ee(t);if(0===a.length)return"";let r=Object.assign({},e);for(let o=0;o<a.length;o++){if("string"==typeof r[a[o]])return r[a[o]];if(r=r[a[o]],null==r){if(o!==a.length-1)return"";break}}return""}function ae(e,t){return Object.keys(t).forEach(a=>{t[a]instanceof Object&&a in e&&(t[a]={...t[a],...ae(e[a],t[a])})}),{...e||{},...t}}var re="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag,oe=/* @__PURE__ */(e=>re?Symbol(e):"_vt_"+e)("i18n");function ne(){return m(oe)}function le(e){const t=Object.assign({locale:"en",fallbackLocale:"en",messages:{}},e),a=C(t.locale),r=x({});return Object.entries(t.messages).forEach(([e,t])=>{r[e]=t}),{t(e,o){if(!e)return"";let n=te(r["string"==typeof o&&o?o:a.value],e)||te(r[t.fallbackLocale],e);if(o&&"string"!=typeof o){const e=function(e,t){if(Array.isArray(t)){const a={},r=[...e.matchAll(/{(.+?)}/g)];return r&&r.forEach((e,r)=>{t[r]&&(a[e[1]]=t[r])}),a}return t}(n,o);l=e,(Array.isArray(l)?l.length:Object.keys(l).length)&&(n=function(e,t){for(const a in t)e=e.replace(`{${a}}`,String(t[a]));return e}(n,e))}var l;return n||e},current:R(a),options:R(e||{}),install(e){e.config.globalProperties.$t=this.t,e.provide(oe,this)},changeLocale(e){a.value=e},setLocaleMessage(e,t){r[e]=ae(W(r[e]||{}),t)},getLocaleMessage:e=>r[e]||{}}}var se=new Set(["__proto__","constructor","prototype"]),ie=e=>"object"==typeof e&&null!==e&&!Array.isArray(e),ce=(e,t)=>{const a={...e};for(const[r,o]of Object.entries(t)){if(se.has(r))continue;const e=a[r];a[r]=ie(e)&&ie(o)?ce(e,o):o}return a},ue=()=>{const e=/* @__PURE__ */Object.assign({"./lang/en.ts":X,"./lang/zh-CN.ts":Y});return{getI18n:t=>{const a=((e,t)=>{const a={...e};if(!t)return a;for(const r of t)r.messages&&!se.has(r.locale)&&(a[r.locale]=ce(a[r.locale]??{},r.messages));return a})((()=>{const t={};return function(e,t){for(const a in e){const r=e[a];if(r?.default){const e=a.substring(a.lastIndexOf("/")+1,a.lastIndexOf(".")),o=t[e];t[e]=o?{...o,...r.default}:r.default}}}(e,t),t})(),t);return le({locale:t?.[0]?.locale??"zh-CN",fallbackLocale:"en",messages:a})}}},de=({wrap:e,left:t=0,top:a=0,smooth:r=!0})=>{e&&(e.scrollTo?e.scrollTo({left:t,top:a,behavior:r?"smooth":"auto"}):(e.scrollLeft=t,e.scrollTop=a))};!function(){let e=null}();var fe=(e=".stack-tab__container *")=>{const t=document.querySelectorAll(e);let a=0;for(let r=0;r<t.length;r++){const e=+window.getComputedStyle(t[r]).zIndex||0;e<89999&&e>a&&(a=e)}return a+1},be=new Set(["about:blank"]),me=new Set(["__tab","__src"]);function pe(e){const t=e.trim();if(!t)return!0;if((e=>{for(const t of e){const e=t.charCodeAt(0);if(e<=31||127===e||e>=128&&e<=159||8203===e||8204===e||8205===e||8288===e||65279===e||e>=8234&&e<=8238||e>=8294&&e<=8297)return!0}return!1})(t))return!1;if(be.has(t.toLowerCase()))return!0;if(t.toLowerCase().startsWith("about:"))return!1;try{const e=new URL(t,"undefined"!=typeof window?window.location.origin:"http://localhost");return"http:"===e.protocol||"https:"===e.protocol}catch{return!1}}function ve(e){return pe(e)?e:"about:blank"}function he(e){if("string"!=typeof e)return"about:blank";try{return ve(decodeURIComponent(e))}catch{return"about:blank"}}function ge(e){if(!e||!/^https?:\/\//i.test(e))return!1;try{const t="undefined"!=typeof window?window.location:{origin:"http://localhost"};return new URL(e,t.origin).origin!==t.origin}catch{return!0}}function ye(e){const[t="",a]=e.split("?");if(void 0===a)return{path:t,query:{}};const r=new URLSearchParams(a),o={};for(const[n,l]of r.entries()){const e=o[n];void 0!==e?o[n]=Array.isArray(e)?[...e,l]:[e,l]:o[n]=l}return{path:t,query:o}}function ke(e={}){const t={};for(const[a,r]of Object.entries(e))t[a]=Array.isArray(r)?[...r]:r;return t}function _e(e){return{...e,query:e.query?ke(e.query):void 0,_backParams:e._backParams?{...e._backParams}:void 0}}function Te(e={},t={}){const a=e=>{const t={};for(const[a,r]of Object.entries(e))me.has(a)||"_back"===a||(t[a]=Array.isArray(r)?r.map(e=>String(e??"")):String(r??""));return t},r=a(e),o=a(t),n=Object.keys(r),l=Object.keys(o);return n.length===l.length&&n.every(e=>{const t=r[e],a=o[e];return Array.isArray(t)||Array.isArray(a)?Array.isArray(t)&&Array.isArray(a)&&t.length===a.length&&t.every((e,t)=>e===a[t]):t===a})}function we(e={}){const t={};for(const[a,r]of Object.entries(e))me.has(a)||(t[a]=Array.isArray(r)?[...r]:r);return t}var Se=/* @__PURE__ */function(e){return e.WHEEL="wheel",e.BUTTON="button",e.BOTH="both",e}({}),Ie=class{items;constructor(e){this.items=e?[...e]:[]}push(e){this.items.push(e)}pop(){return this.items.pop()}peek(){return this.items.length>0?this.items[this.items.length-1]:void 0}at(e){return this.items[e]}isEmpty(){return 0===this.items.length}size(){return this.items.length}clear(){this.items.length=0}list(){return[...this.items]}readonlyList(){return this.items}toJSON(){return this.list()}toString(){return this.items.toString()}};function Ae(e){if(null===e||"object"!=typeof e)return!1;const t=Object.getPrototypeOf(e);return(null===t||t===Object.prototype||null===Object.getPrototypeOf(t))&&(!(Symbol.iterator in e)&&(!(Symbol.toStringTag in e)||"[object Module]"===Object.prototype.toString.call(e)))}function xe(e,t,a=".",r){if(!Ae(t))return xe(e,{},a,r);const o={...t};for(const n of Object.keys(e)){if("__proto__"===n||"constructor"===n)continue;const t=e[n];null!=t&&(r&&r(o,n,t,a)||(Array.isArray(t)&&Array.isArray(o[n])?o[n]=[...t,...o[n]]:Ae(t)&&Ae(o[n])?o[n]=xe(t,o[n],(a?`${a}.`:"")+n.toString(),r):o[n]=t))}return o}function Re(e){return(...t)=>t.reduce((t,a)=>xe(t,a,"",e),{})}var Ce=Re(),Pe=(Re((e,t,a)=>{if(void 0!==e[t]&&"function"==typeof a)return e[t]=a(e[t]),!0}),Re((e,t,a)=>{if(Array.isArray(e[t])&&"function"==typeof a)return e[t]=a(e[t]),!0}),e=>"object"==typeof e&&null!==e&&!Array.isArray(e)),Ee={id:"",title:"",iframe:!1,closable:!0,refreshable:!0,iframeRefreshMode:"postMessage"},Le=e=>{const t={version:1,id:e.id,title:e.title,iframe:e.iframe,closable:e.closable,refreshable:e.refreshable,iframeRefreshMode:"reload"===e.iframeRefreshMode?"reload":"postMessage"};return a=JSON.stringify(t),encodeURIComponent(btoa(encodeURIComponent(a)));var a},Me=e=>{if(e.length>4096)return{...Ee};try{const a=(e=>decodeURIComponent(atob(decodeURIComponent(e))))(e);return a.length>2048?{...Ee}:a.trim().startsWith("{")?(t=JSON.parse(a),Pe(t)?{id:"string"==typeof t.id?t.id:Ee.id,title:"string"==typeof t.title?t.title:Ee.title,iframe:"boolean"==typeof t.iframe?t.iframe:Ee.iframe,closable:"boolean"==typeof t.closable?t.closable:Ee.closable,refreshable:"boolean"==typeof t.refreshable?t.refreshable:Ee.refreshable,iframeRefreshMode:"reload"===t.iframeRefreshMode?"reload":"postMessage"}:{...Ee}):(e=>{const t=e.split("|"),a="R"===t[5]?"reload":"postMessage";return{id:t[0]??"",title:t[1]??"",iframe:"Y"===t[2],closable:"Y"===t[3],refreshable:"Y"===t[4],iframeRefreshMode:a}})(a)}catch{return{...Ee}}var t},Oe=()=>crypto.randomUUID();var Ve=Symbol("stackTabsContext"),We=Symbol("stackTabsMaximum"),Be=null,qe=!1,Fe=/* @__PURE__ */new WeakSet,je=(e={})=>{const t={tabs:C([]),defaultTabs:C([]),caches:O([]),components:/* @__PURE__ */new Map,cacheIdsToEvict:/* @__PURE__ */new Set,tabIdsToEvict:/* @__PURE__ */new Set,refreshKey:C(0),scrollPositionsByPageId:/* @__PURE__ */new Map,isInitialized:C(!1),iframeRefreshKeys:C({}),maxTabCount:C(0),useGlobalScroll:C(!1),sessionPrefix:C("")};return{...t,maxTabCount:C(e.maxTabCount??t.maxTabCount.value),useGlobalScroll:C(e.useGlobalScroll??t.useGlobalScroll.value),sessionPrefix:C(e.sessionPrefix??t.sessionPrefix.value),iframePath:C(e.iframePath??""),eventBus:{all:a=a||/* @__PURE__ */new Map,on:function(e,t){var r=a.get(e);r?r.push(t):a.set(e,[t])},off:function(e,t){var r=a.get(e);r&&(t?r.splice(r.indexOf(t)>>>0,1):a.set(e,[]))},emit:function(e,t){var r=a.get(e);r&&r.slice().map(function(e){e(t)}),(r=a.get("*"))&&r.slice().map(function(a){a(e,t)})}}};var a},De=()=>{const e=(b()?m(Ve,null):null)??Be;if(!e)throw new Error("VueStackTabs runtime context is not available. Render <VueStackTabs> before using vue-stack-tabs composables.");return e},Ne=/* @__PURE__ */function(e){return e.PAGE_LOADING="PAGE_LOADING",e.TAB_ACTIVE="TAB_ACTIVE",e.FORWARD="FORWARD",e.BACKWARD="BACKWARD",e.REFRESH_IFRAME_POSTMESSAGE="REFRESH_IFRAME_POSTMESSAGE",e}({}),Ke=Symbol("tabEmitter"),$e=()=>(b()?m(Ke,null):null)??De().eventBus,ze=["aria-label"],Ge=/* @__PURE__ */d({__name:"PageLoading",props:{tabId:{}},setup(e){const t=e,{t:a}=ne(),r=$e(),o=C(!1),n=e=>{e.tId===t.tabId&&(o.value=e.value)};return r.on(Ne.PAGE_LOADING,n),S(()=>{r.off(Ne.PAGE_LOADING,n)}),(e,t)=>o.value?(I(),i("div",{key:0,class:"stack-tab-loading-mask",role:"status","aria-live":"polite","aria-label":q(a)("VueStackTab.loading"),style:g({zIndex:q(fe)(".cache-page-wrapper *")})},[...t[0]||(t[0]=[c("div",{class:"stack-tab-loading--spin turn","aria-hidden":"true"},null,-1)])],12,ze)):s("",!0)}}),Ue=async e=>{const t=e.apply();try{const a=await e.navigate();if(e.isFailureResult?.(a)){if(e.isCurrent?.()??1?e.rollback(t):e.cleanupStale?.(),e.rejectFailureResult)throw a;return a}return(e.isCurrent?.()??1)&&e.commit?.(),a}catch(a){throw e.isCurrent?.()??1?e.rollback(t):e.cleanupStale?.(),a}},He=e=>e.startsWith("#")?document.getElementById(e.slice(1)):document.querySelector(e),Xe=e=>{const t=()=>e.sessionPrefix.value+"stacktab-active-tab";let a=null,r=0,o=!1;const n=()=>{o=!1;const e=a;a=null,e&&e.version===r&&window.sessionStorage.setItem(t(),JSON.stringify(e.tab))},l=()=>{r++,a=null},s=()=>{l(),window.sessionStorage.removeItem(t())};return{getSessionKey:t,saveActiveTabToSession:e=>{e.id&&(a={tab:e,version:++r},o||(o=!0,queueMicrotask(n)))},clearSession:s,restoreActiveTabSession:e=>{null!==e?(l(),window.sessionStorage.setItem(t(),e)):s()},restoreTabFromSession:e=>{if(null==e)return null;try{const a=JSON.parse(e,(e,t)=>"pages"===e&&Array.isArray(t)?new Ie(t):t);return Pe(t=a)&&"string"==typeof t.id&&"string"==typeof t.title&&"boolean"==typeof t.closable&&"boolean"==typeof t.refreshable&&"boolean"==typeof t.iframe&&"boolean"==typeof t.active&&t.pages instanceof Ie?a:(s(),null)}catch{return s(),null}var t}}},Je=e=>{const{tabs:t,iframeRefreshKeys:a,getTab:r,createPageId:o,addCache:n,evictPageCache:l,replacePageCaches:s,refreshIframeByPostMessage:i}=e,c=(e,t,a)=>{const r=e.pages.peek();if(!r)return;if(e.active)return void(r.refreshVersion=(r.refreshVersion??0)+1);const s=r.id;if(r.id=o(),r.refreshVersion=0,t&&a)return t.push(s),void a.push(r.id);l(s),n(r.id)};return{refreshTab:e=>{const t=r(e);t?.refreshable&&(t.iframe?(e=>{"reload"!==e.iframeRefreshMode?i(e.id):a.value={...a.value,[e.id]:(a.value[e.id]??0)+1}})(t):c(t))},refreshAllTabs:()=>{const e=[],r=[],o={...a.value};let n=!1;for(const a of t.value)a.refreshable&&(a.iframe?"reload"===a.iframeRefreshMode?(o[a.id]=(o[a.id]??0)+1,n=!0):i(a.id):c(a,e,r));n&&(a.value=o),s(e,r)}}},Ye=/* @__PURE__ */d({name:"StackTabEmptyPlaceholder",setup:()=>()=>null}),Qe=(e,t)=>({...ke(e.query),__tab:e.query.__tab??Le(t)}),Ze=e=>{const t=e.matched[e.matched.length-1]?.path??e.path,a=e.path.endsWith("/")?e.path.slice(0,-1):e.path;return t===a?a:e.path},et=()=>{const e=G(),t=$e(),{t:a}=ne(),r=De(),{tabs:l,defaultTabs:s,caches:i,components:c,tabIdsToEvict:f,refreshKey:b,iframeRefreshKeys:m,isInitialized:p,cacheIdsToEvict:v}=r,{markCacheForEviction:h,markTabPagesForEviction:g,markTabPagesForEvictionOnly:k,addCache:_,removeCache:I,evictMarkedCaches:A,evictPageCache:x,replacePageCaches:R}=(e=>{const{caches:t,components:a,cacheIdsToEvict:r,tabIdsToEvict:o}=e,n=new Set(t.value);let l=t.value;const s=()=>{if(l!==t.value){l=t.value,n.clear();for(const e of l)n.add(e)}},i=e=>{r.add(e)},c=e=>{if(s(),n.has(e)){n.delete(e);const a=l.indexOf(e);a>=0&&l.splice(a,1),B(t)}};return{markCacheForEviction:i,markTabPagesForEviction:e=>{for(const t of e.pages.list())i(t.id);o.add(e.id)},markTabPagesForEvictionOnly:e=>{for(const t of e.pages.list())i(t.id)},addCache:e=>{s(),n.has(e)||(n.add(e),l.push(e),B(t))},removeCache:c,evictPageCache:e=>{e&&(r.delete(e),c(e),a.delete(e))},replacePageCaches:(e,o)=>{s();const i=new Set(e);let c=!1;if(i.size>0){for(let e=l.length-1;e>=0;e--){const t=l[e];t&&i.has(t)&&(l.splice(e,1),c=!0)}for(const e of i)n.delete(e),r.delete(e),a.delete(e)}for(const t of o)n.has(t)||(n.add(t),l.push(t),c=!0);c&&B(t)},evictMarkedCaches:()=>{if(r.size<=0)return;s();const e=new Set(r);for(let t=l.length-1;t>=0;t--){const a=l[t];a&&e.has(a)&&l.splice(t,1)}for(const t of e)n.delete(t),a.delete(t);B(t),r.clear()}}})(r),{restoreScroller:P,saveScroller:E,removeScroller:L,addPageScroller:M}=(e=>{const{scrollPositionsByPageId:t}=e;return{restoreScroller:e=>{const a=t.get(e);if(a)for(const[t,r]of a){const e=He(t);e&&(e.scrollTop=r.top,e.scrollLeft=r.left)}},saveScroller:e=>{const a=t.get(e);if(a)for(const t of a.keys()){const e=He(t);a.set(t,{top:e?.scrollTop??0,left:e?.scrollLeft??0})}},removeScroller:e=>{const a=t.get(e);a&&(a.clear(),t.delete(e))},addPageScroller:(e,...a)=>{t.has(e)||t.set(e,/* @__PURE__ */new Map);const r=t.get(e);for(const t of a)r.set(t,{top:0,left:0})}}})(r),{saveActiveTabToSession:V,clearSession:W,restoreTabFromSession:q,restoreActiveTabSession:F,getSessionKey:j}=Xe(r),D=e=>{l.value=[...l.value,e]},N=e=>l.value.find(t=>t.id===e)??null,K=e=>{const r=(e=>{if("string"==typeof e.query.__tab){const t=Me(e.query.__tab);if(t.id)return t}const t=Ze(e),r=l.value.find(e=>e.active),o=r?.pages.peek();return r&&o?.path===t?{id:r.id,title:r.title,closable:r.closable,refreshable:r.refreshable,iframe:r.iframe,iframeRefreshMode:r.iframeRefreshMode}:{id:crypto.randomUUID(),title:a("VueStackTab.undefined"),closable:!0,refreshable:!0,iframe:!1}})(e);if(f.has(r.id))return{empty:!0};const o=Ze(e);let n,s=r.id?N(r.id):null,i=null;if(s&&!s.pages.isEmpty()){const t=s.pages.peek();if(!t)throw new Error("[vue-stack-tabs] Stack is not empty but peek() returned undefined");if(t.path===o)n=t.id;else{const t=s.pages.readonlyList();let a=-1;for(let e=t.length-2;e>=0;e--){const r=t[e];if(r&&r.path===o){a=e;break}}if(-1!==a){const o=t.length-1-a;for(let e=0;e<o;e++){const e=s.pages.pop();e&&x(e.id)}const l=s.pages.peek();n=l?l.id:Oe(),l||(i={id:n,tabId:r.id,path:e.path,query:Qe(e,r)})}else n=Oe(),i={id:n,tabId:r.id,path:e.path,query:Qe(e,r)}}}else n=Oe(),i={id:n,tabId:r.id,path:e.path,query:Qe(e,r)};if(v.has(n)){v.delete(n);const e=c.get(n);if(e)return{recovered:e,cacheName:n}}if(i)s=((e,a,r,o)=>{let n=null;for(const t of l.value)t.active=!1,t.id===e.id&&(n=t);if(null===n){const r=new Ie;r.push(o);const l=a.query.__src;n={id:e.id,title:e.title,closable:e.closable,refreshable:e.refreshable,iframe:e.iframe,iframeRefreshMode:e.iframeRefreshMode??"postMessage",url:he(l),active:!0,pages:r},D(n),t.emit(Ne.TAB_ACTIVE,{id:e.id,isRoute:!1})}else n.active=!0,(n.pages.isEmpty()||n.pages.peek().id!==o.id)&&n.pages.push(o);return n})(r,e,0,i);else{for(const e of l.value)e.active=!1;s.active=!0}return V(s),{cacheName:n,tabInfo:r,targetTab:s}},z=C(""),U=n(()=>l.value.find(e=>e.active)?.pages.peek()?.refreshVersion??0);let H="",X=null;const J=e=>{const t=l.value;for(let a=t.length-1;a>=0;a--){const r=t[a];r&&r.closable&&e(r,a)&&(g(r),r.pages.clear(),t.splice(a,1))}},Y=()=>{const e=l.value;if(J(()=>!0),e.some(e=>e.active))return A(),void f.clear();const a=e[e.length-1];a&&t.emit(Ne.TAB_ACTIVE,{id:a.id})},{refreshTab:Q,refreshAllTabs:Z}=Je({tabs:l,iframeRefreshKeys:m,getTab:N,createPageId:Oe,addCache:_,evictPageCache:x,replacePageCaches:R,refreshIframeByPostMessage:e=>t.emit(Ne.REFRESH_IFRAME_POSTMESSAGE,e)});return{tabs:l,caches:i,refreshKey:b,activeCacheKey:z,activePageRefreshVersion:U,isInitialized:p,setMaxSize:e=>{r.maxTabCount.value=e},canAddTab:()=>r.maxTabCount.value<=0||r.maxTabCount.value>0&&r.maxTabCount.value>l.value.length,initialize:e=>{const t=[],a=[];for(const o of e){const e=Ce(o,{id:crypto.randomUUID(),refreshable:!0,closable:!0,iframe:!1}),r=e.id??crypto.randomUUID();e.id=r;const n=ye(e.path),l=Oe(),s={id:l,tabId:r,path:n.path,query:Ce(we(n.query),{__tab:Le(e)})},i=new Ie;i.push(s);const c={id:r,title:e.title??"",closable:e.closable,refreshable:e.refreshable,iframe:e.iframe,iframeRefreshMode:"reload"===e.iframeRefreshMode?"reload":"postMessage",active:!1,pages:i};_(l),t.push(c),a.push({...c})}s.value=[...s.value,...t],l.value=[...l.value,...a];const r=q(sessionStorage.getItem(j()));r&&!l.value.some(e=>e.id===r.id)&&(r.url&&(r.url=ve(r.url)),r.iframe&&r.url&&void 0===r.iframeRefreshMode&&(r.iframeRefreshMode=ge(r.url)?"reload":"postMessage"),r.pages&&"function"==typeof r.pages.list&&r.pages.list().forEach(e=>{e&&e.id&&_(e.id)}),l.value=[...l.value,r]),p.value=!0},size:()=>l.value.length,active:(a,r=!0)=>{t.emit(Ne.FORWARD);const o=N(a);if(!o)return Promise.resolve();if(o.active)return Promise.resolve();const n=o.pages.peek(),s=()=>{for(const e of l.value)e.active=e.id===a;V(o),l.value=l.value.slice()};if(!r)return s(),Promise.resolve();if(!n)return s(),Promise.resolve();const i=Ce({__tab:Le({id:o.id,title:o.title,closable:o.closable,refreshable:o.refreshable,iframe:o.iframe})},n.query||{});return Ue({apply:()=>{const e=l.value.find(e=>e.active)?.id,t=window.sessionStorage.getItem(j());return s(),{prevActiveId:e,sessionSnapshot:t}},navigate:()=>e.push({path:n.path,query:i}),rollback:e=>{for(const t of l.value)t.active=t.id===e.prevActiveId;l.value=l.value.slice(),F(e.sessionSnapshot)},isFailureResult:$,rejectFailureResult:!0})},getCacheName:()=>Oe(),destroy:()=>{l.value=[],s.value=[],v.clear(),f.clear(),m.value={},i.value=[],c.clear(),r.scrollPositionsByPageId.clear(),r.isInitialized.value=!1,r.refreshKey.value=0,W()},reset:()=>Y(),addCache:_,removeCache:I,getTab:N,addTab:D,removeTab:e=>{let a="";const r=N(e),o=l.value,n=o.findIndex(t=>t?.id===e);if(n<0)return"";const s=o[n];return s.closable?(g(s),s.pages.clear(),o.length>1&&s.active&&(a=(0===n?o[1]:o[n-1])?.id??""),o.splice(n,1),a&&t.emit(Ne.TAB_ACTIVE,{id:a}),r?.active||(A(),f.clear()),a):e},removeAllTabs:Y,removeLeftTabs:e=>{const a=l.value,r=a.findIndex(t=>t?.id===e);if(r<=0)return;if(J((e,t)=>t<r),a.some(e=>e.active))return A(),void f.clear();const o=a[0];o&&t.emit(Ne.TAB_ACTIVE,{id:o.id})},removeRightTabs:e=>{const a=l.value,r=a.findIndex(t=>t?.id===e);if(r<0||r>=a.length-1)return;if(J((e,t)=>t>r),a.some(e=>e.active))return A(),void f.clear();const o=a[a.length-1];o&&t.emit(Ne.TAB_ACTIVE,{id:o.id})},removeOtherTabs:e=>{const a=l.value.find(t=>t.id===e);J(t=>t.id!==e),a&&!a.active?t.emit(Ne.TAB_ACTIVE,{id:e}):(A(),f.clear())},hasTab:e=>l.value.some(t=>t.id===e),renewTab:e=>{const t=N(e.id);if(!t)return;const a=t.pages.list().map(e=>_e(e)),r=[...i.value],o=new Map(c);return k(t),A(),t.pages.clear(),()=>{t.pages.clear();for(const e of a)t.pages.push(_e(e));i.value=[...r],c.clear();for(const[e,t]of o)c.set(e,t)}},addPage:(e,t)=>{if(!t)return Ye;const a=e.fullPath+(e.query.__tab||"");if(a===H&&X)return X;const n=K(e);if("empty"in n)return Ye;if("recovered"in n)return _(n.cacheName),z.value=n.cacheName,H=a,X=n.recovered,n.recovered;z.value=n.cacheName;const l=(e=>{const{cacheName:t,tabInfo:a}=e;if(c.has(t))return _(t),c.get(t);const n=/* @__PURE__ */d({name:t,props:{vnode:{type:Object,required:!1,default:void 0}},emits:["onLoaded"],setup(e,n){const l=C(null),s=O(null),i=O(null),c=O(null),d=()=>{try{const e=N(a.id)?.pages.peek();e&&e.id===t&&e._backParams?(l.value={...e._backParams},delete e._backParams):l.value=null}catch{l.value=null}};return w(()=>{n.emit("onLoaded"),M(t,`#W-${t}`),d()}),T(()=>E(t)),y(()=>{n.emit("onLoaded"),P(t),A(),f.clear(),d()}),S(()=>L(t)),()=>{const n=e.vnode,d=l.value;if(n!==s.value||d!==c.value){const e=d?{_back:d}:{};i.value=n?o(n,{tId:a.id,pId:t,...e}):null,s.value=n,c.value=d}return u("div",{class:"cache-page-wrapper",id:`W-${t}`,style:[r.useGlobalScroll.value?"overflow:auto":"overflow:hidden","height: 100%"]},[i.value,u(Ge,{tabId:a.id},null)])}}});return c.set(t,n),_(t),n})(n);return H=a,X=l,l},addComponent:(e,t)=>c.set(e,t),getComponent:e=>c.get(e),removeComponent:e=>c.delete(e),markCacheForEviction:h,evictMarkedCaches:A,evictPageCache:x,refreshTab:Q,refreshAllTabs:Z,iframeRefreshKeys:m,addPageScroller:M,setGlobalScroll:e=>{r.useGlobalScroll.value=e},clearSession:W,setSessionPrefix:e=>{r.sessionPrefix.value=e}}};function tt(){const e=G(),t=De(),{active:a,hasTab:r,refreshKey:o,reset:n,canAddTab:l,renewTab:s,getTab:i,tabs:c,removeTab:u,removeAllTabs:d,refreshTab:f,refreshAllTabs:b}=et(),m=(a,r)=>{const o=Le(r);let n,l=Ce(we(a.query),{__tab:o});if(a.iframe)l={...l,__src:encodeURIComponent(a.path),__tab:o},n=t.iframePath.value;else{const e=ye(a.path);n=e.path,l=Ce(we(e.query),l,{__tab:o}),l={...l,__tab:o}}return pe(a.path)?Ue({apply:()=>{},navigate:()=>e.push({path:n,query:l}),rollback:()=>{},isFailureResult:$,rejectFailureResult:!0}):Promise.reject(/* @__PURE__ */new Error("Invalid tab URL"))};return{openTab:(e,t=!1)=>new Promise((n,c)=>{const u=(e=>{const t={refreshable:!0,closable:!0,iframe:!1};e.iframe&&void 0===e.iframeRefreshMode?t.iframeRefreshMode=ge(e.path??"")?"reload":"postMessage":e.iframe&&(t.iframeRefreshMode=e.iframeRefreshMode??"postMessage");const a=Ce(e,t);return a.id||(a.id=crypto.randomUUID()),a})(e),d=Boolean(u.id&&r(u.id));if(d&&!t)return void Promise.resolve(a(u.id)).then(()=>n(u.id),c);let f,b;if(u.id&&t&&d){const t=i(e.id);f=s(e),t?.active&&(b=o.value,o.value++)}d||l()?m(e,u).then(()=>n(u.id),e=>{f?.(),void 0!==b&&(o.value=b),c(e)}):c(/* @__PURE__ */new Error("Max Size"))}),closeTab:u,closeAllTabs:d,refreshTab:f,refreshAllTabs:b,activeTab:a,reset:n,tabs:c,setIFramePath:e=>{t.iframePath.value=e},getWrapper:()=>document.getElementsByClassName("cache-page-wrapper")[0],openInNewWindow:e=>{const t=i(e);t?.iframe&&t.url&&pe(t.url)&&window.open(t.url,"_blank","noopener,noreferrer")}}}var at=["disabled"],rt=(e,t)=>{const a=e.__vccOpts||e;for(const[r,o]of t)a[r]=o;return a},ot=/* @__PURE__ */rt(/* @__PURE__ */d({__name:"ContextMenuItem",props:{icon:{default:""},title:{},disabled:{type:Boolean,default:!1}},setup:e=>(t,a)=>(I(),i("button",{type:"button",role:"menuitem",class:"stack-tab__contextmenu-item",disabled:e.disabled},[c("span",{class:h(["stack-tab__contextmenu-icon",e.icon]),"aria-hidden":"true"},null,2),c("span",{class:"stack-tab__contextmenu-title",onContextmenu:a[0]||(a[0]=K(()=>{},["prevent"]))},V(e.title),33)],8,at))}),[["__scopeId","data-v-3d616fa0"]]),nt={key:1,class:"divider div-transparent",role:"separator","aria-orientation":"horizontal"},lt=/* @__PURE__ */rt(/* @__PURE__ */d({__name:"index",props:{index:{},left:{default:0},top:{default:0},contextMenu:{default:()=>[]},restoreFocusElement:{default:null},tabItem:{},max:{}},emits:["close"],setup(t,{emit:a}){const r=t,o=a,{t:n}=ne(),c=C(),d=x({left:r.left,top:r.top}),{closeTab:f,closeAllTabs:b,refreshTab:m,refreshAllTabs:p,openInNewWindow:h}=tt(),{removeLeftTabs:y,removeRightTabs:k,removeOtherTabs:_}=et(),T=()=>{r.restoreFocusElement&&document.contains(r.restoreFocusElement)?r.restoreFocusElement.focus():document.querySelector('[role="tab"][aria-selected="true"]')?.focus()},S=()=>{o("close"),v(T)},A=e=>{e?.(),S()},R=()=>{const e=c.value;return e?Array.from(e.querySelectorAll('[role="menuitem"]')).filter(e=>!e.disabled):[]},E=e=>{const t=R();t.length<=0||t[(e+t.length)%t.length]?.focus()},L=()=>R().findIndex(e=>e===document.activeElement),M=e=>{if("Escape"===e.key)return e.preventDefault(),void S();if("ArrowDown"===e.key){e.preventDefault();const t=L();return void E(-1===t?0:t+1)}if("ArrowUp"===e.key){e.preventDefault();const t=L();return void E(-1===t?-1:t-1)}if("Home"===e.key)return e.preventDefault(),void E(0);"End"===e.key&&(e.preventDefault(),E(R().length-1))},O=e=>e.key??`${e.title}-${e.icon??""}`;return w(()=>{const e=c.value?.clientWidth??0;d.left+e>window.innerWidth&&(d.left=window.innerWidth-e-5),E(0)}),(a,r)=>(I(),i("div",{ref_key:"menuElementRef",ref:c,class:"stack-tab__contextmenu",role:"menu",tabindex:"-1",style:g({left:`${d.left}px`,top:`${d.top}px`,"z-index":q(fe)(".stack-tab,.stack-tab *")}),onKeydown:M},[u(ot,{icon:"stack-tab__icon-reload svg-mask",title:q(n)("VueStackTab.reload"),disabled:!t.tabItem.refreshable,onClick:r[0]||(r[0]=e=>A(()=>q(m)(t.tabItem.id)))},null,8,["title","disabled"]),u(ot,{icon:"stack-tab__icon-reload-all svg-mask",title:q(n)("VueStackTab.reloadAll"),onClick:r[1]||(r[1]=e=>A(q(p)))},null,8,["title"]),u(ot,{icon:"stack-tab__icon-close svg-mask",title:q(n)("VueStackTab.close"),disabled:!t.tabItem.closable,onClick:r[2]||(r[2]=e=>A(()=>q(f)(t.tabItem.id)))},null,8,["title","disabled"]),u(ot,{icon:"stack-tab__icon-close-lefts svg-mask",title:q(n)("VueStackTab.closeLeft"),disabled:t.index<=0,onClick:r[3]||(r[3]=e=>A(()=>q(y)(t.tabItem.id)))},null,8,["title","disabled"]),u(ot,{icon:"stack-tab__icon-close-rights svg-mask",title:q(n)("VueStackTab.closeRight"),disabled:t.index>=t.max-1,onClick:r[4]||(r[4]=e=>A(()=>q(k)(t.tabItem.id)))},null,8,["title","disabled"]),u(ot,{icon:"stack-tab__icon-close-others svg-mask",title:q(n)("VueStackTab.closeOthers"),onClick:r[5]||(r[5]=e=>A(()=>q(_)(t.tabItem.id)))},null,8,["title"]),u(ot,{icon:"stack-tab__icon-close-all svg-mask",title:q(n)("VueStackTab.closeAll"),onClick:r[6]||(r[6]=e=>A(q(b)))},null,8,["title"]),t.tabItem.iframe&&t.tabItem.url?(I(),l(ot,{key:0,icon:"stack-tab__icon-open svg-mask",title:q(n)("VueStackTab.openInNewWindow"),onClick:r[7]||(r[7]=e=>A(()=>q(h)(t.tabItem.id)))},null,8,["title"])):s("",!0),void 0!==t.contextMenu&&t.contextMenu.length>0?(I(),i("div",nt)):s("",!0),(I(!0),i(e,null,P(t.contextMenu,e=>(I(),l(ot,{key:O(e),"data-menu-key":O(e),icon:e.icon,title:e.title,disabled:e.disabled(t.tabItem),onClick:a=>A(()=>!e.disabled(t.tabItem)&&e.callback(t.tabItem.id))},null,8,["data-menu-key","icon","title","disabled","onClick"]))),128))],36))}}),[["__scopeId","data-v-f6a9b3bf"]]),st=e=>`stack-tab-tab-${encodeURIComponent(e)}`,it=e=>`stack-tab-panel-${encodeURIComponent(e)}`,ct=["id","data-tab-id","aria-controls","aria-selected","tabindex","title"],ut={class:"stack-tab__item-title"},dt={class:"stack-tab__item-title-content"},ft=["title","aria-label","tabindex"],bt=/* @__PURE__ */d({__name:"TabHeaderItem",props:{item:{}},emits:["close","active","contextmenu"],setup(e,{emit:t}){const a=t,r=$e(),{t:o}=ne(),l=C(),u=e,d=e=>{u.item.id===e.id&&m(e.isRoute??!0)};r.on(Ne.TAB_ACTIVE,d),S(()=>{r.off(Ne.TAB_ACTIVE,d)});const f=n(()=>u.item.title||o("VueStackTab.undefined")),b=()=>{a("close",u.item)},m=(e=!0)=>{a("active",u.item,l.value,e)},p=e=>{if("Enter"===e.key||" "===e.key)return e.preventDefault(),void m(!0);"Delete"!==e.key&&"Backspace"!==e.key||!u.item.closable||(e.preventDefault(),b())};return(t,a)=>(I(),i("li",{ref_key:"tabElementRef",ref:l,role:"presentation",class:h(["stack-tab__item",{"is-active":e.item.active,"is-icon":e.item.closable}]),onClick:a[1]||(a[1]=K(e=>m(!0),["self"])),onContextmenu:a[2]||(a[2]=e=>t.$emit("contextmenu",e))},[c("button",{id:q(st)(e.item.id),type:"button",role:"tab",class:"stack-tab__item-tab","data-tab-id":e.item.id,"aria-controls":q(it)(e.item.id),"aria-selected":e.item.active?"true":"false",tabindex:e.item.active?0:-1,title:f.value,onClick:a[0]||(a[0]=e=>m(!0)),onKeydown:p},[c("span",ut,[c("span",dt,V(f.value),1)])],40,ct),e.item.closable?(I(),i("button",{key:0,type:"button",class:"stack-tab__icon-close-fill stack-tab__item-button",title:q(o)("VueStackTab.close"),"aria-label":`${q(o)("VueStackTab.close")} ${f.value}`,tabindex:e.item.active?0:-1,onClick:K(b,["stop"])},null,8,ft)):s("",!0)],34))}}),mt=["disabled","title","aria-label"],pt={key:1,class:"stack-tab__button"},vt=/* @__PURE__ */d({__name:"TabHeaderButton",props:{disabled:{type:Boolean,default:!1},shadow:{default:null},iconClass:{default:""},title:{default:""},ariaLabel:{default:""}},setup(e){const t=e,a=n(()=>t.ariaLabel||t.title);return(t,r)=>(I(),i("button",{type:"button",class:h(["stack-tab__header-button",{"stack-tab__shadow-right":"right"===e.shadow,"stack-tab__shadow-left":"left"===e.shadow}]),disabled:e.disabled,title:e.title,"aria-label":a.value},["icon"in t.$slots?s("",!0):(I(),i("span",{key:0,class:h(["stack-tab__mask-button",e.iconClass])},null,2)),"icon"in t.$slots?(I(),i("span",pt,[E(t.$slots,"icon")])):s("",!0)],10,mt))}}),ht=/* @__PURE__ */d({__name:"TabHeaderScroll",props:{space:{default:300},isScrollWheel:{type:Boolean,default:!0},isScrollButton:{type:Boolean,default:!0}},setup(t,{expose:a}){const{t:r}=ne(),o=C(null),u=C(null),d=C(null),f=C(!1),b=C(!1),m=C(!1),p=C(!1),v=C(),y=t,k=x({clientWidth:0,scrollWidth:0,scrollLeft:0}),_=x({thumbLeft:0,startScrollLeft:0,startThumbLeft:0,startPageX:0});j(k,e=>{T(e)}),j(()=>y.isScrollButton,()=>T(k));const T=e=>{const t=e.scrollWidth>e.clientWidth;b.value=e.scrollLeft<=10,m.value=e.clientWidth+e.scrollLeft-e.scrollWidth>=-10,p.value=y.isScrollButton&&t},A=n(()=>k.scrollWidth>k.clientWidth),R=n(()=>{if(!A.value)return 0;const{clientWidth:e,scrollWidth:t}=k;return e/t*e}),P=n(()=>{if(!A.value)return 0;const{clientWidth:e,scrollWidth:t,scrollLeft:a}=k;return(e-R.value)*(a/(t-e))}),L=()=>{if(!o.value)return;const{clientWidth:e,scrollWidth:t,scrollLeft:a}=o.value;Object.assign(k,{clientWidth:e,scrollWidth:t,scrollLeft:a})},M=()=>{const e=o.value?.querySelector(".stack-tab__item.is-active");e&&!H(e)&&U(e)};let O=null,V=null;const W=(e,t=!0)=>{de({wrap:o.value,left:e,top:0,smooth:t})},B=e=>{W(o.value.scrollLeft+e)},D=e=>{if(!y.isScrollWheel||!o.value)return;const t=e.deltaY<0;W(o.value.scrollLeft+(t?-y.space:y.space))},$=e=>{Object.assign(_,{startPageX:e.pageX,startScrollLeft:o.value?.scrollLeft,startThumbLeft:P.value,thumbLeft:P.value}),f.value=!0,document.addEventListener("mousemove",z),document.addEventListener("mouseup",G)},z=e=>{const{clientWidth:t,scrollWidth:a}=k;let r=_.startThumbLeft+e.pageX-_.startPageX;const o=t-R.value;r<0?r=0:r>o&&(r=o),_.thumbLeft=r,W(r*(a-t)/(t-R.value),!1),e.preventDefault()},G=()=>{f.value=!1,document.removeEventListener("mousemove",z),document.removeEventListener("mouseup",G)};w(()=>{if("undefined"==typeof ResizeObserver)return;O=new ResizeObserver(()=>{L(),M()}),V=new ResizeObserver(()=>{A.value||M(),L()}),v.value&&O.observe(v.value);const e=o.value?.querySelector(".stack-tab__nav");e&&V.observe(e)}),S(()=>{O?.disconnect(),V?.disconnect(),O=null,V=null});const U=e=>{!function({el:e,wrap:t,block:a="start",inline:r="nearest"}){const o=t&&"object"==typeof t&&"value"in t?t.value:t;if(e&&o)if(e.scrollIntoView)e.scrollIntoView({behavior:"smooth",block:a,inline:r});else{const{offsetLeft:t,offsetTop:n}=e;let l,s;s="center"===a?n+(e.clientHeight-o.clientHeight)/2:n,l="center"===r?t+(e.clientWidth-o.clientWidth)/2:t,de({wrap:o,left:l,top:s})}}({el:e,wrap:o.value,block:"end",inline:"center"})},H=e=>{if(!A.value)return!0;const t=e.offsetLeft,a=o.value.scrollLeft;return!(t<a||t+e.clientWidth>a+o.value.clientWidth)};return a({scrollIntoView:U,isInView:H}),(a,n)=>(I(),i(e,null,[p.value?(I(),l(vt,{key:0,"icon-class":"stack-tab__icon-left-arrow",disabled:b.value,title:q(r)("VueStackTab.scrollLeft"),"aria-label":q(r)("VueStackTab.scrollLeft"),onClick:n[0]||(n[0]=e=>!b.value&&B(-1*t.space))},null,8,["disabled","title","aria-label"])):s("",!0),c("div",{ref_key:"headerScroll",ref:v,class:"stack-tab__scroll",onWheelPassive:D},[c("div",{ref_key:"container",ref:o,class:h(["stack-tab__scroll-container",{"stack-tab__shadow-inset-left":!b.value&&m.value,"stack-tab__shadow-inset-right":!m.value&&b.value,"stack-tab__shadow-inset-all":!b.value&&!m.value}]),onScrollPassive:L},[E(a.$slots,"default")],34),N(c("div",{ref_key:"bar",ref:u,class:h(["stack-tab__scrollbar",{"is-dragging":f.value}])},[c("div",{ref_key:"thumb",ref:d,class:h(["stack-tab__scrollbar-thumb",{"is-dragging":f.value}]),style:g({width:`${R.value}px`,transform:`translateX(${P.value}px)`}),onMousedown:K($,["prevent"])},null,38)],2),[[F,A.value]])],544),p.value?(I(),l(vt,{key:1,"icon-class":"stack-tab__icon-right-arrow",disabled:m.value,title:q(r)("VueStackTab.scrollRight"),"aria-label":q(r)("VueStackTab.scrollRight"),onClick:n[1]||(n[1]=e=>!m.value&&B(t.space))},null,8,["disabled","title","aria-label"])):s("",!0)],64))}}),gt=/* @__PURE__ */d({__name:"index",props:{space:{},tabScrollMode:{default:Se.BOTH},tabTransition:{default:()=>({name:"stack-tab-zoom"})},contextmenu:{type:[Boolean,Object],default:!0},max:{default:20}},emits:["active"],setup(t,{emit:o}){const{t:c}=ne(),d=m(We,C(!1)),f=o,b=C(),h=C(),{shown:g,contextMenuData:y,showContextMenu:k}=(()=>{const e=x({item:{},index:-1,left:0,top:0,max:0}),t=C(!1),a=e=>{e.target.closest?.(".stack-tab__contextmenu")||(t.value=!1,document.removeEventListener("click",a))};return S(()=>{document.removeEventListener("click",a)}),{shown:t,contextMenuData:e,showContextMenu:async(r,o,n,l)=>{t.value=!1,document.removeEventListener("click",a),await v(()=>{const{clientY:s,clientX:i}=r;t.value=!0,Object.assign(e,{item:o,index:n,top:s,left:i,max:l}),v(()=>document.addEventListener("click",a))})}}})(),_=C(null),T=()=>{g.value=!1},w=t,{closeTab:A,activeTab:R,tabs:L}=tt(),M=n(()=>!1!==w.contextmenu),O=n(()=>Array.isArray(w.contextmenu)?w.contextmenu:[]),V=(e,t,a,r)=>{M.value&&(e.preventDefault(),_.value=(e=>{const t=(e.target instanceof Element?e.target:null)?.closest('[role="tab"]');return t||((e.currentTarget instanceof HTMLElement?e.currentTarget:null)?.querySelector('[role="tab"]')??null)})(e),k(e,t,a,r))},W=n(()=>"string"==typeof w.tabTransition?{name:w.tabTransition}:w.tabTransition),B=e=>{const t=L.value[e];var a;t&&(z(t,void 0,!0),a=String(t.id),v(()=>{const e=h.value?.querySelector(`.stack-tab__nav [role="tab"][data-tab-id="${CSS.escape(a)}"]`);e&&(e.focus(),b.value&&!b.value.isInView(e)&&b.value.scrollIntoView(e))}))},F=e=>{const t=L.value.length;if(t<=0)return;const a=L.value.findIndex(e=>e.active),r=a>=0?a:0;return"ArrowRight"===e.key?(e.preventDefault(),void B((r+1)%t)):"ArrowLeft"===e.key?(e.preventDefault(),void B((r-1+t)%t)):"Home"===e.key?(e.preventDefault(),void B(0)):void("End"===e.key&&(e.preventDefault(),B(t-1)))},j=n(()=>w.tabScrollMode===Se.BOTH||w.tabScrollMode===Se.BUTTON),N=n(()=>w.tabScrollMode===Se.BOTH||w.tabScrollMode===Se.WHEEL),$=e=>{e.closable&&A(e.id),g.value=!1},z=(e,t,a)=>{b.value&&t&&v(()=>{b.value.isInView(t)||b.value.scrollIntoView(t)}),Promise.resolve(R(e.id,a)).then(()=>f("active",e.id)).catch(e=>{})};return(o,n)=>(I(),i("div",{ref_key:"headerRef",ref:h,class:"stack-tab__header"},[E(o.$slots,"leftButton"),u(ht,{ref_key:"scrollContainerRef",ref:b,space:t.space,"is-scroll-wheel":N.value,"is-scroll-button":j.value},{default:D(()=>[u(r,p({key:"tab-list-transition",tag:"ul",class:"stack-tab__nav",role:"tablist","aria-orientation":"horizontal"},W.value,{appear:"",onKeydown:F}),{default:D(()=>[(I(!0),i(e,null,P(q(L),(e,t)=>(I(),l(bt,{key:e.id,item:e,onContextmenu:a=>V(a,e,t,q(L).length),onMouseup:K(t=>$(e),["middle","prevent"]),onClose:$,onActive:z},null,8,["item","onContextmenu","onMouseup"]))),128))]),_:1},16)]),_:1},8,["space","is-scroll-wheel","is-scroll-button"]),E(o.$slots,"rightButton"),u(vt,{"icon-class":q(d)?"stack-tab__icon-restore":"stack-tab__icon-fullscreen",title:q(d)?q(c)("VueStackTab.restore"):q(c)("VueStackTab.maximum"),"aria-label":q(d)?q(c)("VueStackTab.restore"):q(c)("VueStackTab.maximum"),onClick:n[0]||(n[0]=e=>d.value=!q(d))},null,8,["icon-class","title","aria-label"]),u(a,{name:"stack-tab-zoom",appear:""},{default:D(()=>[q(g)?(I(),l(lt,{key:"context-menu-transition",left:q(y).left,top:q(y).top,"tab-item":q(y).item,max:q(y).max,index:q(y).index,"context-menu":O.value,"restore-focus-element":_.value,onClose:T},null,8,["left","top","tab-item","max","index","context-menu","restore-focus-element"])):s("",!0)]),_:1})],512))}}),yt=/* @__PURE__ */d({__name:"StackCacheRenderer",props:{route:{},component:{}},setup(e){const t=e,{refreshKey:a,activeCacheKey:r,activePageRefreshVersion:o,addPage:n}=et(),l=O(d({name:"StackCacheRendererEmpty",setup:()=>()=>null}));return j([()=>t.route.fullPath,()=>{return e=t.component,e?.type??e;var e},()=>a.value],()=>{l.value=n(t.route,t.component)},{immediate:!0}),(t,n)=>E(t.$slots,"default",{wrappedComponent:l.value,activeCacheKey:q(r),refreshKey:q(a),activePageRefreshVersion:q(o),component:e.component})}}),kt=/* @__PURE__ */d({__name:"StackKeepAlive",props:{transitionName:{default:"stack-tab-swap"}},emits:["loaded"],setup(e,{emit:r}){const o=r,{caches:n}=et(),s=()=>{o("loaded")};return(r,o)=>{const i=L("router-view");return I(),l(i,null,{default:D(({Component:r,route:o})=>[u(yt,{route:o,component:r},{default:D(({wrappedComponent:r,activeCacheKey:o,activePageRefreshVersion:i,component:c})=>[u(a,{name:e.transitionName,appear:"",mode:"out-in"},{default:D(()=>[(I(),l(t,{include:q(n)},[(I(),l(M(r),{key:`${o}-${i}`,vnode:c,onOnLoaded:s},null,40,["vnode"]))],1032,["include"]))]),_:2},1032,["name"])]),_:1},8,["route","component"])]),_:1})}}}),_t=new Set(["vue-stack-tabs:openTab","openTab"]),Tt=e=>"string"==typeof e||"number"==typeof e||null==e,wt=e=>"boolean"==typeof e?e:void 0,St=e=>{if(!Pe(e))return null;const{id:t,title:a,path:r,query:o,iframe:n,closable:l,refreshable:s,iframeRefreshMode:i}=e;if("string"!=typeof a||""===a.trim())return null;if("string"!=typeof r||""===r.trim()||!pe(r))return null;const c=(e=>{if(!Pe(e))return;const t={};for(const[a,r]of Object.entries(e))(Tt(r)||Array.isArray(r)&&r.every(Tt))&&(t[a]=r);return Object.keys(t).length>0?t:void 0})(o),u=wt(n),d=wt(l),f=wt(s),b=(e=>{if("reload"===e||"postMessage"===e)return e})(i);return{..."string"==typeof t&&t?{id:t}:{},title:a,path:r,...c?{query:c}:{},...void 0!==u?{iframe:u}:{},...void 0!==d?{closable:d}:{},...void 0!==f?{refreshable:f}:{},...b?{iframeRefreshMode:b}:{}}};function It(e){const{tabs:t,iframeRefreshKeys:a,iframeLoadTimeout:r,t:o}=e,l=n(()=>t.value.filter(e=>e.iframe)),s=n(()=>t.value.find(e=>e.active&&!e.iframe)),i=n(()=>Boolean(s.value)),c=x({}),u=e=>a.value[e]??0,d=(e,t=u(e.id))=>{const a=ve(e.url??"");return((e,t)=>{if(t<=0||"about:blank"===e)return e;const a=e.indexOf("#"),r=a>=0?e.slice(0,a):e,o=a>=0?e.slice(a):"",n=r.indexOf("?"),l=n>=0?r.slice(0,n):r,s=n>=0?r.slice(n+1):"",i=new URLSearchParams(s);return i.set("__stack_tabs_refresh",String(t)),`${l}?${i.toString()}${o}`})(c[e.id]?a:"about:blank",t)},f=n(()=>{const e={};for(const t of l.value){const a=u(t.id);e[t.id]=d(t,a)}return e}),b=x({}),m=e=>b[e]??{status:"idle"},p=/* @__PURE__ */new Map,v=e=>{const t=p.get(e);t&&(clearTimeout(t),p.delete(e))},h=(e,t={})=>{("loaded"!==m(e).status||t.force)&&(v(e),b[e]={status:"loading"},p.set(e,setTimeout(()=>{p.delete(e),"loading"===m(e).status&&(b[e]={status:"timeout",message:o("VueStackTab.iframeLoadTimeout")})},r)))},g=x({});j(()=>l.value.map(e=>({id:e.id,active:e.active})),e=>{for(const a of e)a.active&&(c[a.id]=!0,h(a.id));const t=new Set(e.map(e=>e.id));for(const a of Object.keys(b))t.has(a)||(v(a),delete b[a],delete c[a],delete g[a])},{immediate:!0}),j(a,(e,t={})=>{for(const a of l.value)a.active&&(e[a.id]??0)!==(t[a.id]??0)&&h(a.id,{force:!0})},{deep:!0});return _(()=>{for(const e of p.values())clearTimeout(e);p.clear()}),{iframeTabs:l,activeNonIframeTab:s,hasActiveNonIframeTab:i,iframeSrcMap:f,getIframeRefreshKey:u,getIframeKey:e=>`${e.id}-${u(e.id)}`,getIframeLoadState:m,shouldShowIframeLoading:e=>"loading"===m(e).status,shouldShowIframeError:e=>"timeout"===m(e).status,retryIframe:e=>{b[e]={status:"idle"},a.value={...a.value,[e]:(a.value[e]??0)+1},h(e,{force:!0})},setIframeRef:(e,t)=>{t?g[e]=t:delete g[e]},handleIframeLoad:(e,t)=>{const a=t.currentTarget,r=Number(a?.dataset.refreshKey??0);var o;c[e.id]&&("about:blank"!==d(e,r)&&r===u(e.id)&&a===g[e.id]&&(o=e.id,v(o),b[o]={status:"loaded"}))},handleRefreshIframePostMessage:e=>{const a=g[e],r=t.value.find(t=>t.id===e);if(a?.contentWindow)try{const e=((e,t)=>{if(!e||!pe(e))return null;try{const a=t??("undefined"!=typeof window?window.location.origin:void 0);if(!a&&!/^https?:\/\//i.test(e))return null;const r=new URL(e,a);if("http:"===r.protocol||"https:"===r.protocol)return r.origin}catch{return null}return null})(r?.url??"");if(!e)return;a.contentWindow.postMessage({type:"vue-stack-tabs:refresh"},e)}catch(o){}},createMessageHandler:(e,t)=>{const a=e=>Object.values(g).some(t=>t?.contentWindow===e);return r=>{if(!e.value.includes(r.origin))return;const o=((e,t)=>{if(!t(e.source))return null;if(!Pe(e.data))return null;const a=e.data;return"string"==typeof a.type&&_t.has(a.type)?St(a.payload):null})(r,a);o&&t(o).catch(e=>{})}}}}var At={class:"stack-tab__container"},xt=["id","role","aria-labelledby","aria-hidden","hidden"],Rt={class:"stack-tab__iframes"},Ct=["id","aria-labelledby"],Pt=["aria-label"],Et={class:"stack-tab__iframe-loading-text"},Lt={key:1,class:"stack-tab__iframe-error",role:"alert"},Mt={class:"stack-tab__iframe-error-text"},Ot=["onClick"],Vt=["onClick"],Wt=["src","data-refresh-key","title","sandbox","referrerpolicy","allow","onLoad"],Bt=/* @__PURE__ */d({__name:"StackTabs",props:{defaultTabs:{default:()=>[]},max:{default:20},contextmenu:{type:[Boolean,Object],default:!0},pageTransition:{default:"stack-tab-swap"},pageTransitionBack:{default:"stack-tab-swap-back"},tabTransition:{default:"stack-tab-zoom"},tabScrollMode:{default:Se.BOTH},width:{default:"100%"},height:{default:"100%"},i18n:{default:void 0},space:{default:300},globalScroll:{type:Boolean,default:!1},iframePath:{},sessionPrefix:{default:""},iframeAllowedOrigins:{default:()=>[]},iframeSandbox:{default:"allow-scripts allow-forms allow-popups allow-downloads allow-same-origin"},iframeReferrerPolicy:{default:"strict-origin-when-cross-origin"},iframeAllow:{default:""},iframeLoadTimeout:{default:15e3}},emits:["onActive","onPageLoaded"],setup(t,{emit:r}){const o=r,d=t,{changeLocale:b,t:p}=ne(),v=m(Ve,null)??je({iframePath:d.iframePath,maxTabCount:d.max,useGlobalScroll:d.globalScroll,sessionPrefix:d.sessionPrefix}),y=f()?.appContext.app,T=((e,t={})=>{if(Be||(Be=e),t.app&&!Fe.has(t.app))return Fe.add(t.app),!0;if(!t.app&&Be===e&&!qe)return qe=!0,!0;if(t.isProduction??1)return!1;throw new Error("VueStackTabs only supports one <VueStackTabs> instance per Vue app.")})(v,y?{app:y}:void 0);T&&(A(Ve,v),A(Ke,v.eventBus));const w=C(!1),S=C();T&&A(We,w),j(w,e=>{S.value=e?fe("body *:not(.stack-tab,.stack-tab *)"):void 0});const{tabs:x,iframeRefreshKeys:R,destroy:L,initialize:M,setMaxSize:O,setGlobalScroll:W,setSessionPrefix:B}=T?et():{tabs:v.tabs,iframeRefreshKeys:v.iframeRefreshKeys,destroy:()=>{},initialize:()=>{},setMaxSize:()=>{},setGlobalScroll:()=>{},setSessionPrefix:()=>{}},{setIFramePath:K,openTab:$,openInNewWindow:z}=T?tt():{setIFramePath:()=>{},openTab:()=>Promise.resolve(void 0),openInNewWindow:()=>{}};T&&(K(d.iframePath),W(d.globalScroll),O(d.max),((e,t)=>{t&&e(t)})(b,d.i18n));const G=e=>{o("onActive",e)},U=()=>{o("onPageLoaded")},H=C(d.pageTransition),X=v.eventBus,J=()=>{H.value=d.pageTransition},Y=()=>{H.value=d.pageTransitionBack};T&&(X.on(Ne.FORWARD,J),X.on(Ne.BACKWARD,Y));const{iframeTabs:Q,activeNonIframeTab:Z,hasActiveNonIframeTab:ee,iframeSrcMap:te,getIframeRefreshKey:ae,getIframeKey:re,getIframeLoadState:oe,shouldShowIframeLoading:le,shouldShowIframeError:se,retryIframe:ie,setIframeRef:ce,handleIframeLoad:ue,handleRefreshIframePostMessage:de,createMessageHandler:be}=It({tabs:x,iframeRefreshKeys:R,iframeLoadTimeout:d.iframeLoadTimeout,t:p}),me=be(n(()=>["undefined"!=typeof window?window.location.origin:"",...d.iframeAllowedOrigins??[]].filter(Boolean)),$);return T&&X.on(Ne.REFRESH_IFRAME_POSTMESSAGE,de),k(()=>{T&&(B(d.sessionPrefix),M(d.defaultTabs),window.addEventListener("message",me))}),_(()=>{T&&(window.removeEventListener("message",me),X.off(Ne.REFRESH_IFRAME_POSTMESSAGE,de),X.off(Ne.FORWARD,J),X.off(Ne.BACKWARD,Y),L(),((e,t={})=>{t.app&&Fe.delete(t.app),t.app||Be!==e||(qe=!1),Be===e&&(Be=null)})(v,y?{app:y}:void 0))}),(r,o)=>q(T)?(I(),i("div",{key:0,class:h(["stack-tab",{"stack-tab__maximum":w.value}]),style:g({width:t.width,height:t.height,"z-index":S.value})},[u(gt,{space:t.space,"tab-transition":t.tabTransition,"tab-scroll-mode":t.tabScrollMode,contextmenu:t.contextmenu,max:t.max,onActive:G},{leftButton:D(()=>[E(r.$slots,"leftButton")]),rightButton:D(()=>[E(r.$slots,"rightButton")]),_:3},8,["space","tab-transition","tab-scroll-mode","contextmenu","max"]),c("div",At,[u(a,{name:H.value,appear:""},{default:D(()=>[N((I(),i("div",{id:q(Z)?q(it)(q(Z).id):void 0,key:"keep-alive",class:"stack-tab__keep-alive-panel",role:q(Z)?"tabpanel":void 0,"aria-labelledby":q(Z)?q(st)(q(Z).id):void 0,"aria-hidden":q(Z)?void 0:"true",hidden:!q(ee)},[u(kt,{"transition-name":H.value,onLoaded:U},null,8,["transition-name"])],8,xt)),[[F,q(ee)]])]),_:1},8,["name"]),c("div",Rt,[(I(!0),i(e,null,P(q(Q),e=>(I(),l(a,{key:q(re)(e),name:H.value,appear:""},{default:D(()=>[N((I(),i("div",{id:q(it)(e.id),key:q(re)(e),class:"stack-tab__iframe-wrapper",role:"tabpanel","aria-labelledby":q(st)(e.id)},[q(le)(e.id)?(I(),i("div",{key:0,class:"stack-tab__iframe-loading",role:"status","aria-live":"polite","aria-label":q(p)("VueStackTab.loading")},[E(r.$slots,"iframeLoading",{tab:e},()=>[c("span",Et,V(q(p)("VueStackTab.loading")),1)])],8,Pt)):s("",!0),q(se)(e.id)?(I(),i("div",Lt,[E(r.$slots,"iframeError",{tab:e,retry:q(ie)},()=>[c("span",Mt,V(q(oe)(e.id).message??q(p)("VueStackTab.iframeLoadTimeout")),1),c("button",{type:"button",class:"stack-tab__iframe-error-retry",onClick:t=>q(ie)(e.id)},V(q(p)("VueStackTab.retry")),9,Ot),e.url&&q(pe)(e.url)?(I(),i("button",{key:0,type:"button",class:"stack-tab__iframe-error-open",onClick:t=>q(z)(e.id)},V(q(p)("VueStackTab.openInNewWindow")),9,Vt)):s("",!0)])])):s("",!0),c("iframe",{ref_for:!0,ref:t=>q(ce)(e.id,t),class:"stack-tab__iframe",src:q(te)[e.id]||"about:blank","data-refresh-key":q(ae)(e.id),title:e.title||q(p)("VueStackTab.iframeTitle")||"Stack tab iframe",sandbox:t.iframeSandbox||void 0,referrerpolicy:t.iframeReferrerPolicy,allow:t.iframeAllow||void 0,frameborder:"0",onLoad:t=>q(ue)(e,t)},null,40,Wt)],8,Ct)),[[F,e.active]])]),_:2},1032,["name"]))),128))])])],6)):s("",!0)}}),qt=(e,t)=>{e.clear();for(const a of t)e.push(_e(a))};function Ft(){const{attrs:e,props:t}=f(),a=e.tId??t.tId,r=e.pId??t.pId,o=z(),n=G(),l=$e(),{getTab:s,evictPageCache:i,addPageScroller:c,active:u}=et(),d=o.query.__tab;let b=0;return{forward:e=>{const t=s(a),r=e.query||{};if(t){const a=t.pages.peek();if(a&&a.path===e.path&&Te(r,a.query||{}))return void(t.active||u(t.id))}const o=Ce({__tab:d},e.query),i=++b;l.emit(Ne.FORWARD);let c="";Ue({apply:()=>{const a=t?t.pages.readonlyList().map(e=>_e(e)):[];return t&&(c=Oe(),t.pages.push({id:c,tabId:t.id,path:e.path,query:ke(r)})),a},navigate:()=>n.push({path:e.path,query:o}),rollback:e=>{t&&qt(t.pages,e)},isFailureResult:$,isCurrent:()=>b===i,cleanupStale:()=>{if(!t||!c)return;const e=t.pages.list().filter(e=>e.id!==c);qt(t.pages,e)}}).catch(e=>{})},backward:(e,t)=>{const r=s(a);if(!r)return!1;const o=r.pages;let c=0;if("number"==typeof e)c=Math.abs(e);else{const t=ye(e),a=t.query||{},r=o.readonlyList();let n=!1;for(let e=o.size()-2;e>=0;e--){c++;const o=r[e];if(o?.path===t.path&&Te(a,o?.query||{})){n=!0;break}}if(!n)return!1}if(c<=0)return!1;if(o.size()<=c&&(c=o.size()-1),c<=0)return!1;const u=o.readonlyList().map(e=>_e(e)),f=[];for(let a=0;a<c;a++){const e=o.pop();e&&f.push(e.id)}const m=o.peek();if(!m)return qt(o,u),!1;t&&(m._backParams=t),l.emit(Ne.BACKWARD);const p=Ce({__tab:d},m.query||{}),v=++b;return Ue({apply:()=>u,navigate:()=>n.push({path:m.path,query:p}),rollback:e=>qt(o,e),isFailureResult:$,isCurrent:()=>b===v,commit:()=>{for(const e of f)i(e)},cleanupStale:()=>{const e=new Set(o.list().map(e=>e.id));for(const t of f)e.has(t)||i(t)}}).catch(e=>{}),!0},addScrollTarget:(...e)=>{c(r,...e)}}}var jt=/* @__PURE__ */d({__name:"iframe",setup:e=>(Ft(),()=>{})}),Dt=()=>{const e=$e(),{attrs:t}=f(),a=()=>String(t.tId??"");S(()=>{r()});const r=()=>{e.emit(Ne.PAGE_LOADING,{tId:a(),value:!1})};return{openTabLoading:()=>{e.emit(Ne.PAGE_LOADING,{tId:a(),value:!0})},closeTabLoading:r}},Nt="vue-stack-tabs:refresh",Kt="vue-stack-tabs:openTab";function $t(e,t={}){"undefined"!=typeof window&&window.parent&&window.parent.postMessage({type:Kt,payload:e},t.targetOrigin??window.location.origin)}function zt(e=()=>window.location.reload(),t={}){if("undefined"==typeof window)return()=>{};const a=t.allowedOrigins??[],r=t=>{t.source===window.parent&&(a.length>0&&!a.includes(t.origin)||"vue-stack-tabs:refresh"===t.data?.type&&e())};return window.addEventListener("message",r),()=>window.removeEventListener("message",r)}var Gt={install(e,t){var a;a="1.3.0","undefined"!=typeof window&&window.console.log("%c vue-stack-tabs %c v"+a+" %c","background:#306fff; padding:2px 8px; border-radius:3px 0 0 3px; color:#fff;","background:#00d797; padding:2px 8px; border-radius:0 3px 3px 0; color:#fff;","background:transparent");const r=je();e.provide(Ve,r),e.provide(Ke,r.eventBus),e.component("VueStackTabs",Bt).use(ue().getI18n(t))}};export{jt as IFrame,Kt as MSG_OPEN_TAB,Nt as MSG_REFRESH,Ie as Stack,Bt as StackTab,Bt as VueStackTabs,vt as TabHeaderButton,Se as TabScrollMode,Gt as default,zt as onRefreshRequest,$t as postOpenTab,tt as useTabActions,Dt as useTabLoading,Ft as useTabRouter};