@vuetify/v0 1.0.0-alpha.0 → 1.0.0-alpha.2

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 (160) hide show
  1. package/README.md +5 -1
  2. package/dist/{adapter-T7AedXkz.d.mts → adapter-58IvIfAZ.d.mts} +1 -1
  3. package/dist/{adapter-Drq1v5wV.mjs → adapter-Be9zUc-n.mjs} +6 -3
  4. package/dist/{adapter-CcHB7rs3.d.mts → adapter-BvWEd9w-.d.mts} +2 -2
  5. package/dist/{adapter-BZjmDNJF.d.mts → adapter-DlX3FA3A.d.mts} +2 -2
  6. package/dist/{adapter-CCIeOzqr.mjs → adapter-gQ2SNKZq.mjs} +31 -22
  7. package/dist/{adapters-D49L7m2R.mjs → adapters-BJ5n7rgh.mjs} +1 -1
  8. package/dist/adapters-BnKW0BF_.mjs +2 -0
  9. package/dist/adapters-CBrvizWb.mjs +4 -0
  10. package/dist/adapters-CMJGA1k7.mjs +2 -0
  11. package/dist/adapters-Dse4bPxk.mjs +5 -0
  12. package/dist/browser/index.js +4845 -3272
  13. package/dist/components/index.d.mts +3 -3
  14. package/dist/components/index.mjs +2 -2
  15. package/dist/{components-Dc7sUTsg.mjs → components-CqDewYTU.mjs} +1407 -411
  16. package/dist/composables/index.d.mts +19 -19
  17. package/dist/composables/index.mjs +28 -26
  18. package/dist/{consola-Byg0ybzh.d.mts → consola-BdgyPEfx.d.mts} +1 -1
  19. package/dist/constants/index.d.mts +2 -2
  20. package/dist/constants/index.mjs +3 -3
  21. package/dist/{createDataTable-BbUL9Vva.mjs → createDataTable-rXBqGglI.mjs} +105 -32
  22. package/dist/{createGroup-C2WCfYPB.mjs → createGroup-BU4olYtB.mjs} +29 -14
  23. package/dist/{createPagination-Tp4C4He8.mjs → createPagination-CHF7SmmK.mjs} +11 -7
  24. package/dist/{createTokens-qv02qq4_.mjs → createRegistry-Dl-bSSTr.mjs} +21 -302
  25. package/dist/{createSelection-AmMX6sjc.mjs → createSelection-Csaa-C8p.mjs} +28 -21
  26. package/dist/{createSingle-CffpxK__.mjs → createSingle-8xbHAIpY.mjs} +13 -17
  27. package/dist/createTokens-lNg2M_P_.mjs +302 -0
  28. package/dist/{createTrinity-vvXk0ARD.mjs → createTrinity-BTCs1pYx.mjs} +34 -31
  29. package/dist/data-table/adapters/client/index.d.mts +1 -1
  30. package/dist/data-table/adapters/client/index.mjs +1 -1
  31. package/dist/data-table/adapters/index.d.mts +4 -4
  32. package/dist/data-table/adapters/index.mjs +5 -5
  33. package/dist/data-table/adapters/server/index.d.mts +1 -1
  34. package/dist/data-table/adapters/server/index.mjs +1 -1
  35. package/dist/data-table/adapters/virtual/index.d.mts +1 -1
  36. package/dist/data-table/adapters/virtual/index.mjs +1 -1
  37. package/dist/data-table/index.d.mts +6 -6
  38. package/dist/data-table/index.mjs +6 -6
  39. package/dist/date/index.d.mts +2 -2
  40. package/dist/date/index.mjs +4 -4
  41. package/dist/features/adapters/flagsmith/index.d.mts +1 -1
  42. package/dist/features/adapters/flagsmith/index.mjs +1 -1
  43. package/dist/features/adapters/launchdarkly/index.d.mts +1 -1
  44. package/dist/features/adapters/launchdarkly/index.mjs +1 -1
  45. package/dist/features/adapters/posthog/index.d.mts +1 -1
  46. package/dist/features/adapters/posthog/index.mjs +1 -1
  47. package/dist/features/index.d.mts +2 -2
  48. package/dist/features/index.mjs +1 -1
  49. package/dist/{globals-CAv9vqkP.mjs → globals-CKdzjeLe.mjs} +1 -1
  50. package/dist/htmlElements-D4oMQZPJ.mjs +28 -0
  51. package/dist/{index-M8EpGjjA.d.mts → index-1XdASTjp.d.mts} +1 -1
  52. package/dist/{index-D26_u_WI.d.mts → index-B7cqgTBL.d.mts} +1599 -468
  53. package/dist/{index-DoGxDgdN.d.mts → index-BJGcVy7e.d.mts} +57 -6
  54. package/dist/index-BgCkepP_.d.mts +31 -0
  55. package/dist/{index-B_XLHftL.d.mts → index-BxKMMWnQ.d.mts} +301 -263
  56. package/dist/{index-tyzwWFHS.d.mts → index-BzFHTW59.d.mts} +1 -1
  57. package/dist/{index-CDcl4wPo.d.mts → index-CT5SCLzW.d.mts} +1 -1
  58. package/dist/{index-BUsrN1vL.d.mts → index-DE3bWw11.d.mts} +2 -2
  59. package/dist/{index-76fQGkkO.d.mts → index-DTvqw22G.d.mts} +8 -11
  60. package/dist/{index-F2Fmxnzi.d.mts → index-Dp1HjBxJ.d.mts} +1 -1
  61. package/dist/{index-B_AlCD7t.d.mts → index-DuddF-NR.d.mts} +2 -9
  62. package/dist/{index-Dxx0eMLi.d.mts → index-GOpjKzaJ.d.mts} +1 -1
  63. package/dist/index.d.mts +23 -23
  64. package/dist/index.mjs +31 -29
  65. package/dist/json/attributes.json +280 -4
  66. package/dist/json/importMap.json +60 -0
  67. package/dist/json/tags.json +136 -2
  68. package/dist/json/web-types.json +1186 -347
  69. package/dist/locale/adapters/index.d.mts +2 -2
  70. package/dist/locale/adapters/index.mjs +2 -2
  71. package/dist/locale/adapters/v0/index.d.mts +1 -1
  72. package/dist/locale/adapters/v0/index.mjs +1 -1
  73. package/dist/locale/adapters/vue-i18n/index.d.mts +1 -1
  74. package/dist/locale/index.d.mts +3 -3
  75. package/dist/locale/index.mjs +2 -2
  76. package/dist/logger/adapters/consola/index.d.mts +1 -1
  77. package/dist/logger/adapters/index.d.mts +4 -4
  78. package/dist/logger/adapters/index.mjs +2 -2
  79. package/dist/logger/adapters/pino/index.d.mts +1 -1
  80. package/dist/logger/adapters/v0/index.d.mts +1 -1
  81. package/dist/logger/adapters/v0/index.mjs +1 -1
  82. package/dist/logger/index.d.mts +5 -5
  83. package/dist/logger/index.mjs +2 -2
  84. package/dist/notifications/index.d.mts +2 -2
  85. package/dist/notifications/index.mjs +3 -54
  86. package/dist/palettes/ant/generate/index.mjs +1 -0
  87. package/dist/palettes/ant/index.d.mts +1 -1
  88. package/dist/palettes/index.d.mts +3 -3
  89. package/dist/palettes/leonardo/generate/index.mjs +1 -0
  90. package/dist/palettes/material/generate/index.mjs +1 -0
  91. package/dist/palettes/material/index.d.mts +1 -1
  92. package/dist/palettes/md1/index.d.mts +1 -1
  93. package/dist/palettes/md2/index.d.mts +1 -1
  94. package/dist/palettes/radix/index.d.mts +1 -1
  95. package/dist/palettes/tailwind/index.d.mts +1 -1
  96. package/dist/permissions/adapters/index.d.mts +1 -1
  97. package/dist/permissions/adapters/index.mjs +2 -2
  98. package/dist/permissions/adapters/v0/index.d.mts +1 -1
  99. package/dist/permissions/adapters/v0/index.mjs +1 -1
  100. package/dist/permissions/index.d.mts +1 -1
  101. package/dist/permissions/index.mjs +2 -2
  102. package/dist/{pino-BxddSW2l.d.mts → pino-DNfCEb0p.d.mts} +1 -1
  103. package/dist/{posthog-B8PEtlFr.mjs → posthog-DZNnPXxS.mjs} +1 -1
  104. package/dist/rules/index.d.mts +1 -1
  105. package/dist/rules/index.mjs +1 -1
  106. package/dist/{server-DNUTnISs.d.mts → server-3ilWFwqe.d.mts} +1 -1
  107. package/dist/{server-CIftA0pK.mjs → server-y7zLSCSx.mjs} +1 -1
  108. package/dist/storage/adapters/index.d.mts +2 -2
  109. package/dist/storage/adapters/index.mjs +1 -1
  110. package/dist/storage/adapters/memory/index.d.mts +1 -1
  111. package/dist/storage/adapters/memory/index.mjs +1 -1
  112. package/dist/storage/index.d.mts +3 -3
  113. package/dist/storage/index.mjs +2 -2
  114. package/dist/theme/adapters/index.d.mts +1 -1
  115. package/dist/theme/adapters/index.mjs +4 -4
  116. package/dist/theme/adapters/unhead/index.d.mts +1 -1
  117. package/dist/theme/adapters/unhead/index.mjs +1 -1
  118. package/dist/theme/adapters/v0/index.d.mts +1 -1
  119. package/dist/theme/adapters/v0/index.mjs +1 -1
  120. package/dist/theme/index.d.mts +1 -1
  121. package/dist/theme/index.mjs +3 -3
  122. package/dist/{toArray-doLQVI56.mjs → toArray-as9BWxBK.mjs} +10 -0
  123. package/dist/types/index.d.mts +2 -2
  124. package/dist/{unhead-BYw3a366.mjs → unhead-DZiD-4Tx.mjs} +2 -2
  125. package/dist/{useClickOutside-CnCQkh7M.mjs → useClickOutside-CmCUD_Pf.mjs} +577 -1024
  126. package/dist/{useFeatures-CMpkbU8Q.mjs → useFeatures-ZIvzzuEV.mjs} +16 -6
  127. package/dist/{useLocale-BYmoHpo6.mjs → useLocale-DTJx3aKR.mjs} +19 -7
  128. package/dist/{useLogger-BfaFH-Bi.mjs → useLogger-BBTcMN61.mjs} +33 -16
  129. package/dist/useNotifications-H4knpvNw.mjs +869 -0
  130. package/dist/{usePermissions-y3Uum3nO.mjs → usePermissions-B_G12Dwd.mjs} +14 -6
  131. package/dist/{useRules-eqSXpP9V.mjs → useRules--7Qoo60I.mjs} +15 -5
  132. package/dist/{useTheme-CFH6I91x.mjs → useTheme-Co05TEeD.mjs} +20 -8
  133. package/dist/utilities/index.d.mts +1 -1
  134. package/dist/utilities/index.mjs +14 -9
  135. package/dist/{v0-DXqYgj7J.mjs → v0-BrTEO5sv.mjs} +2 -2
  136. package/dist/{v0-BAG8p0si.d.mts → v0-CdusXjY_.d.mts} +1 -1
  137. package/dist/{v0-CFV8A5PF.mjs → v0-D0Mh3EVG.mjs} +1 -1
  138. package/dist/{v0-BpgPZ1qB.d.mts → v0-D7Fm2C3Y.d.mts} +1 -1
  139. package/dist/{v0-BqikIgl0.mjs → v0-DeiZuexg.mjs} +1 -1
  140. package/dist/{v0-DOq_Ia5H.mjs → v0-Dq3zhexO.mjs} +2 -2
  141. package/dist/{v0-C2UMaHUa.d.mts → v0-DrOub-e1.d.mts} +1 -1
  142. package/dist/{virtual-D1HwNBLS.mjs → virtual-C0yHf1DC.mjs} +2 -2
  143. package/dist/{virtual-BaQWQ9ji.d.mts → virtual-D4fckewC.d.mts} +1 -1
  144. package/package.json +10 -7
  145. package/SKILL.md +0 -95
  146. package/dist/adapters-BOVGPozf.mjs +0 -2
  147. package/dist/adapters-BbNfjyvY.mjs +0 -5
  148. package/dist/adapters-BhNTUuxE.mjs +0 -2
  149. package/dist/adapters-RwNU3wNj.mjs +0 -4
  150. package/dist/htmlElements-DcYtv0hg.mjs +0 -75
  151. package/dist/index-D6mQAEs2.d.mts +0 -79
  152. /package/dist/{adapter-DNKjooxI.d.mts → adapter-Dhq68tz0.d.mts} +0 -0
  153. /package/dist/{flagsmith-DQnnahG5.mjs → flagsmith-Dbh1h8WF.mjs} +0 -0
  154. /package/dist/{index-DxruGeVY.d.mts → index-C6rdXZ7j.d.mts} +0 -0
  155. /package/dist/{index-PWQavSPf.d.mts → index-CFhUdAHM.d.mts} +0 -0
  156. /package/dist/{index-c55Utzva.d.mts → index-CROz1VSV.d.mts} +0 -0
  157. /package/dist/{launchdarkly-2_48EJ1_.mjs → launchdarkly-BKtW-idu.mjs} +0 -0
  158. /package/dist/{memory-DUyWthic.d.mts → memory-CeSQE-QV.d.mts} +0 -0
  159. /package/dist/{memory-XCMtkld1.mjs → memory-oYBvtkgx.mjs} +0 -0
  160. /package/dist/{v0-4OQBCeda.mjs → v0-Bmow1q_x.mjs} +0 -0
@@ -1,8 +1,8 @@
1
- import { o as createPluginContext } from "./useLogger-BfaFH-Bi.mjs";
2
- import { t as createTokens } from "./createTokens-qv02qq4_.mjs";
3
- import { t as toArray } from "./toArray-doLQVI56.mjs";
4
- import { t as Vuetify0PermissionAdapter } from "./v0-4OQBCeda.mjs";
5
- import "./adapters-BhNTUuxE.mjs";
1
+ import { o as createPluginContext } from "./useLogger-BBTcMN61.mjs";
2
+ import { t as createTokens } from "./createTokens-lNg2M_P_.mjs";
3
+ import { t as toArray } from "./toArray-as9BWxBK.mjs";
4
+ import { t as Vuetify0PermissionAdapter } from "./v0-Bmow1q_x.mjs";
5
+ import "./adapters-CMJGA1k7.mjs";
6
6
  //#region src/composables/usePermissions/index.ts
7
7
  /**
8
8
  * @module usePermissions
@@ -20,6 +20,14 @@ import "./adapters-BhNTUuxE.mjs";
20
20
  * - Adapter pattern for custom permission systems
21
21
  *
22
22
  * Built on createTokens for flexible permission configuration.
23
+ *
24
+ * @example
25
+ * ```ts
26
+ * import { usePermissions } from '@vuetify/v0'
27
+ *
28
+ * const permissions = usePermissions()
29
+ * console.log(permissions.can('admin', 'edit', 'users'))
30
+ * ```
23
31
  */
24
32
  /**
25
33
  * Creates a new permissions instance.
@@ -49,7 +57,7 @@ function createPermissions(_options = {}) {
49
57
  const record = {};
50
58
  for (const role in permissions) {
51
59
  if (!record[role]) record[role] = {};
52
- for (const [actions, subjects, condition = true] of permissions[role]) for (const action of toArray(actions)) for (const subject of toArray(subjects)) {
60
+ for (const [actions, subjects, condition = true] of permissions[role]) for (const action of /* @__PURE__ */ toArray(actions)) for (const subject of /* @__PURE__ */ toArray(subjects)) {
53
61
  if (!record[role][action]) record[role][action] = {};
54
62
  record[role][action][subject] = condition;
55
63
  }
@@ -1,6 +1,6 @@
1
1
  import { instanceExists, isFunction, isObject } from "./utilities/index.mjs";
2
- import { o as createPluginContext } from "./useLogger-BfaFH-Bi.mjs";
3
- import { a as useLocale } from "./useLocale-BYmoHpo6.mjs";
2
+ import { o as createPluginContext } from "./useLogger-BBTcMN61.mjs";
3
+ import { a as useLocale } from "./useLocale-DTJx3aKR.mjs";
4
4
  //#region src/composables/useRules/adapters/standard.ts
5
5
  /**
6
6
  * Type guard for Standard Schema objects.
@@ -9,6 +9,7 @@ import { a as useLocale } from "./useLocale-BYmoHpo6.mjs";
9
9
  * @param value The value to check.
10
10
  * @returns `true` if the value conforms to the Standard Schema interface.
11
11
  */
12
+ /* @__NO_SIDE_EFFECTS__ */
12
13
  function isStandardSchema(value) {
13
14
  return /* @__PURE__ */ isObject(value) && "~standard" in value;
14
15
  }
@@ -24,6 +25,7 @@ function isStandardSchema(value) {
24
25
  *
25
26
  * @see https://standardschema.dev/
26
27
  */
28
+ /* @__NO_SIDE_EFFECTS__ */
27
29
  function toRule(schema) {
28
30
  return async (value) => {
29
31
  let result = schema["~standard"].validate(value);
@@ -54,6 +56,14 @@ function toRule(schema) {
54
56
  * - `false` — validation fails, error message resolved from locale (`$rules.<name>`)
55
57
  *
56
58
  * Integrates with createValidation for rule resolution, useLocale for i18n.
59
+ *
60
+ * @example
61
+ * ```ts
62
+ * import { useRules } from '@vuetify/v0'
63
+ *
64
+ * const rules = useRules()
65
+ * const validators = rules.resolve(['required', v => v.length > 3 || 'Too short'])
66
+ * ```
57
67
  */
58
68
  /**
59
69
  * Wraps an alias predicate so that `false` results are
@@ -84,8 +94,8 @@ function createResolve(aliases, locale) {
84
94
  result.push(rule);
85
95
  continue;
86
96
  }
87
- if (isStandardSchema(rule)) {
88
- result.push(toRule(rule));
97
+ if (/* @__PURE__ */ isStandardSchema(rule)) {
98
+ result.push(/* @__PURE__ */ toRule(rule));
89
99
  continue;
90
100
  }
91
101
  const predicate = aliases[rule];
@@ -121,7 +131,7 @@ function createRules(_options = {}) {
121
131
  const { aliases: customAliases } = _options;
122
132
  let locale;
123
133
  try {
124
- if (instanceExists()) locale = useLocale();
134
+ if (/* @__PURE__ */ instanceExists()) locale = useLocale();
125
135
  } catch {}
126
136
  const aliases = { ...customAliases };
127
137
  return {
@@ -1,9 +1,9 @@
1
1
  import { foreground } from "./utilities/index.mjs";
2
- import { o as createPluginContext } from "./useLogger-BfaFH-Bi.mjs";
3
- import { r as flatten, t as createTokens } from "./createTokens-qv02qq4_.mjs";
4
- import { t as createSingle } from "./createSingle-CffpxK__.mjs";
5
- import { t as V0StyleSheetThemeAdapter } from "./v0-DXqYgj7J.mjs";
6
- import "./adapters-RwNU3wNj.mjs";
2
+ import { o as createPluginContext } from "./useLogger-BBTcMN61.mjs";
3
+ import { t as createSingle } from "./createSingle-8xbHAIpY.mjs";
4
+ import { r as flatten, t as createTokens } from "./createTokens-lNg2M_P_.mjs";
5
+ import { t as V0StyleSheetThemeAdapter } from "./v0-BrTEO5sv.mjs";
6
+ import "./adapters-CBrvizWb.mjs";
7
7
  import { computed, shallowRef, toRef } from "vue";
8
8
  //#region src/composables/useTheme/index.ts
9
9
  /**
@@ -24,6 +24,15 @@ import { computed, shallowRef, toRef } from "vue";
24
24
  * - Theme cycling
25
25
  *
26
26
  * Integrates with createSingle for selection and createTokens for color resolution.
27
+ *
28
+ * @example
29
+ * ```ts
30
+ * import { useTheme } from '@vuetify/v0'
31
+ *
32
+ * const theme = useTheme()
33
+ * theme.select('dark')
34
+ * console.log(theme.isDark.value) // true
35
+ * ```
27
36
  */
28
37
  /**
29
38
  * Creates a new theme instance.
@@ -63,7 +72,10 @@ function createTheme(_options = {}) {
63
72
  palette,
64
73
  ...themes
65
74
  }, { flat: true });
66
- const registry = createSingle(options);
75
+ const registry = createSingle({
76
+ ...options,
77
+ reactive: true
78
+ });
67
79
  for (const id in themes) {
68
80
  const { colors: value, ...theme } = themes[id];
69
81
  register({
@@ -82,7 +94,7 @@ function createTheme(_options = {}) {
82
94
  const themeColors = resolve(theme.value);
83
95
  if (genForeground) for (const [key, value] of Object.entries(themeColors)) {
84
96
  const onKey = `on-${key}`;
85
- if (!key.startsWith("on-") && !(onKey in themeColors)) themeColors[onKey] = foreground(value);
97
+ if (!key.startsWith("on-") && !(onKey in themeColors)) themeColors[onKey] = /* @__PURE__ */ foreground(value);
86
98
  }
87
99
  resolved[theme.id] = themeColors;
88
100
  }
@@ -101,7 +113,7 @@ function createTheme(_options = {}) {
101
113
  }
102
114
  function register(registration = {}) {
103
115
  const { colors, ...rest } = registration;
104
- if (colors && rest.id && !registry.has(rest.id)) tokens.onboard(flatten({ [rest.id]: { colors } }, "", true));
116
+ if (colors && rest.id && !registry.has(rest.id)) tokens.onboard(/* @__PURE__ */ flatten({ [rest.id]: { colors } }, "", true));
105
117
  const item = {
106
118
  lazy: false,
107
119
  dark: false,
@@ -1,2 +1,2 @@
1
- import { C as foreground, E as rgbToHex, S as apca, T as hexToRgb, _ as mergeDeep, a as isBoolean, b as resolveIndexes, c as isNaN, d as isNumber, f as isObject, g as isUndefined, h as isSymbol, i as isArray, l as isNull, m as isString, n as instanceName, o as isElement, p as isPrimitive, r as clamp, s as isFunction, t as instanceExists, u as isNullOrUndefined, v as range, w as RGB, x as useId, y as resolveIds } from "../index-Dxx0eMLi.mjs";
1
+ import { C as foreground, E as rgbToHex, S as apca, T as hexToRgb, _ as mergeDeep, a as isBoolean, b as resolveIndexes, c as isNaN, d as isNumber, f as isObject, g as isUndefined, h as isSymbol, i as isArray, l as isNull, m as isString, n as instanceName, o as isElement, p as isPrimitive, r as clamp, s as isFunction, t as instanceExists, u as isNullOrUndefined, v as range, w as RGB, x as useId, y as resolveIds } from "../index-GOpjKzaJ.mjs";
2
2
  export { RGB, apca, clamp, foreground, hexToRgb, instanceExists, instanceName, isArray, isBoolean, isElement, isFunction, isNaN, isNull, isNullOrUndefined, isNumber, isObject, isPrimitive, isString, isSymbol, isUndefined, mergeDeep, range, resolveIds, resolveIndexes, rgbToHex, useId };
@@ -1,7 +1,8 @@
1
- import { t as IN_BROWSER } from "../globals-CAv9vqkP.mjs";
1
+ import { t as IN_BROWSER } from "../globals-CKdzjeLe.mjs";
2
2
  import * as Vue from "vue";
3
3
  import { useId as useId$1 } from "vue";
4
4
  //#region src/utilities/color.ts
5
+ /* @__NO_SIDE_EFFECTS__ */
5
6
  function hexToRgb(hex) {
6
7
  const clean = hex.startsWith("#") ? hex.slice(1) : hex;
7
8
  if (clean.length === 3 || clean.length === 4) {
@@ -9,7 +10,7 @@ function hexToRgb(hex) {
9
10
  const g = Number.parseInt(clean[1] + clean[1], 16);
10
11
  const b = Number.parseInt(clean[2] + clean[2], 16);
11
12
  const a = clean.length === 4 ? Number.parseInt(clean[3] + clean[3], 16) : void 0;
12
- return a === void 0 ? {
13
+ return /* @__PURE__ */ isUndefined(a) ? {
13
14
  r,
14
15
  g,
15
16
  b
@@ -24,7 +25,7 @@ function hexToRgb(hex) {
24
25
  const g = Number.parseInt(clean.slice(2, 4), 16);
25
26
  const b = Number.parseInt(clean.slice(4, 6), 16);
26
27
  const a = clean.length === 8 ? Number.parseInt(clean.slice(6, 8), 16) : void 0;
27
- return a === void 0 ? {
28
+ return /* @__PURE__ */ isUndefined(a) ? {
28
29
  r,
29
30
  g,
30
31
  b
@@ -35,13 +36,14 @@ function hexToRgb(hex) {
35
36
  a
36
37
  };
37
38
  }
39
+ /* @__NO_SIDE_EFFECTS__ */
38
40
  function rgbToHex({ r, g, b, a }) {
39
41
  const hex = "#" + [
40
42
  r,
41
43
  g,
42
44
  b
43
45
  ].map((c) => c.toString(16).padStart(2, "0")).join("");
44
- if (a !== void 0) return hex + a.toString(16).padStart(2, "0");
46
+ if (!/* @__PURE__ */ isUndefined(a)) return hex + a.toString(16).padStart(2, "0");
45
47
  return hex;
46
48
  }
47
49
  //#endregion
@@ -70,6 +72,7 @@ function luminance(rgb) {
70
72
  function clamp$1(y) {
71
73
  return y > blkThrs ? y : y + Math.pow(blkThrs - y, blkClmp);
72
74
  }
75
+ /* @__NO_SIDE_EFFECTS__ */
73
76
  function apca(text, background) {
74
77
  const txtY = clamp$1(luminance(text));
75
78
  const bgY = clamp$1(luminance(background));
@@ -93,10 +96,10 @@ const WHITE = {
93
96
  g: 255,
94
97
  b: 255
95
98
  };
99
+ /* @__NO_SIDE_EFFECTS__ */
96
100
  function foreground(hex) {
97
- const rgb = hexToRgb(hex);
98
- const onWhite = Math.abs(apca(WHITE, rgb));
99
- return Math.abs(apca(BLACK, rgb)) > onWhite ? "#000000" : "#ffffff";
101
+ const rgb = /* @__PURE__ */ hexToRgb(hex);
102
+ return Math.abs(/* @__PURE__ */ apca(BLACK, rgb)) > Math.abs(/* @__PURE__ */ apca(WHITE, rgb)) ? "#000000" : "#ffffff";
100
103
  }
101
104
  //#endregion
102
105
  //#region src/utilities/instance.ts
@@ -116,9 +119,11 @@ function getInstanceCompat() {
116
119
  if (INSTANCE_KEY in vueExports) return vueExports[INSTANCE_KEY];
117
120
  return Vue.getCurrentInstance();
118
121
  }
122
+ /* @__NO_SIDE_EFFECTS__ */
119
123
  function instanceExists() {
120
124
  return !/* @__PURE__ */ isNull(getInstanceCompat());
121
125
  }
126
+ /* @__NO_SIDE_EFFECTS__ */
122
127
  function instanceName() {
123
128
  return getInstanceCompat()?.type?.name;
124
129
  }
@@ -379,7 +384,7 @@ function isSymbol(item) {
379
384
  function isNaN(item) {
380
385
  return /* @__PURE__ */ isNumber(item) && Number.isNaN(item);
381
386
  }
382
- const UNSAFE_KEYS = new Set([
387
+ const UNSAFE_KEYS = /* @__PURE__ */ new Set([
383
388
  "__proto__",
384
389
  "constructor",
385
390
  "prototype"
@@ -455,7 +460,7 @@ let idCounter = 0;
455
460
  */
456
461
  /* @__NO_SIDE_EFFECTS__ */
457
462
  function useId() {
458
- if (instanceExists()) return useId$1();
463
+ if (/* @__PURE__ */ instanceExists()) return useId$1();
459
464
  if (typeof (process.env.NODE_ENV !== "production") !== "undefined" && 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.");
460
465
  return `v0-${idCounter++}`;
461
466
  }
@@ -1,6 +1,6 @@
1
- import { t as IN_BROWSER } from "./globals-CAv9vqkP.mjs";
1
+ import { t as IN_BROWSER } from "./globals-CKdzjeLe.mjs";
2
2
  import { isNull, isString } from "./utilities/index.mjs";
3
- import { t as ThemeAdapter } from "./adapter-Drq1v5wV.mjs";
3
+ import { t as ThemeAdapter } from "./adapter-Be9zUc-n.mjs";
4
4
  import { onScopeDispose, watch } from "vue";
5
5
  //#region src/composables/useTheme/adapters/v0.ts
6
6
  /**
@@ -1,4 +1,4 @@
1
- import { i as DataTableAdapterResult, n as DataTableAdapterContext, t as DataTableAdapter } from "./adapter-BZjmDNJF.mjs";
1
+ import { i as DataTableAdapterResult, n as DataTableAdapterContext, t as DataTableAdapter } from "./adapter-DlX3FA3A.mjs";
2
2
 
3
3
  //#region src/composables/createDataTable/adapters/v0.d.ts
4
4
  declare class ClientAdapter<T extends Record<string, unknown>> extends DataTableAdapter<T> {
@@ -1,4 +1,4 @@
1
- import { t as IN_BROWSER } from "./globals-CAv9vqkP.mjs";
1
+ import { t as IN_BROWSER } from "./globals-CKdzjeLe.mjs";
2
2
  import { isObject, isString, isUndefined } from "./utilities/index.mjs";
3
3
  //#region src/composables/useLocale/adapters/v0.ts
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { n as LocaleAdapterContext, t as LocaleAdapter } from "./adapter-CcHB7rs3.mjs";
1
+ import { n as LocaleAdapterContext, t as LocaleAdapter } from "./adapter-BvWEd9w-.mjs";
2
2
 
3
3
  //#region src/composables/useLocale/adapters/v0.d.ts
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { t as IN_BROWSER } from "./globals-CAv9vqkP.mjs";
1
+ import { t as IN_BROWSER } from "./globals-CKdzjeLe.mjs";
2
2
  import { isFunction } from "./utilities/index.mjs";
3
3
  //#region src/composables/useLogger/adapters/v0.ts
4
4
  /**
@@ -1,5 +1,5 @@
1
- import { t as DataTableAdapter } from "./adapter-CCIeOzqr.mjs";
2
- import { t as createPagination } from "./createPagination-Tp4C4He8.mjs";
1
+ import { t as DataTableAdapter } from "./adapter-gQ2SNKZq.mjs";
2
+ import { t as createPagination } from "./createPagination-CHF7SmmK.mjs";
3
3
  import { computed, toRef, watch } from "vue";
4
4
  //#region src/composables/createDataTable/adapters/v0.ts
5
5
  /**
@@ -1,4 +1,4 @@
1
- import { t as LoggerAdapter } from "./adapter-DNKjooxI.mjs";
1
+ import { t as LoggerAdapter } from "./adapter-Dhq68tz0.mjs";
2
2
 
3
3
  //#region src/composables/useLogger/adapters/v0.d.ts
4
4
  /**
@@ -1,5 +1,5 @@
1
- import { t as DataTableAdapter } from "./adapter-CCIeOzqr.mjs";
2
- import { t as createPagination } from "./createPagination-Tp4C4He8.mjs";
1
+ import { t as DataTableAdapter } from "./adapter-gQ2SNKZq.mjs";
2
+ import { t as createPagination } from "./createPagination-CHF7SmmK.mjs";
3
3
  import { toRef, watch } from "vue";
4
4
  //#region src/composables/createDataTable/adapters/virtual.ts
5
5
  /**
@@ -1,4 +1,4 @@
1
- import { i as DataTableAdapterResult, n as DataTableAdapterContext, t as DataTableAdapter } from "./adapter-BZjmDNJF.mjs";
1
+ import { i as DataTableAdapterResult, n as DataTableAdapterContext, t as DataTableAdapter } from "./adapter-DlX3FA3A.mjs";
2
2
 
3
3
  //#region src/composables/createDataTable/adapters/virtual.d.ts
4
4
  declare class VirtualAdapter<T extends Record<string, unknown>> extends DataTableAdapter<T> {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vuetify/v0",
3
- "version": "1.0.0-alpha.0",
3
+ "version": "1.0.0-alpha.2",
4
4
  "description": "A meta UI framework for building applications, component libraries, and design systems with Vue 3",
5
5
  "license": "MIT",
6
6
  "types": "./dist/index.d.mts",
@@ -52,17 +52,18 @@
52
52
  "@ant-design/colors": "^8.0.1",
53
53
  "@flagsmith/flagsmith": "^11.0.0",
54
54
  "@material/material-color-utilities": "^0.4.0",
55
- "@vue/compiler-dom": "^3.5.31",
55
+ "@vue/compiler-dom": "^3.5.32",
56
56
  "@vue/test-utils": "^2.4.6",
57
- "launchdarkly-js-client-sdk": "^3.9.0",
58
- "posthog-js": "^1.364.1",
57
+ "concurrently": "^9.2.1",
58
+ "launchdarkly-js-client-sdk": "^3.9.1",
59
+ "posthog-js": "^1.365.0",
59
60
  "tsdown": "^0.21.7",
60
61
  "tsx": "4.21.0",
61
62
  "typescript": "6.0.2",
62
63
  "unplugin-vue": "^7.1.1",
63
- "vue": "3.5.31",
64
+ "vue": "3.5.32",
64
65
  "vue-component-meta": "3.2.6",
65
- "vue-i18n": "^11.3.0"
66
+ "vue-i18n": "^11.3.1"
66
67
  },
67
68
  "imports": {
68
69
  "#v0/*": {
@@ -125,7 +126,9 @@
125
126
  "@js-temporal/polyfill": "0.5.1"
126
127
  },
127
128
  "scripts": {
128
- "build": "tsdown && pnpm generate:web-types",
129
+ "build": "concurrently --names tsdown,webtypes --kill-others-on-fail --prefix-colors cyan,magenta 'pnpm build:tsdown' 'pnpm build:web-types'",
130
+ "build:tsdown": "tsdown",
131
+ "build:web-types": "tsx scripts/generate-web-types.ts",
129
132
  "generate:web-types": "tsx scripts/generate-web-types.ts",
130
133
  "typecheck": "vue-tsc --noEmit --incremental"
131
134
  }
package/SKILL.md DELETED
@@ -1,95 +0,0 @@
1
- ---
2
- name: vuetify0
3
- description: Build with @vuetify/v0 headless composables and components for Vue 3. Use when creating selection state (single, multi, grouped, stepped), form validation, tab/dialog/popover UI, provide/inject context, registries, virtual scrolling, pagination, keyboard shortcuts, resize observers, theming, breakpoints, or SSR-safe browser detection. Triggers on v0, vuetify0, headless components, or WAI-ARIA patterns.
4
- ---
5
-
6
- # Vuetify0 - Headless Composables & Components
7
-
8
- Transform Vue 3 apps with unstyled, logic-focused building blocks for design systems.
9
-
10
- ## Quick Start
11
-
12
- ```bash
13
- pnpm install @vuetify/v0
14
- ```
15
-
16
- No global plugin required. Import only what you need:
17
-
18
- ```ts
19
- import { createSelection } from '@vuetify/v0/composables'
20
- import { Tabs } from '@vuetify/v0/components'
21
- ```
22
-
23
- ## Core Decision Tree
24
-
25
- **Before writing custom logic**, check if v0 already provides it:
26
-
27
- | Need | Use |
28
- |------|-----|
29
- | Single item selection | `createSingle` |
30
- | Multi-item selection | `createSelection` |
31
- | Selection with "select all" | `createGroup` |
32
- | Step wizard / carousel | `createStep` |
33
- | Form validation | `createForm` |
34
- | Shared state (provide/inject) | `createContext` |
35
- | Browser utilities | `IN_BROWSER`, `useBreakpoints`, `useMediaQuery` |
36
-
37
- ## Component Architecture
38
-
39
- All components are **headless** (unstyled) and follow WAI-ARIA patterns:
40
-
41
- ```vue
42
- <script setup>
43
- import { Tabs } from '@vuetify/v0/components'
44
- </script>
45
-
46
- <template>
47
- <Tabs.Root v-model="active">
48
- <Tabs.List>
49
- <Tabs.Item value="overview">Overview</Tabs.Item>
50
- </Tabs.List>
51
- <Tabs.Panel value="overview">Content</Tabs.Panel>
52
- </Tabs.Root>
53
- </template>
54
- ```
55
-
56
- **Available components**: Dialog, Tabs, ExpansionPanel, Checkbox, Radio, Popover, Pagination, Select, Slider, Splitter, Switch, Avatar, Breadcrumbs, Form, Input, Scrim
57
-
58
- ## Essential Patterns
59
-
60
- ### Selection State
61
- ```ts
62
- // Single selection (tabs, theme picker)
63
- const single = createSingle({ mandatory: 'force' })
64
-
65
- // Multi-selection (tags, filters)
66
- const selection = createSelection({ multiple: true })
67
-
68
- // Group with "select all" (data tables)
69
- const group = createGroup()
70
- ```
71
-
72
- ### Context Sharing
73
- ```ts
74
- // Type-safe provide/inject
75
- const [useTheme, provideTheme] = createContext<Theme>('Theme')
76
- ```
77
-
78
- ### Form Validation
79
- ```ts
80
- const form = createForm()
81
- form.register({ id: 'email', rules: [required, email] })
82
- ```
83
-
84
- ## Anti-Patterns
85
-
86
- **Don't reinvent these wheels:**
87
-
88
- - **Custom selection logic** → Use `createSelection`
89
- - **Manual provide/inject** → Use `createContext`
90
- - **SSR checks** → Use `IN_BROWSER` constant
91
-
92
- ## Resources
93
-
94
- - **Vuetify MCP** for structured API access: `claude mcp add vuetify-mcp https://mcp.vuetifyjs.com/mcp`
95
- - **Live docs**: https://0.vuetifyjs.com
@@ -1,2 +0,0 @@
1
- import "./v0-CFV8A5PF.mjs";
2
- export {};
@@ -1,5 +0,0 @@
1
- import "./adapter-CCIeOzqr.mjs";
2
- import "./v0-DOq_Ia5H.mjs";
3
- import "./server-CIftA0pK.mjs";
4
- import "./virtual-D1HwNBLS.mjs";
5
- export {};
@@ -1,2 +0,0 @@
1
- import "./v0-4OQBCeda.mjs";
2
- export {};
@@ -1,4 +0,0 @@
1
- import "./adapter-Drq1v5wV.mjs";
2
- import "./v0-DXqYgj7J.mjs";
3
- import "./unhead-BYw3a366.mjs";
4
- export {};
@@ -1,75 +0,0 @@
1
- /**
2
- * Set of HTML elements that are self-closing (void elements)
3
- * These elements cannot have children and don't need closing tags
4
- */
5
- const SELF_CLOSING_TAGS = new Set([
6
- "area",
7
- "base",
8
- "br",
9
- "col",
10
- "embed",
11
- "hr",
12
- "img",
13
- "input",
14
- "link",
15
- "meta",
16
- "source",
17
- "track",
18
- "wbr"
19
- ]);
20
- /**
21
- * Common HTML element types for polymorphic components
22
- */
23
- const COMMON_ELEMENTS = {
24
- DIV: "div",
25
- SPAN: "span",
26
- SECTION: "section",
27
- ARTICLE: "article",
28
- ASIDE: "aside",
29
- HEADER: "header",
30
- FOOTER: "footer",
31
- MAIN: "main",
32
- NAV: "nav",
33
- P: "p",
34
- H1: "h1",
35
- H2: "h2",
36
- H3: "h3",
37
- H4: "h4",
38
- H5: "h5",
39
- H6: "h6",
40
- BUTTON: "button",
41
- A: "a",
42
- INPUT: "input",
43
- TEXTAREA: "textarea",
44
- SELECT: "select",
45
- LABEL: "label",
46
- UL: "ul",
47
- OL: "ol",
48
- LI: "li",
49
- DL: "dl",
50
- DT: "dt",
51
- DD: "dd",
52
- IMG: "img",
53
- VIDEO: "video",
54
- AUDIO: "audio",
55
- CANVAS: "canvas",
56
- SVG: "svg",
57
- TABLE: "table",
58
- THEAD: "thead",
59
- TBODY: "tbody",
60
- TFOOT: "tfoot",
61
- TR: "tr",
62
- TH: "th",
63
- TD: "td",
64
- FORM: "form",
65
- FIELDSET: "fieldset",
66
- LEGEND: "legend"
67
- };
68
- /**
69
- * Check if an element is self-closing
70
- */
71
- function isSelfClosingTag(tag) {
72
- return SELF_CLOSING_TAGS.has(tag.toLowerCase());
73
- }
74
- //#endregion
75
- export { SELF_CLOSING_TAGS as n, isSelfClosingTag as r, COMMON_ELEMENTS as t };
@@ -1,79 +0,0 @@
1
- //#region src/constants/globals.d.ts
2
- declare const IN_BROWSER: boolean;
3
- declare const SUPPORTS_TOUCH: boolean;
4
- declare const SUPPORTS_MATCH_MEDIA: boolean;
5
- declare const SUPPORTS_OBSERVER: boolean;
6
- declare const SUPPORTS_INTERSECTION_OBSERVER: boolean;
7
- declare const SUPPORTS_MUTATION_OBSERVER: boolean;
8
- declare const version: any;
9
- declare const __LOGGER_ENABLED__: any;
10
- //#endregion
11
- //#region src/constants/htmlElements.d.ts
12
- declare const selfClosingTags: ["area", "base", "br", "col", "embed", "hr", "img", "input", "link", "meta", "source", "track", "wbr"];
13
- /**
14
- * Set of HTML elements that are self-closing (void elements)
15
- * These elements cannot have children and don't need closing tags
16
- */
17
- declare const SELF_CLOSING_TAGS: Set<"area" | "base" | "br" | "col" | "embed" | "hr" | "img" | "input" | "link" | "meta" | "source" | "track" | "wbr">;
18
- /**
19
- * Common HTML element types for polymorphic components
20
- */
21
- declare const COMMON_ELEMENTS: {
22
- readonly DIV: "div";
23
- readonly SPAN: "span";
24
- readonly SECTION: "section";
25
- readonly ARTICLE: "article";
26
- readonly ASIDE: "aside";
27
- readonly HEADER: "header";
28
- readonly FOOTER: "footer";
29
- readonly MAIN: "main";
30
- readonly NAV: "nav";
31
- readonly P: "p";
32
- readonly H1: "h1";
33
- readonly H2: "h2";
34
- readonly H3: "h3";
35
- readonly H4: "h4";
36
- readonly H5: "h5";
37
- readonly H6: "h6";
38
- readonly BUTTON: "button";
39
- readonly A: "a";
40
- readonly INPUT: "input";
41
- readonly TEXTAREA: "textarea";
42
- readonly SELECT: "select";
43
- readonly LABEL: "label";
44
- readonly UL: "ul";
45
- readonly OL: "ol";
46
- readonly LI: "li";
47
- readonly DL: "dl";
48
- readonly DT: "dt";
49
- readonly DD: "dd";
50
- readonly IMG: "img";
51
- readonly VIDEO: "video";
52
- readonly AUDIO: "audio";
53
- readonly CANVAS: "canvas";
54
- readonly SVG: "svg";
55
- readonly TABLE: "table";
56
- readonly THEAD: "thead";
57
- readonly TBODY: "tbody";
58
- readonly TFOOT: "tfoot";
59
- readonly TR: "tr";
60
- readonly TH: "th";
61
- readonly TD: "td";
62
- readonly FORM: "form";
63
- readonly FIELDSET: "fieldset";
64
- readonly LEGEND: "legend";
65
- };
66
- /**
67
- * Check if an element is self-closing
68
- */
69
- declare function isSelfClosingTag(tag: keyof HTMLElementTagNameMap): boolean;
70
- /**
71
- * Type for all valid HTML element names
72
- */
73
- type HTMLElementName = keyof HTMLElementTagNameMap;
74
- /**
75
- * Type for self-closing HTML elements
76
- */
77
- type SelfClosingElement = (typeof selfClosingTags)[number];
78
- //#endregion
79
- export { isSelfClosingTag as a, SUPPORTS_MATCH_MEDIA as c, SUPPORTS_TOUCH as d, __LOGGER_ENABLED__ as f, SelfClosingElement as i, SUPPORTS_MUTATION_OBSERVER as l, HTMLElementName as n, IN_BROWSER as o, version as p, SELF_CLOSING_TAGS as r, SUPPORTS_INTERSECTION_OBSERVER as s, COMMON_ELEMENTS as t, SUPPORTS_OBSERVER as u };