@vuetify/v0 1.0.0-alpha.3 → 1.0.0-alpha.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -0
- package/dist/adapter-BSKx9WQ7.mjs +4 -0
- package/dist/{index-CT5SCLzW.d.mts → adapter-C6JmOyYo.d.mts} +6 -9
- package/dist/{adapter-gQ2SNKZq.mjs → adapter-C9cR4AcY.mjs} +248 -5
- package/dist/adapter-Chznb9Ju.mjs +4 -0
- package/dist/{adapter-DlX3FA3A.d.mts → adapter-Cr7Bl4la.d.mts} +3 -7
- package/dist/adapter-D8zizQVP.mjs +4 -0
- package/dist/adapter-DgBBe_BW.d.mts +17 -0
- package/dist/adapter-Dzyrlbz7.d.mts +98 -0
- package/dist/adapter-o8r-2vUn.d.mts +11 -0
- package/dist/adapters-B25KaYU4.mjs +2 -0
- package/dist/adapters-BcddLSNs.mjs +4 -0
- package/dist/adapters-D64TORDu.mjs +2 -0
- package/dist/adapters-Dv74Jk6A.mjs +5 -0
- package/dist/adapters-t6QC-zE8.mjs +3 -0
- package/dist/browser/index.js +1510 -388
- package/dist/components/index.d.mts +2 -2
- package/dist/components/index.mjs +1 -1
- package/dist/{components-C4jI-78d.mjs → components-BWxMSWr7.mjs} +138 -90
- package/dist/composables/index.d.mts +19 -19
- package/dist/composables/index.mjs +31 -29
- package/dist/{consola-BdgyPEfx.d.mts → consola-Crr4qbeI.d.mts} +2 -2
- package/dist/{consola-Ceox8BWi.mjs → consola-DYvbPNbF.mjs} +3 -1
- package/dist/constants/index.d.mts +1 -1
- package/dist/constants/index.mjs +2 -2
- package/dist/{createDataTable-iODP6aKB.mjs → createDataTable-DDr2yY-A.mjs} +30 -29
- package/dist/{createGroup-CGk6hY_Y.mjs → createGroup-BSGtfBUE.mjs} +3 -3
- package/dist/{createRegistry-BXzdXAjq.mjs → createRegistry-Db_juawd.mjs} +78 -41
- package/dist/{createSelection-B3HJEPNg.mjs → createSelection-BeKZMxha.mjs} +3 -3
- package/dist/{createSingle-Dql8mRi-.mjs → createSingle-Dms2efxr.mjs} +1 -1
- package/dist/{createTokens-DgFYsOrv.mjs → createTokens-B1lwHZvO.mjs} +2 -2
- package/dist/data-table/adapters/client/index.d.mts +2 -2
- package/dist/data-table/adapters/client/index.mjs +2 -2
- package/dist/data-table/adapters/index.d.mts +5 -5
- package/dist/data-table/adapters/index.mjs +6 -6
- package/dist/data-table/adapters/server/index.d.mts +2 -2
- package/dist/data-table/adapters/server/index.mjs +2 -2
- package/dist/data-table/adapters/virtual/index.d.mts +2 -2
- package/dist/data-table/adapters/virtual/index.mjs +2 -2
- package/dist/data-table/index.d.mts +6 -6
- package/dist/data-table/index.mjs +6 -6
- package/dist/date/index.d.mts +3 -3
- package/dist/date/index.mjs +11 -4
- package/dist/features/adapters/flagsmith/index.d.mts +2 -2
- package/dist/features/adapters/flagsmith/index.mjs +2 -2
- package/dist/features/adapters/launchdarkly/index.d.mts +2 -2
- package/dist/features/adapters/launchdarkly/index.mjs +2 -2
- package/dist/features/adapters/posthog/index.d.mts +2 -2
- package/dist/features/adapters/posthog/index.mjs +2 -2
- package/dist/features/index.d.mts +3 -3
- package/dist/features/index.mjs +2 -1
- package/dist/{flagsmith-Dbh1h8WF.mjs → flagsmith-Cu93hUIF.mjs} +6 -4
- package/dist/{index-BzFHTW59.d.mts → flagsmith-ygKMImos.d.mts} +4 -4
- package/dist/{globals-zEjWBKCr.mjs → globals-BAe6tA_x.mjs} +1 -1
- package/dist/{index-GOpjKzaJ.d.mts → index-B3-FstpY.d.mts} +25 -2
- package/dist/{index-BJGcVy7e.d.mts → index-BA7YU2xY.d.mts} +5 -5
- package/dist/{index-B76iGRE3.d.mts → index-BfpLkDR_.d.mts} +949 -59
- package/dist/{index-DE3bWw11.d.mts → index-Cw04PFVO.d.mts} +92 -48
- package/dist/index-DewYtDsc.d.mts +4 -0
- package/dist/{index-DNDuacmH.d.mts → index-jQPkwo3G.d.mts} +15 -5
- package/dist/index.d.mts +23 -23
- package/dist/index.mjs +35 -33
- package/dist/json/attributes.json +1 -1
- package/dist/json/web-types.json +2 -2
- package/dist/launchdarkly-BJR4vbbV.d.mts +13 -0
- package/dist/{launchdarkly-BKtW-idu.mjs → launchdarkly-CLGtJCsI.mjs} +6 -4
- package/dist/locale/adapters/index.d.mts +3 -3
- package/dist/locale/adapters/index.mjs +4 -3
- package/dist/locale/adapters/v0/index.d.mts +2 -2
- package/dist/locale/adapters/v0/index.mjs +2 -2
- package/dist/locale/adapters/vue-i18n/index.d.mts +3 -3
- package/dist/locale/adapters/vue-i18n/index.mjs +4 -2
- package/dist/locale/index.d.mts +4 -4
- package/dist/locale/index.mjs +4 -3
- package/dist/logger/adapters/consola/index.d.mts +1 -1
- package/dist/logger/adapters/consola/index.mjs +1 -1
- package/dist/logger/adapters/index.d.mts +5 -5
- package/dist/logger/adapters/index.mjs +6 -5
- package/dist/logger/adapters/pino/index.d.mts +1 -1
- package/dist/logger/adapters/pino/index.mjs +1 -1
- package/dist/logger/adapters/v0/index.d.mts +2 -2
- package/dist/logger/adapters/v0/index.mjs +2 -2
- package/dist/logger/index.d.mts +6 -6
- package/dist/logger/index.mjs +6 -5
- package/dist/{memory-CeSQE-QV.d.mts → memory-B0w39kno.d.mts} +9 -9
- package/dist/{memory-oYBvtkgx.mjs → memory-BMpJcQjQ.mjs} +13 -3
- package/dist/notifications/index.d.mts +30 -4
- package/dist/notifications/index.mjs +187 -126
- package/dist/palettes/ant/index.d.mts +1 -1
- package/dist/palettes/index.d.mts +3 -3
- package/dist/palettes/leonardo/generate/index.mjs +3 -0
- package/dist/palettes/material/index.d.mts +1 -1
- package/dist/palettes/md1/index.d.mts +1 -1
- package/dist/palettes/md2/index.d.mts +1 -1
- package/dist/palettes/radix/index.d.mts +1 -1
- package/dist/palettes/tailwind/index.d.mts +1 -1
- package/dist/permissions/adapters/index.d.mts +2 -2
- package/dist/permissions/adapters/index.mjs +3 -3
- package/dist/permissions/adapters/v0/index.d.mts +2 -2
- package/dist/permissions/adapters/v0/index.mjs +2 -2
- package/dist/permissions/index.d.mts +2 -2
- package/dist/permissions/index.mjs +3 -3
- package/dist/{pino-9L79n6y6.mjs → pino-CIcYlW3u.mjs} +3 -1
- package/dist/{pino-DNfCEb0p.d.mts → pino-NmR7X0s4.d.mts} +2 -2
- package/dist/{posthog-DmuyycaR.mjs → posthog-B3go2aCh.mjs} +7 -5
- package/dist/posthog-CQntUXFO.d.mts +13 -0
- package/dist/rules/index.d.mts +1 -1
- package/dist/rules/index.mjs +1 -1
- package/dist/{server-3ilWFwqe.d.mts → server-DQK305lc.d.mts} +5 -5
- package/dist/{server-y7zLSCSx.mjs → server-ZFXbgQoY.mjs} +4 -3
- package/dist/storage/adapters/index.d.mts +3 -3
- package/dist/storage/adapters/index.mjs +2 -2
- package/dist/storage/adapters/memory/index.d.mts +2 -2
- package/dist/storage/adapters/memory/index.mjs +2 -2
- package/dist/storage/index.d.mts +4 -4
- package/dist/storage/index.mjs +3 -3
- package/dist/theme/adapters/index.d.mts +2 -2
- package/dist/theme/adapters/index.mjs +4 -4
- package/dist/theme/adapters/unhead/index.d.mts +1 -1
- package/dist/theme/adapters/unhead/index.mjs +1 -1
- package/dist/theme/adapters/v0/index.d.mts +1 -1
- package/dist/theme/adapters/v0/index.mjs +1 -1
- package/dist/theme/index.d.mts +1 -1
- package/dist/theme/index.mjs +3 -3
- package/dist/types/index.d.mts +1 -1
- package/dist/{unhead-B-I2OS6i.mjs → unhead-dPyVkgiJ.mjs} +2 -2
- package/dist/{useClickOutside-CY4U2J9W.mjs → useClickOutside-B8naChaQ.mjs} +1224 -228
- package/dist/{useFeatures-BPOke6iP.mjs → useFeatures-x2iKp0C8.mjs} +7 -10
- package/dist/{useLocale-BV8e3imF.mjs → useLocale-BUms59Bw.mjs} +6 -6
- package/dist/{useLogger-DvdRTrqC.mjs → useLogger-DPSSa-YR.mjs} +4 -4
- package/dist/{useNotifications-vSJE6z6t.mjs → useNotifications-BPTmZWQy.mjs} +4 -4
- package/dist/{usePermissions-D3zPwKQc.mjs → usePermissions-CTi-3pBk.mjs} +6 -6
- package/dist/{useRules-BT6cgoTj.mjs → useRules-DNhljkyO.mjs} +2 -2
- package/dist/{useTheme-cUZb2A9O.mjs → useTheme-3vW3kFNg.mjs} +5 -5
- package/dist/utilities/index.d.mts +2 -2
- package/dist/utilities/index.mjs +26 -2
- package/dist/{v0-DrOub-e1.d.mts → v0-CRGArJim.d.mts} +4 -4
- package/dist/{v0-C49OI_wc.mjs → v0-CotC1PiS.mjs} +5 -3
- package/dist/{v0-Dq3zhexO.mjs → v0-DAlKpCR8.mjs} +3 -4
- package/dist/{v0-D7Fm2C3Y.d.mts → v0-DDELiSI6.d.mts} +3 -3
- package/dist/v0-DYsCJPIu.d.mts +8 -0
- package/dist/{v0-gpExNexS.mjs → v0-DadOcxFI.mjs} +2 -2
- package/dist/{v0-Bmow1q_x.mjs → v0-Dvu8fMl3.mjs} +3 -3
- package/dist/{v0-CHZpnMeP.mjs → v0-YJQoTLsp.mjs} +6 -4
- package/dist/virtual-BqCRw0ly.d.mts +8 -0
- package/dist/{virtual-C0yHf1DC.mjs → virtual-Dnno49F8.mjs} +3 -4
- package/package.json +1 -1
- package/dist/adapter-58IvIfAZ.d.mts +0 -96
- package/dist/adapter-BvWEd9w-.d.mts +0 -17
- package/dist/adapter-Dhq68tz0.d.mts +0 -11
- package/dist/adapters-BSiqsTZN.mjs +0 -3
- package/dist/adapters-C3QXhf4I.mjs +0 -2
- package/dist/adapters-CMJGA1k7.mjs +0 -2
- package/dist/adapters-Dse4bPxk.mjs +0 -5
- package/dist/adapters-_ZqxCD8f.mjs +0 -4
- package/dist/createPagination-CHF7SmmK.mjs +0 -247
- package/dist/index-1XdASTjp.d.mts +0 -13
- package/dist/index-C6rdXZ7j.d.mts +0 -11
- package/dist/index-Dp1HjBxJ.d.mts +0 -13
- package/dist/v0-CdusXjY_.d.mts +0 -8
- package/dist/virtual-D4fckewC.d.mts +0 -8
- /package/dist/{adapter-Be9zUc-n.mjs → adapter-oM18AdUc.mjs} +0 -0
- /package/dist/{htmlElements-D4oMQZPJ.mjs → htmlElements-CHXZfsZu.mjs} +0 -0
- /package/dist/{index-CFhUdAHM.d.mts → index-CKKoxA9V.d.mts} +0 -0
- /package/dist/{index-DuddF-NR.d.mts → index-CLR1QMM3.d.mts} +0 -0
- /package/dist/{index-BgCkepP_.d.mts → index-DJQwYeyx.d.mts} +0 -0
- /package/dist/{index-CROz1VSV.d.mts → index-DWfPppPU.d.mts} +0 -0
- /package/dist/{index-DTvqw22G.d.mts → index-H_hl6-4b.d.mts} +0 -0
- /package/dist/{toArray-as9BWxBK.mjs → toArray-CD2-OxAz.mjs} +0 -0
package/dist/browser/index.js
CHANGED
|
@@ -1,5 +1,32 @@
|
|
|
1
1
|
import * as Vue from "vue";
|
|
2
|
-
import { Fragment, Teleport, TransitionGroup, computed, createBlock, createCommentVNode, createElementBlock, createTextVNode, createVNode, defineComponent, effectScope, guardReactiveProps, hasInjectionContext, inject, isRef, mergeModels, mergeProps, nextTick, normalizeProps, normalizeStyle, onActivated, onBeforeUnmount, onDeactivated, onMounted, onScopeDispose, openBlock, provide, reactive, readonly, ref, renderList, renderSlot, resolveDynamicComponent, shallowReactive, shallowReadonly, shallowRef, toDisplayString, toRaw, toRef, toValue, unref, useAttrs, useId as useId$1, useModel, useTemplateRef, vShow, watch, watchEffect, withCtx, withDirectives } from "vue";
|
|
2
|
+
import { Fragment, Teleport, TransitionGroup, computed, createBlock, createCommentVNode, createElementBlock, createTextVNode, createVNode, defineComponent, effectScope, guardReactiveProps, hasInjectionContext, inject, isReadonly, isRef, mergeModels, mergeProps, nextTick, normalizeProps, normalizeStyle, onActivated, onBeforeUnmount, onDeactivated, onMounted, onScopeDispose, onWatcherCleanup, openBlock, provide, reactive, readonly, ref, renderList, renderSlot, resolveDynamicComponent, shallowReactive, shallowReadonly, shallowRef, toDisplayString, toRaw, toRef, toValue, unref, useAttrs, useId as useId$1, useModel, useTemplateRef, vShow, watch, watchEffect, withCtx, withDirectives } from "vue";
|
|
3
|
+
/**
|
|
4
|
+
* Set of HTML elements that are self-closing (void elements)
|
|
5
|
+
* These elements cannot have children and don't need closing tags
|
|
6
|
+
*/
|
|
7
|
+
const SELF_CLOSING_TAGS = /* @__PURE__ */ new Set([
|
|
8
|
+
"area",
|
|
9
|
+
"base",
|
|
10
|
+
"br",
|
|
11
|
+
"col",
|
|
12
|
+
"embed",
|
|
13
|
+
"hr",
|
|
14
|
+
"img",
|
|
15
|
+
"input",
|
|
16
|
+
"link",
|
|
17
|
+
"meta",
|
|
18
|
+
"source",
|
|
19
|
+
"track",
|
|
20
|
+
"wbr"
|
|
21
|
+
]);
|
|
22
|
+
/**
|
|
23
|
+
* Check if an element is self-closing
|
|
24
|
+
*/
|
|
25
|
+
/* @__NO_SIDE_EFFECTS__ */
|
|
26
|
+
function isSelfClosingTag(tag) {
|
|
27
|
+
return SELF_CLOSING_TAGS.has(tag.toLowerCase());
|
|
28
|
+
}
|
|
29
|
+
//#endregion
|
|
3
30
|
//#region src/utilities/color.ts
|
|
4
31
|
/* @__NO_SIDE_EFFECTS__ */
|
|
5
32
|
function hexToRgb(hex) {
|
|
@@ -108,7 +135,7 @@ const SUPPORTS_MATCH_MEDIA = IN_BROWSER && "matchMedia" in window && typeof wind
|
|
|
108
135
|
const SUPPORTS_OBSERVER = IN_BROWSER && "ResizeObserver" in window;
|
|
109
136
|
const SUPPORTS_INTERSECTION_OBSERVER = IN_BROWSER && "IntersectionObserver" in window;
|
|
110
137
|
const SUPPORTS_MUTATION_OBSERVER = IN_BROWSER && "MutationObserver" in window;
|
|
111
|
-
const version = "1.0.0-alpha.
|
|
138
|
+
const version = "1.0.0-alpha.4";
|
|
112
139
|
/* v8 ignore next -- build-time constant, __DEV__ short-circuits in tests */
|
|
113
140
|
const __LOGGER_ENABLED__ = false;
|
|
114
141
|
//#endregion
|
|
@@ -140,13 +167,6 @@ function instanceName() {
|
|
|
140
167
|
//#endregion
|
|
141
168
|
//#region src/utilities/helpers.ts
|
|
142
169
|
/**
|
|
143
|
-
* @module utilities/helpers
|
|
144
|
-
*
|
|
145
|
-
* @remarks
|
|
146
|
-
* Collection of utility functions for type checking, object manipulation,
|
|
147
|
-
* and common transformations. All exports are tree-shakeable.
|
|
148
|
-
*/
|
|
149
|
-
/**
|
|
150
170
|
* Checks if a value is a function
|
|
151
171
|
*
|
|
152
172
|
* @param item The value to check
|
|
@@ -240,6 +260,30 @@ function isObject(item) {
|
|
|
240
260
|
return typeof item === "object" && item !== null && !Array.isArray(item);
|
|
241
261
|
}
|
|
242
262
|
/**
|
|
263
|
+
* Checks if a value is a thenable (any object with a `.then` method).
|
|
264
|
+
* Duck-typed — matches both native Promises and any Promise-like.
|
|
265
|
+
*
|
|
266
|
+
* @param item The value to check
|
|
267
|
+
* @returns True if the value has a callable `then` property
|
|
268
|
+
*
|
|
269
|
+
* @example
|
|
270
|
+
* ```ts
|
|
271
|
+
* isThenable(Promise.resolve()) // true
|
|
272
|
+
* isThenable({ then: () => {} }) // true
|
|
273
|
+
* isThenable({}) // false
|
|
274
|
+
* isThenable('string') // false
|
|
275
|
+
* ```
|
|
276
|
+
*
|
|
277
|
+
* @remarks Use this when duck-typing async behavior — for example, rejecting
|
|
278
|
+
* a callback that returned a Promise-like when only synchronous returns are
|
|
279
|
+
* supported. If you specifically want native Promise instances, use
|
|
280
|
+
* `instanceof Promise` directly.
|
|
281
|
+
*/
|
|
282
|
+
/* @__NO_SIDE_EFFECTS__ */
|
|
283
|
+
function isThenable(item) {
|
|
284
|
+
return /* @__PURE__ */ isObject(item) && "then" in item && /* @__PURE__ */ isFunction(item.then);
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
243
287
|
* Checks if a value is an array
|
|
244
288
|
*
|
|
245
289
|
* @param item The value to check
|
|
@@ -527,32 +571,6 @@ function resolveIds(ids, getter) {
|
|
|
527
571
|
function resolveIndexes(items) {
|
|
528
572
|
return Array.from(items).map((item) => item?.index).filter((index) => !/* @__PURE__ */ isUndefined(index));
|
|
529
573
|
}
|
|
530
|
-
/**
|
|
531
|
-
* Set of HTML elements that are self-closing (void elements)
|
|
532
|
-
* These elements cannot have children and don't need closing tags
|
|
533
|
-
*/
|
|
534
|
-
const SELF_CLOSING_TAGS = /* @__PURE__ */ new Set([
|
|
535
|
-
"area",
|
|
536
|
-
"base",
|
|
537
|
-
"br",
|
|
538
|
-
"col",
|
|
539
|
-
"embed",
|
|
540
|
-
"hr",
|
|
541
|
-
"img",
|
|
542
|
-
"input",
|
|
543
|
-
"link",
|
|
544
|
-
"meta",
|
|
545
|
-
"source",
|
|
546
|
-
"track",
|
|
547
|
-
"wbr"
|
|
548
|
-
]);
|
|
549
|
-
/**
|
|
550
|
-
* Check if an element is self-closing
|
|
551
|
-
*/
|
|
552
|
-
/* @__NO_SIDE_EFFECTS__ */
|
|
553
|
-
function isSelfClosingTag(tag) {
|
|
554
|
-
return SELF_CLOSING_TAGS.has(tag.toLowerCase());
|
|
555
|
-
}
|
|
556
574
|
//#endregion
|
|
557
575
|
//#region src/components/Atom/Atom.vue
|
|
558
576
|
/**
|
|
@@ -1082,10 +1100,14 @@ function createPluginContext(defaultNamespace, factory, config) {
|
|
|
1082
1100
|
];
|
|
1083
1101
|
}
|
|
1084
1102
|
//#endregion
|
|
1103
|
+
//#region src/composables/useLogger/adapters/adapter.ts
|
|
1104
|
+
var LoggerAdapter = class {};
|
|
1105
|
+
//#endregion
|
|
1085
1106
|
//#region src/composables/useLogger/adapters/consola.ts
|
|
1086
|
-
var ConsolaLoggerAdapter = class {
|
|
1107
|
+
var ConsolaLoggerAdapter = class extends LoggerAdapter {
|
|
1087
1108
|
consola;
|
|
1088
1109
|
constructor(consolaInstance) {
|
|
1110
|
+
super();
|
|
1089
1111
|
if (!consolaInstance) throw new Error("Consola instance is required for ConsolaLoggerAdapter");
|
|
1090
1112
|
this.consola = consolaInstance;
|
|
1091
1113
|
}
|
|
@@ -1112,9 +1134,10 @@ var ConsolaLoggerAdapter = class {
|
|
|
1112
1134
|
};
|
|
1113
1135
|
//#endregion
|
|
1114
1136
|
//#region src/composables/useLogger/adapters/pino.ts
|
|
1115
|
-
var PinoLoggerAdapter = class {
|
|
1137
|
+
var PinoLoggerAdapter = class extends LoggerAdapter {
|
|
1116
1138
|
pino;
|
|
1117
1139
|
constructor(pinoInstance) {
|
|
1140
|
+
super();
|
|
1118
1141
|
if (!pinoInstance) throw new Error("Pino instance is required for PinoLoggerAdapter");
|
|
1119
1142
|
this.pino = pinoInstance;
|
|
1120
1143
|
}
|
|
@@ -1151,17 +1174,18 @@ var PinoLoggerAdapter = class {
|
|
|
1151
1174
|
//#endregion
|
|
1152
1175
|
//#region src/composables/useLogger/adapters/v0.ts
|
|
1153
1176
|
/**
|
|
1154
|
-
*
|
|
1177
|
+
* V0 logger adapter implementation
|
|
1155
1178
|
*
|
|
1156
1179
|
* This adapter provides console-based logging with proper formatting,
|
|
1157
1180
|
* color coding, timestamps, and log level filtering for development
|
|
1158
1181
|
* and production environments.
|
|
1159
1182
|
*/
|
|
1160
|
-
var
|
|
1183
|
+
var V0LoggerAdapter = class extends LoggerAdapter {
|
|
1161
1184
|
prefix;
|
|
1162
1185
|
colors;
|
|
1163
1186
|
timestamps;
|
|
1164
1187
|
constructor(options = {}) {
|
|
1188
|
+
super();
|
|
1165
1189
|
this.prefix = options.prefix || "v0";
|
|
1166
1190
|
this.colors = options.colors !== false;
|
|
1167
1191
|
this.timestamps = options.timestamps !== false;
|
|
@@ -1269,7 +1293,7 @@ var Vuetify0LoggerAdapter = class {
|
|
|
1269
1293
|
* ```
|
|
1270
1294
|
*/
|
|
1271
1295
|
function createLogger(options = {}) {
|
|
1272
|
-
const { adapter = new
|
|
1296
|
+
const { adapter = new V0LoggerAdapter({ prefix: options.prefix }), level: initialLevel = "info", enabled: initialEnabled = false } = options;
|
|
1273
1297
|
let currentLevel = initialLevel;
|
|
1274
1298
|
let isEnabled = initialEnabled;
|
|
1275
1299
|
function value(level) {
|
|
@@ -1443,7 +1467,7 @@ function createRegistry(options) {
|
|
|
1443
1467
|
let indexDependentCount = 0;
|
|
1444
1468
|
let needsReindex = false;
|
|
1445
1469
|
let minDirtyIndex = Infinity;
|
|
1446
|
-
let
|
|
1470
|
+
let isBatching = false;
|
|
1447
1471
|
let batched = [];
|
|
1448
1472
|
function dispatch(event, data) {
|
|
1449
1473
|
const cbs = listeners.get(event);
|
|
@@ -1452,7 +1476,7 @@ function createRegistry(options) {
|
|
|
1452
1476
|
}
|
|
1453
1477
|
function emit(event, data = void 0) {
|
|
1454
1478
|
if (!events) return;
|
|
1455
|
-
if (
|
|
1479
|
+
if (isBatching) {
|
|
1456
1480
|
batched.push({
|
|
1457
1481
|
event,
|
|
1458
1482
|
data
|
|
@@ -1484,6 +1508,7 @@ function createRegistry(options) {
|
|
|
1484
1508
|
return collection.get(id);
|
|
1485
1509
|
}
|
|
1486
1510
|
function upsert(id, patch = {}, event) {
|
|
1511
|
+
if (needsReindex) reindex();
|
|
1487
1512
|
const existing = get(id);
|
|
1488
1513
|
if (!existing) return register({
|
|
1489
1514
|
...patch,
|
|
@@ -1507,23 +1532,22 @@ function createRegistry(options) {
|
|
|
1507
1532
|
assign(value, id);
|
|
1508
1533
|
}
|
|
1509
1534
|
}
|
|
1510
|
-
|
|
1511
|
-
...existing,
|
|
1512
|
-
...patch,
|
|
1535
|
+
Object.assign(existing, patch, {
|
|
1513
1536
|
id,
|
|
1514
1537
|
index: existing.index,
|
|
1515
1538
|
value,
|
|
1516
1539
|
valueIsIndex
|
|
1517
|
-
};
|
|
1518
|
-
collection.set(id,
|
|
1540
|
+
});
|
|
1541
|
+
collection.set(id, existing);
|
|
1519
1542
|
invalidate();
|
|
1520
|
-
emit("update:ticket",
|
|
1521
|
-
if (event) emit(event,
|
|
1522
|
-
return
|
|
1543
|
+
emit("update:ticket", existing);
|
|
1544
|
+
if (event) emit(event, existing);
|
|
1545
|
+
return existing;
|
|
1523
1546
|
}
|
|
1524
1547
|
function browse(value) {
|
|
1525
1548
|
if (needsReindex) reindex();
|
|
1526
|
-
|
|
1549
|
+
const bucket = catalog.get(value);
|
|
1550
|
+
return bucket ? bucket.slice() : void 0;
|
|
1527
1551
|
}
|
|
1528
1552
|
function lookup(index) {
|
|
1529
1553
|
if (needsReindex) reindex();
|
|
@@ -1549,25 +1573,25 @@ function createRegistry(options) {
|
|
|
1549
1573
|
if (reactive) return Array.from(collection.keys());
|
|
1550
1574
|
const cached = cache.get("keys");
|
|
1551
1575
|
if (!/* @__PURE__ */ isUndefined(cached)) return cached;
|
|
1552
|
-
const
|
|
1553
|
-
cache.set("keys",
|
|
1554
|
-
return
|
|
1576
|
+
const out = Array.from(collection.keys());
|
|
1577
|
+
cache.set("keys", out);
|
|
1578
|
+
return out;
|
|
1555
1579
|
}
|
|
1556
1580
|
function values() {
|
|
1557
1581
|
if (reactive) return Array.from(collection.values());
|
|
1558
1582
|
const cached = cache.get("values");
|
|
1559
1583
|
if (!/* @__PURE__ */ isUndefined(cached)) return cached;
|
|
1560
|
-
const
|
|
1561
|
-
cache.set("values",
|
|
1562
|
-
return
|
|
1584
|
+
const out = Array.from(collection.values());
|
|
1585
|
+
cache.set("values", out);
|
|
1586
|
+
return out;
|
|
1563
1587
|
}
|
|
1564
1588
|
function entries() {
|
|
1565
1589
|
if (reactive) return Array.from(collection.entries());
|
|
1566
1590
|
const cached = cache.get("entries");
|
|
1567
1591
|
if (!/* @__PURE__ */ isUndefined(cached)) return cached;
|
|
1568
|
-
const
|
|
1569
|
-
cache.set("entries",
|
|
1570
|
-
return
|
|
1592
|
+
const out = Array.from(collection.entries());
|
|
1593
|
+
cache.set("entries", out);
|
|
1594
|
+
return out;
|
|
1571
1595
|
}
|
|
1572
1596
|
function clear() {
|
|
1573
1597
|
collection.clear();
|
|
@@ -1580,12 +1604,12 @@ function createRegistry(options) {
|
|
|
1580
1604
|
emit("clear:registry");
|
|
1581
1605
|
}
|
|
1582
1606
|
function invalidate() {
|
|
1583
|
-
if (
|
|
1607
|
+
if (isBatching) return;
|
|
1584
1608
|
cache.clear();
|
|
1585
1609
|
}
|
|
1586
1610
|
function batch(fn) {
|
|
1587
|
-
if (
|
|
1588
|
-
|
|
1611
|
+
if (isBatching) return fn();
|
|
1612
|
+
isBatching = true;
|
|
1589
1613
|
batched = [];
|
|
1590
1614
|
try {
|
|
1591
1615
|
const result = fn();
|
|
@@ -1593,7 +1617,7 @@ function createRegistry(options) {
|
|
|
1593
1617
|
for (const { event, data } of batched) dispatch(event, data);
|
|
1594
1618
|
return result;
|
|
1595
1619
|
} finally {
|
|
1596
|
-
|
|
1620
|
+
isBatching = false;
|
|
1597
1621
|
batched = [];
|
|
1598
1622
|
}
|
|
1599
1623
|
}
|
|
@@ -1625,6 +1649,7 @@ function createRegistry(options) {
|
|
|
1625
1649
|
emit("reindex:registry");
|
|
1626
1650
|
}
|
|
1627
1651
|
function register(registration = {}) {
|
|
1652
|
+
if (needsReindex) reindex();
|
|
1628
1653
|
const size = collection.size;
|
|
1629
1654
|
const id = registration.id ?? /* @__PURE__ */ useId();
|
|
1630
1655
|
if (has(id)) {
|
|
@@ -1634,9 +1659,9 @@ function createRegistry(options) {
|
|
|
1634
1659
|
const valueIsUndefined = /* @__PURE__ */ isUndefined(registration.value);
|
|
1635
1660
|
const index = registration.index ?? size;
|
|
1636
1661
|
const value = valueIsUndefined ? index : registration.value;
|
|
1637
|
-
const valueIsIndex = valueIsUndefined;
|
|
1662
|
+
const valueIsIndex = registration.valueIsIndex ?? valueIsUndefined;
|
|
1638
1663
|
if (valueIsIndex) indexDependentCount++;
|
|
1639
|
-
const
|
|
1664
|
+
const input = {
|
|
1640
1665
|
...registration,
|
|
1641
1666
|
id,
|
|
1642
1667
|
index,
|
|
@@ -1644,7 +1669,7 @@ function createRegistry(options) {
|
|
|
1644
1669
|
valueIsIndex,
|
|
1645
1670
|
unregister: () => unregister(id)
|
|
1646
1671
|
};
|
|
1647
|
-
const ticket = reactive ? shallowReactive(
|
|
1672
|
+
const ticket = reactive ? shallowReactive(input) : input;
|
|
1648
1673
|
collection.set(ticket.id, ticket);
|
|
1649
1674
|
directory.set(ticket.index, ticket.id);
|
|
1650
1675
|
assign(ticket.value, ticket.id);
|
|
@@ -1666,9 +1691,23 @@ function createRegistry(options) {
|
|
|
1666
1691
|
else needsReindex = true;
|
|
1667
1692
|
emit("unregister:ticket", ticket);
|
|
1668
1693
|
}
|
|
1694
|
+
function onboard(registrations) {
|
|
1695
|
+
return batch(() => registrations.map((registration) => register(registration)));
|
|
1696
|
+
}
|
|
1697
|
+
function toInput(ticket) {
|
|
1698
|
+
const input = { ...ticket };
|
|
1699
|
+
delete input.index;
|
|
1700
|
+
delete input.valueIsIndex;
|
|
1701
|
+
delete input.unregister;
|
|
1702
|
+
if (ticket.valueIsIndex) {
|
|
1703
|
+
delete input.id;
|
|
1704
|
+
delete input.value;
|
|
1705
|
+
}
|
|
1706
|
+
return input;
|
|
1707
|
+
}
|
|
1669
1708
|
function offboard(ids) {
|
|
1709
|
+
const removed = [];
|
|
1670
1710
|
batch(() => {
|
|
1671
|
-
const removed = [];
|
|
1672
1711
|
for (const id of ids) {
|
|
1673
1712
|
const ticket = collection.get(id);
|
|
1674
1713
|
if (!ticket) continue;
|
|
@@ -1683,6 +1722,7 @@ function createRegistry(options) {
|
|
|
1683
1722
|
for (const ticket of removed) emit("unregister:ticket", ticket);
|
|
1684
1723
|
needsReindex = true;
|
|
1685
1724
|
});
|
|
1725
|
+
return removed.map((ticket) => toInput(ticket));
|
|
1686
1726
|
}
|
|
1687
1727
|
function move(id, toIndex) {
|
|
1688
1728
|
if (needsReindex) reindex();
|
|
@@ -1691,15 +1731,37 @@ function createRegistry(options) {
|
|
|
1691
1731
|
const size = collection.size;
|
|
1692
1732
|
const target = /* @__PURE__ */ clamp(toIndex, 0, size - 1);
|
|
1693
1733
|
if (ticket.index === target) return ticket;
|
|
1694
|
-
|
|
1695
|
-
|
|
1696
|
-
|
|
1697
|
-
|
|
1698
|
-
|
|
1699
|
-
|
|
1700
|
-
|
|
1701
|
-
|
|
1702
|
-
|
|
1734
|
+
return batch(() => {
|
|
1735
|
+
const items = Array.from(collection.entries());
|
|
1736
|
+
const fromIndex = items.findIndex(([key]) => key === id);
|
|
1737
|
+
const [entry] = items.splice(fromIndex, 1);
|
|
1738
|
+
items.splice(target, 0, entry);
|
|
1739
|
+
collection.clear();
|
|
1740
|
+
for (const [key, value] of items) collection.set(key, value);
|
|
1741
|
+
minDirtyIndex = Math.min(ticket.index, target);
|
|
1742
|
+
reindex();
|
|
1743
|
+
emit("update:ticket", ticket);
|
|
1744
|
+
return ticket;
|
|
1745
|
+
});
|
|
1746
|
+
}
|
|
1747
|
+
function reorder(ids) {
|
|
1748
|
+
if (needsReindex) reindex();
|
|
1749
|
+
if (ids.length !== collection.size) return;
|
|
1750
|
+
const seen = /* @__PURE__ */ new Set();
|
|
1751
|
+
const entries = [];
|
|
1752
|
+
for (const id of ids) {
|
|
1753
|
+
if (seen.has(id)) return;
|
|
1754
|
+
const ticket = collection.get(id);
|
|
1755
|
+
if (!ticket) return;
|
|
1756
|
+
seen.add(id);
|
|
1757
|
+
entries.push([id, ticket]);
|
|
1758
|
+
}
|
|
1759
|
+
batch(() => {
|
|
1760
|
+
collection.clear();
|
|
1761
|
+
for (const [id, ticket] of entries) collection.set(id, ticket);
|
|
1762
|
+
minDirtyIndex = 0;
|
|
1763
|
+
reindex();
|
|
1764
|
+
});
|
|
1703
1765
|
}
|
|
1704
1766
|
function seek(direction = "first", from, predicate) {
|
|
1705
1767
|
if (collection.size === 0) return void 0;
|
|
@@ -1743,11 +1805,10 @@ function createRegistry(options) {
|
|
|
1743
1805
|
unregister,
|
|
1744
1806
|
reindex,
|
|
1745
1807
|
move,
|
|
1808
|
+
reorder,
|
|
1746
1809
|
seek,
|
|
1747
1810
|
batch,
|
|
1748
|
-
onboard
|
|
1749
|
-
return batch(() => registrations.map((registration) => register(registration)));
|
|
1750
|
-
},
|
|
1811
|
+
onboard,
|
|
1751
1812
|
offboard,
|
|
1752
1813
|
get size() {
|
|
1753
1814
|
return collection.size;
|
|
@@ -1944,7 +2005,7 @@ function createModel(_options = {}) {
|
|
|
1944
2005
|
}
|
|
1945
2006
|
function offboard(ids) {
|
|
1946
2007
|
for (const id of ids) selectedIds.delete(id);
|
|
1947
|
-
registry.offboard(ids);
|
|
2008
|
+
return registry.offboard(ids);
|
|
1948
2009
|
}
|
|
1949
2010
|
function reset() {
|
|
1950
2011
|
selectedIds.clear();
|
|
@@ -2113,7 +2174,7 @@ function createSelection(_options = {}) {
|
|
|
2113
2174
|
if (ids) for (const id of ids) targetIds.add(id);
|
|
2114
2175
|
}
|
|
2115
2176
|
if (isMultiple) {
|
|
2116
|
-
for (const id of currentIds.difference(targetIds))
|
|
2177
|
+
for (const id of currentIds.difference(targetIds)) unselect(id);
|
|
2117
2178
|
for (const id of targetIds.difference(currentIds)) model.selectedIds.add(id);
|
|
2118
2179
|
} else {
|
|
2119
2180
|
const next = targetIds.values().next().value;
|
|
@@ -2698,6 +2759,9 @@ function flatten(tokens, prefix = "", flat = false) {
|
|
|
2698
2759
|
return flattened;
|
|
2699
2760
|
}
|
|
2700
2761
|
//#endregion
|
|
2762
|
+
//#region src/composables/useLocale/adapters/adapter.ts
|
|
2763
|
+
var LocaleAdapter = class {};
|
|
2764
|
+
//#endregion
|
|
2701
2765
|
//#region src/composables/useLocale/adapters/v0.ts
|
|
2702
2766
|
/**
|
|
2703
2767
|
* Default locale adapter for @vuetify/v0.
|
|
@@ -2705,9 +2769,10 @@ function flatten(tokens, prefix = "", flat = false) {
|
|
|
2705
2769
|
* Handles the full translation pipeline: key lookup via tokens,
|
|
2706
2770
|
* fallback chain, token reference resolution, and placeholder interpolation.
|
|
2707
2771
|
*/
|
|
2708
|
-
var
|
|
2772
|
+
var V0LocaleAdapter = class extends LocaleAdapter {
|
|
2709
2773
|
context;
|
|
2710
2774
|
constructor(context) {
|
|
2775
|
+
super();
|
|
2711
2776
|
this.context = context;
|
|
2712
2777
|
}
|
|
2713
2778
|
t(key, ...params) {
|
|
@@ -2803,7 +2868,7 @@ function createLocale(_options = {}) {
|
|
|
2803
2868
|
registry.register({ id });
|
|
2804
2869
|
if (id === options.default && !registry.selectedId.value) registry.select(id);
|
|
2805
2870
|
}
|
|
2806
|
-
const adapter = externalAdapter ?? new
|
|
2871
|
+
const adapter = externalAdapter ?? new V0LocaleAdapter({
|
|
2807
2872
|
tokens,
|
|
2808
2873
|
selectedId: registry.selectedId,
|
|
2809
2874
|
fallbackLocale,
|
|
@@ -3353,6 +3418,7 @@ function createFocusTraversal(items, activate, options = {}) {
|
|
|
3353
3418
|
}
|
|
3354
3419
|
/** Focus first non-disabled item in the current row (grid mode) */
|
|
3355
3420
|
function rowFirst() {
|
|
3421
|
+
/* v8 ignore next 2 -- defensive: rowFirst is only invoked in grid mode (cols > 0) */
|
|
3356
3422
|
const cols = toValue(_columns) ?? 0;
|
|
3357
3423
|
if (!cols) return first();
|
|
3358
3424
|
const all = items();
|
|
@@ -3369,6 +3435,7 @@ function createFocusTraversal(items, activate, options = {}) {
|
|
|
3369
3435
|
}
|
|
3370
3436
|
/** Focus last non-disabled item in the current row (grid mode) */
|
|
3371
3437
|
function rowLast() {
|
|
3438
|
+
/* v8 ignore next 2 -- defensive: rowLast is only invoked in grid mode (cols > 0) */
|
|
3372
3439
|
const cols = toValue(_columns) ?? 0;
|
|
3373
3440
|
if (!cols) return last();
|
|
3374
3441
|
const all = items();
|
|
@@ -3540,6 +3607,9 @@ function useVirtualFocus(items, options) {
|
|
|
3540
3607
|
};
|
|
3541
3608
|
}
|
|
3542
3609
|
//#endregion
|
|
3610
|
+
//#region src/composables/createCombobox/adapters/adapter.ts
|
|
3611
|
+
var ComboboxAdapter = class {};
|
|
3612
|
+
//#endregion
|
|
3543
3613
|
//#region src/composables/toArray/index.ts
|
|
3544
3614
|
/**
|
|
3545
3615
|
* @module toArray
|
|
@@ -3732,9 +3802,10 @@ function useFilter(namespace = "v0:filter") {
|
|
|
3732
3802
|
* Default combobox adapter. Filters items client-side using createFilter.
|
|
3733
3803
|
* Synchronous, zero debounce — items update immediately as the user types.
|
|
3734
3804
|
*/
|
|
3735
|
-
var
|
|
3805
|
+
var ClientComboboxAdapter = class extends ComboboxAdapter {
|
|
3736
3806
|
options;
|
|
3737
3807
|
constructor(options = {}) {
|
|
3808
|
+
super();
|
|
3738
3809
|
this.options = options;
|
|
3739
3810
|
}
|
|
3740
3811
|
setup(context) {
|
|
@@ -3774,7 +3845,7 @@ var ClientAdapter$1 = class {
|
|
|
3774
3845
|
* The consumer watches `query` via useComboboxContext() or slot props
|
|
3775
3846
|
* and provides filtered items reactively.
|
|
3776
3847
|
*/
|
|
3777
|
-
var
|
|
3848
|
+
var ServerComboboxAdapter = class extends ComboboxAdapter {
|
|
3778
3849
|
setup(context) {
|
|
3779
3850
|
const isLoading = shallowRef(false);
|
|
3780
3851
|
return {
|
|
@@ -3799,7 +3870,7 @@ var ServerAdapter = class {
|
|
|
3799
3870
|
* chain — it composes existing primitives instead.
|
|
3800
3871
|
*
|
|
3801
3872
|
* Key features:
|
|
3802
|
-
* - Adapter-based filtering (client-side or server-side via
|
|
3873
|
+
* - Adapter-based filtering (client-side or server-side via ClientComboboxAdapter/ServerComboboxAdapter)
|
|
3803
3874
|
* - Single or multi-select mode
|
|
3804
3875
|
* - Virtual focus keyboard navigation (aria-activedescendant pattern)
|
|
3805
3876
|
* - Strict mode: reverts query to selected value on close if no match
|
|
@@ -3876,7 +3947,7 @@ function createCombobox(options = {}) {
|
|
|
3876
3947
|
version.value;
|
|
3877
3948
|
return [...selection.values()];
|
|
3878
3949
|
});
|
|
3879
|
-
const { filtered, isLoading, isEmpty } = (adapter ?? new
|
|
3950
|
+
const { filtered, isLoading, isEmpty } = (adapter ?? new ClientComboboxAdapter()).setup({
|
|
3880
3951
|
query,
|
|
3881
3952
|
items
|
|
3882
3953
|
});
|
|
@@ -4251,7 +4322,7 @@ function createGroup(_options = {}) {
|
|
|
4251
4322
|
}
|
|
4252
4323
|
function offboard(ids) {
|
|
4253
4324
|
for (const id of ids) mixedIds.delete(id);
|
|
4254
|
-
selection.offboard(ids);
|
|
4325
|
+
return selection.offboard(ids);
|
|
4255
4326
|
}
|
|
4256
4327
|
function onboard(registrations) {
|
|
4257
4328
|
const tickets = selection.batch(() => registrations.map((registration) => register(registration)));
|
|
@@ -4633,7 +4704,7 @@ function usePagination(namespace = "v0:pagination") {
|
|
|
4633
4704
|
*
|
|
4634
4705
|
* The abstract DataTableAdapter provides shared filter and sort pipelines
|
|
4635
4706
|
* used by client-side adapters. Server adapters that delegate pipeline
|
|
4636
|
-
* operations externally
|
|
4707
|
+
* operations externally subclass DataTableAdapter directly.
|
|
4637
4708
|
*/
|
|
4638
4709
|
function getNestedValue(obj, parts) {
|
|
4639
4710
|
let result = obj;
|
|
@@ -4726,7 +4797,7 @@ var DataTableAdapter = class {
|
|
|
4726
4797
|
* filtering via createFilter, sorting via computed comparisons, and pagination
|
|
4727
4798
|
* via createPagination. Automatically resets to page 1 on filter/sort changes.
|
|
4728
4799
|
*/
|
|
4729
|
-
var
|
|
4800
|
+
var ClientDataTableAdapter = class extends DataTableAdapter {
|
|
4730
4801
|
setup(context) {
|
|
4731
4802
|
const { search, sortBy, locale, paginationOptions, customSorts } = context;
|
|
4732
4803
|
const { allItems, filteredItems } = this.filter(context);
|
|
@@ -4827,9 +4898,10 @@ function resolveHeaders(columns) {
|
|
|
4827
4898
|
* The consumer is responsible for watching `search`, `sortBy`, and
|
|
4828
4899
|
* `pagination.page` to trigger API calls and update the `items` ref.
|
|
4829
4900
|
*/
|
|
4830
|
-
var
|
|
4901
|
+
var ServerDataTableAdapter = class extends DataTableAdapter {
|
|
4831
4902
|
options;
|
|
4832
4903
|
constructor(options) {
|
|
4904
|
+
super();
|
|
4833
4905
|
this.options = options;
|
|
4834
4906
|
}
|
|
4835
4907
|
setup(context) {
|
|
@@ -4869,7 +4941,7 @@ var ServerAdapter$1 = class {
|
|
|
4869
4941
|
* `table.items` (or `table.sortedItems`) with createVirtual to render
|
|
4870
4942
|
* only the visible viewport.
|
|
4871
4943
|
*/
|
|
4872
|
-
var
|
|
4944
|
+
var VirtualDataTableAdapter = class extends DataTableAdapter {
|
|
4873
4945
|
setup(context) {
|
|
4874
4946
|
const { search, sortBy, locale, customSorts } = context;
|
|
4875
4947
|
const { allItems, filteredItems } = this.filter(context);
|
|
@@ -4965,7 +5037,7 @@ var VirtualAdapter = class extends DataTableAdapter {
|
|
|
4965
5037
|
* ```
|
|
4966
5038
|
*/
|
|
4967
5039
|
function createDataTable(options) {
|
|
4968
|
-
const { items: _items, columns, itemValue = "id", filter: filterOptions = {}, pagination: paginationOptions = {}, sortMultiple = false, mandate = false, firstSortOrder = "asc", selectStrategy = "page", itemSelectable, groupBy, openAll = false, expandMultiple = true, locale: initialLocale, adapter = new
|
|
5040
|
+
const { items: _items, columns, itemValue = "id", filter: filterOptions = {}, pagination: paginationOptions = {}, sortMultiple = false, mandate = false, firstSortOrder = "asc", selectStrategy = "page", itemSelectable, groupBy, openAll = false, expandMultiple = true, locale: initialLocale, adapter = new ClientDataTableAdapter() } = options;
|
|
4969
5041
|
const _query = shallowRef("");
|
|
4970
5042
|
function search(value) {
|
|
4971
5043
|
_query.value = value;
|
|
@@ -5191,6 +5263,28 @@ function createDataTable(options) {
|
|
|
5191
5263
|
});
|
|
5192
5264
|
}
|
|
5193
5265
|
}
|
|
5266
|
+
const grouping = {
|
|
5267
|
+
groups,
|
|
5268
|
+
toggle(groupKey) {
|
|
5269
|
+
if (opened.has(groupKey)) opened.delete(groupKey);
|
|
5270
|
+
else opened.add(groupKey);
|
|
5271
|
+
},
|
|
5272
|
+
isOpen(groupKey) {
|
|
5273
|
+
return opened.has(groupKey);
|
|
5274
|
+
},
|
|
5275
|
+
open(groupKey) {
|
|
5276
|
+
opened.add(groupKey);
|
|
5277
|
+
},
|
|
5278
|
+
close(groupKey) {
|
|
5279
|
+
opened.delete(groupKey);
|
|
5280
|
+
},
|
|
5281
|
+
openAll() {
|
|
5282
|
+
for (const group of groups.value) opened.add(group.key);
|
|
5283
|
+
},
|
|
5284
|
+
closeAll() {
|
|
5285
|
+
opened.clear();
|
|
5286
|
+
}
|
|
5287
|
+
};
|
|
5194
5288
|
return {
|
|
5195
5289
|
items: visible,
|
|
5196
5290
|
allItems,
|
|
@@ -5200,33 +5294,12 @@ function createDataTable(options) {
|
|
|
5200
5294
|
leaves,
|
|
5201
5295
|
headers,
|
|
5202
5296
|
search,
|
|
5203
|
-
query: _query,
|
|
5297
|
+
query: shallowReadonly(_query),
|
|
5204
5298
|
sort,
|
|
5205
5299
|
pagination,
|
|
5206
5300
|
selection,
|
|
5207
5301
|
expansion,
|
|
5208
|
-
grouping
|
|
5209
|
-
groups,
|
|
5210
|
-
toggle(groupKey) {
|
|
5211
|
-
if (opened.has(groupKey)) opened.delete(groupKey);
|
|
5212
|
-
else opened.add(groupKey);
|
|
5213
|
-
},
|
|
5214
|
-
isOpen(groupKey) {
|
|
5215
|
-
return opened.has(groupKey);
|
|
5216
|
-
},
|
|
5217
|
-
open(groupKey) {
|
|
5218
|
-
opened.add(groupKey);
|
|
5219
|
-
},
|
|
5220
|
-
close(groupKey) {
|
|
5221
|
-
opened.delete(groupKey);
|
|
5222
|
-
},
|
|
5223
|
-
openAll() {
|
|
5224
|
-
for (const group of groups.value) opened.add(group.key);
|
|
5225
|
-
},
|
|
5226
|
-
closeAll() {
|
|
5227
|
-
opened.clear();
|
|
5228
|
-
}
|
|
5229
|
-
},
|
|
5302
|
+
grouping,
|
|
5230
5303
|
total,
|
|
5231
5304
|
loading,
|
|
5232
5305
|
error
|
|
@@ -5829,6 +5902,327 @@ function createInput(options) {
|
|
|
5829
5902
|
};
|
|
5830
5903
|
}
|
|
5831
5904
|
//#endregion
|
|
5905
|
+
//#region src/composables/createSortable/index.ts
|
|
5906
|
+
/**
|
|
5907
|
+
* @module createSortable
|
|
5908
|
+
*
|
|
5909
|
+
* @see https://0.vuetifyjs.com/composables/data/create-sortable
|
|
5910
|
+
*
|
|
5911
|
+
* @remarks
|
|
5912
|
+
* Headless ordered-list primitive. Extends `createModel` with mutation primitives
|
|
5913
|
+
* (`swap`, `reorder`) and an enriched `move:ticket` event on the registry event
|
|
5914
|
+
* bus. Honors `disabled` as a real mutation gate at both root and per-ticket scope.
|
|
5915
|
+
*
|
|
5916
|
+
* Pure logical composable — no DnD, no DOM, no keyboard. Drag-and-drop integration
|
|
5917
|
+
* composes with `useDragDrop`; keyboard reorder composes with `useVirtualFocus`.
|
|
5918
|
+
*
|
|
5919
|
+
* @example
|
|
5920
|
+
* ```ts
|
|
5921
|
+
* import { createSortable } from '@vuetify/v0'
|
|
5922
|
+
* import type { SortableTicketInput } from '@vuetify/v0'
|
|
5923
|
+
*
|
|
5924
|
+
* interface TaskTicket extends SortableTicketInput {
|
|
5925
|
+
* value: { id: number; label: string }
|
|
5926
|
+
* }
|
|
5927
|
+
*
|
|
5928
|
+
* const sortable = createSortable<TaskTicket>()
|
|
5929
|
+
* const a = sortable.register({ value: { id: 1, label: 'A' } })
|
|
5930
|
+
* const b = sortable.register({ value: { id: 2, label: 'B' } })
|
|
5931
|
+
*
|
|
5932
|
+
* sortable.move(a.id, 1)
|
|
5933
|
+
* sortable.on('move:ticket', ({ ticket, from, to }) => {
|
|
5934
|
+
* console.log(`${ticket.value.label} moved ${from} → ${to}`)
|
|
5935
|
+
* })
|
|
5936
|
+
* ```
|
|
5937
|
+
*/
|
|
5938
|
+
/**
|
|
5939
|
+
* Create an ordered-list state primitive.
|
|
5940
|
+
*
|
|
5941
|
+
* @param options Sortable options.
|
|
5942
|
+
* @returns A {@link SortableContext} that extends {@link ModelContext}.
|
|
5943
|
+
*
|
|
5944
|
+
* @example
|
|
5945
|
+
* ```ts
|
|
5946
|
+
* const sortable = createSortable<Todo>()
|
|
5947
|
+
* sortable.onboard(todos.value.map(value => ({ value })))
|
|
5948
|
+
* ```
|
|
5949
|
+
*/
|
|
5950
|
+
function createSortable(_options = {}) {
|
|
5951
|
+
const { disabled, ...options } = _options;
|
|
5952
|
+
const model = createModel({
|
|
5953
|
+
...options,
|
|
5954
|
+
events: true,
|
|
5955
|
+
disabled
|
|
5956
|
+
});
|
|
5957
|
+
const logger = useLogger();
|
|
5958
|
+
function move(id, toIndex) {
|
|
5959
|
+
if (toValue(disabled)) return void 0;
|
|
5960
|
+
const ticket = model.get(id);
|
|
5961
|
+
if (!ticket) return void 0;
|
|
5962
|
+
if (toValue(ticket.disabled)) return void 0;
|
|
5963
|
+
const from = ticket.index;
|
|
5964
|
+
const result = model.move(id, toIndex);
|
|
5965
|
+
if (result && result.index !== from) model.emit("move:ticket", {
|
|
5966
|
+
ticket: result,
|
|
5967
|
+
from,
|
|
5968
|
+
to: result.index
|
|
5969
|
+
});
|
|
5970
|
+
return result;
|
|
5971
|
+
}
|
|
5972
|
+
function swap(a, b) {
|
|
5973
|
+
if (toValue(disabled)) return;
|
|
5974
|
+
if (a === b) return;
|
|
5975
|
+
const ta = model.get(a);
|
|
5976
|
+
const tb = model.get(b);
|
|
5977
|
+
if (!ta || !tb) return;
|
|
5978
|
+
if (toValue(ta.disabled) || toValue(tb.disabled)) return;
|
|
5979
|
+
const indexA = ta.index;
|
|
5980
|
+
const indexB = tb.index;
|
|
5981
|
+
model.batch(() => {
|
|
5982
|
+
const ra = model.move(a, indexB);
|
|
5983
|
+
if (ra && ra.index !== indexA) model.emit("move:ticket", {
|
|
5984
|
+
ticket: ra,
|
|
5985
|
+
from: indexA,
|
|
5986
|
+
to: ra.index
|
|
5987
|
+
});
|
|
5988
|
+
const rb = model.move(b, indexA);
|
|
5989
|
+
if (rb && rb.index !== indexB) model.emit("move:ticket", {
|
|
5990
|
+
ticket: rb,
|
|
5991
|
+
from: indexB,
|
|
5992
|
+
to: rb.index
|
|
5993
|
+
});
|
|
5994
|
+
});
|
|
5995
|
+
}
|
|
5996
|
+
function reorder(ids) {
|
|
5997
|
+
if (toValue(disabled)) return;
|
|
5998
|
+
const currentSize = model.size;
|
|
5999
|
+
if (ids.length !== currentSize) {
|
|
6000
|
+
logger.warn(`Reorder expected ${currentSize} ids, got ${ids.length}.`);
|
|
6001
|
+
return;
|
|
6002
|
+
}
|
|
6003
|
+
const known = new Set(model.keys());
|
|
6004
|
+
const seen = /* @__PURE__ */ new Set();
|
|
6005
|
+
for (const id of ids) {
|
|
6006
|
+
if (!known.has(id)) {
|
|
6007
|
+
logger.warn(`Reorder contains unknown id "${String(id)}".`);
|
|
6008
|
+
return;
|
|
6009
|
+
}
|
|
6010
|
+
if (seen.has(id)) {
|
|
6011
|
+
logger.warn(`Reorder contains duplicate id "${String(id)}".`);
|
|
6012
|
+
return;
|
|
6013
|
+
}
|
|
6014
|
+
seen.add(id);
|
|
6015
|
+
}
|
|
6016
|
+
const froms = /* @__PURE__ */ new Map();
|
|
6017
|
+
for (const id of ids) {
|
|
6018
|
+
const ticket = model.get(id);
|
|
6019
|
+
if (ticket) froms.set(id, ticket.index);
|
|
6020
|
+
}
|
|
6021
|
+
model.batch(() => {
|
|
6022
|
+
model.reorder(ids);
|
|
6023
|
+
for (const [index, id] of ids.entries()) {
|
|
6024
|
+
const from = froms.get(id);
|
|
6025
|
+
if (from === index) continue;
|
|
6026
|
+
const ticket = model.get(id);
|
|
6027
|
+
if (ticket) model.emit("move:ticket", {
|
|
6028
|
+
ticket,
|
|
6029
|
+
from,
|
|
6030
|
+
to: index
|
|
6031
|
+
});
|
|
6032
|
+
}
|
|
6033
|
+
});
|
|
6034
|
+
}
|
|
6035
|
+
return {
|
|
6036
|
+
...model,
|
|
6037
|
+
move,
|
|
6038
|
+
swap,
|
|
6039
|
+
reorder,
|
|
6040
|
+
get size() {
|
|
6041
|
+
return model.size;
|
|
6042
|
+
}
|
|
6043
|
+
};
|
|
6044
|
+
}
|
|
6045
|
+
//#endregion
|
|
6046
|
+
//#region src/composables/createKanban/index.ts
|
|
6047
|
+
/**
|
|
6048
|
+
* @module createKanban
|
|
6049
|
+
*
|
|
6050
|
+
* @see https://0.vuetifyjs.com/composables/data/create-kanban
|
|
6051
|
+
*
|
|
6052
|
+
* @remarks
|
|
6053
|
+
* Headless data-flow management for two-level sortable boards. Wraps a column
|
|
6054
|
+
* sortable; each column ticket carries its own inner sortable on `column.items`.
|
|
6055
|
+
* Adds a `transfer` primitive for cross-column moves with reused `disabled`
|
|
6056
|
+
* gating and a destination-side `accept` predicate. Pure logic — no DnD, no DOM.
|
|
6057
|
+
*
|
|
6058
|
+
* @example
|
|
6059
|
+
* ```ts
|
|
6060
|
+
* import { createKanban } from '@vuetify/v0'
|
|
6061
|
+
* import type { SortableTicketInput } from '@vuetify/v0'
|
|
6062
|
+
*
|
|
6063
|
+
* interface CardTicket extends SortableTicketInput {
|
|
6064
|
+
* value: { title: string }
|
|
6065
|
+
* }
|
|
6066
|
+
*
|
|
6067
|
+
* const kanban = createKanban<CardTicket>()
|
|
6068
|
+
*
|
|
6069
|
+
* const todo = kanban.columns.register({ value: { title: 'Todo' } })
|
|
6070
|
+
* const done = kanban.columns.register({ value: { title: 'Done' } })
|
|
6071
|
+
*
|
|
6072
|
+
* const card = todo.items.register({ value: { title: 'Write spec' } })
|
|
6073
|
+
*
|
|
6074
|
+
* kanban.on('transfer:ticket', ({ ticket, from, to }) => {
|
|
6075
|
+
* console.log(ticket.value.title, from, '→', to)
|
|
6076
|
+
* })
|
|
6077
|
+
*
|
|
6078
|
+
* kanban.transfer(card.id, done.id, 0)
|
|
6079
|
+
* ```
|
|
6080
|
+
*/
|
|
6081
|
+
/**
|
|
6082
|
+
* Create a headless two-level sortable orchestrator.
|
|
6083
|
+
*
|
|
6084
|
+
* @param options Kanban options (currently only `disabled`).
|
|
6085
|
+
* @returns A {@link KanbanContext}.
|
|
6086
|
+
*
|
|
6087
|
+
* @example
|
|
6088
|
+
* ```ts
|
|
6089
|
+
* import { createKanban } from '@vuetify/v0'
|
|
6090
|
+
* import type { KanbanColumnTicketInput, SortableTicketInput } from '@vuetify/v0'
|
|
6091
|
+
*
|
|
6092
|
+
* interface CardTicket extends SortableTicketInput {
|
|
6093
|
+
* value: { title: string }
|
|
6094
|
+
* }
|
|
6095
|
+
*
|
|
6096
|
+
* interface BoardColumn extends KanbanColumnTicketInput<CardTicket> {
|
|
6097
|
+
* value: { title: string }
|
|
6098
|
+
* }
|
|
6099
|
+
*
|
|
6100
|
+
* const kanban = createKanban<CardTicket, BoardColumn>()
|
|
6101
|
+
*
|
|
6102
|
+
* const todo = kanban.columns.register({ value: { title: 'Todo' } })
|
|
6103
|
+
* const review = kanban.columns.register({
|
|
6104
|
+
* value: { title: 'Review' },
|
|
6105
|
+
* accept: card => card.value.title.length > 0,
|
|
6106
|
+
* })
|
|
6107
|
+
*
|
|
6108
|
+
* const spec = todo.items.register({ value: { title: 'Write spec' } })
|
|
6109
|
+
* kanban.transfer(spec.id, review.id, 0)
|
|
6110
|
+
* ```
|
|
6111
|
+
*/
|
|
6112
|
+
function createKanban(_options = {}) {
|
|
6113
|
+
const { disabled, ...options } = _options;
|
|
6114
|
+
const logger = useLogger();
|
|
6115
|
+
const _columns = createSortable({
|
|
6116
|
+
...options,
|
|
6117
|
+
disabled
|
|
6118
|
+
});
|
|
6119
|
+
const lookup = createRegistry({ events: true });
|
|
6120
|
+
const bus = createRegistry({ events: true });
|
|
6121
|
+
const on = bus.on;
|
|
6122
|
+
const off = bus.off;
|
|
6123
|
+
const columns = {
|
|
6124
|
+
..._columns,
|
|
6125
|
+
register(registration) {
|
|
6126
|
+
let ticket;
|
|
6127
|
+
const items = createSortable({ disabled: () => !!toValue(disabled) || !!toValue(ticket?.disabled) });
|
|
6128
|
+
items.on("register:ticket", (t) => {
|
|
6129
|
+
lookup.upsert(t.id, { value: ticket.id });
|
|
6130
|
+
});
|
|
6131
|
+
items.on("unregister:ticket", (t) => {
|
|
6132
|
+
lookup.get(t.id)?.unregister();
|
|
6133
|
+
});
|
|
6134
|
+
ticket = _columns.register({
|
|
6135
|
+
...registration,
|
|
6136
|
+
items
|
|
6137
|
+
});
|
|
6138
|
+
return ticket;
|
|
6139
|
+
},
|
|
6140
|
+
onboard(registrations) {
|
|
6141
|
+
return _columns.batch(() => registrations.map((reg) => columns.register(reg)));
|
|
6142
|
+
},
|
|
6143
|
+
upsert(id, patch = {}, event) {
|
|
6144
|
+
return /* @__PURE__ */ isUndefined(_columns.get(id)) ? columns.register({
|
|
6145
|
+
...patch,
|
|
6146
|
+
id
|
|
6147
|
+
}) : _columns.upsert(id, patch, event);
|
|
6148
|
+
},
|
|
6149
|
+
get size() {
|
|
6150
|
+
return _columns.size;
|
|
6151
|
+
}
|
|
6152
|
+
};
|
|
6153
|
+
function isAccepted(accept, ticket, from, toIndex) {
|
|
6154
|
+
if (/* @__PURE__ */ isUndefined(accept)) return true;
|
|
6155
|
+
try {
|
|
6156
|
+
const result = accept(ticket, from, toIndex);
|
|
6157
|
+
if (/* @__PURE__ */ isThenable(result)) {
|
|
6158
|
+
logger.warn("accept predicate returned a thenable; async predicates are not supported — treating as reject");
|
|
6159
|
+
return false;
|
|
6160
|
+
}
|
|
6161
|
+
return Boolean(result);
|
|
6162
|
+
} catch (error) {
|
|
6163
|
+
logger.error("accept predicate threw; treating as reject", error);
|
|
6164
|
+
return false;
|
|
6165
|
+
}
|
|
6166
|
+
}
|
|
6167
|
+
columns.on("unregister:ticket", (column) => {
|
|
6168
|
+
column.items.dispose();
|
|
6169
|
+
for (const t of lookup.values()) if (t.value === column.id) t.unregister();
|
|
6170
|
+
});
|
|
6171
|
+
function transfer(id, toColumnId, toIndex) {
|
|
6172
|
+
const fromColumnId = lookup.get(id)?.value;
|
|
6173
|
+
if (/* @__PURE__ */ isUndefined(fromColumnId)) {
|
|
6174
|
+
logger.warn(`unknown ticket id "${String(id)}"`);
|
|
6175
|
+
return;
|
|
6176
|
+
}
|
|
6177
|
+
const source = columns.get(fromColumnId);
|
|
6178
|
+
if (!source) {
|
|
6179
|
+
logger.warn(`unknown source column id "${String(fromColumnId)}"`);
|
|
6180
|
+
return;
|
|
6181
|
+
}
|
|
6182
|
+
const destination = columns.get(toColumnId);
|
|
6183
|
+
if (!destination) {
|
|
6184
|
+
logger.warn(`unknown destination column id "${String(toColumnId)}"`);
|
|
6185
|
+
return;
|
|
6186
|
+
}
|
|
6187
|
+
const ticket = source.items.get(id);
|
|
6188
|
+
if (!ticket) {
|
|
6189
|
+
logger.warn(`ticket "${String(id)}" missing from source column "${String(fromColumnId)}"`);
|
|
6190
|
+
return;
|
|
6191
|
+
}
|
|
6192
|
+
const fromIndex = ticket.index;
|
|
6193
|
+
if (toColumnId === fromColumnId) return source.items.move(id, toIndex);
|
|
6194
|
+
if (toValue(disabled) || toValue(source.disabled) || toValue(destination.disabled) || toValue(ticket.disabled)) return;
|
|
6195
|
+
if (!isAccepted(destination.accept, ticket, fromColumnId, toIndex)) return void 0;
|
|
6196
|
+
if (!/* @__PURE__ */ isUndefined(destination.items.get(id))) {
|
|
6197
|
+
logger.warn(`id "${String(id)}" already exists in destination column "${String(toColumnId)}"`);
|
|
6198
|
+
return;
|
|
6199
|
+
}
|
|
6200
|
+
let registered;
|
|
6201
|
+
let moved;
|
|
6202
|
+
destination.items.batch(() => {
|
|
6203
|
+
const [input] = source.items.offboard([id]);
|
|
6204
|
+
if (/* @__PURE__ */ isUndefined(input)) return;
|
|
6205
|
+
registered = destination.items.register(input);
|
|
6206
|
+
moved = registered.index === toIndex ? registered : destination.items.move(registered.id, toIndex);
|
|
6207
|
+
});
|
|
6208
|
+
const final = moved ?? registered;
|
|
6209
|
+
if (final) bus.emit("transfer:ticket", {
|
|
6210
|
+
ticket: final,
|
|
6211
|
+
from: fromColumnId,
|
|
6212
|
+
to: toColumnId,
|
|
6213
|
+
fromIndex,
|
|
6214
|
+
toIndex: final.index
|
|
6215
|
+
});
|
|
6216
|
+
return final;
|
|
6217
|
+
}
|
|
6218
|
+
return {
|
|
6219
|
+
columns,
|
|
6220
|
+
transfer,
|
|
6221
|
+
on,
|
|
6222
|
+
off
|
|
6223
|
+
};
|
|
6224
|
+
}
|
|
6225
|
+
//#endregion
|
|
5832
6226
|
//#region src/composables/createNested/index.ts
|
|
5833
6227
|
/**
|
|
5834
6228
|
* @module createNested
|
|
@@ -7082,6 +7476,7 @@ function useElementSize(target) {
|
|
|
7082
7476
|
const height = shallowRef(0);
|
|
7083
7477
|
const { pause: _pause, resume, stop, isActive, isPaused } = useResizeObserver(target, (entries) => {
|
|
7084
7478
|
const entry = entries[0];
|
|
7479
|
+
/* v8 ignore next 4 -- defensive: ResizeObserver always passes an entry array with at least one entry */
|
|
7085
7480
|
if (entry) {
|
|
7086
7481
|
width.value = entry.contentRect.width;
|
|
7087
7482
|
height.value = entry.contentRect.height;
|
|
@@ -7240,6 +7635,7 @@ function createOverflow(options = {}) {
|
|
|
7240
7635
|
}),
|
|
7241
7636
|
total,
|
|
7242
7637
|
isOverflowing: toRef(() => {
|
|
7638
|
+
if (width.value === 0) return false;
|
|
7243
7639
|
return total.value > width.value - toValue(reserved);
|
|
7244
7640
|
}),
|
|
7245
7641
|
measure,
|
|
@@ -7392,7 +7788,7 @@ function createProgress(options = {}) {
|
|
|
7392
7788
|
}
|
|
7393
7789
|
for (const [index, element] of clamped.entries()) {
|
|
7394
7790
|
const ticket = segments.value[index];
|
|
7395
|
-
if (!ticket || !isRef(ticket.value)) continue;
|
|
7791
|
+
if (!ticket || !isRef(ticket.value) || isReadonly(ticket.value)) continue;
|
|
7396
7792
|
ticket.value.value = element;
|
|
7397
7793
|
}
|
|
7398
7794
|
}
|
|
@@ -7554,7 +7950,7 @@ function createQueue(_options = {}) {
|
|
|
7554
7950
|
if (!ticket || ticket.index !== 0 || !ticket.isPaused) return void 0;
|
|
7555
7951
|
const updated = registry.upsert(ticket.id, { isPaused: false });
|
|
7556
7952
|
const timer = timers.get(updated.id);
|
|
7557
|
-
if (timer) timer.
|
|
7953
|
+
if (timer) timer.resume();
|
|
7558
7954
|
else createTicketTimer(updated);
|
|
7559
7955
|
return updated;
|
|
7560
7956
|
}
|
|
@@ -8449,6 +8845,7 @@ function createVirtual(items, _options = {}) {
|
|
|
8449
8845
|
/* v8 ignore stop */
|
|
8450
8846
|
});
|
|
8451
8847
|
useResizeObserver(element, (entries) => {
|
|
8848
|
+
/* v8 ignore next -- defensive: ResizeObserver always emits at least one entry */
|
|
8452
8849
|
if (!entries[0]) return;
|
|
8453
8850
|
viewportHeight.value = entries[0].contentRect.height;
|
|
8454
8851
|
update();
|
|
@@ -8461,6 +8858,7 @@ function createVirtual(items, _options = {}) {
|
|
|
8461
8858
|
rebuild();
|
|
8462
8859
|
}, { immediate: true });
|
|
8463
8860
|
watch(element, () => {
|
|
8861
|
+
/* v8 ignore next -- defensive: watch fires only when element is present */
|
|
8464
8862
|
if (!element.value) return;
|
|
8465
8863
|
if (direction === "reverse" && items.value.length > 0) {
|
|
8466
8864
|
const lastIndex = items.value.length - 1;
|
|
@@ -8479,6 +8877,7 @@ function createVirtual(items, _options = {}) {
|
|
|
8479
8877
|
anchorOffset = 0;
|
|
8480
8878
|
} else if (/* @__PURE__ */ isFunction(anchor)) {
|
|
8481
8879
|
const result = anchor(items.value);
|
|
8880
|
+
/* v8 ignore next 4 -- function-anchor: tested with valid number return; non-number rejection branch is implicit */
|
|
8482
8881
|
if (/* @__PURE__ */ isNumber(result)) {
|
|
8483
8882
|
anchorIndex = result;
|
|
8484
8883
|
anchorOffset = element.value.scrollTop - (offsets.value[result] || 0);
|
|
@@ -8562,8 +8961,10 @@ function createVirtual(items, _options = {}) {
|
|
|
8562
8961
|
/* v8 ignore stop */
|
|
8563
8962
|
}
|
|
8564
8963
|
function resize(index, height) {
|
|
8964
|
+
/* v8 ignore next -- early bail when height is already correct */
|
|
8565
8965
|
if (heights.value[index] === height) return;
|
|
8566
8966
|
heights.value[index] = height;
|
|
8967
|
+
/* v8 ignore next -- first-call only: itemHeight bootstrapped from initial measurement */
|
|
8567
8968
|
if (!itemHeight.value) itemHeight.value = height;
|
|
8568
8969
|
if (IN_BROWSER) {
|
|
8569
8970
|
cancelAnimationFrame(rebuildRaf);
|
|
@@ -8580,6 +8981,7 @@ function createVirtual(items, _options = {}) {
|
|
|
8580
8981
|
/* v8 ignore stop */
|
|
8581
8982
|
}
|
|
8582
8983
|
function scrollTo(index, scrollOptions) {
|
|
8984
|
+
/* v8 ignore next -- defensive: scrollTo only invoked after element mounts */
|
|
8583
8985
|
if (!element.value) return;
|
|
8584
8986
|
const targetOffset = offsets.value[index] || 0;
|
|
8585
8987
|
const behavior = scrollOptions?.behavior ?? "auto";
|
|
@@ -9099,11 +9501,11 @@ const [createBreakpointsContext, createBreakpointsPlugin, useBreakpoints] = crea
|
|
|
9099
9501
|
*
|
|
9100
9502
|
* @example Using the built-in Temporal adapter
|
|
9101
9503
|
* ```ts
|
|
9102
|
-
* import {
|
|
9504
|
+
* import { V0DateAdapter } from '@vuetify/v0/date'
|
|
9103
9505
|
* import { createDatePlugin } from '@vuetify/v0'
|
|
9104
9506
|
*
|
|
9105
9507
|
* const app = createApp(App)
|
|
9106
|
-
* app.use(createDatePlugin({ adapter: new
|
|
9508
|
+
* app.use(createDatePlugin({ adapter: new V0DateAdapter() }))
|
|
9107
9509
|
*
|
|
9108
9510
|
* // In a component:
|
|
9109
9511
|
* const { adapter } = useDate()
|
|
@@ -9113,9 +9515,9 @@ const [createBreakpointsContext, createBreakpointsPlugin, useBreakpoints] = crea
|
|
|
9113
9515
|
*
|
|
9114
9516
|
* @example Custom adapter
|
|
9115
9517
|
* ```ts
|
|
9116
|
-
* import
|
|
9518
|
+
* import { DateAdapter } from '@vuetify/v0'
|
|
9117
9519
|
*
|
|
9118
|
-
* class DateFnsAdapter
|
|
9520
|
+
* class DateFnsAdapter extends DateAdapter<Date> {
|
|
9119
9521
|
* // ... implementation
|
|
9120
9522
|
* }
|
|
9121
9523
|
*
|
|
@@ -9146,6 +9548,7 @@ const defaultLocales = {
|
|
|
9146
9548
|
function deriveFirstDayOfWeek(locale) {
|
|
9147
9549
|
try {
|
|
9148
9550
|
const info = new Intl.Locale(locale).getWeekInfo?.();
|
|
9551
|
+
/* v8 ignore next -- defensive: getWeekInfo always returns info in Node 22+ */
|
|
9149
9552
|
return info ? info.firstDay % 7 : 0;
|
|
9150
9553
|
} catch {
|
|
9151
9554
|
return 0;
|
|
@@ -9163,14 +9566,14 @@ function deriveFirstDayOfWeek(locale) {
|
|
|
9163
9566
|
*
|
|
9164
9567
|
* @example
|
|
9165
9568
|
* ```ts
|
|
9166
|
-
* import {
|
|
9569
|
+
* import { V0DateAdapter } from '@vuetify/v0/date'
|
|
9167
9570
|
*
|
|
9168
|
-
* const { adapter } = createDate({ adapter: new
|
|
9571
|
+
* const { adapter } = createDate({ adapter: new V0DateAdapter() })
|
|
9169
9572
|
* const today = adapter.date()
|
|
9170
9573
|
*
|
|
9171
9574
|
* // With locale options
|
|
9172
9575
|
* const { adapter } = createDate({
|
|
9173
|
-
* adapter: new
|
|
9576
|
+
* adapter: new V0DateAdapter(),
|
|
9174
9577
|
* locale: 'de-DE',
|
|
9175
9578
|
* })
|
|
9176
9579
|
* ```
|
|
@@ -9225,10 +9628,10 @@ function createDate(options) {
|
|
|
9225
9628
|
*
|
|
9226
9629
|
* @example
|
|
9227
9630
|
* ```ts
|
|
9228
|
-
* import {
|
|
9631
|
+
* import { V0DateAdapter } from '@vuetify/v0/date'
|
|
9229
9632
|
*
|
|
9230
9633
|
* const [useAppDate, provideAppDate] = createDateContext({
|
|
9231
|
-
* adapter: new
|
|
9634
|
+
* adapter: new V0DateAdapter(),
|
|
9232
9635
|
* namespace: 'app:date',
|
|
9233
9636
|
* })
|
|
9234
9637
|
* ```
|
|
@@ -9249,14 +9652,14 @@ function createDateContext(options) {
|
|
|
9249
9652
|
*
|
|
9250
9653
|
* @example
|
|
9251
9654
|
* ```ts
|
|
9252
|
-
* import {
|
|
9655
|
+
* import { V0DateAdapter } from '@vuetify/v0/date'
|
|
9253
9656
|
*
|
|
9254
9657
|
* const app = createApp(App)
|
|
9255
|
-
* app.use(createDatePlugin({ adapter: new
|
|
9658
|
+
* app.use(createDatePlugin({ adapter: new V0DateAdapter() }))
|
|
9256
9659
|
*
|
|
9257
9660
|
* // With locale options
|
|
9258
9661
|
* app.use(createDatePlugin({
|
|
9259
|
-
* adapter: new
|
|
9662
|
+
* adapter: new V0DateAdapter(),
|
|
9260
9663
|
* locale: 'de-DE',
|
|
9261
9664
|
* }))
|
|
9262
9665
|
* ```
|
|
@@ -9290,10 +9693,10 @@ function createDatePlugin(options) {
|
|
|
9290
9693
|
* @example
|
|
9291
9694
|
* ```ts
|
|
9292
9695
|
* // main.ts
|
|
9293
|
-
* import {
|
|
9696
|
+
* import { V0DateAdapter } from '@vuetify/v0/date'
|
|
9294
9697
|
* import { createDatePlugin } from '@vuetify/v0'
|
|
9295
9698
|
*
|
|
9296
|
-
* app.use(createDatePlugin({ adapter: new
|
|
9699
|
+
* app.use(createDatePlugin({ adapter: new V0DateAdapter() }))
|
|
9297
9700
|
* ```
|
|
9298
9701
|
*
|
|
9299
9702
|
* @example
|
|
@@ -9307,7 +9710,7 @@ function createDatePlugin(options) {
|
|
|
9307
9710
|
* ```
|
|
9308
9711
|
*/
|
|
9309
9712
|
function useDate(namespace = "v0:date") {
|
|
9310
|
-
if (!/* @__PURE__ */ instanceExists()) throw new Error("[v0] useDate() must be called inside a Vue component with createDatePlugin installed.\n\nExample:\n import {
|
|
9713
|
+
if (!/* @__PURE__ */ instanceExists()) throw new Error("[v0] useDate() must be called inside a Vue component with createDatePlugin installed.\n\nExample:\n import { V0DateAdapter } from '@vuetify/v0/date'\n import { createDatePlugin } from '@vuetify/v0'\n\n app.use(createDatePlugin({ adapter: new V0DateAdapter() }))");
|
|
9311
9714
|
return useContext(namespace);
|
|
9312
9715
|
}
|
|
9313
9716
|
//#endregion
|
|
@@ -9383,52 +9786,824 @@ function useDelay(callback, options = {}) {
|
|
|
9383
9786
|
resolve?.(direction);
|
|
9384
9787
|
callback?.(direction);
|
|
9385
9788
|
}
|
|
9386
|
-
function duration() {
|
|
9387
|
-
const raw = isOpening.value ? toValue(openDelay) : toValue(closeDelay);
|
|
9388
|
-
return Math.max(minDelay, raw ?? 0);
|
|
9789
|
+
function duration() {
|
|
9790
|
+
const raw = isOpening.value ? toValue(openDelay) : toValue(closeDelay);
|
|
9791
|
+
return Math.max(minDelay, raw ?? 0);
|
|
9792
|
+
}
|
|
9793
|
+
const timer = useTimer(fire, { duration });
|
|
9794
|
+
function start(direction, options = {}) {
|
|
9795
|
+
const previous = resolver;
|
|
9796
|
+
resolver = void 0;
|
|
9797
|
+
isOpening.value = direction;
|
|
9798
|
+
minDelay = options.minDelay ?? 0;
|
|
9799
|
+
previous?.(direction);
|
|
9800
|
+
const ms = duration();
|
|
9801
|
+
return new Promise((resolve) => {
|
|
9802
|
+
resolver = resolve;
|
|
9803
|
+
if (ms <= 0) {
|
|
9804
|
+
timer.stop();
|
|
9805
|
+
fire();
|
|
9806
|
+
return;
|
|
9807
|
+
}
|
|
9808
|
+
timer.start();
|
|
9809
|
+
});
|
|
9810
|
+
}
|
|
9811
|
+
function stop() {
|
|
9812
|
+
const resolve = resolver;
|
|
9813
|
+
resolver = void 0;
|
|
9814
|
+
timer.stop();
|
|
9815
|
+
resolve?.(isOpening.value);
|
|
9816
|
+
}
|
|
9817
|
+
onScopeDispose(() => {
|
|
9818
|
+
const resolve = resolver;
|
|
9819
|
+
resolver = void 0;
|
|
9820
|
+
resolve?.(isOpening.value);
|
|
9821
|
+
}, true);
|
|
9822
|
+
return {
|
|
9823
|
+
start,
|
|
9824
|
+
stop,
|
|
9825
|
+
pause: timer.pause,
|
|
9826
|
+
resume: timer.resume,
|
|
9827
|
+
isActive: shallowReadonly(timer.isActive),
|
|
9828
|
+
isPaused: shallowReadonly(timer.isPaused),
|
|
9829
|
+
remaining: shallowReadonly(timer.remaining),
|
|
9830
|
+
isOpening: shallowReadonly(isOpening)
|
|
9831
|
+
};
|
|
9832
|
+
}
|
|
9833
|
+
//#endregion
|
|
9834
|
+
//#region src/composables/useMutationObserver/index.ts
|
|
9835
|
+
/**
|
|
9836
|
+
* @module useMutationObserver
|
|
9837
|
+
*
|
|
9838
|
+
* @see https://0.vuetifyjs.com/composables/system/use-mutation-observer
|
|
9839
|
+
*
|
|
9840
|
+
* @remarks
|
|
9841
|
+
* MutationObserver composable with lifecycle management.
|
|
9842
|
+
*
|
|
9843
|
+
* Key features:
|
|
9844
|
+
* - MutationObserver API wrapper
|
|
9845
|
+
* - `isActive` reactive flag
|
|
9846
|
+
* - `once` option for single-fire observation
|
|
9847
|
+
* - Pause/resume/stop functionality
|
|
9848
|
+
* - Automatic cleanup on unmount
|
|
9849
|
+
* - SSR-safe (checks SUPPORTS_MUTATION_OBSERVER)
|
|
9850
|
+
* - Hydration-aware
|
|
9851
|
+
* - Configurable observation options (childList, attributes, characterData, etc.)
|
|
9852
|
+
*
|
|
9853
|
+
* Perfect for detecting DOM changes and responding to mutations.
|
|
9854
|
+
*
|
|
9855
|
+
* @example
|
|
9856
|
+
* ```ts
|
|
9857
|
+
* import { useTemplateRef } from 'vue'
|
|
9858
|
+
* import { useMutationObserver } from '@vuetify/v0'
|
|
9859
|
+
*
|
|
9860
|
+
* const target = useTemplateRef('target')
|
|
9861
|
+
* useMutationObserver(target, records => {
|
|
9862
|
+
* console.log(records)
|
|
9863
|
+
* }, { childList: true })
|
|
9864
|
+
* ```
|
|
9865
|
+
*/
|
|
9866
|
+
/**
|
|
9867
|
+
* A composable that uses the Mutation Observer API to detect changes in the DOM.
|
|
9868
|
+
*
|
|
9869
|
+
* @param target The element to observe.
|
|
9870
|
+
* @param callback The callback to execute when a mutation is observed.
|
|
9871
|
+
* @param options The options for the Mutation Observer.
|
|
9872
|
+
* @returns An object with methods to control the observer.
|
|
9873
|
+
*
|
|
9874
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver
|
|
9875
|
+
* @see https://0.vuetifyjs.com/composables/system/use-mutation-observer
|
|
9876
|
+
*
|
|
9877
|
+
* @example
|
|
9878
|
+
* ```ts
|
|
9879
|
+
* import { ref } from 'vue'
|
|
9880
|
+
* import { useMutationObserver } from '@vuetify/v0'
|
|
9881
|
+
*
|
|
9882
|
+
* const container = ref<HTMLElement>()
|
|
9883
|
+
*
|
|
9884
|
+
* const { pause, resume, isPaused } = useMutationObserver(
|
|
9885
|
+
* container,
|
|
9886
|
+
* (mutations) => {
|
|
9887
|
+
* mutations.forEach((mutation) => {
|
|
9888
|
+
* if (mutation.type === 'childList') {
|
|
9889
|
+
* console.log('Children changed:', mutation.addedNodes, mutation.removedNodes)
|
|
9890
|
+
* } else if (mutation.type === 'attributes') {
|
|
9891
|
+
* console.log('Attribute changed:', mutation.attributeName)
|
|
9892
|
+
* }
|
|
9893
|
+
* })
|
|
9894
|
+
* },
|
|
9895
|
+
* {
|
|
9896
|
+
* childList: true,
|
|
9897
|
+
* attributes: true,
|
|
9898
|
+
* subtree: true
|
|
9899
|
+
* }
|
|
9900
|
+
* )
|
|
9901
|
+
*
|
|
9902
|
+
* // Pause observation
|
|
9903
|
+
* pause()
|
|
9904
|
+
*
|
|
9905
|
+
* // Resume observation
|
|
9906
|
+
* resume()
|
|
9907
|
+
* ```
|
|
9908
|
+
*/
|
|
9909
|
+
function useMutationObserver(target, callback, options = {}) {
|
|
9910
|
+
const observerOptions = {
|
|
9911
|
+
childList: options.childList ?? true,
|
|
9912
|
+
attributes: options.attributes ?? false,
|
|
9913
|
+
characterData: options.characterData ?? false,
|
|
9914
|
+
subtree: options.subtree ?? false,
|
|
9915
|
+
attributeOldValue: options.attributeOldValue ?? false,
|
|
9916
|
+
characterDataOldValue: options.characterDataOldValue ?? false,
|
|
9917
|
+
attributeFilter: options.attributeFilter
|
|
9918
|
+
};
|
|
9919
|
+
return createObserver(target, callback, {
|
|
9920
|
+
supports: SUPPORTS_MUTATION_OBSERVER,
|
|
9921
|
+
once: options.once,
|
|
9922
|
+
create: (cb) => new MutationObserver((mutations) => {
|
|
9923
|
+
cb(mutations.map((m) => ({
|
|
9924
|
+
type: m.type,
|
|
9925
|
+
target: m.target,
|
|
9926
|
+
addedNodes: m.addedNodes,
|
|
9927
|
+
removedNodes: m.removedNodes,
|
|
9928
|
+
previousSibling: m.previousSibling,
|
|
9929
|
+
nextSibling: m.nextSibling,
|
|
9930
|
+
attributeName: m.attributeName,
|
|
9931
|
+
attributeNamespace: m.attributeNamespace,
|
|
9932
|
+
oldValue: m.oldValue
|
|
9933
|
+
})));
|
|
9934
|
+
}),
|
|
9935
|
+
observe: (obs, el) => obs.observe(el, observerOptions),
|
|
9936
|
+
immediate: options.immediate ? (el) => {
|
|
9937
|
+
const emptyNodeList = {
|
|
9938
|
+
length: 0,
|
|
9939
|
+
item: () => null,
|
|
9940
|
+
forEach: () => {},
|
|
9941
|
+
*[Symbol.iterator]() {}
|
|
9942
|
+
};
|
|
9943
|
+
return [{
|
|
9944
|
+
type: "childList",
|
|
9945
|
+
target: el,
|
|
9946
|
+
addedNodes: emptyNodeList,
|
|
9947
|
+
removedNodes: emptyNodeList,
|
|
9948
|
+
previousSibling: null,
|
|
9949
|
+
nextSibling: null,
|
|
9950
|
+
attributeName: null,
|
|
9951
|
+
attributeNamespace: null,
|
|
9952
|
+
oldValue: null
|
|
9953
|
+
}];
|
|
9954
|
+
} : void 0,
|
|
9955
|
+
onceIncludesImmediate: true
|
|
9956
|
+
});
|
|
9957
|
+
}
|
|
9958
|
+
//#endregion
|
|
9959
|
+
//#region src/composables/useDragDrop/adapters/adapter.ts
|
|
9960
|
+
/**
|
|
9961
|
+
* @module useDragDrop/adapters/adapter
|
|
9962
|
+
*
|
|
9963
|
+
* @remarks
|
|
9964
|
+
* Adapter contract and abstract base for useDragDrop. Concrete adapters extend
|
|
9965
|
+
* `DragDropAdapter<Z>` to share the `cleanup` field, `dispose()` lifecycle, and
|
|
9966
|
+
* the `locate()` DOM-walk helper.
|
|
9967
|
+
*/
|
|
9968
|
+
/**
|
|
9969
|
+
* Abstract base class for useDragDrop adapters. Provides a `cleanup` slot, a
|
|
9970
|
+
* `dispose()` lifecycle, and a `locate()` helper that walks the DOM to find the
|
|
9971
|
+
* draggable ticket whose `el` ancestors a given event target.
|
|
9972
|
+
*
|
|
9973
|
+
* @example
|
|
9974
|
+
* ```ts
|
|
9975
|
+
* import { DragDropAdapter, type DragDropAdapterContext } from '@vuetify/v0'
|
|
9976
|
+
*
|
|
9977
|
+
* class MyAdapter extends DragDropAdapter {
|
|
9978
|
+
* setup (context: DragDropAdapterContext) {
|
|
9979
|
+
* const stop = useEventListener(document, 'mousedown', event => {
|
|
9980
|
+
* const ticket = this.locate(event.target, context)
|
|
9981
|
+
* if (ticket) context.emit.start(ticket, { x: event.clientX, y: event.clientY }, 'pointer')
|
|
9982
|
+
* })
|
|
9983
|
+
* this.cleanup = () => stop()
|
|
9984
|
+
* }
|
|
9985
|
+
* }
|
|
9986
|
+
* ```
|
|
9987
|
+
*/
|
|
9988
|
+
var DragDropAdapter = class {
|
|
9989
|
+
cleanup = null;
|
|
9990
|
+
dispose() {
|
|
9991
|
+
this.cleanup?.();
|
|
9992
|
+
this.cleanup = null;
|
|
9993
|
+
}
|
|
9994
|
+
locate(target, context) {
|
|
9995
|
+
let element = /* @__PURE__ */ isElement(target) ? target : null;
|
|
9996
|
+
while (element) {
|
|
9997
|
+
for (const ticket of context.draggables.values()) if (ticket.el.value === element) return ticket;
|
|
9998
|
+
element = element.parentElement;
|
|
9999
|
+
}
|
|
10000
|
+
return null;
|
|
10001
|
+
}
|
|
10002
|
+
};
|
|
10003
|
+
//#endregion
|
|
10004
|
+
//#region src/composables/useDragDrop/adapters/pointer.ts
|
|
10005
|
+
/**
|
|
10006
|
+
* @module useDragDrop/adapters/pointer
|
|
10007
|
+
*
|
|
10008
|
+
* @remarks
|
|
10009
|
+
* Default pointer adapter for useDragDrop. Listens for `pointerdown` /
|
|
10010
|
+
* `pointermove` / `pointerup` / `pointercancel` on the document and emits the
|
|
10011
|
+
* drag lifecycle. Activation distance is configurable via `threshold`.
|
|
10012
|
+
*/
|
|
10013
|
+
/**
|
|
10014
|
+
* Default pointer adapter. Wires `pointerdown` / `pointermove` / `pointerup` /
|
|
10015
|
+
* `pointercancel` on the document and converts them into drag lifecycle calls.
|
|
10016
|
+
*
|
|
10017
|
+
* @example
|
|
10018
|
+
* ```ts
|
|
10019
|
+
* import { PointerAdapter, useDragDrop } from '@vuetify/v0'
|
|
10020
|
+
*
|
|
10021
|
+
* useDragDrop({ adapters: [new PointerAdapter({ threshold: 10 })] })
|
|
10022
|
+
* ```
|
|
10023
|
+
*/
|
|
10024
|
+
var PointerAdapter = class extends DragDropAdapter {
|
|
10025
|
+
threshold;
|
|
10026
|
+
constructor(options = {}) {
|
|
10027
|
+
super();
|
|
10028
|
+
this.threshold = options.threshold ?? 0;
|
|
10029
|
+
}
|
|
10030
|
+
setup(context) {
|
|
10031
|
+
const logger = useLogger();
|
|
10032
|
+
if (this.cleanup) {
|
|
10033
|
+
logger.warn("PointerAdapter setup called twice; previous registration will be replaced");
|
|
10034
|
+
this.dispose();
|
|
10035
|
+
}
|
|
10036
|
+
if (!IN_BROWSER) return;
|
|
10037
|
+
let downSource = null;
|
|
10038
|
+
let downOrigin = null;
|
|
10039
|
+
let downId = null;
|
|
10040
|
+
let started = false;
|
|
10041
|
+
function reset() {
|
|
10042
|
+
downSource = null;
|
|
10043
|
+
downOrigin = null;
|
|
10044
|
+
downId = null;
|
|
10045
|
+
started = false;
|
|
10046
|
+
}
|
|
10047
|
+
const onDown = (event) => {
|
|
10048
|
+
if (event.button !== 0) return;
|
|
10049
|
+
if (downSource) return;
|
|
10050
|
+
const ticket = this.locate(event.target, context);
|
|
10051
|
+
if (!ticket) return;
|
|
10052
|
+
downSource = ticket;
|
|
10053
|
+
downOrigin = {
|
|
10054
|
+
x: event.clientX,
|
|
10055
|
+
y: event.clientY
|
|
10056
|
+
};
|
|
10057
|
+
downId = event.pointerId;
|
|
10058
|
+
started = false;
|
|
10059
|
+
};
|
|
10060
|
+
const onMove = (event) => {
|
|
10061
|
+
if (!downSource || !downOrigin || event.pointerId !== downId) return;
|
|
10062
|
+
const point = {
|
|
10063
|
+
x: event.clientX,
|
|
10064
|
+
y: event.clientY
|
|
10065
|
+
};
|
|
10066
|
+
if (!started) {
|
|
10067
|
+
const dx = point.x - downOrigin.x;
|
|
10068
|
+
const dy = point.y - downOrigin.y;
|
|
10069
|
+
if (this.threshold > 0 && Math.hypot(dx, dy) < this.threshold) return;
|
|
10070
|
+
context.emit.start(downSource, downOrigin, "pointer");
|
|
10071
|
+
started = true;
|
|
10072
|
+
}
|
|
10073
|
+
context.emit.move(point);
|
|
10074
|
+
};
|
|
10075
|
+
function onUp(event) {
|
|
10076
|
+
if (event.pointerId !== downId) return;
|
|
10077
|
+
if (downSource && started) context.emit.drop();
|
|
10078
|
+
reset();
|
|
10079
|
+
}
|
|
10080
|
+
function onCancel(event) {
|
|
10081
|
+
if (event.pointerId !== downId) return;
|
|
10082
|
+
if (downSource && started) context.emit.cancel();
|
|
10083
|
+
reset();
|
|
10084
|
+
}
|
|
10085
|
+
const stopDown = useEventListener(document, "pointerdown", onDown);
|
|
10086
|
+
const stopMove = useEventListener(document, "pointermove", onMove);
|
|
10087
|
+
const stopUp = useEventListener(document, "pointerup", onUp);
|
|
10088
|
+
const stopCancel = useEventListener(document, "pointercancel", onCancel);
|
|
10089
|
+
this.cleanup = () => {
|
|
10090
|
+
stopDown();
|
|
10091
|
+
stopMove();
|
|
10092
|
+
stopUp();
|
|
10093
|
+
stopCancel();
|
|
10094
|
+
};
|
|
10095
|
+
}
|
|
10096
|
+
};
|
|
10097
|
+
//#endregion
|
|
10098
|
+
//#region src/composables/useDragDrop/adapters/keyboard.ts
|
|
10099
|
+
/**
|
|
10100
|
+
* @module useDragDrop/adapters/keyboard
|
|
10101
|
+
*
|
|
10102
|
+
* @remarks
|
|
10103
|
+
* Default keyboard adapter for useDragDrop. Listens for `keydown` on the
|
|
10104
|
+
* document. Activation keys (default Space and Enter) start and drop drags;
|
|
10105
|
+
* arrow keys nudge the drag point by `step` px; Escape cancels.
|
|
10106
|
+
*/
|
|
10107
|
+
function isEditable(element) {
|
|
10108
|
+
if (/* @__PURE__ */ isNull(element)) return false;
|
|
10109
|
+
const tag = element.tagName;
|
|
10110
|
+
if (tag === "INPUT" || tag === "TEXTAREA" || tag === "SELECT") return true;
|
|
10111
|
+
if (element.isContentEditable) return true;
|
|
10112
|
+
const role = element.getAttribute("role");
|
|
10113
|
+
return role === "textbox" || role === "searchbox" || role === "combobox" || role === "spinbutton";
|
|
10114
|
+
}
|
|
10115
|
+
/**
|
|
10116
|
+
* Default keyboard adapter. Listens for `keydown` on the document; activation
|
|
10117
|
+
* keys start/drop drags, arrow keys nudge the drag point, Escape cancels.
|
|
10118
|
+
*
|
|
10119
|
+
* @example
|
|
10120
|
+
* ```ts
|
|
10121
|
+
* import { KeyboardAdapter, useDragDrop } from '@vuetify/v0'
|
|
10122
|
+
*
|
|
10123
|
+
* useDragDrop({ adapters: [new KeyboardAdapter({ activate: ['x'], step: 32 })] })
|
|
10124
|
+
* ```
|
|
10125
|
+
*/
|
|
10126
|
+
var KeyboardAdapter = class extends DragDropAdapter {
|
|
10127
|
+
activate;
|
|
10128
|
+
step;
|
|
10129
|
+
constructor(options = {}) {
|
|
10130
|
+
super();
|
|
10131
|
+
this.activate = options.activate ?? [" ", "Enter"];
|
|
10132
|
+
this.step = options.step ?? 16;
|
|
10133
|
+
}
|
|
10134
|
+
setup(context) {
|
|
10135
|
+
const logger = useLogger();
|
|
10136
|
+
if (this.cleanup) {
|
|
10137
|
+
logger.warn("KeyboardAdapter setup called twice; previous registration will be replaced");
|
|
10138
|
+
this.dispose();
|
|
10139
|
+
}
|
|
10140
|
+
if (!IN_BROWSER) return;
|
|
10141
|
+
const onKeyDown = (event) => {
|
|
10142
|
+
const focused = document.activeElement;
|
|
10143
|
+
if (event.ctrlKey || event.metaKey || event.altKey || event.shiftKey) return;
|
|
10144
|
+
if (isEditable(focused)) return;
|
|
10145
|
+
const ticket = this.locate(focused, context);
|
|
10146
|
+
const isActive = !/* @__PURE__ */ isNull(context.active.value);
|
|
10147
|
+
if (this.activate.includes(event.key)) {
|
|
10148
|
+
if (isActive) {
|
|
10149
|
+
event.preventDefault();
|
|
10150
|
+
context.emit.drop();
|
|
10151
|
+
} else if (ticket) {
|
|
10152
|
+
const el = ticket.el.value;
|
|
10153
|
+
if (!el) {
|
|
10154
|
+
logger.warn("KeyboardAdapter: cannot start drag — element is not mounted");
|
|
10155
|
+
return;
|
|
10156
|
+
}
|
|
10157
|
+
event.preventDefault();
|
|
10158
|
+
const rect = el.getBoundingClientRect();
|
|
10159
|
+
context.emit.start(ticket, {
|
|
10160
|
+
x: rect.left + rect.width / 2,
|
|
10161
|
+
y: rect.top + rect.height / 2
|
|
10162
|
+
}, "keyboard");
|
|
10163
|
+
}
|
|
10164
|
+
return;
|
|
10165
|
+
}
|
|
10166
|
+
if (event.key === "Escape" && isActive) {
|
|
10167
|
+
event.preventDefault();
|
|
10168
|
+
context.emit.cancel();
|
|
10169
|
+
return;
|
|
10170
|
+
}
|
|
10171
|
+
if (isActive && event.key.startsWith("Arrow")) {
|
|
10172
|
+
const active = context.active.value;
|
|
10173
|
+
if (/* @__PURE__ */ isNull(active)) return;
|
|
10174
|
+
const current = active.current;
|
|
10175
|
+
let point = null;
|
|
10176
|
+
switch (event.key) {
|
|
10177
|
+
case "ArrowUp":
|
|
10178
|
+
point = {
|
|
10179
|
+
x: current.x,
|
|
10180
|
+
y: current.y - this.step
|
|
10181
|
+
};
|
|
10182
|
+
break;
|
|
10183
|
+
case "ArrowDown":
|
|
10184
|
+
point = {
|
|
10185
|
+
x: current.x,
|
|
10186
|
+
y: current.y + this.step
|
|
10187
|
+
};
|
|
10188
|
+
break;
|
|
10189
|
+
case "ArrowLeft":
|
|
10190
|
+
point = {
|
|
10191
|
+
x: current.x - this.step,
|
|
10192
|
+
y: current.y
|
|
10193
|
+
};
|
|
10194
|
+
break;
|
|
10195
|
+
case "ArrowRight":
|
|
10196
|
+
point = {
|
|
10197
|
+
x: current.x + this.step,
|
|
10198
|
+
y: current.y
|
|
10199
|
+
};
|
|
10200
|
+
break;
|
|
10201
|
+
}
|
|
10202
|
+
if (point) {
|
|
10203
|
+
event.preventDefault();
|
|
10204
|
+
context.emit.move(point);
|
|
10205
|
+
}
|
|
10206
|
+
}
|
|
10207
|
+
};
|
|
10208
|
+
const stop = useEventListener(document, "keydown", onKeyDown);
|
|
10209
|
+
this.cleanup = () => stop();
|
|
10210
|
+
}
|
|
10211
|
+
};
|
|
10212
|
+
//#endregion
|
|
10213
|
+
//#region src/composables/useDragDrop/index.ts
|
|
10214
|
+
/**
|
|
10215
|
+
* @module useDragDrop
|
|
10216
|
+
*
|
|
10217
|
+
* @see https://0.vuetifyjs.com/composables/system/use-drag-drop
|
|
10218
|
+
*
|
|
10219
|
+
* @remarks
|
|
10220
|
+
* Headless drag-and-drop primitive. Owns two registries (draggables and zones)
|
|
10221
|
+
* plus the active-drag state. Pointer and keyboard adapters ship by default;
|
|
10222
|
+
* lifecycle hooks and a plugin array provide extension points.
|
|
10223
|
+
*
|
|
10224
|
+
* @example
|
|
10225
|
+
* ```ts
|
|
10226
|
+
* import { useDragDrop } from '@vuetify/v0'
|
|
10227
|
+
*
|
|
10228
|
+
* const dnd = useDragDrop()
|
|
10229
|
+
* ```
|
|
10230
|
+
*/
|
|
10231
|
+
/**
|
|
10232
|
+
* Pure math for resolving where in an oriented zone a pointer would drop.
|
|
10233
|
+
* Internal — consumers rely on the `position.index` / `position.indicator`
|
|
10234
|
+
* fields delivered to `onDrop`.
|
|
10235
|
+
*/
|
|
10236
|
+
function resolveDropPosition(point, rects, orientation) {
|
|
10237
|
+
if (rects.length === 0) return null;
|
|
10238
|
+
const axis = orientation === "vertical" ? "y" : "x";
|
|
10239
|
+
const start = orientation === "vertical" ? "top" : "left";
|
|
10240
|
+
const end = orientation === "vertical" ? "bottom" : "right";
|
|
10241
|
+
const coord = point[axis];
|
|
10242
|
+
if (coord < rects[0][start]) return {
|
|
10243
|
+
index: 0,
|
|
10244
|
+
edge: "before",
|
|
10245
|
+
rect: rects[0]
|
|
10246
|
+
};
|
|
10247
|
+
const last = rects.at(-1);
|
|
10248
|
+
if (coord > last[end]) return {
|
|
10249
|
+
index: rects.length,
|
|
10250
|
+
edge: "after",
|
|
10251
|
+
rect: last
|
|
10252
|
+
};
|
|
10253
|
+
for (const [index, rect] of rects.entries()) if (coord >= rect[start] && coord <= rect[end]) {
|
|
10254
|
+
if (coord < rect[start] + (rect[end] - rect[start]) / 2) return {
|
|
10255
|
+
index,
|
|
10256
|
+
edge: "before",
|
|
10257
|
+
rect
|
|
10258
|
+
};
|
|
10259
|
+
return {
|
|
10260
|
+
index: index + 1,
|
|
10261
|
+
edge: "after",
|
|
10262
|
+
rect
|
|
10263
|
+
};
|
|
10264
|
+
}
|
|
10265
|
+
for (let index = 0; index < rects.length - 1; index++) {
|
|
10266
|
+
const a = rects[index];
|
|
10267
|
+
const b = rects[index + 1];
|
|
10268
|
+
if (coord > a[end] && coord < b[start]) {
|
|
10269
|
+
if (coord <= (a[end] + b[start]) / 2) return {
|
|
10270
|
+
index: index + 1,
|
|
10271
|
+
edge: "after",
|
|
10272
|
+
rect: a
|
|
10273
|
+
};
|
|
10274
|
+
return {
|
|
10275
|
+
index: index + 1,
|
|
10276
|
+
edge: "before",
|
|
10277
|
+
rect: b
|
|
10278
|
+
};
|
|
10279
|
+
}
|
|
10280
|
+
}
|
|
10281
|
+
return {
|
|
10282
|
+
index: rects.length,
|
|
10283
|
+
edge: "after",
|
|
10284
|
+
rect: last
|
|
10285
|
+
};
|
|
10286
|
+
}
|
|
10287
|
+
/**
|
|
10288
|
+
* Create a headless drag-and-drop context.
|
|
10289
|
+
*
|
|
10290
|
+
* @param options - Adapters, plugins, and lifecycle hooks. All optional.
|
|
10291
|
+
* @returns A `DragDropContext<Z>` exposing `draggables` / `zones` registries,
|
|
10292
|
+
* the `active` drag, the `isDragging` boolean, and a programmatic `cancel()`.
|
|
10293
|
+
*
|
|
10294
|
+
* @see https://0.vuetifyjs.com/composables/system/use-drag-drop
|
|
10295
|
+
*
|
|
10296
|
+
* @example
|
|
10297
|
+
* ```ts
|
|
10298
|
+
* import { useDragDrop } from '@vuetify/v0'
|
|
10299
|
+
* import { useTemplateRef } from 'vue'
|
|
10300
|
+
*
|
|
10301
|
+
* const dnd = useDragDrop<{ type: 'card', value: string }>()
|
|
10302
|
+
*
|
|
10303
|
+
* const draggable = useTemplateRef<HTMLElement>('draggable')
|
|
10304
|
+
* const dropzone = useTemplateRef<HTMLElement>('dropzone')
|
|
10305
|
+
*
|
|
10306
|
+
* dnd.draggables.register({ el: draggable, type: 'card', value: 'card-1' })
|
|
10307
|
+
* dnd.zones.register({
|
|
10308
|
+
* el: dropzone,
|
|
10309
|
+
* accept: ['card'],
|
|
10310
|
+
* onDrop: (drag, position) => console.log(drag.value, position.index),
|
|
10311
|
+
* })
|
|
10312
|
+
* ```
|
|
10313
|
+
*/
|
|
10314
|
+
function useDragDrop(options = {}) {
|
|
10315
|
+
const { plugins = [] } = options;
|
|
10316
|
+
const logger = useLogger();
|
|
10317
|
+
const _draggables = createRegistry({ events: true });
|
|
10318
|
+
const _zones = createRegistry({ events: true });
|
|
10319
|
+
const active = shallowRef(null);
|
|
10320
|
+
const isDragging = toRef(() => !/* @__PURE__ */ isNull(active.value));
|
|
10321
|
+
const scopes = /* @__PURE__ */ new Map();
|
|
10322
|
+
const nodes = /* @__PURE__ */ new Map();
|
|
10323
|
+
function next(fn, ...args) {
|
|
10324
|
+
if (/* @__PURE__ */ isUndefined(fn)) return;
|
|
10325
|
+
try {
|
|
10326
|
+
fn(...args);
|
|
10327
|
+
} catch (error) {
|
|
10328
|
+
logger.error("useDragDrop hook threw", error);
|
|
10329
|
+
}
|
|
10330
|
+
}
|
|
10331
|
+
function safeAccept(accept, drag) {
|
|
10332
|
+
try {
|
|
10333
|
+
if (/* @__PURE__ */ isNull(drag)) return false;
|
|
10334
|
+
if (/* @__PURE__ */ isUndefined(accept)) return true;
|
|
10335
|
+
if (/* @__PURE__ */ isArray(accept)) return accept.includes(drag.type);
|
|
10336
|
+
const result = accept(drag);
|
|
10337
|
+
if (/* @__PURE__ */ isThenable(result)) {
|
|
10338
|
+
logger.warn("useDragDrop accept predicate returned a thenable; async predicates are not supported — treating as reject");
|
|
10339
|
+
return false;
|
|
10340
|
+
}
|
|
10341
|
+
return Boolean(result);
|
|
10342
|
+
} catch (error) {
|
|
10343
|
+
logger.error("useDragDrop accept predicate threw; treating as reject", error);
|
|
10344
|
+
return false;
|
|
10345
|
+
}
|
|
10346
|
+
}
|
|
10347
|
+
const draggables = {
|
|
10348
|
+
..._draggables,
|
|
10349
|
+
register(registration) {
|
|
10350
|
+
const id = registration.id ?? /* @__PURE__ */ useId();
|
|
10351
|
+
const el = toRef(() => toValue(registration.el));
|
|
10352
|
+
const dragging = toRef(() => active.value?.id === id);
|
|
10353
|
+
const input = {
|
|
10354
|
+
...registration,
|
|
10355
|
+
id,
|
|
10356
|
+
el,
|
|
10357
|
+
isDragging: dragging
|
|
10358
|
+
};
|
|
10359
|
+
return _draggables.register(input);
|
|
10360
|
+
}
|
|
10361
|
+
};
|
|
10362
|
+
const zones = {
|
|
10363
|
+
..._zones,
|
|
10364
|
+
register(registration) {
|
|
10365
|
+
const id = registration.id ?? /* @__PURE__ */ useId();
|
|
10366
|
+
const el = toRef(() => toValue(registration.el));
|
|
10367
|
+
const isOver = toRef(() => active.value?.over === id);
|
|
10368
|
+
const willAccept = toRef(() => safeAccept(registration.accept, active.value));
|
|
10369
|
+
const rects = shallowRef([]);
|
|
10370
|
+
function refresh() {
|
|
10371
|
+
const zoneEl = el.value;
|
|
10372
|
+
rects.value = zoneEl ? Array.from(zoneEl.children).map((child) => child.getBoundingClientRect()) : [];
|
|
10373
|
+
}
|
|
10374
|
+
const scope = effectScope();
|
|
10375
|
+
scopes.set(id, scope);
|
|
10376
|
+
scope.run(() => {
|
|
10377
|
+
if (registration.orientation) {
|
|
10378
|
+
watch(el, refresh, {
|
|
10379
|
+
immediate: true,
|
|
10380
|
+
flush: "post"
|
|
10381
|
+
});
|
|
10382
|
+
useResizeObserver(el, refresh);
|
|
10383
|
+
useMutationObserver(el, refresh, { childList: true });
|
|
10384
|
+
watch(() => active.value?.id, (id) => {
|
|
10385
|
+
if (id) refresh();
|
|
10386
|
+
});
|
|
10387
|
+
}
|
|
10388
|
+
watch(el, (current) => {
|
|
10389
|
+
if (/* @__PURE__ */ isNull(current)) return;
|
|
10390
|
+
nodes.set(current, id);
|
|
10391
|
+
onWatcherCleanup(() => nodes.delete(current));
|
|
10392
|
+
}, { immediate: true });
|
|
10393
|
+
});
|
|
10394
|
+
const indicator = computed(() => {
|
|
10395
|
+
if (!registration.orientation || !isOver.value || !active.value) return null;
|
|
10396
|
+
return resolveDropPosition(active.value.current, rects.value, registration.orientation);
|
|
10397
|
+
});
|
|
10398
|
+
const input = {
|
|
10399
|
+
...registration,
|
|
10400
|
+
id,
|
|
10401
|
+
el,
|
|
10402
|
+
isOver,
|
|
10403
|
+
willAccept,
|
|
10404
|
+
indicator
|
|
10405
|
+
};
|
|
10406
|
+
return _zones.register(input);
|
|
10407
|
+
}
|
|
10408
|
+
};
|
|
10409
|
+
function at(point) {
|
|
10410
|
+
if (!IN_BROWSER) return null;
|
|
10411
|
+
let element = document.elementFromPoint(point.x, point.y);
|
|
10412
|
+
while (element) {
|
|
10413
|
+
const id = nodes.get(element);
|
|
10414
|
+
if (!/* @__PURE__ */ isUndefined(id)) {
|
|
10415
|
+
const zone = _zones.get(id);
|
|
10416
|
+
if (zone && !toValue(zone.disabled)) return id;
|
|
10417
|
+
}
|
|
10418
|
+
element = element.parentElement;
|
|
10419
|
+
}
|
|
10420
|
+
return null;
|
|
10421
|
+
}
|
|
10422
|
+
function position(zoneId, drag) {
|
|
10423
|
+
const zone = _zones.get(zoneId);
|
|
10424
|
+
const out = { pointer: drag.current };
|
|
10425
|
+
if (zone?.orientation) {
|
|
10426
|
+
const resolved = zone.indicator?.value ?? null;
|
|
10427
|
+
if (resolved) {
|
|
10428
|
+
out.index = resolved.index;
|
|
10429
|
+
out.indicator = resolved;
|
|
10430
|
+
} else out.index = 0;
|
|
10431
|
+
}
|
|
10432
|
+
return out;
|
|
10433
|
+
}
|
|
10434
|
+
function bail(drag, reason = "cancel") {
|
|
10435
|
+
active.value = null;
|
|
10436
|
+
if (!/* @__PURE__ */ isNull(drag.over)) next(_zones.get(drag.over)?.onLeave, drag);
|
|
10437
|
+
next(_draggables.get(drag.id)?.onCancel, drag, reason);
|
|
10438
|
+
next(options.onCancel, drag, reason);
|
|
10439
|
+
}
|
|
10440
|
+
function onStart(source, origin, via) {
|
|
10441
|
+
if (toValue(_draggables.get(source.id)?.disabled)) return;
|
|
10442
|
+
const draft = {
|
|
10443
|
+
id: source.id,
|
|
10444
|
+
type: source.type,
|
|
10445
|
+
value: source.value,
|
|
10446
|
+
origin,
|
|
10447
|
+
current: origin,
|
|
10448
|
+
delta: {
|
|
10449
|
+
x: 0,
|
|
10450
|
+
y: 0
|
|
10451
|
+
},
|
|
10452
|
+
over: null,
|
|
10453
|
+
willAccept: false,
|
|
10454
|
+
via
|
|
10455
|
+
};
|
|
10456
|
+
try {
|
|
10457
|
+
if (_draggables.get(source.id)?.onBeforeStart?.(draft) === false) return;
|
|
10458
|
+
} catch (error) {
|
|
10459
|
+
logger.error("useDragDrop onBeforeStart threw; treating as veto", error);
|
|
10460
|
+
return;
|
|
10461
|
+
}
|
|
10462
|
+
try {
|
|
10463
|
+
if (options.onBeforeStart?.(draft) === false) return;
|
|
10464
|
+
} catch (error) {
|
|
10465
|
+
logger.error("useDragDrop onBeforeStart threw; treating as veto", error);
|
|
10466
|
+
return;
|
|
10467
|
+
}
|
|
10468
|
+
active.value = draft;
|
|
10469
|
+
}
|
|
10470
|
+
function onMove(point) {
|
|
10471
|
+
if (!active.value) return;
|
|
10472
|
+
const over = at(point);
|
|
10473
|
+
const draft = {
|
|
10474
|
+
...active.value,
|
|
10475
|
+
current: point,
|
|
10476
|
+
delta: {
|
|
10477
|
+
x: point.x - active.value.origin.x,
|
|
10478
|
+
y: point.y - active.value.origin.y
|
|
10479
|
+
},
|
|
10480
|
+
over,
|
|
10481
|
+
willAccept: false
|
|
10482
|
+
};
|
|
10483
|
+
draft.willAccept = !/* @__PURE__ */ isNull(over) && safeAccept(_zones.get(over)?.accept, draft);
|
|
10484
|
+
const previous = active.value.over;
|
|
10485
|
+
active.value = draft;
|
|
10486
|
+
if (previous !== over) {
|
|
10487
|
+
if (!/* @__PURE__ */ isNull(previous)) next(_zones.get(previous)?.onLeave, draft);
|
|
10488
|
+
if (!/* @__PURE__ */ isNull(over)) next(_zones.get(over)?.onEnter, draft);
|
|
10489
|
+
}
|
|
10490
|
+
next(_draggables.get(draft.id)?.onMove, draft);
|
|
10491
|
+
next(options.onMove, draft);
|
|
10492
|
+
}
|
|
10493
|
+
function onDrop() {
|
|
10494
|
+
if (!active.value) return;
|
|
10495
|
+
const drag = active.value;
|
|
10496
|
+
const zoneId = drag.over;
|
|
10497
|
+
if (/* @__PURE__ */ isNull(zoneId)) {
|
|
10498
|
+
bail(drag);
|
|
10499
|
+
return;
|
|
10500
|
+
}
|
|
10501
|
+
const dropAt = position(zoneId, drag);
|
|
10502
|
+
const zone = _zones.get(zoneId);
|
|
10503
|
+
function vetoed(fn, label) {
|
|
10504
|
+
if (!fn) return false;
|
|
10505
|
+
try {
|
|
10506
|
+
return fn(drag, dropAt) === false;
|
|
10507
|
+
} catch (error) {
|
|
10508
|
+
logger.error(`useDragDrop ${label} threw; treating as veto`, error);
|
|
10509
|
+
return true;
|
|
10510
|
+
}
|
|
10511
|
+
}
|
|
10512
|
+
if (vetoed(zone?.onBeforeDrop, "zone onBeforeDrop") || vetoed(options.onBeforeDrop, "options onBeforeDrop")) {
|
|
10513
|
+
bail(drag, "reject");
|
|
10514
|
+
return;
|
|
10515
|
+
}
|
|
10516
|
+
active.value = null;
|
|
10517
|
+
next(zone?.onDrop, drag, dropAt);
|
|
10518
|
+
next(options.onDrop, drag, dropAt);
|
|
10519
|
+
}
|
|
10520
|
+
function cancel() {
|
|
10521
|
+
if (!active.value) return;
|
|
10522
|
+
bail(active.value);
|
|
9389
10523
|
}
|
|
9390
|
-
const
|
|
9391
|
-
|
|
9392
|
-
|
|
9393
|
-
|
|
9394
|
-
|
|
9395
|
-
|
|
9396
|
-
|
|
9397
|
-
|
|
9398
|
-
|
|
9399
|
-
|
|
9400
|
-
|
|
9401
|
-
|
|
9402
|
-
|
|
9403
|
-
|
|
9404
|
-
|
|
9405
|
-
|
|
9406
|
-
|
|
10524
|
+
const context = {
|
|
10525
|
+
draggables,
|
|
10526
|
+
zones,
|
|
10527
|
+
active: shallowReadonly(active),
|
|
10528
|
+
isDragging,
|
|
10529
|
+
cancel
|
|
10530
|
+
};
|
|
10531
|
+
const disposers = [];
|
|
10532
|
+
const adapters = options.adapters ?? [new PointerAdapter(), new KeyboardAdapter()];
|
|
10533
|
+
const emit = {
|
|
10534
|
+
start: (source, origin, via) => onStart(source, origin, via),
|
|
10535
|
+
move: (point) => onMove(point),
|
|
10536
|
+
drop: () => onDrop(),
|
|
10537
|
+
cancel: () => cancel()
|
|
10538
|
+
};
|
|
10539
|
+
const adapterContext = {
|
|
10540
|
+
...context,
|
|
10541
|
+
emit
|
|
10542
|
+
};
|
|
10543
|
+
for (const adapter of adapters) try {
|
|
10544
|
+
adapter.setup(adapterContext);
|
|
10545
|
+
disposers.push(() => adapter.dispose());
|
|
10546
|
+
} catch (error) {
|
|
10547
|
+
logger.error("useDragDrop adapter setup threw; skipping adapter", error);
|
|
10548
|
+
try {
|
|
10549
|
+
adapter.dispose();
|
|
10550
|
+
} catch (disposeError) {
|
|
10551
|
+
logger.error("useDragDrop adapter dispose threw after setup failure", disposeError);
|
|
10552
|
+
}
|
|
9407
10553
|
}
|
|
9408
|
-
|
|
9409
|
-
const
|
|
9410
|
-
|
|
9411
|
-
|
|
9412
|
-
|
|
10554
|
+
for (const plugin of plugins) try {
|
|
10555
|
+
const dispose = plugin(context);
|
|
10556
|
+
if (/* @__PURE__ */ isFunction(dispose)) disposers.push(dispose);
|
|
10557
|
+
} catch (error) {
|
|
10558
|
+
logger.error("useDragDrop plugin install threw; skipping plugin", error);
|
|
9413
10559
|
}
|
|
10560
|
+
_draggables.on("unregister:ticket", (ticket) => {
|
|
10561
|
+
if (active.value?.id === ticket.id) cancel();
|
|
10562
|
+
});
|
|
10563
|
+
_zones.on("unregister:ticket", (ticket) => {
|
|
10564
|
+
const scope = scopes.get(ticket.id);
|
|
10565
|
+
if (scope) {
|
|
10566
|
+
scope.stop();
|
|
10567
|
+
scopes.delete(ticket.id);
|
|
10568
|
+
}
|
|
10569
|
+
if (active.value?.over === ticket.id) {
|
|
10570
|
+
next(ticket.onLeave, active.value);
|
|
10571
|
+
active.value = {
|
|
10572
|
+
...active.value,
|
|
10573
|
+
over: null,
|
|
10574
|
+
willAccept: false
|
|
10575
|
+
};
|
|
10576
|
+
}
|
|
10577
|
+
});
|
|
9414
10578
|
onScopeDispose(() => {
|
|
9415
|
-
|
|
9416
|
-
|
|
9417
|
-
|
|
10579
|
+
if (!/* @__PURE__ */ isNull(active.value)) cancel();
|
|
10580
|
+
for (const dispose of disposers.toReversed()) try {
|
|
10581
|
+
dispose();
|
|
10582
|
+
} catch (error) {
|
|
10583
|
+
logger.error("useDragDrop disposer threw", error);
|
|
10584
|
+
}
|
|
10585
|
+
for (const scope of scopes.values()) try {
|
|
10586
|
+
scope.stop();
|
|
10587
|
+
} catch (error) {
|
|
10588
|
+
logger.error("useDragDrop zone scope dispose threw", error);
|
|
10589
|
+
}
|
|
10590
|
+
scopes.clear();
|
|
10591
|
+
nodes.clear();
|
|
10592
|
+
try {
|
|
10593
|
+
_draggables.dispose();
|
|
10594
|
+
} catch (error) {
|
|
10595
|
+
logger.error("useDragDrop draggables dispose threw", error);
|
|
10596
|
+
}
|
|
10597
|
+
try {
|
|
10598
|
+
_zones.dispose();
|
|
10599
|
+
} catch (error) {
|
|
10600
|
+
logger.error("useDragDrop zones dispose threw", error);
|
|
10601
|
+
}
|
|
9418
10602
|
}, true);
|
|
9419
|
-
return
|
|
9420
|
-
start,
|
|
9421
|
-
stop,
|
|
9422
|
-
pause: timer.pause,
|
|
9423
|
-
resume: timer.resume,
|
|
9424
|
-
isActive: shallowReadonly(timer.isActive),
|
|
9425
|
-
isPaused: shallowReadonly(timer.isPaused),
|
|
9426
|
-
remaining: shallowReadonly(timer.remaining),
|
|
9427
|
-
isOpening: shallowReadonly(isOpening)
|
|
9428
|
-
};
|
|
10603
|
+
return context;
|
|
9429
10604
|
}
|
|
9430
10605
|
//#endregion
|
|
9431
|
-
//#region src/composables/useFeatures/adapters/
|
|
10606
|
+
//#region src/composables/useFeatures/adapters/adapter.ts
|
|
9432
10607
|
var FeaturesAdapter = class {};
|
|
9433
10608
|
//#endregion
|
|
9434
10609
|
//#region src/composables/useFeatures/index.ts
|
|
@@ -9811,9 +10986,11 @@ function useHotkey(keys, callback, options = {}, _platform) {
|
|
|
9811
10986
|
let isSequence = false;
|
|
9812
10987
|
let groupIndex = 0;
|
|
9813
10988
|
function isInputFocused() {
|
|
10989
|
+
/* v8 ignore next -- IN_BROWSER always true in happy-dom test env */
|
|
9814
10990
|
if (!IN_BROWSER) return false;
|
|
9815
10991
|
if (toValue(inputs)) return false;
|
|
9816
10992
|
const activeElement = document.activeElement;
|
|
10993
|
+
/* v8 ignore next -- defensive: document.activeElement is always set in happy-dom */
|
|
9817
10994
|
if (!activeElement) return false;
|
|
9818
10995
|
const role = activeElement.getAttribute("role");
|
|
9819
10996
|
if (role === "textbox" || role === "searchbox" || role === "combobox" || role === "spinbutton") return true;
|
|
@@ -9867,6 +11044,7 @@ function useHotkey(keys, callback, options = {}, _platform) {
|
|
|
9867
11044
|
const currentKeys = toValue(keys);
|
|
9868
11045
|
if (!currentKeys) return;
|
|
9869
11046
|
const groups = splitKeySequence(currentKeys.toLowerCase());
|
|
11047
|
+
/* v8 ignore next -- defensive: splitKeySequence rejects empty strings earlier */
|
|
9870
11048
|
if (groups.length === 0) return;
|
|
9871
11049
|
isSequence = groups.length > 1;
|
|
9872
11050
|
keyGroups = groups;
|
|
@@ -9919,6 +11097,7 @@ function isModifier(key) {
|
|
|
9919
11097
|
function parseKeyGroup(group) {
|
|
9920
11098
|
const { keys: parts } = splitKeyCombination(group.toLowerCase());
|
|
9921
11099
|
const modifiers = Object.fromEntries(MODIFIERS.map((m) => [m, false]));
|
|
11100
|
+
/* v8 ignore next 3 -- defensive: parseKeyGroup is not invoked with empty parts */
|
|
9922
11101
|
if (parts.length === 0) return {
|
|
9923
11102
|
modifiers,
|
|
9924
11103
|
actualKey: void 0
|
|
@@ -10144,11 +11323,13 @@ function useIntersectionObserver(target, callback, options = {}) {
|
|
|
10144
11323
|
observe: (obs, el) => obs.observe(el),
|
|
10145
11324
|
onEntry: (entries) => {
|
|
10146
11325
|
const latest = entries.at(-1);
|
|
11326
|
+
/* v8 ignore next -- defensive: IntersectionObserver always emits at least one entry */
|
|
10147
11327
|
if (latest) isIntersecting.value = latest.isIntersecting;
|
|
10148
11328
|
},
|
|
10149
11329
|
onPause: () => {
|
|
10150
11330
|
isIntersecting.value = false;
|
|
10151
11331
|
},
|
|
11332
|
+
/* v8 ignore next -- defensive nullish coalesce: entries always populated when shouldStop fires */
|
|
10152
11333
|
shouldStop: (entries) => entries.at(-1)?.isIntersecting ?? false,
|
|
10153
11334
|
immediate: options.immediate ? (el) => {
|
|
10154
11335
|
return [{
|
|
@@ -10198,6 +11379,7 @@ function useElementIntersection(target, options = {}) {
|
|
|
10198
11379
|
const intersectionRatio = shallowRef(0);
|
|
10199
11380
|
const { pause: _pause, resume, stop, isActive, isPaused } = useIntersectionObserver(target, (entries) => {
|
|
10200
11381
|
const entry = entries.at(-1);
|
|
11382
|
+
/* v8 ignore next 4 -- defensive: IntersectionObserver always emits at least one entry */
|
|
10201
11383
|
if (entry) {
|
|
10202
11384
|
isIntersecting.value = entry.isIntersecting;
|
|
10203
11385
|
intersectionRatio.value = entry.intersectionRatio;
|
|
@@ -10447,131 +11629,6 @@ function usePrefersContrast() {
|
|
|
10447
11629
|
return useMediaQuery("(prefers-contrast: more)");
|
|
10448
11630
|
}
|
|
10449
11631
|
//#endregion
|
|
10450
|
-
//#region src/composables/useMutationObserver/index.ts
|
|
10451
|
-
/**
|
|
10452
|
-
* @module useMutationObserver
|
|
10453
|
-
*
|
|
10454
|
-
* @see https://0.vuetifyjs.com/composables/system/use-mutation-observer
|
|
10455
|
-
*
|
|
10456
|
-
* @remarks
|
|
10457
|
-
* MutationObserver composable with lifecycle management.
|
|
10458
|
-
*
|
|
10459
|
-
* Key features:
|
|
10460
|
-
* - MutationObserver API wrapper
|
|
10461
|
-
* - `isActive` reactive flag
|
|
10462
|
-
* - `once` option for single-fire observation
|
|
10463
|
-
* - Pause/resume/stop functionality
|
|
10464
|
-
* - Automatic cleanup on unmount
|
|
10465
|
-
* - SSR-safe (checks SUPPORTS_MUTATION_OBSERVER)
|
|
10466
|
-
* - Hydration-aware
|
|
10467
|
-
* - Configurable observation options (childList, attributes, characterData, etc.)
|
|
10468
|
-
*
|
|
10469
|
-
* Perfect for detecting DOM changes and responding to mutations.
|
|
10470
|
-
*
|
|
10471
|
-
* @example
|
|
10472
|
-
* ```ts
|
|
10473
|
-
* import { useTemplateRef } from 'vue'
|
|
10474
|
-
* import { useMutationObserver } from '@vuetify/v0'
|
|
10475
|
-
*
|
|
10476
|
-
* const target = useTemplateRef('target')
|
|
10477
|
-
* useMutationObserver(target, records => {
|
|
10478
|
-
* console.log(records)
|
|
10479
|
-
* }, { childList: true })
|
|
10480
|
-
* ```
|
|
10481
|
-
*/
|
|
10482
|
-
/**
|
|
10483
|
-
* A composable that uses the Mutation Observer API to detect changes in the DOM.
|
|
10484
|
-
*
|
|
10485
|
-
* @param target The element to observe.
|
|
10486
|
-
* @param callback The callback to execute when a mutation is observed.
|
|
10487
|
-
* @param options The options for the Mutation Observer.
|
|
10488
|
-
* @returns An object with methods to control the observer.
|
|
10489
|
-
*
|
|
10490
|
-
* @see https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver
|
|
10491
|
-
* @see https://0.vuetifyjs.com/composables/system/use-mutation-observer
|
|
10492
|
-
*
|
|
10493
|
-
* @example
|
|
10494
|
-
* ```ts
|
|
10495
|
-
* import { ref } from 'vue'
|
|
10496
|
-
* import { useMutationObserver } from '@vuetify/v0'
|
|
10497
|
-
*
|
|
10498
|
-
* const container = ref<HTMLElement>()
|
|
10499
|
-
*
|
|
10500
|
-
* const { pause, resume, isPaused } = useMutationObserver(
|
|
10501
|
-
* container,
|
|
10502
|
-
* (mutations) => {
|
|
10503
|
-
* mutations.forEach((mutation) => {
|
|
10504
|
-
* if (mutation.type === 'childList') {
|
|
10505
|
-
* console.log('Children changed:', mutation.addedNodes, mutation.removedNodes)
|
|
10506
|
-
* } else if (mutation.type === 'attributes') {
|
|
10507
|
-
* console.log('Attribute changed:', mutation.attributeName)
|
|
10508
|
-
* }
|
|
10509
|
-
* })
|
|
10510
|
-
* },
|
|
10511
|
-
* {
|
|
10512
|
-
* childList: true,
|
|
10513
|
-
* attributes: true,
|
|
10514
|
-
* subtree: true
|
|
10515
|
-
* }
|
|
10516
|
-
* )
|
|
10517
|
-
*
|
|
10518
|
-
* // Pause observation
|
|
10519
|
-
* pause()
|
|
10520
|
-
*
|
|
10521
|
-
* // Resume observation
|
|
10522
|
-
* resume()
|
|
10523
|
-
* ```
|
|
10524
|
-
*/
|
|
10525
|
-
function useMutationObserver(target, callback, options = {}) {
|
|
10526
|
-
const observerOptions = {
|
|
10527
|
-
childList: options.childList ?? true,
|
|
10528
|
-
attributes: options.attributes ?? false,
|
|
10529
|
-
characterData: options.characterData ?? false,
|
|
10530
|
-
subtree: options.subtree ?? false,
|
|
10531
|
-
attributeOldValue: options.attributeOldValue ?? false,
|
|
10532
|
-
characterDataOldValue: options.characterDataOldValue ?? false,
|
|
10533
|
-
attributeFilter: options.attributeFilter
|
|
10534
|
-
};
|
|
10535
|
-
return createObserver(target, callback, {
|
|
10536
|
-
supports: SUPPORTS_MUTATION_OBSERVER,
|
|
10537
|
-
once: options.once,
|
|
10538
|
-
create: (cb) => new MutationObserver((mutations) => {
|
|
10539
|
-
cb(mutations.map((m) => ({
|
|
10540
|
-
type: m.type,
|
|
10541
|
-
target: m.target,
|
|
10542
|
-
addedNodes: m.addedNodes,
|
|
10543
|
-
removedNodes: m.removedNodes,
|
|
10544
|
-
previousSibling: m.previousSibling,
|
|
10545
|
-
nextSibling: m.nextSibling,
|
|
10546
|
-
attributeName: m.attributeName,
|
|
10547
|
-
attributeNamespace: m.attributeNamespace,
|
|
10548
|
-
oldValue: m.oldValue
|
|
10549
|
-
})));
|
|
10550
|
-
}),
|
|
10551
|
-
observe: (obs, el) => obs.observe(el, observerOptions),
|
|
10552
|
-
immediate: options.immediate ? (el) => {
|
|
10553
|
-
const emptyNodeList = {
|
|
10554
|
-
length: 0,
|
|
10555
|
-
item: () => null,
|
|
10556
|
-
forEach: () => {},
|
|
10557
|
-
*[Symbol.iterator]() {}
|
|
10558
|
-
};
|
|
10559
|
-
return [{
|
|
10560
|
-
type: "childList",
|
|
10561
|
-
target: el,
|
|
10562
|
-
addedNodes: emptyNodeList,
|
|
10563
|
-
removedNodes: emptyNodeList,
|
|
10564
|
-
previousSibling: null,
|
|
10565
|
-
nextSibling: null,
|
|
10566
|
-
attributeName: null,
|
|
10567
|
-
attributeNamespace: null,
|
|
10568
|
-
oldValue: null
|
|
10569
|
-
}];
|
|
10570
|
-
} : void 0,
|
|
10571
|
-
onceIncludesImmediate: true
|
|
10572
|
-
});
|
|
10573
|
-
}
|
|
10574
|
-
//#endregion
|
|
10575
11632
|
//#region src/composables/useNotifications/index.ts
|
|
10576
11633
|
/**
|
|
10577
11634
|
* @module useNotifications
|
|
@@ -11100,10 +12157,10 @@ const [createNotificationsContext, createNotificationsPlugin, useNotifications]
|
|
|
11100
12157
|
});
|
|
11101
12158
|
//#endregion
|
|
11102
12159
|
//#region src/composables/usePermissions/adapters/adapter.ts
|
|
11103
|
-
var
|
|
12160
|
+
var PermissionsAdapter = class {};
|
|
11104
12161
|
//#endregion
|
|
11105
12162
|
//#region src/composables/usePermissions/adapters/v0.ts
|
|
11106
|
-
var
|
|
12163
|
+
var V0PermissionsAdapter = class extends PermissionsAdapter {
|
|
11107
12164
|
constructor() {
|
|
11108
12165
|
super();
|
|
11109
12166
|
}
|
|
@@ -11165,7 +12222,7 @@ var Vuetify0PermissionAdapter = class extends PermissionAdapter {
|
|
|
11165
12222
|
* ```
|
|
11166
12223
|
*/
|
|
11167
12224
|
function createPermissions(_options = {}) {
|
|
11168
|
-
const { adapter = new
|
|
12225
|
+
const { adapter = new V0PermissionsAdapter(), permissions = {}, ...options } = _options;
|
|
11169
12226
|
const record = {};
|
|
11170
12227
|
for (const role in permissions) {
|
|
11171
12228
|
if (!record[role]) record[role] = {};
|
|
@@ -11627,8 +12684,11 @@ function useRovingFocus(items, options = {}) {
|
|
|
11627
12684
|
};
|
|
11628
12685
|
}
|
|
11629
12686
|
//#endregion
|
|
12687
|
+
//#region src/composables/useRtl/adapters/adapter.ts
|
|
12688
|
+
var RtlAdapter = class {};
|
|
12689
|
+
//#endregion
|
|
11630
12690
|
//#region src/composables/useRtl/adapters/v0.ts
|
|
11631
|
-
var
|
|
12691
|
+
var V0RtlAdapter = class extends RtlAdapter {
|
|
11632
12692
|
setup(app, context, target) {
|
|
11633
12693
|
if (IN_BROWSER) {
|
|
11634
12694
|
if (/* @__PURE__ */ isNull(target)) return;
|
|
@@ -11696,7 +12756,7 @@ function createRtlFallback() {
|
|
|
11696
12756
|
}
|
|
11697
12757
|
const [createRtlContext, createRtlPlugin, useRtl] = createPluginContext("v0:rtl", (options) => createRtl(options), {
|
|
11698
12758
|
fallback: () => createRtlFallback(),
|
|
11699
|
-
setup: (context, app, { adapter = new
|
|
12759
|
+
setup: (context, app, { adapter = new V0RtlAdapter(), target }) => {
|
|
11700
12760
|
adapter.setup(app, context, target);
|
|
11701
12761
|
},
|
|
11702
12762
|
persist: (ctx) => ctx.isRtl.value,
|
|
@@ -11935,13 +12995,23 @@ function useStack(namespace = "v0:stack") {
|
|
|
11935
12995
|
}
|
|
11936
12996
|
}
|
|
11937
12997
|
//#endregion
|
|
12998
|
+
//#region src/composables/useStorage/adapters/adapter.ts
|
|
12999
|
+
var StorageAdapter = class {
|
|
13000
|
+
get length() {
|
|
13001
|
+
return 0;
|
|
13002
|
+
}
|
|
13003
|
+
key(_index) {
|
|
13004
|
+
return null;
|
|
13005
|
+
}
|
|
13006
|
+
};
|
|
13007
|
+
//#endregion
|
|
11938
13008
|
//#region src/composables/useStorage/adapters/memory.ts
|
|
11939
13009
|
/**
|
|
11940
|
-
* In-memory storage adapter that
|
|
13010
|
+
* In-memory storage adapter that extends the StorageAdapter abstract class.
|
|
11941
13011
|
* This adapter provides temporary storage that persists only for the current
|
|
11942
13012
|
* session and is useful for testing or when persistent storage is not available.
|
|
11943
13013
|
*/
|
|
11944
|
-
var
|
|
13014
|
+
var MemoryStorageAdapter = class extends StorageAdapter {
|
|
11945
13015
|
store = /* @__PURE__ */ new Map();
|
|
11946
13016
|
get length() {
|
|
11947
13017
|
return this.store.size;
|
|
@@ -12013,7 +13083,7 @@ var MemoryAdapter = class {
|
|
|
12013
13083
|
* ```
|
|
12014
13084
|
*/
|
|
12015
13085
|
function createStorage(options = {}) {
|
|
12016
|
-
const { adapter = IN_BROWSER ? window.localStorage : new
|
|
13086
|
+
const { adapter = IN_BROWSER ? window.localStorage : new MemoryStorageAdapter(), prefix = "v0:", serializer = {
|
|
12017
13087
|
read: JSON.parse,
|
|
12018
13088
|
write: JSON.stringify
|
|
12019
13089
|
}, ttl } = options;
|
|
@@ -12028,9 +13098,9 @@ function createStorage(options = {}) {
|
|
|
12028
13098
|
if (/* @__PURE__ */ isNullOrUndefined(raw)) return void 0;
|
|
12029
13099
|
try {
|
|
12030
13100
|
const parsed = serializer.read(raw);
|
|
12031
|
-
if (
|
|
13101
|
+
if (/* @__PURE__ */ isObject(parsed) && "__v0" in parsed && "__v" in parsed) {
|
|
12032
13102
|
const envelope = parsed;
|
|
12033
|
-
if (Date.now() - envelope.__t > ttl) {
|
|
13103
|
+
if (ttl && Date.now() - envelope.__t > ttl) {
|
|
12034
13104
|
adapter?.removeItem(prefixedKey);
|
|
12035
13105
|
return;
|
|
12036
13106
|
}
|
|
@@ -12110,7 +13180,7 @@ function createStorage(options = {}) {
|
|
|
12110
13180
|
};
|
|
12111
13181
|
}
|
|
12112
13182
|
function createStorageFallback() {
|
|
12113
|
-
return createStorage({ adapter: new
|
|
13183
|
+
return createStorage({ adapter: new MemoryStorageAdapter() });
|
|
12114
13184
|
}
|
|
12115
13185
|
const [createStorageContext, createStoragePlugin, useStorage] = createPluginContext("v0:storage", (options) => createStorage(options), { fallback: () => createStorageFallback() });
|
|
12116
13186
|
//#endregion
|
|
@@ -12750,6 +13820,7 @@ function useClickOutside(target, handler, options = {}) {
|
|
|
12750
13820
|
* Check if an element matches resolved ignore targets.
|
|
12751
13821
|
*/
|
|
12752
13822
|
function isIgnored(el, selectors, elements) {
|
|
13823
|
+
/* v8 ignore next -- defensive guard, callers always pass an Element */
|
|
12753
13824
|
if (!el) return false;
|
|
12754
13825
|
for (const selector of selectors) try {
|
|
12755
13826
|
if (el.matches(selector) || !/* @__PURE__ */ isNull(el.closest(selector))) return true;
|
|
@@ -12776,6 +13847,7 @@ function useClickOutside(target, handler, options = {}) {
|
|
|
12776
13847
|
const targets = getTargets();
|
|
12777
13848
|
if (targets.length === 0) return false;
|
|
12778
13849
|
return targets.every((el) => {
|
|
13850
|
+
/* v8 ignore next -- defensive: getTargets filters to Element-typed values */
|
|
12779
13851
|
if (/* @__PURE__ */ isNullOrUndefined(el) || !/* @__PURE__ */ isFunction(el.contains)) return false;
|
|
12780
13852
|
return el !== eventTarget && !el.contains(eventTarget);
|
|
12781
13853
|
});
|
|
@@ -12785,6 +13857,7 @@ function useClickOutside(target, handler, options = {}) {
|
|
|
12785
13857
|
*/
|
|
12786
13858
|
function isOutsideBounds(x, y) {
|
|
12787
13859
|
const targets = getTargets();
|
|
13860
|
+
/* v8 ignore next -- edge case: bounds check only invoked when targets exist */
|
|
12788
13861
|
if (targets.length === 0) return false;
|
|
12789
13862
|
return targets.every((el) => {
|
|
12790
13863
|
const { left, right, top, bottom } = el.getBoundingClientRect();
|
|
@@ -12795,6 +13868,7 @@ function useClickOutside(target, handler, options = {}) {
|
|
|
12795
13868
|
* Validate that the target is still in the DOM.
|
|
12796
13869
|
*/
|
|
12797
13870
|
function isValidTarget(eventTarget) {
|
|
13871
|
+
/* v8 ignore next -- type guard for non-Element targets (e.g., document, window) */
|
|
12798
13872
|
if (!/* @__PURE__ */ isElement(eventTarget)) return false;
|
|
12799
13873
|
if (!eventTarget.isConnected) return false;
|
|
12800
13874
|
return true;
|
|
@@ -12923,6 +13997,7 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
|
|
|
12923
13997
|
}, { immediate: true });
|
|
12924
13998
|
watch(context.isOpen, (isOpen) => {
|
|
12925
13999
|
const element = contentRef.value?.element;
|
|
14000
|
+
/* v8 ignore next -- defensive guard, element is always present after mount */
|
|
12926
14001
|
if (!element) return;
|
|
12927
14002
|
if (isOpen) element.showModal?.();
|
|
12928
14003
|
else element.close?.();
|
|
@@ -14001,7 +15076,7 @@ const _sfc_main$21 = /* @__PURE__ */ defineComponent({
|
|
|
14001
15076
|
const selection = createSelection({
|
|
14002
15077
|
disabled: toRef(() => __props.disabled),
|
|
14003
15078
|
multiple: toRef(() => __props.multiple),
|
|
14004
|
-
mandatory: __props.mandatory,
|
|
15079
|
+
mandatory: toRef(() => __props.mandatory),
|
|
14005
15080
|
events: true
|
|
14006
15081
|
});
|
|
14007
15082
|
useProxyModel(selection, model, { multiple: toRef(() => __props.multiple) });
|
|
@@ -14123,7 +15198,7 @@ const _sfc_main$25 = /* @__PURE__ */ defineComponent({
|
|
|
14123
15198
|
} catch {}
|
|
14124
15199
|
const ticket = group?.register({
|
|
14125
15200
|
value: __props.value,
|
|
14126
|
-
disabled: __props.disabled
|
|
15201
|
+
disabled: () => toValue(__props.disabled) ?? false
|
|
14127
15202
|
});
|
|
14128
15203
|
const isDisabled = toRef(() => group && ticket ? toValue(ticket.disabled) || toValue(group.disabled) : __props.disabled);
|
|
14129
15204
|
const isReadonly = toRef(() => __props.readonly);
|
|
@@ -14604,6 +15679,7 @@ const _sfc_main$33 = /* @__PURE__ */ defineComponent({
|
|
|
14604
15679
|
const scrollPaddingEnd = shallowRef();
|
|
14605
15680
|
function syncScrollPadding() {
|
|
14606
15681
|
const element = el.value;
|
|
15682
|
+
/* v8 ignore next 5 -- defensive: ResizeObserver only fires when element exists */
|
|
14607
15683
|
if (!element) {
|
|
14608
15684
|
scrollPaddingStart.value = void 0;
|
|
14609
15685
|
scrollPaddingEnd.value = void 0;
|
|
@@ -14612,17 +15688,20 @@ const _sfc_main$33 = /* @__PURE__ */ defineComponent({
|
|
|
14612
15688
|
const cs = getComputedStyle(element);
|
|
14613
15689
|
const start = isVertical.value ? cs.paddingBlockStart : cs.paddingInlineStart;
|
|
14614
15690
|
const end = isVertical.value ? cs.paddingBlockEnd : cs.paddingInlineEnd;
|
|
15691
|
+
/* v8 ignore next 2 -- happy-dom returns no computed padding so '0px' branch always taken */
|
|
14615
15692
|
scrollPaddingStart.value = start && start !== "0px" ? start : void 0;
|
|
14616
15693
|
scrollPaddingEnd.value = end && end !== "0px" ? end : void 0;
|
|
14617
15694
|
}
|
|
14618
15695
|
useResizeObserver(el, syncScrollPadding, { immediate: true });
|
|
14619
15696
|
watch(isVertical, syncScrollPadding);
|
|
14620
15697
|
const slideStep = toRef(() => {
|
|
15698
|
+
/* v8 ignore next -- defensive: getter only invoked after viewport mounts */
|
|
14621
15699
|
if (!el.value) return 0;
|
|
14622
15700
|
if ((isVertical.value ? height.value : width.value) === 0) return 0;
|
|
14623
15701
|
const first = toValue(carousel.seek("first")?.el);
|
|
14624
15702
|
const second = toValue(carousel.seek("first", 1)?.el);
|
|
14625
15703
|
if (!first) return 0;
|
|
15704
|
+
/* v8 ignore next 3 -- happy-dom returns 0 for offset* so layout-dependent branches never reach here */
|
|
14626
15705
|
if (!second) return isVertical.value ? first.offsetHeight : first.offsetWidth;
|
|
14627
15706
|
return isVertical.value ? second.offsetTop - first.offsetTop : second.offsetLeft - first.offsetLeft;
|
|
14628
15707
|
});
|
|
@@ -14633,11 +15712,13 @@ const _sfc_main$33 = /* @__PURE__ */ defineComponent({
|
|
|
14633
15712
|
return;
|
|
14634
15713
|
}
|
|
14635
15714
|
const viewport = el.value;
|
|
15715
|
+
/* v8 ignore next -- defensive: scrollend fires only on attached element with measured slideStep */
|
|
14636
15716
|
if (!viewport || slideStep.value === 0) return;
|
|
14637
15717
|
isDragging.value = false;
|
|
14638
15718
|
const scrollPos = isVertical.value ? viewport.scrollTop : viewport.scrollLeft;
|
|
14639
15719
|
const snapIndex = Math.round(scrollPos / slideStep.value);
|
|
14640
15720
|
const id = carousel.lookup(snapIndex);
|
|
15721
|
+
/* v8 ignore next 3 -- snapIndex resolution requires real layout, not exercised in happy-dom */
|
|
14641
15722
|
if (!/* @__PURE__ */ isUndefined(id) && id !== carousel.selectedItem.value?.id) carousel.select(id);
|
|
14642
15723
|
});
|
|
14643
15724
|
useEventListener(el, "scroll", () => {
|
|
@@ -14660,6 +15741,7 @@ const _sfc_main$33 = /* @__PURE__ */ defineComponent({
|
|
|
14660
15741
|
useEventListener(el, "mousedown", (e) => {
|
|
14661
15742
|
if (e.button !== 0) return;
|
|
14662
15743
|
const viewport = el.value;
|
|
15744
|
+
/* v8 ignore next -- defensive: mousedown only fires on attached viewport */
|
|
14663
15745
|
if (!viewport) return;
|
|
14664
15746
|
carousel.pause();
|
|
14665
15747
|
dragStart = isVertical.value ? e.clientY : e.clientX;
|
|
@@ -14669,6 +15751,7 @@ const _sfc_main$33 = /* @__PURE__ */ defineComponent({
|
|
|
14669
15751
|
useToggleScope(() => snapDisabled.value, () => {
|
|
14670
15752
|
useDocumentEventListener("mousemove", (e) => {
|
|
14671
15753
|
const viewport = el.value;
|
|
15754
|
+
/* v8 ignore next -- defensive: mousemove only fires within active drag scope */
|
|
14672
15755
|
if (!viewport) return;
|
|
14673
15756
|
e.preventDefault();
|
|
14674
15757
|
const delta = (isVertical.value ? e.clientY : e.clientX) - dragStart;
|
|
@@ -14707,6 +15790,7 @@ const _sfc_main$33 = /* @__PURE__ */ defineComponent({
|
|
|
14707
15790
|
}
|
|
14708
15791
|
watch(() => carousel.selectedIndex.value, (index) => {
|
|
14709
15792
|
const viewport = el.value;
|
|
15793
|
+
/* v8 ignore next -- defensive: viewport always present when watch fires after mount */
|
|
14710
15794
|
if (!viewport || slideStep.value === 0) return;
|
|
14711
15795
|
syncing.value = true;
|
|
14712
15796
|
const position = index * slideStep.value;
|
|
@@ -14724,6 +15808,7 @@ const _sfc_main$33 = /* @__PURE__ */ defineComponent({
|
|
|
14724
15808
|
[isVertical.value ? "overflow-x" : "overflow-y"]: "hidden",
|
|
14725
15809
|
"scroll-snap-type": snapDisabled.value ? "none" : `${isVertical.value ? "y" : "x"} mandatory`,
|
|
14726
15810
|
"scrollbar-width": "none",
|
|
15811
|
+
/* v8 ignore next 3 -- happy-dom never sets computed padding so spreads always evaluate to {} */
|
|
14727
15812
|
...scrollPaddingStart.value ? { [`scroll-padding-${axis}-start`]: scrollPaddingStart.value } : {},
|
|
14728
15813
|
...scrollPaddingEnd.value ? { [`scroll-padding-${axis}-end`]: scrollPaddingEnd.value } : {},
|
|
14729
15814
|
...snapDisabled.value ? { "user-select": "none" } : {}
|
|
@@ -14777,7 +15862,7 @@ const _sfc_main$27 = /* @__PURE__ */ defineComponent({
|
|
|
14777
15862
|
const ticket = carousel.register({
|
|
14778
15863
|
id: __props.id,
|
|
14779
15864
|
value: __props.value,
|
|
14780
|
-
disabled: __props.disabled,
|
|
15865
|
+
disabled: () => toValue(__props.disabled) ?? false,
|
|
14781
15866
|
el
|
|
14782
15867
|
});
|
|
14783
15868
|
const isDisabled = toRef(() => toValue(ticket.disabled) || toValue(carousel.disabled));
|
|
@@ -15429,8 +16514,8 @@ const _sfc_main$34 = /* @__PURE__ */ defineComponent({
|
|
|
15429
16514
|
const model = useModel(__props, "modelValue");
|
|
15430
16515
|
const group = createGroup({
|
|
15431
16516
|
disabled: toRef(() => __props.disabled),
|
|
15432
|
-
enroll: __props.enroll,
|
|
15433
|
-
mandatory: __props.mandatory,
|
|
16517
|
+
enroll: toRef(() => __props.enroll),
|
|
16518
|
+
mandatory: toRef(() => __props.mandatory),
|
|
15434
16519
|
events: true
|
|
15435
16520
|
});
|
|
15436
16521
|
useProxyModel(group, model, { multiple: true });
|
|
@@ -15501,8 +16586,8 @@ const _sfc_main$37 = /* @__PURE__ */ defineComponent({
|
|
|
15501
16586
|
const ticket = group?.register({
|
|
15502
16587
|
id: __props.id,
|
|
15503
16588
|
value: __props.value,
|
|
15504
|
-
disabled: __props.disabled,
|
|
15505
|
-
indeterminate: __props.indeterminate
|
|
16589
|
+
disabled: () => toValue(__props.disabled) ?? false,
|
|
16590
|
+
indeterminate: () => toValue(__props.indeterminate) ?? false
|
|
15506
16591
|
});
|
|
15507
16592
|
const isChecked = toRef(() => ticket ? toValue(ticket.isSelected) : model.value ?? false);
|
|
15508
16593
|
const isMixed = toRef(() => ticket ? toValue(ticket.isMixed) : toValue(__props.indeterminate) ?? false);
|
|
@@ -15582,15 +16667,15 @@ const _sfc_main$37 = /* @__PURE__ */ defineComponent({
|
|
|
15582
16667
|
"aria-invalid": __props.ariaInvalid || void 0,
|
|
15583
16668
|
"tabindex": isDisabled.value ? void 0 : 0,
|
|
15584
16669
|
"data-state": dataState.value,
|
|
15585
|
-
"data-disabled": isDisabled.value ? true : void 0
|
|
16670
|
+
"data-disabled": isDisabled.value ? true : void 0,
|
|
16671
|
+
"onClick": onClick,
|
|
16672
|
+
"onKeydown": onKeydown
|
|
15586
16673
|
}
|
|
15587
16674
|
}));
|
|
15588
16675
|
return (_ctx, _cache) => {
|
|
15589
16676
|
return openBlock(), createElementBlock(Fragment, null, [createVNode(unref(_sfc_main$9), mergeProps(mergeProps(unref(attrs), slotProps.value.attrs), {
|
|
15590
16677
|
as: __props.as,
|
|
15591
|
-
renderless: __props.renderless
|
|
15592
|
-
onClick,
|
|
15593
|
-
onKeydown
|
|
16678
|
+
renderless: __props.renderless
|
|
15594
16679
|
}), {
|
|
15595
16680
|
default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)))]),
|
|
15596
16681
|
_: 3
|
|
@@ -16261,10 +17346,10 @@ const _sfc_main$51 = /* @__PURE__ */ defineComponent({
|
|
|
16261
17346
|
id: __props.id,
|
|
16262
17347
|
name: __props.name,
|
|
16263
17348
|
form: __props.form,
|
|
16264
|
-
disabled: __props.disabled,
|
|
16265
|
-
multiple: __props.multiple,
|
|
16266
|
-
mandatory: __props.mandatory,
|
|
16267
|
-
strict: __props.strict,
|
|
17349
|
+
disabled: toRef(() => __props.disabled),
|
|
17350
|
+
multiple: toRef(() => __props.multiple),
|
|
17351
|
+
mandatory: toRef(() => __props.mandatory),
|
|
17352
|
+
strict: toRef(() => __props.strict),
|
|
16268
17353
|
error: () => __props.error,
|
|
16269
17354
|
errorMessages: () => __props.errorMessages,
|
|
16270
17355
|
adapter: __props.adapter,
|
|
@@ -16629,7 +17714,7 @@ const _sfc_main$50 = /* @__PURE__ */ defineComponent({
|
|
|
16629
17714
|
const ticket = context.selection.register({
|
|
16630
17715
|
id: __props.id,
|
|
16631
17716
|
value: __props.value,
|
|
16632
|
-
disabled: __props.disabled
|
|
17717
|
+
disabled: () => toValue(__props.disabled) ?? false
|
|
16633
17718
|
});
|
|
16634
17719
|
const elementId = `${context.id}-option-${ticket.id}`;
|
|
16635
17720
|
const isSelected = toRef(() => toValue(ticket.isSelected));
|
|
@@ -16657,14 +17742,12 @@ const _sfc_main$50 = /* @__PURE__ */ defineComponent({
|
|
|
16657
17742
|
"data-selected": isSelected.value || void 0,
|
|
16658
17743
|
"data-highlighted": isHighlighted.value ? "" : void 0,
|
|
16659
17744
|
"data-disabled": isDisabled.value || void 0,
|
|
16660
|
-
"data-id": String(ticket.id)
|
|
17745
|
+
"data-id": String(ticket.id),
|
|
17746
|
+
"onClick": onClick
|
|
16661
17747
|
}
|
|
16662
17748
|
}));
|
|
16663
17749
|
return (_ctx, _cache) => {
|
|
16664
|
-
return withDirectives((openBlock(), createBlock(unref(_sfc_main$9), mergeProps(slotProps.value.attrs, {
|
|
16665
|
-
as: __props.as,
|
|
16666
|
-
onClick
|
|
16667
|
-
}), {
|
|
17750
|
+
return withDirectives((openBlock(), createBlock(unref(_sfc_main$9), mergeProps(slotProps.value.attrs, { as: __props.as }), {
|
|
16668
17751
|
default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)))]),
|
|
16669
17752
|
_: 3
|
|
16670
17753
|
}, 16, ["as"])), [[vShow, isFiltered.value]]);
|
|
@@ -16996,6 +18079,7 @@ const _sfc_main$54 = /* @__PURE__ */ defineComponent({
|
|
|
16996
18079
|
}, { immediate: true });
|
|
16997
18080
|
watch(context.isOpen, (isOpen) => {
|
|
16998
18081
|
const element = contentRef.value?.element;
|
|
18082
|
+
/* v8 ignore next -- defensive guard, element is always present after mount */
|
|
16999
18083
|
if (!element) return;
|
|
17000
18084
|
if (isOpen) element.showModal?.();
|
|
17001
18085
|
else element.close?.();
|
|
@@ -17306,12 +18390,12 @@ const _sfc_main$61 = /* @__PURE__ */ defineComponent({
|
|
|
17306
18390
|
const isDisabled = toRef(() => __props.disabled);
|
|
17307
18391
|
const selection = createSelection({
|
|
17308
18392
|
disabled: isDisabled,
|
|
17309
|
-
enroll: __props.enroll,
|
|
17310
|
-
mandatory: __props.mandatory,
|
|
17311
|
-
multiple: __props.multiple,
|
|
18393
|
+
enroll: toRef(() => __props.enroll),
|
|
18394
|
+
mandatory: toRef(() => __props.mandatory),
|
|
18395
|
+
multiple: toRef(() => __props.multiple),
|
|
17312
18396
|
events: true
|
|
17313
18397
|
});
|
|
17314
|
-
useProxyModel(selection, model, { multiple: __props.multiple });
|
|
18398
|
+
useProxyModel(selection, model, { multiple: toRef(() => __props.multiple) });
|
|
17315
18399
|
const slotProps = toRef(() => ({
|
|
17316
18400
|
isDisabled,
|
|
17317
18401
|
select: selection.select,
|
|
@@ -17349,7 +18433,7 @@ const _sfc_main$63 = /* @__PURE__ */ defineComponent({
|
|
|
17349
18433
|
const ticket = selection.register({
|
|
17350
18434
|
id: __props.id,
|
|
17351
18435
|
value: __props.value,
|
|
17352
|
-
disabled: __props.disabled
|
|
18436
|
+
disabled: () => toValue(__props.disabled) ?? false
|
|
17353
18437
|
});
|
|
17354
18438
|
const headerId = toRef(() => `${ticket.id}-header`);
|
|
17355
18439
|
const contentId = toRef(() => `${ticket.id}-content`);
|
|
@@ -17755,8 +18839,8 @@ const _sfc_main$66 = /* @__PURE__ */ defineComponent({
|
|
|
17755
18839
|
const model = useModel(__props, "modelValue");
|
|
17756
18840
|
const group = createGroup({
|
|
17757
18841
|
disabled: toRef(() => __props.disabled),
|
|
17758
|
-
enroll: __props.enroll,
|
|
17759
|
-
mandatory: __props.mandatory,
|
|
18842
|
+
enroll: toRef(() => __props.enroll),
|
|
18843
|
+
mandatory: toRef(() => __props.mandatory),
|
|
17760
18844
|
events: true
|
|
17761
18845
|
});
|
|
17762
18846
|
useProxyModel(group, model, { multiple: true });
|
|
@@ -17797,8 +18881,8 @@ const _sfc_main$65 = /* @__PURE__ */ defineComponent({
|
|
|
17797
18881
|
const ticket = group.register({
|
|
17798
18882
|
id: __props.id,
|
|
17799
18883
|
value: __props.value,
|
|
17800
|
-
disabled: __props.disabled,
|
|
17801
|
-
indeterminate: __props.indeterminate
|
|
18884
|
+
disabled: () => toValue(__props.disabled) ?? false,
|
|
18885
|
+
indeterminate: () => toValue(__props.indeterminate) ?? false
|
|
17802
18886
|
});
|
|
17803
18887
|
const isDisabled = toRef(() => toValue(ticket.disabled) || toValue(group.disabled));
|
|
17804
18888
|
onBeforeUnmount(() => {
|
|
@@ -18939,6 +20023,8 @@ const _sfc_main$77 = /* @__PURE__ */ defineComponent({
|
|
|
18939
20023
|
delay.stop();
|
|
18940
20024
|
spin.stop();
|
|
18941
20025
|
}
|
|
20026
|
+
useDocumentEventListener("pointerup", stop);
|
|
20027
|
+
useDocumentEventListener("pointercancel", stop);
|
|
18942
20028
|
function onPointerdown(e) {
|
|
18943
20029
|
if (isDisabled.value) return;
|
|
18944
20030
|
if (e.button !== 0) return;
|
|
@@ -19078,6 +20164,8 @@ const _sfc_main$80 = /* @__PURE__ */ defineComponent({
|
|
|
19078
20164
|
delay.stop();
|
|
19079
20165
|
spin.stop();
|
|
19080
20166
|
}
|
|
20167
|
+
useDocumentEventListener("pointerup", stop);
|
|
20168
|
+
useDocumentEventListener("pointercancel", stop);
|
|
19081
20169
|
function onPointerdown(e) {
|
|
19082
20170
|
if (isDisabled.value) return;
|
|
19083
20171
|
if (e.button !== 0) return;
|
|
@@ -20735,7 +21823,9 @@ const _sfc_main$103 = /* @__PURE__ */ defineComponent({
|
|
|
20735
21823
|
return /* @__PURE__ */ isArray(model.value) ? model.value : [model.value];
|
|
20736
21824
|
},
|
|
20737
21825
|
set: (arr) => {
|
|
21826
|
+
/* v8 ignore next -- defensive guard for null/undefined model with empty registry */
|
|
20738
21827
|
if (/* @__PURE__ */ isNullOrUndefined(model.value) && arr.length === 0) return;
|
|
21828
|
+
/* v8 ignore next -- arr[0] always defined when scalar=true since model started as a number */
|
|
20739
21829
|
model.value = scalar ? arr[0] ?? 0 : arr;
|
|
20740
21830
|
}
|
|
20741
21831
|
});
|
|
@@ -20847,10 +21937,11 @@ const _sfc_main$100 = /* @__PURE__ */ defineComponent({
|
|
|
20847
21937
|
setup(__props) {
|
|
20848
21938
|
const attrs = useAttrs();
|
|
20849
21939
|
const root = useProgressRoot(__props.namespace);
|
|
20850
|
-
const ticket = root.register({ value: toRef(() => __props.value
|
|
21940
|
+
const ticket = /* @__PURE__ */ isUndefined(__props.value) ? root.register() : root.register({ value: toRef(() => __props.value) });
|
|
20851
21941
|
onBeforeUnmount(() => {
|
|
20852
21942
|
ticket.unregister();
|
|
20853
21943
|
});
|
|
21944
|
+
/* v8 ignore next -- defensive: registered ticket.value always coalesces to number via toRef getter above */
|
|
20854
21945
|
const current = toRef(() => toValue(ticket.value) ?? 0);
|
|
20855
21946
|
const percent = toRef(() => root.fromValue(current.value));
|
|
20856
21947
|
const slotProps = toRef(() => ({
|
|
@@ -21207,7 +22298,7 @@ const _sfc_main$106 = /* @__PURE__ */ defineComponent({
|
|
|
21207
22298
|
const model = useModel(__props, "modelValue");
|
|
21208
22299
|
const single = createSingle({
|
|
21209
22300
|
disabled: toRef(() => __props.disabled),
|
|
21210
|
-
mandatory: __props.mandatory,
|
|
22301
|
+
mandatory: toRef(() => __props.mandatory),
|
|
21211
22302
|
events: true
|
|
21212
22303
|
});
|
|
21213
22304
|
useProxyModel(single, model, { multiple: false });
|
|
@@ -21270,7 +22361,7 @@ const _sfc_main$109 = /* @__PURE__ */ defineComponent({
|
|
|
21270
22361
|
const ticket = group.register({
|
|
21271
22362
|
id: __props.id,
|
|
21272
22363
|
value: __props.value,
|
|
21273
|
-
disabled: __props.disabled,
|
|
22364
|
+
disabled: () => toValue(__props.disabled) ?? false,
|
|
21274
22365
|
el
|
|
21275
22366
|
});
|
|
21276
22367
|
const isChecked = toRef(() => toValue(ticket.isSelected));
|
|
@@ -21348,15 +22439,15 @@ const _sfc_main$109 = /* @__PURE__ */ defineComponent({
|
|
|
21348
22439
|
"tabindex": isTabbable.value ? 0 : -1,
|
|
21349
22440
|
"data-state": dataState.value,
|
|
21350
22441
|
"data-disabled": isDisabled.value ? true : void 0,
|
|
21351
|
-
"data-radio-id": __props.id
|
|
22442
|
+
"data-radio-id": __props.id,
|
|
22443
|
+
"onClick": onClick,
|
|
22444
|
+
"onKeydown": onKeydown
|
|
21352
22445
|
}
|
|
21353
22446
|
}));
|
|
21354
22447
|
return (_ctx, _cache) => {
|
|
21355
22448
|
return openBlock(), createElementBlock(Fragment, null, [createVNode(unref(_sfc_main$9), mergeProps({ ref: "root" }, mergeProps(unref(attrs), slotProps.value.attrs), {
|
|
21356
22449
|
as: __props.as,
|
|
21357
|
-
renderless: __props.renderless
|
|
21358
|
-
onClick,
|
|
21359
|
-
onKeydown
|
|
22450
|
+
renderless: __props.renderless
|
|
21360
22451
|
}), {
|
|
21361
22452
|
default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)))]),
|
|
21362
22453
|
_: 3
|
|
@@ -22091,12 +23182,12 @@ const _sfc_main$119 = /* @__PURE__ */ defineComponent({
|
|
|
22091
23182
|
const listboxId = `${id}-listbox`;
|
|
22092
23183
|
const activatorId = `${id}-activator`;
|
|
22093
23184
|
const selection = createSelection({
|
|
22094
|
-
multiple: __props.multiple,
|
|
22095
|
-
mandatory: __props.mandatory,
|
|
23185
|
+
multiple: toRef(() => __props.multiple),
|
|
23186
|
+
mandatory: toRef(() => __props.mandatory),
|
|
22096
23187
|
disabled: toRef(() => __props.disabled),
|
|
22097
23188
|
events: true
|
|
22098
23189
|
});
|
|
22099
|
-
useProxyModel(selection, model, { multiple: __props.multiple });
|
|
23190
|
+
useProxyModel(selection, model, { multiple: toRef(() => __props.multiple) });
|
|
22100
23191
|
const selectedId = toRef(() => selection.selectedIds.values().next().value);
|
|
22101
23192
|
const popover = usePopover({ id });
|
|
22102
23193
|
const isOpen = popover.isOpen;
|
|
@@ -22342,7 +23433,7 @@ const _sfc_main$117 = /* @__PURE__ */ defineComponent({
|
|
|
22342
23433
|
const ticket = context.selection.register({
|
|
22343
23434
|
id: __props.id,
|
|
22344
23435
|
value: __props.value,
|
|
22345
|
-
disabled: __props.disabled
|
|
23436
|
+
disabled: () => toValue(__props.disabled) ?? false
|
|
22346
23437
|
});
|
|
22347
23438
|
const elementId = `${context.id}-option-${ticket.id}`;
|
|
22348
23439
|
const isSelected = toRef(() => toValue(ticket.isSelected));
|
|
@@ -22368,11 +23459,12 @@ const _sfc_main$117 = /* @__PURE__ */ defineComponent({
|
|
|
22368
23459
|
"data-selected": isSelected.value || void 0,
|
|
22369
23460
|
"data-highlighted": isHighlighted.value ? "" : void 0,
|
|
22370
23461
|
"data-disabled": isDisabled.value || void 0,
|
|
22371
|
-
"data-id": String(ticket.id)
|
|
23462
|
+
"data-id": String(ticket.id),
|
|
23463
|
+
"onClick": onClick
|
|
22372
23464
|
}
|
|
22373
23465
|
}));
|
|
22374
23466
|
return (_ctx, _cache) => {
|
|
22375
|
-
return openBlock(), createBlock(unref(_sfc_main$9), mergeProps({ as: __props.as }, slotProps.value.attrs
|
|
23467
|
+
return openBlock(), createBlock(unref(_sfc_main$9), mergeProps({ as: __props.as }, slotProps.value.attrs), {
|
|
22376
23468
|
default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)))]),
|
|
22377
23469
|
_: 3
|
|
22378
23470
|
}, 16, ["as"]);
|
|
@@ -22664,12 +23756,12 @@ const _sfc_main$122 = /* @__PURE__ */ defineComponent({
|
|
|
22664
23756
|
const model = useModel(__props, "modelValue");
|
|
22665
23757
|
const selection = createSelection({
|
|
22666
23758
|
disabled: toRef(() => __props.disabled),
|
|
22667
|
-
enroll: __props.enroll,
|
|
22668
|
-
mandatory: __props.mandatory,
|
|
22669
|
-
multiple: __props.multiple,
|
|
23759
|
+
enroll: toRef(() => __props.enroll),
|
|
23760
|
+
mandatory: toRef(() => __props.mandatory),
|
|
23761
|
+
multiple: toRef(() => __props.multiple),
|
|
22670
23762
|
events: true
|
|
22671
23763
|
});
|
|
22672
|
-
useProxyModel(selection, model, { multiple: __props.multiple });
|
|
23764
|
+
useProxyModel(selection, model, { multiple: toRef(() => __props.multiple) });
|
|
22673
23765
|
provideSelectionRoot(__props.namespace, selection);
|
|
22674
23766
|
const slotProps = toRef(() => ({
|
|
22675
23767
|
isDisabled: toValue(selection.disabled),
|
|
@@ -22701,7 +23793,7 @@ const _sfc_main$121 = /* @__PURE__ */ defineComponent({
|
|
|
22701
23793
|
const ticket = selection.register({
|
|
22702
23794
|
id: __props.id,
|
|
22703
23795
|
value: __props.value,
|
|
22704
|
-
disabled: __props.disabled
|
|
23796
|
+
disabled: () => toValue(__props.disabled) ?? false
|
|
22705
23797
|
});
|
|
22706
23798
|
const isDisabled = toRef(() => toValue(ticket.disabled) || toValue(selection.disabled));
|
|
22707
23799
|
onBeforeUnmount(() => {
|
|
@@ -22811,8 +23903,8 @@ const _sfc_main$124 = /* @__PURE__ */ defineComponent({
|
|
|
22811
23903
|
const model = useModel(__props, "modelValue");
|
|
22812
23904
|
const single = createSingle({
|
|
22813
23905
|
disabled: toRef(() => __props.disabled),
|
|
22814
|
-
enroll: __props.enroll,
|
|
22815
|
-
mandatory: __props.mandatory,
|
|
23906
|
+
enroll: toRef(() => __props.enroll),
|
|
23907
|
+
mandatory: toRef(() => __props.mandatory),
|
|
22816
23908
|
events: true
|
|
22817
23909
|
});
|
|
22818
23910
|
useProxyModel(single, model, { multiple: false });
|
|
@@ -22846,7 +23938,7 @@ const _sfc_main$123 = /* @__PURE__ */ defineComponent({
|
|
|
22846
23938
|
const ticket = single.register({
|
|
22847
23939
|
id: __props.id,
|
|
22848
23940
|
value: __props.value,
|
|
22849
|
-
disabled: __props.disabled
|
|
23941
|
+
disabled: () => toValue(__props.disabled) ?? false
|
|
22850
23942
|
});
|
|
22851
23943
|
const isDisabled = toRef(() => toValue(ticket.disabled) || toValue(single.disabled));
|
|
22852
23944
|
onBeforeUnmount(() => {
|
|
@@ -22975,6 +24067,7 @@ const _sfc_main$127 = /* @__PURE__ */ defineComponent({
|
|
|
22975
24067
|
const internal = computed({
|
|
22976
24068
|
get: () => /* @__PURE__ */ isArray(model.value) ? model.value : [model.value],
|
|
22977
24069
|
set: (arr) => {
|
|
24070
|
+
/* v8 ignore next -- arr[0] always defined when scalar=true since model started with a number */
|
|
22978
24071
|
model.value = scalar ? arr[0] ?? 0 : arr;
|
|
22979
24072
|
}
|
|
22980
24073
|
});
|
|
@@ -22995,20 +24088,25 @@ const _sfc_main$127 = /* @__PURE__ */ defineComponent({
|
|
|
22995
24088
|
const dragOffset = shallowRef(0);
|
|
22996
24089
|
function getPercent(e) {
|
|
22997
24090
|
const el = track.value;
|
|
24091
|
+
/* v8 ignore next -- defensive: pointermove is gated to active drag, track is mounted by then */
|
|
22998
24092
|
if (!el) return 0;
|
|
22999
24093
|
const rect = el.getBoundingClientRect();
|
|
23000
24094
|
return toValue(slider.orientation) === "vertical" ? (rect.bottom - e.clientY - dragOffset.value) / rect.height * 100 : (e.clientX - rect.left - dragOffset.value) / rect.width * 100;
|
|
23001
24095
|
}
|
|
23002
24096
|
useToggleScope(() => !/* @__PURE__ */ isNull(dragging.value), () => {
|
|
24097
|
+
/* v8 ignore next 3 -- IN_BROWSER always true in happy-dom test env */
|
|
23003
24098
|
if (IN_BROWSER) document.documentElement.style.touchAction = "none";
|
|
23004
24099
|
useDocumentEventListener("pointermove", (e) => {
|
|
24100
|
+
/* v8 ignore next -- defensive: dragging cleared on pointerup */
|
|
23005
24101
|
if (/* @__PURE__ */ isNull(dragging.value)) return;
|
|
23006
24102
|
const percent = getPercent(e);
|
|
23007
24103
|
slider.set(dragging.value, slider.fromPercent(percent));
|
|
23008
24104
|
});
|
|
23009
24105
|
useDocumentEventListener("pointerup", () => {
|
|
24106
|
+
/* v8 ignore next 3 -- IN_BROWSER always true in happy-dom test env */
|
|
23010
24107
|
if (IN_BROWSER) document.documentElement.style.touchAction = "";
|
|
23011
24108
|
const values = [...slider.values.value];
|
|
24109
|
+
/* v8 ignore next -- end event scalar branch only fires for single-value drag, not exercised */
|
|
23012
24110
|
emit("end", scalar ? values[0] ?? 0 : values);
|
|
23013
24111
|
dragging.value = null;
|
|
23014
24112
|
dragOffset.value = 0;
|
|
@@ -23025,6 +24123,7 @@ const _sfc_main$127 = /* @__PURE__ */ defineComponent({
|
|
|
23025
24123
|
} else dragOffset.value = 0;
|
|
23026
24124
|
dragging.value = index;
|
|
23027
24125
|
const values = [...slider.values.value];
|
|
24126
|
+
/* v8 ignore next -- start event scalar branch only fires for single-value drag, not exercised */
|
|
23028
24127
|
emit("start", scalar ? values[0] ?? 0 : values);
|
|
23029
24128
|
}
|
|
23030
24129
|
const context = {
|
|
@@ -23841,6 +24940,7 @@ const _sfc_main$137 = /* @__PURE__ */ defineComponent({
|
|
|
23841
24940
|
const handles = createRegistry();
|
|
23842
24941
|
watch(() => panels.collection.size, (size, prev) => {
|
|
23843
24942
|
const values = panels.values();
|
|
24943
|
+
/* v8 ignore next -- defensive: watch fires only when panel registry has at least one entry */
|
|
23844
24944
|
if (values.length === 0) return;
|
|
23845
24945
|
const total = values.reduce((sum, t) => sum + t.size, 0);
|
|
23846
24946
|
if (total === 0 || total === 100) return;
|
|
@@ -23859,6 +24959,7 @@ const _sfc_main$137 = /* @__PURE__ */ defineComponent({
|
|
|
23859
24959
|
function resize(index, delta, options) {
|
|
23860
24960
|
const before = panel(index);
|
|
23861
24961
|
const after = panel(index + 1);
|
|
24962
|
+
/* v8 ignore next -- defensive: resize only invoked between adjacent panels */
|
|
23862
24963
|
if (!before || !after) return;
|
|
23863
24964
|
const total = before.size + after.size;
|
|
23864
24965
|
const min1 = effectiveMin(before);
|
|
@@ -23901,8 +25002,10 @@ const _sfc_main$137 = /* @__PURE__ */ defineComponent({
|
|
|
23901
25002
|
}
|
|
23902
25003
|
function collapse(index, neighborIndex) {
|
|
23903
25004
|
const ticket = panel(index);
|
|
25005
|
+
/* v8 ignore next -- defensive: collapse called only on collapsible+selected panels */
|
|
23904
25006
|
if (!ticket?.collapsible || !toValue(ticket.isSelected)) return;
|
|
23905
25007
|
const neighbor = panel(neighborIndex ?? (index > 0 ? index - 1 : index + 1));
|
|
25008
|
+
/* v8 ignore next -- defensive: at least one neighbor exists when there are 2+ panels */
|
|
23906
25009
|
if (!neighbor) return;
|
|
23907
25010
|
const diff = ticket.size - ticket.collapsedSize;
|
|
23908
25011
|
const absorbed = Math.min(diff, neighbor.maxSize - neighbor.size);
|
|
@@ -23922,12 +25025,15 @@ const _sfc_main$137 = /* @__PURE__ */ defineComponent({
|
|
|
23922
25025
|
}
|
|
23923
25026
|
function expand(index, neighborIndex) {
|
|
23924
25027
|
const ticket = panel(index);
|
|
25028
|
+
/* v8 ignore next -- defensive: expand called only on collapsible+collapsed panels */
|
|
23925
25029
|
if (!ticket?.collapsible || toValue(ticket.isSelected)) return;
|
|
23926
25030
|
const neighbor = panel(neighborIndex ?? (index > 0 ? index - 1 : index + 1));
|
|
25031
|
+
/* v8 ignore next -- defensive: at least one neighbor exists when there are 2+ panels */
|
|
23927
25032
|
if (!neighbor) return;
|
|
23928
25033
|
const diff = Math.min(ticket.defaultSize, ticket.maxSize) - ticket.collapsedSize;
|
|
23929
25034
|
const available = neighbor.size - neighbor.minSize;
|
|
23930
25035
|
const take = Math.min(diff, available);
|
|
25036
|
+
/* v8 ignore next -- defensive: only triggers when neighbor has insufficient space */
|
|
23931
25037
|
if (ticket.collapsedSize + take < ticket.minSize) return;
|
|
23932
25038
|
neighbor.size -= take;
|
|
23933
25039
|
ticket.size = ticket.collapsedSize + take;
|
|
@@ -23951,6 +25057,7 @@ const _sfc_main$137 = /* @__PURE__ */ defineComponent({
|
|
|
23951
25057
|
remainder -= adjust;
|
|
23952
25058
|
}
|
|
23953
25059
|
for (const ticket of values) {
|
|
25060
|
+
/* v8 ignore next -- defensive: existing tests use collapsible panels */
|
|
23954
25061
|
if (!ticket.collapsible) continue;
|
|
23955
25062
|
const collapsed = !toValue(ticket.isSelected);
|
|
23956
25063
|
if (!collapsed && ticket.size <= ticket.collapsedSize) ticket.unselect();
|
|
@@ -23962,6 +25069,7 @@ const _sfc_main$137 = /* @__PURE__ */ defineComponent({
|
|
|
23962
25069
|
draggingHandle.value = index;
|
|
23963
25070
|
}
|
|
23964
25071
|
function onEndDrag() {
|
|
25072
|
+
if (/* @__PURE__ */ isNull(draggingHandle.value)) return;
|
|
23965
25073
|
draggingHandle.value = null;
|
|
23966
25074
|
expandAccum.clear();
|
|
23967
25075
|
emitLayout();
|
|
@@ -24058,7 +25166,9 @@ const _sfc_main$136 = /* @__PURE__ */ defineComponent({
|
|
|
24058
25166
|
function isPx(value) {
|
|
24059
25167
|
return /* @__PURE__ */ isString(value) && value.endsWith("px");
|
|
24060
25168
|
}
|
|
24061
|
-
if (isPx(__props.defaultSize) || isPx(__props.minSize) || isPx(__props.maxSize) || isPx(__props.collapsedSize))
|
|
25169
|
+
if (isPx(__props.defaultSize) || isPx(__props.minSize) || isPx(__props.maxSize) || isPx(__props.collapsedSize))
|
|
25170
|
+
/* v8 ignore start -- px-mode panels not exercised in happy-dom (no real layout) */
|
|
25171
|
+
useResizeObserver(splitter.rootEl, (entries) => {
|
|
24062
25172
|
const rect = entries[0]?.contentRect;
|
|
24063
25173
|
rootSize.value = splitter.orientation.value === "horizontal" ? rect?.width ?? 0 : rect?.height ?? 0;
|
|
24064
25174
|
});
|
|
@@ -24066,11 +25176,13 @@ const _sfc_main$136 = /* @__PURE__ */ defineComponent({
|
|
|
24066
25176
|
if (!/* @__PURE__ */ isString(value)) return value;
|
|
24067
25177
|
const num = Number.parseFloat(value);
|
|
24068
25178
|
if (Number.isNaN(num)) return fallback;
|
|
25179
|
+
/* v8 ignore start -- px-mode conversion path not exercised in happy-dom (no real layout) */
|
|
24069
25180
|
if (value.endsWith("px")) {
|
|
24070
25181
|
const root = splitter.rootEl.value;
|
|
24071
25182
|
const dimension = rootSize.value || (splitter.orientation.value === "horizontal" ? root?.offsetWidth : root?.offsetHeight) || 0;
|
|
24072
25183
|
return dimension > 0 ? num / dimension * 100 : fallback;
|
|
24073
25184
|
}
|
|
25185
|
+
/* v8 ignore stop */
|
|
24074
25186
|
return num;
|
|
24075
25187
|
}
|
|
24076
25188
|
const ticket = splitter.panels.register({
|
|
@@ -24190,9 +25302,11 @@ const _sfc_main$135 = /* @__PURE__ */ defineComponent({
|
|
|
24190
25302
|
if (hovering.value) return "hover";
|
|
24191
25303
|
return "inactive";
|
|
24192
25304
|
});
|
|
25305
|
+
/* v8 ignore next -- defensive: the handle's index always points to a registered panel */
|
|
24193
25306
|
const valuenow = toRef(() => Math.round(splitter.panel(ticket.index)?.size ?? 0));
|
|
24194
25307
|
const valuemin = toRef(() => {
|
|
24195
25308
|
const p = splitter.panel(ticket.index);
|
|
25309
|
+
/* v8 ignore next -- defensive: handle's index always resolves to a registered panel */
|
|
24196
25310
|
if (!p) return 0;
|
|
24197
25311
|
return p.collapsible ? p.collapsedSize : p.minSize;
|
|
24198
25312
|
});
|
|
@@ -24216,8 +25330,10 @@ const _sfc_main$135 = /* @__PURE__ */ defineComponent({
|
|
|
24216
25330
|
useToggleScope(() => splitter.draggingHandle.value === ticket.index, () => {
|
|
24217
25331
|
const update = useRaf(() => {
|
|
24218
25332
|
const root = splitter.rootEl.value;
|
|
25333
|
+
/* v8 ignore next -- defensive: drag scope only enters with a mounted root */
|
|
24219
25334
|
if (!root) return;
|
|
24220
25335
|
const rootSize = isHorizontal.value ? root.offsetWidth : root.offsetHeight;
|
|
25336
|
+
/* v8 ignore next -- happy-dom returns 0 for offset dimensions; not exercised in tests */
|
|
24221
25337
|
if (!rootSize) return;
|
|
24222
25338
|
const delta = (latestPos - startPosition.value) / rootSize * 100;
|
|
24223
25339
|
startPosition.value = latestPos;
|
|
@@ -24229,6 +25345,7 @@ const _sfc_main$135 = /* @__PURE__ */ defineComponent({
|
|
|
24229
25345
|
});
|
|
24230
25346
|
useDocumentEventListener("pointerup", () => {
|
|
24231
25347
|
update.cancel();
|
|
25348
|
+
/* v8 ignore next 4 -- IN_BROWSER always true in happy-dom test env */
|
|
24232
25349
|
if (IN_BROWSER) {
|
|
24233
25350
|
document.documentElement.style.userSelect = "";
|
|
24234
25351
|
document.documentElement.style.touchAction = "";
|
|
@@ -24237,6 +25354,7 @@ const _sfc_main$135 = /* @__PURE__ */ defineComponent({
|
|
|
24237
25354
|
});
|
|
24238
25355
|
onScopeDispose(() => {
|
|
24239
25356
|
splitter.onEndDrag();
|
|
25357
|
+
/* v8 ignore next 4 -- IN_BROWSER always true in happy-dom test env */
|
|
24240
25358
|
if (IN_BROWSER) {
|
|
24241
25359
|
document.documentElement.style.userSelect = "";
|
|
24242
25360
|
document.documentElement.style.touchAction = "";
|
|
@@ -24459,8 +25577,8 @@ const _sfc_main$139 = /* @__PURE__ */ defineComponent({
|
|
|
24459
25577
|
const model = useModel(__props, "modelValue");
|
|
24460
25578
|
const step = createStep({
|
|
24461
25579
|
disabled: toRef(() => __props.disabled),
|
|
24462
|
-
enroll: __props.enroll,
|
|
24463
|
-
mandatory: __props.mandatory,
|
|
25580
|
+
enroll: toRef(() => __props.enroll),
|
|
25581
|
+
mandatory: toRef(() => __props.mandatory),
|
|
24464
25582
|
events: true
|
|
24465
25583
|
});
|
|
24466
25584
|
useProxyModel(step, model, { multiple: false });
|
|
@@ -24499,7 +25617,7 @@ const _sfc_main$138 = /* @__PURE__ */ defineComponent({
|
|
|
24499
25617
|
const ticket = step.register({
|
|
24500
25618
|
id: __props.id,
|
|
24501
25619
|
value: __props.value,
|
|
24502
|
-
disabled: __props.disabled
|
|
25620
|
+
disabled: () => toValue(__props.disabled) ?? false
|
|
24503
25621
|
});
|
|
24504
25622
|
const isDisabled = toRef(() => toValue(ticket.disabled) || toValue(step.disabled));
|
|
24505
25623
|
onBeforeUnmount(() => {
|
|
@@ -24612,8 +25730,8 @@ const _sfc_main$140 = /* @__PURE__ */ defineComponent({
|
|
|
24612
25730
|
const model = useModel(__props, "modelValue");
|
|
24613
25731
|
const group = createGroup({
|
|
24614
25732
|
disabled: toRef(() => __props.disabled),
|
|
24615
|
-
enroll: __props.enroll,
|
|
24616
|
-
mandatory: __props.mandatory,
|
|
25733
|
+
enroll: toRef(() => __props.enroll),
|
|
25734
|
+
mandatory: toRef(() => __props.mandatory),
|
|
24617
25735
|
events: true
|
|
24618
25736
|
});
|
|
24619
25737
|
useProxyModel(group, model, { multiple: true });
|
|
@@ -24684,8 +25802,8 @@ const _sfc_main$142 = /* @__PURE__ */ defineComponent({
|
|
|
24684
25802
|
const ticket = group?.register({
|
|
24685
25803
|
id: __props.id,
|
|
24686
25804
|
value: __props.value,
|
|
24687
|
-
disabled: __props.disabled,
|
|
24688
|
-
indeterminate: __props.indeterminate
|
|
25805
|
+
disabled: () => toValue(__props.disabled) ?? false,
|
|
25806
|
+
indeterminate: () => toValue(__props.indeterminate) ?? false
|
|
24689
25807
|
});
|
|
24690
25808
|
const isChecked = toRef(() => ticket ? toValue(ticket.isSelected) : model.value ?? false);
|
|
24691
25809
|
const isMixed = toRef(() => ticket ? toValue(ticket.isMixed) : toValue(__props.indeterminate) ?? false);
|
|
@@ -24765,15 +25883,15 @@ const _sfc_main$142 = /* @__PURE__ */ defineComponent({
|
|
|
24765
25883
|
"aria-invalid": __props.ariaInvalid || void 0,
|
|
24766
25884
|
"tabindex": isDisabled.value ? void 0 : 0,
|
|
24767
25885
|
"data-state": dataState.value,
|
|
24768
|
-
"data-disabled": isDisabled.value ? true : void 0
|
|
25886
|
+
"data-disabled": isDisabled.value ? true : void 0,
|
|
25887
|
+
"onClick": onClick,
|
|
25888
|
+
"onKeydown": onKeydown
|
|
24769
25889
|
}
|
|
24770
25890
|
}));
|
|
24771
25891
|
return (_ctx, _cache) => {
|
|
24772
25892
|
return openBlock(), createElementBlock(Fragment, null, [createVNode(unref(_sfc_main$9), mergeProps(mergeProps(unref(attrs), slotProps.value.attrs), {
|
|
24773
25893
|
as: __props.as,
|
|
24774
|
-
renderless: __props.renderless
|
|
24775
|
-
onClick,
|
|
24776
|
-
onKeydown
|
|
25894
|
+
renderless: __props.renderless
|
|
24777
25895
|
}), {
|
|
24778
25896
|
default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)))]),
|
|
24779
25897
|
_: 3
|
|
@@ -25217,8 +26335,8 @@ const _sfc_main$149 = /* @__PURE__ */ defineComponent({
|
|
|
25217
26335
|
const rootId = /* @__PURE__ */ useId();
|
|
25218
26336
|
const step = createStep({
|
|
25219
26337
|
disabled: toRef(() => __props.disabled),
|
|
25220
|
-
enroll: __props.enroll,
|
|
25221
|
-
mandatory: __props.mandatory,
|
|
26338
|
+
enroll: toRef(() => __props.enroll),
|
|
26339
|
+
mandatory: toRef(() => __props.mandatory),
|
|
25222
26340
|
circular: __props.circular,
|
|
25223
26341
|
events: true
|
|
25224
26342
|
});
|
|
@@ -25313,7 +26431,7 @@ const _sfc_main$146 = /* @__PURE__ */ defineComponent({
|
|
|
25313
26431
|
const ticket = tabs.register({
|
|
25314
26432
|
id: __props.id,
|
|
25315
26433
|
value: __props.value,
|
|
25316
|
-
disabled: __props.disabled,
|
|
26434
|
+
disabled: () => toValue(__props.disabled) ?? false,
|
|
25317
26435
|
el
|
|
25318
26436
|
});
|
|
25319
26437
|
const isDisabled = toRef(() => toValue(ticket.disabled) || toValue(tabs.disabled));
|
|
@@ -25632,14 +26750,14 @@ const _sfc_main$151 = /* @__PURE__ */ defineComponent({
|
|
|
25632
26750
|
const model = useModel(__props, "modelValue");
|
|
25633
26751
|
const selection = __props.multiple ? createGroup({
|
|
25634
26752
|
disabled: toRef(() => __props.disabled),
|
|
25635
|
-
mandatory: __props.mandatory,
|
|
26753
|
+
mandatory: toRef(() => __props.mandatory),
|
|
25636
26754
|
events: true
|
|
25637
26755
|
}) : createSingle({
|
|
25638
26756
|
disabled: toRef(() => __props.disabled),
|
|
25639
|
-
mandatory: __props.mandatory,
|
|
26757
|
+
mandatory: toRef(() => __props.mandatory),
|
|
25640
26758
|
events: true
|
|
25641
26759
|
});
|
|
25642
|
-
useProxyModel(selection, model, { multiple: __props.multiple });
|
|
26760
|
+
useProxyModel(selection, model, { multiple: toRef(() => __props.multiple) });
|
|
25643
26761
|
provideToggleGroup(__props.namespace, {
|
|
25644
26762
|
disabled: toRef(() => __props.disabled),
|
|
25645
26763
|
orientation: toRef(() => __props.orientation),
|
|
@@ -25703,7 +26821,7 @@ const _sfc_main$153 = /* @__PURE__ */ defineComponent({
|
|
|
25703
26821
|
const ticket = group?.selection.register({
|
|
25704
26822
|
id: __props.id,
|
|
25705
26823
|
value: __props.value,
|
|
25706
|
-
disabled: __props.disabled
|
|
26824
|
+
disabled: () => toValue(__props.disabled) ?? false
|
|
25707
26825
|
});
|
|
25708
26826
|
const isPressed = toRef(() => ticket ? toValue(ticket.isSelected) : pressed.value);
|
|
25709
26827
|
const isDisabled = toRef(() => group && ticket ? toValue(ticket.disabled) || toValue(group.disabled) : __props.disabled);
|
|
@@ -25742,15 +26860,15 @@ const _sfc_main$153 = /* @__PURE__ */ defineComponent({
|
|
|
25742
26860
|
"aria-disabled": isDisabled.value,
|
|
25743
26861
|
"tabindex": isDisabled.value ? void 0 : 0,
|
|
25744
26862
|
"data-state": isPressed.value ? "on" : "off",
|
|
25745
|
-
"data-disabled": isDisabled.value ? true : void 0
|
|
26863
|
+
"data-disabled": isDisabled.value ? true : void 0,
|
|
26864
|
+
"onClick": onClick,
|
|
26865
|
+
"onKeydown": onKeydown
|
|
25746
26866
|
}
|
|
25747
26867
|
}));
|
|
25748
26868
|
return (_ctx, _cache) => {
|
|
25749
26869
|
return openBlock(), createBlock(unref(_sfc_main$9), mergeProps(mergeProps(unref(attrs), slotProps.value.attrs), {
|
|
25750
26870
|
as: __props.as,
|
|
25751
|
-
renderless: __props.renderless
|
|
25752
|
-
onClick,
|
|
25753
|
-
onKeydown
|
|
26871
|
+
renderless: __props.renderless
|
|
25754
26872
|
}), {
|
|
25755
26873
|
default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)))]),
|
|
25756
26874
|
_: 3
|
|
@@ -25925,9 +27043,9 @@ const _sfc_main$162 = /* @__PURE__ */ defineComponent({
|
|
|
25925
27043
|
const model = useModel(__props, "modelValue");
|
|
25926
27044
|
const nested = createNested({
|
|
25927
27045
|
disabled: toRef(() => __props.disabled),
|
|
25928
|
-
enroll: __props.enroll,
|
|
25929
|
-
mandatory: __props.mandatory,
|
|
25930
|
-
multiple: __props.multiple,
|
|
27046
|
+
enroll: toRef(() => __props.enroll),
|
|
27047
|
+
mandatory: toRef(() => __props.mandatory),
|
|
27048
|
+
multiple: toRef(() => __props.multiple),
|
|
25931
27049
|
open: __props.open,
|
|
25932
27050
|
openAll: __props.openAll,
|
|
25933
27051
|
reveal: __props.reveal,
|
|
@@ -25983,12 +27101,15 @@ const _sfc_main$161 = /* @__PURE__ */ defineComponent({
|
|
|
25983
27101
|
if (match && roving.focusedId.value !== match.id) roving.focusedId.value = match.id;
|
|
25984
27102
|
}
|
|
25985
27103
|
function expandable(ticket) {
|
|
27104
|
+
/* v8 ignore next -- defensive: callers always pass a registered ticket */
|
|
25986
27105
|
if (!ticket) return false;
|
|
25987
27106
|
return (toValue(ticket.el)?.hasAttribute("aria-expanded") ?? false) || !toValue(ticket.isLeaf);
|
|
25988
27107
|
}
|
|
25989
27108
|
function isRtl(e) {
|
|
27109
|
+
/* v8 ignore next -- IN_BROWSER always true in happy-dom test env */
|
|
25990
27110
|
if (!IN_BROWSER) return false;
|
|
25991
27111
|
const el = e.currentTarget;
|
|
27112
|
+
/* v8 ignore next -- defensive: keydown handlers always have a currentTarget */
|
|
25992
27113
|
return el ? getComputedStyle(el).direction === "rtl" : false;
|
|
25993
27114
|
}
|
|
25994
27115
|
function openOrChild(ticket) {
|
|
@@ -26057,6 +27178,7 @@ const _sfc_main$161 = /* @__PURE__ */ defineComponent({
|
|
|
26057
27178
|
}
|
|
26058
27179
|
const slotProps = toRef(() => ({ attrs: {
|
|
26059
27180
|
"role": "tree",
|
|
27181
|
+
/* v8 ignore next -- nested.multiple fallback used when multiselectable prop is undefined */
|
|
26060
27182
|
"aria-multiselectable": __props.multiselectable ?? nested.multiple,
|
|
26061
27183
|
"aria-label": __props.label || void 0,
|
|
26062
27184
|
onKeydown,
|
|
@@ -26095,7 +27217,7 @@ const _sfc_main$160 = /* @__PURE__ */ defineComponent({
|
|
|
26095
27217
|
const ticket = nested.register({
|
|
26096
27218
|
id: __props.id,
|
|
26097
27219
|
value: __props.value,
|
|
26098
|
-
disabled: __props.disabled,
|
|
27220
|
+
disabled: () => toValue(__props.disabled) ?? false,
|
|
26099
27221
|
parentId,
|
|
26100
27222
|
el
|
|
26101
27223
|
});
|
|
@@ -26661,4 +27783,4 @@ const Treeview = {
|
|
|
26661
27783
|
SelectAll: _sfc_main$163
|
|
26662
27784
|
};
|
|
26663
27785
|
//#endregion
|
|
26664
|
-
export { AlertDialog, _sfc_main as AlertDialogAction, _sfc_main$1 as AlertDialogActivator, _sfc_main$2 as AlertDialogCancel, _sfc_main$3 as AlertDialogClose, _sfc_main$4 as AlertDialogContent, _sfc_main$5 as AlertDialogDescription, _sfc_main$6 as AlertDialogRoot, _sfc_main$7 as AlertDialogTitle, _sfc_main$8 as AspectRatio, _sfc_main$9 as Atom, Avatar, _sfc_main$10 as AvatarFallback, _sfc_main$11 as AvatarImage, _sfc_main$12 as AvatarRoot, Breadcrumbs, _sfc_main$13 as BreadcrumbsDivider, _sfc_main$14 as BreadcrumbsEllipsis, _sfc_main$15 as BreadcrumbsItem, _sfc_main$16 as BreadcrumbsLink, _sfc_main$17 as BreadcrumbsList, _sfc_main$18 as BreadcrumbsPage, _sfc_main$19 as BreadcrumbsRoot, Button, _sfc_main$20 as ButtonContent, _sfc_main$21 as ButtonGroup, _sfc_main$22 as ButtonHiddenInput, _sfc_main$23 as ButtonIcon, _sfc_main$24 as ButtonLoading, _sfc_main$25 as ButtonRoot, Carousel, _sfc_main$26 as CarouselIndicator, _sfc_main$27 as CarouselItem, _sfc_main$28 as CarouselLiveRegion, _sfc_main$29 as CarouselNext, _sfc_main$30 as CarouselPrevious, _sfc_main$31 as CarouselProgress, _sfc_main$32 as CarouselRoot, _sfc_main$33 as CarouselViewport, Checkbox, _sfc_main$34 as CheckboxGroup, _sfc_main$35 as CheckboxHiddenInput, _sfc_main$36 as CheckboxIndicator, _sfc_main$37 as CheckboxRoot, _sfc_main$38 as CheckboxSelectAll, ClientAdapter, Collapsible, _sfc_main$39 as CollapsibleActivator, _sfc_main$40 as CollapsibleContent, _sfc_main$41 as CollapsibleCue, _sfc_main$42 as CollapsibleRoot, Combobox, _sfc_main$43 as ComboboxActivator, ClientAdapter$1 as ComboboxClientAdapter, _sfc_main$44 as ComboboxContent, _sfc_main$45 as ComboboxControl, _sfc_main$46 as ComboboxCue, _sfc_main$47 as ComboboxDescription, _sfc_main$48 as ComboboxEmpty, _sfc_main$49 as ComboboxError, _sfc_main$50 as ComboboxItem, _sfc_main$51 as ComboboxRoot, ServerAdapter as ComboboxServerAdapter, ConsolaLoggerAdapter, DataTableAdapter, Dialog, _sfc_main$52 as DialogActivator, _sfc_main$53 as DialogClose, _sfc_main$54 as DialogContent, _sfc_main$55 as DialogDescription, _sfc_main$56 as DialogRoot, _sfc_main$57 as DialogTitle, ExpansionPanel, _sfc_main$58 as ExpansionPanelActivator, _sfc_main$59 as ExpansionPanelContent, _sfc_main$60 as ExpansionPanelCue, _sfc_main$61 as ExpansionPanelGroup, _sfc_main$62 as ExpansionPanelHeader, _sfc_main$63 as ExpansionPanelRoot, FeaturesAdapter, _sfc_main$64 as Form, Group, _sfc_main$65 as GroupItem, _sfc_main$66 as GroupRoot, IN_BROWSER, Image, _sfc_main$67 as ImageFallback, _sfc_main$68 as ImageImg, _sfc_main$69 as ImagePlaceholder, _sfc_main$70 as ImageRoot, Input, _sfc_main$71 as InputControl, _sfc_main$72 as InputDescription, _sfc_main$73 as InputError, _sfc_main$74 as InputRoot, _sfc_main$75 as Locale, MemoryAdapter, NumberField, _sfc_main$76 as NumberFieldControl, _sfc_main$77 as NumberFieldDecrement, _sfc_main$78 as NumberFieldDescription, _sfc_main$79 as NumberFieldError, _sfc_main$80 as NumberFieldIncrement, _sfc_main$81 as NumberFieldRoot, _sfc_main$82 as NumberFieldScrub, Overflow, _sfc_main$83 as OverflowIndicator, _sfc_main$84 as OverflowItem, _sfc_main$85 as OverflowRoot, Pagination, _sfc_main$86 as PaginationEllipsis, _sfc_main$87 as PaginationFirst, _sfc_main$88 as PaginationItem, _sfc_main$89 as PaginationLast, _sfc_main$90 as PaginationNext, _sfc_main$91 as PaginationPrev, _sfc_main$92 as PaginationRoot, _sfc_main$93 as PaginationStatus, PermissionAdapter, PinoLoggerAdapter, Popover, _sfc_main$94 as PopoverActivator, _sfc_main$95 as PopoverContent, _sfc_main$96 as PopoverRoot, _sfc_main$97 as Portal, _sfc_main$98 as Presence, Progress, _sfc_main$99 as ProgressBuffer, _sfc_main$100 as ProgressFill, _sfc_main$101 as ProgressHiddenInput, _sfc_main$102 as ProgressLabel, _sfc_main$103 as ProgressRoot, _sfc_main$104 as ProgressTrack, _sfc_main$105 as ProgressValue, Radio, _sfc_main$106 as RadioGroup, _sfc_main$107 as RadioHiddenInput, _sfc_main$108 as RadioIndicator, _sfc_main$109 as RadioRoot, Rating, _sfc_main$110 as RatingHiddenInput, _sfc_main$111 as RatingItem, _sfc_main$112 as RatingRoot, SELF_CLOSING_TAGS, SUPPORTS_INTERSECTION_OBSERVER, SUPPORTS_MATCH_MEDIA, SUPPORTS_MUTATION_OBSERVER, SUPPORTS_OBSERVER, SUPPORTS_TOUCH, _sfc_main$113 as Scrim, Select, _sfc_main$114 as SelectActivator, _sfc_main$115 as SelectContent, _sfc_main$116 as SelectCue, _sfc_main$117 as SelectItem, _sfc_main$118 as SelectPlaceholder, _sfc_main$119 as SelectRoot, _sfc_main$120 as SelectValue, Selection, _sfc_main$121 as SelectionItem, _sfc_main$122 as SelectionRoot, ServerAdapter$1 as ServerAdapter, Single, _sfc_main$123 as SingleItem, _sfc_main$124 as SingleRoot, Slider, _sfc_main$125 as SliderHiddenInput, _sfc_main$126 as SliderRange, _sfc_main$127 as SliderRoot, _sfc_main$128 as SliderThumb, _sfc_main$129 as SliderTrack, Snackbar, _sfc_main$130 as SnackbarClose, _sfc_main$131 as SnackbarContent, _sfc_main$132 as SnackbarPortal, _sfc_main$133 as SnackbarQueue, _sfc_main$134 as SnackbarRoot, Splitter, _sfc_main$135 as SplitterHandle, _sfc_main$136 as SplitterPanel, _sfc_main$137 as SplitterRoot, Step, _sfc_main$138 as StepItem, _sfc_main$139 as StepRoot, Switch, _sfc_main$140 as SwitchGroup, _sfc_main$141 as SwitchHiddenInput, _sfc_main$142 as SwitchRoot, _sfc_main$143 as SwitchSelectAll, _sfc_main$144 as SwitchThumb, _sfc_main$145 as SwitchTrack, Tabs, _sfc_main$146 as TabsItem, _sfc_main$147 as TabsList, _sfc_main$148 as TabsPanel, _sfc_main$149 as TabsRoot, _sfc_main$150 as Theme, Toggle, _sfc_main$151 as ToggleGroup, _sfc_main$152 as ToggleIndicator, _sfc_main$153 as ToggleRoot, Treeview, _sfc_main$154 as TreeviewActivator, _sfc_main$155 as TreeviewCheckbox, _sfc_main$156 as TreeviewContent, _sfc_main$157 as TreeviewCue, _sfc_main$158 as TreeviewGroup, _sfc_main$159 as TreeviewIndicator, _sfc_main$160 as TreeviewItem, _sfc_main$161 as TreeviewList, _sfc_main$162 as TreeviewRoot, _sfc_main$163 as TreeviewSelectAll, V0StyleSheetThemeAdapter, V0UnheadThemeAdapter, VirtualAdapter, Vuetify0LocaleAdapter, Vuetify0LoggerAdapter, Vuetify0RtlAdapter, __LOGGER_ENABLED__, apca, clamp, computeDepth, createBreadcrumbs, createBreadcrumbsContext, createBreakpoints, createBreakpointsContext, createBreakpointsPlugin, createCombobox, createComboboxContext, createContext, createDataTable, createDataTableContext, createDate, createDateContext, createDatePlugin, createFallbackHydration, createFeatures, createFeaturesContext, createFeaturesPlugin, createFilter, createFilterContext, createForm, createFormContext, createGroup, createGroupContext, createHydration, createHydrationContext, createHydrationPlugin, createInput, createLocale, createLocaleContext, createLocaleFallback, createLocalePlugin, createLogger, createLoggerContext, createLoggerPlugin, createModel, createNested, createNestedContext, createNotifications, createNotificationsContext, createNotificationsPlugin, createNumberField, createNumeric, createOverflow, createOverflowContext, createPagination, createPaginationContext, createPermissions, createPermissionsContext, createPermissionsPlugin, createPlugin, createPluginContext, createProgress, createProgressContext, createQueue, createQueueContext, createRating, createRatingContext, createRegistry, createRegistryContext, createRtl, createRtlContext, createRtlFallback, createRtlPlugin, createRules, createRulesContext, createRulesFallback, createRulesPlugin, createSelection, createSelectionContext, createSingle, createSingleContext, createSlider, createStack, createStackContext, createStackPlugin, createStep, createStepContext, createStorage, createStorageContext, createStoragePlugin, createTheme, createThemeContext, createThemePlugin, createTimeline, createTimelineContext, createTokens, createTokensContext, createTrinity, createValidation, createVirtual, createVirtualContext, extractLeaves, flatten, foreground, hexToRgb, instanceExists, instanceName, isArray, isBoolean, isElement, isFunction, isNaN, isNull, isNullOrUndefined, isNumber, isObject, isPrimitive, isSelfClosingTag, isStandardSchema, isString, isSymbol, isUndefined, mergeDeep, provideAlertDialogContext, provideAvatarRoot, provideBreadcrumbsRoot, provideButtonGroup, provideButtonRoot, provideCarouselRoot, provideCheckboxGroup, provideCheckboxRoot, provideCollapsible, provideComboboxContext, provideContext, provideDialogContext, provideExpansionPanelGroup, provideExpansionPanelRoot, provideGroupRoot, provideImageRoot, provideInputRoot, provideNumberFieldRoot, provideOverflowRoot, providePaginationControls, providePaginationItems, providePaginationRoot, providePopoverContext, provideProgressRoot, provideRadioGroup, provideRadioRoot, provideRatingRoot, provideSelectContext, provideSelectionRoot, provideSingleRoot, provideSliderRoot, provideSnackbarQueueContext, provideSnackbarRootContext, provideSplitterRoot, provideStepRoot, provideSwitchGroup, provideSwitchRoot, provideTabsRoot, provideToggleGroup, provideToggleRoot, provideTreeviewItem, provideTreeviewList, provideTreeviewRoot, range, resolveHeaders, resolveIds, resolveIndexes, rgbToHex, toArray, toElement, toReactive, useAlertDialogContext, useAvatarRoot, useBreadcrumbs, useBreadcrumbsRoot, useBreakpoints, useButtonGroup, useButtonRoot, useCarouselRoot, useCheckboxGroup, useCheckboxRoot, useClickOutside, useCollapsible, useCombobox, useComboboxContext, useContext, useDataTable, useDate, useDelay, useDialogContext, useDocumentEventListener, useElementIntersection, useElementSize, useEventListener, useExpansionPanelGroup, useExpansionPanelRoot, useFeatures, useFilter, useForm, useGroup, useGroupRoot, useHotkey, useHydration, useId, useImage, useImageRoot, useInputRoot, useIntersectionObserver, useLazy, useLocale, useLogger, useMediaQuery, useMutationObserver, useNested, useNotifications, useNumberFieldRoot, useOverflow, useOverflowRoot, usePagination, usePaginationControls, usePaginationItems, usePaginationRoot, usePermissions, usePopover, usePopoverContext, usePrefersContrast, usePrefersDark, usePrefersReducedMotion, usePresence, useProgress, useProgressRoot, useProxyModel, useProxyRegistry, useQueue, useRadioGroup, useRadioRoot, useRaf, useRating, useRatingRoot, useRegistry, useResizeObserver, useRovingFocus, useRtl, useRules, useSelectContext, useSelection, useSelectionRoot, useSingle, useSingleRoot, useSliderRoot, useSnackbarQueueContext, useSnackbarRootContext, useSplitterRoot, useStack, useStep, useStepRoot, useStorage, useSwitchGroup, useSwitchRoot, useTabsRoot, useTheme, useTimeline, useTimer, useToggleGroup, useToggleRoot, useToggleScope, useTokens, useTreeviewItem, useTreeviewList, useTreeviewRoot, useVirtual, useVirtualFocus, useWindowEventListener, version };
|
|
27786
|
+
export { AlertDialog, _sfc_main as AlertDialogAction, _sfc_main$1 as AlertDialogActivator, _sfc_main$2 as AlertDialogCancel, _sfc_main$3 as AlertDialogClose, _sfc_main$4 as AlertDialogContent, _sfc_main$5 as AlertDialogDescription, _sfc_main$6 as AlertDialogRoot, _sfc_main$7 as AlertDialogTitle, _sfc_main$8 as AspectRatio, _sfc_main$9 as Atom, Avatar, _sfc_main$10 as AvatarFallback, _sfc_main$11 as AvatarImage, _sfc_main$12 as AvatarRoot, Breadcrumbs, _sfc_main$13 as BreadcrumbsDivider, _sfc_main$14 as BreadcrumbsEllipsis, _sfc_main$15 as BreadcrumbsItem, _sfc_main$16 as BreadcrumbsLink, _sfc_main$17 as BreadcrumbsList, _sfc_main$18 as BreadcrumbsPage, _sfc_main$19 as BreadcrumbsRoot, Button, _sfc_main$20 as ButtonContent, _sfc_main$21 as ButtonGroup, _sfc_main$22 as ButtonHiddenInput, _sfc_main$23 as ButtonIcon, _sfc_main$24 as ButtonLoading, _sfc_main$25 as ButtonRoot, Carousel, _sfc_main$26 as CarouselIndicator, _sfc_main$27 as CarouselItem, _sfc_main$28 as CarouselLiveRegion, _sfc_main$29 as CarouselNext, _sfc_main$30 as CarouselPrevious, _sfc_main$31 as CarouselProgress, _sfc_main$32 as CarouselRoot, _sfc_main$33 as CarouselViewport, Checkbox, _sfc_main$34 as CheckboxGroup, _sfc_main$35 as CheckboxHiddenInput, _sfc_main$36 as CheckboxIndicator, _sfc_main$37 as CheckboxRoot, _sfc_main$38 as CheckboxSelectAll, ClientComboboxAdapter, ClientDataTableAdapter, Collapsible, _sfc_main$39 as CollapsibleActivator, _sfc_main$40 as CollapsibleContent, _sfc_main$41 as CollapsibleCue, _sfc_main$42 as CollapsibleRoot, Combobox, _sfc_main$43 as ComboboxActivator, ComboboxAdapter, _sfc_main$44 as ComboboxContent, _sfc_main$45 as ComboboxControl, _sfc_main$46 as ComboboxCue, _sfc_main$47 as ComboboxDescription, _sfc_main$48 as ComboboxEmpty, _sfc_main$49 as ComboboxError, _sfc_main$50 as ComboboxItem, _sfc_main$51 as ComboboxRoot, ConsolaLoggerAdapter, DataTableAdapter, Dialog, _sfc_main$52 as DialogActivator, _sfc_main$53 as DialogClose, _sfc_main$54 as DialogContent, _sfc_main$55 as DialogDescription, _sfc_main$56 as DialogRoot, _sfc_main$57 as DialogTitle, DragDropAdapter, ExpansionPanel, _sfc_main$58 as ExpansionPanelActivator, _sfc_main$59 as ExpansionPanelContent, _sfc_main$60 as ExpansionPanelCue, _sfc_main$61 as ExpansionPanelGroup, _sfc_main$62 as ExpansionPanelHeader, _sfc_main$63 as ExpansionPanelRoot, FeaturesAdapter, _sfc_main$64 as Form, Group, _sfc_main$65 as GroupItem, _sfc_main$66 as GroupRoot, IN_BROWSER, Image, _sfc_main$67 as ImageFallback, _sfc_main$68 as ImageImg, _sfc_main$69 as ImagePlaceholder, _sfc_main$70 as ImageRoot, Input, _sfc_main$71 as InputControl, _sfc_main$72 as InputDescription, _sfc_main$73 as InputError, _sfc_main$74 as InputRoot, KeyboardAdapter, _sfc_main$75 as Locale, LocaleAdapter, LoggerAdapter, MemoryStorageAdapter, NumberField, _sfc_main$76 as NumberFieldControl, _sfc_main$77 as NumberFieldDecrement, _sfc_main$78 as NumberFieldDescription, _sfc_main$79 as NumberFieldError, _sfc_main$80 as NumberFieldIncrement, _sfc_main$81 as NumberFieldRoot, _sfc_main$82 as NumberFieldScrub, Overflow, _sfc_main$83 as OverflowIndicator, _sfc_main$84 as OverflowItem, _sfc_main$85 as OverflowRoot, Pagination, _sfc_main$86 as PaginationEllipsis, _sfc_main$87 as PaginationFirst, _sfc_main$88 as PaginationItem, _sfc_main$89 as PaginationLast, _sfc_main$90 as PaginationNext, _sfc_main$91 as PaginationPrev, _sfc_main$92 as PaginationRoot, _sfc_main$93 as PaginationStatus, PermissionsAdapter, PinoLoggerAdapter, PointerAdapter, Popover, _sfc_main$94 as PopoverActivator, _sfc_main$95 as PopoverContent, _sfc_main$96 as PopoverRoot, _sfc_main$97 as Portal, _sfc_main$98 as Presence, Progress, _sfc_main$99 as ProgressBuffer, _sfc_main$100 as ProgressFill, _sfc_main$101 as ProgressHiddenInput, _sfc_main$102 as ProgressLabel, _sfc_main$103 as ProgressRoot, _sfc_main$104 as ProgressTrack, _sfc_main$105 as ProgressValue, Radio, _sfc_main$106 as RadioGroup, _sfc_main$107 as RadioHiddenInput, _sfc_main$108 as RadioIndicator, _sfc_main$109 as RadioRoot, Rating, _sfc_main$110 as RatingHiddenInput, _sfc_main$111 as RatingItem, _sfc_main$112 as RatingRoot, SELF_CLOSING_TAGS, SUPPORTS_INTERSECTION_OBSERVER, SUPPORTS_MATCH_MEDIA, SUPPORTS_MUTATION_OBSERVER, SUPPORTS_OBSERVER, SUPPORTS_TOUCH, _sfc_main$113 as Scrim, Select, _sfc_main$114 as SelectActivator, _sfc_main$115 as SelectContent, _sfc_main$116 as SelectCue, _sfc_main$117 as SelectItem, _sfc_main$118 as SelectPlaceholder, _sfc_main$119 as SelectRoot, _sfc_main$120 as SelectValue, Selection, _sfc_main$121 as SelectionItem, _sfc_main$122 as SelectionRoot, ServerComboboxAdapter, ServerDataTableAdapter, Single, _sfc_main$123 as SingleItem, _sfc_main$124 as SingleRoot, Slider, _sfc_main$125 as SliderHiddenInput, _sfc_main$126 as SliderRange, _sfc_main$127 as SliderRoot, _sfc_main$128 as SliderThumb, _sfc_main$129 as SliderTrack, Snackbar, _sfc_main$130 as SnackbarClose, _sfc_main$131 as SnackbarContent, _sfc_main$132 as SnackbarPortal, _sfc_main$133 as SnackbarQueue, _sfc_main$134 as SnackbarRoot, Splitter, _sfc_main$135 as SplitterHandle, _sfc_main$136 as SplitterPanel, _sfc_main$137 as SplitterRoot, Step, _sfc_main$138 as StepItem, _sfc_main$139 as StepRoot, StorageAdapter, Switch, _sfc_main$140 as SwitchGroup, _sfc_main$141 as SwitchHiddenInput, _sfc_main$142 as SwitchRoot, _sfc_main$143 as SwitchSelectAll, _sfc_main$144 as SwitchThumb, _sfc_main$145 as SwitchTrack, Tabs, _sfc_main$146 as TabsItem, _sfc_main$147 as TabsList, _sfc_main$148 as TabsPanel, _sfc_main$149 as TabsRoot, _sfc_main$150 as Theme, Toggle, _sfc_main$151 as ToggleGroup, _sfc_main$152 as ToggleIndicator, _sfc_main$153 as ToggleRoot, Treeview, _sfc_main$154 as TreeviewActivator, _sfc_main$155 as TreeviewCheckbox, _sfc_main$156 as TreeviewContent, _sfc_main$157 as TreeviewCue, _sfc_main$158 as TreeviewGroup, _sfc_main$159 as TreeviewIndicator, _sfc_main$160 as TreeviewItem, _sfc_main$161 as TreeviewList, _sfc_main$162 as TreeviewRoot, _sfc_main$163 as TreeviewSelectAll, V0LocaleAdapter, V0LoggerAdapter, V0RtlAdapter, V0StyleSheetThemeAdapter, V0UnheadThemeAdapter, VirtualDataTableAdapter, __LOGGER_ENABLED__, apca, clamp, computeDepth, createBreadcrumbs, createBreadcrumbsContext, createBreakpoints, createBreakpointsContext, createBreakpointsPlugin, createCombobox, createComboboxContext, createContext, createDataTable, createDataTableContext, createDate, createDateContext, createDatePlugin, createFallbackHydration, createFeatures, createFeaturesContext, createFeaturesPlugin, createFilter, createFilterContext, createForm, createFormContext, createGroup, createGroupContext, createHydration, createHydrationContext, createHydrationPlugin, createInput, createKanban, createLocale, createLocaleContext, createLocaleFallback, createLocalePlugin, createLogger, createLoggerContext, createLoggerPlugin, createModel, createNested, createNestedContext, createNotifications, createNotificationsContext, createNotificationsPlugin, createNumberField, createNumeric, createOverflow, createOverflowContext, createPagination, createPaginationContext, createPermissions, createPermissionsContext, createPermissionsPlugin, createPlugin, createPluginContext, createProgress, createProgressContext, createQueue, createQueueContext, createRating, createRatingContext, createRegistry, createRegistryContext, createRtl, createRtlContext, createRtlFallback, createRtlPlugin, createRules, createRulesContext, createRulesFallback, createRulesPlugin, createSelection, createSelectionContext, createSingle, createSingleContext, createSlider, createSortable, createStack, createStackContext, createStackPlugin, createStep, createStepContext, createStorage, createStorageContext, createStoragePlugin, createTheme, createThemeContext, createThemePlugin, createTimeline, createTimelineContext, createTokens, createTokensContext, createTrinity, createValidation, createVirtual, createVirtualContext, extractLeaves, flatten, foreground, hexToRgb, instanceExists, instanceName, isArray, isBoolean, isElement, isFunction, isNaN, isNull, isNullOrUndefined, isNumber, isObject, isPrimitive, isSelfClosingTag, isStandardSchema, isString, isSymbol, isThenable, isUndefined, mergeDeep, provideAlertDialogContext, provideAvatarRoot, provideBreadcrumbsRoot, provideButtonGroup, provideButtonRoot, provideCarouselRoot, provideCheckboxGroup, provideCheckboxRoot, provideCollapsible, provideComboboxContext, provideContext, provideDialogContext, provideExpansionPanelGroup, provideExpansionPanelRoot, provideGroupRoot, provideImageRoot, provideInputRoot, provideNumberFieldRoot, provideOverflowRoot, providePaginationControls, providePaginationItems, providePaginationRoot, providePopoverContext, provideProgressRoot, provideRadioGroup, provideRadioRoot, provideRatingRoot, provideSelectContext, provideSelectionRoot, provideSingleRoot, provideSliderRoot, provideSnackbarQueueContext, provideSnackbarRootContext, provideSplitterRoot, provideStepRoot, provideSwitchGroup, provideSwitchRoot, provideTabsRoot, provideToggleGroup, provideToggleRoot, provideTreeviewItem, provideTreeviewList, provideTreeviewRoot, range, resolveHeaders, resolveIds, resolveIndexes, rgbToHex, toArray, toElement, toReactive, useAlertDialogContext, useAvatarRoot, useBreadcrumbs, useBreadcrumbsRoot, useBreakpoints, useButtonGroup, useButtonRoot, useCarouselRoot, useCheckboxGroup, useCheckboxRoot, useClickOutside, useCollapsible, useCombobox, useComboboxContext, useContext, useDataTable, useDate, useDelay, useDialogContext, useDocumentEventListener, useDragDrop, useElementIntersection, useElementSize, useEventListener, useExpansionPanelGroup, useExpansionPanelRoot, useFeatures, useFilter, useForm, useGroup, useGroupRoot, useHotkey, useHydration, useId, useImage, useImageRoot, useInputRoot, useIntersectionObserver, useLazy, useLocale, useLogger, useMediaQuery, useMutationObserver, useNested, useNotifications, useNumberFieldRoot, useOverflow, useOverflowRoot, usePagination, usePaginationControls, usePaginationItems, usePaginationRoot, usePermissions, usePopover, usePopoverContext, usePrefersContrast, usePrefersDark, usePrefersReducedMotion, usePresence, useProgress, useProgressRoot, useProxyModel, useProxyRegistry, useQueue, useRadioGroup, useRadioRoot, useRaf, useRating, useRatingRoot, useRegistry, useResizeObserver, useRovingFocus, useRtl, useRules, useSelectContext, useSelection, useSelectionRoot, useSingle, useSingleRoot, useSliderRoot, useSnackbarQueueContext, useSnackbarRootContext, useSplitterRoot, useStack, useStep, useStepRoot, useStorage, useSwitchGroup, useSwitchRoot, useTabsRoot, useTheme, useTimeline, useTimer, useToggleGroup, useToggleRoot, useToggleScope, useTokens, useTreeviewItem, useTreeviewList, useTreeviewRoot, useVirtual, useVirtualFocus, useWindowEventListener, version };
|