@wisemen/vue-core-actions 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/LICENSE.md +59 -0
  2. package/dist/composables/actionDropdownMenuContent.composable.d.ts +24 -0
  3. package/dist/composables/actionGroup.composable.d.ts +32 -0
  4. package/dist/composables/actionPreview.composable.d.ts +15 -0
  5. package/dist/composables/actionShortcuts.composable.d.ts +27 -0
  6. package/dist/composables/activeModels.composable.d.ts +3 -0
  7. package/dist/composables/commandMenuActions.composable.d.ts +28 -0
  8. package/dist/composables/commandMenuAnimation.composable.d.ts +5 -0
  9. package/dist/composables/commandMenuNavigation.composable.d.ts +35 -0
  10. package/dist/composables/focusedModels.composable.d.ts +6 -0
  11. package/dist/composables/isSelectorVisible.composable.d.ts +1 -0
  12. package/dist/composables/temporaryActions.composable.d.ts +6 -0
  13. package/dist/composables/viewModels.composable.d.ts +3 -0
  14. package/dist/const/index.d.ts +6 -0
  15. package/dist/createActions.d.ts +47 -0
  16. package/dist/index.cjs +1 -0
  17. package/dist/index.d.ts +22 -0
  18. package/dist/index.js +2122 -0
  19. package/dist/locales/en-US.json.d.ts +12 -0
  20. package/dist/locales/nl-BE.json.d.ts +12 -0
  21. package/dist/locales-BPtvPqGa.js +22 -0
  22. package/dist/locales-D5e1O21n.cjs +1 -0
  23. package/dist/locales.cjs +1 -0
  24. package/dist/locales.d.ts +20 -0
  25. package/dist/locales.js +2 -0
  26. package/dist/stores/actionManager.store.d.ts +82 -0
  27. package/dist/stores/actionRegistry.store.d.ts +17 -0
  28. package/dist/types/action.type.d.ts +225 -0
  29. package/dist/types/actionContext.type.d.ts +112 -0
  30. package/dist/types/actionGroup.type.d.ts +19 -0
  31. package/dist/types/actionModel.type.d.ts +4 -0
  32. package/dist/types/commandMenu.type.d.ts +11 -0
  33. package/dist/types/keyboardShortcut.type.d.ts +26 -0
  34. package/dist/utils/commandMenuGroups.util.d.ts +12 -0
  35. package/dist/utils/resolveActions.util.d.ts +13 -0
  36. package/dist/utils/subActions.util.d.ts +5 -0
  37. package/package.json +73 -0
package/dist/index.js ADDED
@@ -0,0 +1,2122 @@
1
+ import { t as actionsLocales } from "./locales-BPtvPqGa.js";
2
+ import { computed, getCurrentInstance, getCurrentScope, inject, isRef, markRaw, nextTick, onBeforeUnmount, onMounted, onScopeDispose, onUnmounted, reactive, ref, shallowRef, toValue, unref, watch } from "vue";
3
+ import { useI18n } from "vue-i18n";
4
+ import { defineStore } from "pinia";
5
+ import { useRoute, useRouter } from "vue-router";
6
+ function tryOnScopeDispose(e, T) {
7
+ return getCurrentScope() ? (onScopeDispose(e, T), !0) : !1;
8
+ }
9
+ var isClient = typeof window < "u" && typeof document < "u";
10
+ typeof WorkerGlobalScope < "u" && globalThis instanceof WorkerGlobalScope;
11
+ var notNullish = (e) => e != null, toString = Object.prototype.toString, isObject = (e) => toString.call(e) === "[object Object]", noop = () => {};
12
+ function createFilterWrapper(e, T) {
13
+ function E(...E) {
14
+ return new Promise((D, O) => {
15
+ Promise.resolve(e(() => T.apply(this, E), {
16
+ fn: T,
17
+ thisArg: this,
18
+ args: E
19
+ })).then(D).catch(O);
20
+ });
21
+ }
22
+ return E;
23
+ }
24
+ function debounceFilter(e, T = {}) {
25
+ let E, D, O = noop, k = (e) => {
26
+ clearTimeout(e), O(), O = noop;
27
+ }, A;
28
+ return (j) => {
29
+ let M = toValue(e), N = toValue(T.maxWait);
30
+ return E && k(E), M <= 0 || N !== void 0 && N <= 0 ? (D &&= (k(D), void 0), Promise.resolve(j())) : new Promise((e, P) => {
31
+ O = T.rejectOnCancel ? P : e, A = j, N && !D && (D = setTimeout(() => {
32
+ E && k(E), D = void 0, e(A());
33
+ }, N)), E = setTimeout(() => {
34
+ D && k(D), D = void 0, e(j());
35
+ }, M);
36
+ });
37
+ };
38
+ }
39
+ function throttleFilter(...e) {
40
+ let T = 0, E, D = !0, O = noop, A, j, M, N, P;
41
+ !isRef(e[0]) && typeof e[0] == "object" ? {delay: j, trailing: M = !0, leading: N = !0, rejectOnCancel: P = !1} = e[0] : [j, M = !0, N = !0, P = !1] = e;
42
+ let F = () => {
43
+ E && (clearTimeout(E), E = void 0, O(), O = noop);
44
+ };
45
+ return (e) => {
46
+ let k = toValue(j), I = Date.now() - T, L = () => A = e();
47
+ return F(), k <= 0 ? (T = Date.now(), L()) : (I > k ? (T = Date.now(), (N || !D) && L()) : M && (A = new Promise((e, A) => {
48
+ O = P ? A : e, E = setTimeout(() => {
49
+ T = Date.now(), D = !0, e(L()), F();
50
+ }, Math.max(0, k - I));
51
+ })), !N && !E && (E = setTimeout(() => D = !0, k)), D = !1, A);
52
+ };
53
+ }
54
+ function toArray(e) {
55
+ return Array.isArray(e) ? e : [e];
56
+ }
57
+ function getLifeCycleTarget(e) {
58
+ return e || getCurrentInstance();
59
+ }
60
+ function useDebounceFn(e, T = 200, E = {}) {
61
+ return createFilterWrapper(debounceFilter(T, E), e);
62
+ }
63
+ function useThrottleFn(e, T = 200, E = !1, D = !0, O = !1) {
64
+ return createFilterWrapper(throttleFilter(T, E, D, O), e);
65
+ }
66
+ function tryOnMounted(e, T = !0, E) {
67
+ getLifeCycleTarget(E) ? onMounted(e, E) : T ? e() : nextTick(e);
68
+ }
69
+ function tryOnUnmounted(e, T) {
70
+ getLifeCycleTarget(T) && onUnmounted(e, T);
71
+ }
72
+ function watchImmediate(e, T, E) {
73
+ return watch(e, T, {
74
+ ...E,
75
+ immediate: !0
76
+ });
77
+ }
78
+ function watchOnce(e, T, E) {
79
+ return watch(e, T, {
80
+ ...E,
81
+ once: !0
82
+ });
83
+ }
84
+ var defaultWindow = isClient ? window : void 0;
85
+ isClient && window.document, isClient && window.navigator, isClient && window.location;
86
+ function unrefElement(e) {
87
+ let T = toValue(e);
88
+ return T?.$el ?? T;
89
+ }
90
+ function useEventListener(...e) {
91
+ let E = (e, T, E, D) => (e.addEventListener(T, E, D), () => e.removeEventListener(T, E, D)), D = computed(() => {
92
+ let T = toArray(toValue(e[0])).filter((e) => e != null);
93
+ return T.every((e) => typeof e != "string") ? T : void 0;
94
+ });
95
+ return watchImmediate(() => [
96
+ D.value?.map((e) => unrefElement(e)) ?? [defaultWindow].filter((e) => e != null),
97
+ toArray(toValue(D.value ? e[1] : e[0])),
98
+ toArray(unref(D.value ? e[2] : e[1])),
99
+ toValue(D.value ? e[3] : e[2])
100
+ ], ([e, T, D, O], k, A) => {
101
+ if (!e?.length || !T?.length || !D?.length) return;
102
+ let j = isObject(O) ? { ...O } : O, M = e.flatMap((e) => T.flatMap((T) => D.map((D) => E(e, T, D, j))));
103
+ A(() => {
104
+ M.forEach((e) => e());
105
+ });
106
+ }, { flush: "post" });
107
+ }
108
+ function useMounted() {
109
+ let e = shallowRef(!1), T = getCurrentInstance();
110
+ return T && onMounted(() => {
111
+ e.value = !0;
112
+ }, T), e;
113
+ }
114
+ /* @__NO_SIDE_EFFECTS__ */
115
+ function useSupported(e) {
116
+ let E = useMounted();
117
+ return computed(() => (E.value, !!e()));
118
+ }
119
+ function useMutationObserver(e, E, D = {}) {
120
+ let { window: O = defaultWindow, ...k } = D, A, j = /* @__PURE__ */ useSupported(() => O && "MutationObserver" in O), M = () => {
121
+ A &&= (A.disconnect(), void 0);
122
+ }, N = watch(computed(() => {
123
+ let T = toArray(toValue(e)).map(unrefElement).filter(notNullish);
124
+ return new Set(T);
125
+ }), (e) => {
126
+ M(), j.value && e.size && (A = new MutationObserver(E), e.forEach((e) => A.observe(e, k)));
127
+ }, {
128
+ immediate: !0,
129
+ flush: "post"
130
+ }), P = () => A?.takeRecords(), F = () => {
131
+ N(), M();
132
+ };
133
+ return tryOnScopeDispose(F), {
134
+ isSupported: j,
135
+ stop: F,
136
+ takeRecords: P
137
+ };
138
+ }
139
+ function useIntersectionObserver(e, E, D = {}) {
140
+ let { root: O, rootMargin: k = "0px", threshold: A = 0, window: j = defaultWindow, immediate: M = !0 } = D, N = /* @__PURE__ */ useSupported(() => j && "IntersectionObserver" in j), P = computed(() => toArray(toValue(e)).map(unrefElement).filter(notNullish)), F = noop, I = shallowRef(M), L = N.value ? watch(() => [
141
+ P.value,
142
+ unrefElement(O),
143
+ I.value
144
+ ], ([e, T]) => {
145
+ if (F(), !I.value || !e.length) return;
146
+ let D = new IntersectionObserver(E, {
147
+ root: unrefElement(T),
148
+ rootMargin: k,
149
+ threshold: A
150
+ });
151
+ e.forEach((e) => e && D.observe(e)), F = () => {
152
+ D.disconnect(), F = noop;
153
+ };
154
+ }, {
155
+ immediate: M,
156
+ flush: "post"
157
+ }) : noop, B = () => {
158
+ F(), L(), I.value = !1;
159
+ };
160
+ return tryOnScopeDispose(B), {
161
+ isSupported: N,
162
+ isActive: I,
163
+ pause() {
164
+ F(), I.value = !1;
165
+ },
166
+ resume() {
167
+ I.value = !0;
168
+ },
169
+ stop: B
170
+ };
171
+ }
172
+ function useElementVisibility(e, T = {}) {
173
+ let { window: E = defaultWindow, scrollTarget: D, threshold: O = 0, rootMargin: k, once: A = !1, initialValue: j = !1 } = T, M = shallowRef(j), { stop: N } = useIntersectionObserver(e, (e) => {
174
+ let T = M.value, E = 0;
175
+ for (let D of e) D.time >= E && (E = D.time, T = D.isIntersecting);
176
+ M.value = T, A && watchOnce(M, () => {
177
+ N();
178
+ });
179
+ }, {
180
+ root: D,
181
+ window: E,
182
+ threshold: O,
183
+ rootMargin: toValue(k)
184
+ });
185
+ return M;
186
+ }
187
+ function resolveElement(e) {
188
+ return typeof Window < "u" && e instanceof Window ? e.document.documentElement : typeof Document < "u" && e instanceof Document ? e.documentElement : e;
189
+ }
190
+ var ARRIVED_STATE_THRESHOLD_PIXELS = 1;
191
+ function useScroll(e, E = {}) {
192
+ let { throttle: D = 0, idle: O = 200, onStop: k = noop, onScroll: A = noop, offset: j = {
193
+ left: 0,
194
+ right: 0,
195
+ top: 0,
196
+ bottom: 0
197
+ }, observe: M = { mutation: !1 }, eventListenerOptions: N = {
198
+ capture: !1,
199
+ passive: !0
200
+ }, behavior: P = "auto", window: F = defaultWindow, onError: L = (e) => {
201
+ console.error(e);
202
+ } } = E, B = typeof M == "boolean" ? { mutation: M } : M, V = shallowRef(0), H = shallowRef(0), U = computed({
203
+ get() {
204
+ return V.value;
205
+ },
206
+ set(e) {
207
+ G(e, void 0);
208
+ }
209
+ }), W = computed({
210
+ get() {
211
+ return H.value;
212
+ },
213
+ set(e) {
214
+ G(void 0, e);
215
+ }
216
+ });
217
+ function G(T, E) {
218
+ var D, O;
219
+ if (!F) return;
220
+ let k = toValue(e);
221
+ if (!k) return;
222
+ (D = k instanceof Document ? F.document.body : k) == null || D.scrollTo({
223
+ top: toValue(E) ?? W.value,
224
+ left: toValue(T) ?? U.value,
225
+ behavior: toValue(P)
226
+ });
227
+ let A = (k == null || (O = k.document) == null ? void 0 : O.documentElement) || k?.documentElement || k;
228
+ U != null && (V.value = A.scrollLeft), W != null && (H.value = A.scrollTop);
229
+ }
230
+ let K = shallowRef(!1), q = reactive({
231
+ left: !0,
232
+ right: !1,
233
+ top: !0,
234
+ bottom: !1
235
+ }), J = reactive({
236
+ left: !1,
237
+ right: !1,
238
+ top: !1,
239
+ bottom: !1
240
+ }), Y = (e) => {
241
+ K.value && (K.value = !1, J.left = !1, J.right = !1, J.top = !1, J.bottom = !1, k(e));
242
+ }, X = useDebounceFn(Y, D + O), Q = (e) => {
243
+ var T;
244
+ if (!F) return;
245
+ let E = (e == null || (T = e.document) == null ? void 0 : T.documentElement) || e?.documentElement || unrefElement(e), { display: D, flexDirection: O, direction: k } = F.getComputedStyle(E), A = k === "rtl" ? -1 : 1, M = E.scrollLeft;
246
+ J.left = M < V.value, J.right = M > V.value;
247
+ let N = Math.abs(M * A) <= (j.left || 0), P = Math.abs(M * A) + E.clientWidth >= E.scrollWidth - (j.right || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;
248
+ D === "flex" && O === "row-reverse" ? (q.left = P, q.right = N) : (q.left = N, q.right = P), V.value = M;
249
+ let I = E.scrollTop;
250
+ e === F.document && !I && (I = F.document.body.scrollTop), J.top = I < H.value, J.bottom = I > H.value;
251
+ let L = Math.abs(I) <= (j.top || 0), R = Math.abs(I) + E.clientHeight >= E.scrollHeight - (j.bottom || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;
252
+ D === "flex" && O === "column-reverse" ? (q.top = R, q.bottom = L) : (q.top = L, q.bottom = R), H.value = I;
253
+ }, $ = (e) => {
254
+ F && (Q(e.target.documentElement ?? e.target), K.value = !0, X(e), A(e));
255
+ };
256
+ return useEventListener(e, "scroll", D ? useThrottleFn($, D, !0, !1) : $, N), tryOnMounted(() => {
257
+ try {
258
+ let T = toValue(e);
259
+ if (!T) return;
260
+ Q(T);
261
+ } catch (e) {
262
+ L(e);
263
+ }
264
+ }), B?.mutation && e != null && e !== F && e !== document && useMutationObserver(e, () => {
265
+ let T = toValue(e);
266
+ T && Q(T);
267
+ }, {
268
+ attributes: !0,
269
+ childList: !0,
270
+ subtree: !0
271
+ }), useEventListener(e, "scrollend", Y, N), {
272
+ x: U,
273
+ y: W,
274
+ isScrolling: K,
275
+ arrivedState: q,
276
+ directions: J,
277
+ measure() {
278
+ let T = toValue(e);
279
+ F && T && Q(T);
280
+ }
281
+ };
282
+ }
283
+ function useInfiniteScroll(e, E, D = {}) {
284
+ let { direction: O = "bottom", interval: k = 100, canLoadMore: A = () => !0 } = D, M = reactive(useScroll(e, {
285
+ ...D,
286
+ offset: {
287
+ [O]: D.distance ?? 0,
288
+ ...D.offset
289
+ }
290
+ })), N = ref(), P = computed(() => !!N.value), F = computed(() => resolveElement(toValue(e))), R = useElementVisibility(F), B = computed(() => F.value ? A(F.value) : !1);
291
+ function H() {
292
+ if (M.measure(), !F.value || !R.value || !B.value) return;
293
+ let { scrollHeight: e, clientHeight: T, scrollWidth: D, clientWidth: A } = F.value, P = O === "bottom" || O === "top" ? e <= T : D <= A;
294
+ (M.arrivedState[O] || P) && (N.value ||= Promise.all([E(M), new Promise((e) => setTimeout(e, k))]).finally(() => {
295
+ N.value = null, nextTick(() => H());
296
+ }));
297
+ }
298
+ return tryOnUnmounted(watch(() => [
299
+ M.arrivedState[O],
300
+ R.value,
301
+ B.value
302
+ ], H, { immediate: !0 })), {
303
+ isLoading: P,
304
+ reset() {
305
+ nextTick(() => H());
306
+ }
307
+ };
308
+ }
309
+ const isAuthenticated = shallowRef(!1);
310
+ function setIsAuthenticated(e) {
311
+ isAuthenticated.value = e;
312
+ }
313
+ function _createUntypedAction(e) {
314
+ return e;
315
+ }
316
+ function typedActionDropdownMenu(e) {
317
+ return e;
318
+ }
319
+ function typedActionTrigger(e) {
320
+ return e;
321
+ }
322
+ function typedActionFocus(e) {
323
+ return e;
324
+ }
325
+ function createActions() {
326
+ function e(e) {
327
+ return e;
328
+ }
329
+ return {
330
+ createAction: e,
331
+ setIsAuthenticated
332
+ };
333
+ }
334
+ var wordRegex = /[\s\-_./]+/;
335
+ async function applicableActions(e, T, E, D) {
336
+ let O = T.searchInput.length, k = O >= 0, A = resolveActionFactories(e);
337
+ if (k) {
338
+ let e = [], k = [], j = [...A];
339
+ for (; j.length > 0;) {
340
+ let E = j.shift();
341
+ e.push(E);
342
+ let D = resolveSearchSubActionsConfig(E, T), A = O >= (D?.minLength ?? 2);
343
+ if (E.subActions !== void 0 && A) {
344
+ let e = D?.maxResults ?? 99, O = E.subActions(T);
345
+ if (Array.isArray(O)) {
346
+ let T = decorateLiftedChildren(O.slice(0, e), E);
347
+ j.push(...T);
348
+ } else if (isSubActionsWithMeta$1(O)) {
349
+ let T = decorateLiftedChildren(O.actions.slice(0, e), E);
350
+ j.push(...T);
351
+ } else {
352
+ let T = E;
353
+ k.push(async () => decorateLiftedChildren(await resolveAsyncSubActions(O, e), T));
354
+ }
355
+ }
356
+ }
357
+ if (k.length > 0 && E !== void 0) {
358
+ E(filterAndRank(e, T, D));
359
+ let O = [...e];
360
+ return await Promise.all(k.map(async (e) => {
361
+ let k = await e();
362
+ O.push(...k), E(filterAndRank(O, T, D));
363
+ })), filterAndRank(O, T, D);
364
+ }
365
+ let M = (await Promise.all(k.map((e) => e()))).flat();
366
+ A = [...e, ...M];
367
+ }
368
+ return filterAndRank(A, T, D);
369
+ }
370
+ function filterAndRank(e, T, E) {
371
+ let D = T.searchInput.length >= 0, O = /* @__PURE__ */ new Set(), k = /* @__PURE__ */ new Set(), A = [];
372
+ for (let E of e) if (resolveApplicable(E, T)) {
373
+ if (E.id !== void 0) {
374
+ if (k.has(E.id)) continue;
375
+ k.add(E.id);
376
+ }
377
+ if (E.key !== void 0) {
378
+ if (O.has(E.key)) continue;
379
+ O.add(E.key);
380
+ }
381
+ A.push(E);
382
+ }
383
+ if (D) {
384
+ let e = A.map((e) => ({
385
+ action: e,
386
+ score: scoreAction(e, T.searchInput, T)
387
+ })).filter(({ score: e }) => e >= .24);
388
+ return e = e.toSorted((e, D) => {
389
+ let O = e.action.parentAction === void 0 ? 0 : 1, k = D.action.parentAction === void 0 ? 0 : 1;
390
+ if (O !== k) return O - k;
391
+ let A = e.action.parentAction ?? E, j = D.action.parentAction ?? E, M = A?.showSelectedSubActionsFirst !== !1 && resolveActionSelected(e.action, T) ? 0 : 1, N = j?.showSelectedSubActionsFirst !== !1 && resolveActionSelected(D.action, T) ? 0 : 1;
392
+ if (M !== N) return M - N;
393
+ let P = D.score - e.score;
394
+ if (Math.abs(P) > .05) return P;
395
+ let F = resolveGroupPriority(e.action, T), I = resolveGroupPriority(D.action, T);
396
+ return F === I ? P : F - I;
397
+ }), e.map((e) => e.action);
398
+ }
399
+ let j = E?.showSelectedSubActionsFirst !== !1;
400
+ return A.sort((e, E) => {
401
+ let D = j && resolveActionSelected(e, T) ? 0 : 1, O = j && resolveActionSelected(E, T) ? 0 : 1;
402
+ return D === O ? resolveGroupPriority(e, T) - resolveGroupPriority(E, T) : D - O;
403
+ });
404
+ }
405
+ function isSubActionsWithMeta$1(e) {
406
+ return typeof e == "object" && !!e && "actions" in e && "pagination" in e && Array.isArray(e.actions);
407
+ }
408
+ async function resolveAsyncSubActions(e, T) {
409
+ if (e instanceof Promise) {
410
+ let E = await e;
411
+ return isSubActionsWithMeta$1(E) ? E.actions.slice(0, T) : E.slice(0, T);
412
+ }
413
+ let E = [];
414
+ for await (let D of e) if (E.push(D), E.length >= T) break;
415
+ return E;
416
+ }
417
+ function resolveActionFactories(e) {
418
+ let T = [];
419
+ for (let E of e) typeof E == "function" ? T.push(...E()) : T.push(E);
420
+ return T;
421
+ }
422
+ function decorateLiftedChildren(e, T) {
423
+ let E = T.rootAction ?? T;
424
+ return e.map((e) => ({
425
+ ...e,
426
+ group: e.group === void 0 && T.group?.groupWhenLifted ? T.group.groupWhenLifted : e.group,
427
+ parentAction: T,
428
+ rootAction: E,
429
+ onlyVisibleThroughSearch: !0
430
+ }));
431
+ }
432
+ function resolveApplicable(e, T) {
433
+ return !(!isAuthenticated.value && e.availableWhenUnauthenticated !== !0 || e.isApplicable !== void 0 && !e.isApplicable(T) || T.menuType === "commandMenu" && e.disabledReason !== void 0 && typeof e.disabledReason(T) == "string" || e.onlyVisibleThroughSearch && T.menuType !== void 0 && T.searchInput.length === 0);
434
+ }
435
+ function resolveGroupPriority(e, T) {
436
+ let E = e.group?.priority ?? null;
437
+ return E === null ? 9999 : typeof E == "function" ? E(T) : E;
438
+ }
439
+ function scoreAction(e, T, E) {
440
+ if (T.trim().length === 0 || e.skipFilterScoring) return 1;
441
+ let D = resolveActionName(e, E), O = buildSecondaryString(e, E);
442
+ if (e.keywordsExactMatch) {
443
+ let T = Array.isArray(e.keywordsExactMatch) ? e.keywordsExactMatch : [e.keywordsExactMatch];
444
+ if (T.some((e) => D.toLowerCase().includes(e.toLowerCase())) || T.some((e) => O.toLowerCase().includes(e.toLowerCase()))) return 1;
445
+ }
446
+ let k = fuzzyScoreSync(D, T), A = fuzzyScoreSync(O, T) * .85, j = Math.max(k, A);
447
+ return j < .24 && (D.toLowerCase().includes(T.toLowerCase()) ? j = .29 : O.toLowerCase().includes(T.toLowerCase()) && (j = .245)), e.parentAction && (j += -.15), e.scoreOverride !== void 0 && (j = e.scoreOverride), e.sortPriority !== void 0 && (j -= e.sortPriority * 1e-4), j;
448
+ }
449
+ function buildSecondaryString(e, T) {
450
+ let E = [], D = e.parentScoreInfluence ?? "all";
451
+ if (D !== "none") {
452
+ let O = e.parentAction;
453
+ if (D === "all") for (; O;) {
454
+ let e = O.nameAsParent ? typeof O.nameAsParent == "function" ? O.nameAsParent(T) : O.nameAsParent : resolveActionName(O, T);
455
+ E.push(e), O = O.parentAction;
456
+ }
457
+ if (D === "direct" && e.parentAction !== void 0) {
458
+ let D = e.parentAction, O = D.nameAsParent ? typeof D.nameAsParent == "function" ? D.nameAsParent(T) : D.nameAsParent : resolveActionName(D, T);
459
+ E.push(O);
460
+ }
461
+ }
462
+ if (E.push(resolveActionName(e, T)), e.keywords !== void 0) {
463
+ let T = Array.isArray(e.keywords) ? e.keywords : [e.keywords];
464
+ E.push(...T);
465
+ }
466
+ return E.join(" ");
467
+ }
468
+ function fuzzyScoreSync(e, T) {
469
+ if (!e || !T) return 0;
470
+ let E = e.toLowerCase().trim(), D = T.toLowerCase().trim();
471
+ if (!D || E === D) return 1;
472
+ if (E.startsWith(D)) return .92 - Math.min(.12, (E.length - D.length) * .002);
473
+ let O = E.indexOf(D);
474
+ if (O !== -1) return .82 - Math.min(.12, O * .004);
475
+ let k = E.split(wordRegex);
476
+ if (k.some((e) => e.startsWith(D))) return .68;
477
+ let A = k.map((e) => e[0] ?? "").join("");
478
+ if (A === D || A.startsWith(D)) return .6;
479
+ let j = E.length, M = D.length;
480
+ if (M > j) return 0;
481
+ let N = 0, P = -1, F = -1, I = -1, L = 0, R = 0;
482
+ for (let e = 0; e < j && N < M; e++) E[e] === D[N] && (P === -1 && (P = e), F = e, N++, I === e - 1 ? (L++, R += L * .08) : L = 0, I = e);
483
+ if (N < M) return 0;
484
+ let z = F - P + 1, B = (1 - P / j) * .3 + M / z * .35 + M / j * .2 + Math.min(R, .15);
485
+ return Math.min(.55, Math.max(0, B));
486
+ }
487
+ function resolveActionValue(e, T) {
488
+ return typeof e == "function" ? e(T) : e;
489
+ }
490
+ function resolveActionName(e, T) {
491
+ return typeof e.name == "function" ? e.name(T) : e.name;
492
+ }
493
+ function resolveActionAvatar(e, T) {
494
+ return typeof e.avatar == "function" ? e.avatar(T) : e.avatar ?? null;
495
+ }
496
+ function resolveActionHint(e, T) {
497
+ return typeof e.hint == "function" ? e.hint(T) : e.hint ?? null;
498
+ }
499
+ function resolveActionSelected(e, T) {
500
+ return typeof e.selected == "function" ? e.selected(T) : e.selected ?? null;
501
+ }
502
+ function resolveSearchSubActionsConfig(e, T) {
503
+ return typeof e.searchSubActionsConfig == "function" ? e.searchSubActionsConfig(T) : e.searchSubActionsConfig ?? null;
504
+ }
505
+ function resolveActionPreview(e, T) {
506
+ return typeof e.preview == "function" ? e.preview(T) : null;
507
+ }
508
+ function useActionPreview({ highlightedActionId: e, getContext: E, resolvedActions: D }) {
509
+ let O = ref(!1), k = computed(() => {
510
+ if (e.value === null || !O.value) return null;
511
+ let T = D.value.find((T) => T.id === e.value) ?? null;
512
+ return T === null ? null : resolveActionPreview(T, E());
513
+ });
514
+ function A() {
515
+ O.value = !0;
516
+ }
517
+ function j() {
518
+ O.value = !1;
519
+ }
520
+ function M(e) {
521
+ if (!(e.target instanceof HTMLInputElement)) return;
522
+ let T = e.target;
523
+ T.selectionStart === T.value.length && e.key === "ArrowRight" && (O.value = !0, e.preventDefault()), e.key === "ArrowLeft" && O.value && (O.value = !1, e.preventDefault()), e.key !== "ArrowLeft" && e.key !== "ArrowRight" && e.key !== "ArrowUp" && e.key !== "ArrowDown" && (O.value = !1);
524
+ }
525
+ return {
526
+ preview: k,
527
+ onHidePreview: j,
528
+ onKeyDown: M,
529
+ onShowPreview: A
530
+ };
531
+ }
532
+ function useIsSelectorVisible(e) {
533
+ let T = ref(!1), E = null;
534
+ function D() {
535
+ T.value = document.querySelector(e) !== null;
536
+ }
537
+ return onMounted(() => {
538
+ D(), E = new MutationObserver(D), E.observe(document.body, {
539
+ childList: !0,
540
+ subtree: !0
541
+ });
542
+ }), onBeforeUnmount(() => {
543
+ E?.disconnect();
544
+ }), T;
545
+ }
546
+ async function executeAction(e, T, E) {
547
+ e.execute !== void 0 && (await e.execute(T), E?.onComplete?.());
548
+ }
549
+ function dedupeModels(e) {
550
+ let T = /* @__PURE__ */ new Set();
551
+ return e.filter((e) => T.has(e) ? !1 : (T.add(e), !0));
552
+ }
553
+ const useActionManagerStore = defineStore("actionManager", () => {
554
+ let e = ref([]), T = ref([]), E = ref({}), D = useRouter(), O = useRoute(), k = useIsSelectorVisible("[data-dialog]:not([data-command-menu])");
555
+ function A(e) {
556
+ E.value = {
557
+ ...E.value,
558
+ ...e
559
+ };
560
+ }
561
+ function j(e) {
562
+ let T = { ...E.value };
563
+ delete T[e], E.value = T;
564
+ }
565
+ function M(T) {
566
+ e.value = T;
567
+ }
568
+ function N(e) {
569
+ T.value = e;
570
+ }
571
+ function P(A) {
572
+ let j = dedupeModels([
573
+ ...A.models ?? [],
574
+ ...T.value,
575
+ ...e.value
576
+ ]), M = {
577
+ ...E.value,
578
+ ...A.metadata
579
+ };
580
+ return {
581
+ getPaginationOffsetForSubActionId: (e) => A.subActionsMeta?.[e] ?? null,
582
+ hasActiveDialogs: () => k.value,
583
+ hasTargetedModelsOfType: (e) => j.some((T) => T.modelName === e),
584
+ isRouteActive: (e, T) => T === void 0 || T === !1 ? O.matched.some((T) => T.name === e) : O.name === e,
585
+ allModels: j,
586
+ focusedModels: e.value,
587
+ keyboardEvent: A.keyboardEvent,
588
+ menuType: A.menuType,
589
+ metadata: M,
590
+ models: A.models ?? [],
591
+ router: D,
592
+ searchInput: A.searchInput ?? "",
593
+ subActionsMeta: A.subActionsMeta,
594
+ targetedModelOfType: (e) => j.find((T) => T.modelName === e) ?? null,
595
+ targetedModelOfTypeOrThrow: (e) => {
596
+ let T = j.find((T) => T.modelName === e) ?? null;
597
+ if (T === null) throw Error(`Model of type: ${e} not found`);
598
+ return T;
599
+ },
600
+ targetedModelsOfType: (e) => j.filter((T) => T.modelName === e)
601
+ };
602
+ }
603
+ return {
604
+ actionContext: P,
605
+ executeAction,
606
+ focusedModels: e,
607
+ metadata: E,
608
+ registerMetadata: A,
609
+ setFocusedModels: M,
610
+ setViewModels: N,
611
+ unregisterMetadata: j,
612
+ viewModels: T
613
+ };
614
+ });
615
+ function isSubActionsWithMeta(e) {
616
+ return typeof e == "object" && !!e && "actions" in e && "pagination" in e && Array.isArray(e.actions);
617
+ }
618
+ function storeSubActionsPagination(e, T, E) {
619
+ return isSubActionsWithMeta(T) ? (e.id && (E[e.id] = T.pagination.nextOffset), T.actions) : (e.id && delete E[e.id], T);
620
+ }
621
+ async function resolveSubActions(e, T, E, D = 297) {
622
+ if (e.subActions === void 0) return [];
623
+ let O = e.subActions(T);
624
+ if (Array.isArray(O) || isSubActionsWithMeta(O)) return storeSubActionsPagination(e, O, E);
625
+ if (O instanceof Promise) return storeSubActionsPagination(e, await O, E);
626
+ let k = [];
627
+ for await (let e of O) if (k.push(e), k.length >= D) break;
628
+ return k;
629
+ }
630
+ function useActionDropdownMenuContent({ actions: e, metadata: E, models: D, parentAction: O, scrollContainerRef: k }) {
631
+ let A = useI18n(), j = useActionManagerStore(), M = ref(null), N = ref(""), P = ref(""), F = ref(!1), I = ref([]), R = ref({}), z = ref(!0), B = 0, U = computed(() => j.actionContext({
632
+ menuType: "contextualMenu",
633
+ metadata: E.value,
634
+ models: D.value,
635
+ searchInput: P.value
636
+ })), { preview: W, onHidePreview: G, onKeyDown: K, onShowPreview: q } = useActionPreview({
637
+ highlightedActionId: M,
638
+ getContext: () => U.value,
639
+ resolvedActions: I
640
+ }), J = computed(() => {
641
+ if (O.value == null) return A.t("search");
642
+ let e = resolveSearchSubActionsConfig(O.value, U.value)?.placeholder;
643
+ return e === void 0 ? A.t("search") : typeof e == "function" ? e() : e;
644
+ });
645
+ async function Y() {
646
+ let T = ++B, E = U.value;
647
+ try {
648
+ let D = e.value;
649
+ O.value?.subActions !== void 0 && (D = await resolveSubActions(O.value, E, R.value));
650
+ let k = await applicableActions(D, E, (e) => {
651
+ T !== B || e.length === 0 || (I.value = e);
652
+ }, O.value ?? void 0);
653
+ if (T !== B) return;
654
+ I.value = k, F.value = U.value.searchInput.trim().length > 0;
655
+ } catch (e) {
656
+ throw console.error("Error refreshing actions", e), e;
657
+ } finally {
658
+ T === B && (z.value = !1);
659
+ }
660
+ }
661
+ useInfiniteScroll(k, async () => {
662
+ let e = O.value;
663
+ if (e?.subActions === void 0 || e.id === void 0) return;
664
+ let T = R.value[e.id];
665
+ if (T == null) return;
666
+ let k = j.actionContext({
667
+ menuType: "contextualMenu",
668
+ metadata: E.value,
669
+ models: D.value,
670
+ searchInput: N.value,
671
+ subActionsMeta: { [e.id]: T }
672
+ }), A = e.subActions(k), M;
673
+ if (Array.isArray(A) || isSubActionsWithMeta(A)) M = A;
674
+ else if (A instanceof Promise) M = await A;
675
+ else {
676
+ let e = [];
677
+ for await (let T of A) e.push(T);
678
+ I.value = [...I.value, ...e];
679
+ return;
680
+ }
681
+ I.value = [...I.value, ...storeSubActionsPagination(e, M, R.value)];
682
+ }, {
683
+ canLoadMore: () => {
684
+ let e = O.value;
685
+ return e?.subActions === void 0 || e.id === void 0 ? !1 : R.value[e.id] != null;
686
+ },
687
+ distance: 100
688
+ });
689
+ let X = computed(() => {
690
+ let e = I.value.filter((e) => {
691
+ let T = e.isApplicable === void 0 || e.isApplicable(U.value), E = e.disabledReason?.(U.value) != null;
692
+ return T || E;
693
+ });
694
+ if (F.value) return e.length > 0 ? [e] : [];
695
+ let T = [], E = [], D;
696
+ for (let O of e) E.length > 0 && O.separatorGroup !== D && (T.push(E), E = []), D = O.separatorGroup, E.push(O);
697
+ return E.length > 0 && T.push(E), T;
698
+ }), Z = useDebounceFn(() => {
699
+ P.value = N.value, Y();
700
+ }, 200);
701
+ return watch(N, () => {
702
+ R.value = {}, Z();
703
+ }), Y(), {
704
+ highlightedActionId: M,
705
+ isLoading: z,
706
+ actionGroups: X,
707
+ context: U,
708
+ placeholder: J,
709
+ preview: W,
710
+ searchInput: N,
711
+ onHidePreview: G,
712
+ onKeyDown: K,
713
+ onShowPreview: q
714
+ };
715
+ }
716
+ let GroupPriority = /* @__PURE__ */ function(e) {
717
+ return e[e.HOVER = 1] = "HOVER", e[e.VIEW = 2] = "VIEW", e[e.MODEL = 3] = "MODEL", e[e.GENERAL = 4] = "GENERAL", e[e.NAVIGATION = 5] = "NAVIGATION", e[e.PREFERENCES = 6] = "PREFERENCES", e[e.ACCOUNT = 7] = "ACCOUNT", e[e.DEVELOPER = 8] = "DEVELOPER", e;
718
+ }({});
719
+ function useActionGroup() {
720
+ let e = useI18n();
721
+ return {
722
+ account: {
723
+ name: e.t("action.group.account"),
724
+ priority: GroupPriority.ACCOUNT
725
+ },
726
+ developer: {
727
+ name: e.t("action.group.developer"),
728
+ priority: GroupPriority.DEVELOPER
729
+ },
730
+ general: {
731
+ name: e.t("action.group.general"),
732
+ priority: GroupPriority.GENERAL
733
+ },
734
+ navigation: {
735
+ name: e.t("action.group.navigation"),
736
+ priority: GroupPriority.NAVIGATION
737
+ },
738
+ preferences: {
739
+ name: e.t("action.group.preferences"),
740
+ priority: GroupPriority.PREFERENCES
741
+ }
742
+ };
743
+ }
744
+ var HotkeysContext = Symbol("HotkeysContext");
745
+ function useDefaultHotkeysOptions() {
746
+ return inject(HotkeysContext, null)?.defaultOptions ?? {};
747
+ }
748
+ function detectPlatform() {
749
+ if (typeof navigator > "u") return "linux";
750
+ let e = navigator.platform?.toLowerCase() ?? "", T = navigator.userAgent?.toLowerCase() ?? "";
751
+ return e.includes("mac") || T.includes("mac") ? "mac" : e.includes("win") || T.includes("win") ? "windows" : "linux";
752
+ }
753
+ var MODIFIER_ORDER = [
754
+ "Control",
755
+ "Alt",
756
+ "Shift",
757
+ "Meta"
758
+ ], MODIFIER_ALIASES = {
759
+ Control: "Control",
760
+ Ctrl: "Control",
761
+ control: "Control",
762
+ ctrl: "Control",
763
+ Shift: "Shift",
764
+ shift: "Shift",
765
+ Alt: "Alt",
766
+ Option: "Alt",
767
+ alt: "Alt",
768
+ option: "Alt",
769
+ Command: "Meta",
770
+ Cmd: "Meta",
771
+ Meta: "Meta",
772
+ command: "Meta",
773
+ cmd: "Meta",
774
+ meta: "Meta",
775
+ OS: "Meta",
776
+ os: "Meta",
777
+ Win: "Meta",
778
+ win: "Meta",
779
+ CommandOrControl: "Mod",
780
+ Mod: "Mod",
781
+ commandorcontrol: "Mod",
782
+ mod: "Mod"
783
+ };
784
+ function resolveModifier(e, T = detectPlatform()) {
785
+ return e === "Mod" ? T === "mac" ? "Meta" : "Control" : e;
786
+ }
787
+ var LETTER_KEYS = new Set(/* @__PURE__ */ "ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("")), NUMBER_KEYS = new Set([
788
+ "0",
789
+ "1",
790
+ "2",
791
+ "3",
792
+ "4",
793
+ "5",
794
+ "6",
795
+ "7",
796
+ "8",
797
+ "9"
798
+ ]), FUNCTION_KEYS = new Set([
799
+ "F1",
800
+ "F2",
801
+ "F3",
802
+ "F4",
803
+ "F5",
804
+ "F6",
805
+ "F7",
806
+ "F8",
807
+ "F9",
808
+ "F10",
809
+ "F11",
810
+ "F12"
811
+ ]), NAVIGATION_KEYS = new Set([
812
+ "ArrowUp",
813
+ "ArrowDown",
814
+ "ArrowLeft",
815
+ "ArrowRight",
816
+ "Home",
817
+ "End",
818
+ "PageUp",
819
+ "PageDown"
820
+ ]), EDITING_KEYS = new Set([
821
+ "Enter",
822
+ "Escape",
823
+ "Space",
824
+ "Tab",
825
+ "Backspace",
826
+ "Delete"
827
+ ]), PUNCTUATION_KEYS = new Set([
828
+ "/",
829
+ "[",
830
+ "]",
831
+ "\\",
832
+ "=",
833
+ "-",
834
+ ",",
835
+ ".",
836
+ ";",
837
+ "`"
838
+ ]), PUNCTUATION_CODE_MAP = {
839
+ Backquote: "`",
840
+ Backslash: "\\",
841
+ BracketLeft: "[",
842
+ BracketRight: "]",
843
+ Comma: ",",
844
+ Equal: "=",
845
+ Minus: "-",
846
+ Period: ".",
847
+ Semicolon: ";",
848
+ Slash: "/"
849
+ };
850
+ new Set([
851
+ ...LETTER_KEYS,
852
+ ...NUMBER_KEYS,
853
+ ...FUNCTION_KEYS,
854
+ ...NAVIGATION_KEYS,
855
+ ...EDITING_KEYS,
856
+ ...PUNCTUATION_KEYS
857
+ ]);
858
+ var KEY_ALIASES = {
859
+ Esc: "Escape",
860
+ esc: "Escape",
861
+ escape: "Escape",
862
+ Return: "Enter",
863
+ return: "Enter",
864
+ enter: "Enter",
865
+ " ": "Space",
866
+ space: "Space",
867
+ Spacebar: "Space",
868
+ spacebar: "Space",
869
+ tab: "Tab",
870
+ backspace: "Backspace",
871
+ Del: "Delete",
872
+ del: "Delete",
873
+ delete: "Delete",
874
+ Up: "ArrowUp",
875
+ up: "ArrowUp",
876
+ arrowup: "ArrowUp",
877
+ Down: "ArrowDown",
878
+ down: "ArrowDown",
879
+ arrowdown: "ArrowDown",
880
+ Left: "ArrowLeft",
881
+ left: "ArrowLeft",
882
+ arrowleft: "ArrowLeft",
883
+ Right: "ArrowRight",
884
+ right: "ArrowRight",
885
+ arrowright: "ArrowRight",
886
+ home: "Home",
887
+ end: "End",
888
+ pageup: "PageUp",
889
+ pagedown: "PageDown",
890
+ PgUp: "PageUp",
891
+ PgDn: "PageDown",
892
+ pgup: "PageUp",
893
+ pgdn: "PageDown"
894
+ };
895
+ function isSingleLetterKey(e) {
896
+ return /^\p{Letter}$/u.test(e);
897
+ }
898
+ function normalizeKeyName(e) {
899
+ if (!e) return "";
900
+ if (e in KEY_ALIASES) return KEY_ALIASES[e];
901
+ if (isSingleLetterKey(e)) {
902
+ let T = e.toUpperCase();
903
+ return T.length === 1 ? T : e;
904
+ }
905
+ let T = e.toUpperCase();
906
+ return /^F([1-9]|1[0-2])$/.test(T) ? T : e;
907
+ }
908
+ function parseHotkey(e, T = detectPlatform()) {
909
+ let E = e.split("+"), D = /* @__PURE__ */ new Set(), O = "";
910
+ for (let e = 0; e < E.length; e++) {
911
+ let k = E[e].trim();
912
+ if (e === E.length - 1) O = normalizeKeyName(k);
913
+ else {
914
+ let e = MODIFIER_ALIASES[k] ?? MODIFIER_ALIASES[k.toLowerCase()];
915
+ if (e) {
916
+ let E = resolveModifier(e, T);
917
+ D.add(E);
918
+ } else E.length === 1 && (O = normalizeKeyName(k));
919
+ }
920
+ }
921
+ return !O && E.length > 0 && (O = normalizeKeyName(E[E.length - 1].trim())), {
922
+ key: O,
923
+ ctrl: D.has("Control"),
924
+ shift: D.has("Shift"),
925
+ alt: D.has("Alt"),
926
+ meta: D.has("Meta"),
927
+ modifiers: MODIFIER_ORDER.filter((e) => D.has(e))
928
+ };
929
+ }
930
+ function rawHotkeyToParsedHotkey(e, T = detectPlatform()) {
931
+ let E = e.ctrl ?? !1, D = e.shift ?? !1, O = e.alt ?? !1, k = e.meta ?? !1;
932
+ e.mod && (resolveModifier("Mod", T) === "Control" ? E = !0 : k = !0);
933
+ let A = MODIFIER_ORDER.filter((e) => {
934
+ switch (e) {
935
+ case "Control": return E;
936
+ case "Shift": return D;
937
+ case "Alt": return O;
938
+ case "Meta": return k;
939
+ default: return !1;
940
+ }
941
+ });
942
+ return {
943
+ key: e.key,
944
+ ctrl: E,
945
+ shift: D,
946
+ alt: O,
947
+ meta: k,
948
+ modifiers: A
949
+ };
950
+ }
951
+ function normalizedHotkeyStringFromParsed(e, T) {
952
+ let E = T === "mac" ? e.meta && !e.ctrl : e.ctrl && !e.meta, D = [];
953
+ if (E) D.push("Mod"), e.alt && D.push("Alt"), e.shift && D.push("Shift");
954
+ else for (let T of MODIFIER_ORDER) e.modifiers.includes(T) && D.push(T);
955
+ return D.push(normalizeKeyName(e.key)), D.join("+");
956
+ }
957
+ function normalizeHotkey(e, T = detectPlatform()) {
958
+ return normalizedHotkeyStringFromParsed(parseHotkey(e, T), T);
959
+ }
960
+ function normalizeHotkeyFromParsed(e, T = detectPlatform()) {
961
+ return normalizedHotkeyStringFromParsed(e, T);
962
+ }
963
+ function normalizeRegisterableHotkey(e, T = detectPlatform()) {
964
+ return typeof e == "string" ? normalizeHotkey(e, T) : normalizeHotkeyFromParsed(rawHotkeyToParsedHotkey(e, T), T);
965
+ }
966
+ function isModifierKey(e) {
967
+ return e in MODIFIER_ALIASES || e.toLowerCase() in MODIFIER_ALIASES;
968
+ }
969
+ function formatHotkeySequence(e) {
970
+ return e.join(" ");
971
+ }
972
+ function formatHotkey(e) {
973
+ let T = [];
974
+ for (let E of MODIFIER_ORDER) e.modifiers.includes(E) && T.push(E);
975
+ return T.push(e.key), T.join("+");
976
+ }
977
+ function matchesKeyboardEvent(e, T, E = detectPlatform()) {
978
+ let D = typeof T == "string" ? parseHotkey(T, E) : T;
979
+ if (e.ctrlKey !== D.ctrl || e.shiftKey !== D.shift || e.altKey !== D.alt || e.metaKey !== D.meta) return !1;
980
+ let O = normalizeKeyName(e.key), k = D.key;
981
+ if (O !== "Dead" && O.length === 1 && k.length === 1) {
982
+ if (O.toUpperCase() === k.toUpperCase()) return !0;
983
+ if (isSingleLetterKey(O) && (/^[A-Za-z]$/.test(O) || !e.altKey)) return !1;
984
+ }
985
+ if (e.code && (O === "Dead" || O.length === 1 && k.length === 1)) {
986
+ if (e.code.startsWith("Key")) {
987
+ let T = e.code.slice(3);
988
+ if (T.length === 1 && /^[A-Za-z]$/.test(T)) return T.toUpperCase() === k.toUpperCase();
989
+ }
990
+ if (e.code.startsWith("Digit")) {
991
+ let T = e.code.slice(5);
992
+ if (T.length === 1 && /^[0-9]$/.test(T)) return T === k;
993
+ }
994
+ return e.code in PUNCTUATION_CODE_MAP ? PUNCTUATION_CODE_MAP[e.code] === k : !1;
995
+ }
996
+ return O === k;
997
+ }
998
+ var defaultHotkeyOptions = {
999
+ preventDefault: !0,
1000
+ stopPropagation: !0,
1001
+ eventType: "keydown",
1002
+ enabled: !0,
1003
+ ignoreInputs: !0,
1004
+ conflictBehavior: "warn"
1005
+ };
1006
+ function getDefaultIgnoreInputs(e) {
1007
+ return !(e.ctrl || e.meta || e.key === "Escape");
1008
+ }
1009
+ function isInputElement(e) {
1010
+ if (!e) return !1;
1011
+ if (e instanceof HTMLInputElement) {
1012
+ let T = e.type.toLowerCase();
1013
+ return !(T === "button" || T === "submit" || T === "reset");
1014
+ }
1015
+ return !!(e instanceof HTMLTextAreaElement || e instanceof HTMLSelectElement || e instanceof HTMLElement && e.isContentEditable);
1016
+ }
1017
+ function getActiveElementForListenerTarget(e) {
1018
+ return typeof document > "u" ? null : typeof Document < "u" && e instanceof Document || typeof Node < "u" && e.nodeType === Node.DOCUMENT_NODE ? e.activeElement : typeof HTMLElement < "u" && e instanceof HTMLElement ? e.ownerDocument.activeElement ?? null : e.document.activeElement ?? null;
1019
+ }
1020
+ function shouldIgnoreInputEvent(e, T, E) {
1021
+ let D = getActiveElementForListenerTarget(T);
1022
+ return D && isInputElement(D) && D !== E || e.composedPath().some((e) => isInputElement(e) && e !== E) ? !0 : isInputElement(e.target) && e.target !== E;
1023
+ }
1024
+ function isEventForTarget(e, T) {
1025
+ return T === document || T === window ? e.currentTarget === T || e.currentTarget === document.documentElement : T === window ? e.currentTarget === window || e.currentTarget === document || e.currentTarget === document.documentElement : !!(T instanceof HTMLElement && (e.currentTarget === T || e.target instanceof Node && T.contains(e.target)));
1026
+ }
1027
+ function handleConflict(e, T, E, D) {
1028
+ if (E !== "allow") {
1029
+ if (E === "warn") {
1030
+ console.warn(`'${T}' is already registered. Multiple handlers will be triggered. Use conflictBehavior: 'replace' to replace the existing handler, or conflictBehavior: 'allow' to suppress this warning.`);
1031
+ return;
1032
+ }
1033
+ if (E === "error") throw Error(`'${T}' is already registered. Use conflictBehavior: 'replace' to replace the existing handler, or conflictBehavior: 'allow' to allow multiple registrations.`);
1034
+ D(e);
1035
+ }
1036
+ }
1037
+ var ReactiveFlags = /* @__PURE__ */ function(e) {
1038
+ return e[e.None = 0] = "None", e[e.Mutable = 1] = "Mutable", e[e.Watching = 2] = "Watching", e[e.RecursedCheck = 4] = "RecursedCheck", e[e.Recursed = 8] = "Recursed", e[e.Dirty = 16] = "Dirty", e[e.Pending = 32] = "Pending", e;
1039
+ }({});
1040
+ /* @__NO_SIDE_EFFECTS__ */
1041
+ function createReactiveSystem({ update: e, notify: T, unwatched: E }) {
1042
+ return {
1043
+ link: D,
1044
+ unlink: O,
1045
+ propagate: k,
1046
+ checkDirty: A,
1047
+ shallowPropagate: j
1048
+ };
1049
+ function D(e, T, E) {
1050
+ let D = T.depsTail;
1051
+ if (D !== void 0 && D.dep === e) return;
1052
+ let O = D === void 0 ? T.deps : D.nextDep;
1053
+ if (O !== void 0 && O.dep === e) {
1054
+ O.version = E, T.depsTail = O;
1055
+ return;
1056
+ }
1057
+ let k = e.subsTail;
1058
+ if (k !== void 0 && k.version === E && k.sub === T) return;
1059
+ let A = T.depsTail = e.subsTail = {
1060
+ version: E,
1061
+ dep: e,
1062
+ sub: T,
1063
+ prevDep: D,
1064
+ nextDep: O,
1065
+ prevSub: k,
1066
+ nextSub: void 0
1067
+ };
1068
+ O !== void 0 && (O.prevDep = A), D === void 0 ? T.deps = A : D.nextDep = A, k === void 0 ? e.subs = A : k.nextSub = A;
1069
+ }
1070
+ function O(e, T = e.sub) {
1071
+ let D = e.dep, O = e.prevDep, k = e.nextDep, A = e.nextSub, j = e.prevSub;
1072
+ return k === void 0 ? T.depsTail = O : k.prevDep = O, O === void 0 ? T.deps = k : O.nextDep = k, A === void 0 ? D.subsTail = j : A.prevSub = j, j === void 0 ? (D.subs = A) === void 0 && E(D) : j.nextSub = A, k;
1073
+ }
1074
+ function k(e) {
1075
+ let E = e.nextSub, D;
1076
+ top: do {
1077
+ let O = e.sub, k = O.flags;
1078
+ if (k & (ReactiveFlags.RecursedCheck | ReactiveFlags.Recursed | ReactiveFlags.Dirty | ReactiveFlags.Pending) ? k & (ReactiveFlags.RecursedCheck | ReactiveFlags.Recursed) ? k & ReactiveFlags.RecursedCheck ? !(k & (ReactiveFlags.Dirty | ReactiveFlags.Pending)) && M(e, O) ? (O.flags = k | (ReactiveFlags.Recursed | ReactiveFlags.Pending), k &= ReactiveFlags.Mutable) : k = ReactiveFlags.None : O.flags = k & ~ReactiveFlags.Recursed | ReactiveFlags.Pending : k = ReactiveFlags.None : O.flags = k | ReactiveFlags.Pending, k & ReactiveFlags.Watching && T(O), k & ReactiveFlags.Mutable) {
1079
+ let T = O.subs;
1080
+ if (T !== void 0) {
1081
+ let O = (e = T).nextSub;
1082
+ O !== void 0 && (D = {
1083
+ value: E,
1084
+ prev: D
1085
+ }, E = O);
1086
+ continue;
1087
+ }
1088
+ }
1089
+ if ((e = E) !== void 0) {
1090
+ E = e.nextSub;
1091
+ continue;
1092
+ }
1093
+ for (; D !== void 0;) if (e = D.value, D = D.prev, e !== void 0) {
1094
+ E = e.nextSub;
1095
+ continue top;
1096
+ }
1097
+ break;
1098
+ } while (!0);
1099
+ }
1100
+ function A(T, E) {
1101
+ let D, O = 0, k = !1;
1102
+ top: do {
1103
+ let A = T.dep, M = A.flags;
1104
+ if (E.flags & ReactiveFlags.Dirty) k = !0;
1105
+ else if ((M & (ReactiveFlags.Mutable | ReactiveFlags.Dirty)) === (ReactiveFlags.Mutable | ReactiveFlags.Dirty)) {
1106
+ if (e(A)) {
1107
+ let e = A.subs;
1108
+ e.nextSub !== void 0 && j(e), k = !0;
1109
+ }
1110
+ } else if ((M & (ReactiveFlags.Mutable | ReactiveFlags.Pending)) === (ReactiveFlags.Mutable | ReactiveFlags.Pending)) {
1111
+ (T.nextSub !== void 0 || T.prevSub !== void 0) && (D = {
1112
+ value: T,
1113
+ prev: D
1114
+ }), T = A.deps, E = A, ++O;
1115
+ continue;
1116
+ }
1117
+ if (!k) {
1118
+ let e = T.nextDep;
1119
+ if (e !== void 0) {
1120
+ T = e;
1121
+ continue;
1122
+ }
1123
+ }
1124
+ for (; O--;) {
1125
+ let O = E.subs, A = O.nextSub !== void 0;
1126
+ if (A ? (T = D.value, D = D.prev) : T = O, k) {
1127
+ if (e(E)) {
1128
+ A && j(O), E = T.sub;
1129
+ continue;
1130
+ }
1131
+ k = !1;
1132
+ } else E.flags &= ~ReactiveFlags.Pending;
1133
+ E = T.sub;
1134
+ let M = T.nextDep;
1135
+ if (M !== void 0) {
1136
+ T = M;
1137
+ continue top;
1138
+ }
1139
+ }
1140
+ return k;
1141
+ } while (!0);
1142
+ }
1143
+ function j(e) {
1144
+ do {
1145
+ let E = e.sub, D = E.flags;
1146
+ (D & (ReactiveFlags.Pending | ReactiveFlags.Dirty)) === ReactiveFlags.Pending && (E.flags = D | ReactiveFlags.Dirty, (D & (ReactiveFlags.Watching | ReactiveFlags.RecursedCheck)) === ReactiveFlags.Watching && T(E));
1147
+ } while ((e = e.nextSub) !== void 0);
1148
+ }
1149
+ function M(e, T) {
1150
+ let E = T.depsTail;
1151
+ for (; E !== void 0;) {
1152
+ if (E === e) return !0;
1153
+ E = E.prevDep;
1154
+ }
1155
+ return !1;
1156
+ }
1157
+ }
1158
+ function toObserver(e, T, E) {
1159
+ let D = typeof e == "object", O = D ? e : void 0;
1160
+ return {
1161
+ next: (D ? e.next : e)?.bind(O),
1162
+ error: (D ? e.error : T)?.bind(O),
1163
+ complete: (D ? e.complete : E)?.bind(O)
1164
+ };
1165
+ }
1166
+ var queuedEffects = [], cycle = 0, { link, unlink, propagate, checkDirty, shallowPropagate } = /* @__PURE__ */ createReactiveSystem({
1167
+ update(e) {
1168
+ return e._update();
1169
+ },
1170
+ notify(e) {
1171
+ queuedEffects[queuedEffectsLength++] = e, e.flags &= ~ReactiveFlags.Watching;
1172
+ },
1173
+ unwatched(e) {
1174
+ e.depsTail !== void 0 && (e.depsTail = void 0, e.flags = ReactiveFlags.Mutable | ReactiveFlags.Dirty, purgeDeps(e));
1175
+ }
1176
+ }), notifyIndex = 0, queuedEffectsLength = 0, activeSub, batchDepth = 0;
1177
+ function purgeDeps(e) {
1178
+ let T = e.depsTail, E = T === void 0 ? e.deps : T.nextDep;
1179
+ for (; E !== void 0;) E = unlink(E, e);
1180
+ }
1181
+ function flush() {
1182
+ if (!(batchDepth > 0)) {
1183
+ for (; notifyIndex < queuedEffectsLength;) {
1184
+ let e = queuedEffects[notifyIndex];
1185
+ queuedEffects[notifyIndex++] = void 0, e.notify();
1186
+ }
1187
+ notifyIndex = 0, queuedEffectsLength = 0;
1188
+ }
1189
+ }
1190
+ function createAtom(e, T) {
1191
+ let E = typeof e == "function", D = e, O = {
1192
+ _snapshot: E ? void 0 : e,
1193
+ subs: void 0,
1194
+ subsTail: void 0,
1195
+ deps: void 0,
1196
+ depsTail: void 0,
1197
+ flags: E ? ReactiveFlags.None : ReactiveFlags.Mutable,
1198
+ get() {
1199
+ return activeSub !== void 0 && link(O, activeSub, cycle), O._snapshot;
1200
+ },
1201
+ subscribe(e) {
1202
+ let T = toObserver(e), E = { current: !1 }, D = effect(() => {
1203
+ O.get(), E.current ? T.next?.(O._snapshot) : E.current = !0;
1204
+ });
1205
+ return { unsubscribe: () => {
1206
+ D.stop();
1207
+ } };
1208
+ },
1209
+ _update(e) {
1210
+ let k = activeSub, A = T?.compare ?? Object.is;
1211
+ if (E) activeSub = O, ++cycle, O.depsTail = void 0;
1212
+ else if (e === void 0) return !1;
1213
+ E && (O.flags = ReactiveFlags.Mutable | ReactiveFlags.RecursedCheck);
1214
+ try {
1215
+ let T = O._snapshot, k = typeof e == "function" ? e(T) : e === void 0 && E ? D(T) : e;
1216
+ return T === void 0 || !A(T, k) ? (O._snapshot = k, !0) : !1;
1217
+ } finally {
1218
+ activeSub = k, E && (O.flags &= ~ReactiveFlags.RecursedCheck), purgeDeps(O);
1219
+ }
1220
+ }
1221
+ };
1222
+ return E ? (O.flags = ReactiveFlags.Mutable | ReactiveFlags.Dirty, O.get = function() {
1223
+ let e = O.flags;
1224
+ if (e & ReactiveFlags.Dirty || e & ReactiveFlags.Pending && checkDirty(O.deps, O)) {
1225
+ if (O._update()) {
1226
+ let e = O.subs;
1227
+ e !== void 0 && shallowPropagate(e);
1228
+ }
1229
+ } else e & ReactiveFlags.Pending && (O.flags = e & ~ReactiveFlags.Pending);
1230
+ return activeSub !== void 0 && link(O, activeSub, cycle), O._snapshot;
1231
+ }) : O.set = function(e) {
1232
+ if (O._update(e)) {
1233
+ let e = O.subs;
1234
+ e !== void 0 && (propagate(e), shallowPropagate(e), flush());
1235
+ }
1236
+ }, O;
1237
+ }
1238
+ function effect(e) {
1239
+ let T = () => {
1240
+ let T = activeSub;
1241
+ activeSub = E, ++cycle, E.depsTail = void 0, E.flags = ReactiveFlags.Watching | ReactiveFlags.RecursedCheck;
1242
+ try {
1243
+ return e();
1244
+ } finally {
1245
+ activeSub = T, E.flags &= ~ReactiveFlags.RecursedCheck, purgeDeps(E);
1246
+ }
1247
+ }, E = {
1248
+ deps: void 0,
1249
+ depsTail: void 0,
1250
+ subs: void 0,
1251
+ subsTail: void 0,
1252
+ flags: ReactiveFlags.Watching | ReactiveFlags.RecursedCheck,
1253
+ notify() {
1254
+ let e = this.flags;
1255
+ e & ReactiveFlags.Dirty || e & ReactiveFlags.Pending && checkDirty(this.deps, this) ? T() : this.flags = ReactiveFlags.Watching;
1256
+ },
1257
+ stop() {
1258
+ this.flags = ReactiveFlags.None, this.depsTail = void 0, purgeDeps(this);
1259
+ }
1260
+ };
1261
+ return T(), E;
1262
+ }
1263
+ var Store = class {
1264
+ constructor(e, T) {
1265
+ this.atom = createAtom(e), this.get = this.get.bind(this), this.setState = this.setState.bind(this), this.subscribe = this.subscribe.bind(this), T && (this.actions = T(this));
1266
+ }
1267
+ setState(e) {
1268
+ this.atom.set(e);
1269
+ }
1270
+ get state() {
1271
+ return this.atom.get();
1272
+ }
1273
+ get() {
1274
+ return this.state;
1275
+ }
1276
+ subscribe(e) {
1277
+ return this.atom.subscribe(toObserver(e));
1278
+ }
1279
+ }, registrationIdCounter = 0;
1280
+ function generateId() {
1281
+ return `hotkey_${++registrationIdCounter}`;
1282
+ }
1283
+ var HotkeyManager = class e {
1284
+ static #e = null;
1285
+ #t;
1286
+ #n = /* @__PURE__ */ new Map();
1287
+ #r = /* @__PURE__ */ new Map();
1288
+ constructor() {
1289
+ this.registrations = new Store(/* @__PURE__ */ new Map()), this.#t = detectPlatform();
1290
+ }
1291
+ static getInstance() {
1292
+ return e.#e ||= new e(), e.#e;
1293
+ }
1294
+ static resetInstance() {
1295
+ e.#e &&= (e.#e.destroy(), null);
1296
+ }
1297
+ register(e, T, E = {}) {
1298
+ if (typeof document > "u" && !E.target) {
1299
+ let e = T;
1300
+ return {
1301
+ id: generateId(),
1302
+ unregister: () => {},
1303
+ get callback() {
1304
+ return e;
1305
+ },
1306
+ set callback(T) {
1307
+ e = T;
1308
+ },
1309
+ setOptions: () => {},
1310
+ get isActive() {
1311
+ return !1;
1312
+ }
1313
+ };
1314
+ }
1315
+ let D = generateId(), O = E.platform ?? this.#t, k = typeof e == "string" ? parseHotkey(e, O) : rawHotkeyToParsedHotkey(e, O), A = typeof e == "string" ? e : formatHotkey(k), j = E.target ?? document, M = E.conflictBehavior ?? "warn", N = this.#d(A, j);
1316
+ N && handleConflict(N.id, A, M, (e) => this.#i(e));
1317
+ let P = E.ignoreInputs ?? getDefaultIgnoreInputs(k), F = {
1318
+ id: D,
1319
+ hotkey: A,
1320
+ parsedHotkey: k,
1321
+ callback: T,
1322
+ options: {
1323
+ ...defaultHotkeyOptions,
1324
+ requireReset: !1,
1325
+ ...E,
1326
+ platform: O,
1327
+ ignoreInputs: P
1328
+ },
1329
+ hasFired: !1,
1330
+ triggerCount: 0,
1331
+ target: j
1332
+ };
1333
+ this.registrations.setState((e) => new Map(e).set(D, F)), this.#r.has(j) || this.#r.set(j, /* @__PURE__ */ new Set()), this.#r.get(j).add(D), this.#a(j);
1334
+ let I = this;
1335
+ return {
1336
+ get id() {
1337
+ return D;
1338
+ },
1339
+ unregister: () => {
1340
+ I.#i(D);
1341
+ },
1342
+ get callback() {
1343
+ return I.registrations.state.get(D)?.callback ?? T;
1344
+ },
1345
+ set callback(e) {
1346
+ let T = I.registrations.state.get(D);
1347
+ T && (T.callback = e);
1348
+ },
1349
+ setOptions: (e) => {
1350
+ I.registrations.setState((T) => {
1351
+ let E = T.get(D);
1352
+ if (E) {
1353
+ let O = new Map(T);
1354
+ return O.set(D, {
1355
+ ...E,
1356
+ options: {
1357
+ ...E.options,
1358
+ ...e
1359
+ }
1360
+ }), O;
1361
+ }
1362
+ return T;
1363
+ });
1364
+ },
1365
+ get isActive() {
1366
+ return I.registrations.state.has(D);
1367
+ }
1368
+ };
1369
+ }
1370
+ #i(e) {
1371
+ let T = this.registrations.state.get(e);
1372
+ if (!T) return;
1373
+ let E = T.target;
1374
+ this.registrations.setState((T) => {
1375
+ let E = new Map(T);
1376
+ return E.delete(e), E;
1377
+ });
1378
+ let D = this.#r.get(E);
1379
+ D && (D.delete(e), D.size === 0 && this.#o(E));
1380
+ }
1381
+ #a(e) {
1382
+ if (typeof document > "u" || this.#n.has(e)) return;
1383
+ let T = this.#l(e), E = this.#u(e);
1384
+ e.addEventListener("keydown", T), e.addEventListener("keyup", E), this.#n.set(e, {
1385
+ keydown: T,
1386
+ keyup: E
1387
+ });
1388
+ }
1389
+ #o(e) {
1390
+ if (typeof document > "u") return;
1391
+ let T = this.#n.get(e);
1392
+ T && (e.removeEventListener("keydown", T.keydown), e.removeEventListener("keyup", T.keyup), this.#n.delete(e), this.#r.delete(e));
1393
+ }
1394
+ #s(e, T, E) {
1395
+ let D = this.#r.get(T);
1396
+ if (D) for (let O of D) {
1397
+ let D = this.registrations.state.get(O);
1398
+ if (D && isEventForTarget(e, T) && D.options.enabled && !(D.options.ignoreInputs !== !1 && shouldIgnoreInputEvent(e, T, D.target))) if (E === "keydown") {
1399
+ if (D.options.eventType !== "keydown") continue;
1400
+ matchesKeyboardEvent(e, D.parsedHotkey, D.options.platform) && (D.options.preventDefault && e.preventDefault(), D.options.stopPropagation && e.stopPropagation(), (!D.options.requireReset || !D.hasFired) && (this.#c(D, e), D.options.requireReset && (D.hasFired = !0)));
1401
+ } else D.options.eventType === "keyup" && matchesKeyboardEvent(e, D.parsedHotkey, D.options.platform) && this.#c(D, e), D.options.requireReset && D.hasFired && this.#f(D, e) && (D.hasFired = !1);
1402
+ }
1403
+ }
1404
+ #c(e, T) {
1405
+ e.options.preventDefault && T.preventDefault(), e.options.stopPropagation && T.stopPropagation(), e.triggerCount++, this.registrations.setState((e) => new Map(e));
1406
+ let E = {
1407
+ hotkey: e.hotkey,
1408
+ parsedHotkey: e.parsedHotkey
1409
+ };
1410
+ e.callback(T, E);
1411
+ }
1412
+ #l(e) {
1413
+ return (T) => {
1414
+ this.#s(T, e, "keydown");
1415
+ };
1416
+ }
1417
+ #u(e) {
1418
+ return (T) => {
1419
+ this.#s(T, e, "keyup");
1420
+ };
1421
+ }
1422
+ #d(e, T) {
1423
+ for (let E of this.registrations.state.values()) if (E.hotkey === e && E.target === T) return E;
1424
+ return null;
1425
+ }
1426
+ #f(e, T) {
1427
+ let E = e.parsedHotkey, D = normalizeKeyName(T.key), O = E.key.length === 1 ? E.key.toUpperCase() : E.key;
1428
+ return !!((D.length === 1 ? D.toUpperCase() : D) === O || E.ctrl && D === "Control" || E.shift && D === "Shift" || E.alt && D === "Alt" || E.meta && D === "Meta");
1429
+ }
1430
+ triggerRegistration(e) {
1431
+ let T = this.registrations.state.get(e);
1432
+ if (!T) return !1;
1433
+ let E = T.parsedHotkey, D = new KeyboardEvent(T.options.eventType ?? "keydown", {
1434
+ key: E.key,
1435
+ ctrlKey: E.ctrl,
1436
+ shiftKey: E.shift,
1437
+ altKey: E.alt,
1438
+ metaKey: E.meta,
1439
+ bubbles: !0,
1440
+ cancelable: !0
1441
+ });
1442
+ return T.triggerCount++, this.registrations.setState((e) => new Map(e)), T.callback(D, {
1443
+ hotkey: T.hotkey,
1444
+ parsedHotkey: T.parsedHotkey
1445
+ }), !0;
1446
+ }
1447
+ getRegistrationCount() {
1448
+ return this.registrations.state.size;
1449
+ }
1450
+ isRegistered(e, T) {
1451
+ for (let E of this.registrations.state.values()) if (E.hotkey === e && (T === void 0 || E.target === T)) return !0;
1452
+ return !1;
1453
+ }
1454
+ destroy() {
1455
+ for (let e of this.#n.keys()) this.#o(e);
1456
+ this.registrations.setState(() => /* @__PURE__ */ new Map()), this.#n.clear(), this.#r.clear();
1457
+ }
1458
+ };
1459
+ function getHotkeyManager() {
1460
+ return HotkeyManager.getInstance();
1461
+ }
1462
+ var DEFAULT_SEQUENCE_TIMEOUT = 1e3, sequenceIdCounter = 0;
1463
+ function generateSequenceId() {
1464
+ return `sequence_${++sequenceIdCounter}`;
1465
+ }
1466
+ function sequenceKey(e) {
1467
+ return e.join("|");
1468
+ }
1469
+ function toRegistrationView(e) {
1470
+ let T = e.parsedSequence.length, E = e.currentIndex > 0 && e.currentIndex < T;
1471
+ return {
1472
+ id: e.id,
1473
+ sequence: e.sequence,
1474
+ options: e.options,
1475
+ target: e.target,
1476
+ triggerCount: e.triggerCount,
1477
+ hasFired: e.hasFired,
1478
+ matchedStepCount: E ? e.currentIndex : 0,
1479
+ partialMatchLastKeyTime: E ? e.lastKeyTime : 0
1480
+ };
1481
+ }
1482
+ var SequenceManager = class e {
1483
+ static #e = null;
1484
+ #t = /* @__PURE__ */ new Map();
1485
+ #n = /* @__PURE__ */ new Map();
1486
+ #r = /* @__PURE__ */ new Map();
1487
+ #i;
1488
+ constructor() {
1489
+ this.registrations = new Store(/* @__PURE__ */ new Map()), this.#i = detectPlatform();
1490
+ }
1491
+ static getInstance() {
1492
+ return e.#e ||= new e(), e.#e;
1493
+ }
1494
+ static resetInstance() {
1495
+ e.#e &&= (e.#e.destroy(), null);
1496
+ }
1497
+ #a(e) {
1498
+ this.registrations.setState((T) => new Map(T).set(e.id, toRegistrationView(e)));
1499
+ }
1500
+ register(e, T, E = {}) {
1501
+ if (e.length === 0) throw Error("Sequence must contain at least one hotkey");
1502
+ let D = generateSequenceId(), O = E.platform ?? this.#i, k = e.map((e) => parseHotkey(e, O)), A = E.target ?? (typeof document < "u" ? document : {}), j = E.conflictBehavior ?? "warn", M = this.#f(e, A);
1503
+ M && handleConflict(M.id, formatHotkeySequence(e), j, (e) => this.#o(e));
1504
+ let N = k[0], P = E.ignoreInputs ?? getDefaultIgnoreInputs(N), F = {
1505
+ id: D,
1506
+ sequence: e,
1507
+ parsedSequence: k,
1508
+ callback: T,
1509
+ options: {
1510
+ ...defaultHotkeyOptions,
1511
+ timeout: DEFAULT_SEQUENCE_TIMEOUT,
1512
+ ...E,
1513
+ platform: O,
1514
+ ignoreInputs: P
1515
+ },
1516
+ target: A,
1517
+ currentIndex: 0,
1518
+ lastKeyTime: 0,
1519
+ triggerCount: 0,
1520
+ hasFired: !1
1521
+ };
1522
+ this.#t.set(D, F), this.registrations.setState((e) => new Map(e).set(D, toRegistrationView(F))), this.#r.has(A) || this.#r.set(A, /* @__PURE__ */ new Set()), this.#r.get(A).add(D), this.#s(A);
1523
+ let I = this;
1524
+ return {
1525
+ get id() {
1526
+ return D;
1527
+ },
1528
+ get isActive() {
1529
+ return I.#t.has(D);
1530
+ },
1531
+ get callback() {
1532
+ return I.#t.get(D)?.callback ?? T;
1533
+ },
1534
+ set callback(e) {
1535
+ let T = I.#t.get(D);
1536
+ T && (T.callback = e);
1537
+ },
1538
+ setOptions: (e) => {
1539
+ let T = I.#t.get(D);
1540
+ T && (T.options = {
1541
+ ...T.options,
1542
+ ...e
1543
+ }, I.registrations.setState((e) => new Map(e).set(D, toRegistrationView(T))));
1544
+ },
1545
+ unregister: () => {
1546
+ I.#o(D);
1547
+ }
1548
+ };
1549
+ }
1550
+ #o(e) {
1551
+ let T = this.#t.get(e);
1552
+ if (!T) return;
1553
+ let E = T.target;
1554
+ this.#t.delete(e), this.registrations.setState((T) => {
1555
+ let E = new Map(T);
1556
+ return E.delete(e), E;
1557
+ });
1558
+ let D = this.#r.get(E);
1559
+ D && (D.delete(e), D.size === 0 && this.#c(E));
1560
+ }
1561
+ #s(e) {
1562
+ if (typeof document > "u" || this.#n.has(e)) return;
1563
+ let T = this.#l(e), E = this.#u(e);
1564
+ e.addEventListener("keydown", T), e.addEventListener("keyup", E), this.#n.set(e, {
1565
+ keydown: T,
1566
+ keyup: E
1567
+ });
1568
+ }
1569
+ #c(e) {
1570
+ if (typeof document > "u") return;
1571
+ let T = this.#n.get(e);
1572
+ T && (e.removeEventListener("keydown", T.keydown), e.removeEventListener("keyup", T.keyup), this.#n.delete(e), this.#r.delete(e));
1573
+ }
1574
+ #l(e) {
1575
+ return (T) => {
1576
+ this.#d(T, e, "keydown");
1577
+ };
1578
+ }
1579
+ #u(e) {
1580
+ return (T) => {
1581
+ this.#d(T, e, "keyup");
1582
+ };
1583
+ }
1584
+ #d(e, T, E) {
1585
+ if (isModifierKey(normalizeKeyName(e.key))) return;
1586
+ let D = this.#r.get(T);
1587
+ if (!D) return;
1588
+ let O = Date.now();
1589
+ registrationIds: for (let k of D) {
1590
+ let D = this.#t.get(k);
1591
+ if (!D || !isEventForTarget(e, T) || !D.options.enabled) continue;
1592
+ if (D.options.ignoreInputs !== !1 && shouldIgnoreInputEvent(e, T, D.target)) continue registrationIds;
1593
+ if (D.options.eventType !== E) continue;
1594
+ let A = D.options.timeout ?? 1e3;
1595
+ D.currentIndex > 0 && O - D.lastKeyTime > A && (D.currentIndex = 0, this.#a(D));
1596
+ let j = D.parsedSequence[D.currentIndex];
1597
+ if (j) {
1598
+ if (matchesKeyboardEvent(e, j, D.options.platform)) if (D.lastKeyTime = O, D.currentIndex++, D.currentIndex >= D.parsedSequence.length) {
1599
+ D.options.preventDefault && e.preventDefault(), D.options.stopPropagation && e.stopPropagation();
1600
+ let T = {
1601
+ hotkey: D.sequence.join(" "),
1602
+ parsedHotkey: D.parsedSequence[D.parsedSequence.length - 1]
1603
+ };
1604
+ D.triggerCount++, D.hasFired = !0, D.currentIndex = 0, this.#a(D), D.callback(e, T);
1605
+ } else this.#a(D);
1606
+ else if (D.currentIndex > 0) {
1607
+ let T = D.parsedSequence[0];
1608
+ matchesKeyboardEvent(e, T, D.options.platform) ? (D.currentIndex = 1, D.lastKeyTime = O) : D.currentIndex = 0, this.#a(D);
1609
+ }
1610
+ }
1611
+ }
1612
+ }
1613
+ #f(e, T) {
1614
+ let E = sequenceKey(e);
1615
+ for (let e of this.#t.values()) if (sequenceKey(e.sequence) === E && e.target === T) return e;
1616
+ return null;
1617
+ }
1618
+ resetAll() {
1619
+ for (let e of this.#t.values()) e.currentIndex = 0, e.lastKeyTime = 0, this.#a(e);
1620
+ }
1621
+ triggerSequence(e) {
1622
+ let T = this.#t.get(e);
1623
+ if (!T) return !1;
1624
+ let E = T.parsedSequence[T.parsedSequence.length - 1];
1625
+ if (!E) return !1;
1626
+ let D = new KeyboardEvent(T.options.eventType ?? "keydown", {
1627
+ key: E.key,
1628
+ ctrlKey: E.ctrl,
1629
+ shiftKey: E.shift,
1630
+ altKey: E.alt,
1631
+ metaKey: E.meta,
1632
+ bubbles: !0,
1633
+ cancelable: !0
1634
+ });
1635
+ T.triggerCount++, T.hasFired = !0, this.#a(T);
1636
+ let O = {
1637
+ hotkey: T.sequence.join(" "),
1638
+ parsedHotkey: E
1639
+ };
1640
+ return T.callback(D, O), !0;
1641
+ }
1642
+ getRegistrationCount() {
1643
+ return this.#t.size;
1644
+ }
1645
+ destroy() {
1646
+ for (let e of this.#n.keys()) this.#c(e);
1647
+ this.#t.clear(), this.registrations.setState(() => /* @__PURE__ */ new Map());
1648
+ }
1649
+ };
1650
+ function getSequenceManager() {
1651
+ return SequenceManager.getInstance();
1652
+ }
1653
+ function useHotkeys(e, T = {}) {
1654
+ let E = useDefaultHotkeysOptions(), D = getHotkeyManager(), O = /* @__PURE__ */ new Map(), k = watch(() => {
1655
+ let D = resolveMaybeRefOrGetter$1(e), O = resolveMaybeRefOrGetter$1(T);
1656
+ return D.map((e, T) => {
1657
+ let D = resolveMaybeRefOrGetter$1(e.hotkey), k = e.options ? resolveMaybeRefOrGetter$1(e.options) : {}, A = {
1658
+ ...E.hotkey,
1659
+ ...O,
1660
+ ...k
1661
+ }, j = normalizeRegisterableHotkey(D, A.platform ?? detectPlatform()), M = A.enabled === void 0 ? void 0 : resolveMaybeRefOrGetter$1(A.enabled), N = A.target === void 0 ? void 0 : resolveMaybeRefOrGetter$1(A.target);
1662
+ return {
1663
+ index: T,
1664
+ hotkeyString: j,
1665
+ callback: e.callback,
1666
+ mergedOptions: A,
1667
+ resolvedEnabled: M,
1668
+ resolvedTarget: N
1669
+ };
1670
+ });
1671
+ }, (e) => {
1672
+ let T = /* @__PURE__ */ new Set(), E = [];
1673
+ for (let D of e) {
1674
+ let e = D.resolvedTarget ?? (typeof document < "u" ? document : null);
1675
+ if (!e) continue;
1676
+ let O = `${D.index}:${D.hotkeyString}`;
1677
+ T.add(O), E.push({
1678
+ registrationKey: O,
1679
+ entry: D,
1680
+ finalTarget: e
1681
+ });
1682
+ }
1683
+ for (let [e, E] of [...O.entries()]) T.has(e) || (E.handle.isActive && E.handle.unregister(), O.delete(e));
1684
+ for (let { registrationKey: e, entry: T, finalTarget: k } of E) {
1685
+ let E = O.get(e);
1686
+ if (E?.handle.isActive && E.target === k) {
1687
+ E.handle.callback = T.callback;
1688
+ let { target: e, enabled: D, ...O } = T.mergedOptions, k = {
1689
+ ...O,
1690
+ ...T.resolvedEnabled === void 0 ? {} : { enabled: T.resolvedEnabled }
1691
+ };
1692
+ E.handle.setOptions(k);
1693
+ continue;
1694
+ }
1695
+ E && (E.handle.isActive && E.handle.unregister(), O.delete(e));
1696
+ let { target: A, enabled: j, ...M } = T.mergedOptions, N = {
1697
+ ...M,
1698
+ ...T.resolvedEnabled === void 0 ? {} : { enabled: T.resolvedEnabled }
1699
+ }, P = D.register(T.hotkeyString, T.callback, {
1700
+ ...N,
1701
+ target: k
1702
+ });
1703
+ O.set(e, {
1704
+ handle: P,
1705
+ target: k
1706
+ });
1707
+ }
1708
+ }, { immediate: !0 });
1709
+ onUnmounted(() => {
1710
+ k();
1711
+ for (let { handle: e } of O.values()) e.isActive && e.unregister();
1712
+ O.clear();
1713
+ });
1714
+ }
1715
+ function resolveMaybeRefOrGetter$1(e) {
1716
+ return typeof e == "function" ? e() : unref(e);
1717
+ }
1718
+ function useHotkeySequences(e, T = {}) {
1719
+ let E = useDefaultHotkeysOptions(), D = getSequenceManager(), O = /* @__PURE__ */ new Map(), k = watch(() => {
1720
+ let D = resolveMaybeRefOrGetter(e), O = resolveMaybeRefOrGetter(T);
1721
+ return D.map((e, T) => {
1722
+ let D = resolveMaybeRefOrGetter(e.sequence), k = e.options ? resolveMaybeRefOrGetter(e.options) : {}, A = {
1723
+ ...E.hotkeySequence,
1724
+ ...O,
1725
+ ...k
1726
+ }, j = formatHotkeySequence(D), M = A.enabled === void 0 ? void 0 : resolveMaybeRefOrGetter(A.enabled), N = A.target === void 0 ? void 0 : resolveMaybeRefOrGetter(A.target);
1727
+ return {
1728
+ index: T,
1729
+ resolvedSequence: D,
1730
+ sequenceString: j,
1731
+ callback: e.callback,
1732
+ mergedOptions: A,
1733
+ resolvedEnabled: M,
1734
+ resolvedTarget: N
1735
+ };
1736
+ });
1737
+ }, (e) => {
1738
+ let T = /* @__PURE__ */ new Set(), E = [];
1739
+ for (let D of e) {
1740
+ if (D.resolvedSequence.length === 0) continue;
1741
+ let e = D.resolvedTarget ?? (typeof document < "u" ? document : null);
1742
+ if (!e) continue;
1743
+ let O = `${D.index}:${D.sequenceString}`;
1744
+ T.add(O), E.push({
1745
+ registrationKey: O,
1746
+ entry: D,
1747
+ finalTarget: e
1748
+ });
1749
+ }
1750
+ for (let [e, E] of [...O.entries()]) T.has(e) || (E.handle.isActive && E.handle.unregister(), O.delete(e));
1751
+ for (let { registrationKey: e, entry: T, finalTarget: k } of E) {
1752
+ let E = O.get(e);
1753
+ if (E?.handle.isActive && E.target === k) {
1754
+ E.handle.callback = T.callback;
1755
+ let { target: e, enabled: D, ...O } = T.mergedOptions, k = {
1756
+ ...O,
1757
+ ...T.resolvedEnabled === void 0 ? {} : { enabled: T.resolvedEnabled }
1758
+ };
1759
+ E.handle.setOptions(k);
1760
+ continue;
1761
+ }
1762
+ E && (E.handle.isActive && E.handle.unregister(), O.delete(e));
1763
+ let { target: A, enabled: j, ...M } = T.mergedOptions, N = {
1764
+ ...M,
1765
+ ...T.resolvedEnabled === void 0 ? {} : { enabled: T.resolvedEnabled }
1766
+ }, P = D.register(T.resolvedSequence, T.callback, {
1767
+ ...N,
1768
+ target: k
1769
+ });
1770
+ O.set(e, {
1771
+ handle: P,
1772
+ target: k
1773
+ });
1774
+ }
1775
+ }, { immediate: !0 });
1776
+ onUnmounted(() => {
1777
+ k();
1778
+ for (let { handle: e } of O.values()) e.isActive && e.unregister();
1779
+ O.clear();
1780
+ });
1781
+ }
1782
+ function resolveMaybeRefOrGetter(e) {
1783
+ return typeof e == "function" ? e() : unref(e);
1784
+ }
1785
+ const useActionRegistryStore = defineStore("actionRegistry", () => {
1786
+ let e = ref([]), T = ref(/* @__PURE__ */ new Map()), E = 1;
1787
+ function D() {
1788
+ return [...e.value, ...T.value.values().map((e) => e)];
1789
+ }
1790
+ function O(...T) {
1791
+ e.value.push(...T);
1792
+ }
1793
+ function k(e) {
1794
+ let D = E++;
1795
+ return T.value.set(D, markRaw(e)), D;
1796
+ }
1797
+ function j(e) {
1798
+ T.value.delete(e);
1799
+ }
1800
+ return {
1801
+ allActions: D,
1802
+ registerActions: O,
1803
+ registerTemporaryAction: k,
1804
+ unregisterAction: j
1805
+ };
1806
+ });
1807
+ function* collectActionsForShortcuts(e, T) {
1808
+ for (let E of e) {
1809
+ if (yield E, E.subActionsHaveKeyboardShortcuts !== !0 || E.subActions === void 0) continue;
1810
+ let e = E.subActions(T);
1811
+ Array.isArray(e) ? yield* collectActionsForShortcuts(e, T) : typeof e == "object" && e && "actions" in e && Array.isArray(e.actions) && (yield* collectActionsForShortcuts(e.actions, T));
1812
+ }
1813
+ }
1814
+ function simpleShortcutKey(e) {
1815
+ return [
1816
+ e.key,
1817
+ e.alt === !0 ? "alt" : "",
1818
+ e.ctrl === !0 ? "ctrl" : "",
1819
+ e.meta === !0 ? "meta" : "",
1820
+ e.mod === !0 ? "mod" : "",
1821
+ e.shift === !0 ? "shift" : ""
1822
+ ].filter(Boolean).join("+");
1823
+ }
1824
+ function useActionShortcuts(e) {
1825
+ let T = useActionRegistryStore(), E = useActionManagerStore();
1826
+ function D(T) {
1827
+ return () => {
1828
+ let D = e ? e() : E.actionContext({});
1829
+ for (let e = T.length - 1; e >= 0; e--) {
1830
+ let E = T[e];
1831
+ if (!resolveApplicable(E, D)) continue;
1832
+ let O = E.execute?.(D);
1833
+ O instanceof Promise && O.catch((e) => {
1834
+ console.error("[useActionShortcuts] action.execute threw:", e);
1835
+ });
1836
+ return;
1837
+ }
1838
+ };
1839
+ }
1840
+ useHotkeys(() => {
1841
+ let O = /* @__PURE__ */ new Map(), k = e ? e() : E.actionContext({});
1842
+ for (let e of collectActionsForShortcuts(T.allActions(), k)) {
1843
+ if (e.keyboardShortcut === void 0 || "sequence" in e.keyboardShortcut) continue;
1844
+ let T = e.keyboardShortcut, E = simpleShortcutKey(T);
1845
+ O.has(E) || O.set(E, []), O.get(E).push(e);
1846
+ }
1847
+ return Array.from(O.values()).map((e) => {
1848
+ let T = e[0].keyboardShortcut;
1849
+ return {
1850
+ callback: D(e),
1851
+ hotkey: {
1852
+ key: T.key,
1853
+ ...T.alt !== void 0 && { alt: T.alt },
1854
+ ...T.ctrl !== void 0 && { ctrl: T.ctrl },
1855
+ ...T.meta !== void 0 && { meta: T.meta },
1856
+ ...T.mod !== void 0 && { mod: T.mod },
1857
+ ...T.shift !== void 0 && { shift: T.shift }
1858
+ },
1859
+ options: {
1860
+ ignoreInputs: !T.runWithInputFocus,
1861
+ preventDefault: !0,
1862
+ stopPropagation: !0
1863
+ }
1864
+ };
1865
+ });
1866
+ }, { conflictBehavior: "allow" }), useHotkeySequences(() => {
1867
+ let O = /* @__PURE__ */ new Map(), k = e ? e() : E.actionContext({});
1868
+ for (let e of collectActionsForShortcuts(T.allActions(), k)) {
1869
+ if (e.keyboardShortcut === void 0 || !("sequence" in e.keyboardShortcut)) continue;
1870
+ let T = e.keyboardShortcut.sequence.join(",");
1871
+ O.has(T) || O.set(T, []), O.get(T).push(e);
1872
+ }
1873
+ return Array.from(O.values()).map((e) => {
1874
+ let T = e[0].keyboardShortcut;
1875
+ return {
1876
+ callback: D(e),
1877
+ options: {
1878
+ ignoreInputs: !T.runWithInputFocus,
1879
+ preventDefault: !0,
1880
+ stopPropagation: !0
1881
+ },
1882
+ sequence: T.sequence
1883
+ };
1884
+ });
1885
+ }, { conflictBehavior: "allow" });
1886
+ }
1887
+ function useCommandMenuActions({ actionsSnapshot: e, focusedModelsSnapshot: E, listboxContentRef: D, listboxRootRef: O, manager: k, navStack: A, searchInput: j }) {
1888
+ let M = ref(!1), N = ref(!1), P = shallowRef([]), F = ref({}), I = 0, z = computed(() => D.value?.$el);
1889
+ function B(e) {
1890
+ return k.actionContext({
1891
+ menuType: "commandMenu",
1892
+ models: E,
1893
+ searchInput: j.value,
1894
+ subActionsMeta: e
1895
+ });
1896
+ }
1897
+ async function H() {
1898
+ let T = ++I;
1899
+ N.value = !1, M.value = !0;
1900
+ try {
1901
+ let E = B(), D;
1902
+ if (A.value.length > 0) {
1903
+ let e = A.value.at(-1);
1904
+ D = e.parentAction.subActions === void 0 ? e.actions : await resolveSubActions(e.parentAction, E, F.value);
1905
+ } else D = e;
1906
+ let O = await applicableActions(D, E, (e) => {
1907
+ T === I && e.length > 0 && (P.value = e);
1908
+ }, A.value.at(-1)?.parentAction);
1909
+ T === I && (P.value = O);
1910
+ } catch (e) {
1911
+ throw console.error("Error refreshing actions", e), e;
1912
+ } finally {
1913
+ T === I && (M.value = !1);
1914
+ }
1915
+ }
1916
+ let U = useDebounceFn(H, 80);
1917
+ return watch(j, () => {
1918
+ F.value = {}, N.value = !0, (D.value?.$el)?.scrollTo({
1919
+ behavior: "instant",
1920
+ top: 0
1921
+ }), U();
1922
+ }), watch(P, (e, T) => {
1923
+ if (e.length === 0) return;
1924
+ let E = O.value?.$el;
1925
+ setTimeout(() => {
1926
+ (E?.querySelector("[data-highlighted]") ?? null) === null && O.value?.highlightFirstItem();
1927
+ }), T.length === 0 && setTimeout(() => {
1928
+ (D.value?.$el)?.scrollTo({
1929
+ behavior: "instant",
1930
+ top: 0
1931
+ });
1932
+ });
1933
+ }), useInfiniteScroll(z, async () => {
1934
+ let e = A.value.at(-1)?.parentAction;
1935
+ if (e?.subActions === void 0 || e.id === void 0) return;
1936
+ let T = F.value[e.id];
1937
+ if (T == null) return;
1938
+ let E = B({ [e.id]: T }), D = e.subActions(E), O;
1939
+ if (Array.isArray(D) || isSubActionsWithMeta(D)) O = D;
1940
+ else if (D instanceof Promise) O = await D;
1941
+ else {
1942
+ let e = [];
1943
+ for await (let T of D) e.push(T);
1944
+ P.value = [...P.value, ...e];
1945
+ return;
1946
+ }
1947
+ P.value = [...P.value, ...storeSubActionsPagination(e, O, F.value)];
1948
+ }, {
1949
+ canLoadMore: () => {
1950
+ let e = A.value.at(-1)?.parentAction;
1951
+ return e?.subActions === void 0 || e.id === void 0 ? !1 : F.value[e.id] != null;
1952
+ },
1953
+ distance: 40
1954
+ }), {
1955
+ isDebouncing: N,
1956
+ isLoadingActions: M,
1957
+ buildContext: B,
1958
+ refreshActions: H,
1959
+ resolvedActions: P,
1960
+ subActionsMetaMap: F
1961
+ };
1962
+ }
1963
+ function useCommandMenuAnimation(e, T) {
1964
+ let E = ref(!1), D = ref(!1), O = null;
1965
+ return watch(e, (e) => {
1966
+ e || (D.value = !1);
1967
+ }), watch(T, () => {
1968
+ D.value = !0, O !== null && (clearTimeout(O), E.value = !1), nextTick(() => {
1969
+ E.value = !0, O = setTimeout(() => {
1970
+ E.value = !1;
1971
+ }, 250);
1972
+ });
1973
+ }), {
1974
+ hasNavigated: D,
1975
+ isBouncing: E
1976
+ };
1977
+ }
1978
+ function useCommandMenuNavigation({ isShiftKeyHeld: e, buildContext: E, emit: D, listboxRootRef: O, manager: k, navStack: A, refreshActions: j, resolvedActions: M, scrollToTopOfGroup: N, searchInput: P, subActionsMetaMap: F }) {
1979
+ let I = useI18n(), R = ref(null), z = computed(() => A.value.at(-1)?.parentAction ?? null), B = computed(() => {
1980
+ let e = E();
1981
+ return A.value.filter((e) => e.parentAction.forceAsRootMenu !== !0).map((T) => {
1982
+ let E = T.parentAction;
1983
+ return E.nameAsParent === void 0 ? resolveActionValue(E.name, e) : typeof E.nameAsParent == "function" ? E.nameAsParent(e) : E.nameAsParent;
1984
+ });
1985
+ }), V = computed(() => {
1986
+ if (z.value === null) return I.t("type_a_command_or_search");
1987
+ let e = resolveSearchSubActionsConfig(z.value, E())?.placeholder;
1988
+ return e === void 0 ? I.t("search") : typeof e == "function" ? e() : e;
1989
+ }), { preview: U, onKeyDown: W } = useActionPreview({
1990
+ highlightedActionId: R,
1991
+ getContext: E,
1992
+ resolvedActions: M
1993
+ });
1994
+ async function G(T) {
1995
+ let O = E();
1996
+ if (!T.disabledReason?.(O)) {
1997
+ if (T.execute !== void 0) {
1998
+ k.executeAction(T, O), (!(z.value?.multiSelectSubActions ?? !1) || !e.value) && D("close");
1999
+ return;
2000
+ }
2001
+ T.subActions !== void 0 && (A.value.push({
2002
+ actions: [],
2003
+ parentAction: T,
2004
+ savedActiveAction: T,
2005
+ savedResolvedActions: M.value,
2006
+ savedSearchInput: P.value
2007
+ }), F.value = {}, P.value = "", M.value = [], await j());
2008
+ }
2009
+ }
2010
+ async function K() {
2011
+ let e = A.value.pop() ?? null;
2012
+ e !== null && (P.value = e.savedSearchInput, M.value = e.savedResolvedActions, await j(), e.savedActiveAction !== null && O.value?.highlightItem(e.savedActiveAction.id));
2013
+ }
2014
+ function q(e) {
2015
+ e.key === "Backspace" && !e.repeat && P.value === "" && A.value.length > 0 && (e.preventDefault(), K()), (e.key === "ArrowDown" || e.key === "ArrowUp") && N(), W(e);
2016
+ }
2017
+ return {
2018
+ highlightedActionId: R,
2019
+ activateAction: G,
2020
+ breadcrumbs: B,
2021
+ currentParent: z,
2022
+ placeholder: V,
2023
+ preview: U,
2024
+ restoreParentFrame: K,
2025
+ onKeyDown: q
2026
+ };
2027
+ }
2028
+ function resolveActionBreadcrumbs(e, T) {
2029
+ let E = [], D = e.parentAction ?? null;
2030
+ for (; D !== null;) {
2031
+ if (D.forceAsRootMenu === !0) return E;
2032
+ let e = D.nameAsParent === void 0 ? resolveActionName(D, T) : resolveActionValue(D.nameAsParent, T);
2033
+ E.unshift({
2034
+ icon: D.icon?.(T) ?? null,
2035
+ label: e
2036
+ }), D = D.parentAction ?? null;
2037
+ }
2038
+ return E.slice(-1);
2039
+ }
2040
+ function useFocusedModels(e) {
2041
+ let T = useActionManagerStore(), E = ref(!1);
2042
+ function D() {
2043
+ E.value = !0, T.setFocusedModels([...T.focusedModels, ...e.value]);
2044
+ }
2045
+ function O() {
2046
+ E.value = !1, T.setFocusedModels(T.focusedModels.filter((T) => !e.value.some((e) => e.key === T.key)));
2047
+ }
2048
+ return watch(e, (D, O) => {
2049
+ E.value && T.setFocusedModels([...T.focusedModels.filter((e) => !O.some((T) => T.key === e.key)), ...e.value]);
2050
+ }), onBeforeUnmount(() => {
2051
+ O();
2052
+ }), {
2053
+ register: D,
2054
+ unregister: O
2055
+ };
2056
+ }
2057
+ function useTemporaryActions(e, T, E = !1) {
2058
+ let D = useActionRegistryStore(), O = [];
2059
+ function k() {
2060
+ O.length > 0 || (O = (Array.isArray(e) ? e : [e]).map((e) => D.registerTemporaryAction(j(e))));
2061
+ }
2062
+ function A() {
2063
+ for (let e of O) D.unregisterAction(e);
2064
+ O = [];
2065
+ }
2066
+ function j(e) {
2067
+ return T === void 0 ? e : {
2068
+ ...e,
2069
+ group: {
2070
+ ...e.group,
2071
+ priority: T
2072
+ }
2073
+ };
2074
+ }
2075
+ return E || (k(), onBeforeUnmount(() => {
2076
+ A();
2077
+ })), {
2078
+ register: k,
2079
+ unregister: A
2080
+ };
2081
+ }
2082
+ function useActiveModels(e, T) {
2083
+ let E = useActionManagerStore();
2084
+ function D() {
2085
+ T === "focused" ? E.setFocusedModels([...E.focusedModels, ...e.value]) : E.setViewModels([...E.viewModels, ...e.value]);
2086
+ }
2087
+ function O() {
2088
+ T === "focused" ? E.setFocusedModels(E.focusedModels.filter((T) => !e.value.some((e) => e.key === T.key))) : E.setViewModels(E.viewModels.filter((T) => !e.value.some((e) => e.key === T.key)));
2089
+ }
2090
+ watch(e, () => {
2091
+ O(), D();
2092
+ }), D(), onBeforeUnmount(() => {
2093
+ O();
2094
+ });
2095
+ }
2096
+ function useViewModels(e) {
2097
+ useActiveModels(e, "view");
2098
+ }
2099
+ var _unnamedGroupCounter = 0, _unnamedGroupKeys = /* @__PURE__ */ new WeakMap();
2100
+ function resolveStableGroupKey(e, T) {
2101
+ return e === void 0 ? "no-group" : e.name ? resolveActionValue(e.name, T) : (_unnamedGroupKeys.has(e) || _unnamedGroupKeys.set(e, `unnamed-${_unnamedGroupCounter++}`), _unnamedGroupKeys.get(e));
2102
+ }
2103
+ function buildCommandMenuGroups(e, T) {
2104
+ let E = /* @__PURE__ */ new Map();
2105
+ for (let D of e) {
2106
+ let e = D.group, O = resolveStableGroupKey(e, T), k = E.get(O);
2107
+ if (k === void 0) {
2108
+ let D = e?.name ? resolveActionValue(e.name, T) : null;
2109
+ k = {
2110
+ category: e?.category ? resolveActionValue(e.category, T) : null,
2111
+ icon: e?.icon?.(T) ?? null,
2112
+ items: [],
2113
+ key: O,
2114
+ label: D,
2115
+ showIfOnlyGroup: e?.showIfOnlyGroup ?? !1
2116
+ }, E.set(O, k);
2117
+ }
2118
+ k.items.push(D);
2119
+ }
2120
+ return [...E.values()];
2121
+ }
2122
+ export { GroupPriority, _createUntypedAction, actionsLocales, applicableActions, buildCommandMenuGroups, createActions, isAuthenticated, isSubActionsWithMeta, resolveActionAvatar, resolveActionBreadcrumbs, resolveActionHint, resolveActionName, resolveActionPreview, resolveActionSelected, resolveActionValue, resolveApplicable, resolveSearchSubActionsConfig, resolveSubActions, storeSubActionsPagination, typedActionDropdownMenu, typedActionFocus, typedActionTrigger, useActionDropdownMenuContent, useActionGroup, useActionManagerStore, useActionPreview, useActionRegistryStore, useActionShortcuts, useCommandMenuActions, useCommandMenuAnimation, useCommandMenuNavigation, useFocusedModels, useTemporaryActions, useViewModels };