@vuetify/v0 0.1.3 → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. package/dist/adapter-CJIj5ySf.d.mts +11 -0
  2. package/dist/adapter-Cmeg49W9.mjs +229 -0
  3. package/dist/adapter-D2JoR-4d.d.mts +344 -0
  4. package/dist/adapters-BQ-Lr3PW.mjs +1 -0
  5. package/dist/adapters-DEXpW9If.mjs +1 -0
  6. package/dist/adapters-Q9WaOsJp.mjs +1 -0
  7. package/dist/adapters-SSDVth5e.mjs +1 -0
  8. package/dist/browser/index.js +953 -1026
  9. package/dist/components/index.d.mts +20 -7
  10. package/dist/components/index.mjs +38 -6
  11. package/dist/{components-C0zEvP7w.mjs → components-BbbGkTcN.mjs} +579 -107
  12. package/dist/composables/index.d.mts +17 -4
  13. package/dist/composables/index.mjs +36 -4
  14. package/dist/consola-DiUk9j3y.d.mts +15 -0
  15. package/dist/consola-GBy8XRuL.mjs +31 -0
  16. package/dist/constants/index.d.mts +1 -1
  17. package/dist/constants/index.mjs +3 -3
  18. package/dist/constants-B8pMSkcW.mjs +1 -0
  19. package/dist/createDataTable-cNf6DdHz.mjs +387 -0
  20. package/dist/createGroup-BrZPZudL.mjs +363 -0
  21. package/dist/createPagination-Wc_vRGNQ.mjs +234 -0
  22. package/dist/createSelection-BURpoE3p.mjs +261 -0
  23. package/dist/createSingle-BE1vHaZy.mjs +179 -0
  24. package/dist/createTokens-jwf8-iGn.mjs +682 -0
  25. package/dist/createTrinity-DkwPrPRS.mjs +149 -0
  26. package/dist/data-table/adapters/client/index.d.mts +3 -0
  27. package/dist/data-table/adapters/client/index.mjs +9 -0
  28. package/dist/data-table/adapters/index.d.mts +5 -0
  29. package/dist/data-table/adapters/index.mjs +12 -0
  30. package/dist/data-table/adapters/server/index.d.mts +3 -0
  31. package/dist/data-table/adapters/server/index.mjs +7 -0
  32. package/dist/data-table/adapters/virtual/index.d.mts +3 -0
  33. package/dist/data-table/adapters/virtual/index.mjs +9 -0
  34. package/dist/data-table/index.d.mts +7 -0
  35. package/dist/data-table/index.mjs +25 -0
  36. package/dist/date/index.d.mts +1 -1
  37. package/dist/date/index.mjs +2 -2
  38. package/dist/features/adapters/flagsmith/index.d.mts +16 -0
  39. package/dist/features/adapters/flagsmith/index.mjs +3 -0
  40. package/dist/features/adapters/launchdarkly/index.d.mts +15 -0
  41. package/dist/features/adapters/launchdarkly/index.mjs +3 -0
  42. package/dist/features/adapters/posthog/index.d.mts +15 -0
  43. package/dist/features/adapters/posthog/index.mjs +4 -0
  44. package/dist/features/index.d.mts +17 -0
  45. package/dist/features/index.mjs +18 -0
  46. package/dist/flagsmith-CHmpPGR7.mjs +40 -0
  47. package/dist/{globals-BwYsH-rt.mjs → globals-vN-O052q.mjs} +2 -2
  48. package/dist/index-BDTbJClL.d.mts +11 -0
  49. package/dist/{index-2wh69fk5.d.mts → index-BTMzRHep.d.mts} +187 -1417
  50. package/dist/index-BuOz3Rgm.d.mts +32 -0
  51. package/dist/{index-Bmem4l8m.d.mts → index-Bv1VN_j5.d.mts} +1 -1
  52. package/dist/{index-DFM5iBqh.d.mts → index-DRax9EgT.d.mts} +1044 -437
  53. package/dist/index-DdWxDPX3.d.mts +251 -0
  54. package/dist/{index-DBZTizq2.d.mts → index-UNwEBkQT.d.mts} +16 -2
  55. package/dist/index.d.mts +20 -7
  56. package/dist/index.mjs +39 -7
  57. package/dist/json/attributes.json +172 -0
  58. package/dist/json/importMap.json +28 -0
  59. package/dist/json/tags.json +73 -0
  60. package/dist/json/web-types.json +475 -1
  61. package/dist/launchdarkly-W8t8ZANX.mjs +28 -0
  62. package/dist/locale/adapters/index.d.mts +3 -0
  63. package/dist/locale/adapters/index.mjs +6 -0
  64. package/dist/locale/adapters/v0/index.d.mts +3 -0
  65. package/dist/locale/adapters/v0/index.mjs +5 -0
  66. package/dist/locale/index.d.mts +17 -0
  67. package/dist/locale/index.mjs +17 -0
  68. package/dist/logger/adapters/consola/index.d.mts +3 -0
  69. package/dist/logger/adapters/consola/index.mjs +3 -0
  70. package/dist/logger/adapters/index.d.mts +5 -0
  71. package/dist/logger/adapters/index.mjs +8 -0
  72. package/dist/logger/adapters/pino/index.d.mts +3 -0
  73. package/dist/logger/adapters/pino/index.mjs +5 -0
  74. package/dist/logger/adapters/v0/index.d.mts +3 -0
  75. package/dist/logger/adapters/v0/index.mjs +5 -0
  76. package/dist/logger/index.d.mts +17 -0
  77. package/dist/logger/index.mjs +10 -0
  78. package/dist/memory-BsZGbGnG.mjs +27 -0
  79. package/dist/memory-DVjquu_v.d.mts +25 -0
  80. package/dist/permissions/adapters/index.d.mts +18 -0
  81. package/dist/permissions/adapters/index.mjs +6 -0
  82. package/dist/permissions/adapters/v0/index.d.mts +18 -0
  83. package/dist/permissions/adapters/v0/index.mjs +5 -0
  84. package/dist/permissions/index.d.mts +17 -0
  85. package/dist/permissions/index.mjs +15 -0
  86. package/dist/pino-DFxkZLiu.mjs +49 -0
  87. package/dist/pino-p-jDkNQd.d.mts +24 -0
  88. package/dist/posthog-BOUoZTTf.mjs +50 -0
  89. package/dist/server-B-HWxaTQ.d.mts +20 -0
  90. package/dist/server-C2R2POGE.mjs +45 -0
  91. package/dist/storage/adapters/index.d.mts +3 -0
  92. package/dist/storage/adapters/index.mjs +3 -0
  93. package/dist/storage/adapters/memory/index.d.mts +2 -0
  94. package/dist/storage/adapters/memory/index.mjs +3 -0
  95. package/dist/storage/index.d.mts +17 -0
  96. package/dist/storage/index.mjs +37 -0
  97. package/dist/theme/adapters/index.d.mts +17 -0
  98. package/dist/theme/adapters/index.mjs +6 -0
  99. package/dist/theme/adapters/v0/index.d.mts +17 -0
  100. package/dist/theme/adapters/v0/index.mjs +5 -0
  101. package/dist/theme/index.d.mts +17 -0
  102. package/dist/theme/index.mjs +16 -0
  103. package/dist/toArray-VIn8vYt3.mjs +38 -0
  104. package/dist/types/index.d.mts +1 -1
  105. package/dist/useClickOutside-DIi0kjN5.mjs +4716 -0
  106. package/dist/useFeatures-6O7EPJUS.mjs +122 -0
  107. package/dist/useLocale-DHjbekzS.mjs +85 -0
  108. package/dist/useLogger-BXqiUvt2.mjs +283 -0
  109. package/dist/usePermissions-DFacFVqO.mjs +128 -0
  110. package/dist/useTheme-D0_1mjTw.mjs +135 -0
  111. package/dist/utilities/index.d.mts +3 -3
  112. package/dist/utilities/index.mjs +3 -3
  113. package/dist/{utilities-BbKjbXTx.mjs → utilities-Dx8wzGa5.mjs} +20 -3
  114. package/dist/v0-BNXo1ecc.d.mts +10 -0
  115. package/dist/v0-BOxb3nD1.d.mts +33 -0
  116. package/dist/v0-BPzPP8C5.d.mts +9 -0
  117. package/dist/v0-BYqmw3qM.mjs +21 -0
  118. package/dist/v0-C8DBv9mh.mjs +73 -0
  119. package/dist/v0-CfSj99gF.mjs +37 -0
  120. package/dist/v0-DHMoZ7dS.d.mts +22 -0
  121. package/dist/v0-Dc5mcpQs.mjs +41 -0
  122. package/dist/v0-Dwufx8ae.mjs +83 -0
  123. package/dist/virtual-A4e1yrdn.d.mts +9 -0
  124. package/dist/virtual-BoTGK6HT.mjs +44 -0
  125. package/package.json +34 -2
  126. package/dist/useClickOutside-DrkNYxDe.mjs +0 -8871
  127. /package/dist/{adapter-D95FHAtt.d.mts → adapter-DcwxFryd.d.mts} +0 -0
  128. /package/dist/{constants-DHKqjdjH.mjs → adapters-BGJKsBrw.mjs} +0 -0
  129. /package/dist/{htmlElements-DO9n35bD.mjs → htmlElements-d8iBCGpO.mjs} +0 -0
  130. /package/dist/{index-BLK67J_-.d.mts → index-BFBN5Zl3.d.mts} +0 -0
@@ -0,0 +1,135 @@
1
+ import { o as createPluginContext } from "./useLogger-BXqiUvt2.mjs";
2
+ import { t as createTokens } from "./createTokens-jwf8-iGn.mjs";
3
+ import { t as createSingle } from "./createSingle-BE1vHaZy.mjs";
4
+ import { t as Vuetify0ThemeAdapter } from "./v0-Dwufx8ae.mjs";
5
+ import { computed, shallowRef, toRef } from "vue";
6
+
7
+ //#region src/composables/useTheme/index.ts
8
+ /**
9
+ * @module useTheme
10
+ *
11
+ * @see https://0.vuetifyjs.com/composables/plugins/use-theme
12
+ *
13
+ * @remarks
14
+ * Theme management composable with token resolution and CSS variable injection.
15
+ *
16
+ * Key features:
17
+ * - Single-selection theme switching (extends createSingle)
18
+ * - Token alias resolution via useTokens
19
+ * - Lazy theme loading (compute colors only when selected)
20
+ * - CSS variable generation via adapter pattern
21
+ * - SSR support with head integration
22
+ * - Theme cycling
23
+ *
24
+ * Integrates with createSingle for selection and useTokens for color resolution.
25
+ */
26
+ /**
27
+ * Creates a new theme instance.
28
+ *
29
+ * @param options The options for the theme instance.
30
+ * @template Z The type of the theme ticket.
31
+ * @template E The type of the theme context.
32
+ * @returns A new theme instance.
33
+ *
34
+ * @see https://0.vuetifyjs.com/composables/plugins/use-theme
35
+ *
36
+ * @example
37
+ * ```ts
38
+ * import { createTheme } from '@vuetify/v0'
39
+ *
40
+ * export const [useTheme, provideTheme] = createTheme({
41
+ * namespace: 'v0:theme',
42
+ * default: 'light',
43
+ * themes: {
44
+ * light: {
45
+ * dark: false,
46
+ * colors: {
47
+ * primary: '#3b82f6',
48
+ * },
49
+ * },
50
+ * dark: {
51
+ * dark: true,
52
+ * colors: {
53
+ * primary: '#675496',
54
+ * },
55
+ * },
56
+ * },
57
+ * })
58
+ * ```
59
+ */
60
+ function createTheme(_options = {}) {
61
+ const { themes = {}, palette = {}, ...options } = _options;
62
+ const tokens = createTokens({
63
+ palette,
64
+ ...themes
65
+ }, { flat: true });
66
+ const registry = createSingle(options);
67
+ for (const id in themes) {
68
+ const { colors: value, ...theme } = themes[id];
69
+ register({
70
+ id,
71
+ value,
72
+ ...theme
73
+ });
74
+ if (id === options.default && !registry.selectedId.value) registry.select(id);
75
+ }
76
+ const names = computed(() => registry.keys());
77
+ const colors = computed(() => {
78
+ const resolved = {};
79
+ for (const theme of registry.values()) {
80
+ if (theme.lazy && theme.id !== registry.selectedId.value) continue;
81
+ resolved[theme.id] = resolve(theme.value);
82
+ }
83
+ return resolved;
84
+ });
85
+ const isDark = toRef(() => registry.selectedItem.value?.dark ?? false);
86
+ function cycle(themes$1 = names.value) {
87
+ const current = themes$1.indexOf(registry.selectedId.value ?? "");
88
+ const next = current === -1 ? 0 : (current + 1) % themes$1.length;
89
+ registry.select(themes$1[next]);
90
+ }
91
+ function resolve(colors$1) {
92
+ const resolved = {};
93
+ for (const [key, value] of Object.entries(colors$1)) resolved[key] = tokens.isAlias(value) ? tokens.resolve(value) : value;
94
+ return resolved;
95
+ }
96
+ function register(registration = {}) {
97
+ const item = {
98
+ lazy: false,
99
+ dark: false,
100
+ ...registration
101
+ };
102
+ return registry.register(item);
103
+ }
104
+ function onboard(registrations) {
105
+ return registry.batch(() => registrations.map((registration) => register(registration)));
106
+ }
107
+ return {
108
+ ...registry,
109
+ colors,
110
+ isDark,
111
+ register,
112
+ onboard,
113
+ cycle,
114
+ get size() {
115
+ return registry.size;
116
+ }
117
+ };
118
+ }
119
+ function createThemeFallback() {
120
+ return {
121
+ size: 0,
122
+ colors: computed(() => ({})),
123
+ isDark: shallowRef(false),
124
+ cycle: () => {}
125
+ };
126
+ }
127
+ const [createThemeContext, createThemePlugin, useTheme] = createPluginContext("v0:theme", (options) => createTheme(options), {
128
+ fallback: () => createThemeFallback(),
129
+ setup: (context, app, { adapter = new Vuetify0ThemeAdapter(), target }) => {
130
+ adapter.setup(app, context, target);
131
+ }
132
+ });
133
+
134
+ //#endregion
135
+ export { useTheme as i, createThemeContext as n, createThemePlugin as r, createTheme as t };
@@ -1,3 +1,3 @@
1
- import "../index-BLK67J_-.mjs";
2
- import { _ as mergeDeep, a as isArray, c as isNaN, d as isNumber, f as isObject, g as isUndefined, h as isSymbol, i as debounce, l as isNull, m as isString, n as instanceName, o as isBoolean, p as isPrimitive, r as clamp, s as isFunction, t as instanceExists, u as isNullOrUndefined, v as range, y as useId } from "../index-DBZTizq2.mjs";
3
- export { clamp, debounce, instanceExists, instanceName, isArray, isBoolean, isFunction, isNaN, isNull, isNullOrUndefined, isNumber, isObject, isPrimitive, isString, isSymbol, isUndefined, mergeDeep, range, useId };
1
+ import "../index-BFBN5Zl3.mjs";
2
+ import { _ as isUndefined, a as isArray, b as useId, c as isFunction, d as isNullOrUndefined, f as isNumber, g as isSymbol, h as isString, i as debounce, l as isNaN, m as isPrimitive, n as instanceName, o as isBoolean, p as isObject, r as clamp, s as isElement, t as instanceExists, u as isNull, v as mergeDeep, y as range } from "../index-UNwEBkQT.mjs";
3
+ export { clamp, debounce, instanceExists, instanceName, isArray, isBoolean, isElement, isFunction, isNaN, isNull, isNullOrUndefined, isNumber, isObject, isPrimitive, isString, isSymbol, isUndefined, mergeDeep, range, useId };
@@ -1,4 +1,4 @@
1
- import "../globals-BwYsH-rt.mjs";
2
- import { _ as useId, a as isFunction, c as isNullOrUndefined, d as isPrimitive, f as isString, g as range, h as mergeDeep, i as isBoolean, l as isNumber, m as isUndefined, n as debounce, o as isNaN, p as isSymbol, r as isArray, s as isNull, t as clamp, u as isObject, v as instanceExists, y as instanceName } from "../utilities-BbKjbXTx.mjs";
1
+ import "../globals-vN-O052q.mjs";
2
+ import { _ as range, a as isElement, b as instanceName, c as isNull, d as isObject, f as isPrimitive, g as mergeDeep, h as isUndefined, i as isBoolean, l as isNullOrUndefined, m as isSymbol, n as debounce, o as isFunction, p as isString, r as isArray, s as isNaN, t as clamp, u as isNumber, v as useId, y as instanceExists } from "../utilities-Dx8wzGa5.mjs";
3
3
 
4
- export { clamp, debounce, instanceExists, instanceName, isArray, isBoolean, isFunction, isNaN, isNull, isNullOrUndefined, isNumber, isObject, isPrimitive, isString, isSymbol, isUndefined, mergeDeep, range, useId };
4
+ export { clamp, debounce, instanceExists, instanceName, isArray, isBoolean, isElement, isFunction, isNaN, isNull, isNullOrUndefined, isNumber, isObject, isPrimitive, isString, isSymbol, isUndefined, mergeDeep, range, useId };
@@ -1,4 +1,4 @@
1
- import { t as IN_BROWSER } from "./globals-BwYsH-rt.mjs";
1
+ import { t as IN_BROWSER } from "./globals-vN-O052q.mjs";
2
2
  import * as Vue from "vue";
3
3
  import { useId } from "vue";
4
4
 
@@ -146,6 +146,23 @@ function isArray(item) {
146
146
  return Array.isArray(item);
147
147
  }
148
148
  /**
149
+ * Checks if a value is a DOM Element
150
+ *
151
+ * @param item The value to check
152
+ * @returns True if the value is a DOM Element
153
+ *
154
+ * @example
155
+ * ```ts
156
+ * isElement(document.body) // true
157
+ * isElement('string') // false
158
+ * isElement(null) // false
159
+ * ```
160
+ */
161
+ /* @__NO_SIDE_EFFECTS__ */
162
+ function isElement(item) {
163
+ return item instanceof Element;
164
+ }
165
+ /**
149
166
  * Checks if a value is null
150
167
  *
151
168
  * @param item The value to check
@@ -336,7 +353,7 @@ let idCounter = 0;
336
353
  /* @__NO_SIDE_EFFECTS__ */
337
354
  function useId$1() {
338
355
  if (instanceExists()) return useId();
339
- if (process.env.NODE_ENV !== "production" && !IN_BROWSER) console.warn("[v0 warn] useId() called outside component context during SSR. Provide explicit ID to avoid hydration mismatch.");
356
+ if (!/* @__PURE__ */ isUndefined(process.env.NODE_ENV !== "production") && process.env.NODE_ENV !== "production" && !IN_BROWSER) console.warn("[v0 warn] useId() called outside component context during SSR. Provide explicit ID to avoid hydration mismatch.");
340
357
  return `v0-${idCounter++}`;
341
358
  }
342
359
  /**
@@ -409,4 +426,4 @@ function debounce(fn, delay) {
409
426
  }
410
427
 
411
428
  //#endregion
412
- export { useId$1 as _, isFunction as a, isNullOrUndefined as c, isPrimitive as d, isString as f, range as g, mergeDeep as h, isBoolean as i, isNumber as l, isUndefined as m, debounce as n, isNaN as o, isSymbol as p, isArray as r, isNull as s, clamp as t, isObject as u, instanceExists as v, instanceName as y };
429
+ export { range as _, isElement as a, instanceName as b, isNull as c, isObject as d, isPrimitive as f, mergeDeep as g, isUndefined as h, isBoolean as i, isNullOrUndefined as l, isSymbol as m, debounce as n, isFunction as o, isString as p, isArray as r, isNaN as s, clamp as t, isNumber as u, useId$1 as v, instanceExists as y };
@@ -0,0 +1,10 @@
1
+ import { o as ID } from "./index-BFBN5Zl3.mjs";
2
+ import { Nt as PermissionTicket, Rt as PermissionAdapter, kt as PermissionContext } from "./index-BTMzRHep.mjs";
3
+
4
+ //#region src/composables/usePermissions/adapters/v0.d.ts
5
+ declare class Vuetify0PermissionAdapter extends PermissionAdapter {
6
+ constructor();
7
+ can<Z extends PermissionTicket = PermissionTicket>(role: ID, action: string, subject: string, context: Record<string, any>, permissions: PermissionContext<Z>): boolean;
8
+ }
9
+ //#endregion
10
+ export { Vuetify0PermissionAdapter as t };
@@ -0,0 +1,33 @@
1
+ import { t as LoggerAdapter } from "./adapter-CJIj5ySf.mjs";
2
+
3
+ //#region src/composables/useLogger/adapters/v0.d.ts
4
+
5
+ /**
6
+ * Vuetify0.x logger adapter implementation
7
+ *
8
+ * This adapter provides console-based logging with proper formatting,
9
+ * color coding, timestamps, and log level filtering for development
10
+ * and production environments.
11
+ */
12
+ declare class Vuetify0LoggerAdapter implements LoggerAdapter {
13
+ private prefix;
14
+ private colors;
15
+ private timestamps;
16
+ constructor(options?: {
17
+ prefix?: string;
18
+ colors?: boolean;
19
+ timestamps?: boolean;
20
+ });
21
+ debug(message: string, ...args: unknown[]): void;
22
+ info(message: string, ...args: unknown[]): void;
23
+ warn(message: string, ...args: unknown[]): void;
24
+ error(message: string, ...args: unknown[]): void;
25
+ trace(message: string, ...args: unknown[]): void;
26
+ fatal(message: string, ...args: unknown[]): void;
27
+ private format;
28
+ private timestamp;
29
+ private style;
30
+ private log;
31
+ }
32
+ //#endregion
33
+ export { Vuetify0LoggerAdapter as t };
@@ -0,0 +1,9 @@
1
+ import { i as DataTableAdapterResult, n as DataTableAdapterContext, t as DataTableAdapter } from "./adapter-D2JoR-4d.mjs";
2
+
3
+ //#region src/composables/createDataTable/adapters/v0.d.ts
4
+
5
+ declare class ClientAdapter<T extends Record<string, unknown>> extends DataTableAdapter<T> {
6
+ setup(context: DataTableAdapterContext<T>): DataTableAdapterResult<T>;
7
+ }
8
+ //#endregion
9
+ export { ClientAdapter as t };
@@ -0,0 +1,21 @@
1
+ import { o as isFunction } from "./utilities-Dx8wzGa5.mjs";
2
+
3
+ //#region src/composables/usePermissions/adapters/adapter.ts
4
+ var PermissionAdapter = class {};
5
+
6
+ //#endregion
7
+ //#region src/composables/usePermissions/adapters/v0.ts
8
+ var Vuetify0PermissionAdapter = class extends PermissionAdapter {
9
+ constructor() {
10
+ super();
11
+ }
12
+ can(role, action, subject, context, permissions) {
13
+ const access = `${role}.${action}.${subject}`;
14
+ const ticket = permissions.get(access);
15
+ if (!ticket || !ticket.value) return false;
16
+ return /* @__PURE__ */ isFunction(ticket.value) ? ticket.value(context) : ticket.value;
17
+ }
18
+ };
19
+
20
+ //#endregion
21
+ export { PermissionAdapter as n, Vuetify0PermissionAdapter as t };
@@ -0,0 +1,73 @@
1
+ import { t as IN_BROWSER } from "./globals-vN-O052q.mjs";
2
+ import { o as isFunction } from "./utilities-Dx8wzGa5.mjs";
3
+
4
+ //#region src/composables/useLogger/adapters/v0.ts
5
+ /**
6
+ * Vuetify0.x logger adapter implementation
7
+ *
8
+ * This adapter provides console-based logging with proper formatting,
9
+ * color coding, timestamps, and log level filtering for development
10
+ * and production environments.
11
+ */
12
+ var Vuetify0LoggerAdapter = class {
13
+ prefix;
14
+ colors;
15
+ timestamps;
16
+ constructor(options = {}) {
17
+ this.prefix = options.prefix || "v0";
18
+ this.colors = options.colors !== false;
19
+ this.timestamps = options.timestamps !== false;
20
+ }
21
+ debug(message, ...args) {
22
+ this.log("debug", "debug", message, ...args);
23
+ }
24
+ info(message, ...args) {
25
+ this.log("info", "info", message, ...args);
26
+ }
27
+ warn(message, ...args) {
28
+ this.log("warn", "warn", message, ...args);
29
+ }
30
+ error(message, ...args) {
31
+ this.log("error", "error", message, ...args);
32
+ }
33
+ trace(message, ...args) {
34
+ this.log("trace", "trace", message, ...args);
35
+ }
36
+ fatal(message, ...args) {
37
+ this.log("fatal", "error", message, ...args);
38
+ }
39
+ format(level, message, ...args) {
40
+ return [[
41
+ this.timestamps ? this.timestamp() : "",
42
+ `[${this.prefix} ${level.toLowerCase()}]`,
43
+ message
44
+ ].filter(Boolean).join(" "), ...args];
45
+ }
46
+ timestamp() {
47
+ if (!IN_BROWSER) return (/* @__PURE__ */ new Date()).toISOString();
48
+ /* v8 ignore next -- defensive fallback, toTimeString always returns valid format */
49
+ return (/* @__PURE__ */ new Date()).toTimeString().split(" ")[0] ?? "";
50
+ }
51
+ style(level) {
52
+ if (!this.colors || !IN_BROWSER) return "";
53
+ /* v8 ignore next -- LogLevel union is exhaustive */
54
+ return {
55
+ trace: "color: #64748b",
56
+ debug: "color: #3b82f6",
57
+ info: "color: #10b981",
58
+ warn: "color: #f59e0b",
59
+ error: "color: #ef4444",
60
+ fatal: "color: #dc2626; font-weight: bold",
61
+ silent: ""
62
+ }[level] || "";
63
+ }
64
+ log(level, method, message, ...args) {
65
+ const [formattedMessage, ...restArgs] = this.format(level, message, ...args);
66
+ const style = this.style(level);
67
+ if (IN_BROWSER && style && /* @__PURE__ */ isFunction(console[method])) console[method](`%c${formattedMessage}`, style, ...restArgs);
68
+ else if (/* @__PURE__ */ isFunction(console[method])) console[method](formattedMessage, ...restArgs);
69
+ }
70
+ };
71
+
72
+ //#endregion
73
+ export { Vuetify0LoggerAdapter as t };
@@ -0,0 +1,37 @@
1
+ import { t as IN_BROWSER } from "./globals-vN-O052q.mjs";
2
+ import { d as isObject, h as isUndefined } from "./utilities-Dx8wzGa5.mjs";
3
+
4
+ //#region src/composables/useLocale/adapters/v0.ts
5
+ /**
6
+ * Vuetify0.x locale adapter implementation
7
+ *
8
+ * This adapter provides translation and number formatting
9
+ * capabilities using the Intl API and supports both
10
+ * numbered ({0}, {1}) and named ({name}) variables in translation strings.
11
+ */
12
+ var Vuetify0LocaleAdapter = class {
13
+ t(message, ...params) {
14
+ let resolvedMessage = message;
15
+ if (params.length > 0 && /* @__PURE__ */ isObject(params[0])) {
16
+ const variables = params[0];
17
+ resolvedMessage = resolvedMessage.replace(/{([a-zA-Z][a-zA-Z0-9_]*)}/g, (match, name) => {
18
+ return /* @__PURE__ */ isUndefined(variables[name]) ? match : String(variables[name]);
19
+ });
20
+ params = params.slice(1);
21
+ }
22
+ resolvedMessage = resolvedMessage.replace(/\{(\d+)\}/g, (match, index) => {
23
+ const idx = Number.parseInt(index, 10);
24
+ if (!/* @__PURE__ */ isUndefined(params[idx])) return String(params[idx]);
25
+ return match;
26
+ });
27
+ return resolvedMessage;
28
+ }
29
+ n(value, locale, ...params) {
30
+ if (!IN_BROWSER || !locale) return value.toString();
31
+ const options = params[0];
32
+ return new Intl.NumberFormat(String(locale), options).format(value);
33
+ }
34
+ };
35
+
36
+ //#endregion
37
+ export { Vuetify0LocaleAdapter as t };
@@ -0,0 +1,22 @@
1
+ import { o as ID } from "./index-BFBN5Zl3.mjs";
2
+
3
+ //#region src/composables/useLocale/adapters/adapter.d.ts
4
+ interface LocaleAdapter {
5
+ t: (message: string, ...params: unknown[]) => string;
6
+ n: (value: number, locale: ID | undefined, ...params: unknown[]) => string;
7
+ }
8
+ //#endregion
9
+ //#region src/composables/useLocale/adapters/v0.d.ts
10
+ /**
11
+ * Vuetify0.x locale adapter implementation
12
+ *
13
+ * This adapter provides translation and number formatting
14
+ * capabilities using the Intl API and supports both
15
+ * numbered ({0}, {1}) and named ({name}) variables in translation strings.
16
+ */
17
+ declare class Vuetify0LocaleAdapter implements LocaleAdapter {
18
+ t(message: string, ...params: unknown[]): string;
19
+ n(value: number, locale: ID | undefined, ...params: unknown[]): string;
20
+ }
21
+ //#endregion
22
+ export { LocaleAdapter as n, Vuetify0LocaleAdapter as t };
@@ -0,0 +1,41 @@
1
+ import { t as createPagination } from "./createPagination-Wc_vRGNQ.mjs";
2
+ import { t as DataTableAdapter } from "./adapter-Cmeg49W9.mjs";
3
+ import { computed, toRef, watch } from "vue";
4
+
5
+ //#region src/composables/createDataTable/adapters/v0.ts
6
+ /**
7
+ * @module createDataTable/adapters/v0
8
+ *
9
+ * @remarks
10
+ * Default data table adapter that performs all pipeline operations client-side:
11
+ * filtering via createFilter, sorting via computed comparisons, and pagination
12
+ * via createPagination. Automatically resets to page 1 on filter/sort changes.
13
+ */
14
+ var ClientAdapter = class extends DataTableAdapter {
15
+ setup(context) {
16
+ const { search, sortBy, locale, paginationOptions, customSorts } = context;
17
+ const { allItems, filteredItems } = this.filter(context);
18
+ const sortedItems = this.sort(filteredItems, sortBy, locale, customSorts);
19
+ const pagination = createPagination({
20
+ ...paginationOptions,
21
+ size: toRef(() => sortedItems.value.length)
22
+ });
23
+ const items = computed(() => {
24
+ return sortedItems.value.slice(pagination.pageStart.value, pagination.pageStop.value);
25
+ });
26
+ watch([search, sortBy], () => {
27
+ pagination.first();
28
+ });
29
+ return {
30
+ allItems,
31
+ filteredItems,
32
+ sortedItems,
33
+ items,
34
+ pagination,
35
+ total: toRef(() => sortedItems.value.length)
36
+ };
37
+ }
38
+ };
39
+
40
+ //#endregion
41
+ export { ClientAdapter as t };
@@ -0,0 +1,83 @@
1
+ import { t as IN_BROWSER } from "./globals-vN-O052q.mjs";
2
+ import { c as isNull, h as isUndefined, p as isString } from "./utilities-Dx8wzGa5.mjs";
3
+ import { onScopeDispose, watch } from "vue";
4
+
5
+ //#region src/composables/useTheme/adapters/adapter.ts
6
+ var ThemeAdapter = class {
7
+ stylesheetId = "v0-theme-stylesheet";
8
+ prefix;
9
+ constructor(prefix) {
10
+ this.prefix = prefix;
11
+ }
12
+ generate(colors, isDark) {
13
+ let css = "";
14
+ for (const theme in colors) {
15
+ const themeColors = colors[theme];
16
+ if (!themeColors) continue;
17
+ const vars = Object.entries(themeColors).map(([key, val]) => ` --${this.prefix}-${key}: ${val};`).join("\n");
18
+ css += `[data-theme="${theme}"] {\n${vars}\n}\n`;
19
+ }
20
+ if (!/* @__PURE__ */ isUndefined(isDark)) css += `:root {\n color-scheme: ${isDark ? "dark" : "light"};\n}\n`;
21
+ return css;
22
+ }
23
+ };
24
+
25
+ //#endregion
26
+ //#region src/composables/useTheme/adapters/v0.ts
27
+ /**
28
+ * Theme adapter implementation for Vuetify v0 design system.
29
+ * This adapter generates CSS custom properties and injects them into the DOM
30
+ * as a stylesheet, allowing themes to be applied globally.
31
+ */
32
+ var Vuetify0ThemeAdapter = class extends ThemeAdapter {
33
+ cspNonce;
34
+ sheet;
35
+ constructor(options = {}) {
36
+ super(options.prefix ?? "v0");
37
+ this.cspNonce = options.cspNonce;
38
+ this.stylesheetId = options.stylesheetId ?? this.stylesheetId;
39
+ }
40
+ setup(app, context, target) {
41
+ if (IN_BROWSER) {
42
+ this.update(context.colors.value, context.isDark.value);
43
+ onScopeDispose(watch([context.colors, context.isDark], ([colors, isDark]) => {
44
+ this.update(colors, isDark);
45
+ }), true);
46
+ if (/* @__PURE__ */ isNull(target)) return;
47
+ const targetEl = target instanceof HTMLElement ? target : /* @__PURE__ */ isString(target) ? document.querySelector(target) : app._container || document.querySelector("#app") || document.body;
48
+ if (!targetEl) return;
49
+ if (context.selectedId.value) targetEl.dataset.theme = String(context.selectedId.value);
50
+ onScopeDispose(watch(context.selectedId, (id) => {
51
+ if (!id) return;
52
+ targetEl.dataset.theme = String(id);
53
+ }), true);
54
+ } else {
55
+ const head = app._context?.provides?.usehead ?? app._context?.provides?.head;
56
+ if (head?.push) {
57
+ const id = context.selectedId.value;
58
+ head.push({
59
+ htmlAttrs: { "data-theme": id ? String(id) : "" },
60
+ style: [{
61
+ innerHTML: this.generate(context.colors.value, context.isDark.value),
62
+ id: this.stylesheetId
63
+ }]
64
+ });
65
+ }
66
+ }
67
+ }
68
+ update(colors, isDark) {
69
+ if (!IN_BROWSER) return;
70
+ this.upsert(this.generate(colors, isDark));
71
+ }
72
+ upsert(styles) {
73
+ if (!IN_BROWSER) return;
74
+ if (!this.sheet) {
75
+ this.sheet = new CSSStyleSheet();
76
+ document.adoptedStyleSheets = [...document.adoptedStyleSheets, this.sheet];
77
+ }
78
+ this.sheet.replaceSync(styles);
79
+ }
80
+ };
81
+
82
+ //#endregion
83
+ export { ThemeAdapter as n, Vuetify0ThemeAdapter as t };
@@ -0,0 +1,9 @@
1
+ import { i as DataTableAdapterResult, n as DataTableAdapterContext, t as DataTableAdapter } from "./adapter-D2JoR-4d.mjs";
2
+
3
+ //#region src/composables/createDataTable/adapters/virtual.d.ts
4
+
5
+ declare class VirtualAdapter<T extends Record<string, unknown>> extends DataTableAdapter<T> {
6
+ setup(context: DataTableAdapterContext<T>): DataTableAdapterResult<T>;
7
+ }
8
+ //#endregion
9
+ export { VirtualAdapter as t };
@@ -0,0 +1,44 @@
1
+ import { t as createPagination } from "./createPagination-Wc_vRGNQ.mjs";
2
+ import { t as DataTableAdapter } from "./adapter-Cmeg49W9.mjs";
3
+ import { toRef, watch } from "vue";
4
+
5
+ //#region src/composables/createDataTable/adapters/virtual.ts
6
+ /**
7
+ * @module createDataTable/adapters/virtual
8
+ *
9
+ * @remarks
10
+ * Virtual scrolling data table adapter. Performs client-side filtering
11
+ * and sorting (via DataTableAdapter base) but skips pagination slicing,
12
+ * returning all sorted items for use with createVirtual at the component level.
13
+ *
14
+ * Pagination is created with itemsPerPage matching the total item count,
15
+ * effectively placing all items on a single page. The consumer wraps
16
+ * `table.items` (or `table.sortedItems`) with createVirtual to render
17
+ * only the visible viewport.
18
+ */
19
+ var VirtualAdapter = class extends DataTableAdapter {
20
+ setup(context) {
21
+ const { search, sortBy, locale, customSorts } = context;
22
+ const { allItems, filteredItems } = this.filter(context);
23
+ const sortedItems = this.sort(filteredItems, sortBy, locale, customSorts);
24
+ const size = toRef(() => sortedItems.value.length);
25
+ const pagination = createPagination({
26
+ size,
27
+ itemsPerPage: size
28
+ });
29
+ watch([search, sortBy], () => {
30
+ pagination.first();
31
+ });
32
+ return {
33
+ allItems,
34
+ filteredItems,
35
+ sortedItems,
36
+ items: sortedItems,
37
+ pagination,
38
+ total: toRef(() => sortedItems.value.length)
39
+ };
40
+ }
41
+ };
42
+
43
+ //#endregion
44
+ export { VirtualAdapter as t };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vuetify/v0",
3
- "version": "0.1.3",
3
+ "version": "0.1.5",
4
4
  "description": "Vuetify0",
5
5
  "license": "MIT",
6
6
  "main": "./dist/index.mjs",
@@ -37,7 +37,7 @@
37
37
  "@vue/test-utils": "^2.4.6",
38
38
  "flagsmith": "^10.0.0",
39
39
  "launchdarkly-js-client-sdk": "^3.9.0",
40
- "posthog-js": "^1.310.1",
40
+ "posthog-js": "1.310.1",
41
41
  "tsdown": "^0.16.8",
42
42
  "tsx": "4.21.0",
43
43
  "typescript": "5.9.3",
@@ -45,12 +45,44 @@
45
45
  "vue": "3.5.24",
46
46
  "vue-component-meta": "^3.2.2"
47
47
  },
48
+ "imports": {
49
+ "#v0/*": {
50
+ "development": "./src/*",
51
+ "default": "./dist/*"
52
+ }
53
+ },
48
54
  "exports": {
49
55
  ".": "./dist/index.mjs",
50
56
  "./components": "./dist/components/index.mjs",
51
57
  "./composables": "./dist/composables/index.mjs",
52
58
  "./constants": "./dist/constants/index.mjs",
59
+ "./data-table": "./dist/data-table/index.mjs",
60
+ "./data-table/adapters": "./dist/data-table/adapters/index.mjs",
61
+ "./data-table/adapters/client": "./dist/data-table/adapters/client/index.mjs",
62
+ "./data-table/adapters/server": "./dist/data-table/adapters/server/index.mjs",
63
+ "./data-table/adapters/virtual": "./dist/data-table/adapters/virtual/index.mjs",
53
64
  "./date": "./dist/date/index.mjs",
65
+ "./features": "./dist/features/index.mjs",
66
+ "./features/adapters/flagsmith": "./dist/features/adapters/flagsmith/index.mjs",
67
+ "./features/adapters/launchdarkly": "./dist/features/adapters/launchdarkly/index.mjs",
68
+ "./features/adapters/posthog": "./dist/features/adapters/posthog/index.mjs",
69
+ "./locale": "./dist/locale/index.mjs",
70
+ "./locale/adapters": "./dist/locale/adapters/index.mjs",
71
+ "./locale/adapters/v0": "./dist/locale/adapters/v0/index.mjs",
72
+ "./logger": "./dist/logger/index.mjs",
73
+ "./logger/adapters": "./dist/logger/adapters/index.mjs",
74
+ "./logger/adapters/consola": "./dist/logger/adapters/consola/index.mjs",
75
+ "./logger/adapters/pino": "./dist/logger/adapters/pino/index.mjs",
76
+ "./logger/adapters/v0": "./dist/logger/adapters/v0/index.mjs",
77
+ "./permissions": "./dist/permissions/index.mjs",
78
+ "./permissions/adapters": "./dist/permissions/adapters/index.mjs",
79
+ "./permissions/adapters/v0": "./dist/permissions/adapters/v0/index.mjs",
80
+ "./storage": "./dist/storage/index.mjs",
81
+ "./storage/adapters": "./dist/storage/adapters/index.mjs",
82
+ "./storage/adapters/memory": "./dist/storage/adapters/memory/index.mjs",
83
+ "./theme": "./dist/theme/index.mjs",
84
+ "./theme/adapters": "./dist/theme/adapters/index.mjs",
85
+ "./theme/adapters/v0": "./dist/theme/adapters/v0/index.mjs",
54
86
  "./types": "./dist/types/index.mjs",
55
87
  "./utilities": "./dist/utilities/index.mjs",
56
88
  "./package.json": "./package.json",