@nuxt/ui 4.10.0 → 4.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. package/.nuxt/ui.static.css +11 -11
  2. package/README.md +1 -0
  3. package/cli/commands/make/locale.mjs +40 -11
  4. package/cli/templates.mjs +2 -2
  5. package/dist/module.d.mts +1 -1
  6. package/dist/module.json +2 -2
  7. package/dist/module.mjs +5 -2
  8. package/dist/runtime/components/AuthForm.d.vue.ts +7 -7
  9. package/dist/runtime/components/AuthForm.vue.d.ts +7 -7
  10. package/dist/runtime/components/Button.vue +11 -2
  11. package/dist/runtime/components/Carousel.d.vue.ts +6 -6
  12. package/dist/runtime/components/Carousel.vue.d.ts +6 -6
  13. package/dist/runtime/components/ChatMessages.d.vue.ts +2 -2
  14. package/dist/runtime/components/ChatMessages.vue.d.ts +2 -2
  15. package/dist/runtime/components/ChatPromptSubmit.d.vue.ts +2 -2
  16. package/dist/runtime/components/ChatPromptSubmit.vue.d.ts +2 -2
  17. package/dist/runtime/components/Checkbox.d.vue.ts +1 -1
  18. package/dist/runtime/components/Checkbox.vue +12 -6
  19. package/dist/runtime/components/Checkbox.vue.d.ts +1 -1
  20. package/dist/runtime/components/CheckboxGroup.d.vue.ts +6 -0
  21. package/dist/runtime/components/CheckboxGroup.vue +10 -4
  22. package/dist/runtime/components/CheckboxGroup.vue.d.ts +6 -0
  23. package/dist/runtime/components/Editor.vue +4 -1
  24. package/dist/runtime/components/Error.d.vue.ts +1 -1
  25. package/dist/runtime/components/Error.vue.d.ts +1 -1
  26. package/dist/runtime/components/FileUpload.vue +17 -10
  27. package/dist/runtime/components/Form.vue +1 -1
  28. package/dist/runtime/components/Input.vue +12 -7
  29. package/dist/runtime/components/InputDate.vue +12 -8
  30. package/dist/runtime/components/InputMenu.vue +25 -11
  31. package/dist/runtime/components/InputNumber.vue +22 -14
  32. package/dist/runtime/components/InputRating.vue +10 -7
  33. package/dist/runtime/components/InputTags.vue +12 -7
  34. package/dist/runtime/components/InputTime.vue +12 -7
  35. package/dist/runtime/components/Link.vue +61 -7
  36. package/dist/runtime/components/Listbox.vue +10 -6
  37. package/dist/runtime/components/Modal.vue +12 -5
  38. package/dist/runtime/components/NavigationMenu.vue +10 -10
  39. package/dist/runtime/components/PinInput.vue +13 -8
  40. package/dist/runtime/components/Popover.vue +0 -1
  41. package/dist/runtime/components/PricingTable.d.vue.ts +1 -1
  42. package/dist/runtime/components/PricingTable.vue.d.ts +1 -1
  43. package/dist/runtime/components/Progress.d.vue.ts +2 -1
  44. package/dist/runtime/components/Progress.vue +5 -6
  45. package/dist/runtime/components/Progress.vue.d.ts +2 -1
  46. package/dist/runtime/components/ProgressGroup.d.vue.ts +91 -0
  47. package/dist/runtime/components/ProgressGroup.vue +99 -0
  48. package/dist/runtime/components/ProgressGroup.vue.d.ts +91 -0
  49. package/dist/runtime/components/RadioGroup.d.vue.ts +7 -1
  50. package/dist/runtime/components/RadioGroup.vue +14 -5
  51. package/dist/runtime/components/RadioGroup.vue.d.ts +7 -1
  52. package/dist/runtime/components/Select.d.vue.ts +2 -0
  53. package/dist/runtime/components/Select.vue +23 -8
  54. package/dist/runtime/components/Select.vue.d.ts +2 -0
  55. package/dist/runtime/components/SelectMenu.d.vue.ts +3 -0
  56. package/dist/runtime/components/SelectMenu.vue +35 -14
  57. package/dist/runtime/components/SelectMenu.vue.d.ts +3 -0
  58. package/dist/runtime/components/Slider.vue +15 -8
  59. package/dist/runtime/components/Splitter.d.vue.ts +266 -0
  60. package/dist/runtime/components/Splitter.vue +99 -0
  61. package/dist/runtime/components/Splitter.vue.d.ts +266 -0
  62. package/dist/runtime/components/Switch.vue +8 -4
  63. package/dist/runtime/components/Table.vue +5 -5
  64. package/dist/runtime/components/Textarea.vue +17 -7
  65. package/dist/runtime/components/Theme.d.vue.ts +1 -1
  66. package/dist/runtime/components/Theme.vue +4 -3
  67. package/dist/runtime/components/Theme.vue.d.ts +1 -1
  68. package/dist/runtime/components/Tree.vue +1 -1
  69. package/dist/runtime/components/color-mode/ColorModeSelect.vue +1 -0
  70. package/dist/runtime/components/content/ContentNavigation.vue +8 -1
  71. package/dist/runtime/components/content/ContentToc.vue +4 -1
  72. package/dist/runtime/components/locale/LocaleSelect.vue +1 -0
  73. package/dist/runtime/components/prose/CodeTree.vue +31 -18
  74. package/dist/runtime/composables/useComponentProps.d.ts +1 -1
  75. package/dist/runtime/composables/useComponentProps.js +6 -0
  76. package/dist/runtime/composables/useFormField.d.ts +10 -4
  77. package/dist/runtime/composables/useFormField.js +10 -3
  78. package/dist/runtime/keyframes.css +1 -1
  79. package/dist/runtime/locale/da.js +1 -1
  80. package/dist/runtime/locale/de_at.js +7 -0
  81. package/dist/runtime/locale/de_ch.js +1 -1
  82. package/dist/runtime/locale/eu.js +1 -1
  83. package/dist/runtime/locale/fi.js +1 -1
  84. package/dist/runtime/locale/he.js +1 -1
  85. package/dist/runtime/locale/hi.js +1 -1
  86. package/dist/runtime/locale/index.d.ts +2 -1
  87. package/dist/runtime/locale/index.js +2 -1
  88. package/dist/runtime/locale/is.js +1 -1
  89. package/dist/runtime/locale/lb.js +1 -1
  90. package/dist/runtime/locale/tg.d.ts +3 -0
  91. package/dist/runtime/locale/{tj.js → tg.js} +1 -1
  92. package/dist/runtime/locale/ur.js +1 -1
  93. package/dist/runtime/types/form.d.ts +1 -1
  94. package/dist/runtime/types/html.d.ts +3 -1
  95. package/dist/runtime/types/index.d.ts +2 -0
  96. package/dist/runtime/types/index.js +2 -0
  97. package/dist/runtime/types/theme.d.ts +2 -0
  98. package/dist/runtime/types/tv.d.ts +6 -2
  99. package/dist/runtime/utils/form.d.ts +1 -1
  100. package/dist/runtime/utils/form.js +3 -1
  101. package/dist/runtime/utils/link-keys.d.ts +1 -0
  102. package/dist/runtime/utils/link-keys.js +40 -0
  103. package/dist/runtime/utils/link.d.ts +2 -1
  104. package/dist/runtime/utils/link.js +2 -40
  105. package/dist/runtime/utils/prefetch.d.ts +5 -0
  106. package/dist/runtime/utils/prefetch.js +45 -0
  107. package/dist/runtime/utils/search.js +11 -18
  108. package/dist/runtime/utils/tv.d.ts +1 -1
  109. package/dist/runtime/utils/tv.js +103 -25
  110. package/dist/runtime/vue/components/Icon.vue +5 -2
  111. package/dist/runtime/vue/components/color-mode/ColorModeSelect.vue +1 -0
  112. package/dist/shared/{ui.XkBrgXFP.mjs → ui.DCJ9twx8.mjs} +597 -220
  113. package/dist/unplugin.d.mts +1 -1
  114. package/dist/unplugin.mjs +22 -6
  115. package/dist/vite.mjs +4 -4
  116. package/package.json +54 -53
  117. /package/dist/runtime/locale/{tj.d.ts → de_at.d.ts} +0 -0
@@ -1,12 +1,15 @@
1
1
  import { pick } from '../../dist/runtime/utils/index.js';
2
2
  import 'node:url';
3
- import { pascalCase, kebabCase, camelCase } from 'scule';
3
+ import { kebabCase, pascalCase, camelCase } from 'scule';
4
4
  import { genExport } from 'knitwork';
5
5
  import colors from 'tailwindcss/colors';
6
- import { addTypeTemplate, addTemplate, updateTemplates, hasNuxtModule, getLayerDirectories, logger } from '@nuxt/kit';
6
+ import { getLayerDirectories, addTypeTemplate, addTemplate, updateTemplates, hasNuxtModule, logger } from '@nuxt/kit';
7
+ import { existsSync } from 'node:fs';
7
8
  import { readFile } from 'node:fs/promises';
8
- import { join } from 'pathe';
9
+ import { consola } from 'consola';
10
+ import { dirname, normalize, join, resolve } from 'pathe';
9
11
  import { globSync } from 'tinyglobby';
12
+ import { resolvePathSync } from 'mlly';
10
13
  import { defuFn, defu } from 'defu';
11
14
 
12
15
  const defaultIcons = {
@@ -138,6 +141,10 @@ function applyUnstyled(result, unstyled) {
138
141
  return result;
139
142
  }
140
143
  const blank = (value) => value && typeof value === "object" && !Array.isArray(value) ? Object.fromEntries(Object.keys(value).map((slot) => [slot, ""])) : "";
144
+ result = { ...result };
145
+ if (result.base) {
146
+ result.base = "";
147
+ }
141
148
  if (result.slots) {
142
149
  result.slots = Object.fromEntries(Object.keys(result.slots).map((slot) => [slot, ""]));
143
150
  }
@@ -170,12 +177,30 @@ function applyDefaultVariants(result, defaultVariants) {
170
177
  return result;
171
178
  }
172
179
 
173
- async function buildComponentDependencyGraph(componentDir, componentPattern) {
180
+ function createComponentPattern(prefix) {
181
+ const escapedPrefix = prefix.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
182
+ const kebabPrefix = kebabCase(prefix).replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
183
+ return new RegExp(`<(?:Lazy)?${escapedPrefix}([A-Z][a-zA-Z]+)|<(?:lazy-)?${kebabPrefix}-([a-z][a-z0-9-]*)|\\b(?:Lazy)?${escapedPrefix}([A-Z][a-zA-Z]+)\\b`, "g");
184
+ }
185
+ function getMatchedComponent(match) {
186
+ if (match[2]) {
187
+ return pascalCase(match[2]);
188
+ }
189
+ return match[1] || match[3];
190
+ }
191
+ async function buildComponentDependencyGraph(componentDir) {
174
192
  const dependencyGraph = /* @__PURE__ */ new Map();
193
+ const componentPattern = createComponentPattern("U");
175
194
  const componentFiles = globSync(["**/*.vue"], {
176
195
  cwd: componentDir,
177
- absolute: true
196
+ absolute: true,
197
+ // Prose components share file basenames with nine regular components
198
+ // (`prose/Tabs.vue` vs `Tabs.vue`), and the graph is keyed by basename:
199
+ // letting them in overwrites the regular component's dependency set. They
200
+ // don't need nodes anyway, they are never used with the `U` prefix.
201
+ ignore: ["prose/**"]
178
202
  });
203
+ const componentNames = new Set(componentFiles.map((file) => pascalCase(file.split("/").pop().replace(".vue", ""))));
179
204
  for (const componentFile of componentFiles) {
180
205
  try {
181
206
  const content = await readFile(componentFile, "utf-8");
@@ -183,8 +208,8 @@ async function buildComponentDependencyGraph(componentDir, componentPattern) {
183
208
  const dependencies = /* @__PURE__ */ new Set();
184
209
  const matches = content.matchAll(componentPattern);
185
210
  for (const match of matches) {
186
- const depName = match[1] || match[2];
187
- if (depName && depName !== componentName) {
211
+ const depName = getMatchedComponent(match);
212
+ if (depName && depName !== componentName && componentNames.has(depName)) {
188
213
  dependencies.add(depName);
189
214
  }
190
215
  }
@@ -207,6 +232,32 @@ function resolveComponentDependencies(component, dependencyGraph, resolved = /*
207
232
  }
208
233
  return resolved;
209
234
  }
235
+ function resolveExtraScanDirs(root, scanPackages, componentDirs) {
236
+ const dirs = /* @__PURE__ */ new Set();
237
+ for (const pkg of scanPackages || []) {
238
+ try {
239
+ dirs.add(dirname(normalize(resolvePathSync(`${pkg}/package.json`, { url: join(root, "_index.mjs") }))));
240
+ } catch {
241
+ try {
242
+ const entry = normalize(resolvePathSync(pkg, { url: join(root, "_index.mjs") }));
243
+ const marker = `node_modules/${pkg}`;
244
+ const index = entry.lastIndexOf(`${marker}/`);
245
+ dirs.add(index === -1 ? dirname(entry) : entry.slice(0, index + marker.length));
246
+ } catch {
247
+ consola.warn(`Nuxt UI could not resolve \`${pkg}\` from \`scanPackages\`: it will not be scanned for component detection`);
248
+ }
249
+ }
250
+ }
251
+ const rootDir = normalize(root);
252
+ const userDirs = Array.isArray(componentDirs) ? componentDirs : componentDirs ? [componentDirs] : [];
253
+ for (const dir of userDirs) {
254
+ const resolved = resolve(root, dir.split(/[*{]/)[0]);
255
+ if (resolved !== rootDir && !resolved.startsWith(`${rootDir}/`) && existsSync(resolved)) {
256
+ dirs.add(resolved);
257
+ }
258
+ }
259
+ return [...dirs];
260
+ }
210
261
  async function detectUsedComponents(dirs, prefix, componentDir, includeComponents) {
211
262
  const detectedComponents = /* @__PURE__ */ new Set();
212
263
  if (includeComponents && includeComponents.length > 0) {
@@ -214,11 +265,17 @@ async function detectUsedComponents(dirs, prefix, componentDir, includeComponent
214
265
  detectedComponents.add(component);
215
266
  }
216
267
  }
217
- const componentPattern = new RegExp(`<(?:Lazy)?${prefix}([A-Z][a-zA-Z]+)|\\b(?:Lazy)?${prefix}([A-Z][a-zA-Z]+)\\b`, "g");
268
+ const componentPattern = createComponentPattern(prefix);
218
269
  for (const dir of dirs) {
219
- const appFiles = globSync(["**/*.{vue,ts,js,tsx,jsx}"], {
270
+ const isPackageDir = normalize(dir).includes("node_modules/");
271
+ const appFiles = globSync(["**/*.{vue,ts,mts,js,mjs,cjs,tsx,jsx}"], {
220
272
  cwd: dir,
221
- ignore: ["node_modules/**", ".nuxt/**", "dist/**"]
273
+ // `**/` prefixes so nested dirs are skipped too: the Vue integration
274
+ // scans the whole Vite root, not just Nuxt layer `app/` directories.
275
+ // Declaration files can't render components, and the generated
276
+ // `components.d.ts` declares every component ever rendered, which would
277
+ // keep anything used once detected forever.
278
+ ignore: isPackageDir ? ["**/node_modules/**", "**/*.d.ts"] : ["**/node_modules/**", "**/.nuxt/**", "**/dist/**", "**/*.d.ts"]
222
279
  });
223
280
  for (const file of appFiles) {
224
281
  try {
@@ -226,7 +283,7 @@ async function detectUsedComponents(dirs, prefix, componentDir, includeComponent
226
283
  const content = await readFile(filePath, "utf-8");
227
284
  const matches = content.matchAll(componentPattern);
228
285
  for (const match of matches) {
229
- const componentName = match[1] || match[2];
286
+ const componentName = getMatchedComponent(match);
230
287
  if (componentName) {
231
288
  detectedComponents.add(componentName);
232
289
  }
@@ -238,13 +295,18 @@ async function detectUsedComponents(dirs, prefix, componentDir, includeComponent
238
295
  if (detectedComponents.size === 0) {
239
296
  return void 0;
240
297
  }
241
- const dependencyGraph = await buildComponentDependencyGraph(componentDir, componentPattern);
298
+ const dependencyGraph = await buildComponentDependencyGraph(componentDir);
299
+ const unknownComponents = includeComponents?.filter((component) => !dependencyGraph.has(component));
300
+ if (unknownComponents?.length) {
301
+ consola.warn(`Nuxt UI \`componentDetection\` includes unknown components: ${unknownComponents.join(", ")}`);
302
+ }
303
+ const validComponents = Array.from(detectedComponents).filter((component) => dependencyGraph.has(component));
304
+ if (validComponents.length === 0) {
305
+ return void 0;
306
+ }
242
307
  const allComponents = /* @__PURE__ */ new Set();
243
- for (const component of detectedComponents) {
244
- const resolved = resolveComponentDependencies(component, dependencyGraph);
245
- for (const resolvedComponent of resolved) {
246
- allComponents.add(resolvedComponent);
247
- }
308
+ for (const component of validComponents) {
309
+ resolveComponentDependencies(component, dependencyGraph, allComponents);
248
310
  }
249
311
  return allComponents;
250
312
  }
@@ -255,10 +317,10 @@ const accordion$1 = {
255
317
  item: "border-b border-default last:border-b-0",
256
318
  header: "flex",
257
319
  trigger: "group flex-1 flex items-center gap-1.5 font-medium text-sm py-3.5 outline-primary/25 focus-visible:outline-3 min-w-0 rounded-md",
258
- content: "data-[state=open]:animate-[accordion-down_200ms_ease-out] data-[state=closed]:animate-[accordion-up_200ms_ease-out] data-[state=closed]:overflow-hidden focus:outline-none",
320
+ content: "data-[state=open]:animate-[accordion-down_200ms_var(--ease-out)] data-[state=closed]:animate-[accordion-up_200ms_var(--ease-out)] data-[state=closed]:overflow-hidden focus:outline-none",
259
321
  body: "text-sm pb-3.5",
260
322
  leadingIcon: "shrink-0 size-5",
261
- trailingIcon: "shrink-0 size-5 ms-auto group-data-[state=open]:rotate-180 transition-transform duration-200",
323
+ trailingIcon: "shrink-0 size-5 ms-auto group-data-[state=open]:rotate-180 transition-transform duration-200 ease-out motion-reduce:transition-none",
262
324
  label: "text-start break-words"
263
325
  },
264
326
  variants: {
@@ -741,8 +803,8 @@ const blogPost = (options) => ({
741
803
  to: {
742
804
  true: {
743
805
  root: ["outline-primary/25 has-[>a:focus-visible]:outline-3", options.theme.transitions && "transition"],
744
- image: "transform transition-transform duration-200 group-hover/blog-post:scale-110",
745
- avatar: "inline-flex transform transition-transform duration-200 hover:scale-115 rounded-full outline-primary/25 focus-visible:outline-3"
806
+ image: "transform transition-transform ease-out motion-reduce:transition-none group-hover/blog-post:scale-110",
807
+ avatar: "inline-flex transform transition-transform ease-out motion-reduce:transition-none hover:scale-115 rounded-full outline-primary/25 focus-visible:outline-3"
746
808
  }
747
809
  },
748
810
  image: {
@@ -778,7 +840,7 @@ const blogPost = (options) => ({
778
840
  to: true,
779
841
  class: {
780
842
  root: "hover:bg-elevated/50",
781
- header: ["group-hover/blog-post:shadow-none", options.theme.transitions && "transition-all"]
843
+ header: ["group-hover/blog-post:shadow-none", options.theme.transitions && "transition-[box-shadow,border-radius] ease-out"]
782
844
  }
783
845
  }, {
784
846
  variant: "ghost",
@@ -1049,18 +1111,18 @@ const button = (options) => ({
1049
1111
  });
1050
1112
 
1051
1113
  const daySizes = {
1052
- xs: "size-7",
1114
+ xs: "size-6",
1053
1115
  sm: "size-7",
1054
1116
  md: "size-8",
1055
- lg: "size-9 text-md",
1056
- xl: "size-10 text-lg"
1117
+ lg: "size-9",
1118
+ xl: "size-10"
1057
1119
  };
1058
1120
  const pickerSizes = {
1059
- xs: "h-7 px-2",
1121
+ xs: "h-6 px-2",
1060
1122
  sm: "h-7 px-2",
1061
1123
  md: "h-8 px-3",
1062
- lg: "h-9 px-4 text-md",
1063
- xl: "h-10 px-5 text-lg"
1124
+ lg: "h-9 px-4",
1125
+ xl: "h-10 px-5"
1064
1126
  };
1065
1127
  const calendar = (options) => ({
1066
1128
  slots: {
@@ -1120,14 +1182,18 @@ const calendar = (options) => ({
1120
1182
  cell: "text-sm"
1121
1183
  },
1122
1184
  lg: {
1123
- headingLabel: "text-md",
1124
- headCell: "text-md",
1125
- headCellWeek: "text-md"
1185
+ headingLabel: "text-base",
1186
+ headCell: "text-base",
1187
+ headCellWeek: "text-base",
1188
+ cellWeek: "text-base",
1189
+ cell: "text-base"
1126
1190
  },
1127
1191
  xl: {
1128
1192
  headingLabel: "text-lg",
1129
1193
  headCell: "text-lg",
1130
- headCellWeek: "text-lg"
1194
+ headCellWeek: "text-lg",
1195
+ cellWeek: "text-lg",
1196
+ cell: "text-lg"
1131
1197
  }
1132
1198
  },
1133
1199
  view: {
@@ -1332,7 +1398,7 @@ const changelogVersion = (options) => ({
1332
1398
  to: {
1333
1399
  true: {
1334
1400
  title: ["outline-primary/25 has-focus-visible:outline-3 rounded-xs", options.theme.transitions && "transition"],
1335
- image: "transform transition-transform duration-200 group-hover/changelog-version-image:scale-105 group-has-focus-visible/changelog-version-image:scale-105"
1401
+ image: "transform transition-transform ease-out motion-reduce:transition-none group-hover/changelog-version-image:scale-105 group-has-focus-visible/changelog-version-image:scale-105"
1336
1402
  }
1337
1403
  },
1338
1404
  hidden: {
@@ -1364,7 +1430,7 @@ const chatMessage = (options) => ({
1364
1430
  leadingAvatarSize: "",
1365
1431
  files: "flex items-center gap-1.5",
1366
1432
  content: "relative text-pretty wrap-break-word *:first:mt-0 *:last:mb-0",
1367
- actions: ["[@media(hover:hover)]:opacity-0 group-hover/message:opacity-100 absolute bottom-0 flex items-center", options.theme.transitions && "transition-opacity"]
1433
+ actions: ["[@media(hover:hover)]:opacity-0 group-hover/message:opacity-100 absolute bottom-0 flex items-center", options.theme.transitions && "transition-opacity ease-out"]
1368
1434
  },
1369
1435
  variants: {
1370
1436
  variant: {
@@ -1502,7 +1568,7 @@ const chatMessages = {
1502
1568
  slots: {
1503
1569
  root: "w-full flex flex-col gap-1 flex-1 px-2.5 [&>article]:last-of-type:min-h-(--last-message-height)",
1504
1570
  indicator: "h-6 flex items-center gap-1 py-3 *:size-2 *:rounded-full *:bg-elevated motion-safe:[&>*:nth-child(1)]:animate-[bounce_1s_infinite] motion-safe:[&>*:nth-child(2)]:animate-[bounce_1s_0.15s_infinite] motion-safe:[&>*:nth-child(3)]:animate-[bounce_1s_0.3s_infinite]",
1505
- viewport: "absolute inset-x-0 top-[86%] data-[state=open]:animate-[fade-in_200ms_ease-out] data-[state=closed]:animate-[fade-out_200ms_ease-in]",
1571
+ viewport: "absolute inset-x-0 top-[86%] data-[state=open]:animate-[fade-in_200ms_var(--ease-out)] data-[state=closed]:animate-[fade-out_200ms_var(--ease-out)]",
1506
1572
  autoScroll: "rounded-full absolute right-1/2 translate-x-1/2 bottom-0"
1507
1573
  },
1508
1574
  variants: {
@@ -1525,7 +1591,7 @@ const chatPalette = {
1525
1591
  const focusHighlight = (utilities) => ["textarea", "[contenteditable]"].flatMap((element) => utilities.split(" ").map((utility) => `has-[${element}:focus-visible]:${utility}`)).join(" ");
1526
1592
  const chatPrompt = (options) => ({
1527
1593
  slots: {
1528
- root: "relative flex flex-col items-stretch gap-2 px-2.5 py-2 w-full rounded-lg backdrop-blur",
1594
+ root: "relative flex flex-col items-stretch gap-2 px-2.5 py-2 w-full rounded-lg backdrop-blur-sm",
1529
1595
  header: "flex items-center gap-1.5",
1530
1596
  body: "items-start gap-1.5",
1531
1597
  footer: "flex items-center justify-between gap-1.5",
@@ -1586,10 +1652,10 @@ const chatReasoning = (options) => ({
1586
1652
  trigger: ["group flex w-full items-center gap-1.5 text-muted text-sm disabled:cursor-default disabled:hover:text-muted hover:text-default rounded-sm outline-primary/25 focus-visible:outline-3 min-w-0", options.theme.transitions && "transition-colors"],
1587
1653
  leading: "relative size-4 shrink-0",
1588
1654
  leadingIcon: "size-4 shrink-0",
1589
- chevronIcon: "size-4 shrink-0 group-data-[state=open]:rotate-180 transition-transform duration-200",
1655
+ chevronIcon: "size-4 shrink-0 group-data-[state=open]:rotate-180 transition-transform duration-200 ease-out motion-reduce:transition-none",
1590
1656
  label: "truncate",
1591
- trailingIcon: "size-4 shrink-0 group-data-[state=open]:rotate-180 transition-transform duration-200",
1592
- content: "data-[state=open]:animate-[collapsible-down_200ms_ease-out] data-[state=closed]:animate-[collapsible-up_200ms_ease-out] data-[state=closed]:overflow-hidden rounded-sm outline-primary/25 has-focus-visible:outline-3",
1657
+ trailingIcon: "size-4 shrink-0 group-data-[state=open]:rotate-180 transition-transform duration-200 ease-out motion-reduce:transition-none",
1658
+ content: "data-[state=open]:animate-[collapsible-down_200ms_var(--ease-out)] data-[state=closed]:animate-[collapsible-up_200ms_var(--ease-out)] data-[state=closed]:overflow-hidden rounded-sm outline-primary/25 has-focus-visible:outline-3",
1593
1659
  body: "max-h-[200px] pt-2 overflow-y-auto text-sm text-dimmed whitespace-pre-wrap focus:outline-none"
1594
1660
  },
1595
1661
  variants: {
@@ -1601,8 +1667,8 @@ const chatReasoning = (options) => ({
1601
1667
  },
1602
1668
  alone: {
1603
1669
  false: {
1604
- leadingIcon: ["absolute inset-0 group-data-[state=open]:opacity-0", options.theme.transitions && "transition-opacity duration-200"],
1605
- chevronIcon: ["absolute inset-0 opacity-0 group-hover:opacity-100 group-data-[state=open]:opacity-100", options.theme.transitions && "transition-[rotate,opacity] duration-200"]
1670
+ leadingIcon: ["absolute inset-0 group-data-[state=open]:opacity-0", options.theme.transitions && "transition-opacity duration-200 ease-out"],
1671
+ chevronIcon: ["absolute inset-0 opacity-0 group-hover:opacity-100 group-data-[state=open]:opacity-100", options.theme.transitions && "transition-[rotate,opacity] duration-200 ease-out motion-reduce:transition-none"]
1606
1672
  }
1607
1673
  }
1608
1674
  }
@@ -1618,11 +1684,11 @@ const chatTool = (options) => ({
1618
1684
  trigger: ["group flex w-full items-center gap-1.5 text-muted text-sm disabled:cursor-default disabled:hover:text-muted hover:text-default min-w-0", options.theme.transitions && "transition-colors"],
1619
1685
  leading: "relative size-4 shrink-0",
1620
1686
  leadingIcon: "size-4 shrink-0",
1621
- chevronIcon: "size-4 shrink-0 group-data-[state=open]:rotate-180 transition-transform duration-200",
1687
+ chevronIcon: "size-4 shrink-0 group-data-[state=open]:rotate-180 transition-transform duration-200 ease-out motion-reduce:transition-none",
1622
1688
  label: "truncate",
1623
1689
  suffix: "text-dimmed ms-1",
1624
- trailingIcon: "size-4 shrink-0 group-data-[state=open]:rotate-180 transition-transform duration-200",
1625
- content: "data-[state=open]:animate-[collapsible-down_200ms_ease-out] data-[state=closed]:animate-[collapsible-up_200ms_ease-out] data-[state=closed]:overflow-hidden",
1690
+ trailingIcon: "size-4 shrink-0 group-data-[state=open]:rotate-180 transition-transform duration-200 ease-out motion-reduce:transition-none",
1691
+ content: "data-[state=open]:animate-[collapsible-down_200ms_var(--ease-out)] data-[state=closed]:animate-[collapsible-up_200ms_var(--ease-out)] data-[state=closed]:overflow-hidden",
1626
1692
  body: "text-sm text-dimmed whitespace-pre-wrap",
1627
1693
  actions: "flex items-center justify-end gap-1.5"
1628
1694
  },
@@ -1652,20 +1718,23 @@ const chatTool = (options) => ({
1652
1718
  },
1653
1719
  alone: {
1654
1720
  false: {
1655
- leadingIcon: ["absolute inset-0 group-hover:opacity-0 group-data-[state=open]:opacity-0", options.theme.transitions && "transition-opacity duration-200"],
1656
- chevronIcon: ["absolute inset-0 opacity-0 group-hover:opacity-100 group-data-[state=open]:opacity-100", options.theme.transitions && "transition-[rotate,opacity] duration-200"]
1721
+ leadingIcon: ["absolute inset-0 group-hover:opacity-0 group-data-[state=open]:opacity-0", options.theme.transitions && "transition-opacity duration-200 ease-out"],
1722
+ chevronIcon: ["absolute inset-0 opacity-0 group-hover:opacity-100 group-data-[state=open]:opacity-100", options.theme.transitions && "transition-[rotate,opacity] duration-200 ease-out motion-reduce:transition-none"]
1657
1723
  }
1658
1724
  }
1659
1725
  }
1660
1726
  });
1661
1727
 
1728
+ const hover = "hover:not-has-disabled:not-has-focus-visible:not-has-data-[state=checked]:";
1729
+ const focusControl = (token) => `outline-${token}/25 focus-visible:outline-solid focus-visible:outline-3 focus-visible:ring-${token}`;
1730
+ const focusCard = (token) => `outline-${token}/25 has-focus-visible:outline-3 not-has-disabled:has-focus-visible:border-${token} has-focus-visible:z-[1]`;
1662
1731
  const checkbox = (options) => ({
1663
1732
  slots: {
1664
1733
  root: "relative flex items-start",
1665
1734
  container: "flex items-center",
1666
- base: "rounded-sm ring ring-inset ring-accented overflow-hidden focus-visible:outline-3",
1735
+ base: "rounded-sm ring ring-inset ring-accented overflow-hidden focus-visible:outline-none",
1667
1736
  indicator: "flex items-center justify-center size-full text-inverted",
1668
- icon: "shrink-0 size-full",
1737
+ icon: "shrink-0",
1669
1738
  wrapper: "w-full",
1670
1739
  label: "block font-medium text-default",
1671
1740
  description: "text-muted"
@@ -1673,11 +1742,9 @@ const checkbox = (options) => ({
1673
1742
  variants: {
1674
1743
  color: {
1675
1744
  ...Object.fromEntries((options.theme.colors || []).map((color) => [color, {
1676
- base: `outline-${color}/25 focus-visible:ring-${color}`,
1677
1745
  indicator: `bg-${color}`
1678
1746
  }])),
1679
1747
  neutral: {
1680
- base: "outline-inverted/25 focus-visible:ring-inverted",
1681
1748
  indicator: "bg-inverted"
1682
1749
  }
1683
1750
  },
@@ -1686,7 +1753,7 @@ const checkbox = (options) => ({
1686
1753
  root: ""
1687
1754
  },
1688
1755
  card: {
1689
- root: "border border-muted rounded-lg"
1756
+ root: [`border border-default rounded-lg ${hover}bg-elevated/50`, options.theme.transitions && "transition-colors"]
1690
1757
  }
1691
1758
  },
1692
1759
  indicator: {
@@ -1700,32 +1767,37 @@ const checkbox = (options) => ({
1700
1767
  },
1701
1768
  hidden: {
1702
1769
  base: "sr-only",
1703
- wrapper: "text-center"
1770
+ wrapper: "flex flex-col items-center gap-1 text-center"
1704
1771
  }
1705
1772
  },
1706
1773
  size: {
1707
1774
  xs: {
1708
1775
  base: "size-3",
1776
+ icon: "size-2.5",
1709
1777
  container: "h-4",
1710
1778
  wrapper: "text-xs"
1711
1779
  },
1712
1780
  sm: {
1713
1781
  base: "size-3.5",
1782
+ icon: "size-3",
1714
1783
  container: "h-4",
1715
1784
  wrapper: "text-xs"
1716
1785
  },
1717
1786
  md: {
1718
1787
  base: "size-4",
1788
+ icon: "size-3.5",
1719
1789
  container: "h-5",
1720
1790
  wrapper: "text-sm"
1721
1791
  },
1722
1792
  lg: {
1723
1793
  base: "size-4.5",
1794
+ icon: "size-4",
1724
1795
  container: "h-5",
1725
1796
  wrapper: "text-sm"
1726
1797
  },
1727
1798
  xl: {
1728
1799
  base: "size-5",
1800
+ icon: "size-4.5",
1729
1801
  container: "h-6",
1730
1802
  wrapper: "text-base"
1731
1803
  }
@@ -1744,30 +1816,72 @@ const checkbox = (options) => ({
1744
1816
  }
1745
1817
  },
1746
1818
  highlight: {
1747
- true: ""
1819
+ true: "",
1820
+ false: ""
1748
1821
  },
1749
1822
  checked: {
1750
1823
  true: ""
1751
1824
  }
1752
1825
  },
1753
1826
  compoundVariants: [
1827
+ {
1828
+ indicator: "hidden",
1829
+ class: {
1830
+ container: "h-auto"
1831
+ }
1832
+ },
1833
+ {
1834
+ variant: "card",
1835
+ highlight: false,
1836
+ class: {
1837
+ root: `${hover}border-accented`
1838
+ }
1839
+ },
1840
+ { size: "xs", indicator: "hidden", class: { icon: "size-3" } },
1841
+ { size: "sm", indicator: "hidden", class: { icon: "size-3.5" } },
1842
+ { size: "md", indicator: "hidden", class: { icon: "size-4" } },
1843
+ { size: "lg", indicator: "hidden", class: { icon: "size-4.5" } },
1844
+ { size: "xl", indicator: "hidden", class: { icon: "size-5" } },
1754
1845
  { size: "xs", variant: "card", class: { root: "p-2.5" } },
1755
1846
  { size: "sm", variant: "card", class: { root: "p-3" } },
1756
1847
  { size: "md", variant: "card", class: { root: "p-3.5" } },
1757
1848
  { size: "lg", variant: "card", class: { root: "p-4" } },
1758
1849
  { size: "xl", variant: "card", class: { root: "p-4.5" } },
1850
+ ...[...(options.theme.colors || []).map((color) => [color, color]), ["neutral", "inverted"]].map(([color, token]) => ({
1851
+ color,
1852
+ variant: "list",
1853
+ indicator: ["start", "end"],
1854
+ class: {
1855
+ base: focusControl(token)
1856
+ }
1857
+ })),
1858
+ ...[...(options.theme.colors || []).map((color) => [color, color]), ["neutral", "inverted"]].map(([color, token]) => ({
1859
+ color,
1860
+ variant: "card",
1861
+ class: {
1862
+ root: focusCard(token)
1863
+ }
1864
+ })),
1865
+ ...[...(options.theme.colors || []).map((color) => [color, color]), ["neutral", "inverted"]].map(([color, token]) => ({
1866
+ color,
1867
+ variant: "list",
1868
+ indicator: "hidden",
1869
+ class: {
1870
+ root: focusCard(token)
1871
+ }
1872
+ })),
1759
1873
  ...(options.theme.colors || []).map((color) => ({
1760
1874
  color,
1761
1875
  variant: "card",
1762
1876
  class: {
1763
- root: `has-data-[state=checked]:border-${color}`
1877
+ root: `has-data-[state=checked]:border-${color}/50 has-data-[state=checked]:bg-${color}/10`
1764
1878
  }
1765
1879
  })),
1766
1880
  {
1767
1881
  color: "neutral",
1768
1882
  variant: "card",
1769
1883
  class: {
1770
- root: "has-data-[state=checked]:border-inverted"
1884
+ root: "has-data-[state=checked]:border-inverted/50 has-data-[state=checked]:bg-elevated"
1771
1885
  }
1772
1886
  },
1773
1887
  {
@@ -1777,6 +1891,22 @@ const checkbox = (options) => ({
1777
1891
  root: "cursor-not-allowed"
1778
1892
  }
1779
1893
  },
1894
+ ...(options.theme.colors || []).map((color) => ({
1895
+ color,
1896
+ indicator: "hidden",
1897
+ highlight: true,
1898
+ class: {
1899
+ root: `not-has-disabled:border-${color} not-has-disabled:has-data-[state=checked]:border-${color}`
1900
+ }
1901
+ })),
1902
+ {
1903
+ color: "neutral",
1904
+ indicator: "hidden",
1905
+ highlight: true,
1906
+ class: {
1907
+ root: "not-has-disabled:border-inverted not-has-disabled:has-data-[state=checked]:border-inverted"
1908
+ }
1909
+ },
1780
1910
  ...(options.theme.colors || []).map((color) => ({
1781
1911
  color,
1782
1912
  highlight: true,
@@ -1793,6 +1923,7 @@ const checkbox = (options) => ({
1793
1923
  }
1794
1924
  ],
1795
1925
  defaultVariants: {
1926
+ highlight: false,
1796
1927
  size: "md",
1797
1928
  color: "primary",
1798
1929
  variant: "list",
@@ -1821,10 +1952,14 @@ const checkboxGroup = (options) => ({
1821
1952
  neutral: {}
1822
1953
  },
1823
1954
  variant: {
1824
- list: {},
1825
- card: {},
1955
+ list: {
1956
+ fieldset: "flex-wrap"
1957
+ },
1958
+ card: {
1959
+ fieldset: "flex-wrap"
1960
+ },
1826
1961
  table: {
1827
- item: "border border-muted"
1962
+ item: [`border border-default ${hover}bg-elevated/50`, options.theme.transitions && "transition-colors"]
1828
1963
  }
1829
1964
  },
1830
1965
  size: {
@@ -1854,11 +1989,29 @@ const checkboxGroup = (options) => ({
1854
1989
  legend: "after:content-['*'] after:ms-0.5 after:text-error"
1855
1990
  }
1856
1991
  },
1992
+ highlight: {
1993
+ true: {},
1994
+ false: {}
1995
+ },
1857
1996
  disabled: {
1858
1997
  true: {}
1859
1998
  }
1860
1999
  },
1861
2000
  compoundVariants: [
2001
+ ...[...(options.theme.colors || []).map((color) => [color, color]), ["neutral", "inverted"]].map(([color, token]) => ({
2002
+ color,
2003
+ variant: "table",
2004
+ class: {
2005
+ item: focusCard(token)
2006
+ }
2007
+ })),
2008
+ {
2009
+ variant: "table",
2010
+ highlight: false,
2011
+ class: {
2012
+ item: `${hover}border-accented`
2013
+ }
2014
+ },
1862
2015
  { size: "xs", variant: "table", class: { item: "p-2.5" } },
1863
2016
  { size: "sm", variant: "table", class: { item: "p-3" } },
1864
2017
  { size: "md", variant: "table", class: { item: "p-3.5" } },
@@ -1903,6 +2056,7 @@ const checkboxGroup = (options) => ({
1903
2056
  }
1904
2057
  ],
1905
2058
  defaultVariants: {
2059
+ highlight: false,
1906
2060
  size: "md",
1907
2061
  variant: "list",
1908
2062
  color: "primary"
@@ -1970,7 +2124,7 @@ const chip = (options) => ({
1970
2124
  const collapsible$1 = {
1971
2125
  slots: {
1972
2126
  root: "",
1973
- content: "data-[state=open]:animate-[collapsible-down_200ms_ease-out] data-[state=closed]:animate-[collapsible-up_200ms_ease-out] data-[state=closed]:overflow-hidden"
2127
+ content: "data-[state=open]:animate-[collapsible-down_200ms_var(--ease-out)] data-[state=closed]:animate-[collapsible-up_200ms_var(--ease-out)] data-[state=closed]:overflow-hidden"
1974
2128
  }
1975
2129
  };
1976
2130
 
@@ -2008,7 +2162,6 @@ const colorPicker = {
2008
2162
  }
2009
2163
  }
2010
2164
  },
2011
- compoundVariants: [],
2012
2165
  defaultVariants: {
2013
2166
  size: "md"
2014
2167
  }
@@ -2157,7 +2310,7 @@ const container = {
2157
2310
 
2158
2311
  const contextMenu = (options) => ({
2159
2312
  slots: {
2160
- content: "min-w-32 max-h-(--reka-context-menu-content-available-height) bg-default shadow-lg rounded-md ring ring-default overflow-hidden data-[state=open]:animate-[scale-in_100ms_ease-out] data-[state=closed]:animate-[scale-out_100ms_ease-in] origin-(--reka-context-menu-content-transform-origin) flex flex-col",
2313
+ content: "min-w-32 max-h-(--reka-context-menu-content-available-height) bg-default shadow-lg rounded-md ring ring-default overflow-hidden data-[state=open]:animate-[scale-in_100ms_var(--ease-out)] data-[state=closed]:animate-[scale-out_100ms_var(--ease-out)] origin-(--reka-context-menu-content-transform-origin) flex flex-col",
2161
2314
  viewport: "relative divide-y divide-default scroll-py-1 overflow-y-auto flex-1",
2162
2315
  group: "p-1 isolate",
2163
2316
  label: "w-full flex items-center font-semibold text-highlighted",
@@ -2421,7 +2574,7 @@ const drawer = (options) => ({
2421
2574
  slots: {
2422
2575
  overlay: "fixed inset-0 bg-elevated/75",
2423
2576
  content: "fixed bg-default ring ring-default flex focus:outline-none",
2424
- handle: ["shrink-0 !bg-accented", options.theme.transitions && "transition-opacity"],
2577
+ handle: ["shrink-0 !bg-accented", options.theme.transitions && "transition-opacity ease-out"],
2425
2578
  container: "w-full flex flex-col gap-4 p-4 overflow-y-auto",
2426
2579
  header: "flex items-center gap-1.5 min-h-8",
2427
2580
  wrapper: "min-w-0 flex-1",
@@ -2550,7 +2703,7 @@ const drawer = (options) => ({
2550
2703
 
2551
2704
  const dropdownMenu = (options) => ({
2552
2705
  slots: {
2553
- content: "min-w-32 max-h-(--reka-dropdown-menu-content-available-height) bg-default shadow-lg rounded-md ring ring-default overflow-hidden data-[state=open]:animate-[scale-in_100ms_ease-out] data-[state=closed]:animate-[scale-out_100ms_ease-in] origin-(--reka-dropdown-menu-content-transform-origin) flex flex-col",
2706
+ content: "min-w-32 max-h-(--reka-dropdown-menu-content-available-height) bg-default shadow-lg rounded-md ring ring-default overflow-hidden data-[state=open]:animate-[scale-in_100ms_var(--ease-out)] data-[state=closed]:animate-[scale-out_100ms_var(--ease-out)] origin-(--reka-dropdown-menu-content-transform-origin) flex flex-col",
2554
2707
  input: "border-b border-default",
2555
2708
  empty: "text-center text-muted",
2556
2709
  viewport: "relative divide-y divide-default scroll-py-1 overflow-y-auto flex-1",
@@ -2730,14 +2883,14 @@ const editor = (options) => ({
2730
2883
 
2731
2884
  const editorDragHandle = {
2732
2885
  slots: {
2733
- root: "hidden sm:flex items-center justify-center transition-all duration-200 ease-out",
2886
+ root: "hidden sm:flex items-center justify-center transition-[top,left] duration-200 ease-out motion-reduce:transition-none",
2734
2887
  handle: "cursor-grab px-1"
2735
2888
  }
2736
2889
  };
2737
2890
 
2738
2891
  const editorSuggestionMenu = (options) => ({
2739
2892
  slots: {
2740
- content: "min-w-48 max-w-60 max-h-96 bg-default shadow-lg rounded-md ring ring-default overflow-hidden data-[state=open]:animate-[scale-in_100ms_ease-out] data-[state=closed]:animate-[scale-out_100ms_ease-in] origin-(--reka-dropdown-menu-content-transform-origin) flex flex-col",
2893
+ content: "min-w-48 max-w-60 max-h-96 bg-default shadow-lg rounded-md ring ring-default overflow-hidden data-[state=open]:animate-[scale-in_100ms_var(--ease-out)] data-[state=closed]:animate-[scale-out_100ms_var(--ease-out)] origin-(--reka-dropdown-menu-content-transform-origin) flex flex-col",
2741
2894
  viewport: "relative divide-y divide-default scroll-py-1 overflow-y-auto flex-1",
2742
2895
  group: "p-1 isolate",
2743
2896
  label: "w-full flex items-center font-semibold text-highlighted",
@@ -2914,7 +3067,7 @@ const error = {
2914
3067
  const fileUpload = (options) => ({
2915
3068
  slots: {
2916
3069
  root: "relative flex flex-col",
2917
- base: ["w-full flex-1 bg-default border border-default flex flex-col gap-2 items-stretch justify-center rounded-lg focus-visible:outline-3", options.theme.transitions && "transition-[background]"],
3070
+ base: ["w-full flex-1 bg-default border border-default flex flex-col gap-2 items-stretch justify-center rounded-lg focus-visible:outline-3", options.theme.transitions && "transition-[background] ease-out"],
2918
3071
  wrapper: "flex flex-col items-center justify-center text-center",
2919
3072
  icon: "shrink-0",
2920
3073
  avatar: "shrink-0",
@@ -3186,7 +3339,7 @@ const formField = {
3186
3339
 
3187
3340
  const header = {
3188
3341
  slots: {
3189
- root: "bg-default/75 backdrop-blur border-b border-default h-(--ui-header-height) sticky top-0 z-50",
3342
+ root: "bg-default/75 backdrop-blur-sm border-b border-default h-(--ui-header-height) sticky top-0 z-50",
3190
3343
  container: "flex items-center justify-between gap-3 h-full",
3191
3344
  left: "lg:flex-1 flex items-center gap-1.5",
3192
3345
  center: "hidden lg:flex",
@@ -3401,7 +3554,7 @@ const inputDate = (options) => {
3401
3554
  slots: {
3402
3555
  root: () => void 0,
3403
3556
  base: () => ["group relative inline-flex items-center rounded-md select-none", options.theme.transitions && "transition-colors"],
3404
- segment: ["rounded text-center outline-hidden data-placeholder:text-dimmed data-[segment=literal]:text-muted data-invalid:text-error data-disabled:cursor-not-allowed data-disabled:opacity-75", options.theme.transitions && "transition-colors"],
3557
+ segment: ["rounded-sm text-center outline-hidden data-placeholder:text-dimmed data-[segment=literal]:text-muted data-invalid:text-error data-disabled:cursor-not-allowed data-disabled:opacity-75", options.theme.transitions && "transition-colors"],
3405
3558
  separatorIcon: "shrink-0 size-4 text-muted"
3406
3559
  },
3407
3560
  variants: {
@@ -3474,7 +3627,7 @@ const inputMenu = (options) => {
3474
3627
  trailing: "group absolute inset-y-0 end-0 flex items-center disabled:cursor-not-allowed disabled:opacity-75 focus:outline-none",
3475
3628
  trailingClear: "p-0",
3476
3629
  arrow: "fill-bg stroke-default",
3477
- content: "max-h-[min(15rem,var(--reka-combobox-content-available-height,15rem))] w-(--reka-combobox-trigger-width) bg-default shadow-lg rounded-md ring ring-default overflow-hidden data-[state=open]:animate-[scale-in_100ms_ease-out] data-[state=closed]:animate-[scale-out_100ms_ease-in] origin-(--reka-combobox-content-transform-origin) pointer-events-auto flex flex-col",
3630
+ content: "max-h-[min(15rem,var(--reka-combobox-content-available-height,15rem))] w-(--reka-combobox-trigger-width) bg-default shadow-lg rounded-md ring ring-default overflow-hidden data-[state=open]:animate-[scale-in_100ms_var(--ease-out)] data-[state=closed]:animate-[scale-out_100ms_var(--ease-out)] origin-(--reka-combobox-content-transform-origin) pointer-events-auto flex flex-col",
3478
3631
  viewport: "relative scroll-py-1 overflow-y-auto flex-1",
3479
3632
  group: "p-1 isolate",
3480
3633
  empty: "text-center text-muted",
@@ -3801,7 +3954,7 @@ const inputTime = (options) => {
3801
3954
  slots: {
3802
3955
  root: () => void 0,
3803
3956
  base: () => ["group relative inline-flex items-center rounded-md select-none", options.theme.transitions && "transition-colors"],
3804
- segment: ["rounded text-center outline-hidden data-placeholder:text-dimmed data-[segment=literal]:text-muted data-invalid:text-error data-disabled:cursor-not-allowed data-disabled:opacity-75", options.theme.transitions && "transition-colors"],
3957
+ segment: ["rounded-sm text-center outline-hidden data-placeholder:text-dimmed data-[segment=literal]:text-muted data-invalid:text-error data-disabled:cursor-not-allowed data-disabled:opacity-75", options.theme.transitions && "transition-colors"],
3805
3958
  separatorIcon: "shrink-0 size-4 text-muted"
3806
3959
  },
3807
3960
  variants: {
@@ -4119,13 +4272,13 @@ const marquee = {
4119
4272
  orientation: "horizontal",
4120
4273
  overlay: true,
4121
4274
  class: {
4122
- root: "before:inset-y-0 before:left-0 before:h-full before:w-1/3 before:bg-gradient-to-r after:inset-y-0 after:right-0 after:h-full after:w-1/3 after:bg-gradient-to-l backface-hidden"
4275
+ root: "before:inset-y-0 before:start-0 before:h-full before:w-1/3 before:bg-gradient-to-r rtl:before:bg-gradient-to-l after:inset-y-0 after:end-0 after:h-full after:w-1/3 after:bg-gradient-to-l rtl:after:bg-gradient-to-r backface-hidden"
4123
4276
  }
4124
4277
  }, {
4125
4278
  orientation: "vertical",
4126
4279
  class: {
4127
4280
  root: "flex-col",
4128
- content: "flex-col motion-safe:animate-[marquee-vertical_var(--duration)_linear_infinite] motion-safe:rtl:animate-[marquee-vertical-rtl_var(--duration)_linear_infinite] h-[fit-content] backface-hidden"
4281
+ content: "flex-col motion-safe:animate-[marquee-vertical_var(--duration)_linear_infinite] h-[fit-content] backface-hidden"
4129
4282
  }
4130
4283
  }, {
4131
4284
  orientation: "vertical",
@@ -4151,8 +4304,8 @@ const modal = {
4151
4304
  variants: {
4152
4305
  transition: {
4153
4306
  true: {
4154
- overlay: "data-[state=open]:animate-[fade-in_200ms_ease-out] data-[state=closed]:animate-[fade-out_200ms_ease-in]",
4155
- content: "data-[state=open]:animate-[scale-in_200ms_ease-out] data-[state=closed]:animate-[scale-out_200ms_ease-in]"
4307
+ overlay: "data-[state=open]:animate-[fade-in_200ms_var(--ease-out)] data-[state=closed]:animate-[fade-out_200ms_var(--ease-out)]",
4308
+ content: "data-[state=open]:animate-[scale-in_200ms_var(--ease-out)] data-[state=closed]:animate-[scale-out_200ms_var(--ease-out)]"
4156
4309
  }
4157
4310
  },
4158
4311
  fullscreen: {
@@ -4208,7 +4361,7 @@ const navigationMenu = (options) => ({
4208
4361
  linkTrailing: "group ms-auto inline-flex gap-1.5 items-center",
4209
4362
  linkTrailingBadge: "shrink-0",
4210
4363
  linkTrailingBadgeSize: "sm",
4211
- linkTrailingIcon: "size-5 transform shrink-0 group-data-[state=open]:rotate-180 transition-transform duration-200",
4364
+ linkTrailingIcon: "size-5 transform shrink-0 group-data-[state=open]:rotate-180 transition-transform duration-200 ease-out motion-reduce:transition-none",
4212
4365
  linkLabel: "truncate",
4213
4366
  linkLabelExternalIcon: "inline-block size-3 align-top text-dimmed",
4214
4367
  childList: "isolate",
@@ -4222,9 +4375,9 @@ const navigationMenu = (options) => ({
4222
4375
  childLinkDescription: "text-muted",
4223
4376
  separator: "px-2 h-px bg-border",
4224
4377
  viewportWrapper: "absolute top-full start-0 flex w-full",
4225
- viewport: "relative overflow-hidden bg-default shadow-lg rounded-md ring ring-default h-(--reka-navigation-menu-viewport-height) w-full transition-[width,height,left,right] duration-200 origin-[top_center] data-[state=open]:animate-[scale-in_100ms_ease-out] data-[state=closed]:animate-[scale-out_100ms_ease-in] z-1",
4378
+ viewport: "relative overflow-hidden bg-default shadow-lg rounded-md ring ring-default h-(--reka-navigation-menu-viewport-height) w-full transition-[width,height,left,right] duration-200 ease-out motion-reduce:transition-none origin-[top_center] data-[state=open]:animate-[scale-in_100ms_var(--ease-out)] data-[state=closed]:animate-[scale-out_100ms_var(--ease-out)] z-1",
4226
4379
  content: "",
4227
- indicator: "absolute left-0 data-[state=visible]:animate-[fade-in_100ms_ease-out] data-[state=hidden]:animate-[fade-out_100ms_ease-in] data-[state=hidden]:opacity-0 bottom-0 z-2 w-(--reka-navigation-menu-indicator-size) translate-x-(--reka-navigation-menu-indicator-position) flex h-2.5 items-end justify-center overflow-hidden transition-[translate,width] duration-200",
4380
+ indicator: "absolute left-0 data-[state=visible]:animate-[fade-in_100ms_var(--ease-out)] data-[state=hidden]:animate-[fade-out_100ms_var(--ease-out)] data-[state=hidden]:opacity-0 bottom-0 z-2 w-(--reka-navigation-menu-indicator-size) translate-x-(--reka-navigation-menu-indicator-position) flex h-2.5 items-end justify-center overflow-hidden transition-[translate,width] duration-200 ease-out motion-reduce:transition-none",
4228
4381
  arrow: "relative top-[50%] size-2.5 rotate-45 border border-default bg-default z-1 rounded-xs"
4229
4382
  },
4230
4383
  variants: {
@@ -4267,7 +4420,7 @@ const navigationMenu = (options) => ({
4267
4420
  contentOrientation: {
4268
4421
  horizontal: {
4269
4422
  viewportWrapper: "justify-center",
4270
- content: "data-[motion=from-start]:animate-[enter-from-left_200ms_ease] data-[motion=from-end]:animate-[enter-from-right_200ms_ease] data-[motion=to-start]:animate-[exit-to-left_200ms_ease] data-[motion=to-end]:animate-[exit-to-right_200ms_ease]"
4423
+ content: "data-[motion=from-start]:animate-[enter-from-left_200ms_var(--ease-out)] data-[motion=from-end]:animate-[enter-from-right_200ms_var(--ease-out)] data-[motion=to-start]:animate-[exit-to-left_200ms_var(--ease-out)] data-[motion=to-end]:animate-[exit-to-right_200ms_var(--ease-out)]"
4271
4424
  },
4272
4425
  vertical: {
4273
4426
  viewport: "sm:w-(--reka-navigation-menu-viewport-width) left-(--reka-navigation-menu-viewport-left) rtl:left-auto rtl:right-[calc(100%-var(--reka-navigation-menu-viewport-left)-var(--reka-navigation-menu-viewport-width))]"
@@ -4319,7 +4472,7 @@ const navigationMenu = (options) => ({
4319
4472
  class: {
4320
4473
  childList: "ms-5 border-s border-default",
4321
4474
  childItem: "ps-1.5 -ms-px",
4322
- content: "data-[state=open]:animate-[collapsible-down_200ms_ease-out] data-[state=closed]:animate-[collapsible-up_200ms_ease-out] data-[state=closed]:overflow-hidden"
4475
+ content: "data-[state=open]:animate-[collapsible-down_200ms_var(--ease-out)] data-[state=closed]:animate-[collapsible-up_200ms_var(--ease-out)] data-[state=closed]:overflow-hidden"
4323
4476
  }
4324
4477
  }, {
4325
4478
  orientation: "vertical",
@@ -5091,7 +5244,7 @@ const pinInput = (options) => ({
5091
5244
 
5092
5245
  const popover = {
5093
5246
  slots: {
5094
- content: "bg-default shadow-lg rounded-md ring ring-default data-[state=open]:animate-[scale-in_100ms_ease-out] data-[state=closed]:animate-[scale-out_100ms_ease-in] origin-(--reka-popover-content-transform-origin) focus:outline-none pointer-events-auto",
5247
+ content: "bg-default shadow-lg rounded-md ring ring-default data-[state=open]:animate-[scale-in_100ms_var(--ease-out)] data-[state=closed]:animate-[scale-out_100ms_var(--ease-out)] origin-(--reka-popover-content-transform-origin) focus:outline-none pointer-events-auto",
5095
5248
  arrow: "fill-bg stroke-default"
5096
5249
  }
5097
5250
  };
@@ -5261,10 +5414,10 @@ const progress = (options) => ({
5261
5414
  slots: {
5262
5415
  root: "gap-2",
5263
5416
  base: "relative overflow-hidden rounded-full bg-accented",
5264
- indicator: "rounded-full size-full transition-transform duration-200 ease-out motion-reduce:data-[state=indeterminate]:animate-pulse",
5265
- status: "flex text-dimmed transition-[width] duration-200",
5417
+ indicator: "rounded-full size-full transition-transform duration-200 ease-out motion-reduce:transition-none motion-reduce:data-[state=indeterminate]:animate-pulse",
5418
+ status: "flex text-dimmed duration-200 ease-out motion-reduce:transition-none",
5266
5419
  steps: "grid items-end",
5267
- step: "truncate text-end row-start-1 col-start-1 transition-opacity"
5420
+ step: "truncate text-end row-start-1 col-start-1 transition-opacity ease-out"
5268
5421
  },
5269
5422
  variants: {
5270
5423
  animation: {
@@ -5280,7 +5433,7 @@ const progress = (options) => ({
5280
5433
  }])),
5281
5434
  neutral: {
5282
5435
  indicator: "bg-inverted",
5283
- steps: "text-inverted"
5436
+ steps: "text-highlighted"
5284
5437
  }
5285
5438
  },
5286
5439
  size: {
@@ -5331,12 +5484,12 @@ const progress = (options) => ({
5331
5484
  horizontal: {
5332
5485
  root: "w-full flex flex-col",
5333
5486
  base: "w-full",
5334
- status: "flex-row items-center justify-end min-w-fit"
5487
+ status: "flex-row items-center justify-end w-(--percent) min-w-fit transition-[width]"
5335
5488
  },
5336
5489
  vertical: {
5337
5490
  root: "h-full flex flex-row-reverse",
5338
5491
  base: "h-full",
5339
- status: "flex-col justify-end min-h-fit"
5492
+ status: "flex-col justify-end h-(--percent) min-h-fit transition-[height]"
5340
5493
  }
5341
5494
  },
5342
5495
  inverted: {
@@ -5419,49 +5572,49 @@ const progress = (options) => ({
5419
5572
  orientation: "horizontal",
5420
5573
  animation: "carousel",
5421
5574
  class: {
5422
- indicator: "motion-safe:data-[state=indeterminate]:animate-[carousel_2s_ease-in-out_infinite] motion-safe:data-[state=indeterminate]:rtl:animate-[carousel-rtl_2s_ease-in-out_infinite]"
5575
+ indicator: "motion-safe:data-[state=indeterminate]:animate-[carousel_2s_linear_infinite] motion-safe:data-[state=indeterminate]:rtl:animate-[carousel-rtl_2s_linear_infinite]"
5423
5576
  }
5424
5577
  }, {
5425
5578
  orientation: "vertical",
5426
5579
  animation: "carousel",
5427
5580
  class: {
5428
- indicator: "motion-safe:data-[state=indeterminate]:animate-[carousel-vertical_2s_ease-in-out_infinite]"
5581
+ indicator: "motion-safe:data-[state=indeterminate]:animate-[carousel-vertical_2s_linear_infinite]"
5429
5582
  }
5430
5583
  }, {
5431
5584
  orientation: "horizontal",
5432
5585
  animation: "carousel-inverse",
5433
5586
  class: {
5434
- indicator: "motion-safe:data-[state=indeterminate]:animate-[carousel-inverse_2s_ease-in-out_infinite] motion-safe:data-[state=indeterminate]:rtl:animate-[carousel-inverse-rtl_2s_ease-in-out_infinite]"
5587
+ indicator: "motion-safe:data-[state=indeterminate]:animate-[carousel-inverse_2s_linear_infinite] motion-safe:data-[state=indeterminate]:rtl:animate-[carousel-inverse-rtl_2s_linear_infinite]"
5435
5588
  }
5436
5589
  }, {
5437
5590
  orientation: "vertical",
5438
5591
  animation: "carousel-inverse",
5439
5592
  class: {
5440
- indicator: "motion-safe:data-[state=indeterminate]:animate-[carousel-inverse-vertical_2s_ease-in-out_infinite]"
5593
+ indicator: "motion-safe:data-[state=indeterminate]:animate-[carousel-inverse-vertical_2s_linear_infinite]"
5441
5594
  }
5442
5595
  }, {
5443
5596
  orientation: "horizontal",
5444
5597
  animation: "swing",
5445
5598
  class: {
5446
- indicator: "motion-safe:data-[state=indeterminate]:animate-[swing_2s_ease-in-out_infinite]"
5599
+ indicator: "motion-safe:data-[state=indeterminate]:animate-[swing_2s_var(--ease-in-out)_infinite]"
5447
5600
  }
5448
5601
  }, {
5449
5602
  orientation: "vertical",
5450
5603
  animation: "swing",
5451
5604
  class: {
5452
- indicator: "motion-safe:data-[state=indeterminate]:animate-[swing-vertical_2s_ease-in-out_infinite]"
5605
+ indicator: "motion-safe:data-[state=indeterminate]:animate-[swing-vertical_2s_var(--ease-in-out)_infinite]"
5453
5606
  }
5454
5607
  }, {
5455
5608
  orientation: "horizontal",
5456
5609
  animation: "elastic",
5457
5610
  class: {
5458
- indicator: "motion-safe:data-[state=indeterminate]:animate-[elastic_2s_ease-in-out_infinite]"
5611
+ indicator: "relative motion-safe:data-[state=indeterminate]:animate-[elastic_2s_var(--ease-in-out)_infinite]"
5459
5612
  }
5460
5613
  }, {
5461
5614
  orientation: "vertical",
5462
5615
  animation: "elastic",
5463
5616
  class: {
5464
- indicator: "motion-safe:data-[state=indeterminate]:animate-[elastic-vertical_2s_ease-in-out_infinite]"
5617
+ indicator: "relative motion-safe:data-[state=indeterminate]:animate-[elastic-vertical_2s_var(--ease-in-out)_infinite]"
5465
5618
  }
5466
5619
  }],
5467
5620
  defaultVariants: {
@@ -5471,6 +5624,155 @@ const progress = (options) => ({
5471
5624
  }
5472
5625
  });
5473
5626
 
5627
+ const progressGroup = (options) => ({
5628
+ slots: {
5629
+ root: "gap-2",
5630
+ base: "flex overflow-hidden rounded-full bg-accented",
5631
+ segment: "duration-200 ease-out motion-reduce:transition-none",
5632
+ indicator: "size-full",
5633
+ status: "flex text-dimmed duration-200 ease-out motion-reduce:transition-none",
5634
+ list: "flex flex-col gap-1",
5635
+ item: "flex items-center gap-1.5 min-w-0",
5636
+ itemLeadingIcon: "shrink-0",
5637
+ itemLeadingDot: "shrink-0 rounded-full",
5638
+ itemLabel: "truncate",
5639
+ itemTrailing: "ms-auto shrink-0 text-dimmed"
5640
+ },
5641
+ variants: {
5642
+ color: {
5643
+ ...Object.fromEntries((options.theme.colors || []).map((color) => [color, {
5644
+ indicator: `bg-${color}`,
5645
+ itemLeadingIcon: `text-${color}`,
5646
+ itemLeadingDot: `bg-${color}`
5647
+ }])),
5648
+ neutral: {
5649
+ indicator: "bg-inverted",
5650
+ itemLeadingIcon: "text-highlighted",
5651
+ itemLeadingDot: "bg-inverted"
5652
+ }
5653
+ },
5654
+ size: {
5655
+ "2xs": {
5656
+ status: "text-xs",
5657
+ list: "text-xs",
5658
+ itemLeadingIcon: "size-3",
5659
+ itemLeadingDot: "size-1.5"
5660
+ },
5661
+ "xs": {
5662
+ status: "text-xs",
5663
+ list: "text-xs",
5664
+ itemLeadingIcon: "size-3",
5665
+ itemLeadingDot: "size-1.5"
5666
+ },
5667
+ "sm": {
5668
+ status: "text-sm",
5669
+ list: "text-sm",
5670
+ itemLeadingIcon: "size-4",
5671
+ itemLeadingDot: "size-2"
5672
+ },
5673
+ "md": {
5674
+ status: "text-sm",
5675
+ list: "text-sm",
5676
+ itemLeadingIcon: "size-4",
5677
+ itemLeadingDot: "size-2"
5678
+ },
5679
+ "lg": {
5680
+ status: "text-sm",
5681
+ list: "text-sm",
5682
+ itemLeadingIcon: "size-4",
5683
+ itemLeadingDot: "size-2"
5684
+ },
5685
+ "xl": {
5686
+ status: "text-base",
5687
+ list: "text-base",
5688
+ itemLeadingIcon: "size-5",
5689
+ itemLeadingDot: "size-2.5"
5690
+ },
5691
+ "2xl": {
5692
+ status: "text-base",
5693
+ list: "text-base",
5694
+ itemLeadingIcon: "size-5",
5695
+ itemLeadingDot: "size-2.5"
5696
+ }
5697
+ },
5698
+ orientation: {
5699
+ horizontal: {
5700
+ root: "w-full flex flex-col",
5701
+ base: "w-full flex-row",
5702
+ segment: "h-full transition-[width]",
5703
+ status: "flex-row items-center justify-end w-(--percent) min-w-fit transition-[width]"
5704
+ },
5705
+ vertical: {
5706
+ root: "h-full flex flex-row",
5707
+ base: "h-full flex-col",
5708
+ segment: "w-full transition-[height]",
5709
+ status: "flex-col justify-end h-(--percent) min-h-fit transition-[height]"
5710
+ }
5711
+ }
5712
+ },
5713
+ compoundVariants: [{
5714
+ orientation: "horizontal",
5715
+ size: "2xs",
5716
+ class: "h-px"
5717
+ }, {
5718
+ orientation: "horizontal",
5719
+ size: "xs",
5720
+ class: "h-0.5"
5721
+ }, {
5722
+ orientation: "horizontal",
5723
+ size: "sm",
5724
+ class: "h-1"
5725
+ }, {
5726
+ orientation: "horizontal",
5727
+ size: "md",
5728
+ class: "h-2"
5729
+ }, {
5730
+ orientation: "horizontal",
5731
+ size: "lg",
5732
+ class: "h-3"
5733
+ }, {
5734
+ orientation: "horizontal",
5735
+ size: "xl",
5736
+ class: "h-4"
5737
+ }, {
5738
+ orientation: "horizontal",
5739
+ size: "2xl",
5740
+ class: "h-5"
5741
+ }, {
5742
+ orientation: "vertical",
5743
+ size: "2xs",
5744
+ class: "w-px"
5745
+ }, {
5746
+ orientation: "vertical",
5747
+ size: "xs",
5748
+ class: "w-0.5"
5749
+ }, {
5750
+ orientation: "vertical",
5751
+ size: "sm",
5752
+ class: "w-1"
5753
+ }, {
5754
+ orientation: "vertical",
5755
+ size: "md",
5756
+ class: "w-2"
5757
+ }, {
5758
+ orientation: "vertical",
5759
+ size: "lg",
5760
+ class: "w-3"
5761
+ }, {
5762
+ orientation: "vertical",
5763
+ size: "xl",
5764
+ class: "w-4"
5765
+ }, {
5766
+ orientation: "vertical",
5767
+ size: "2xl",
5768
+ class: "w-5"
5769
+ }],
5770
+ defaultVariants: {
5771
+ color: "primary",
5772
+ size: "md"
5773
+ }
5774
+ });
5775
+
5474
5776
  const radioGroup = (options) => ({
5475
5777
  slots: {
5476
5778
  root: "relative",
@@ -5478,32 +5780,33 @@ const radioGroup = (options) => ({
5478
5780
  legend: "mb-1 block font-medium text-default",
5479
5781
  item: "flex items-start",
5480
5782
  container: "flex items-center",
5481
- base: "rounded-full ring ring-inset ring-accented overflow-hidden focus-visible:outline-3",
5783
+ base: "rounded-full ring ring-inset ring-accented overflow-hidden focus-visible:outline-none",
5482
5784
  indicator: "flex items-center justify-center size-full after:bg-default after:rounded-full",
5483
5785
  wrapper: "w-full",
5484
5786
  label: "block font-medium text-default",
5787
+ icon: "shrink-0",
5485
5788
  description: "text-muted"
5486
5789
  },
5487
5790
  variants: {
5488
5791
  color: {
5489
5792
  ...Object.fromEntries((options.theme.colors || []).map((color) => [color, {
5490
- base: `outline-${color}/25 focus-visible:ring-${color}`,
5491
5793
  indicator: `bg-${color}`
5492
5794
  }])),
5493
5795
  neutral: {
5494
- base: "outline-inverted/25 focus-visible:ring-inverted",
5495
5796
  indicator: "bg-inverted"
5496
5797
  }
5497
5798
  },
5498
5799
  variant: {
5499
5800
  list: {
5801
+ fieldset: "flex-wrap",
5500
5802
  item: ""
5501
5803
  },
5502
5804
  card: {
5503
- item: "border border-muted rounded-lg"
5805
+ fieldset: "flex-wrap",
5806
+ item: [`border border-default rounded-lg ${hover}bg-elevated/50`, options.theme.transitions && "transition-colors"]
5504
5807
  },
5505
5808
  table: {
5506
- item: "border border-muted"
5809
+ item: [`border border-default ${hover}bg-elevated/50`, options.theme.transitions && "transition-colors"]
5507
5810
  }
5508
5811
  },
5509
5812
  orientation: {
@@ -5525,7 +5828,7 @@ const radioGroup = (options) => ({
5525
5828
  },
5526
5829
  hidden: {
5527
5830
  base: "sr-only",
5528
- wrapper: "text-center"
5831
+ wrapper: "flex flex-col items-center gap-1 text-center"
5529
5832
  }
5530
5833
  },
5531
5834
  size: {
@@ -5571,7 +5874,8 @@ const radioGroup = (options) => ({
5571
5874
  }
5572
5875
  },
5573
5876
  highlight: {
5574
- true: ""
5877
+ true: "",
5878
+ false: ""
5575
5879
  },
5576
5880
  disabled: {
5577
5881
  true: {
@@ -5588,6 +5892,24 @@ const radioGroup = (options) => ({
5588
5892
  }
5589
5893
  },
5590
5894
  compoundVariants: [
5895
+ {
5896
+ indicator: "hidden",
5897
+ class: {
5898
+ container: "h-auto"
5899
+ }
5900
+ },
5901
+ {
5902
+ variant: ["card", "table"],
5903
+ highlight: false,
5904
+ class: {
5905
+ item: `${hover}border-accented`
5906
+ }
5907
+ },
5908
+ { size: "xs", indicator: "hidden", class: { icon: "size-3" } },
5909
+ { size: "sm", indicator: "hidden", class: { icon: "size-3.5" } },
5910
+ { size: "md", indicator: "hidden", class: { icon: "size-4" } },
5911
+ { size: "lg", indicator: "hidden", class: { icon: "size-4.5" } },
5912
+ { size: "xl", indicator: "hidden", class: { icon: "size-5" } },
5591
5913
  { size: "xs", variant: ["card", "table"], class: { item: "p-2.5" } },
5592
5914
  { size: "sm", variant: ["card", "table"], class: { item: "p-3" } },
5593
5915
  { size: "md", variant: ["card", "table"], class: { item: "p-3.5" } },
@@ -5609,18 +5931,41 @@ const radioGroup = (options) => ({
5609
5931
  fieldset: "gap-0 -space-y-px"
5610
5932
  }
5611
5933
  },
5934
+ ...[...(options.theme.colors || []).map((color) => [color, color]), ["neutral", "inverted"]].map(([color, token]) => ({
5935
+ color,
5936
+ variant: "list",
5937
+ indicator: ["start", "end"],
5938
+ class: {
5939
+ base: focusControl(token)
5940
+ }
5941
+ })),
5942
+ ...[...(options.theme.colors || []).map((color) => [color, color]), ["neutral", "inverted"]].map(([color, token]) => ({
5943
+ color,
5944
+ variant: ["card", "table"],
5945
+ class: {
5946
+ item: focusCard(token)
5947
+ }
5948
+ })),
5949
+ ...[...(options.theme.colors || []).map((color) => [color, color]), ["neutral", "inverted"]].map(([color, token]) => ({
5950
+ color,
5951
+ variant: "list",
5952
+ indicator: "hidden",
5953
+ class: {
5954
+ item: focusCard(token)
5955
+ }
5956
+ })),
5612
5957
  ...(options.theme.colors || []).map((color) => ({
5613
5958
  color,
5614
5959
  variant: "card",
5615
5960
  class: {
5616
- item: `has-data-[state=checked]:border-${color}`
5961
+ item: `has-data-[state=checked]:border-${color}/50 has-data-[state=checked]:bg-${color}/10`
5617
5962
  }
5618
5963
  })),
5619
5964
  {
5620
5965
  color: "neutral",
5621
5966
  variant: "card",
5622
5967
  class: {
5623
- item: "has-data-[state=checked]:border-inverted"
5968
+ item: "has-data-[state=checked]:border-inverted/50 has-data-[state=checked]:bg-elevated"
5624
5969
  }
5625
5970
  },
5626
5971
  ...(options.theme.colors || []).map((color) => ({
@@ -5644,6 +5989,22 @@ const radioGroup = (options) => ({
5644
5989
  item: "cursor-not-allowed"
5645
5990
  }
5646
5991
  },
5992
+ ...(options.theme.colors || []).map((color) => ({
5993
+ color,
5994
+ indicator: "hidden",
5995
+ highlight: true,
5996
+ class: {
5997
+ item: `not-has-disabled:border-${color} not-has-disabled:has-data-[state=checked]:border-${color}`
5998
+ }
5999
+ })),
6000
+ {
6001
+ color: "neutral",
6002
+ indicator: "hidden",
6003
+ highlight: true,
6004
+ class: {
6005
+ item: "not-has-disabled:border-inverted not-has-disabled:has-data-[state=checked]:border-inverted"
6006
+ }
6007
+ },
5647
6008
  ...(options.theme.colors || []).map((color) => ({
5648
6009
  color,
5649
6010
  highlight: true,
@@ -5660,6 +6021,7 @@ const radioGroup = (options) => ({
5660
6021
  }
5661
6022
  ],
5662
6023
  defaultVariants: {
6024
+ highlight: false,
5663
6025
  size: "md",
5664
6026
  color: "primary",
5665
6027
  variant: "list",
@@ -5729,7 +6091,6 @@ const select = (options) => {
5729
6091
  }),
5730
6092
  size: {
5731
6093
  xs: {
5732
- base: "px-2 py-1 text-xs gap-1",
5733
6094
  label: "p-1 text-[10px]/3 gap-1",
5734
6095
  item: "p-1 text-xs gap-1",
5735
6096
  itemLeadingIcon: "size-4",
@@ -5740,7 +6101,6 @@ const select = (options) => {
5740
6101
  empty: "p-2 text-xs"
5741
6102
  },
5742
6103
  sm: {
5743
- base: "px-2.5 py-1.5 text-xs gap-1.5",
5744
6104
  label: "p-1.5 text-[10px]/3 gap-1.5",
5745
6105
  item: "p-1.5 text-xs gap-1.5",
5746
6106
  itemLeadingIcon: "size-4",
@@ -5751,7 +6111,6 @@ const select = (options) => {
5751
6111
  empty: "p-2.5 text-xs"
5752
6112
  },
5753
6113
  md: {
5754
- base: "px-2.5 py-1.5 text-sm gap-1.5",
5755
6114
  label: "p-1.5 text-xs gap-1.5",
5756
6115
  item: "p-1.5 text-sm gap-1.5",
5757
6116
  itemLeadingIcon: "size-5",
@@ -5762,7 +6121,6 @@ const select = (options) => {
5762
6121
  empty: "p-2.5 text-sm"
5763
6122
  },
5764
6123
  lg: {
5765
- base: "px-3 py-2 text-sm gap-2",
5766
6124
  label: "p-2 text-xs gap-2",
5767
6125
  item: "p-2 text-sm gap-2",
5768
6126
  itemLeadingIcon: "size-5",
@@ -5773,7 +6131,6 @@ const select = (options) => {
5773
6131
  empty: "p-3 text-sm"
5774
6132
  },
5775
6133
  xl: {
5776
- base: "px-3 py-2 text-base gap-2",
5777
6134
  label: "p-2 text-sm gap-2",
5778
6135
  item: "p-2 text-base gap-2",
5779
6136
  itemLeadingIcon: "size-6",
@@ -5786,7 +6143,7 @@ const select = (options) => {
5786
6143
  },
5787
6144
  position: {
5788
6145
  "popper": {
5789
- content: "data-[state=open]:animate-[scale-in_100ms_ease-out] data-[state=closed]:animate-[scale-out_100ms_ease-in]"
6146
+ content: "data-[state=open]:animate-[scale-in_100ms_var(--ease-out)] data-[state=closed]:animate-[scale-out_100ms_var(--ease-out)]"
5790
6147
  },
5791
6148
  "item-aligned": {
5792
6149
  content: ""
@@ -5966,9 +6323,8 @@ const sidebar = (options) => ({
5966
6323
  variants: {
5967
6324
  transition: {
5968
6325
  true: {
5969
- gap: "transition-[width] duration-200 ease-out",
5970
- container: "transition-[inset-inline-start,inset-inline-end,width] duration-200 ease-out",
5971
- rail: "transition-all ease-out"
6326
+ gap: "transition-[width] duration-200 ease-out motion-reduce:transition-none",
6327
+ container: "transition-[inset-inline-start,inset-inline-end,width] duration-200 ease-out motion-reduce:transition-none"
5972
6328
  }
5973
6329
  },
5974
6330
  side: {
@@ -6119,7 +6475,7 @@ const slideover = {
6119
6475
  },
6120
6476
  transition: {
6121
6477
  true: {
6122
- overlay: "data-[state=open]:animate-[fade-in_200ms_ease-out] data-[state=closed]:animate-[fade-out_200ms_ease-in]"
6478
+ overlay: "data-[state=open]:animate-[fade-in_200ms_var(--ease-out)] data-[state=closed]:animate-[fade-out_200ms_var(--ease-out)]"
6123
6479
  }
6124
6480
  }
6125
6481
  },
@@ -6175,25 +6531,25 @@ const slideover = {
6175
6531
  transition: true,
6176
6532
  side: "top",
6177
6533
  class: {
6178
- content: "data-[state=open]:animate-[slide-in-from-top_200ms_ease-in-out] data-[state=closed]:animate-[slide-out-to-top_200ms_ease-in-out]"
6534
+ content: "data-[state=open]:animate-[slide-in-from-top_200ms_var(--ease-out)] data-[state=closed]:animate-[slide-out-to-top_200ms_var(--ease-out)]"
6179
6535
  }
6180
6536
  }, {
6181
6537
  transition: true,
6182
6538
  side: "right",
6183
6539
  class: {
6184
- content: "data-[state=open]:animate-[slide-in-from-right_200ms_ease-in-out] data-[state=closed]:animate-[slide-out-to-right_200ms_ease-in-out]"
6540
+ content: "data-[state=open]:animate-[slide-in-from-right_200ms_var(--ease-out)] data-[state=closed]:animate-[slide-out-to-right_200ms_var(--ease-out)]"
6185
6541
  }
6186
6542
  }, {
6187
6543
  transition: true,
6188
6544
  side: "bottom",
6189
6545
  class: {
6190
- content: "data-[state=open]:animate-[slide-in-from-bottom_200ms_ease-in-out] data-[state=closed]:animate-[slide-out-to-bottom_200ms_ease-in-out]"
6546
+ content: "data-[state=open]:animate-[slide-in-from-bottom_200ms_var(--ease-out)] data-[state=closed]:animate-[slide-out-to-bottom_200ms_var(--ease-out)]"
6191
6547
  }
6192
6548
  }, {
6193
6549
  transition: true,
6194
6550
  side: "left",
6195
6551
  class: {
6196
- content: "data-[state=open]:animate-[slide-in-from-left_200ms_ease-in-out] data-[state=closed]:animate-[slide-out-to-left_200ms_ease-in-out]"
6552
+ content: "data-[state=open]:animate-[slide-in-from-left_200ms_var(--ease-out)] data-[state=closed]:animate-[slide-out-to-left_200ms_var(--ease-out)]"
6197
6553
  }
6198
6554
  }]
6199
6555
  };
@@ -6316,6 +6672,24 @@ const slider = (options) => ({
6316
6672
  }
6317
6673
  });
6318
6674
 
6675
+ const splitter = {
6676
+ slots: {
6677
+ root: "",
6678
+ panel: "flex",
6679
+ handle: "group relative shrink-0 focus-visible:outline-2 focus-visible:outline-primary data-[panel-resize-handle-enabled=false]:cursor-default"
6680
+ },
6681
+ variants: {
6682
+ orientation: {
6683
+ horizontal: {
6684
+ handle: "w-2 cursor-col-resize"
6685
+ },
6686
+ vertical: {
6687
+ handle: "h-2 cursor-row-resize"
6688
+ }
6689
+ }
6690
+ }
6691
+ };
6692
+
6319
6693
  const inputRating = (options) => ({
6320
6694
  slots: {
6321
6695
  root: "",
@@ -6520,10 +6894,10 @@ const stepper = (options) => ({
6520
6894
  const _switch = (options) => ({
6521
6895
  slots: {
6522
6896
  root: "relative flex items-start",
6523
- base: ["inline-flex items-center shrink-0 rounded-full border-2 border-transparent focus-visible:outline-3 data-[state=unchecked]:bg-accented", options.theme.transitions && "transition-[background] duration-200"],
6897
+ base: ["inline-flex items-center shrink-0 rounded-full border-2 border-transparent focus-visible:outline-3 data-[state=unchecked]:bg-accented", options.theme.transitions && "transition-[background] duration-200 ease-out"],
6524
6898
  container: "flex items-center",
6525
- thumb: "group pointer-events-none rounded-full bg-default shadow-lg ring-0 transition-transform duration-200 data-[state=unchecked]:translate-x-0 data-[state=unchecked]:rtl:-translate-x-0 flex items-center justify-center",
6526
- icon: ["absolute shrink-0 group-data-[state=unchecked]:text-dimmed opacity-0 size-10/12", options.theme.transitions && "transition-[color,opacity] duration-200"],
6899
+ thumb: "group pointer-events-none rounded-full bg-default shadow-lg ring-0 transition-transform duration-200 ease-out motion-reduce:transition-none data-[state=unchecked]:translate-x-0 data-[state=unchecked]:rtl:-translate-x-0 flex items-center justify-center",
6900
+ icon: ["absolute shrink-0 group-data-[state=unchecked]:text-dimmed opacity-0 size-10/12", options.theme.transitions && "transition-[color,opacity] duration-200 ease-out"],
6527
6901
  wrapper: "ms-2",
6528
6902
  label: "block font-medium text-default",
6529
6903
  description: "text-muted"
@@ -6649,14 +7023,14 @@ const table$1 = (options) => ({
6649
7023
  },
6650
7024
  sticky: {
6651
7025
  true: {
6652
- thead: "sticky top-0 inset-x-0 bg-default/75 backdrop-blur z-1",
6653
- tfoot: "sticky bottom-0 inset-x-0 bg-default/75 backdrop-blur z-1"
7026
+ thead: "sticky top-0 inset-x-0 bg-default/75 backdrop-blur-sm z-1",
7027
+ tfoot: "sticky bottom-0 inset-x-0 bg-default/75 backdrop-blur-sm z-1"
6654
7028
  },
6655
7029
  header: {
6656
- thead: "sticky top-0 inset-x-0 bg-default/75 backdrop-blur z-1"
7030
+ thead: "sticky top-0 inset-x-0 bg-default/75 backdrop-blur-sm z-1"
6657
7031
  },
6658
7032
  footer: {
6659
- tfoot: "sticky bottom-0 inset-x-0 bg-default/75 backdrop-blur z-1"
7033
+ tfoot: "sticky bottom-0 inset-x-0 bg-default/75 backdrop-blur-sm z-1"
6660
7034
  }
6661
7035
  },
6662
7036
  loading: {
@@ -6696,25 +7070,25 @@ const table$1 = (options) => ({
6696
7070
  loading: true,
6697
7071
  loadingAnimation: "carousel",
6698
7072
  class: {
6699
- thead: "motion-safe:after:animate-[carousel_2s_ease-in-out_infinite] motion-safe:rtl:after:animate-[carousel-rtl_2s_ease-in-out_infinite]"
7073
+ thead: "motion-safe:after:animate-[carousel_2s_linear_infinite] motion-safe:rtl:after:animate-[carousel-rtl_2s_linear_infinite]"
6700
7074
  }
6701
7075
  }, {
6702
7076
  loading: true,
6703
7077
  loadingAnimation: "carousel-inverse",
6704
7078
  class: {
6705
- thead: "motion-safe:after:animate-[carousel-inverse_2s_ease-in-out_infinite] motion-safe:rtl:after:animate-[carousel-inverse-rtl_2s_ease-in-out_infinite]"
7079
+ thead: "motion-safe:after:animate-[carousel-inverse_2s_linear_infinite] motion-safe:rtl:after:animate-[carousel-inverse-rtl_2s_linear_infinite]"
6706
7080
  }
6707
7081
  }, {
6708
7082
  loading: true,
6709
7083
  loadingAnimation: "swing",
6710
7084
  class: {
6711
- thead: "motion-safe:after:animate-[swing_2s_ease-in-out_infinite]"
7085
+ thead: "motion-safe:after:animate-[swing_2s_var(--ease-in-out)_infinite]"
6712
7086
  }
6713
7087
  }, {
6714
7088
  loading: true,
6715
7089
  loadingAnimation: "elastic",
6716
7090
  class: {
6717
- thead: "motion-safe:after:animate-[elastic_2s_ease-in-out_infinite]"
7091
+ thead: "motion-safe:after:animate-[elastic_2s_var(--ease-in-out)_infinite]"
6718
7092
  }
6719
7093
  }],
6720
7094
  defaultVariants: {
@@ -6728,7 +7102,7 @@ const tabs$1 = (options) => ({
6728
7102
  slots: {
6729
7103
  root: "flex items-center gap-2",
6730
7104
  list: "relative flex p-1 group",
6731
- indicator: "absolute transition-[translate,width] duration-200",
7105
+ indicator: "absolute transition-[translate,width] duration-200 ease-out motion-reduce:transition-none",
6732
7106
  trigger: ["group relative inline-flex items-center min-w-0 data-[state=inactive]:text-muted hover:data-[state=inactive]:not-disabled:text-default font-medium rounded-md disabled:cursor-not-allowed disabled:opacity-75", options.theme.transitions && "transition-colors"],
6733
7107
  leadingIcon: "shrink-0",
6734
7108
  leadingAvatar: "shrink-0",
@@ -7138,7 +7512,7 @@ const toast = (options) => ({
7138
7512
  const toaster = {
7139
7513
  slots: {
7140
7514
  viewport: "fixed flex flex-col w-[calc(100%-2rem)] sm:w-96 z-[100] data-[expanded=true]:h-(--height) focus:outline-none",
7141
- base: "pointer-events-auto absolute inset-x-0 z-(--index) transform-(--transform) data-[expanded=false]:data-[front=false]:h-(--front-height) data-[expanded=false]:data-[front=false]:*:opacity-0 data-[front=false]:*:transition-opacity data-[front=false]:*:duration-100 data-[state=closed]:animate-[toast-closed_200ms_ease-in-out] data-[state=closed]:data-[expanded=false]:data-[front=false]:animate-[toast-collapsed-closed_200ms_ease-in-out] data-[state=open]:data-[pulsing=odd]:animate-[toast-pulse-a_300ms_ease-out] data-[state=open]:data-[pulsing=even]:animate-[toast-pulse-b_300ms_ease-out] data-[swipe=move]:transition-none transition-[transform,translate,height] duration-200 ease-out"
7515
+ base: "pointer-events-auto absolute inset-x-0 z-(--index) transform-(--transform) data-[expanded=false]:data-[front=false]:h-(--front-height) data-[expanded=false]:data-[front=false]:*:opacity-0 data-[front=false]:*:transition-opacity data-[front=false]:*:duration-100 data-[state=closed]:animate-[toast-closed_200ms_var(--ease-out)] data-[state=closed]:data-[expanded=false]:data-[front=false]:animate-[toast-collapsed-closed_200ms_var(--ease-out)] motion-safe:data-[state=open]:data-[pulsing=odd]:animate-[toast-pulse-a_200ms_var(--ease-out)] motion-safe:data-[state=open]:data-[pulsing=even]:animate-[toast-pulse-b_200ms_var(--ease-out)] data-[swipe=move]:transition-none transition-[transform,translate,height] duration-200 ease-out motion-reduce:transition-none"
7142
7516
  },
7143
7517
  variants: {
7144
7518
  position: {
@@ -7162,23 +7536,23 @@ const toaster = {
7162
7536
  }
7163
7537
  },
7164
7538
  swipeDirection: {
7165
- up: "data-[swipe=end]:animate-[toast-slide-up_200ms_ease-out]",
7166
- right: "data-[swipe=end]:animate-[toast-slide-right_200ms_ease-out]",
7167
- down: "data-[swipe=end]:animate-[toast-slide-down_200ms_ease-out]",
7168
- left: "data-[swipe=end]:animate-[toast-slide-left_200ms_ease-out]"
7539
+ up: "data-[swipe=end]:animate-[toast-slide-up_200ms_var(--ease-out)]",
7540
+ right: "data-[swipe=end]:animate-[toast-slide-right_200ms_var(--ease-out)]",
7541
+ down: "data-[swipe=end]:animate-[toast-slide-down_200ms_var(--ease-out)]",
7542
+ left: "data-[swipe=end]:animate-[toast-slide-left_200ms_var(--ease-out)]"
7169
7543
  }
7170
7544
  },
7171
7545
  compoundVariants: [{
7172
7546
  position: ["top-left", "top-center", "top-right"],
7173
7547
  class: {
7174
7548
  viewport: "top-4",
7175
- base: "top-0 data-[state=open]:animate-[toast-slide-in-from-top_200ms_ease-in-out]"
7549
+ base: "top-0 data-[state=open]:animate-[toast-slide-in-from-top_200ms_var(--ease-out)]"
7176
7550
  }
7177
7551
  }, {
7178
7552
  position: ["bottom-left", "bottom-center", "bottom-right"],
7179
7553
  class: {
7180
7554
  viewport: "bottom-4",
7181
- base: "bottom-0 data-[state=open]:animate-[toast-slide-in-from-bottom_200ms_ease-in-out]"
7555
+ base: "bottom-0 data-[state=open]:animate-[toast-slide-in-from-bottom_200ms_var(--ease-out)]"
7182
7556
  }
7183
7557
  }, {
7184
7558
  swipeDirection: ["left", "right"],
@@ -7194,7 +7568,7 @@ const toaster = {
7194
7568
 
7195
7569
  const tooltip = {
7196
7570
  slots: {
7197
- content: "flex items-center gap-1 bg-default text-highlighted shadow-sm rounded-sm ring ring-default h-6 px-2.5 py-1 text-xs select-none data-[state=delayed-open]:animate-[scale-in_100ms_ease-out] data-[state=closed]:animate-[scale-out_100ms_ease-in] origin-(--reka-tooltip-content-transform-origin) pointer-events-auto",
7571
+ content: "flex items-center gap-1 bg-default text-highlighted shadow-sm rounded-sm ring ring-default h-6 px-2.5 py-1 text-xs select-none data-[state=delayed-open]:animate-[scale-in_100ms_var(--ease-out)] data-[state=closed]:animate-[scale-out_100ms_var(--ease-out)] origin-(--reka-tooltip-content-transform-origin) pointer-events-auto",
7198
7572
  arrow: "fill-bg stroke-default",
7199
7573
  text: "truncate",
7200
7574
  kbds: `hidden lg:inline-flex items-center shrink-0 gap-0.5 not-first-of-type:before:content-['\xB7'] not-first-of-type:before:me-0.5`,
@@ -7212,7 +7586,7 @@ const tree = (options) => ({
7212
7586
  linkLeadingIcon: "shrink-0 relative",
7213
7587
  linkLabel: "truncate",
7214
7588
  linkTrailing: "ms-auto inline-flex gap-1.5 items-center",
7215
- linkTrailingIcon: "shrink-0 transform transition-transform duration-200 group-data-expanded:rotate-180"
7589
+ linkTrailingIcon: "shrink-0 transform transition-transform duration-200 ease-out motion-reduce:transition-none group-data-expanded:rotate-180"
7216
7590
  },
7217
7591
  variants: {
7218
7592
  virtualize: {
@@ -7318,7 +7692,7 @@ const user = (options) => ({
7318
7692
  root: ["rounded-md outline-primary/25 has-focus-visible:outline-3", options.theme.transitions && "transition"],
7319
7693
  name: ["text-default peer-hover:text-highlighted peer-focus-visible:text-highlighted", options.theme.transitions && "transition-colors"],
7320
7694
  description: ["peer-hover:text-toned peer-focus-visible:text-toned", options.theme.transitions && "transition-colors"],
7321
- avatar: "transform transition-transform duration-200 group-hover/user:scale-115 group-has-focus-visible/user:scale-115"
7695
+ avatar: "transform transition-transform ease-out motion-reduce:transition-none group-hover/user:scale-115 group-has-focus-visible/user:scale-115"
7322
7696
  },
7323
7697
  false: {
7324
7698
  name: "text-highlighted",
@@ -7478,6 +7852,7 @@ const theme = {
7478
7852
  pricingPlans: pricingPlans,
7479
7853
  pricingTable: pricingTable,
7480
7854
  progress: progress,
7855
+ progressGroup: progressGroup,
7481
7856
  radioGroup: radioGroup,
7482
7857
  scrollArea: scrollArea,
7483
7858
  select: select,
@@ -7487,6 +7862,7 @@ const theme = {
7487
7862
  skeleton: skeleton,
7488
7863
  slideover: slideover,
7489
7864
  slider: slider,
7865
+ splitter: splitter,
7490
7866
  stepper: stepper,
7491
7867
  switch: _switch,
7492
7868
  table: table$1,
@@ -7653,7 +8029,7 @@ const codeGroup = (options) => ({
7653
8029
  slots: {
7654
8030
  root: "relative group *:not-first:my-0! *:not-first:static! my-5",
7655
8031
  list: "relative flex items-center gap-1 border border-muted bg-default border-b-0 rounded-t-md overflow-x-auto p-2",
7656
- indicator: "absolute left-0 inset-y-2 w-(--reka-tabs-indicator-size) translate-x-(--reka-tabs-indicator-position) transition-[translate,width] duration-200 bg-elevated rounded-md shadow-xs",
8032
+ indicator: "absolute left-0 inset-y-2 w-(--reka-tabs-indicator-size) translate-x-(--reka-tabs-indicator-position) transition-[translate,width] duration-200 ease-out motion-reduce:transition-none bg-elevated rounded-md shadow-xs",
7657
8033
  trigger: ["relative inline-flex items-center gap-1.5 text-default data-[state=active]:text-highlighted hover:bg-elevated/50 px-2 py-1.5 text-sm rounded-md disabled:cursor-not-allowed disabled:opacity-75 outline-primary/25 focus-visible:outline-3", options.theme.transitions && "transition-colors"],
7658
8034
  triggerIcon: "size-4 shrink-0",
7659
8035
  triggerLabel: "truncate"
@@ -7661,71 +8037,71 @@ const codeGroup = (options) => ({
7661
8037
  });
7662
8038
 
7663
8039
  const codeIcon = {
7664
- "package.json": "i-vscode-icons-file-type-node",
7665
- "tsconfig.json": "i-vscode-icons-file-type-tsconfig",
7666
- ".npmrc": "i-vscode-icons-file-type-npm",
7667
8040
  ".editorconfig": "i-vscode-icons-file-type-editorconfig",
8041
+ ".env": "i-vscode-icons-file-type-dotenv",
8042
+ ".env.example": "i-vscode-icons-file-type-dotenv",
8043
+ ".eslintignore": "i-vscode-icons-file-type-eslint",
7668
8044
  ".eslintrc": "i-vscode-icons-file-type-eslint",
7669
8045
  ".eslintrc.cjs": "i-vscode-icons-file-type-eslint",
7670
- ".eslintignore": "i-vscode-icons-file-type-eslint",
7671
- "eslint.config.js": "i-vscode-icons-file-type-eslint",
7672
- "eslint.config.mjs": "i-vscode-icons-file-type-eslint",
7673
- "eslint.config.cjs": "i-vscode-icons-file-type-eslint",
7674
8046
  ".gitignore": "i-vscode-icons-file-type-git",
7675
- "yarn.lock": "i-vscode-icons-file-type-yarn",
7676
- ".env": "i-vscode-icons-file-type-dotenv",
7677
- ".env.example": "i-vscode-icons-file-type-dotenv",
7678
- ".vscode/settings.json": "i-vscode-icons-file-type-vscode",
7679
- "nuxt": "i-vscode-icons-file-type-nuxt",
7680
- ".nuxtrc": "i-vscode-icons-file-type-nuxt",
8047
+ ".npmrc": "i-vscode-icons-file-type-npm",
7681
8048
  ".nuxtignore": "i-vscode-icons-file-type-nuxt",
7682
- "nuxt.config.js": "i-vscode-icons-file-type-nuxt",
7683
- "nuxt.config.ts": "i-vscode-icons-file-type-nuxt",
7684
- "nuxt.schema.ts": "i-vscode-icons-file-type-nuxt",
7685
- "tailwind.config.js": "i-vscode-icons-file-type-tailwind",
7686
- "tailwind.config.ts": "i-vscode-icons-file-type-tailwind",
7687
- "vue": "i-vscode-icons-file-type-vue",
7688
- "ts": "i-vscode-icons-file-type-typescript",
7689
- "tsx": "i-vscode-icons-file-type-typescript",
7690
- "mjs": "i-vscode-icons-file-type-js",
8049
+ ".nuxtrc": "i-vscode-icons-file-type-nuxt",
8050
+ ".vscode/settings.json": "i-vscode-icons-file-type-vscode",
8051
+ "asm": "i-vscode-icons-file-type-assembly",
8052
+ "bicep": "i-vscode-icons-file-type-bicep",
8053
+ "bicepparam": "i-vscode-icons-file-type-bicep",
8054
+ "bun": "i-vscode-icons-file-type-bun",
7691
8055
  "cjs": "i-vscode-icons-file-type-js",
7692
- "js": "i-vscode-icons-file-type-js",
7693
- "jsx": "i-vscode-icons-file-type-js",
7694
- "md": "i-vscode-icons-file-type-markdown",
7695
- "py": "i-vscode-icons-file-type-python",
7696
8056
  "cs": "i-vscode-icons-file-type-csharp",
7697
- "asm": "i-vscode-icons-file-type-assembly",
8057
+ "dart": "i-vscode-icons-file-type-dartlang",
8058
+ "deno": "i-vscode-icons-file-type-deno",
8059
+ "erl": "i-vscode-icons-file-type-erlang",
8060
+ "eslint.config.cjs": "i-vscode-icons-file-type-eslint",
8061
+ "eslint.config.js": "i-vscode-icons-file-type-eslint",
8062
+ "eslint.config.mjs": "i-vscode-icons-file-type-eslint",
8063
+ "exs": "i-vscode-icons-file-type-elixir",
7698
8064
  "f": "i-vscode-icons-file-type-fortran",
7699
- "hs": "i-vscode-icons-file-type-haskell",
7700
8065
  "fs": "i-vscode-icons-file-type-fsharp",
7701
- "kt": "i-vscode-icons-file-type-kotlin",
7702
- "rs": "i-vscode-icons-file-type-rust",
7703
- "rb": "i-vscode-icons-file-type-ruby",
7704
- "lsp": "i-vscode-icons-file-type-lisp",
7705
- "ps1": "i-vscode-icons-file-type-powershell",
7706
- "psd1": "i-vscode-icons-file-type-powershell",
7707
- "psm1": "i-vscode-icons-file-type-powershell",
7708
- "go": "i-vscode-icons-file-type-go",
7709
8066
  "gleam": "i-vscode-icons-file-type-gleam",
7710
- "bicep": "i-vscode-icons-file-type-bicep",
7711
- "bicepparam": "i-vscode-icons-file-type-bicep",
7712
- "exs": "i-vscode-icons-file-type-elixir",
7713
- "erl": "i-vscode-icons-file-type-erlang",
7714
- "sbt": "i-vscode-icons-file-type-scala",
8067
+ "go": "i-vscode-icons-file-type-go",
7715
8068
  "h": "i-vscode-icons-file-type-cppheader",
8069
+ "hs": "i-vscode-icons-file-type-haskell",
8070
+ "ico": "i-vscode-icons-file-type-favicon",
7716
8071
  "ino": "i-vscode-icons-file-type-arduino",
7717
- "pl": "i-vscode-icons-file-type-perl",
7718
8072
  "jl": "i-vscode-icons-file-type-julia",
7719
- "dart": "i-vscode-icons-file-type-dartlang",
7720
- "ico": "i-vscode-icons-file-type-favicon",
8073
+ "js": "i-vscode-icons-file-type-js",
8074
+ "jsx": "i-vscode-icons-file-type-js",
8075
+ "kt": "i-vscode-icons-file-type-kotlin",
8076
+ "lsp": "i-vscode-icons-file-type-lisp",
8077
+ "md": "i-vscode-icons-file-type-markdown",
8078
+ "mjs": "i-vscode-icons-file-type-js",
7721
8079
  "npm": "i-vscode-icons-file-type-npm",
7722
- "pnpm": "i-vscode-icons-file-type-pnpm",
7723
8080
  "npx": "i-vscode-icons-file-type-npm",
8081
+ "nuxt": "i-vscode-icons-file-type-nuxt",
8082
+ "nuxt.config.js": "i-vscode-icons-file-type-nuxt",
8083
+ "nuxt.config.ts": "i-vscode-icons-file-type-nuxt",
8084
+ "nuxt.schema.ts": "i-vscode-icons-file-type-nuxt",
8085
+ "package.json": "i-vscode-icons-file-type-node",
8086
+ "pl": "i-vscode-icons-file-type-perl",
8087
+ "pnpm": "i-vscode-icons-file-type-pnpm",
8088
+ "ps1": "i-vscode-icons-file-type-powershell",
8089
+ "psd1": "i-vscode-icons-file-type-powershell",
8090
+ "psm1": "i-vscode-icons-file-type-powershell",
8091
+ "py": "i-vscode-icons-file-type-python",
8092
+ "rb": "i-vscode-icons-file-type-ruby",
8093
+ "rs": "i-vscode-icons-file-type-rust",
8094
+ "sbt": "i-vscode-icons-file-type-scala",
8095
+ "tailwind.config.js": "i-vscode-icons-file-type-tailwind",
8096
+ "tailwind.config.ts": "i-vscode-icons-file-type-tailwind",
8097
+ "terminal": "i-lucide-terminal",
8098
+ "ts": "i-vscode-icons-file-type-typescript",
8099
+ "tsconfig.json": "i-vscode-icons-file-type-tsconfig",
8100
+ "tsx": "i-vscode-icons-file-type-typescript",
8101
+ "vue": "i-vscode-icons-file-type-vue",
7724
8102
  "yarn": "i-vscode-icons-file-type-yarn",
7725
- "bun": "i-vscode-icons-file-type-bun",
7726
- "deno": "i-vscode-icons-file-type-deno",
7727
- "yml": "i-vscode-icons-file-type-yaml",
7728
- "terminal": "i-lucide-terminal"
8103
+ "yarn.lock": "i-vscode-icons-file-type-yarn",
8104
+ "yml": "i-vscode-icons-file-type-yaml"
7729
8105
  };
7730
8106
 
7731
8107
  const codePreview = {
@@ -7754,7 +8130,7 @@ const codeTree = (options) => ({
7754
8130
  linkLeadingIcon: "size-4 shrink-0",
7755
8131
  linkLabel: "truncate",
7756
8132
  linkTrailing: "ms-auto inline-flex gap-1.5 items-center",
7757
- linkTrailingIcon: "size-5 transform transition-transform duration-200 shrink-0 group-data-expanded:rotate-180",
8133
+ linkTrailingIcon: "size-5 transform transition-transform duration-200 ease-out motion-reduce:transition-none shrink-0 group-data-expanded:rotate-180",
7758
8134
  content: "overflow-hidden lg:col-span-2 flex flex-col [&>div]:my-0 [&>div]:flex-1 [&>div]:flex [&>div]:flex-col [&>div>div]:border-0 [&>div>pre]:border-b-0 [&>div>pre]:border-s-0 [&>div>pre]:border-e-0 [&>div>pre]:rounded-s-none [&>div>pre]:flex-1 [&>div]:overflow-y-auto"
7759
8135
  },
7760
8136
  variants: {
@@ -7773,7 +8149,7 @@ const collapsible = (options) => ({
7773
8149
  slots: {
7774
8150
  root: "my-5",
7775
8151
  trigger: ["group relative rounded-xs inline-flex items-center gap-1.5 text-muted hover:text-default text-sm outline-primary/25 focus-visible:outline-3", options.theme.transitions && "transition-colors"],
7776
- triggerIcon: "size-4 shrink-0 group-data-[state=open]:rotate-180 transition-transform duration-200",
8152
+ triggerIcon: "size-4 shrink-0 group-data-[state=open]:rotate-180 transition-transform duration-200 ease-out motion-reduce:transition-none",
7777
8153
  triggerLabel: "truncate",
7778
8154
  content: "*:first:mt-2.5 *:last:mb-0 *:my-1.5"
7779
8155
  }
@@ -8036,7 +8412,7 @@ const themeProse = {
8036
8412
  const contentNavigation = (options) => ({
8037
8413
  slots: {
8038
8414
  root: "",
8039
- content: "data-[state=open]:animate-[accordion-down_200ms_ease-out] data-[state=closed]:animate-[accordion-up_200ms_ease-out] data-[state=closed]:overflow-hidden focus:outline-none",
8415
+ content: "data-[state=open]:animate-[accordion-down_200ms_var(--ease-out)] data-[state=closed]:animate-[accordion-up_200ms_var(--ease-out)] data-[state=closed]:overflow-hidden focus:outline-none",
8040
8416
  list: "isolate -mx-2.5 -mt-1.5",
8041
8417
  item: "",
8042
8418
  listWithChildren: "ms-5 border-s border-default",
@@ -8047,7 +8423,7 @@ const contentNavigation = (options) => ({
8047
8423
  linkTrailing: "ms-auto inline-flex gap-1.5 items-center",
8048
8424
  linkTrailingBadge: "shrink-0",
8049
8425
  linkTrailingBadgeSize: "sm",
8050
- linkTrailingIcon: "size-5 transform transition-transform duration-200 shrink-0 group-data-[state=open]:rotate-180",
8426
+ linkTrailingIcon: "size-5 transform transition-transform duration-200 ease-out motion-reduce:transition-none shrink-0 group-data-[state=open]:rotate-180",
8051
8427
  linkTitle: "truncate",
8052
8428
  linkTitleExternalIcon: "size-3 align-top text-dimmed"
8053
8429
  },
@@ -8230,7 +8606,7 @@ const contentSurround = (options) => ({
8230
8606
  root: "grid grid-cols-1 sm:grid-cols-2 gap-8",
8231
8607
  link: ["group block px-6 py-8 rounded-lg border border-default hover:bg-elevated/50 outline-primary/25 focus-visible:outline-3 focus-visible:border-primary", options.theme.transitions && "transition-colors"],
8232
8608
  linkLeading: ["inline-flex items-center rounded-full p-1.5 bg-elevated group-hover:bg-primary/10 ring ring-accented mb-4 group-hover:ring-primary/50", options.theme.transitions && "transition"],
8233
- linkLeadingIcon: ["size-5 shrink-0 text-highlighted group-hover:text-primary", options.theme.transitions && "transition-[color,translate]"],
8609
+ linkLeadingIcon: ["size-5 shrink-0 text-highlighted group-hover:text-primary", options.theme.transitions && "transition-[color,translate] ease-out motion-reduce:transition-none"],
8234
8610
  linkTitle: "font-medium text-[15px] text-highlighted mb-1 truncate",
8235
8611
  linkDescription: "text-sm text-muted line-clamp-2"
8236
8612
  },
@@ -8249,15 +8625,15 @@ const contentSurround = (options) => ({
8249
8625
 
8250
8626
  const contentToc = (options) => ({
8251
8627
  slots: {
8252
- root: "sticky top-(--ui-header-height) z-10 bg-default/75 lg:bg-[initial] backdrop-blur -mx-4 px-4 sm:px-6 sm:-mx-6 lg:ms-0 flex flex-col overflow-y-auto lg:overflow-hidden max-h-[calc(100vh-var(--ui-header-height))]",
8628
+ root: "sticky top-(--ui-header-height) z-10 bg-default/75 lg:bg-[initial] backdrop-blur-sm -mx-4 px-4 sm:px-6 sm:-mx-6 lg:ms-0 flex flex-col overflow-y-auto max-h-[calc(100vh-var(--ui-header-height))]",
8253
8629
  container: "pt-4 sm:pt-6 pb-2.5 sm:pb-4.5 lg:py-8 border-b border-dashed border-default lg:border-0 flex flex-col lg:min-h-0",
8254
8630
  top: "lg:shrink-0",
8255
8631
  bottom: "hidden lg:flex lg:flex-col lg:shrink-0 gap-6",
8256
8632
  trigger: "group text-sm font-semibold flex-1 flex items-center gap-1.5 py-1.5 -mt-1.5 rounded-sm outline-primary/25 focus-visible:outline-3 lg:shrink-0",
8257
8633
  title: "truncate",
8258
8634
  trailing: "ms-auto inline-flex gap-1.5 items-center",
8259
- trailingIcon: "size-5 transform transition-transform duration-200 shrink-0 group-data-[state=open]:rotate-180 lg:hidden",
8260
- content: "relative data-[state=open]:animate-[collapsible-down_200ms_ease-out] data-[state=closed]:animate-[collapsible-up_200ms_ease-out] data-[state=closed]:overflow-hidden focus:outline-none lg:min-h-0 lg:overflow-y-auto lg:scrollbar-none",
8635
+ trailingIcon: "size-5 transform transition-transform duration-200 ease-out motion-reduce:transition-none shrink-0 group-data-[state=open]:rotate-180 lg:hidden",
8636
+ content: "relative data-[state=open]:animate-[collapsible-down_200ms_var(--ease-out)] data-[state=closed]:animate-[collapsible-up_200ms_var(--ease-out)] data-[state=closed]:overflow-hidden focus:outline-none lg:min-h-[min(var(--list-height,8rem),8rem)] lg:overflow-y-auto lg:scrollbar-none",
8261
8637
  list: "min-w-0",
8262
8638
  listWithChildren: "ms-3",
8263
8639
  item: "min-w-0",
@@ -8317,7 +8693,7 @@ const contentToc = (options) => ({
8317
8693
  class: {
8318
8694
  list: "ms-2.5 ps-4 border-s border-default",
8319
8695
  item: "-ms-px",
8320
- indicator: "absolute ms-2.5 transition-[translate,height] duration-200 h-(--indicator-size) translate-y-(--indicator-position) w-px rounded-full",
8696
+ indicator: "absolute ms-2.5 transition-[translate,height] duration-200 ease-out motion-reduce:transition-none h-(--indicator-size) translate-y-(--indicator-position) w-px rounded-full",
8321
8697
  indicatorLine: "hidden",
8322
8698
  indicatorActive: "w-full h-full"
8323
8699
  }
@@ -8330,7 +8706,7 @@ const contentToc = (options) => ({
8330
8706
  itemWithChildren: "ps-px",
8331
8707
  indicator: "absolute ms-2.5 start-0 top-0 rtl:-scale-x-100",
8332
8708
  indicatorLine: "absolute inset-0 bg-(--ui-border)",
8333
- indicatorActive: "absolute w-full h-(--indicator-size) translate-y-(--indicator-position) transition-[translate,height] duration-200 ease-out"
8709
+ indicatorActive: "absolute w-full h-(--indicator-size) translate-y-(--indicator-position) transition-[translate,height] duration-200 ease-out motion-reduce:transition-none"
8334
8710
  }
8335
8711
  }],
8336
8712
  defaultVariants: {
@@ -8349,7 +8725,7 @@ const themeContent = {
8349
8725
  contentToc: contentToc
8350
8726
  };
8351
8727
 
8352
- function getTemplates(options, uiConfig, nuxt, resolve) {
8728
+ function getTemplates(options, uiConfig, nuxt, resolve, vue) {
8353
8729
  const templates = [];
8354
8730
  let hasProse = false;
8355
8731
  let hasContent = false;
@@ -8362,8 +8738,9 @@ function getTemplates(options, uiConfig, nuxt, resolve) {
8362
8738
  getContents: async () => {
8363
8739
  const template = theme2[component];
8364
8740
  let result = typeof template === "function" ? template(options) : template;
8741
+ const unused = path !== "prose" && !!vue?.detectedComponents?.size && !Array.from(vue.detectedComponents).some((detected) => camelCase(detected) === component);
8365
8742
  result = applyDefaultVariants(result, options.theme?.defaultVariants);
8366
- result = applyUnstyled(result, options.theme?.unstyled);
8743
+ result = applyUnstyled(result, options.theme?.unstyled || unused);
8367
8744
  result = applyPrefixToObject(result, options.theme?.prefix);
8368
8745
  const variants = Object.entries(result.variants || {}).filter(([_, values]) => {
8369
8746
  const keys = Object.keys(values);
@@ -8407,29 +8784,29 @@ function getTemplates(options, uiConfig, nuxt, resolve) {
8407
8784
  }
8408
8785
  writeThemeTemplate(theme);
8409
8786
  async function generateSources() {
8410
- if (!nuxt) {
8411
- return '@source "./ui";';
8412
- }
8413
8787
  const sources = [];
8414
- const layers = getLayerDirectories(nuxt).map((layer) => layer.app);
8415
- for (const layer of layers) {
8416
- sources.push(`@source "${layer}**/*";`);
8417
- }
8418
- const inlineConfigs = [
8419
- nuxt.options.app?.rootAttrs?.class,
8420
- nuxt.options.app?.head?.htmlAttrs?.class,
8421
- nuxt.options.app?.head?.bodyAttrs?.class
8422
- ];
8423
- for (const value of inlineConfigs) {
8424
- if (value && typeof value === "string") {
8425
- sources.push(`@source inline(${JSON.stringify(value)});`);
8788
+ const layers = nuxt ? getLayerDirectories(nuxt).map((layer) => layer.app) : [];
8789
+ if (nuxt) {
8790
+ for (const layer of layers) {
8791
+ sources.push(`@source "${layer}**/*";`);
8792
+ }
8793
+ const inlineConfigs = [
8794
+ nuxt.options.app?.rootAttrs?.class,
8795
+ nuxt.options.app?.head?.htmlAttrs?.class,
8796
+ nuxt.options.app?.head?.bodyAttrs?.class
8797
+ ];
8798
+ for (const value of inlineConfigs) {
8799
+ if (value && typeof value === "string") {
8800
+ sources.push(`@source inline(${JSON.stringify(value)});`);
8801
+ }
8426
8802
  }
8427
8803
  }
8428
- if (resolve && options.experimental?.componentDetection) {
8804
+ const componentDir = resolve ? resolve("./runtime/components") : void 0;
8805
+ if (options.experimental?.componentDetection && nuxt && componentDir && layers.length) {
8429
8806
  const detectedComponents = await detectUsedComponents(
8430
8807
  layers,
8431
8808
  options.prefix,
8432
- resolve("./runtime/components"),
8809
+ componentDir,
8433
8810
  Array.isArray(options.experimental.componentDetection) ? options.experimental.componentDetection : void 0
8434
8811
  );
8435
8812
  if (detectedComponents && detectedComponents.size > 0) {
@@ -8633,7 +9010,7 @@ function addTemplates(options, nuxt, resolve) {
8633
9010
  });
8634
9011
  if (options.experimental?.componentDetection && nuxt.options.dev) {
8635
9012
  nuxt.hook("builder:watch", async (_, path) => {
8636
- if (/\.(?:vue|ts|js|tsx|jsx)$/.test(path)) {
9013
+ if (/\.(?:vue|ts|mts|js|mjs|cjs|tsx|jsx)$/.test(path)) {
8637
9014
  await updateTemplates({ filter: (template) => template.filename === "ui.css" });
8638
9015
  }
8639
9016
  });
@@ -8694,4 +9071,4 @@ function getClientBundleIcons(icons = {}) {
8694
9071
  return [...names];
8695
9072
  }
8696
9073
 
8697
- export { addTemplates as a, getDefaultConfig as b, getTemplates as c, defaultOptions as d, publicComposables as e, getClientBundleIcons as g, parseIconName as p, resolveColors as r };
9074
+ export { addTemplates as a, detectUsedComponents as b, getDefaultConfig as c, defaultOptions as d, getTemplates as e, publicComposables as f, getClientBundleIcons as g, resolveExtraScanDirs as h, parseIconName as p, resolveColors as r };