@vuetify/v0 0.1.8 → 0.1.9
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/SKILL.md +95 -0
- package/dist/adapter-CWp5eQ6R.d.mts +17 -0
- package/dist/{adapter-DIx4Rntl.d.mts → adapter-hDuQ9aNN.d.mts} +4 -4
- package/dist/browser/index.js +1352 -360
- package/dist/components/index.d.mts +2 -2
- package/dist/components/index.mjs +23 -23
- package/dist/{components-BbxKYAXs.mjs → components-mSy9az8x.mjs} +456 -231
- package/dist/composables/index.d.mts +16 -15
- package/dist/composables/index.mjs +22 -22
- package/dist/{consola-BVzYzeLH.d.mts → consola-C1OjyZVf.d.mts} +1 -1
- package/dist/constants/index.d.mts +1 -1
- package/dist/constants/index.mjs +1 -1
- package/dist/{createDataTable-DZouEhvH.mjs → createDataTable-DIl09siC.mjs} +5 -5
- package/dist/{createGroup-BpJFi41X.mjs → createGroup-PvzsLu9E.mjs} +1 -1
- package/dist/{createPagination-Bu8vE0JW.mjs → createPagination-DZSJ8aO5.mjs} +5 -5
- package/dist/{createSelection-8MX0OHXR.mjs → createSelection-DbWP6c7H.mjs} +1 -1
- package/dist/{createSingle-CbuOBb-E.mjs → createSingle-CeAJpbXs.mjs} +6 -6
- package/dist/{createTokens-CXlT0Vc6.mjs → createTokens-C1gIuKCK.mjs} +25 -4
- package/dist/data-table/adapters/client/index.d.mts +1 -1
- package/dist/data-table/adapters/client/index.mjs +3 -3
- package/dist/data-table/adapters/index.d.mts +4 -4
- package/dist/data-table/adapters/index.mjs +5 -5
- package/dist/data-table/adapters/server/index.d.mts +1 -1
- package/dist/data-table/adapters/server/index.mjs +3 -3
- package/dist/data-table/adapters/virtual/index.d.mts +1 -1
- package/dist/data-table/adapters/virtual/index.mjs +3 -3
- package/dist/data-table/index.d.mts +5 -5
- package/dist/data-table/index.mjs +14 -14
- package/dist/date/index.mjs +1 -1
- package/dist/features/adapters/posthog/index.mjs +2 -2
- package/dist/features/index.d.mts +1 -1
- package/dist/features/index.mjs +8 -8
- package/dist/{globals-ClSU6mqC.mjs → globals-3i9umzyz.mjs} +1 -1
- package/dist/{index-CxW4itj1.d.mts → index-BoK8Ln2f.d.mts} +1 -1
- package/dist/{index-B5NU2uB7.d.mts → index-C5XZRWlO.d.mts} +506 -166
- package/dist/{index-CmCMrlt3.d.mts → index-CLDBngUs.d.mts} +1 -1
- package/dist/{index-63-0oJS8.d.mts → index-D0qnkRbl.d.mts} +389 -183
- package/dist/index.d.mts +19 -18
- package/dist/index.mjs +23 -23
- package/dist/json/attributes.json +60 -0
- package/dist/json/importMap.json +24 -0
- package/dist/json/tags.json +40 -0
- package/dist/json/web-types.json +221 -1
- package/dist/locale/adapters/index.d.mts +3 -2
- package/dist/locale/adapters/index.mjs +2 -2
- package/dist/locale/adapters/v0/index.d.mts +1 -1
- package/dist/locale/adapters/v0/index.mjs +2 -2
- package/dist/locale/adapters/vue-i18n/index.d.mts +22 -0
- package/dist/locale/adapters/vue-i18n/index.mjs +26 -0
- package/dist/locale/index.d.mts +4 -3
- package/dist/locale/index.mjs +8 -9
- package/dist/logger/adapters/consola/index.d.mts +1 -1
- package/dist/logger/adapters/index.d.mts +4 -4
- package/dist/logger/adapters/index.mjs +2 -2
- 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 +1 -1
- package/dist/logger/adapters/v0/index.mjs +2 -2
- package/dist/logger/index.d.mts +5 -5
- package/dist/logger/index.mjs +3 -3
- package/dist/notifications/index.d.mts +78 -0
- package/dist/notifications/index.mjs +215 -0
- package/dist/palettes/ant/index.d.mts +1 -1
- package/dist/palettes/index.d.mts +2 -2
- 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 +1 -1
- package/dist/permissions/adapters/v0/index.d.mts +1 -1
- package/dist/permissions/adapters/v0/index.mjs +1 -1
- package/dist/permissions/index.d.mts +1 -1
- package/dist/permissions/index.mjs +5 -5
- package/dist/{pino-Bzighnkd.d.mts → pino-CM1iLXmi.d.mts} +1 -1
- package/dist/{posthog-BE7-t7cV.mjs → posthog-CCQFQ5XD.mjs} +1 -1
- package/dist/rules/index.d.mts +1 -1
- package/dist/rules/index.mjs +9 -10
- package/dist/{server-Ch9J86tb.d.mts → server-Ct-h4-OA.d.mts} +1 -1
- package/dist/{server-CZ6ahbEH.mjs → server-DHET3KNW.mjs} +1 -1
- package/dist/storage/adapters/index.d.mts +2 -2
- package/dist/storage/adapters/memory/index.d.mts +1 -1
- package/dist/storage/index.d.mts +3 -3
- package/dist/storage/index.mjs +21 -21
- package/dist/theme/adapters/index.d.mts +1 -1
- package/dist/theme/adapters/index.mjs +2 -2
- package/dist/theme/adapters/v0/index.d.mts +1 -1
- package/dist/theme/adapters/v0/index.mjs +2 -2
- package/dist/theme/index.d.mts +1 -1
- package/dist/theme/index.mjs +8 -8
- package/dist/{useClickOutside-W0Sur1rC.mjs → useClickOutside-hOhNk4eS.mjs} +860 -126
- package/dist/{useFeatures-CUicSI-E.mjs → useFeatures-CXRQvucQ.mjs} +3 -3
- package/dist/useLocale-BaufqE5Z.mjs +69 -0
- package/dist/{useLogger-DY1Hbcy1.mjs → useLogger-cGK00Ywd.mjs} +2 -2
- package/dist/{usePermissions-BSW59R4q.mjs → usePermissions-CR0HkjsF.mjs} +2 -2
- package/dist/{useRules-BbA6_gvs.mjs → useRules-LD-_-Hxt.mjs} +2 -2
- package/dist/{useTheme-Bdx2Lj5c.mjs → useTheme-Cs79AFNR.mjs} +5 -5
- package/dist/utilities/index.d.mts +1 -1
- package/dist/utilities/index.mjs +2 -1
- package/dist/{v0-BFseIsBi.mjs → v0-BJYwZgtp.mjs} +1 -1
- package/dist/v0-BdD1F6JK.d.mts +19 -0
- package/dist/{v0-YAqbXudL.mjs → v0-BoWQ8RK0.mjs} +1 -1
- package/dist/{v0-CdUL2eOn.d.mts → v0-CMeh39LQ.d.mts} +1 -1
- package/dist/v0-CehUknHv.mjs +62 -0
- package/dist/{v0-BZINNGoC.d.mts → v0-DFAgNbvC.d.mts} +1 -1
- package/dist/{v0-1xxC39wf.d.mts → v0-JPf99NKg.d.mts} +1 -1
- package/dist/{v0-2G2476h-.mjs → v0-Zu7neOYg.mjs} +1 -1
- package/dist/{virtual-DwBiFA25.d.mts → virtual-B1lRbO7Q.d.mts} +1 -1
- package/dist/{virtual-eDNVH1fz.mjs → virtual-D0_D5gkh.mjs} +1 -1
- package/package.json +11 -4
- package/dist/useLocale-cQlPxbpV.mjs +0 -87
- package/dist/v0-CAKa6tzG.d.mts +0 -22
- package/dist/v0-CHBrvw49.mjs +0 -35
- /package/dist/{adapter-JTFG3Jn8.d.mts → adapter-CJQav2JB.d.mts} +0 -0
- /package/dist/{index-MHkcqY_y.d.mts → index-BL4uTXWQ.d.mts} +0 -0
- /package/dist/{index-B5ZDDkXv.d.mts → index-BvTD7kU8.d.mts} +0 -0
- /package/dist/{index-NsE5nARK.d.mts → index-DSao7i57.d.mts} +0 -0
- /package/dist/{memory-BTtRdnNn.d.mts → memory-DyBabFV1.d.mts} +0 -0
package/dist/browser/index.js
CHANGED
|
@@ -81,7 +81,7 @@ const SUPPORTS_MATCH_MEDIA = IN_BROWSER && "matchMedia" in window && typeof wind
|
|
|
81
81
|
const SUPPORTS_OBSERVER = IN_BROWSER && "ResizeObserver" in window;
|
|
82
82
|
const SUPPORTS_INTERSECTION_OBSERVER = IN_BROWSER && "IntersectionObserver" in window;
|
|
83
83
|
const SUPPORTS_MUTATION_OBSERVER = IN_BROWSER && "MutationObserver" in window;
|
|
84
|
-
const version = "0.1.
|
|
84
|
+
const version = "0.1.9";
|
|
85
85
|
/* v8 ignore next -- build-time constant, __DEV__ short-circuits in tests */
|
|
86
86
|
const __LOGGER_ENABLED__ = false;
|
|
87
87
|
//#endregion
|
|
@@ -397,6 +397,7 @@ function mergeDeep(target, ...sources) {
|
|
|
397
397
|
if (UNSAFE_KEYS.has(key)) continue;
|
|
398
398
|
if (!Object.prototype.hasOwnProperty.call(source, key)) continue;
|
|
399
399
|
const sourceValue = source[key];
|
|
400
|
+
if (/* @__PURE__ */ isUndefined(sourceValue)) continue;
|
|
400
401
|
const targetValue = target[key];
|
|
401
402
|
if (/* @__PURE__ */ isObject(sourceValue)) {
|
|
402
403
|
if (!/* @__PURE__ */ isObject(targetValue)) Object.assign(target, { [key]: {} });
|
|
@@ -1203,7 +1204,7 @@ function createRegistry(options) {
|
|
|
1203
1204
|
function get(id) {
|
|
1204
1205
|
return collection.get(id);
|
|
1205
1206
|
}
|
|
1206
|
-
function upsert(id, patch = {}) {
|
|
1207
|
+
function upsert(id, patch = {}, event) {
|
|
1207
1208
|
const existing = get(id);
|
|
1208
1209
|
if (!existing) return register({
|
|
1209
1210
|
...patch,
|
|
@@ -1238,6 +1239,7 @@ function createRegistry(options) {
|
|
|
1238
1239
|
collection.set(id, updated);
|
|
1239
1240
|
invalidate();
|
|
1240
1241
|
emit("update:ticket", updated);
|
|
1242
|
+
if (event) emit(event, id);
|
|
1241
1243
|
return updated;
|
|
1242
1244
|
}
|
|
1243
1245
|
function browse(value) {
|
|
@@ -1377,10 +1379,10 @@ function createRegistry(options) {
|
|
|
1377
1379
|
unassign(ticket.value, ticket.id);
|
|
1378
1380
|
const willReindex = indexDependentCount > 0 && ticket.index < collection.size;
|
|
1379
1381
|
if (!willReindex) invalidate();
|
|
1380
|
-
emit("unregister:ticket", ticket);
|
|
1381
1382
|
minDirtyIndex = Math.min(minDirtyIndex, ticket.index);
|
|
1382
1383
|
if (willReindex) reindex();
|
|
1383
1384
|
else needsReindex = true;
|
|
1385
|
+
emit("unregister:ticket", ticket);
|
|
1384
1386
|
}
|
|
1385
1387
|
function offboard(ids) {
|
|
1386
1388
|
batch(() => {
|
|
@@ -2153,10 +2155,10 @@ function createSingle(_options = {}) {
|
|
|
2153
2155
|
mandatory,
|
|
2154
2156
|
multiple
|
|
2155
2157
|
});
|
|
2156
|
-
const selectedId =
|
|
2157
|
-
const selectedItem =
|
|
2158
|
-
const selectedIndex =
|
|
2159
|
-
const selectedValue =
|
|
2158
|
+
const selectedId = toRef(() => registry.selectedIds.values().next().value);
|
|
2159
|
+
const selectedItem = toRef(() => registry.selectedItems.value.values().next().value);
|
|
2160
|
+
const selectedIndex = toRef(() => selectedItem.value?.index ?? -1);
|
|
2161
|
+
const selectedValue = toRef(() => selectedItem.value?.value);
|
|
2160
2162
|
function unselect(id) {
|
|
2161
2163
|
registry.unselect(id);
|
|
2162
2164
|
}
|
|
@@ -3428,7 +3430,7 @@ function createTokens(tokens = {}, options = {}) {
|
|
|
3428
3430
|
cache.set(cacheKey, result);
|
|
3429
3431
|
return result;
|
|
3430
3432
|
}
|
|
3431
|
-
const { register: _register, upsert: _upsert, unregister: _unregister } = registry;
|
|
3433
|
+
const { register: _register, upsert: _upsert, unregister: _unregister, onboard: _onboard, offboard: _offboard, move: _move, clear: _clear } = registry;
|
|
3432
3434
|
function register(registration) {
|
|
3433
3435
|
cache.clear();
|
|
3434
3436
|
return _register(registration);
|
|
@@ -3441,11 +3443,31 @@ function createTokens(tokens = {}, options = {}) {
|
|
|
3441
3443
|
cache.clear();
|
|
3442
3444
|
return _unregister(id);
|
|
3443
3445
|
}
|
|
3446
|
+
function onboard(registrations) {
|
|
3447
|
+
cache.clear();
|
|
3448
|
+
return _onboard(registrations);
|
|
3449
|
+
}
|
|
3450
|
+
function offboard(ids) {
|
|
3451
|
+
cache.clear();
|
|
3452
|
+
return _offboard(ids);
|
|
3453
|
+
}
|
|
3454
|
+
function move(id, index) {
|
|
3455
|
+
cache.clear();
|
|
3456
|
+
return _move(id, index);
|
|
3457
|
+
}
|
|
3458
|
+
function clear() {
|
|
3459
|
+
cache.clear();
|
|
3460
|
+
return _clear();
|
|
3461
|
+
}
|
|
3444
3462
|
return {
|
|
3445
3463
|
...registry,
|
|
3446
3464
|
register,
|
|
3447
3465
|
upsert,
|
|
3448
3466
|
unregister,
|
|
3467
|
+
onboard,
|
|
3468
|
+
offboard,
|
|
3469
|
+
move,
|
|
3470
|
+
clear,
|
|
3449
3471
|
resolve,
|
|
3450
3472
|
isAlias,
|
|
3451
3473
|
get size() {
|
|
@@ -3586,33 +3608,60 @@ function flatten(tokens, prefix = "", flat = false) {
|
|
|
3586
3608
|
//#endregion
|
|
3587
3609
|
//#region src/composables/useLocale/adapters/v0.ts
|
|
3588
3610
|
/**
|
|
3589
|
-
*
|
|
3611
|
+
* Default locale adapter for @vuetify/v0.
|
|
3590
3612
|
*
|
|
3591
|
-
*
|
|
3592
|
-
*
|
|
3593
|
-
* numbered ({0}, {1}) and named ({name}) variables in translation strings.
|
|
3613
|
+
* Handles the full translation pipeline: key lookup via tokens,
|
|
3614
|
+
* fallback chain, token reference resolution, and placeholder interpolation.
|
|
3594
3615
|
*/
|
|
3595
3616
|
var Vuetify0LocaleAdapter = class {
|
|
3596
|
-
|
|
3597
|
-
|
|
3598
|
-
|
|
3599
|
-
|
|
3600
|
-
|
|
3617
|
+
context;
|
|
3618
|
+
constructor(context) {
|
|
3619
|
+
this.context = context;
|
|
3620
|
+
}
|
|
3621
|
+
t(key, ...params) {
|
|
3622
|
+
const locale = this.context.selectedId.value;
|
|
3623
|
+
if (!locale) return this.interpolate(key, params);
|
|
3624
|
+
const message = this.context.tokens.get(`${locale}.${key}`)?.value;
|
|
3625
|
+
if (/* @__PURE__ */ isString(message)) return this.interpolate(this.resolve(locale, message), params);
|
|
3626
|
+
if (this.context.fallbackLocale) {
|
|
3627
|
+
const fbMessage = this.context.tokens.get(`${this.context.fallbackLocale}.${key}`)?.value;
|
|
3628
|
+
if (/* @__PURE__ */ isString(fbMessage)) return this.interpolate(this.resolve(this.context.fallbackLocale, fbMessage), params);
|
|
3629
|
+
}
|
|
3630
|
+
return this.interpolate(key, params);
|
|
3631
|
+
}
|
|
3632
|
+
n(value) {
|
|
3633
|
+
const locale = this.context.selectedId.value;
|
|
3634
|
+
if (!IN_BROWSER || !locale) return value.toString();
|
|
3635
|
+
return new Intl.NumberFormat(String(locale)).format(value);
|
|
3636
|
+
}
|
|
3637
|
+
resolve(locale, str, visited = /* @__PURE__ */ new Set()) {
|
|
3638
|
+
return str.replace(/{([a-zA-Z0-9.\-_]+)}/g, (match, key) => {
|
|
3639
|
+
const [prefix, ...rest] = key.split(".");
|
|
3640
|
+
const target = this.context.has(prefix) ? prefix : locale;
|
|
3641
|
+
const path = `${target}.${this.context.has(prefix) ? rest.join(".") : key}`;
|
|
3642
|
+
if (visited.has(path)) return match;
|
|
3643
|
+
visited.add(path);
|
|
3644
|
+
const resolved = this.context.tokens.get(path)?.value;
|
|
3645
|
+
if (/* @__PURE__ */ isString(resolved)) return this.resolve(target, resolved, visited);
|
|
3646
|
+
return match;
|
|
3647
|
+
});
|
|
3648
|
+
}
|
|
3649
|
+
interpolate(message, args) {
|
|
3650
|
+
let result = message;
|
|
3651
|
+
let rest = args;
|
|
3652
|
+
if (rest.length > 0 && /* @__PURE__ */ isObject(rest[0])) {
|
|
3653
|
+
const variables = rest[0];
|
|
3654
|
+
result = result.replace(/{([a-zA-Z][a-zA-Z0-9_]*)}/g, (match, name) => {
|
|
3601
3655
|
return /* @__PURE__ */ isUndefined(variables[name]) ? match : String(variables[name]);
|
|
3602
3656
|
});
|
|
3603
|
-
|
|
3657
|
+
rest = rest.slice(1);
|
|
3604
3658
|
}
|
|
3605
|
-
|
|
3606
|
-
const
|
|
3607
|
-
if (!/* @__PURE__ */ isUndefined(
|
|
3659
|
+
result = result.replace(/\{(\d+)\}/g, (match, index) => {
|
|
3660
|
+
const i = Number.parseInt(index, 10);
|
|
3661
|
+
if (!/* @__PURE__ */ isUndefined(rest[i])) return String(rest[i]);
|
|
3608
3662
|
return match;
|
|
3609
3663
|
});
|
|
3610
|
-
return
|
|
3611
|
-
}
|
|
3612
|
-
n(value, locale, ...params) {
|
|
3613
|
-
if (!IN_BROWSER || !locale) return value.toString();
|
|
3614
|
-
const options = params[0];
|
|
3615
|
-
return new Intl.NumberFormat(String(locale), options).format(value);
|
|
3664
|
+
return result;
|
|
3616
3665
|
}
|
|
3617
3666
|
};
|
|
3618
3667
|
//#endregion
|
|
@@ -3643,40 +3692,24 @@ var Vuetify0LocaleAdapter = class {
|
|
|
3643
3692
|
* @see https://0.vuetifyjs.com/composables/plugins/use-locale
|
|
3644
3693
|
*/
|
|
3645
3694
|
function createLocale(_options = {}) {
|
|
3646
|
-
const { adapter
|
|
3695
|
+
const { adapter: externalAdapter, messages = {}, fallback: fallbackLocale, ...options } = _options;
|
|
3647
3696
|
const tokens = createTokens(messages);
|
|
3648
3697
|
const registry = createSingle(options);
|
|
3649
3698
|
for (const id in messages) {
|
|
3650
3699
|
registry.register({ id });
|
|
3651
3700
|
if (id === options.default && !registry.selectedId.value) registry.select(id);
|
|
3652
3701
|
}
|
|
3653
|
-
|
|
3654
|
-
|
|
3655
|
-
|
|
3656
|
-
|
|
3657
|
-
|
|
3658
|
-
|
|
3659
|
-
|
|
3660
|
-
|
|
3661
|
-
const fbMessage = tokens.get(`${fallbackLocale}.${key}`)?.value;
|
|
3662
|
-
if (/* @__PURE__ */ isString(fbMessage)) return adapter.t(resolve(fallbackLocale, fbMessage), ...args);
|
|
3663
|
-
}
|
|
3664
|
-
return adapter.t(fallback ?? key, ...args);
|
|
3702
|
+
const adapter = externalAdapter ?? new Vuetify0LocaleAdapter({
|
|
3703
|
+
tokens,
|
|
3704
|
+
selectedId: registry.selectedId,
|
|
3705
|
+
fallbackLocale,
|
|
3706
|
+
has: (id) => registry.has(id)
|
|
3707
|
+
});
|
|
3708
|
+
function t(key, ...params) {
|
|
3709
|
+
return adapter.t(key, ...params);
|
|
3665
3710
|
}
|
|
3666
|
-
function n(value
|
|
3667
|
-
return adapter.n(value
|
|
3668
|
-
}
|
|
3669
|
-
function resolve(locale, str, visited = /* @__PURE__ */ new Set()) {
|
|
3670
|
-
return str.replace(/{([a-zA-Z0-9.-_]+)}/g, (match, key) => {
|
|
3671
|
-
const [prefix, ...rest] = key.split(".");
|
|
3672
|
-
const target = registry.has(prefix) ? prefix : locale;
|
|
3673
|
-
const path = `${target}.${registry.has(prefix) ? rest.join(".") : key}`;
|
|
3674
|
-
if (visited.has(path)) return match;
|
|
3675
|
-
visited.add(path);
|
|
3676
|
-
const resolved = tokens.get(path)?.value;
|
|
3677
|
-
if (/* @__PURE__ */ isString(resolved)) return resolve(target, resolved, visited);
|
|
3678
|
-
return match;
|
|
3679
|
-
});
|
|
3711
|
+
function n(value) {
|
|
3712
|
+
return adapter.n(value);
|
|
3680
3713
|
}
|
|
3681
3714
|
return {
|
|
3682
3715
|
...registry,
|
|
@@ -3690,7 +3723,7 @@ function createLocale(_options = {}) {
|
|
|
3690
3723
|
function createLocaleFallback() {
|
|
3691
3724
|
return {
|
|
3692
3725
|
size: 0,
|
|
3693
|
-
t: (key
|
|
3726
|
+
t: (key) => key,
|
|
3694
3727
|
n: String
|
|
3695
3728
|
};
|
|
3696
3729
|
}
|
|
@@ -3821,7 +3854,7 @@ const _sfc_main$10 = /* @__PURE__ */ defineComponent({
|
|
|
3821
3854
|
prev: breadcrumbs.prev,
|
|
3822
3855
|
select: breadcrumbs.select,
|
|
3823
3856
|
attrs: {
|
|
3824
|
-
"aria-label": __props.label ?? locale.t("Breadcrumbs.label"
|
|
3857
|
+
"aria-label": __props.label ?? locale.t("Breadcrumbs.label"),
|
|
3825
3858
|
"role": __props.as === "nav" ? void 0 : "navigation"
|
|
3826
3859
|
}
|
|
3827
3860
|
}));
|
|
@@ -4131,7 +4164,8 @@ function useProxyModel(context, model, options) {
|
|
|
4131
4164
|
const modelAsArray = transformIn(model);
|
|
4132
4165
|
const pending = new Set(modelAsArray);
|
|
4133
4166
|
context.apply(modelAsArray, applyOptions);
|
|
4134
|
-
|
|
4167
|
+
const selected = new Set(context.selectedValues.value);
|
|
4168
|
+
for (const value of modelAsArray) if (selected.has(value)) pending.delete(value);
|
|
4135
4169
|
const contextWatch = watch(context.selectedValues, (val) => {
|
|
4136
4170
|
modelWatch.pause();
|
|
4137
4171
|
model.value = transformOut(Array.from(toValue(val)));
|
|
@@ -4729,10 +4763,10 @@ function createPagination(_options = {}) {
|
|
|
4729
4763
|
else if (value > pages.value) page.value = Math.max(1, pages.value);
|
|
4730
4764
|
else page.value = value;
|
|
4731
4765
|
}
|
|
4732
|
-
const isFirst =
|
|
4733
|
-
const isLast =
|
|
4734
|
-
const pageStart =
|
|
4735
|
-
const pageStop =
|
|
4766
|
+
const isFirst = toRef(() => page.value <= 1);
|
|
4767
|
+
const isLast = toRef(() => page.value >= pages.value);
|
|
4768
|
+
const pageStart = toRef(() => (page.value - 1) * toValue(_itemsPerPage));
|
|
4769
|
+
const pageStop = toRef(() => Math.min(pageStart.value + toValue(_itemsPerPage), toValue(_size)));
|
|
4736
4770
|
function toPage(value) {
|
|
4737
4771
|
return {
|
|
4738
4772
|
type: "page",
|
|
@@ -5323,8 +5357,8 @@ function createDataTable(options) {
|
|
|
5323
5357
|
function setNone() {
|
|
5324
5358
|
group.unselect(key);
|
|
5325
5359
|
group.unmix(key);
|
|
5326
|
-
const
|
|
5327
|
-
if (
|
|
5360
|
+
const index = order.indexOf(key);
|
|
5361
|
+
if (index !== -1) order.splice(index, 1);
|
|
5328
5362
|
}
|
|
5329
5363
|
if (!isAsc && !isDesc) {
|
|
5330
5364
|
clearOthers();
|
|
@@ -5832,24 +5866,22 @@ function createBreakpoints(_options = {}) {
|
|
|
5832
5866
|
const mdAndUp = shallowRef(initialIndex >= 2);
|
|
5833
5867
|
const lgAndUp = shallowRef(initialIndex >= 3);
|
|
5834
5868
|
const xlAndUp = shallowRef(initialIndex >= 4);
|
|
5835
|
-
const xxlAndUp = shallowRef(initialIndex >= 5);
|
|
5836
5869
|
const smAndDown = shallowRef(initialIndex <= 1);
|
|
5837
5870
|
const mdAndDown = shallowRef(initialIndex <= 2);
|
|
5838
5871
|
const lgAndDown = shallowRef(initialIndex <= 3);
|
|
5839
5872
|
const xlAndDown = shallowRef(initialIndex <= 4);
|
|
5840
|
-
const xxlAndDown = shallowRef(initialIndex <= 5);
|
|
5841
5873
|
function update() {
|
|
5842
5874
|
if (!IN_BROWSER) return;
|
|
5843
5875
|
width.value = window.innerWidth;
|
|
5844
5876
|
height.value = window.innerHeight;
|
|
5845
5877
|
let current = "xs";
|
|
5846
|
-
for (let i = sorted.length - 1; i >= 0; i--) if (width
|
|
5878
|
+
for (let i = sorted.length - 1; i >= 0; i--) if (window.matchMedia(`(min-width: ${sorted[i][1]}px)`).matches) {
|
|
5847
5879
|
current = sorted[i][0];
|
|
5848
5880
|
break;
|
|
5849
5881
|
}
|
|
5850
5882
|
name.value = current;
|
|
5851
5883
|
const index = names.indexOf(current);
|
|
5852
|
-
isMobile.value = width.
|
|
5884
|
+
isMobile.value = /* @__PURE__ */ isNumber(mb) ? !window.matchMedia(`(min-width: ${mb}px)`).matches : index < names.indexOf(mobileBreakpoint);
|
|
5853
5885
|
xs.value = index === 0;
|
|
5854
5886
|
sm.value = index === 1;
|
|
5855
5887
|
md.value = index === 2;
|
|
@@ -5860,12 +5892,10 @@ function createBreakpoints(_options = {}) {
|
|
|
5860
5892
|
mdAndUp.value = index >= 2;
|
|
5861
5893
|
lgAndUp.value = index >= 3;
|
|
5862
5894
|
xlAndUp.value = index >= 4;
|
|
5863
|
-
xxlAndUp.value = index >= 5;
|
|
5864
5895
|
smAndDown.value = index <= 1;
|
|
5865
5896
|
mdAndDown.value = index <= 2;
|
|
5866
5897
|
lgAndDown.value = index <= 3;
|
|
5867
5898
|
xlAndDown.value = index <= 4;
|
|
5868
|
-
xxlAndDown.value = index <= 5;
|
|
5869
5899
|
}
|
|
5870
5900
|
return {
|
|
5871
5901
|
breakpoints,
|
|
@@ -5884,12 +5914,10 @@ function createBreakpoints(_options = {}) {
|
|
|
5884
5914
|
mdAndUp: readonly(mdAndUp),
|
|
5885
5915
|
lgAndUp: readonly(lgAndUp),
|
|
5886
5916
|
xlAndUp: readonly(xlAndUp),
|
|
5887
|
-
xxlAndUp: readonly(xxlAndUp),
|
|
5888
5917
|
smAndDown: readonly(smAndDown),
|
|
5889
5918
|
mdAndDown: readonly(mdAndDown),
|
|
5890
5919
|
lgAndDown: readonly(lgAndDown),
|
|
5891
5920
|
xlAndDown: readonly(xlAndDown),
|
|
5892
|
-
xxlAndDown: readonly(xxlAndDown),
|
|
5893
5921
|
ssr: isSSR,
|
|
5894
5922
|
update
|
|
5895
5923
|
};
|
|
@@ -5903,8 +5931,8 @@ function createBreakpointsFallback(options = {}) {
|
|
|
5903
5931
|
name: readonly(shallowRef("xs")),
|
|
5904
5932
|
width: readonly(shallowRef(0)),
|
|
5905
5933
|
height: readonly(shallowRef(0)),
|
|
5906
|
-
isMobile: readonly(shallowRef(
|
|
5907
|
-
xs: readonly(shallowRef(
|
|
5934
|
+
isMobile: readonly(shallowRef(true)),
|
|
5935
|
+
xs: readonly(shallowRef(true)),
|
|
5908
5936
|
sm: readonly(shallowRef(false)),
|
|
5909
5937
|
md: readonly(shallowRef(false)),
|
|
5910
5938
|
lg: readonly(shallowRef(false)),
|
|
@@ -5914,12 +5942,10 @@ function createBreakpointsFallback(options = {}) {
|
|
|
5914
5942
|
mdAndUp: readonly(shallowRef(false)),
|
|
5915
5943
|
lgAndUp: readonly(shallowRef(false)),
|
|
5916
5944
|
xlAndUp: readonly(shallowRef(false)),
|
|
5917
|
-
|
|
5918
|
-
|
|
5919
|
-
|
|
5920
|
-
|
|
5921
|
-
xlAndDown: readonly(shallowRef(false)),
|
|
5922
|
-
xxlAndDown: readonly(shallowRef(false)),
|
|
5945
|
+
smAndDown: readonly(shallowRef(true)),
|
|
5946
|
+
mdAndDown: readonly(shallowRef(true)),
|
|
5947
|
+
lgAndDown: readonly(shallowRef(true)),
|
|
5948
|
+
xlAndDown: readonly(shallowRef(true)),
|
|
5923
5949
|
ssr: false,
|
|
5924
5950
|
update: () => {}
|
|
5925
5951
|
};
|
|
@@ -6951,6 +6977,132 @@ function useElementIntersection(target, options = {}) {
|
|
|
6951
6977
|
};
|
|
6952
6978
|
}
|
|
6953
6979
|
//#endregion
|
|
6980
|
+
//#region src/composables/useTimer/index.ts
|
|
6981
|
+
/**
|
|
6982
|
+
* @module useTimer
|
|
6983
|
+
*
|
|
6984
|
+
* @remarks
|
|
6985
|
+
* A reactive timer composable with pause/resume support.
|
|
6986
|
+
*
|
|
6987
|
+
* Key features:
|
|
6988
|
+
* - Start/stop/pause/resume controls
|
|
6989
|
+
* - Reactive remaining time tracking
|
|
6990
|
+
* - One-shot (default) or repeating mode
|
|
6991
|
+
* - Automatic cleanup on scope disposal
|
|
6992
|
+
* - SSR-safe
|
|
6993
|
+
*/
|
|
6994
|
+
/**
|
|
6995
|
+
* Creates a reactive timer with pause/resume support.
|
|
6996
|
+
*
|
|
6997
|
+
* @param handler Callback invoked when the timer fires.
|
|
6998
|
+
* @param options Timer configuration.
|
|
6999
|
+
* @returns Timer controls and reactive state.
|
|
7000
|
+
*
|
|
7001
|
+
* @see https://0.vuetifyjs.com/composables/system/use-timer
|
|
7002
|
+
*
|
|
7003
|
+
* @example
|
|
7004
|
+
* ```ts
|
|
7005
|
+
* const timer = useTimer(() => console.log('fired'), { duration: 5000 })
|
|
7006
|
+
*
|
|
7007
|
+
* timer.start()
|
|
7008
|
+
* timer.pause()
|
|
7009
|
+
* timer.resume()
|
|
7010
|
+
* timer.stop()
|
|
7011
|
+
* ```
|
|
7012
|
+
*/
|
|
7013
|
+
function useTimer(handler, options = {}) {
|
|
7014
|
+
const { duration = 1e3, repeat = false } = options;
|
|
7015
|
+
const remaining = shallowRef(duration);
|
|
7016
|
+
const isActive = shallowRef(false);
|
|
7017
|
+
const isPaused = shallowRef(false);
|
|
7018
|
+
let timeoutId;
|
|
7019
|
+
let trackingId;
|
|
7020
|
+
let startedAt = 0;
|
|
7021
|
+
let budget = duration;
|
|
7022
|
+
function clearTimer() {
|
|
7023
|
+
if (!/* @__PURE__ */ isUndefined(timeoutId)) {
|
|
7024
|
+
globalThis.clearTimeout(timeoutId);
|
|
7025
|
+
timeoutId = void 0;
|
|
7026
|
+
}
|
|
7027
|
+
}
|
|
7028
|
+
function startTracking() {
|
|
7029
|
+
stopTracking();
|
|
7030
|
+
if (!IN_BROWSER) return;
|
|
7031
|
+
trackingId = globalThis.setInterval(() => {
|
|
7032
|
+
if (!isActive.value || isPaused.value) return;
|
|
7033
|
+
const elapsed = Date.now() - startedAt;
|
|
7034
|
+
remaining.value = Math.max(0, budget - elapsed);
|
|
7035
|
+
}, 100);
|
|
7036
|
+
}
|
|
7037
|
+
function stopTracking() {
|
|
7038
|
+
if (!/* @__PURE__ */ isUndefined(trackingId)) {
|
|
7039
|
+
globalThis.clearInterval(trackingId);
|
|
7040
|
+
trackingId = void 0;
|
|
7041
|
+
}
|
|
7042
|
+
}
|
|
7043
|
+
function fire() {
|
|
7044
|
+
clearTimer();
|
|
7045
|
+
stopTracking();
|
|
7046
|
+
handler();
|
|
7047
|
+
if (repeat) begin(duration);
|
|
7048
|
+
else {
|
|
7049
|
+
isActive.value = false;
|
|
7050
|
+
remaining.value = 0;
|
|
7051
|
+
}
|
|
7052
|
+
}
|
|
7053
|
+
function begin(ms) {
|
|
7054
|
+
clearTimer();
|
|
7055
|
+
stopTracking();
|
|
7056
|
+
budget = ms;
|
|
7057
|
+
startedAt = Date.now();
|
|
7058
|
+
remaining.value = ms;
|
|
7059
|
+
isActive.value = true;
|
|
7060
|
+
isPaused.value = false;
|
|
7061
|
+
timeoutId = globalThis.setTimeout(fire, ms);
|
|
7062
|
+
startTracking();
|
|
7063
|
+
}
|
|
7064
|
+
function start() {
|
|
7065
|
+
if (duration < 0) return;
|
|
7066
|
+
begin(duration);
|
|
7067
|
+
}
|
|
7068
|
+
function stop() {
|
|
7069
|
+
clearTimer();
|
|
7070
|
+
stopTracking();
|
|
7071
|
+
isActive.value = false;
|
|
7072
|
+
isPaused.value = false;
|
|
7073
|
+
remaining.value = duration;
|
|
7074
|
+
}
|
|
7075
|
+
function pause() {
|
|
7076
|
+
if (!isActive.value || isPaused.value) return;
|
|
7077
|
+
const elapsed = Date.now() - startedAt;
|
|
7078
|
+
budget = Math.max(0, budget - elapsed);
|
|
7079
|
+
remaining.value = budget;
|
|
7080
|
+
clearTimer();
|
|
7081
|
+
stopTracking();
|
|
7082
|
+
isPaused.value = true;
|
|
7083
|
+
}
|
|
7084
|
+
function resume() {
|
|
7085
|
+
if (!isPaused.value) return;
|
|
7086
|
+
isPaused.value = false;
|
|
7087
|
+
startedAt = Date.now();
|
|
7088
|
+
timeoutId = globalThis.setTimeout(fire, budget);
|
|
7089
|
+
startTracking();
|
|
7090
|
+
}
|
|
7091
|
+
onScopeDispose(() => {
|
|
7092
|
+
clearTimer();
|
|
7093
|
+
stopTracking();
|
|
7094
|
+
}, true);
|
|
7095
|
+
return {
|
|
7096
|
+
start,
|
|
7097
|
+
stop,
|
|
7098
|
+
pause,
|
|
7099
|
+
resume,
|
|
7100
|
+
remaining,
|
|
7101
|
+
isActive,
|
|
7102
|
+
isPaused
|
|
7103
|
+
};
|
|
7104
|
+
}
|
|
7105
|
+
//#endregion
|
|
6954
7106
|
//#region src/composables/useLazy/index.ts
|
|
6955
7107
|
/**
|
|
6956
7108
|
* @module useLazy
|
|
@@ -7014,11 +7166,16 @@ function useElementIntersection(target, options = {}) {
|
|
|
7014
7166
|
* ```
|
|
7015
7167
|
*/
|
|
7016
7168
|
function useLazy(active, options = {}) {
|
|
7017
|
-
const { eager = false } = options;
|
|
7169
|
+
const { eager = false, delay = 0 } = options;
|
|
7018
7170
|
const isBooted = shallowRef(false);
|
|
7019
7171
|
const hasContent = toRef(() => isBooted.value || toValue(eager) || toValue(active));
|
|
7172
|
+
const timer = delay > 0 ? useTimer(() => {
|
|
7173
|
+
isBooted.value = true;
|
|
7174
|
+
}, { duration: delay }) : void 0;
|
|
7020
7175
|
const stop = watch(() => toValue(active), (value) => {
|
|
7021
|
-
if (value)
|
|
7176
|
+
if (value) if (timer) timer.start();
|
|
7177
|
+
else isBooted.value = true;
|
|
7178
|
+
else timer?.stop();
|
|
7022
7179
|
}, { immediate: true });
|
|
7023
7180
|
function reset() {
|
|
7024
7181
|
isBooted.value = false;
|
|
@@ -7079,7 +7236,7 @@ function useLazy(active, options = {}) {
|
|
|
7079
7236
|
function useMediaQuery(query) {
|
|
7080
7237
|
const matches = shallowRef(false);
|
|
7081
7238
|
const mediaQueryList = shallowRef(null);
|
|
7082
|
-
const resolvedQuery =
|
|
7239
|
+
const resolvedQuery = toRef(() => toValue(query));
|
|
7083
7240
|
const hydration = useHydration();
|
|
7084
7241
|
let cleanup = null;
|
|
7085
7242
|
function update() {
|
|
@@ -7871,6 +8028,722 @@ function useNested(namespace = "v0:nested") {
|
|
|
7871
8028
|
return useContext(namespace);
|
|
7872
8029
|
}
|
|
7873
8030
|
//#endregion
|
|
8031
|
+
//#region src/composables/createQueue/index.ts
|
|
8032
|
+
/**
|
|
8033
|
+
* @module createQueue
|
|
8034
|
+
*
|
|
8035
|
+
* @remarks
|
|
8036
|
+
* A queue composable for managing time-based collections with:
|
|
8037
|
+
* - Automatic timeout-based removal
|
|
8038
|
+
* - Pause/resume functionality
|
|
8039
|
+
* - FIFO (First In, First Out) ordering
|
|
8040
|
+
* - Manual dismissal support
|
|
8041
|
+
* - Queue progression management
|
|
8042
|
+
*
|
|
8043
|
+
* Built on top of createRegistry, the queue automatically manages timeouts for tickets,
|
|
8044
|
+
* ensuring only the first ticket in the queue is active at any time. When a ticket
|
|
8045
|
+
* expires or is removed, the next ticket in the queue automatically becomes active.
|
|
8046
|
+
*/
|
|
8047
|
+
/**
|
|
8048
|
+
* Creates a new queue instance
|
|
8049
|
+
*
|
|
8050
|
+
* @param options The options for the queue instance
|
|
8051
|
+
* @template Z The type of queue ticket that extends QueueTicket. Use this to add custom properties to tickets.
|
|
8052
|
+
* @template E The type of queue context that extends QueueContext<Z>. Use this when extending the queue with additional methods.
|
|
8053
|
+
* @returns A new queue instance
|
|
8054
|
+
*
|
|
8055
|
+
* @see https://0.vuetifyjs.com/composables/registration/create-queue
|
|
8056
|
+
*
|
|
8057
|
+
* @example
|
|
8058
|
+
* ```ts
|
|
8059
|
+
* import { useQueue } from '@vuetify/v0'
|
|
8060
|
+
*
|
|
8061
|
+
* const queue = useQueue()
|
|
8062
|
+
*
|
|
8063
|
+
* // Register an ticket with default timeout (3000ms)
|
|
8064
|
+
* const ticket1 = queue.register({ value: 'Ticket 1' })
|
|
8065
|
+
*
|
|
8066
|
+
* // Register an ticket with custom timeout
|
|
8067
|
+
* const ticket2 = queue.register({ value: 'Ticket 2', timeout: 5000 })
|
|
8068
|
+
*
|
|
8069
|
+
* // Register a persistent ticket that must be manually dismissed
|
|
8070
|
+
* const ticket3 = queue.register({ value: 'Ticket 3', timeout: -1 })
|
|
8071
|
+
*
|
|
8072
|
+
* // Dismiss an ticket using the convenience method
|
|
8073
|
+
* ticket3.dismiss()
|
|
8074
|
+
*
|
|
8075
|
+
* console.log(queue.size) // 2
|
|
8076
|
+
* ```
|
|
8077
|
+
*/
|
|
8078
|
+
function createQueue(_options = {}) {
|
|
8079
|
+
const { timeout: _timeout = 3e3, ...options } = _options;
|
|
8080
|
+
const registry = createRegistry({
|
|
8081
|
+
...options,
|
|
8082
|
+
events: true
|
|
8083
|
+
});
|
|
8084
|
+
const timers = /* @__PURE__ */ new Map();
|
|
8085
|
+
function createTicketTimer(ticket) {
|
|
8086
|
+
if (/* @__PURE__ */ isUndefined(ticket.timeout) || ticket.timeout < 0 || ticket.isPaused) return;
|
|
8087
|
+
const timer = useTimer(() => {
|
|
8088
|
+
timers.delete(ticket.id);
|
|
8089
|
+
registry.unregister(ticket.id);
|
|
8090
|
+
resume();
|
|
8091
|
+
}, { duration: ticket.timeout });
|
|
8092
|
+
timers.set(ticket.id, timer);
|
|
8093
|
+
timer.start();
|
|
8094
|
+
}
|
|
8095
|
+
function stopTimer(id) {
|
|
8096
|
+
const timer = timers.get(id);
|
|
8097
|
+
if (timer) {
|
|
8098
|
+
timer.stop();
|
|
8099
|
+
timers.delete(id);
|
|
8100
|
+
}
|
|
8101
|
+
}
|
|
8102
|
+
function register(registration = {}) {
|
|
8103
|
+
const id = registration.id ?? /* @__PURE__ */ useId();
|
|
8104
|
+
const timeout = Object.prototype.hasOwnProperty.call(registration, "timeout") ? registration.timeout : _timeout;
|
|
8105
|
+
const ticket = {
|
|
8106
|
+
...registration,
|
|
8107
|
+
id,
|
|
8108
|
+
timeout,
|
|
8109
|
+
isPaused: registry.size > 0,
|
|
8110
|
+
dismiss: () => unregister(id)
|
|
8111
|
+
};
|
|
8112
|
+
const registered = registry.register(ticket);
|
|
8113
|
+
createTicketTimer(registered);
|
|
8114
|
+
return registered;
|
|
8115
|
+
}
|
|
8116
|
+
function unregister(id) {
|
|
8117
|
+
const ticket = /* @__PURE__ */ isUndefined(id) ? registry.seek("first") : registry.get(id);
|
|
8118
|
+
if (!ticket) return void 0;
|
|
8119
|
+
const wasFirst = ticket.index === 0;
|
|
8120
|
+
stopTimer(ticket.id);
|
|
8121
|
+
registry.unregister(ticket.id);
|
|
8122
|
+
if (wasFirst) resume();
|
|
8123
|
+
return ticket;
|
|
8124
|
+
}
|
|
8125
|
+
function offboard(ids) {
|
|
8126
|
+
let hadFirst = false;
|
|
8127
|
+
for (const id of ids) {
|
|
8128
|
+
const ticket = registry.get(id);
|
|
8129
|
+
if (!ticket) continue;
|
|
8130
|
+
if (ticket.index === 0) hadFirst = true;
|
|
8131
|
+
stopTimer(ticket.id);
|
|
8132
|
+
}
|
|
8133
|
+
registry.offboard(ids);
|
|
8134
|
+
if (hadFirst) resume();
|
|
8135
|
+
}
|
|
8136
|
+
function pause() {
|
|
8137
|
+
const ticket = registry.seek("first");
|
|
8138
|
+
if (!ticket || ticket.isPaused) return void 0;
|
|
8139
|
+
timers.get(ticket.id)?.pause();
|
|
8140
|
+
return registry.upsert(ticket.id, { isPaused: true });
|
|
8141
|
+
}
|
|
8142
|
+
function resume() {
|
|
8143
|
+
const ticket = registry.seek("first");
|
|
8144
|
+
if (!ticket || ticket.index !== 0 || !ticket.isPaused) return void 0;
|
|
8145
|
+
const updated = registry.upsert(ticket.id, { isPaused: false });
|
|
8146
|
+
const timer = timers.get(updated.id);
|
|
8147
|
+
if (timer) timer.start();
|
|
8148
|
+
else createTicketTimer(updated);
|
|
8149
|
+
return updated;
|
|
8150
|
+
}
|
|
8151
|
+
function clear() {
|
|
8152
|
+
for (const timer of timers.values()) timer.stop();
|
|
8153
|
+
timers.clear();
|
|
8154
|
+
registry.clear();
|
|
8155
|
+
}
|
|
8156
|
+
function dispose() {
|
|
8157
|
+
clear();
|
|
8158
|
+
registry.dispose();
|
|
8159
|
+
}
|
|
8160
|
+
onScopeDispose(dispose, true);
|
|
8161
|
+
function onboard(registrations) {
|
|
8162
|
+
return registry.batch(() => registrations.map((registration) => register(registration)));
|
|
8163
|
+
}
|
|
8164
|
+
return {
|
|
8165
|
+
...registry,
|
|
8166
|
+
register,
|
|
8167
|
+
unregister,
|
|
8168
|
+
onboard,
|
|
8169
|
+
offboard,
|
|
8170
|
+
pause,
|
|
8171
|
+
resume,
|
|
8172
|
+
clear,
|
|
8173
|
+
dispose,
|
|
8174
|
+
get size() {
|
|
8175
|
+
return registry.size;
|
|
8176
|
+
}
|
|
8177
|
+
};
|
|
8178
|
+
}
|
|
8179
|
+
/**
|
|
8180
|
+
* Creates a new queue context.
|
|
8181
|
+
*
|
|
8182
|
+
* @param options The options for the queue context.
|
|
8183
|
+
* @template Z The type of the queue ticket.
|
|
8184
|
+
* @template E The type of the queue context.
|
|
8185
|
+
* @returns A new queue context.
|
|
8186
|
+
*
|
|
8187
|
+
* @see https://0.vuetifyjs.com/composables/registration/create-queue
|
|
8188
|
+
*
|
|
8189
|
+
* @example
|
|
8190
|
+
* ```ts
|
|
8191
|
+
* import { createQueueContext } from '@vuetify/v0'
|
|
8192
|
+
*
|
|
8193
|
+
* export const [useQueue, provideQueue, context] = createQueueContext({
|
|
8194
|
+
* timeout: 5000,
|
|
8195
|
+
* })
|
|
8196
|
+
* ```
|
|
8197
|
+
*/
|
|
8198
|
+
function createQueueContext(_options = {}) {
|
|
8199
|
+
const { namespace = "v0:queue", ...options } = _options;
|
|
8200
|
+
const [useQueueContext, _provideQueueContext] = createContext(namespace);
|
|
8201
|
+
const context = createQueue(options);
|
|
8202
|
+
function provideQueueContext(_context = context, app) {
|
|
8203
|
+
return _provideQueueContext(_context, app);
|
|
8204
|
+
}
|
|
8205
|
+
return createTrinity(useQueueContext, provideQueueContext, context);
|
|
8206
|
+
}
|
|
8207
|
+
/**
|
|
8208
|
+
* Returns the current queue instance.
|
|
8209
|
+
*
|
|
8210
|
+
* @param namespace The namespace for the queue context. Defaults to `'v0:queue'`.
|
|
8211
|
+
* @returns The current queue instance.
|
|
8212
|
+
*
|
|
8213
|
+
* @see https://0.vuetifyjs.com/composables/registration/create-queue
|
|
8214
|
+
*
|
|
8215
|
+
* @example
|
|
8216
|
+
* ```vue
|
|
8217
|
+
* <script setup lang="ts">
|
|
8218
|
+
* import { useQueue } from '@vuetify/v0'
|
|
8219
|
+
*
|
|
8220
|
+
* const queue = useQueue()
|
|
8221
|
+
* <\/script>
|
|
8222
|
+
* ```
|
|
8223
|
+
*/
|
|
8224
|
+
function useQueue(namespace = "v0:queue") {
|
|
8225
|
+
return useContext(namespace);
|
|
8226
|
+
}
|
|
8227
|
+
//#endregion
|
|
8228
|
+
//#region src/composables/useNotifications/index.ts
|
|
8229
|
+
/**
|
|
8230
|
+
* @module useNotifications
|
|
8231
|
+
* @see https://0.vuetifyjs.com/composables/plugins/use-notifications
|
|
8232
|
+
*
|
|
8233
|
+
* @remarks
|
|
8234
|
+
* Notification management composable built on createRegistry and createQueue.
|
|
8235
|
+
* Registry stores the full notification lifecycle (permanent record).
|
|
8236
|
+
* Queue manages the display surface (toasts) with FIFO ordering and auto-dismiss.
|
|
8237
|
+
*
|
|
8238
|
+
* Supports:
|
|
8239
|
+
* - Push notifications with severity levels and configurable timeouts
|
|
8240
|
+
* - State mutations: read, seen, archived, snoozed
|
|
8241
|
+
* - Bulk operations: readAll, archiveAll, clear
|
|
8242
|
+
* - Toast queue with pause/resume and auto-dismiss
|
|
8243
|
+
* - Adapter integration via event system
|
|
8244
|
+
* - Plugin installation via createNotificationsPlugin
|
|
8245
|
+
*/
|
|
8246
|
+
function createNotifications(options = {}) {
|
|
8247
|
+
const { timeout = 3e3, ...registryOptions } = options;
|
|
8248
|
+
const registry = createRegistry({
|
|
8249
|
+
...registryOptions,
|
|
8250
|
+
events: true,
|
|
8251
|
+
reactive: true
|
|
8252
|
+
});
|
|
8253
|
+
const queue = createQueue({
|
|
8254
|
+
timeout,
|
|
8255
|
+
events: true,
|
|
8256
|
+
reactive: true
|
|
8257
|
+
});
|
|
8258
|
+
registry.on("unregister:ticket", (ticket) => {
|
|
8259
|
+
if (queue.has(ticket.id)) queue.unregister(ticket.id);
|
|
8260
|
+
});
|
|
8261
|
+
/**
|
|
8262
|
+
* Build a full {@link NotificationTicket} from raw input
|
|
8263
|
+
*
|
|
8264
|
+
* @param input The notification input to hydrate.
|
|
8265
|
+
* @returns A partial ticket with timestamps, lifecycle methods, and an ID.
|
|
8266
|
+
* @internal Used by {@link send}, {@link register}, and {@link onboard}.
|
|
8267
|
+
*/
|
|
8268
|
+
function hydrate(input) {
|
|
8269
|
+
const id = input.id ?? /* @__PURE__ */ useId();
|
|
8270
|
+
const now = /* @__PURE__ */ new Date();
|
|
8271
|
+
return {
|
|
8272
|
+
...input,
|
|
8273
|
+
id,
|
|
8274
|
+
createdAt: now,
|
|
8275
|
+
readAt: null,
|
|
8276
|
+
seenAt: null,
|
|
8277
|
+
archivedAt: null,
|
|
8278
|
+
snoozedUntil: null,
|
|
8279
|
+
read: () => read(id),
|
|
8280
|
+
unread: () => unread(id),
|
|
8281
|
+
seen: () => seen(id),
|
|
8282
|
+
archive: () => archive(id),
|
|
8283
|
+
unarchive: () => unarchive(id),
|
|
8284
|
+
snooze: (until) => snooze(id, until),
|
|
8285
|
+
wake: () => wake(id),
|
|
8286
|
+
dismiss: () => queue.unregister(id)
|
|
8287
|
+
};
|
|
8288
|
+
}
|
|
8289
|
+
/**
|
|
8290
|
+
* Create a notification and enqueue it for toast display
|
|
8291
|
+
*
|
|
8292
|
+
* @param input The notification input to create.
|
|
8293
|
+
* @returns The hydrated notification ticket.
|
|
8294
|
+
* @remarks Hydrates the input with timestamps and lifecycle methods, registers
|
|
8295
|
+
* it in the registry, adds it to the display queue, and emits
|
|
8296
|
+
* `notification:received`. The ticket auto-dismisses after the configured
|
|
8297
|
+
* timeout unless paused.
|
|
8298
|
+
*
|
|
8299
|
+
* @see https://0.vuetifyjs.com/composables/plugins/use-notifications#send
|
|
8300
|
+
*
|
|
8301
|
+
* @example
|
|
8302
|
+
* ```ts
|
|
8303
|
+
* import { useNotifications } from '@vuetify/v0'
|
|
8304
|
+
*
|
|
8305
|
+
* const notifications = useNotifications()
|
|
8306
|
+
*
|
|
8307
|
+
* // Basic toast
|
|
8308
|
+
* notifications.send({ subject: 'Changes saved', severity: 'success' })
|
|
8309
|
+
*
|
|
8310
|
+
* // With custom timeout
|
|
8311
|
+
* const ticket = notifications.send({ subject: 'Connection lost', severity: 'error', timeout: 10000 })
|
|
8312
|
+
*
|
|
8313
|
+
* console.log(ticket.id) // 'generated-id'
|
|
8314
|
+
* console.log(ticket.createdAt) // Date
|
|
8315
|
+
* console.log(ticket.readAt) // null
|
|
8316
|
+
*
|
|
8317
|
+
* // Ticket convenience methods
|
|
8318
|
+
* ticket.read() // marks as read
|
|
8319
|
+
* ticket.dismiss() // removes from toast queue, keeps in registry
|
|
8320
|
+
* ```
|
|
8321
|
+
*/
|
|
8322
|
+
function send(input) {
|
|
8323
|
+
const ticket = registry.register(hydrate(input));
|
|
8324
|
+
queue.register(/* @__PURE__ */ isUndefined(input.timeout) ? { id: ticket.id } : {
|
|
8325
|
+
id: ticket.id,
|
|
8326
|
+
timeout: input.timeout
|
|
8327
|
+
});
|
|
8328
|
+
registry.emit("notification:received", ticket);
|
|
8329
|
+
return ticket;
|
|
8330
|
+
}
|
|
8331
|
+
/**
|
|
8332
|
+
* Register a notification in the registry without adding it to the toast queue
|
|
8333
|
+
*
|
|
8334
|
+
* @param input The notification input to register.
|
|
8335
|
+
* @returns The hydrated notification ticket.
|
|
8336
|
+
* @remarks Overrides the base registry `register` to hydrate the input with
|
|
8337
|
+
* timestamps and lifecycle methods. Use for historical or pre-existing items
|
|
8338
|
+
* that should appear in an inbox but not pop up as toasts.
|
|
8339
|
+
*
|
|
8340
|
+
* @see https://0.vuetifyjs.com/composables/plugins/use-notifications#register
|
|
8341
|
+
*
|
|
8342
|
+
* @example
|
|
8343
|
+
* ```ts
|
|
8344
|
+
* import { useNotifications } from '@vuetify/v0'
|
|
8345
|
+
*
|
|
8346
|
+
* const notifications = useNotifications()
|
|
8347
|
+
*
|
|
8348
|
+
* // Register a historical item (appears in inbox, not as toast)
|
|
8349
|
+
* const ticket = notifications.register({ id: 'old-1', subject: 'Deployed v2.1' })
|
|
8350
|
+
*
|
|
8351
|
+
* console.log(ticket.createdAt) // Date
|
|
8352
|
+
* console.log(ticket.readAt) // null
|
|
8353
|
+
*
|
|
8354
|
+
* // Lifecycle methods work the same as send()
|
|
8355
|
+
* ticket.read()
|
|
8356
|
+
* ticket.archive()
|
|
8357
|
+
* ```
|
|
8358
|
+
*/
|
|
8359
|
+
function register(input) {
|
|
8360
|
+
return registry.register(hydrate(input));
|
|
8361
|
+
}
|
|
8362
|
+
/**
|
|
8363
|
+
* Bulk version of {@link register}
|
|
8364
|
+
*
|
|
8365
|
+
* @param inputs Array of notification inputs to register.
|
|
8366
|
+
* @returns Array of hydrated notification tickets.
|
|
8367
|
+
* @remarks Registers multiple notifications into the registry without toast
|
|
8368
|
+
* display. Wraps all registrations in a single `registry.batch()` call so
|
|
8369
|
+
* reactive updates are deferred until the entire batch completes.
|
|
8370
|
+
*
|
|
8371
|
+
* @see https://0.vuetifyjs.com/composables/plugins/use-notifications#onboard
|
|
8372
|
+
*
|
|
8373
|
+
* @example
|
|
8374
|
+
* ```ts
|
|
8375
|
+
* import { useNotifications } from '@vuetify/v0'
|
|
8376
|
+
*
|
|
8377
|
+
* const notifications = useNotifications()
|
|
8378
|
+
*
|
|
8379
|
+
* // Load historical items on mount
|
|
8380
|
+
* const tickets = notifications.onboard([
|
|
8381
|
+
* { id: 'n1', subject: 'Welcome to the team' },
|
|
8382
|
+
* { id: 'n2', subject: 'Setup complete', severity: 'success' },
|
|
8383
|
+
* ])
|
|
8384
|
+
*
|
|
8385
|
+
* console.log(tickets.length) // 2
|
|
8386
|
+
* console.log(notifications.queue.values()) // [] (no toasts)
|
|
8387
|
+
* console.log(notifications.values().length) // 2 (in registry)
|
|
8388
|
+
* ```
|
|
8389
|
+
*/
|
|
8390
|
+
function onboard(inputs) {
|
|
8391
|
+
return registry.batch(() => inputs.map((input) => register(input)));
|
|
8392
|
+
}
|
|
8393
|
+
/**
|
|
8394
|
+
* Mark a notification as read
|
|
8395
|
+
*
|
|
8396
|
+
* @param id The ID of the notification to mark as read.
|
|
8397
|
+
* @remarks Sets `readAt` to the current time and emits `notification:read`.
|
|
8398
|
+
* Adapters listen to this event for outbound sync.
|
|
8399
|
+
*
|
|
8400
|
+
* @see https://0.vuetifyjs.com/composables/plugins/use-notifications#read
|
|
8401
|
+
*
|
|
8402
|
+
* @example
|
|
8403
|
+
* ```ts
|
|
8404
|
+
* import { useNotifications } from '@vuetify/v0'
|
|
8405
|
+
*
|
|
8406
|
+
* const notifications = useNotifications()
|
|
8407
|
+
*
|
|
8408
|
+
* const ticket = notifications.send({ subject: 'New message' })
|
|
8409
|
+
*
|
|
8410
|
+
* notifications.read(ticket.id)
|
|
8411
|
+
* console.log(ticket.readAt) // Date
|
|
8412
|
+
*
|
|
8413
|
+
* // Or via ticket convenience method
|
|
8414
|
+
* ticket.read()
|
|
8415
|
+
* ```
|
|
8416
|
+
*/
|
|
8417
|
+
function read(id) {
|
|
8418
|
+
registry.upsert(id, { readAt: /* @__PURE__ */ new Date() }, "notification:read");
|
|
8419
|
+
}
|
|
8420
|
+
/**
|
|
8421
|
+
* Mark a notification as unread
|
|
8422
|
+
*
|
|
8423
|
+
* @param id The ID of the notification to mark as unread.
|
|
8424
|
+
* @remarks Clears `readAt` and emits `notification:unread`.
|
|
8425
|
+
*
|
|
8426
|
+
* @see https://0.vuetifyjs.com/composables/plugins/use-notifications#unread
|
|
8427
|
+
*
|
|
8428
|
+
* @example
|
|
8429
|
+
* ```ts
|
|
8430
|
+
* import { useNotifications } from '@vuetify/v0'
|
|
8431
|
+
*
|
|
8432
|
+
* const notifications = useNotifications()
|
|
8433
|
+
*
|
|
8434
|
+
* notifications.unread('notif-1')
|
|
8435
|
+
* ```
|
|
8436
|
+
*/
|
|
8437
|
+
function unread(id) {
|
|
8438
|
+
registry.upsert(id, { readAt: null }, "notification:unread");
|
|
8439
|
+
}
|
|
8440
|
+
/**
|
|
8441
|
+
* Mark a notification as seen
|
|
8442
|
+
*
|
|
8443
|
+
* @param id The ID of the notification to mark as seen.
|
|
8444
|
+
* @remarks Sets `seenAt` to the current time and emits `notification:seen`.
|
|
8445
|
+
* Distinct from read — seen tracks whether the notification appeared in the
|
|
8446
|
+
* user's viewport, while read indicates the user actively engaged with it.
|
|
8447
|
+
*
|
|
8448
|
+
* @see https://0.vuetifyjs.com/composables/plugins/use-notifications#seen
|
|
8449
|
+
*
|
|
8450
|
+
* @example
|
|
8451
|
+
* ```ts
|
|
8452
|
+
* import { useNotifications } from '@vuetify/v0'
|
|
8453
|
+
*
|
|
8454
|
+
* const notifications = useNotifications()
|
|
8455
|
+
*
|
|
8456
|
+
* // Mark as seen when visible in inbox viewport
|
|
8457
|
+
* notifications.seen('notif-1')
|
|
8458
|
+
* ```
|
|
8459
|
+
*/
|
|
8460
|
+
function seen(id) {
|
|
8461
|
+
registry.upsert(id, { seenAt: /* @__PURE__ */ new Date() }, "notification:seen");
|
|
8462
|
+
}
|
|
8463
|
+
/**
|
|
8464
|
+
* Archive a notification
|
|
8465
|
+
*
|
|
8466
|
+
* @param id The ID of the notification to archive.
|
|
8467
|
+
* @remarks Sets `archivedAt` to the current time and emits `notification:archived`.
|
|
8468
|
+
*
|
|
8469
|
+
* @see https://0.vuetifyjs.com/composables/plugins/use-notifications#archive
|
|
8470
|
+
*
|
|
8471
|
+
* @example
|
|
8472
|
+
* ```ts
|
|
8473
|
+
* import { useNotifications } from '@vuetify/v0'
|
|
8474
|
+
*
|
|
8475
|
+
* const notifications = useNotifications()
|
|
8476
|
+
*
|
|
8477
|
+
* notifications.archive('notif-1')
|
|
8478
|
+
* ```
|
|
8479
|
+
*/
|
|
8480
|
+
function archive(id) {
|
|
8481
|
+
registry.upsert(id, { archivedAt: /* @__PURE__ */ new Date() }, "notification:archived");
|
|
8482
|
+
}
|
|
8483
|
+
/**
|
|
8484
|
+
* Restore an archived notification
|
|
8485
|
+
*
|
|
8486
|
+
* @param id The ID of the notification to unarchive.
|
|
8487
|
+
* @remarks Clears `archivedAt` and emits `notification:unarchived`.
|
|
8488
|
+
*
|
|
8489
|
+
* @see https://0.vuetifyjs.com/composables/plugins/use-notifications#unarchive
|
|
8490
|
+
*
|
|
8491
|
+
* @example
|
|
8492
|
+
* ```ts
|
|
8493
|
+
* import { useNotifications } from '@vuetify/v0'
|
|
8494
|
+
*
|
|
8495
|
+
* const notifications = useNotifications()
|
|
8496
|
+
*
|
|
8497
|
+
* notifications.unarchive('notif-1')
|
|
8498
|
+
* ```
|
|
8499
|
+
*/
|
|
8500
|
+
function unarchive(id) {
|
|
8501
|
+
registry.upsert(id, { archivedAt: null }, "notification:unarchived");
|
|
8502
|
+
}
|
|
8503
|
+
/**
|
|
8504
|
+
* Snooze a notification until a given time
|
|
8505
|
+
*
|
|
8506
|
+
* @param id The ID of the notification to snooze.
|
|
8507
|
+
* @param until The time at which the snooze expires.
|
|
8508
|
+
* @remarks Sets `snoozedUntil` and emits `notification:snoozed`. The composable
|
|
8509
|
+
* does not auto-wake — consumers are responsible for calling {@link wake} when
|
|
8510
|
+
* the snooze expires (e.g., via a timer or server push).
|
|
8511
|
+
*
|
|
8512
|
+
* @see https://0.vuetifyjs.com/composables/plugins/use-notifications#snooze
|
|
8513
|
+
*
|
|
8514
|
+
* @example
|
|
8515
|
+
* ```ts
|
|
8516
|
+
* import { useNotifications } from '@vuetify/v0'
|
|
8517
|
+
*
|
|
8518
|
+
* const notifications = useNotifications()
|
|
8519
|
+
*
|
|
8520
|
+
* const tomorrow = new Date(Date.now() + 86_400_000)
|
|
8521
|
+
* notifications.snooze('notif-1', tomorrow)
|
|
8522
|
+
* ```
|
|
8523
|
+
*/
|
|
8524
|
+
function snooze(id, until) {
|
|
8525
|
+
registry.upsert(id, { snoozedUntil: until }, "notification:snoozed");
|
|
8526
|
+
}
|
|
8527
|
+
/**
|
|
8528
|
+
* Cancel a snooze
|
|
8529
|
+
*
|
|
8530
|
+
* @param id The ID of the notification to wake.
|
|
8531
|
+
* @remarks Clears `snoozedUntil` and emits `notification:unsnoozed`.
|
|
8532
|
+
*
|
|
8533
|
+
* @see https://0.vuetifyjs.com/composables/plugins/use-notifications#wake
|
|
8534
|
+
*
|
|
8535
|
+
* @example
|
|
8536
|
+
* ```ts
|
|
8537
|
+
* import { useNotifications } from '@vuetify/v0'
|
|
8538
|
+
*
|
|
8539
|
+
* const notifications = useNotifications()
|
|
8540
|
+
*
|
|
8541
|
+
* notifications.wake('notif-1')
|
|
8542
|
+
* ```
|
|
8543
|
+
*/
|
|
8544
|
+
function wake(id) {
|
|
8545
|
+
registry.upsert(id, { snoozedUntil: null }, "notification:unsnoozed");
|
|
8546
|
+
}
|
|
8547
|
+
/**
|
|
8548
|
+
* Mark all unread notifications as read
|
|
8549
|
+
*
|
|
8550
|
+
* @remarks Iterates all notifications and marks unread ones as read in a single
|
|
8551
|
+
* batch. Skips already-read notifications to preserve their original `readAt`
|
|
8552
|
+
* timestamp. Emits `notification:read` for each affected notification.
|
|
8553
|
+
*
|
|
8554
|
+
* @see https://0.vuetifyjs.com/composables/plugins/use-notifications#readall
|
|
8555
|
+
*
|
|
8556
|
+
* @example
|
|
8557
|
+
* ```ts
|
|
8558
|
+
* import { useNotifications } from '@vuetify/v0'
|
|
8559
|
+
*
|
|
8560
|
+
* const notifications = useNotifications()
|
|
8561
|
+
*
|
|
8562
|
+
* notifications.send({ subject: 'Message 1' })
|
|
8563
|
+
* notifications.send({ subject: 'Message 2' })
|
|
8564
|
+
*
|
|
8565
|
+
* notifications.readAll()
|
|
8566
|
+
*
|
|
8567
|
+
* console.log(notifications.values().every(t => t.readAt !== null)) // true
|
|
8568
|
+
* ```
|
|
8569
|
+
*/
|
|
8570
|
+
function readAll() {
|
|
8571
|
+
const now = /* @__PURE__ */ new Date();
|
|
8572
|
+
registry.batch(() => {
|
|
8573
|
+
for (const ticket of registry.values()) if (/* @__PURE__ */ isNull(ticket.readAt)) registry.upsert(ticket.id, { readAt: now }, "notification:read");
|
|
8574
|
+
});
|
|
8575
|
+
}
|
|
8576
|
+
/**
|
|
8577
|
+
* Archive all unarchived notifications
|
|
8578
|
+
*
|
|
8579
|
+
* @remarks Iterates all notifications and archives unarchived ones in a single
|
|
8580
|
+
* batch. Skips already-archived notifications to preserve their original
|
|
8581
|
+
* `archivedAt` timestamp. Emits `notification:archived` for each affected notification.
|
|
8582
|
+
*
|
|
8583
|
+
* @see https://0.vuetifyjs.com/composables/plugins/use-notifications#archiveall
|
|
8584
|
+
*
|
|
8585
|
+
* @example
|
|
8586
|
+
* ```ts
|
|
8587
|
+
* import { useNotifications } from '@vuetify/v0'
|
|
8588
|
+
*
|
|
8589
|
+
* const notifications = useNotifications()
|
|
8590
|
+
*
|
|
8591
|
+
* notifications.send({ subject: 'Alert 1' })
|
|
8592
|
+
* notifications.send({ subject: 'Alert 2' })
|
|
8593
|
+
*
|
|
8594
|
+
* notifications.archiveAll()
|
|
8595
|
+
*
|
|
8596
|
+
* console.log(notifications.values().every(t => t.archivedAt !== null)) // true
|
|
8597
|
+
* ```
|
|
8598
|
+
*/
|
|
8599
|
+
function archiveAll() {
|
|
8600
|
+
const now = /* @__PURE__ */ new Date();
|
|
8601
|
+
registry.batch(() => {
|
|
8602
|
+
for (const ticket of registry.values()) if (/* @__PURE__ */ isNull(ticket.archivedAt)) registry.upsert(ticket.id, { archivedAt: now }, "notification:archived");
|
|
8603
|
+
});
|
|
8604
|
+
}
|
|
8605
|
+
return {
|
|
8606
|
+
...registry,
|
|
8607
|
+
send,
|
|
8608
|
+
register,
|
|
8609
|
+
onboard,
|
|
8610
|
+
queue,
|
|
8611
|
+
read,
|
|
8612
|
+
unread,
|
|
8613
|
+
seen,
|
|
8614
|
+
archive,
|
|
8615
|
+
unarchive,
|
|
8616
|
+
snooze,
|
|
8617
|
+
wake,
|
|
8618
|
+
readAll,
|
|
8619
|
+
archiveAll,
|
|
8620
|
+
get size() {
|
|
8621
|
+
return registry.size;
|
|
8622
|
+
}
|
|
8623
|
+
};
|
|
8624
|
+
}
|
|
8625
|
+
function noop() {}
|
|
8626
|
+
const EMPTY = [];
|
|
8627
|
+
function createNotificationsFallback() {
|
|
8628
|
+
const stub = {
|
|
8629
|
+
id: "",
|
|
8630
|
+
index: 0,
|
|
8631
|
+
value: 0,
|
|
8632
|
+
valueIsIndex: true,
|
|
8633
|
+
createdAt: /* @__PURE__ */ new Date(0),
|
|
8634
|
+
readAt: null,
|
|
8635
|
+
seenAt: null,
|
|
8636
|
+
archivedAt: null,
|
|
8637
|
+
snoozedUntil: null,
|
|
8638
|
+
read: noop,
|
|
8639
|
+
unread: noop,
|
|
8640
|
+
seen: noop,
|
|
8641
|
+
archive: noop,
|
|
8642
|
+
unarchive: noop,
|
|
8643
|
+
snooze: noop,
|
|
8644
|
+
wake: noop,
|
|
8645
|
+
dismiss: noop,
|
|
8646
|
+
unregister: noop
|
|
8647
|
+
};
|
|
8648
|
+
return {
|
|
8649
|
+
collection: /* @__PURE__ */ new Map(),
|
|
8650
|
+
size: 0,
|
|
8651
|
+
send: () => stub,
|
|
8652
|
+
queue: {
|
|
8653
|
+
collection: /* @__PURE__ */ new Map(),
|
|
8654
|
+
size: 0,
|
|
8655
|
+
register: () => ({}),
|
|
8656
|
+
unregister: () => void 0,
|
|
8657
|
+
has: () => false,
|
|
8658
|
+
get: () => void 0,
|
|
8659
|
+
keys: () => EMPTY,
|
|
8660
|
+
values: () => EMPTY,
|
|
8661
|
+
entries: () => EMPTY,
|
|
8662
|
+
browse: () => void 0,
|
|
8663
|
+
lookup: () => void 0,
|
|
8664
|
+
upsert: () => ({}),
|
|
8665
|
+
seek: () => void 0,
|
|
8666
|
+
move: () => void 0,
|
|
8667
|
+
on: noop,
|
|
8668
|
+
off: noop,
|
|
8669
|
+
emit: noop,
|
|
8670
|
+
dispose: noop,
|
|
8671
|
+
clear: noop,
|
|
8672
|
+
reindex: noop,
|
|
8673
|
+
batch: (fn) => fn(),
|
|
8674
|
+
onboard: () => EMPTY,
|
|
8675
|
+
offboard: noop,
|
|
8676
|
+
pause: () => void 0,
|
|
8677
|
+
resume: () => void 0
|
|
8678
|
+
},
|
|
8679
|
+
read: noop,
|
|
8680
|
+
unread: noop,
|
|
8681
|
+
seen: noop,
|
|
8682
|
+
archive: noop,
|
|
8683
|
+
unarchive: noop,
|
|
8684
|
+
snooze: noop,
|
|
8685
|
+
wake: noop,
|
|
8686
|
+
readAll: noop,
|
|
8687
|
+
archiveAll: noop,
|
|
8688
|
+
clear: noop,
|
|
8689
|
+
has: () => false,
|
|
8690
|
+
get: () => void 0,
|
|
8691
|
+
keys: () => EMPTY,
|
|
8692
|
+
values: () => EMPTY,
|
|
8693
|
+
entries: () => EMPTY,
|
|
8694
|
+
browse: () => void 0,
|
|
8695
|
+
lookup: () => void 0,
|
|
8696
|
+
upsert: () => stub,
|
|
8697
|
+
register: () => stub,
|
|
8698
|
+
unregister: noop,
|
|
8699
|
+
reindex: noop,
|
|
8700
|
+
move: () => void 0,
|
|
8701
|
+
seek: () => void 0,
|
|
8702
|
+
on: noop,
|
|
8703
|
+
off: noop,
|
|
8704
|
+
emit: noop,
|
|
8705
|
+
dispose: noop,
|
|
8706
|
+
batch: (fn) => fn(),
|
|
8707
|
+
onboard: () => EMPTY,
|
|
8708
|
+
offboard: noop
|
|
8709
|
+
};
|
|
8710
|
+
}
|
|
8711
|
+
/**
|
|
8712
|
+
* Notification management with registry, event system, and optional adapters.
|
|
8713
|
+
*
|
|
8714
|
+
* @see https://0.vuetifyjs.com/composables/plugins/use-notifications
|
|
8715
|
+
*
|
|
8716
|
+
* @example
|
|
8717
|
+
* ```ts
|
|
8718
|
+
* import { createNotificationsPlugin, useNotifications } from '@vuetify/v0'
|
|
8719
|
+
*
|
|
8720
|
+
* // Install as plugin
|
|
8721
|
+
* app.use(createNotificationsPlugin())
|
|
8722
|
+
*
|
|
8723
|
+
* // Use in components
|
|
8724
|
+
* const notifications = useNotifications()
|
|
8725
|
+
* notifications.send({ subject: 'Saved', severity: 'success' })
|
|
8726
|
+
* ```
|
|
8727
|
+
*/
|
|
8728
|
+
const [createNotificationsContext, createNotificationsPlugin, useNotifications] = createPluginContext("v0:notifications", (options) => createNotifications(options), {
|
|
8729
|
+
fallback: () => createNotificationsFallback(),
|
|
8730
|
+
setup: (context, app, options) => {
|
|
8731
|
+
app.onUnmount(() => {
|
|
8732
|
+
context.dispose();
|
|
8733
|
+
context.queue.dispose();
|
|
8734
|
+
});
|
|
8735
|
+
const { adapter } = options;
|
|
8736
|
+
if (!adapter) return;
|
|
8737
|
+
adapter.setup({
|
|
8738
|
+
send: context.send,
|
|
8739
|
+
register: context.register,
|
|
8740
|
+
on: context.on,
|
|
8741
|
+
off: context.off
|
|
8742
|
+
});
|
|
8743
|
+
if (/* @__PURE__ */ isFunction(adapter.dispose)) app.onUnmount(() => adapter.dispose());
|
|
8744
|
+
}
|
|
8745
|
+
});
|
|
8746
|
+
//#endregion
|
|
7874
8747
|
//#region src/composables/usePermissions/adapters/adapter.ts
|
|
7875
8748
|
var PermissionAdapter = class {};
|
|
7876
8749
|
//#endregion
|
|
@@ -8028,17 +8901,28 @@ const [createPermissionsContext, createPermissionsPlugin, usePermissions] = crea
|
|
|
8028
8901
|
* without wrapping the Popover compound component.
|
|
8029
8902
|
*/
|
|
8030
8903
|
function usePopover(options = {}) {
|
|
8031
|
-
const { id: _id, positionArea = "bottom", positionTry = "most-width bottom" } = options;
|
|
8904
|
+
const { id: _id, positionArea = "bottom", positionTry = "most-width bottom", showDelay = 0, hideDelay = 0 } = options;
|
|
8032
8905
|
const id = _id ?? /* @__PURE__ */ useId();
|
|
8033
8906
|
const isOpen = options.isOpen ?? shallowRef(false);
|
|
8034
|
-
|
|
8907
|
+
const showTimer = showDelay > 0 ? useTimer(() => {
|
|
8035
8908
|
isOpen.value = true;
|
|
8909
|
+
}, { duration: showDelay }) : void 0;
|
|
8910
|
+
const hideTimer = hideDelay > 0 ? useTimer(() => {
|
|
8911
|
+
isOpen.value = false;
|
|
8912
|
+
}, { duration: hideDelay }) : void 0;
|
|
8913
|
+
function open() {
|
|
8914
|
+
hideTimer?.stop();
|
|
8915
|
+
if (showTimer) showTimer.start();
|
|
8916
|
+
else isOpen.value = true;
|
|
8036
8917
|
}
|
|
8037
8918
|
function close() {
|
|
8038
|
-
|
|
8919
|
+
showTimer?.stop();
|
|
8920
|
+
if (hideTimer) hideTimer.start();
|
|
8921
|
+
else isOpen.value = false;
|
|
8039
8922
|
}
|
|
8040
8923
|
function toggle() {
|
|
8041
|
-
isOpen.value
|
|
8924
|
+
if (isOpen.value) close();
|
|
8925
|
+
else open();
|
|
8042
8926
|
}
|
|
8043
8927
|
const anchorStyles = toRef(() => ({ anchorName: `--${id}` }));
|
|
8044
8928
|
const contentAttrs = toRef(() => ({
|
|
@@ -8054,228 +8938,101 @@ function usePopover(options = {}) {
|
|
|
8054
8938
|
"position-try-fallbacks": positionTry
|
|
8055
8939
|
}));
|
|
8056
8940
|
/* v8 ignore start -- browser popover API */
|
|
8057
|
-
function attach(el) {
|
|
8058
|
-
onMounted(() => {
|
|
8059
|
-
const element = toValue(el);
|
|
8060
|
-
if (isOpen.value) element?.showPopover();
|
|
8061
|
-
});
|
|
8062
|
-
watch(isOpen, (value) => {
|
|
8063
|
-
const element = toValue(el);
|
|
8064
|
-
if (!element?.isConnected) return;
|
|
8065
|
-
if (value === element.matches?.(":popover-open")) return;
|
|
8066
|
-
if (value) element.showPopover?.();
|
|
8067
|
-
else element.hidePopover?.();
|
|
8068
|
-
});
|
|
8069
|
-
useEventListener(el, "toggle", (e) => {
|
|
8070
|
-
if (!toValue(el)?.isConnected) return;
|
|
8071
|
-
isOpen.value = e.newState === "open";
|
|
8072
|
-
});
|
|
8073
|
-
}
|
|
8074
|
-
/* v8 ignore stop */
|
|
8075
|
-
return {
|
|
8076
|
-
isOpen,
|
|
8077
|
-
id,
|
|
8078
|
-
open,
|
|
8079
|
-
close,
|
|
8080
|
-
toggle,
|
|
8081
|
-
anchorStyles,
|
|
8082
|
-
contentAttrs,
|
|
8083
|
-
contentStyles,
|
|
8084
|
-
attach
|
|
8085
|
-
};
|
|
8086
|
-
}
|
|
8087
|
-
//#endregion
|
|
8088
|
-
//#region src/composables/createQueue/index.ts
|
|
8089
|
-
/**
|
|
8090
|
-
* @module createQueue
|
|
8091
|
-
*
|
|
8092
|
-
* @remarks
|
|
8093
|
-
* A queue composable for managing time-based collections with:
|
|
8094
|
-
* - Automatic timeout-based removal
|
|
8095
|
-
* - Pause/resume functionality
|
|
8096
|
-
* - FIFO (First In, First Out) ordering
|
|
8097
|
-
* - Manual dismissal support
|
|
8098
|
-
* - Queue progression management
|
|
8099
|
-
*
|
|
8100
|
-
* Built on top of createRegistry, the queue automatically manages timeouts for tickets,
|
|
8101
|
-
* ensuring only the first ticket in the queue is active at any time. When a ticket
|
|
8102
|
-
* expires or is removed, the next ticket in the queue automatically becomes active.
|
|
8103
|
-
*/
|
|
8104
|
-
/**
|
|
8105
|
-
* Creates a new queue instance
|
|
8106
|
-
*
|
|
8107
|
-
* @param options The options for the queue instance
|
|
8108
|
-
* @template Z The type of queue ticket that extends QueueTicket. Use this to add custom properties to tickets.
|
|
8109
|
-
* @template E The type of queue context that extends QueueContext<Z>. Use this when extending the queue with additional methods.
|
|
8110
|
-
* @returns A new queue instance
|
|
8111
|
-
*
|
|
8112
|
-
* @see https://0.vuetifyjs.com/composables/registration/create-queue
|
|
8113
|
-
*
|
|
8114
|
-
* @example
|
|
8115
|
-
* ```ts
|
|
8116
|
-
* import { useQueue } from '@vuetify/v0'
|
|
8117
|
-
*
|
|
8118
|
-
* const queue = useQueue()
|
|
8119
|
-
*
|
|
8120
|
-
* // Register an ticket with default timeout (3000ms)
|
|
8121
|
-
* const ticket1 = queue.register({ value: 'Ticket 1' })
|
|
8122
|
-
*
|
|
8123
|
-
* // Register an ticket with custom timeout
|
|
8124
|
-
* const ticket2 = queue.register({ value: 'Ticket 2', timeout: 5000 })
|
|
8125
|
-
*
|
|
8126
|
-
* // Register a persistent ticket that must be manually dismissed
|
|
8127
|
-
* const ticket3 = queue.register({ value: 'Ticket 3', timeout: -1 })
|
|
8128
|
-
*
|
|
8129
|
-
* // Dismiss an ticket using the convenience method
|
|
8130
|
-
* ticket3.dismiss()
|
|
8131
|
-
*
|
|
8132
|
-
* console.log(queue.size) // 2
|
|
8133
|
-
* ```
|
|
8134
|
-
*/
|
|
8135
|
-
function createQueue(_options = {}) {
|
|
8136
|
-
const { timeout: _timeout = 3e3, ...options } = _options;
|
|
8137
|
-
const registry = createRegistry({
|
|
8138
|
-
...options,
|
|
8139
|
-
events: true
|
|
8140
|
-
});
|
|
8141
|
-
const timeouts = /* @__PURE__ */ new Map();
|
|
8142
|
-
function startTimeout(ticket) {
|
|
8143
|
-
if (/* @__PURE__ */ isUndefined(ticket.timeout) || ticket.timeout < 0 || ticket.isPaused) return;
|
|
8144
|
-
const timeout = setTimeout(() => {
|
|
8145
|
-
timeouts.delete(ticket.id);
|
|
8146
|
-
registry.unregister(ticket.id);
|
|
8147
|
-
resume();
|
|
8148
|
-
}, ticket.timeout);
|
|
8149
|
-
timeouts.set(ticket.id, timeout);
|
|
8150
|
-
}
|
|
8151
|
-
function clearTimeout(id) {
|
|
8152
|
-
const timeout = timeouts.get(id);
|
|
8153
|
-
if (timeout) {
|
|
8154
|
-
globalThis.clearTimeout(timeout);
|
|
8155
|
-
timeouts.delete(id);
|
|
8156
|
-
}
|
|
8157
|
-
}
|
|
8158
|
-
function register(registration = {}) {
|
|
8159
|
-
const id = registration.id ?? /* @__PURE__ */ useId();
|
|
8160
|
-
const timeout = Object.prototype.hasOwnProperty.call(registration, "timeout") ? registration.timeout : _timeout;
|
|
8161
|
-
const ticket = {
|
|
8162
|
-
...registration,
|
|
8163
|
-
id,
|
|
8164
|
-
timeout,
|
|
8165
|
-
isPaused: registry.size > 0,
|
|
8166
|
-
dismiss: () => unregister(id)
|
|
8167
|
-
};
|
|
8168
|
-
const registered = registry.register(ticket);
|
|
8169
|
-
startTimeout(registered);
|
|
8170
|
-
return registered;
|
|
8171
|
-
}
|
|
8172
|
-
function unregister(id) {
|
|
8173
|
-
const ticket = /* @__PURE__ */ isUndefined(id) ? registry.seek("first") : registry.get(id);
|
|
8174
|
-
if (!ticket) return void 0;
|
|
8175
|
-
const wasFirst = ticket.index === 0;
|
|
8176
|
-
clearTimeout(ticket.id);
|
|
8177
|
-
registry.unregister(ticket.id);
|
|
8178
|
-
if (wasFirst) resume();
|
|
8179
|
-
return ticket;
|
|
8180
|
-
}
|
|
8181
|
-
function offboard(ids) {
|
|
8182
|
-
let hadFirst = false;
|
|
8183
|
-
for (const id of ids) {
|
|
8184
|
-
const ticket = registry.get(id);
|
|
8185
|
-
if (!ticket) continue;
|
|
8186
|
-
if (ticket.index === 0) hadFirst = true;
|
|
8187
|
-
clearTimeout(ticket.id);
|
|
8188
|
-
}
|
|
8189
|
-
registry.offboard(ids);
|
|
8190
|
-
if (hadFirst) resume();
|
|
8191
|
-
}
|
|
8192
|
-
function pause() {
|
|
8193
|
-
const ticket = registry.seek("first");
|
|
8194
|
-
if (!ticket || ticket.isPaused) return void 0;
|
|
8195
|
-
clearTimeout(ticket.id);
|
|
8196
|
-
return registry.upsert(ticket.id, { isPaused: true });
|
|
8197
|
-
}
|
|
8198
|
-
function resume() {
|
|
8199
|
-
const ticket = registry.seek("first");
|
|
8200
|
-
if (!ticket || ticket.index !== 0 || !ticket.isPaused) return void 0;
|
|
8201
|
-
const updated = registry.upsert(ticket.id, { isPaused: false });
|
|
8202
|
-
startTimeout(updated);
|
|
8203
|
-
return updated;
|
|
8204
|
-
}
|
|
8205
|
-
function clear() {
|
|
8206
|
-
for (const id of timeouts.keys()) clearTimeout(id);
|
|
8207
|
-
registry.clear();
|
|
8208
|
-
}
|
|
8209
|
-
function dispose() {
|
|
8210
|
-
clear();
|
|
8211
|
-
registry.dispose();
|
|
8212
|
-
}
|
|
8213
|
-
onScopeDispose(dispose, true);
|
|
8214
|
-
function onboard(registrations) {
|
|
8215
|
-
return registry.batch(() => registrations.map((registration) => register(registration)));
|
|
8941
|
+
function attach(el) {
|
|
8942
|
+
onMounted(() => {
|
|
8943
|
+
const element = toValue(el);
|
|
8944
|
+
if (isOpen.value) element?.showPopover();
|
|
8945
|
+
});
|
|
8946
|
+
watch(isOpen, (value) => {
|
|
8947
|
+
const element = toValue(el);
|
|
8948
|
+
if (!element?.isConnected) return;
|
|
8949
|
+
if (value === element.matches?.(":popover-open")) return;
|
|
8950
|
+
if (value) element.showPopover?.();
|
|
8951
|
+
else element.hidePopover?.();
|
|
8952
|
+
});
|
|
8953
|
+
useEventListener(el, "toggle", (e) => {
|
|
8954
|
+
if (!toValue(el)?.isConnected) return;
|
|
8955
|
+
isOpen.value = e.newState === "open";
|
|
8956
|
+
});
|
|
8216
8957
|
}
|
|
8958
|
+
/* v8 ignore stop */
|
|
8217
8959
|
return {
|
|
8218
|
-
|
|
8219
|
-
|
|
8220
|
-
|
|
8221
|
-
|
|
8222
|
-
|
|
8223
|
-
|
|
8224
|
-
|
|
8225
|
-
|
|
8226
|
-
|
|
8227
|
-
get size() {
|
|
8228
|
-
return registry.size;
|
|
8229
|
-
}
|
|
8960
|
+
isOpen,
|
|
8961
|
+
id,
|
|
8962
|
+
open,
|
|
8963
|
+
close,
|
|
8964
|
+
toggle,
|
|
8965
|
+
anchorStyles,
|
|
8966
|
+
contentAttrs,
|
|
8967
|
+
contentStyles,
|
|
8968
|
+
attach
|
|
8230
8969
|
};
|
|
8231
8970
|
}
|
|
8971
|
+
//#endregion
|
|
8972
|
+
//#region src/composables/useRaf/index.ts
|
|
8232
8973
|
/**
|
|
8233
|
-
*
|
|
8974
|
+
* @module useRaf
|
|
8234
8975
|
*
|
|
8235
|
-
* @
|
|
8236
|
-
* @template Z The type of the queue ticket.
|
|
8237
|
-
* @template E The type of the queue context.
|
|
8238
|
-
* @returns A new queue context.
|
|
8976
|
+
* @see https://0.vuetifyjs.com/composables/system/use-raf
|
|
8239
8977
|
*
|
|
8240
|
-
* @
|
|
8978
|
+
* @remarks
|
|
8979
|
+
* Scope-disposed safe requestAnimationFrame composable.
|
|
8241
8980
|
*
|
|
8242
|
-
*
|
|
8243
|
-
*
|
|
8244
|
-
*
|
|
8981
|
+
* Key features:
|
|
8982
|
+
* - Cancel-then-request pattern (deduplicates rapid calls)
|
|
8983
|
+
* - Automatic cleanup on scope disposal
|
|
8984
|
+
* - SSR-safe (no-op in non-browser environments)
|
|
8985
|
+
* - Callable function with cancel method
|
|
8245
8986
|
*
|
|
8246
|
-
*
|
|
8247
|
-
* timeout: 5000,
|
|
8248
|
-
* })
|
|
8249
|
-
* ```
|
|
8987
|
+
* Perfect for throttling updates to the next animation frame.
|
|
8250
8988
|
*/
|
|
8251
|
-
function createQueueContext(_options = {}) {
|
|
8252
|
-
const { namespace = "v0:queue", ...options } = _options;
|
|
8253
|
-
const [useQueueContext, _provideQueueContext] = createContext(namespace);
|
|
8254
|
-
const context = createQueue(options);
|
|
8255
|
-
function provideQueueContext(_context = context, app) {
|
|
8256
|
-
return _provideQueueContext(_context, app);
|
|
8257
|
-
}
|
|
8258
|
-
return createTrinity(useQueueContext, provideQueueContext, context);
|
|
8259
|
-
}
|
|
8260
8989
|
/**
|
|
8261
|
-
*
|
|
8990
|
+
* Scope-disposed safe requestAnimationFrame.
|
|
8262
8991
|
*
|
|
8263
|
-
* @param
|
|
8264
|
-
* @returns
|
|
8992
|
+
* @param callback Function to call on animation frame.
|
|
8993
|
+
* @returns Callable that requests frame (canceling pending), with cancel method.
|
|
8265
8994
|
*
|
|
8266
|
-
* @see https://0.vuetifyjs.com/composables/
|
|
8995
|
+
* @see https://0.vuetifyjs.com/composables/system/use-raf
|
|
8267
8996
|
*
|
|
8268
8997
|
* @example
|
|
8269
|
-
* ```
|
|
8270
|
-
*
|
|
8271
|
-
*
|
|
8998
|
+
* ```ts
|
|
8999
|
+
* // Basic usage
|
|
9000
|
+
* const update = useRaf((timestamp) => {
|
|
9001
|
+
* // Runs on next animation frame
|
|
9002
|
+
* })
|
|
8272
9003
|
*
|
|
8273
|
-
*
|
|
8274
|
-
*
|
|
9004
|
+
* update() // Request frame
|
|
9005
|
+
* update() // Cancels previous, requests new (deduplicated)
|
|
9006
|
+
*
|
|
9007
|
+
* // Manual cancel
|
|
9008
|
+
* update.cancel()
|
|
9009
|
+
*
|
|
9010
|
+
* // Check if pending
|
|
9011
|
+
* if (update.isActive.value) { ... }
|
|
8275
9012
|
* ```
|
|
8276
9013
|
*/
|
|
8277
|
-
function
|
|
8278
|
-
|
|
9014
|
+
function useRaf(callback) {
|
|
9015
|
+
const id = shallowRef();
|
|
9016
|
+
const isActive = toRef(() => !/* @__PURE__ */ isUndefined(id.value));
|
|
9017
|
+
function cancel() {
|
|
9018
|
+
if (!/* @__PURE__ */ isUndefined(id.value)) {
|
|
9019
|
+
cancelAnimationFrame(id.value);
|
|
9020
|
+
id.value = void 0;
|
|
9021
|
+
}
|
|
9022
|
+
}
|
|
9023
|
+
function request() {
|
|
9024
|
+
if (!IN_BROWSER) return;
|
|
9025
|
+
cancel();
|
|
9026
|
+
id.value = requestAnimationFrame((timestamp) => {
|
|
9027
|
+
id.value = void 0;
|
|
9028
|
+
callback(timestamp);
|
|
9029
|
+
});
|
|
9030
|
+
}
|
|
9031
|
+
onScopeDispose(cancel, true);
|
|
9032
|
+
return Object.assign(request, {
|
|
9033
|
+
cancel,
|
|
9034
|
+
isActive
|
|
9035
|
+
});
|
|
8279
9036
|
}
|
|
8280
9037
|
//#endregion
|
|
8281
9038
|
//#region src/composables/useRules/adapters/standard.ts
|
|
@@ -8866,6 +9623,9 @@ function createSlider(options = {}) {
|
|
|
8866
9623
|
function ceil(index) {
|
|
8867
9624
|
set(index, max);
|
|
8868
9625
|
}
|
|
9626
|
+
function onboard(registrations) {
|
|
9627
|
+
return model.batch(() => registrations.map((r) => register(r)));
|
|
9628
|
+
}
|
|
8869
9629
|
return {
|
|
8870
9630
|
...model,
|
|
8871
9631
|
values,
|
|
@@ -8882,6 +9642,7 @@ function createSlider(options = {}) {
|
|
|
8882
9642
|
orientation,
|
|
8883
9643
|
inverted,
|
|
8884
9644
|
register,
|
|
9645
|
+
onboard,
|
|
8885
9646
|
snap,
|
|
8886
9647
|
fromValue,
|
|
8887
9648
|
fromPercent,
|
|
@@ -8961,12 +9722,12 @@ function createStack(_options = {}) {
|
|
|
8961
9722
|
const id = input.id ?? /* @__PURE__ */ useId();
|
|
8962
9723
|
const blocking = input.blocking ?? false;
|
|
8963
9724
|
const onDismiss = input.onDismiss;
|
|
8964
|
-
const zIndex =
|
|
9725
|
+
const zIndex = toRef(() => {
|
|
8965
9726
|
const position = ids().indexOf(id);
|
|
8966
9727
|
if (position === -1) return baseZIndex;
|
|
8967
9728
|
return baseZIndex + position * increment;
|
|
8968
9729
|
});
|
|
8969
|
-
const globalTop =
|
|
9730
|
+
const globalTop = toRef(() => {
|
|
8970
9731
|
const list = ids();
|
|
8971
9732
|
if (list.length === 0) return false;
|
|
8972
9733
|
return list.at(-1) === id;
|
|
@@ -9633,7 +10394,7 @@ function createTheme(_options = {}) {
|
|
|
9633
10394
|
});
|
|
9634
10395
|
if (id === options.default && !registry.selectedId.value) registry.select(id);
|
|
9635
10396
|
}
|
|
9636
|
-
const names =
|
|
10397
|
+
const names = toRef(() => registry.keys());
|
|
9637
10398
|
const colors = computed(() => {
|
|
9638
10399
|
const resolved = {};
|
|
9639
10400
|
for (const theme of registry.values()) {
|
|
@@ -9767,6 +10528,12 @@ function createTimeline(_options = {}) {
|
|
|
9767
10528
|
function redo() {
|
|
9768
10529
|
if (stack.length === 0) return void 0;
|
|
9769
10530
|
const item = stack.pop();
|
|
10531
|
+
if (registry.size >= size) {
|
|
10532
|
+
const oldest = registry.seek("first");
|
|
10533
|
+
if (overflow.length === size) overflow.shift();
|
|
10534
|
+
overflow.push(oldest);
|
|
10535
|
+
registry.unregister(oldest.id);
|
|
10536
|
+
}
|
|
9770
10537
|
const ticket = registry.register(item);
|
|
9771
10538
|
registry.reindex();
|
|
9772
10539
|
return ticket;
|
|
@@ -11868,7 +12635,7 @@ const _sfc_main$40 = /* @__PURE__ */ defineComponent({
|
|
|
11868
12635
|
prev: pagination.prev,
|
|
11869
12636
|
select: pagination.select,
|
|
11870
12637
|
attrs: {
|
|
11871
|
-
"aria-label": locale.t("Pagination.label"
|
|
12638
|
+
"aria-label": locale.t("Pagination.label"),
|
|
11872
12639
|
"role": __props.as === "nav" ? void 0 : "navigation"
|
|
11873
12640
|
}
|
|
11874
12641
|
}));
|
|
@@ -11965,7 +12732,7 @@ const _sfc_main$35 = /* @__PURE__ */ defineComponent({
|
|
|
11965
12732
|
isDisabled: isDisabled.value,
|
|
11966
12733
|
first,
|
|
11967
12734
|
attrs: {
|
|
11968
|
-
"aria-label": locale.t("Pagination.first"
|
|
12735
|
+
"aria-label": locale.t("Pagination.first"),
|
|
11969
12736
|
"aria-disabled": isDisabled.value,
|
|
11970
12737
|
"data-disabled": isDisabled.value || void 0,
|
|
11971
12738
|
"disabled": __props.as === "button" ? isDisabled.value : void 0,
|
|
@@ -12019,7 +12786,7 @@ const _sfc_main$36 = /* @__PURE__ */ defineComponent({
|
|
|
12019
12786
|
}, { immediate: true });
|
|
12020
12787
|
const isSelected = toRef(() => pagination.page.value === __props.value);
|
|
12021
12788
|
const ariaLabel = toRef(() => {
|
|
12022
|
-
return isSelected.value ? locale.t("Pagination.currentPage", { page: __props.value }
|
|
12789
|
+
return isSelected.value ? locale.t("Pagination.currentPage", { page: __props.value }) : locale.t("Pagination.goToPage", { page: __props.value });
|
|
12023
12790
|
});
|
|
12024
12791
|
function select() {
|
|
12025
12792
|
if (__props.disabled) return;
|
|
@@ -12090,7 +12857,7 @@ const _sfc_main$37 = /* @__PURE__ */ defineComponent({
|
|
|
12090
12857
|
isDisabled: isDisabled.value,
|
|
12091
12858
|
last,
|
|
12092
12859
|
attrs: {
|
|
12093
|
-
"aria-label": locale.t("Pagination.last"
|
|
12860
|
+
"aria-label": locale.t("Pagination.last"),
|
|
12094
12861
|
"aria-disabled": isDisabled.value,
|
|
12095
12862
|
"data-disabled": isDisabled.value || void 0,
|
|
12096
12863
|
"disabled": __props.as === "button" ? isDisabled.value : void 0,
|
|
@@ -12147,7 +12914,7 @@ const _sfc_main$38 = /* @__PURE__ */ defineComponent({
|
|
|
12147
12914
|
isDisabled: isDisabled.value,
|
|
12148
12915
|
next,
|
|
12149
12916
|
attrs: {
|
|
12150
|
-
"aria-label": locale.t("Pagination.next"
|
|
12917
|
+
"aria-label": locale.t("Pagination.next"),
|
|
12151
12918
|
"aria-disabled": isDisabled.value,
|
|
12152
12919
|
"data-disabled": isDisabled.value || void 0,
|
|
12153
12920
|
"disabled": __props.as === "button" ? isDisabled.value : void 0,
|
|
@@ -12204,7 +12971,7 @@ const _sfc_main$39 = /* @__PURE__ */ defineComponent({
|
|
|
12204
12971
|
isDisabled: isDisabled.value,
|
|
12205
12972
|
prev,
|
|
12206
12973
|
attrs: {
|
|
12207
|
-
"aria-label": locale.t("Pagination.prev"
|
|
12974
|
+
"aria-label": locale.t("Pagination.prev"),
|
|
12208
12975
|
"aria-disabled": isDisabled.value,
|
|
12209
12976
|
"data-disabled": isDisabled.value || void 0,
|
|
12210
12977
|
"disabled": __props.as === "button" ? isDisabled.value : void 0,
|
|
@@ -12249,7 +13016,7 @@ const _sfc_main$41 = /* @__PURE__ */ defineComponent({
|
|
|
12249
13016
|
text.value = locale.t("Pagination.status", {
|
|
12250
13017
|
page,
|
|
12251
13018
|
pages: pagination.pages
|
|
12252
|
-
}
|
|
13019
|
+
});
|
|
12253
13020
|
}, 100);
|
|
12254
13021
|
});
|
|
12255
13022
|
/* v8 ignore stop */
|
|
@@ -12854,7 +13621,7 @@ const visuallyHiddenStyle$1 = {
|
|
|
12854
13621
|
whiteSpace: "nowrap",
|
|
12855
13622
|
border: "0"
|
|
12856
13623
|
};
|
|
12857
|
-
const _sfc_main$
|
|
13624
|
+
const _sfc_main$86 = /* @__PURE__ */ defineComponent({
|
|
12858
13625
|
name: "SelectHiddenInput",
|
|
12859
13626
|
__name: "SelectHiddenInput",
|
|
12860
13627
|
props: { namespace: { default: "v0:select" } },
|
|
@@ -12927,10 +13694,7 @@ const _sfc_main$55 = /* @__PURE__ */ defineComponent({
|
|
|
12927
13694
|
events: true
|
|
12928
13695
|
});
|
|
12929
13696
|
useProxyModel(selection, model, { multiple: __props.multiple });
|
|
12930
|
-
const selectedId = toRef(() =>
|
|
12931
|
-
const ids = Array.from(selection.selectedIds);
|
|
12932
|
-
return ids.length > 0 ? ids[0] : void 0;
|
|
12933
|
-
});
|
|
13697
|
+
const selectedId = toRef(() => selection.selectedIds.values().next().value);
|
|
12934
13698
|
const popover = usePopover({ id });
|
|
12935
13699
|
const isOpen = popover.isOpen;
|
|
12936
13700
|
const activatorEl = shallowRef(null);
|
|
@@ -13003,7 +13767,7 @@ const _sfc_main$55 = /* @__PURE__ */ defineComponent({
|
|
|
13003
13767
|
}, {
|
|
13004
13768
|
default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)))]),
|
|
13005
13769
|
_: 3
|
|
13006
|
-
}, 8, ["as"]), __props.name ? (openBlock(), createBlock(_sfc_main$
|
|
13770
|
+
}, 8, ["as"]), __props.name ? (openBlock(), createBlock(_sfc_main$86, { key: 0 })) : createCommentVNode("v-if", true)], 64);
|
|
13007
13771
|
};
|
|
13008
13772
|
}
|
|
13009
13773
|
});
|
|
@@ -13425,6 +14189,231 @@ const Selection = {
|
|
|
13425
14189
|
Item: _sfc_main$57
|
|
13426
14190
|
};
|
|
13427
14191
|
//#endregion
|
|
14192
|
+
//#region src/components/Snackbar/SnackbarPortal.vue
|
|
14193
|
+
const _sfc_main$68 = /* @__PURE__ */ defineComponent({
|
|
14194
|
+
name: "SnackbarPortal",
|
|
14195
|
+
inheritAttrs: false,
|
|
14196
|
+
__name: "SnackbarPortal",
|
|
14197
|
+
props: {
|
|
14198
|
+
teleport: {
|
|
14199
|
+
type: [String, Boolean],
|
|
14200
|
+
default: "body"
|
|
14201
|
+
},
|
|
14202
|
+
as: { default: "div" },
|
|
14203
|
+
renderless: { type: Boolean }
|
|
14204
|
+
},
|
|
14205
|
+
setup(__props) {
|
|
14206
|
+
const ticket = useStack().register();
|
|
14207
|
+
onUnmounted(() => ticket.unregister());
|
|
14208
|
+
const styles = toRef(() => ({ zIndex: ticket.zIndex.value }));
|
|
14209
|
+
const slotProps = toRef(() => ({ zIndex: ticket.zIndex.value }));
|
|
14210
|
+
return (_ctx, _cache) => {
|
|
14211
|
+
return __props.teleport ? (openBlock(), createBlock(Teleport, {
|
|
14212
|
+
key: 0,
|
|
14213
|
+
to: __props.teleport
|
|
14214
|
+
}, [createVNode(unref(_sfc_main), mergeProps({
|
|
14215
|
+
as: __props.as,
|
|
14216
|
+
style: styles.value
|
|
14217
|
+
}, _ctx.$attrs), {
|
|
14218
|
+
default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)))]),
|
|
14219
|
+
_: 3
|
|
14220
|
+
}, 16, ["as", "style"])], 8, ["to"])) : (openBlock(), createBlock(unref(_sfc_main), mergeProps({
|
|
14221
|
+
key: 1,
|
|
14222
|
+
as: __props.as,
|
|
14223
|
+
style: styles.value
|
|
14224
|
+
}, _ctx.$attrs), {
|
|
14225
|
+
default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)))]),
|
|
14226
|
+
_: 3
|
|
14227
|
+
}, 16, ["as", "style"]));
|
|
14228
|
+
};
|
|
14229
|
+
}
|
|
14230
|
+
});
|
|
14231
|
+
//#endregion
|
|
14232
|
+
//#region src/components/Snackbar/SnackbarQueue.vue
|
|
14233
|
+
const [useSnackbarQueueContext, provideSnackbarQueueContext] = createContext({ suffix: "queue" });
|
|
14234
|
+
const _sfc_main$69 = /* @__PURE__ */ defineComponent({
|
|
14235
|
+
name: "SnackbarQueue",
|
|
14236
|
+
__name: "SnackbarQueue",
|
|
14237
|
+
props: {
|
|
14238
|
+
namespace: { default: "v0:notifications" },
|
|
14239
|
+
as: { default: "div" },
|
|
14240
|
+
renderless: { type: Boolean }
|
|
14241
|
+
},
|
|
14242
|
+
setup(__props) {
|
|
14243
|
+
const notifications = useNotifications(__props.namespace);
|
|
14244
|
+
function dismiss(id) {
|
|
14245
|
+
notifications.unregister(id);
|
|
14246
|
+
if (reasons.size > 0) notifications.queue.pause();
|
|
14247
|
+
}
|
|
14248
|
+
provideSnackbarQueueContext(__props.namespace, { dismiss });
|
|
14249
|
+
const items = computed(() => notifications.queue.values().map((q) => notifications.get(q.id)).filter((n) => !/* @__PURE__ */ isUndefined(n)).toReversed());
|
|
14250
|
+
const container = useTemplateRef("container");
|
|
14251
|
+
const reasons = /* @__PURE__ */ new Set();
|
|
14252
|
+
function pause(reason) {
|
|
14253
|
+
reasons.add(reason);
|
|
14254
|
+
notifications.queue.pause();
|
|
14255
|
+
}
|
|
14256
|
+
function resume(reason) {
|
|
14257
|
+
reasons.delete(reason);
|
|
14258
|
+
if (reasons.size === 0) notifications.queue.resume();
|
|
14259
|
+
}
|
|
14260
|
+
function onEnter() {
|
|
14261
|
+
pause("hover");
|
|
14262
|
+
}
|
|
14263
|
+
function onLeave() {
|
|
14264
|
+
resume("hover");
|
|
14265
|
+
}
|
|
14266
|
+
function onFocusin() {
|
|
14267
|
+
pause("focus");
|
|
14268
|
+
}
|
|
14269
|
+
function onFocusout(e) {
|
|
14270
|
+
const el = container.value?.element ?? null;
|
|
14271
|
+
if (/* @__PURE__ */ isElement(el) && /* @__PURE__ */ isElement(e.relatedTarget) && el.contains(e.relatedTarget)) return;
|
|
14272
|
+
resume("focus");
|
|
14273
|
+
}
|
|
14274
|
+
onUnmounted(() => {
|
|
14275
|
+
if (reasons.size > 0) {
|
|
14276
|
+
reasons.clear();
|
|
14277
|
+
notifications.queue.resume();
|
|
14278
|
+
}
|
|
14279
|
+
});
|
|
14280
|
+
const slotProps = toRef(() => ({
|
|
14281
|
+
items: items.value,
|
|
14282
|
+
attrs: {
|
|
14283
|
+
onMouseenter: onEnter,
|
|
14284
|
+
onMouseleave: onLeave,
|
|
14285
|
+
onFocusin,
|
|
14286
|
+
onFocusout
|
|
14287
|
+
}
|
|
14288
|
+
}));
|
|
14289
|
+
return (_ctx, _cache) => {
|
|
14290
|
+
return openBlock(), createBlock(unref(_sfc_main), mergeProps({
|
|
14291
|
+
ref_key: "container",
|
|
14292
|
+
ref: container
|
|
14293
|
+
}, slotProps.value.attrs, { as: __props.as }), {
|
|
14294
|
+
default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)))]),
|
|
14295
|
+
_: 3
|
|
14296
|
+
}, 16, ["as"]);
|
|
14297
|
+
};
|
|
14298
|
+
}
|
|
14299
|
+
});
|
|
14300
|
+
//#endregion
|
|
14301
|
+
//#region src/components/Snackbar/SnackbarRoot.vue
|
|
14302
|
+
const [useSnackbarRootContext, provideSnackbarRootContext] = createContext({ suffix: "root" });
|
|
14303
|
+
const _sfc_main$70 = /* @__PURE__ */ defineComponent({
|
|
14304
|
+
name: "SnackbarRoot",
|
|
14305
|
+
__name: "SnackbarRoot",
|
|
14306
|
+
props: {
|
|
14307
|
+
namespace: { default: "v0:notifications" },
|
|
14308
|
+
id: { default: () => /* @__PURE__ */ useId() },
|
|
14309
|
+
as: { default: "div" },
|
|
14310
|
+
renderless: { type: Boolean }
|
|
14311
|
+
},
|
|
14312
|
+
emits: ["dismiss"],
|
|
14313
|
+
setup(__props, { emit: __emit }) {
|
|
14314
|
+
const emit = __emit;
|
|
14315
|
+
const queue = useSnackbarQueueContext(__props.namespace, null);
|
|
14316
|
+
function onDismiss() {
|
|
14317
|
+
if (queue) queue.dismiss(__props.id);
|
|
14318
|
+
else emit("dismiss", __props.id);
|
|
14319
|
+
}
|
|
14320
|
+
provideSnackbarRootContext(__props.namespace, {
|
|
14321
|
+
id: __props.id,
|
|
14322
|
+
onDismiss
|
|
14323
|
+
});
|
|
14324
|
+
const slotProps = toRef(() => ({
|
|
14325
|
+
id: __props.id,
|
|
14326
|
+
attrs: { role: "status" }
|
|
14327
|
+
}));
|
|
14328
|
+
return (_ctx, _cache) => {
|
|
14329
|
+
return openBlock(), createBlock(unref(_sfc_main), mergeProps(slotProps.value.attrs, { as: __props.as }), {
|
|
14330
|
+
default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)))]),
|
|
14331
|
+
_: 3
|
|
14332
|
+
}, 16, ["as"]);
|
|
14333
|
+
};
|
|
14334
|
+
}
|
|
14335
|
+
});
|
|
14336
|
+
//#endregion
|
|
14337
|
+
//#region src/components/Snackbar/SnackbarContent.vue
|
|
14338
|
+
const _sfc_main$67 = /* @__PURE__ */ defineComponent({
|
|
14339
|
+
name: "SnackbarContent",
|
|
14340
|
+
__name: "SnackbarContent",
|
|
14341
|
+
props: {
|
|
14342
|
+
as: { default: "div" },
|
|
14343
|
+
renderless: { type: Boolean }
|
|
14344
|
+
},
|
|
14345
|
+
setup(__props) {
|
|
14346
|
+
return (_ctx, _cache) => {
|
|
14347
|
+
return openBlock(), createBlock(unref(_sfc_main), { as: __props.as }, {
|
|
14348
|
+
default: withCtx(() => [renderSlot(_ctx.$slots, "default")]),
|
|
14349
|
+
_: 3
|
|
14350
|
+
}, 8, ["as"]);
|
|
14351
|
+
};
|
|
14352
|
+
}
|
|
14353
|
+
});
|
|
14354
|
+
//#endregion
|
|
14355
|
+
//#region src/components/Snackbar/SnackbarClose.vue
|
|
14356
|
+
const _sfc_main$66 = /* @__PURE__ */ defineComponent({
|
|
14357
|
+
name: "SnackbarClose",
|
|
14358
|
+
__name: "SnackbarClose",
|
|
14359
|
+
props: {
|
|
14360
|
+
namespace: { default: "v0:notifications" },
|
|
14361
|
+
as: { default: "button" },
|
|
14362
|
+
renderless: { type: Boolean }
|
|
14363
|
+
},
|
|
14364
|
+
setup(__props) {
|
|
14365
|
+
const context = useSnackbarRootContext(__props.namespace);
|
|
14366
|
+
function onClick() {
|
|
14367
|
+
context.onDismiss();
|
|
14368
|
+
}
|
|
14369
|
+
const slotProps = toRef(() => ({ attrs: {
|
|
14370
|
+
"type": __props.as === "button" ? "button" : void 0,
|
|
14371
|
+
"aria-label": "Close",
|
|
14372
|
+
"onClick": onClick
|
|
14373
|
+
} }));
|
|
14374
|
+
return (_ctx, _cache) => {
|
|
14375
|
+
return openBlock(), createBlock(unref(_sfc_main), mergeProps(slotProps.value.attrs, { as: __props.as }), {
|
|
14376
|
+
default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)))]),
|
|
14377
|
+
_: 3
|
|
14378
|
+
}, 16, ["as"]);
|
|
14379
|
+
};
|
|
14380
|
+
}
|
|
14381
|
+
});
|
|
14382
|
+
//#endregion
|
|
14383
|
+
//#region src/components/Snackbar/index.ts
|
|
14384
|
+
/**
|
|
14385
|
+
* Snackbar component with sub-components for building toast notifications.
|
|
14386
|
+
*
|
|
14387
|
+
* @see https://0.vuetifyjs.com/components/snackbar
|
|
14388
|
+
*
|
|
14389
|
+
* @example
|
|
14390
|
+
* ```vue
|
|
14391
|
+
* <script setup lang="ts">
|
|
14392
|
+
* import { Snackbar } from '@vuetify/v0'
|
|
14393
|
+
* <\/script>
|
|
14394
|
+
*
|
|
14395
|
+
* <template>
|
|
14396
|
+
* <Snackbar.Portal>
|
|
14397
|
+
* <Snackbar.Queue v-slot="{ items }">
|
|
14398
|
+
* <template v-for="item in items" :key="item.id">
|
|
14399
|
+
* <Snackbar.Root :id="item.id">
|
|
14400
|
+
* <Snackbar.Content>{{ item.subject }}</Snackbar.Content>
|
|
14401
|
+
* <Snackbar.Close />
|
|
14402
|
+
* </Snackbar.Root>
|
|
14403
|
+
* </template>
|
|
14404
|
+
* </Snackbar.Queue>
|
|
14405
|
+
* </Snackbar.Portal>
|
|
14406
|
+
* </template>
|
|
14407
|
+
* ```
|
|
14408
|
+
*/
|
|
14409
|
+
const Snackbar = {
|
|
14410
|
+
Portal: _sfc_main$68,
|
|
14411
|
+
Queue: _sfc_main$69,
|
|
14412
|
+
Root: _sfc_main$70,
|
|
14413
|
+
Content: _sfc_main$67,
|
|
14414
|
+
Close: _sfc_main$66
|
|
14415
|
+
};
|
|
14416
|
+
//#endregion
|
|
13428
14417
|
//#region src/components/Slider/SliderRoot.vue
|
|
13429
14418
|
const [useSliderRoot, provideSliderRoot] = createContext();
|
|
13430
14419
|
const _sfc_main$63 = /* @__PURE__ */ defineComponent({
|
|
@@ -13878,7 +14867,7 @@ const Slider = {
|
|
|
13878
14867
|
//#endregion
|
|
13879
14868
|
//#region src/components/Splitter/SplitterRoot.vue
|
|
13880
14869
|
const [useSplitterRoot, provideSplitterRoot] = createContext("v0:splitter");
|
|
13881
|
-
const _sfc_main$
|
|
14870
|
+
const _sfc_main$73 = /* @__PURE__ */ defineComponent({
|
|
13882
14871
|
name: "SplitterRoot",
|
|
13883
14872
|
inheritAttrs: false,
|
|
13884
14873
|
__name: "SplitterRoot",
|
|
@@ -14043,10 +15032,10 @@ const _sfc_main$68 = /* @__PURE__ */ defineComponent({
|
|
|
14043
15032
|
}, {
|
|
14044
15033
|
as: __props.as,
|
|
14045
15034
|
renderless: __props.renderless,
|
|
14046
|
-
style: {
|
|
15035
|
+
style: [unref(attrs).style, {
|
|
14047
15036
|
display: "flex",
|
|
14048
15037
|
flexDirection: __props.orientation === "horizontal" ? "row" : "column"
|
|
14049
|
-
}
|
|
15038
|
+
}]
|
|
14050
15039
|
}), {
|
|
14051
15040
|
default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)))]),
|
|
14052
15041
|
_: 3
|
|
@@ -14060,7 +15049,7 @@ const _sfc_main$68 = /* @__PURE__ */ defineComponent({
|
|
|
14060
15049
|
});
|
|
14061
15050
|
//#endregion
|
|
14062
15051
|
//#region src/components/Splitter/SplitterPanel.vue
|
|
14063
|
-
const _sfc_main$
|
|
15052
|
+
const _sfc_main$72 = /* @__PURE__ */ defineComponent({
|
|
14064
15053
|
name: "SplitterPanel",
|
|
14065
15054
|
inheritAttrs: false,
|
|
14066
15055
|
__name: "SplitterPanel",
|
|
@@ -14154,12 +15143,12 @@ const _sfc_main$67 = /* @__PURE__ */ defineComponent({
|
|
|
14154
15143
|
}, {
|
|
14155
15144
|
as: __props.as,
|
|
14156
15145
|
renderless: __props.renderless,
|
|
14157
|
-
style: {
|
|
15146
|
+
style: [unref(attrs).style, {
|
|
14158
15147
|
flexGrow: 0,
|
|
14159
15148
|
flexShrink: 0,
|
|
14160
15149
|
flexBasis: `${size.value}%`,
|
|
14161
15150
|
overflow: "hidden"
|
|
14162
|
-
}
|
|
15151
|
+
}]
|
|
14163
15152
|
}), {
|
|
14164
15153
|
default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)))]),
|
|
14165
15154
|
_: 3
|
|
@@ -14173,7 +15162,7 @@ const _sfc_main$67 = /* @__PURE__ */ defineComponent({
|
|
|
14173
15162
|
});
|
|
14174
15163
|
//#endregion
|
|
14175
15164
|
//#region src/components/Splitter/SplitterHandle.vue
|
|
14176
|
-
const _sfc_main$
|
|
15165
|
+
const _sfc_main$71 = /* @__PURE__ */ defineComponent({
|
|
14177
15166
|
name: "SplitterHandle",
|
|
14178
15167
|
inheritAttrs: false,
|
|
14179
15168
|
__name: "SplitterHandle",
|
|
@@ -14197,7 +15186,6 @@ const _sfc_main$66 = /* @__PURE__ */ defineComponent({
|
|
|
14197
15186
|
});
|
|
14198
15187
|
const hovering = shallowRef(false);
|
|
14199
15188
|
const startPosition = shallowRef(0);
|
|
14200
|
-
let rafId = 0;
|
|
14201
15189
|
let latestPos = 0;
|
|
14202
15190
|
const isDisabled = toRef(() => __props.disabled || splitter.disabled.value);
|
|
14203
15191
|
const isHorizontal = toRef(() => splitter.orientation.value === "horizontal");
|
|
@@ -14230,23 +15218,21 @@ const _sfc_main$66 = /* @__PURE__ */ defineComponent({
|
|
|
14230
15218
|
splitter.onStartDrag(ticket.index);
|
|
14231
15219
|
}
|
|
14232
15220
|
useToggleScope(() => splitter.draggingHandle.value === ticket.index, () => {
|
|
15221
|
+
const update = useRaf(() => {
|
|
15222
|
+
const root = splitter.rootEl.value;
|
|
15223
|
+
if (!root) return;
|
|
15224
|
+
const rootSize = isHorizontal.value ? root.offsetWidth : root.offsetHeight;
|
|
15225
|
+
if (!rootSize) return;
|
|
15226
|
+
const delta = (latestPos - startPosition.value) / rootSize * 100;
|
|
15227
|
+
startPosition.value = latestPos;
|
|
15228
|
+
splitter.resize(ticket.index, delta);
|
|
15229
|
+
});
|
|
14233
15230
|
useDocumentEventListener("pointermove", (e) => {
|
|
14234
15231
|
latestPos = isHorizontal.value ? e.clientX : e.clientY;
|
|
14235
|
-
|
|
14236
|
-
rafId = requestAnimationFrame(() => {
|
|
14237
|
-
const root = splitter.rootEl.value;
|
|
14238
|
-
if (!root) return;
|
|
14239
|
-
const rootSize = isHorizontal.value ? root.offsetWidth : root.offsetHeight;
|
|
14240
|
-
if (!rootSize) return;
|
|
14241
|
-
const delta = (latestPos - startPosition.value) / rootSize * 100;
|
|
14242
|
-
startPosition.value = latestPos;
|
|
14243
|
-
splitter.resize(ticket.index, delta);
|
|
14244
|
-
rafId = 0;
|
|
14245
|
-
});
|
|
15232
|
+
update();
|
|
14246
15233
|
});
|
|
14247
15234
|
useDocumentEventListener("pointerup", () => {
|
|
14248
|
-
|
|
14249
|
-
rafId = 0;
|
|
15235
|
+
update.cancel();
|
|
14250
15236
|
if (IN_BROWSER) {
|
|
14251
15237
|
document.documentElement.style.userSelect = "";
|
|
14252
15238
|
document.documentElement.style.touchAction = "";
|
|
@@ -14254,8 +15240,6 @@ const _sfc_main$66 = /* @__PURE__ */ defineComponent({
|
|
|
14254
15240
|
splitter.onEndDrag();
|
|
14255
15241
|
});
|
|
14256
15242
|
onScopeDispose(() => {
|
|
14257
|
-
if (rafId) cancelAnimationFrame(rafId);
|
|
14258
|
-
rafId = 0;
|
|
14259
15243
|
splitter.onEndDrag();
|
|
14260
15244
|
if (IN_BROWSER) {
|
|
14261
15245
|
document.documentElement.style.userSelect = "";
|
|
@@ -14356,11 +15340,19 @@ const _sfc_main$66 = /* @__PURE__ */ defineComponent({
|
|
|
14356
15340
|
}, {
|
|
14357
15341
|
as: __props.as,
|
|
14358
15342
|
renderless: __props.renderless,
|
|
14359
|
-
style:
|
|
15343
|
+
style: [
|
|
15344
|
+
unref(attrs).style,
|
|
15345
|
+
slotProps.value.attrs.style,
|
|
15346
|
+
{ flexShrink: 0 }
|
|
15347
|
+
]
|
|
14360
15348
|
}), {
|
|
14361
15349
|
default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)))]),
|
|
14362
15350
|
_: 3
|
|
14363
|
-
}, 16, [
|
|
15351
|
+
}, 16, [
|
|
15352
|
+
"as",
|
|
15353
|
+
"renderless",
|
|
15354
|
+
"style"
|
|
15355
|
+
]);
|
|
14364
15356
|
};
|
|
14365
15357
|
}
|
|
14366
15358
|
});
|
|
@@ -14393,14 +15385,14 @@ const _sfc_main$66 = /* @__PURE__ */ defineComponent({
|
|
|
14393
15385
|
* ```
|
|
14394
15386
|
*/
|
|
14395
15387
|
const Splitter = {
|
|
14396
|
-
Root: _sfc_main$
|
|
14397
|
-
Panel: _sfc_main$
|
|
14398
|
-
Handle: _sfc_main$
|
|
15388
|
+
Root: _sfc_main$73,
|
|
15389
|
+
Panel: _sfc_main$72,
|
|
15390
|
+
Handle: _sfc_main$71
|
|
14399
15391
|
};
|
|
14400
15392
|
//#endregion
|
|
14401
15393
|
//#region src/components/Switch/SwitchGroup.vue
|
|
14402
15394
|
const [useSwitchGroup, provideSwitchGroup] = createContext();
|
|
14403
|
-
const _sfc_main$
|
|
15395
|
+
const _sfc_main$76 = /* @__PURE__ */ defineComponent({
|
|
14404
15396
|
name: "SwitchGroup",
|
|
14405
15397
|
__name: "SwitchGroup",
|
|
14406
15398
|
props: /* @__PURE__ */ mergeModels({
|
|
@@ -14469,7 +15461,7 @@ const _sfc_main$71 = /* @__PURE__ */ defineComponent({
|
|
|
14469
15461
|
//#endregion
|
|
14470
15462
|
//#region src/components/Switch/SwitchRoot.vue
|
|
14471
15463
|
const [useSwitchRoot, provideSwitchRoot] = createContext();
|
|
14472
|
-
const _sfc_main$
|
|
15464
|
+
const _sfc_main$78 = /* @__PURE__ */ defineComponent({
|
|
14473
15465
|
name: "SwitchRoot",
|
|
14474
15466
|
inheritAttrs: false,
|
|
14475
15467
|
__name: "SwitchRoot",
|
|
@@ -14599,7 +15591,7 @@ const _sfc_main$73 = /* @__PURE__ */ defineComponent({
|
|
|
14599
15591
|
}), {
|
|
14600
15592
|
default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(slotProps.value)))]),
|
|
14601
15593
|
_: 3
|
|
14602
|
-
}, 16, ["as", "renderless"]), __props.name ? (openBlock(), createBlock(_sfc_main$
|
|
15594
|
+
}, 16, ["as", "renderless"]), __props.name ? (openBlock(), createBlock(_sfc_main$77, { key: 0 })) : createCommentVNode("v-if", true)], 64);
|
|
14603
15595
|
};
|
|
14604
15596
|
}
|
|
14605
15597
|
});
|
|
@@ -14623,7 +15615,7 @@ const visuallyHiddenStyle = {
|
|
|
14623
15615
|
whiteSpace: "nowrap",
|
|
14624
15616
|
border: "0"
|
|
14625
15617
|
};
|
|
14626
|
-
const _sfc_main$
|
|
15618
|
+
const _sfc_main$77 = /* @__PURE__ */ defineComponent({
|
|
14627
15619
|
name: "SwitchHiddenInput",
|
|
14628
15620
|
__name: "SwitchHiddenInput",
|
|
14629
15621
|
props: {
|
|
@@ -14661,7 +15653,7 @@ const _sfc_main$72 = /* @__PURE__ */ defineComponent({
|
|
|
14661
15653
|
});
|
|
14662
15654
|
//#endregion
|
|
14663
15655
|
//#region src/components/Switch/SwitchSelectAll.vue
|
|
14664
|
-
const _sfc_main$
|
|
15656
|
+
const _sfc_main$79 = /* @__PURE__ */ defineComponent({
|
|
14665
15657
|
name: "SwitchSelectAll",
|
|
14666
15658
|
inheritAttrs: false,
|
|
14667
15659
|
__name: "SwitchSelectAll",
|
|
@@ -14749,7 +15741,7 @@ const _sfc_main$74 = /* @__PURE__ */ defineComponent({
|
|
|
14749
15741
|
});
|
|
14750
15742
|
//#endregion
|
|
14751
15743
|
//#region src/components/Switch/SwitchThumb.vue
|
|
14752
|
-
const _sfc_main$
|
|
15744
|
+
const _sfc_main$80 = /* @__PURE__ */ defineComponent({
|
|
14753
15745
|
name: "SwitchThumb",
|
|
14754
15746
|
__name: "SwitchThumb",
|
|
14755
15747
|
props: {
|
|
@@ -14784,7 +15776,7 @@ const _sfc_main$75 = /* @__PURE__ */ defineComponent({
|
|
|
14784
15776
|
});
|
|
14785
15777
|
//#endregion
|
|
14786
15778
|
//#region src/components/Switch/SwitchTrack.vue
|
|
14787
|
-
const _sfc_main$
|
|
15779
|
+
const _sfc_main$81 = /* @__PURE__ */ defineComponent({
|
|
14788
15780
|
name: "SwitchTrack",
|
|
14789
15781
|
__name: "SwitchTrack",
|
|
14790
15782
|
props: {
|
|
@@ -14843,12 +15835,12 @@ const _sfc_main$76 = /* @__PURE__ */ defineComponent({
|
|
|
14843
15835
|
* ```
|
|
14844
15836
|
*/
|
|
14845
15837
|
const Switch = {
|
|
14846
|
-
Group: _sfc_main$
|
|
14847
|
-
HiddenInput: _sfc_main$
|
|
14848
|
-
Root: _sfc_main$
|
|
14849
|
-
SelectAll: _sfc_main$
|
|
14850
|
-
Thumb: _sfc_main$
|
|
14851
|
-
Track: _sfc_main$
|
|
15838
|
+
Group: _sfc_main$76,
|
|
15839
|
+
HiddenInput: _sfc_main$77,
|
|
15840
|
+
Root: _sfc_main$78,
|
|
15841
|
+
SelectAll: _sfc_main$79,
|
|
15842
|
+
Thumb: _sfc_main$80,
|
|
15843
|
+
Track: _sfc_main$81
|
|
14852
15844
|
};
|
|
14853
15845
|
//#endregion
|
|
14854
15846
|
//#region src/components/Single/SingleRoot.vue
|
|
@@ -14955,7 +15947,7 @@ const Single = {
|
|
|
14955
15947
|
//#endregion
|
|
14956
15948
|
//#region src/components/Step/StepRoot.vue
|
|
14957
15949
|
const [useStepRoot, provideStepRoot] = createContext();
|
|
14958
|
-
const _sfc_main$
|
|
15950
|
+
const _sfc_main$75 = /* @__PURE__ */ defineComponent({
|
|
14959
15951
|
name: "StepRoot",
|
|
14960
15952
|
__name: "StepRoot",
|
|
14961
15953
|
props: /* @__PURE__ */ mergeModels({
|
|
@@ -15006,7 +15998,7 @@ const _sfc_main$70 = /* @__PURE__ */ defineComponent({
|
|
|
15006
15998
|
});
|
|
15007
15999
|
//#endregion
|
|
15008
16000
|
//#region src/components/Step/StepItem.vue
|
|
15009
|
-
const _sfc_main$
|
|
16001
|
+
const _sfc_main$74 = /* @__PURE__ */ defineComponent({
|
|
15010
16002
|
name: "StepItem",
|
|
15011
16003
|
__name: "StepItem",
|
|
15012
16004
|
props: {
|
|
@@ -15056,13 +16048,13 @@ const _sfc_main$69 = /* @__PURE__ */ defineComponent({
|
|
|
15056
16048
|
* @see https://0.vuetifyjs.com/components/step
|
|
15057
16049
|
*/
|
|
15058
16050
|
const Step = {
|
|
15059
|
-
Root: _sfc_main$
|
|
15060
|
-
Item: _sfc_main$
|
|
16051
|
+
Root: _sfc_main$75,
|
|
16052
|
+
Item: _sfc_main$74
|
|
15061
16053
|
};
|
|
15062
16054
|
//#endregion
|
|
15063
16055
|
//#region src/components/Tabs/TabsRoot.vue
|
|
15064
16056
|
const [useTabsRoot, provideTabsRoot] = createContext();
|
|
15065
|
-
const _sfc_main$
|
|
16057
|
+
const _sfc_main$85 = /* @__PURE__ */ defineComponent({
|
|
15066
16058
|
name: "TabsRoot",
|
|
15067
16059
|
__name: "TabsRoot",
|
|
15068
16060
|
props: /* @__PURE__ */ mergeModels({
|
|
@@ -15130,7 +16122,7 @@ const _sfc_main$80 = /* @__PURE__ */ defineComponent({
|
|
|
15130
16122
|
});
|
|
15131
16123
|
//#endregion
|
|
15132
16124
|
//#region src/components/Tabs/TabsList.vue
|
|
15133
|
-
const _sfc_main$
|
|
16125
|
+
const _sfc_main$83 = /* @__PURE__ */ defineComponent({
|
|
15134
16126
|
name: "TabsList",
|
|
15135
16127
|
inheritAttrs: false,
|
|
15136
16128
|
__name: "TabsList",
|
|
@@ -15171,7 +16163,7 @@ const _sfc_main$78 = /* @__PURE__ */ defineComponent({
|
|
|
15171
16163
|
});
|
|
15172
16164
|
//#endregion
|
|
15173
16165
|
//#region src/components/Tabs/TabsItem.vue
|
|
15174
|
-
const _sfc_main$
|
|
16166
|
+
const _sfc_main$82 = /* @__PURE__ */ defineComponent({
|
|
15175
16167
|
name: "TabsItem",
|
|
15176
16168
|
inheritAttrs: false,
|
|
15177
16169
|
__name: "TabsItem",
|
|
@@ -15286,7 +16278,7 @@ const _sfc_main$77 = /* @__PURE__ */ defineComponent({
|
|
|
15286
16278
|
});
|
|
15287
16279
|
//#endregion
|
|
15288
16280
|
//#region src/components/Tabs/TabsPanel.vue
|
|
15289
|
-
const _sfc_main$
|
|
16281
|
+
const _sfc_main$84 = /* @__PURE__ */ defineComponent({
|
|
15290
16282
|
name: "TabsPanel",
|
|
15291
16283
|
inheritAttrs: false,
|
|
15292
16284
|
__name: "TabsPanel",
|
|
@@ -15367,10 +16359,10 @@ const _sfc_main$79 = /* @__PURE__ */ defineComponent({
|
|
|
15367
16359
|
* ```
|
|
15368
16360
|
*/
|
|
15369
16361
|
const Tabs = {
|
|
15370
|
-
Root: _sfc_main$
|
|
15371
|
-
List: _sfc_main$
|
|
15372
|
-
Item: _sfc_main$
|
|
15373
|
-
Panel: _sfc_main$
|
|
16362
|
+
Root: _sfc_main$85,
|
|
16363
|
+
List: _sfc_main$83,
|
|
16364
|
+
Item: _sfc_main$82,
|
|
16365
|
+
Panel: _sfc_main$84
|
|
15374
16366
|
};
|
|
15375
16367
|
//#endregion
|
|
15376
|
-
export { _sfc_main as Atom, Avatar, _sfc_main$1 as AvatarFallback, _sfc_main$2 as AvatarImage, _sfc_main$3 as AvatarRoot, Breadcrumbs, _sfc_main$4 as BreadcrumbsDivider, _sfc_main$5 as BreadcrumbsEllipsis, _sfc_main$6 as BreadcrumbsItem, _sfc_main$7 as BreadcrumbsLink, _sfc_main$8 as BreadcrumbsList, _sfc_main$9 as BreadcrumbsPage, _sfc_main$10 as BreadcrumbsRoot, COMMON_ELEMENTS, Checkbox, _sfc_main$11 as CheckboxGroup, _sfc_main$12 as CheckboxHiddenInput, _sfc_main$13 as CheckboxIndicator, _sfc_main$14 as CheckboxRoot, _sfc_main$15 as CheckboxSelectAll, ClientAdapter, ConsolaLoggerAdapter, DataTableAdapter, Dialog, _sfc_main$16 as DialogActivator, _sfc_main$17 as DialogClose, _sfc_main$18 as DialogContent, _sfc_main$19 as DialogDescription, _sfc_main$20 as DialogRoot, _sfc_main$21 as DialogTitle, ExpansionPanel, _sfc_main$22 as ExpansionPanelActivator, _sfc_main$23 as ExpansionPanelContent, _sfc_main$24 as ExpansionPanelHeader, _sfc_main$25 as ExpansionPanelItem, _sfc_main$26 as ExpansionPanelRoot, FeaturesAdapter, _sfc_main$27 as Form, Group, _sfc_main$28 as GroupItem, _sfc_main$29 as GroupRoot, IN_BROWSER, Input, _sfc_main$30 as InputControl, _sfc_main$31 as InputDescription, _sfc_main$32 as InputError, _sfc_main$33 as InputRoot, MemoryAdapter, Pagination, _sfc_main$34 as PaginationEllipsis, _sfc_main$35 as PaginationFirst, _sfc_main$36 as PaginationItem, _sfc_main$37 as PaginationLast, _sfc_main$38 as PaginationNext, _sfc_main$39 as PaginationPrev, _sfc_main$40 as PaginationRoot, _sfc_main$41 as PaginationStatus, PermissionAdapter, PinoLoggerAdapter, Popover, _sfc_main$42 as PopoverActivator, _sfc_main$43 as PopoverContent, _sfc_main$44 as PopoverRoot, Radio, _sfc_main$45 as RadioGroup, _sfc_main$46 as RadioHiddenInput, _sfc_main$47 as RadioIndicator, _sfc_main$48 as RadioRoot, SELF_CLOSING_TAGS, SUPPORTS_INTERSECTION_OBSERVER, SUPPORTS_MATCH_MEDIA, SUPPORTS_MUTATION_OBSERVER, SUPPORTS_OBSERVER, SUPPORTS_TOUCH, _sfc_main$49 as Scrim, Select, _sfc_main$50 as SelectActivator, _sfc_main$51 as SelectContent, _sfc_main$52 as SelectCue, _sfc_main$53 as SelectItem, _sfc_main$54 as SelectPlaceholder, _sfc_main$55 as SelectRoot, _sfc_main$56 as SelectValue, Selection, _sfc_main$57 as SelectionItem, _sfc_main$58 as SelectionRoot, ServerAdapter, Single, _sfc_main$59 as SingleItem, _sfc_main$60 as SingleRoot, Slider, _sfc_main$61 as SliderHiddenInput, _sfc_main$62 as SliderRange, _sfc_main$63 as SliderRoot, _sfc_main$64 as SliderThumb, _sfc_main$65 as SliderTrack,
|
|
16368
|
+
export { _sfc_main as Atom, Avatar, _sfc_main$1 as AvatarFallback, _sfc_main$2 as AvatarImage, _sfc_main$3 as AvatarRoot, Breadcrumbs, _sfc_main$4 as BreadcrumbsDivider, _sfc_main$5 as BreadcrumbsEllipsis, _sfc_main$6 as BreadcrumbsItem, _sfc_main$7 as BreadcrumbsLink, _sfc_main$8 as BreadcrumbsList, _sfc_main$9 as BreadcrumbsPage, _sfc_main$10 as BreadcrumbsRoot, COMMON_ELEMENTS, Checkbox, _sfc_main$11 as CheckboxGroup, _sfc_main$12 as CheckboxHiddenInput, _sfc_main$13 as CheckboxIndicator, _sfc_main$14 as CheckboxRoot, _sfc_main$15 as CheckboxSelectAll, ClientAdapter, ConsolaLoggerAdapter, DataTableAdapter, Dialog, _sfc_main$16 as DialogActivator, _sfc_main$17 as DialogClose, _sfc_main$18 as DialogContent, _sfc_main$19 as DialogDescription, _sfc_main$20 as DialogRoot, _sfc_main$21 as DialogTitle, ExpansionPanel, _sfc_main$22 as ExpansionPanelActivator, _sfc_main$23 as ExpansionPanelContent, _sfc_main$24 as ExpansionPanelHeader, _sfc_main$25 as ExpansionPanelItem, _sfc_main$26 as ExpansionPanelRoot, FeaturesAdapter, _sfc_main$27 as Form, Group, _sfc_main$28 as GroupItem, _sfc_main$29 as GroupRoot, IN_BROWSER, Input, _sfc_main$30 as InputControl, _sfc_main$31 as InputDescription, _sfc_main$32 as InputError, _sfc_main$33 as InputRoot, MemoryAdapter, Pagination, _sfc_main$34 as PaginationEllipsis, _sfc_main$35 as PaginationFirst, _sfc_main$36 as PaginationItem, _sfc_main$37 as PaginationLast, _sfc_main$38 as PaginationNext, _sfc_main$39 as PaginationPrev, _sfc_main$40 as PaginationRoot, _sfc_main$41 as PaginationStatus, PermissionAdapter, PinoLoggerAdapter, Popover, _sfc_main$42 as PopoverActivator, _sfc_main$43 as PopoverContent, _sfc_main$44 as PopoverRoot, Radio, _sfc_main$45 as RadioGroup, _sfc_main$46 as RadioHiddenInput, _sfc_main$47 as RadioIndicator, _sfc_main$48 as RadioRoot, SELF_CLOSING_TAGS, SUPPORTS_INTERSECTION_OBSERVER, SUPPORTS_MATCH_MEDIA, SUPPORTS_MUTATION_OBSERVER, SUPPORTS_OBSERVER, SUPPORTS_TOUCH, _sfc_main$49 as Scrim, Select, _sfc_main$50 as SelectActivator, _sfc_main$51 as SelectContent, _sfc_main$52 as SelectCue, _sfc_main$53 as SelectItem, _sfc_main$54 as SelectPlaceholder, _sfc_main$55 as SelectRoot, _sfc_main$56 as SelectValue, Selection, _sfc_main$57 as SelectionItem, _sfc_main$58 as SelectionRoot, ServerAdapter, Single, _sfc_main$59 as SingleItem, _sfc_main$60 as SingleRoot, Slider, _sfc_main$61 as SliderHiddenInput, _sfc_main$62 as SliderRange, _sfc_main$63 as SliderRoot, _sfc_main$64 as SliderThumb, _sfc_main$65 as SliderTrack, Snackbar, _sfc_main$66 as SnackbarClose, _sfc_main$67 as SnackbarContent, _sfc_main$68 as SnackbarPortal, _sfc_main$69 as SnackbarQueue, _sfc_main$70 as SnackbarRoot, Splitter, _sfc_main$71 as SplitterHandle, _sfc_main$72 as SplitterPanel, _sfc_main$73 as SplitterRoot, Step, _sfc_main$74 as StepItem, _sfc_main$75 as StepRoot, Switch, _sfc_main$76 as SwitchGroup, _sfc_main$77 as SwitchHiddenInput, _sfc_main$78 as SwitchRoot, _sfc_main$79 as SwitchSelectAll, _sfc_main$80 as SwitchThumb, _sfc_main$81 as SwitchTrack, Tabs, _sfc_main$82 as TabsItem, _sfc_main$83 as TabsList, _sfc_main$84 as TabsPanel, _sfc_main$85 as TabsRoot, VirtualAdapter, Vuetify0LocaleAdapter, Vuetify0LoggerAdapter, Vuetify0RtlAdapter, Vuetify0ThemeAdapter, __LOGGER_ENABLED__, clamp, createBreadcrumbs, createBreadcrumbsContext, createBreakpoints, createBreakpointsContext, createBreakpointsPlugin, createContext, createDataTable, createDataTableContext, createDate, createDateContext, createDatePlugin, createFallbackHydration, createFeatures, createFeaturesContext, createFeaturesPlugin, createFilter, createFilterContext, createForm, createFormContext, createGroup, createGroupContext, createHydration, createHydrationContext, createHydrationPlugin, createLocale, createLocaleContext, createLocaleFallback, createLocalePlugin, createLogger, createLoggerContext, createLoggerPlugin, createModel, createNested, createNestedContext, createNotifications, createNotificationsContext, createNotificationsPlugin, createOverflow, createOverflowContext, createPagination, createPaginationContext, createPermissions, createPermissionsContext, createPermissionsPlugin, createPlugin, createPluginContext, createQueue, createQueueContext, 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, debounce, instanceExists, instanceName, isArray, isBoolean, isElement, isFunction, isNaN, isNull, isNullOrUndefined, isNumber, isObject, isPrimitive, isSelfClosingTag, isStandardSchema, isString, isSymbol, isUndefined, mergeDeep, multipleOpenStrategy, provideAvatarRoot, provideBreadcrumbsRoot, provideCheckboxGroup, provideCheckboxRoot, provideContext, provideDialogContext, provideExpansionPanelItem, provideExpansionPanelRoot, provideGroupRoot, provideInputRoot, providePaginationControls, providePaginationItems, providePaginationRoot, providePopoverContext, provideRadioGroup, provideRadioRoot, provideSelectContext, provideSelectionRoot, provideSingleRoot, provideSliderRoot, provideSnackbarQueueContext, provideSnackbarRootContext, provideSplitterRoot, provideStepRoot, provideSwitchGroup, provideSwitchRoot, provideTabsRoot, range, singleOpenStrategy, toArray, toElement, toReactive, useAvatarRoot, useBreadcrumbs, useBreadcrumbsRoot, useBreakpoints, useCheckboxGroup, useCheckboxRoot, useClickOutside, useContext, useDataTable, useDate, useDialogContext, useDocumentEventListener, useElementIntersection, useElementSize, useEventListener, useExpansionPanelItem, useExpansionPanelRoot, useFeatures, useFilter, useForm, useGroup, useGroupRoot, useHotkey, useHydration, useId, useInputRoot, useIntersectionObserver, useLazy, useLocale, useLogger, useMediaQuery, useMutationObserver, useNested, useNotifications, useOverflow, usePagination, usePaginationControls, usePaginationItems, usePaginationRoot, usePermissions, usePopover, usePopoverContext, usePrefersContrast, usePrefersDark, usePrefersReducedMotion, useProxyModel, useProxyRegistry, useQueue, useRadioGroup, useRadioRoot, useRaf, useRegistry, useResizeObserver, useRovingFocus, useRtl, useRules, useSelectContext, useSelection, useSelectionRoot, useSingle, useSingleRoot, useSliderRoot, useSnackbarQueueContext, useSnackbarRootContext, useSplitterRoot, useStack, useStep, useStepRoot, useStorage, useSwitchGroup, useSwitchRoot, useTabsRoot, useTheme, useTimeline, useTimer, useToggleScope, useTokens, useVirtual, useVirtualFocus, useWindowEventListener, version };
|