@nuxt/ui 4.10.0 → 4.11.0

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 (97) 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/ChatPromptSubmit.d.vue.ts +2 -2
  12. package/dist/runtime/components/ChatPromptSubmit.vue.d.ts +2 -2
  13. package/dist/runtime/components/Checkbox.d.vue.ts +1 -1
  14. package/dist/runtime/components/Checkbox.vue +12 -6
  15. package/dist/runtime/components/Checkbox.vue.d.ts +1 -1
  16. package/dist/runtime/components/CheckboxGroup.d.vue.ts +6 -0
  17. package/dist/runtime/components/CheckboxGroup.vue +10 -4
  18. package/dist/runtime/components/CheckboxGroup.vue.d.ts +6 -0
  19. package/dist/runtime/components/Editor.vue +4 -1
  20. package/dist/runtime/components/Error.d.vue.ts +1 -1
  21. package/dist/runtime/components/Error.vue.d.ts +1 -1
  22. package/dist/runtime/components/FileUpload.vue +17 -10
  23. package/dist/runtime/components/Input.vue +12 -7
  24. package/dist/runtime/components/InputDate.vue +12 -8
  25. package/dist/runtime/components/InputMenu.vue +25 -11
  26. package/dist/runtime/components/InputNumber.vue +14 -9
  27. package/dist/runtime/components/InputRating.vue +10 -7
  28. package/dist/runtime/components/InputTags.vue +12 -7
  29. package/dist/runtime/components/InputTime.vue +12 -7
  30. package/dist/runtime/components/Listbox.vue +10 -6
  31. package/dist/runtime/components/Modal.vue +12 -5
  32. package/dist/runtime/components/PinInput.vue +13 -8
  33. package/dist/runtime/components/Popover.vue +0 -1
  34. package/dist/runtime/components/PricingTable.d.vue.ts +1 -1
  35. package/dist/runtime/components/PricingTable.vue.d.ts +1 -1
  36. package/dist/runtime/components/Progress.d.vue.ts +2 -1
  37. package/dist/runtime/components/Progress.vue +5 -6
  38. package/dist/runtime/components/Progress.vue.d.ts +2 -1
  39. package/dist/runtime/components/ProgressGroup.d.vue.ts +91 -0
  40. package/dist/runtime/components/ProgressGroup.vue +99 -0
  41. package/dist/runtime/components/ProgressGroup.vue.d.ts +91 -0
  42. package/dist/runtime/components/RadioGroup.d.vue.ts +7 -1
  43. package/dist/runtime/components/RadioGroup.vue +14 -5
  44. package/dist/runtime/components/RadioGroup.vue.d.ts +7 -1
  45. package/dist/runtime/components/Select.vue +21 -8
  46. package/dist/runtime/components/SelectMenu.vue +26 -12
  47. package/dist/runtime/components/Slider.vue +14 -7
  48. package/dist/runtime/components/Splitter.d.vue.ts +266 -0
  49. package/dist/runtime/components/Splitter.vue +99 -0
  50. package/dist/runtime/components/Splitter.vue.d.ts +266 -0
  51. package/dist/runtime/components/Switch.vue +8 -4
  52. package/dist/runtime/components/Textarea.vue +17 -7
  53. package/dist/runtime/components/Theme.d.vue.ts +1 -1
  54. package/dist/runtime/components/Theme.vue +4 -3
  55. package/dist/runtime/components/Theme.vue.d.ts +1 -1
  56. package/dist/runtime/components/Tree.vue +1 -1
  57. package/dist/runtime/components/content/ContentNavigation.vue +8 -1
  58. package/dist/runtime/components/content/ContentToc.vue +4 -1
  59. package/dist/runtime/composables/useComponentProps.d.ts +1 -1
  60. package/dist/runtime/composables/useComponentProps.js +6 -0
  61. package/dist/runtime/composables/useFormField.d.ts +10 -4
  62. package/dist/runtime/composables/useFormField.js +10 -3
  63. package/dist/runtime/keyframes.css +1 -1
  64. package/dist/runtime/locale/da.js +1 -1
  65. package/dist/runtime/locale/de_at.js +7 -0
  66. package/dist/runtime/locale/de_ch.js +1 -1
  67. package/dist/runtime/locale/eu.js +1 -1
  68. package/dist/runtime/locale/fi.js +1 -1
  69. package/dist/runtime/locale/he.js +1 -1
  70. package/dist/runtime/locale/hi.js +1 -1
  71. package/dist/runtime/locale/index.d.ts +2 -1
  72. package/dist/runtime/locale/index.js +2 -1
  73. package/dist/runtime/locale/is.js +1 -1
  74. package/dist/runtime/locale/lb.js +1 -1
  75. package/dist/runtime/locale/tg.d.ts +3 -0
  76. package/dist/runtime/locale/{tj.js → tg.js} +1 -1
  77. package/dist/runtime/locale/ur.js +1 -1
  78. package/dist/runtime/types/form.d.ts +1 -1
  79. package/dist/runtime/types/html.d.ts +3 -1
  80. package/dist/runtime/types/index.d.ts +2 -0
  81. package/dist/runtime/types/index.js +2 -0
  82. package/dist/runtime/types/theme.d.ts +2 -0
  83. package/dist/runtime/types/tv.d.ts +6 -2
  84. package/dist/runtime/utils/link-keys.d.ts +1 -0
  85. package/dist/runtime/utils/link-keys.js +40 -0
  86. package/dist/runtime/utils/link.d.ts +2 -1
  87. package/dist/runtime/utils/link.js +2 -40
  88. package/dist/runtime/utils/search.js +3 -12
  89. package/dist/runtime/utils/tv.d.ts +1 -1
  90. package/dist/runtime/utils/tv.js +103 -25
  91. package/dist/runtime/vue/components/Icon.vue +5 -2
  92. package/dist/shared/{ui.XkBrgXFP.mjs → ui.DNq7CNkE.mjs} +589 -213
  93. package/dist/unplugin.d.mts +1 -1
  94. package/dist/unplugin.mjs +22 -6
  95. package/dist/vite.mjs +4 -4
  96. package/package.json +51 -50
  97. /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-muted 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",
@@ -1824,7 +1955,7 @@ const checkboxGroup = (options) => ({
1824
1955
  list: {},
1825
1956
  card: {},
1826
1957
  table: {
1827
- item: "border border-muted"
1958
+ item: [`border border-muted ${hover}bg-elevated/50`, options.theme.transitions && "transition-colors"]
1828
1959
  }
1829
1960
  },
1830
1961
  size: {
@@ -1854,11 +1985,29 @@ const checkboxGroup = (options) => ({
1854
1985
  legend: "after:content-['*'] after:ms-0.5 after:text-error"
1855
1986
  }
1856
1987
  },
1988
+ highlight: {
1989
+ true: {},
1990
+ false: {}
1991
+ },
1857
1992
  disabled: {
1858
1993
  true: {}
1859
1994
  }
1860
1995
  },
1861
1996
  compoundVariants: [
1997
+ ...[...(options.theme.colors || []).map((color) => [color, color]), ["neutral", "inverted"]].map(([color, token]) => ({
1998
+ color,
1999
+ variant: "table",
2000
+ class: {
2001
+ item: focusCard(token)
2002
+ }
2003
+ })),
2004
+ {
2005
+ variant: "table",
2006
+ highlight: false,
2007
+ class: {
2008
+ item: `${hover}border-accented`
2009
+ }
2010
+ },
1862
2011
  { size: "xs", variant: "table", class: { item: "p-2.5" } },
1863
2012
  { size: "sm", variant: "table", class: { item: "p-3" } },
1864
2013
  { size: "md", variant: "table", class: { item: "p-3.5" } },
@@ -1903,6 +2052,7 @@ const checkboxGroup = (options) => ({
1903
2052
  }
1904
2053
  ],
1905
2054
  defaultVariants: {
2055
+ highlight: false,
1906
2056
  size: "md",
1907
2057
  variant: "list",
1908
2058
  color: "primary"
@@ -1970,7 +2120,7 @@ const chip = (options) => ({
1970
2120
  const collapsible$1 = {
1971
2121
  slots: {
1972
2122
  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"
2123
+ 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
2124
  }
1975
2125
  };
1976
2126
 
@@ -2008,7 +2158,6 @@ const colorPicker = {
2008
2158
  }
2009
2159
  }
2010
2160
  },
2011
- compoundVariants: [],
2012
2161
  defaultVariants: {
2013
2162
  size: "md"
2014
2163
  }
@@ -2157,7 +2306,7 @@ const container = {
2157
2306
 
2158
2307
  const contextMenu = (options) => ({
2159
2308
  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",
2309
+ 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
2310
  viewport: "relative divide-y divide-default scroll-py-1 overflow-y-auto flex-1",
2162
2311
  group: "p-1 isolate",
2163
2312
  label: "w-full flex items-center font-semibold text-highlighted",
@@ -2421,7 +2570,7 @@ const drawer = (options) => ({
2421
2570
  slots: {
2422
2571
  overlay: "fixed inset-0 bg-elevated/75",
2423
2572
  content: "fixed bg-default ring ring-default flex focus:outline-none",
2424
- handle: ["shrink-0 !bg-accented", options.theme.transitions && "transition-opacity"],
2573
+ handle: ["shrink-0 !bg-accented", options.theme.transitions && "transition-opacity ease-out"],
2425
2574
  container: "w-full flex flex-col gap-4 p-4 overflow-y-auto",
2426
2575
  header: "flex items-center gap-1.5 min-h-8",
2427
2576
  wrapper: "min-w-0 flex-1",
@@ -2550,7 +2699,7 @@ const drawer = (options) => ({
2550
2699
 
2551
2700
  const dropdownMenu = (options) => ({
2552
2701
  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",
2702
+ 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
2703
  input: "border-b border-default",
2555
2704
  empty: "text-center text-muted",
2556
2705
  viewport: "relative divide-y divide-default scroll-py-1 overflow-y-auto flex-1",
@@ -2730,14 +2879,14 @@ const editor = (options) => ({
2730
2879
 
2731
2880
  const editorDragHandle = {
2732
2881
  slots: {
2733
- root: "hidden sm:flex items-center justify-center transition-all duration-200 ease-out",
2882
+ root: "hidden sm:flex items-center justify-center transition-[top,left] duration-200 ease-out motion-reduce:transition-none",
2734
2883
  handle: "cursor-grab px-1"
2735
2884
  }
2736
2885
  };
2737
2886
 
2738
2887
  const editorSuggestionMenu = (options) => ({
2739
2888
  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",
2889
+ 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
2890
  viewport: "relative divide-y divide-default scroll-py-1 overflow-y-auto flex-1",
2742
2891
  group: "p-1 isolate",
2743
2892
  label: "w-full flex items-center font-semibold text-highlighted",
@@ -2914,7 +3063,7 @@ const error = {
2914
3063
  const fileUpload = (options) => ({
2915
3064
  slots: {
2916
3065
  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]"],
3066
+ 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
3067
  wrapper: "flex flex-col items-center justify-center text-center",
2919
3068
  icon: "shrink-0",
2920
3069
  avatar: "shrink-0",
@@ -3186,7 +3335,7 @@ const formField = {
3186
3335
 
3187
3336
  const header = {
3188
3337
  slots: {
3189
- root: "bg-default/75 backdrop-blur border-b border-default h-(--ui-header-height) sticky top-0 z-50",
3338
+ root: "bg-default/75 backdrop-blur-sm border-b border-default h-(--ui-header-height) sticky top-0 z-50",
3190
3339
  container: "flex items-center justify-between gap-3 h-full",
3191
3340
  left: "lg:flex-1 flex items-center gap-1.5",
3192
3341
  center: "hidden lg:flex",
@@ -3401,7 +3550,7 @@ const inputDate = (options) => {
3401
3550
  slots: {
3402
3551
  root: () => void 0,
3403
3552
  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"],
3553
+ 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
3554
  separatorIcon: "shrink-0 size-4 text-muted"
3406
3555
  },
3407
3556
  variants: {
@@ -3474,7 +3623,7 @@ const inputMenu = (options) => {
3474
3623
  trailing: "group absolute inset-y-0 end-0 flex items-center disabled:cursor-not-allowed disabled:opacity-75 focus:outline-none",
3475
3624
  trailingClear: "p-0",
3476
3625
  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",
3626
+ 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
3627
  viewport: "relative scroll-py-1 overflow-y-auto flex-1",
3479
3628
  group: "p-1 isolate",
3480
3629
  empty: "text-center text-muted",
@@ -3801,7 +3950,7 @@ const inputTime = (options) => {
3801
3950
  slots: {
3802
3951
  root: () => void 0,
3803
3952
  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"],
3953
+ 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
3954
  separatorIcon: "shrink-0 size-4 text-muted"
3806
3955
  },
3807
3956
  variants: {
@@ -4119,13 +4268,13 @@ const marquee = {
4119
4268
  orientation: "horizontal",
4120
4269
  overlay: true,
4121
4270
  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"
4271
+ 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
4272
  }
4124
4273
  }, {
4125
4274
  orientation: "vertical",
4126
4275
  class: {
4127
4276
  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"
4277
+ content: "flex-col motion-safe:animate-[marquee-vertical_var(--duration)_linear_infinite] h-[fit-content] backface-hidden"
4129
4278
  }
4130
4279
  }, {
4131
4280
  orientation: "vertical",
@@ -4151,8 +4300,8 @@ const modal = {
4151
4300
  variants: {
4152
4301
  transition: {
4153
4302
  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]"
4303
+ overlay: "data-[state=open]:animate-[fade-in_200ms_var(--ease-out)] data-[state=closed]:animate-[fade-out_200ms_var(--ease-out)]",
4304
+ content: "data-[state=open]:animate-[scale-in_200ms_var(--ease-out)] data-[state=closed]:animate-[scale-out_200ms_var(--ease-out)]"
4156
4305
  }
4157
4306
  },
4158
4307
  fullscreen: {
@@ -4208,7 +4357,7 @@ const navigationMenu = (options) => ({
4208
4357
  linkTrailing: "group ms-auto inline-flex gap-1.5 items-center",
4209
4358
  linkTrailingBadge: "shrink-0",
4210
4359
  linkTrailingBadgeSize: "sm",
4211
- linkTrailingIcon: "size-5 transform shrink-0 group-data-[state=open]:rotate-180 transition-transform duration-200",
4360
+ linkTrailingIcon: "size-5 transform shrink-0 group-data-[state=open]:rotate-180 transition-transform duration-200 ease-out motion-reduce:transition-none",
4212
4361
  linkLabel: "truncate",
4213
4362
  linkLabelExternalIcon: "inline-block size-3 align-top text-dimmed",
4214
4363
  childList: "isolate",
@@ -4222,9 +4371,9 @@ const navigationMenu = (options) => ({
4222
4371
  childLinkDescription: "text-muted",
4223
4372
  separator: "px-2 h-px bg-border",
4224
4373
  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",
4374
+ 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
4375
  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",
4376
+ 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
4377
  arrow: "relative top-[50%] size-2.5 rotate-45 border border-default bg-default z-1 rounded-xs"
4229
4378
  },
4230
4379
  variants: {
@@ -4267,7 +4416,7 @@ const navigationMenu = (options) => ({
4267
4416
  contentOrientation: {
4268
4417
  horizontal: {
4269
4418
  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]"
4419
+ 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
4420
  },
4272
4421
  vertical: {
4273
4422
  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 +4468,7 @@ const navigationMenu = (options) => ({
4319
4468
  class: {
4320
4469
  childList: "ms-5 border-s border-default",
4321
4470
  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"
4471
+ 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
4472
  }
4324
4473
  }, {
4325
4474
  orientation: "vertical",
@@ -5091,7 +5240,7 @@ const pinInput = (options) => ({
5091
5240
 
5092
5241
  const popover = {
5093
5242
  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",
5243
+ 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
5244
  arrow: "fill-bg stroke-default"
5096
5245
  }
5097
5246
  };
@@ -5261,10 +5410,10 @@ const progress = (options) => ({
5261
5410
  slots: {
5262
5411
  root: "gap-2",
5263
5412
  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",
5413
+ indicator: "rounded-full size-full transition-transform duration-200 ease-out motion-reduce:transition-none motion-reduce:data-[state=indeterminate]:animate-pulse",
5414
+ status: "flex text-dimmed duration-200 ease-out motion-reduce:transition-none",
5266
5415
  steps: "grid items-end",
5267
- step: "truncate text-end row-start-1 col-start-1 transition-opacity"
5416
+ step: "truncate text-end row-start-1 col-start-1 transition-opacity ease-out"
5268
5417
  },
5269
5418
  variants: {
5270
5419
  animation: {
@@ -5280,7 +5429,7 @@ const progress = (options) => ({
5280
5429
  }])),
5281
5430
  neutral: {
5282
5431
  indicator: "bg-inverted",
5283
- steps: "text-inverted"
5432
+ steps: "text-highlighted"
5284
5433
  }
5285
5434
  },
5286
5435
  size: {
@@ -5331,12 +5480,12 @@ const progress = (options) => ({
5331
5480
  horizontal: {
5332
5481
  root: "w-full flex flex-col",
5333
5482
  base: "w-full",
5334
- status: "flex-row items-center justify-end min-w-fit"
5483
+ status: "flex-row items-center justify-end w-(--percent) min-w-fit transition-[width]"
5335
5484
  },
5336
5485
  vertical: {
5337
5486
  root: "h-full flex flex-row-reverse",
5338
5487
  base: "h-full",
5339
- status: "flex-col justify-end min-h-fit"
5488
+ status: "flex-col justify-end h-(--percent) min-h-fit transition-[height]"
5340
5489
  }
5341
5490
  },
5342
5491
  inverted: {
@@ -5419,49 +5568,49 @@ const progress = (options) => ({
5419
5568
  orientation: "horizontal",
5420
5569
  animation: "carousel",
5421
5570
  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]"
5571
+ indicator: "motion-safe:data-[state=indeterminate]:animate-[carousel_2s_linear_infinite] motion-safe:data-[state=indeterminate]:rtl:animate-[carousel-rtl_2s_linear_infinite]"
5423
5572
  }
5424
5573
  }, {
5425
5574
  orientation: "vertical",
5426
5575
  animation: "carousel",
5427
5576
  class: {
5428
- indicator: "motion-safe:data-[state=indeterminate]:animate-[carousel-vertical_2s_ease-in-out_infinite]"
5577
+ indicator: "motion-safe:data-[state=indeterminate]:animate-[carousel-vertical_2s_linear_infinite]"
5429
5578
  }
5430
5579
  }, {
5431
5580
  orientation: "horizontal",
5432
5581
  animation: "carousel-inverse",
5433
5582
  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]"
5583
+ 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
5584
  }
5436
5585
  }, {
5437
5586
  orientation: "vertical",
5438
5587
  animation: "carousel-inverse",
5439
5588
  class: {
5440
- indicator: "motion-safe:data-[state=indeterminate]:animate-[carousel-inverse-vertical_2s_ease-in-out_infinite]"
5589
+ indicator: "motion-safe:data-[state=indeterminate]:animate-[carousel-inverse-vertical_2s_linear_infinite]"
5441
5590
  }
5442
5591
  }, {
5443
5592
  orientation: "horizontal",
5444
5593
  animation: "swing",
5445
5594
  class: {
5446
- indicator: "motion-safe:data-[state=indeterminate]:animate-[swing_2s_ease-in-out_infinite]"
5595
+ indicator: "motion-safe:data-[state=indeterminate]:animate-[swing_2s_var(--ease-in-out)_infinite]"
5447
5596
  }
5448
5597
  }, {
5449
5598
  orientation: "vertical",
5450
5599
  animation: "swing",
5451
5600
  class: {
5452
- indicator: "motion-safe:data-[state=indeterminate]:animate-[swing-vertical_2s_ease-in-out_infinite]"
5601
+ indicator: "motion-safe:data-[state=indeterminate]:animate-[swing-vertical_2s_var(--ease-in-out)_infinite]"
5453
5602
  }
5454
5603
  }, {
5455
5604
  orientation: "horizontal",
5456
5605
  animation: "elastic",
5457
5606
  class: {
5458
- indicator: "motion-safe:data-[state=indeterminate]:animate-[elastic_2s_ease-in-out_infinite]"
5607
+ indicator: "relative motion-safe:data-[state=indeterminate]:animate-[elastic_2s_var(--ease-in-out)_infinite]"
5459
5608
  }
5460
5609
  }, {
5461
5610
  orientation: "vertical",
5462
5611
  animation: "elastic",
5463
5612
  class: {
5464
- indicator: "motion-safe:data-[state=indeterminate]:animate-[elastic-vertical_2s_ease-in-out_infinite]"
5613
+ indicator: "relative motion-safe:data-[state=indeterminate]:animate-[elastic-vertical_2s_var(--ease-in-out)_infinite]"
5465
5614
  }
5466
5615
  }],
5467
5616
  defaultVariants: {
@@ -5471,6 +5620,155 @@ const progress = (options) => ({
5471
5620
  }
5472
5621
  });
5473
5622
 
5623
+ const progressGroup = (options) => ({
5624
+ slots: {
5625
+ root: "gap-2",
5626
+ base: "flex overflow-hidden rounded-full bg-accented",
5627
+ segment: "duration-200 ease-out motion-reduce:transition-none",
5628
+ indicator: "size-full",
5629
+ status: "flex text-dimmed duration-200 ease-out motion-reduce:transition-none",
5630
+ list: "flex flex-col gap-1",
5631
+ item: "flex items-center gap-1.5 min-w-0",
5632
+ itemLeadingIcon: "shrink-0",
5633
+ itemLeadingDot: "shrink-0 rounded-full",
5634
+ itemLabel: "truncate",
5635
+ itemTrailing: "ms-auto shrink-0 text-dimmed"
5636
+ },
5637
+ variants: {
5638
+ color: {
5639
+ ...Object.fromEntries((options.theme.colors || []).map((color) => [color, {
5640
+ indicator: `bg-${color}`,
5641
+ itemLeadingIcon: `text-${color}`,
5642
+ itemLeadingDot: `bg-${color}`
5643
+ }])),
5644
+ neutral: {
5645
+ indicator: "bg-inverted",
5646
+ itemLeadingIcon: "text-highlighted",
5647
+ itemLeadingDot: "bg-inverted"
5648
+ }
5649
+ },
5650
+ size: {
5651
+ "2xs": {
5652
+ status: "text-xs",
5653
+ list: "text-xs",
5654
+ itemLeadingIcon: "size-3",
5655
+ itemLeadingDot: "size-1.5"
5656
+ },
5657
+ "xs": {
5658
+ status: "text-xs",
5659
+ list: "text-xs",
5660
+ itemLeadingIcon: "size-3",
5661
+ itemLeadingDot: "size-1.5"
5662
+ },
5663
+ "sm": {
5664
+ status: "text-sm",
5665
+ list: "text-sm",
5666
+ itemLeadingIcon: "size-4",
5667
+ itemLeadingDot: "size-2"
5668
+ },
5669
+ "md": {
5670
+ status: "text-sm",
5671
+ list: "text-sm",
5672
+ itemLeadingIcon: "size-4",
5673
+ itemLeadingDot: "size-2"
5674
+ },
5675
+ "lg": {
5676
+ status: "text-sm",
5677
+ list: "text-sm",
5678
+ itemLeadingIcon: "size-4",
5679
+ itemLeadingDot: "size-2"
5680
+ },
5681
+ "xl": {
5682
+ status: "text-base",
5683
+ list: "text-base",
5684
+ itemLeadingIcon: "size-5",
5685
+ itemLeadingDot: "size-2.5"
5686
+ },
5687
+ "2xl": {
5688
+ status: "text-base",
5689
+ list: "text-base",
5690
+ itemLeadingIcon: "size-5",
5691
+ itemLeadingDot: "size-2.5"
5692
+ }
5693
+ },
5694
+ orientation: {
5695
+ horizontal: {
5696
+ root: "w-full flex flex-col",
5697
+ base: "w-full flex-row",
5698
+ segment: "h-full transition-[width]",
5699
+ status: "flex-row items-center justify-end w-(--percent) min-w-fit transition-[width]"
5700
+ },
5701
+ vertical: {
5702
+ root: "h-full flex flex-row",
5703
+ base: "h-full flex-col",
5704
+ segment: "w-full transition-[height]",
5705
+ status: "flex-col justify-end h-(--percent) min-h-fit transition-[height]"
5706
+ }
5707
+ }
5708
+ },
5709
+ compoundVariants: [{
5710
+ orientation: "horizontal",
5711
+ size: "2xs",
5712
+ class: "h-px"
5713
+ }, {
5714
+ orientation: "horizontal",
5715
+ size: "xs",
5716
+ class: "h-0.5"
5717
+ }, {
5718
+ orientation: "horizontal",
5719
+ size: "sm",
5720
+ class: "h-1"
5721
+ }, {
5722
+ orientation: "horizontal",
5723
+ size: "md",
5724
+ class: "h-2"
5725
+ }, {
5726
+ orientation: "horizontal",
5727
+ size: "lg",
5728
+ class: "h-3"
5729
+ }, {
5730
+ orientation: "horizontal",
5731
+ size: "xl",
5732
+ class: "h-4"
5733
+ }, {
5734
+ orientation: "horizontal",
5735
+ size: "2xl",
5736
+ class: "h-5"
5737
+ }, {
5738
+ orientation: "vertical",
5739
+ size: "2xs",
5740
+ class: "w-px"
5741
+ }, {
5742
+ orientation: "vertical",
5743
+ size: "xs",
5744
+ class: "w-0.5"
5745
+ }, {
5746
+ orientation: "vertical",
5747
+ size: "sm",
5748
+ class: "w-1"
5749
+ }, {
5750
+ orientation: "vertical",
5751
+ size: "md",
5752
+ class: "w-2"
5753
+ }, {
5754
+ orientation: "vertical",
5755
+ size: "lg",
5756
+ class: "w-3"
5757
+ }, {
5758
+ orientation: "vertical",
5759
+ size: "xl",
5760
+ class: "w-4"
5761
+ }, {
5762
+ orientation: "vertical",
5763
+ size: "2xl",
5764
+ class: "w-5"
5765
+ }],
5766
+ defaultVariants: {
5767
+ color: "primary",
5768
+ size: "md"
5769
+ }
5770
+ });
5771
+
5474
5772
  const radioGroup = (options) => ({
5475
5773
  slots: {
5476
5774
  root: "relative",
@@ -5478,20 +5776,19 @@ const radioGroup = (options) => ({
5478
5776
  legend: "mb-1 block font-medium text-default",
5479
5777
  item: "flex items-start",
5480
5778
  container: "flex items-center",
5481
- base: "rounded-full ring ring-inset ring-accented overflow-hidden focus-visible:outline-3",
5779
+ base: "rounded-full ring ring-inset ring-accented overflow-hidden focus-visible:outline-none",
5482
5780
  indicator: "flex items-center justify-center size-full after:bg-default after:rounded-full",
5483
5781
  wrapper: "w-full",
5484
5782
  label: "block font-medium text-default",
5783
+ icon: "shrink-0",
5485
5784
  description: "text-muted"
5486
5785
  },
5487
5786
  variants: {
5488
5787
  color: {
5489
5788
  ...Object.fromEntries((options.theme.colors || []).map((color) => [color, {
5490
- base: `outline-${color}/25 focus-visible:ring-${color}`,
5491
5789
  indicator: `bg-${color}`
5492
5790
  }])),
5493
5791
  neutral: {
5494
- base: "outline-inverted/25 focus-visible:ring-inverted",
5495
5792
  indicator: "bg-inverted"
5496
5793
  }
5497
5794
  },
@@ -5500,10 +5797,10 @@ const radioGroup = (options) => ({
5500
5797
  item: ""
5501
5798
  },
5502
5799
  card: {
5503
- item: "border border-muted rounded-lg"
5800
+ item: [`border border-muted rounded-lg ${hover}bg-elevated/50`, options.theme.transitions && "transition-colors"]
5504
5801
  },
5505
5802
  table: {
5506
- item: "border border-muted"
5803
+ item: [`border border-muted ${hover}bg-elevated/50`, options.theme.transitions && "transition-colors"]
5507
5804
  }
5508
5805
  },
5509
5806
  orientation: {
@@ -5525,7 +5822,7 @@ const radioGroup = (options) => ({
5525
5822
  },
5526
5823
  hidden: {
5527
5824
  base: "sr-only",
5528
- wrapper: "text-center"
5825
+ wrapper: "flex flex-col items-center gap-1 text-center"
5529
5826
  }
5530
5827
  },
5531
5828
  size: {
@@ -5571,7 +5868,8 @@ const radioGroup = (options) => ({
5571
5868
  }
5572
5869
  },
5573
5870
  highlight: {
5574
- true: ""
5871
+ true: "",
5872
+ false: ""
5575
5873
  },
5576
5874
  disabled: {
5577
5875
  true: {
@@ -5588,6 +5886,24 @@ const radioGroup = (options) => ({
5588
5886
  }
5589
5887
  },
5590
5888
  compoundVariants: [
5889
+ {
5890
+ indicator: "hidden",
5891
+ class: {
5892
+ container: "h-auto"
5893
+ }
5894
+ },
5895
+ {
5896
+ variant: ["card", "table"],
5897
+ highlight: false,
5898
+ class: {
5899
+ item: `${hover}border-accented`
5900
+ }
5901
+ },
5902
+ { size: "xs", indicator: "hidden", class: { icon: "size-3" } },
5903
+ { size: "sm", indicator: "hidden", class: { icon: "size-3.5" } },
5904
+ { size: "md", indicator: "hidden", class: { icon: "size-4" } },
5905
+ { size: "lg", indicator: "hidden", class: { icon: "size-4.5" } },
5906
+ { size: "xl", indicator: "hidden", class: { icon: "size-5" } },
5591
5907
  { size: "xs", variant: ["card", "table"], class: { item: "p-2.5" } },
5592
5908
  { size: "sm", variant: ["card", "table"], class: { item: "p-3" } },
5593
5909
  { size: "md", variant: ["card", "table"], class: { item: "p-3.5" } },
@@ -5609,18 +5925,41 @@ const radioGroup = (options) => ({
5609
5925
  fieldset: "gap-0 -space-y-px"
5610
5926
  }
5611
5927
  },
5928
+ ...[...(options.theme.colors || []).map((color) => [color, color]), ["neutral", "inverted"]].map(([color, token]) => ({
5929
+ color,
5930
+ variant: "list",
5931
+ indicator: ["start", "end"],
5932
+ class: {
5933
+ base: focusControl(token)
5934
+ }
5935
+ })),
5936
+ ...[...(options.theme.colors || []).map((color) => [color, color]), ["neutral", "inverted"]].map(([color, token]) => ({
5937
+ color,
5938
+ variant: ["card", "table"],
5939
+ class: {
5940
+ item: focusCard(token)
5941
+ }
5942
+ })),
5943
+ ...[...(options.theme.colors || []).map((color) => [color, color]), ["neutral", "inverted"]].map(([color, token]) => ({
5944
+ color,
5945
+ variant: "list",
5946
+ indicator: "hidden",
5947
+ class: {
5948
+ item: focusCard(token)
5949
+ }
5950
+ })),
5612
5951
  ...(options.theme.colors || []).map((color) => ({
5613
5952
  color,
5614
5953
  variant: "card",
5615
5954
  class: {
5616
- item: `has-data-[state=checked]:border-${color}`
5955
+ item: `has-data-[state=checked]:border-${color}/50 has-data-[state=checked]:bg-${color}/10`
5617
5956
  }
5618
5957
  })),
5619
5958
  {
5620
5959
  color: "neutral",
5621
5960
  variant: "card",
5622
5961
  class: {
5623
- item: "has-data-[state=checked]:border-inverted"
5962
+ item: "has-data-[state=checked]:border-inverted/50 has-data-[state=checked]:bg-elevated"
5624
5963
  }
5625
5964
  },
5626
5965
  ...(options.theme.colors || []).map((color) => ({
@@ -5644,6 +5983,22 @@ const radioGroup = (options) => ({
5644
5983
  item: "cursor-not-allowed"
5645
5984
  }
5646
5985
  },
5986
+ ...(options.theme.colors || []).map((color) => ({
5987
+ color,
5988
+ indicator: "hidden",
5989
+ highlight: true,
5990
+ class: {
5991
+ item: `not-has-disabled:border-${color} not-has-disabled:has-data-[state=checked]:border-${color}`
5992
+ }
5993
+ })),
5994
+ {
5995
+ color: "neutral",
5996
+ indicator: "hidden",
5997
+ highlight: true,
5998
+ class: {
5999
+ item: "not-has-disabled:border-inverted not-has-disabled:has-data-[state=checked]:border-inverted"
6000
+ }
6001
+ },
5647
6002
  ...(options.theme.colors || []).map((color) => ({
5648
6003
  color,
5649
6004
  highlight: true,
@@ -5660,6 +6015,7 @@ const radioGroup = (options) => ({
5660
6015
  }
5661
6016
  ],
5662
6017
  defaultVariants: {
6018
+ highlight: false,
5663
6019
  size: "md",
5664
6020
  color: "primary",
5665
6021
  variant: "list",
@@ -5786,7 +6142,7 @@ const select = (options) => {
5786
6142
  },
5787
6143
  position: {
5788
6144
  "popper": {
5789
- content: "data-[state=open]:animate-[scale-in_100ms_ease-out] data-[state=closed]:animate-[scale-out_100ms_ease-in]"
6145
+ content: "data-[state=open]:animate-[scale-in_100ms_var(--ease-out)] data-[state=closed]:animate-[scale-out_100ms_var(--ease-out)]"
5790
6146
  },
5791
6147
  "item-aligned": {
5792
6148
  content: ""
@@ -5966,9 +6322,8 @@ const sidebar = (options) => ({
5966
6322
  variants: {
5967
6323
  transition: {
5968
6324
  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"
6325
+ gap: "transition-[width] duration-200 ease-out motion-reduce:transition-none",
6326
+ container: "transition-[inset-inline-start,inset-inline-end,width] duration-200 ease-out motion-reduce:transition-none"
5972
6327
  }
5973
6328
  },
5974
6329
  side: {
@@ -6119,7 +6474,7 @@ const slideover = {
6119
6474
  },
6120
6475
  transition: {
6121
6476
  true: {
6122
- overlay: "data-[state=open]:animate-[fade-in_200ms_ease-out] data-[state=closed]:animate-[fade-out_200ms_ease-in]"
6477
+ overlay: "data-[state=open]:animate-[fade-in_200ms_var(--ease-out)] data-[state=closed]:animate-[fade-out_200ms_var(--ease-out)]"
6123
6478
  }
6124
6479
  }
6125
6480
  },
@@ -6175,25 +6530,25 @@ const slideover = {
6175
6530
  transition: true,
6176
6531
  side: "top",
6177
6532
  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]"
6533
+ 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
6534
  }
6180
6535
  }, {
6181
6536
  transition: true,
6182
6537
  side: "right",
6183
6538
  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]"
6539
+ 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
6540
  }
6186
6541
  }, {
6187
6542
  transition: true,
6188
6543
  side: "bottom",
6189
6544
  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]"
6545
+ 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
6546
  }
6192
6547
  }, {
6193
6548
  transition: true,
6194
6549
  side: "left",
6195
6550
  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]"
6551
+ 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
6552
  }
6198
6553
  }]
6199
6554
  };
@@ -6316,6 +6671,24 @@ const slider = (options) => ({
6316
6671
  }
6317
6672
  });
6318
6673
 
6674
+ const splitter = {
6675
+ slots: {
6676
+ root: "",
6677
+ panel: "flex",
6678
+ handle: "group relative shrink-0 focus-visible:outline-2 focus-visible:outline-primary data-[panel-resize-handle-enabled=false]:cursor-default"
6679
+ },
6680
+ variants: {
6681
+ orientation: {
6682
+ horizontal: {
6683
+ handle: "w-2 cursor-col-resize"
6684
+ },
6685
+ vertical: {
6686
+ handle: "h-2 cursor-row-resize"
6687
+ }
6688
+ }
6689
+ }
6690
+ };
6691
+
6319
6692
  const inputRating = (options) => ({
6320
6693
  slots: {
6321
6694
  root: "",
@@ -6520,10 +6893,10 @@ const stepper = (options) => ({
6520
6893
  const _switch = (options) => ({
6521
6894
  slots: {
6522
6895
  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"],
6896
+ 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
6897
  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"],
6898
+ 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",
6899
+ 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
6900
  wrapper: "ms-2",
6528
6901
  label: "block font-medium text-default",
6529
6902
  description: "text-muted"
@@ -6649,14 +7022,14 @@ const table$1 = (options) => ({
6649
7022
  },
6650
7023
  sticky: {
6651
7024
  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"
7025
+ thead: "sticky top-0 inset-x-0 bg-default/75 backdrop-blur-sm z-1",
7026
+ tfoot: "sticky bottom-0 inset-x-0 bg-default/75 backdrop-blur-sm z-1"
6654
7027
  },
6655
7028
  header: {
6656
- thead: "sticky top-0 inset-x-0 bg-default/75 backdrop-blur z-1"
7029
+ thead: "sticky top-0 inset-x-0 bg-default/75 backdrop-blur-sm z-1"
6657
7030
  },
6658
7031
  footer: {
6659
- tfoot: "sticky bottom-0 inset-x-0 bg-default/75 backdrop-blur z-1"
7032
+ tfoot: "sticky bottom-0 inset-x-0 bg-default/75 backdrop-blur-sm z-1"
6660
7033
  }
6661
7034
  },
6662
7035
  loading: {
@@ -6696,25 +7069,25 @@ const table$1 = (options) => ({
6696
7069
  loading: true,
6697
7070
  loadingAnimation: "carousel",
6698
7071
  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]"
7072
+ thead: "motion-safe:after:animate-[carousel_2s_linear_infinite] motion-safe:rtl:after:animate-[carousel-rtl_2s_linear_infinite]"
6700
7073
  }
6701
7074
  }, {
6702
7075
  loading: true,
6703
7076
  loadingAnimation: "carousel-inverse",
6704
7077
  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]"
7078
+ thead: "motion-safe:after:animate-[carousel-inverse_2s_linear_infinite] motion-safe:rtl:after:animate-[carousel-inverse-rtl_2s_linear_infinite]"
6706
7079
  }
6707
7080
  }, {
6708
7081
  loading: true,
6709
7082
  loadingAnimation: "swing",
6710
7083
  class: {
6711
- thead: "motion-safe:after:animate-[swing_2s_ease-in-out_infinite]"
7084
+ thead: "motion-safe:after:animate-[swing_2s_var(--ease-in-out)_infinite]"
6712
7085
  }
6713
7086
  }, {
6714
7087
  loading: true,
6715
7088
  loadingAnimation: "elastic",
6716
7089
  class: {
6717
- thead: "motion-safe:after:animate-[elastic_2s_ease-in-out_infinite]"
7090
+ thead: "motion-safe:after:animate-[elastic_2s_var(--ease-in-out)_infinite]"
6718
7091
  }
6719
7092
  }],
6720
7093
  defaultVariants: {
@@ -6728,7 +7101,7 @@ const tabs$1 = (options) => ({
6728
7101
  slots: {
6729
7102
  root: "flex items-center gap-2",
6730
7103
  list: "relative flex p-1 group",
6731
- indicator: "absolute transition-[translate,width] duration-200",
7104
+ indicator: "absolute transition-[translate,width] duration-200 ease-out motion-reduce:transition-none",
6732
7105
  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
7106
  leadingIcon: "shrink-0",
6734
7107
  leadingAvatar: "shrink-0",
@@ -7138,7 +7511,7 @@ const toast = (options) => ({
7138
7511
  const toaster = {
7139
7512
  slots: {
7140
7513
  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"
7514
+ 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
7515
  },
7143
7516
  variants: {
7144
7517
  position: {
@@ -7162,23 +7535,23 @@ const toaster = {
7162
7535
  }
7163
7536
  },
7164
7537
  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]"
7538
+ up: "data-[swipe=end]:animate-[toast-slide-up_200ms_var(--ease-out)]",
7539
+ right: "data-[swipe=end]:animate-[toast-slide-right_200ms_var(--ease-out)]",
7540
+ down: "data-[swipe=end]:animate-[toast-slide-down_200ms_var(--ease-out)]",
7541
+ left: "data-[swipe=end]:animate-[toast-slide-left_200ms_var(--ease-out)]"
7169
7542
  }
7170
7543
  },
7171
7544
  compoundVariants: [{
7172
7545
  position: ["top-left", "top-center", "top-right"],
7173
7546
  class: {
7174
7547
  viewport: "top-4",
7175
- base: "top-0 data-[state=open]:animate-[toast-slide-in-from-top_200ms_ease-in-out]"
7548
+ base: "top-0 data-[state=open]:animate-[toast-slide-in-from-top_200ms_var(--ease-out)]"
7176
7549
  }
7177
7550
  }, {
7178
7551
  position: ["bottom-left", "bottom-center", "bottom-right"],
7179
7552
  class: {
7180
7553
  viewport: "bottom-4",
7181
- base: "bottom-0 data-[state=open]:animate-[toast-slide-in-from-bottom_200ms_ease-in-out]"
7554
+ base: "bottom-0 data-[state=open]:animate-[toast-slide-in-from-bottom_200ms_var(--ease-out)]"
7182
7555
  }
7183
7556
  }, {
7184
7557
  swipeDirection: ["left", "right"],
@@ -7194,7 +7567,7 @@ const toaster = {
7194
7567
 
7195
7568
  const tooltip = {
7196
7569
  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",
7570
+ 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
7571
  arrow: "fill-bg stroke-default",
7199
7572
  text: "truncate",
7200
7573
  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 +7585,7 @@ const tree = (options) => ({
7212
7585
  linkLeadingIcon: "shrink-0 relative",
7213
7586
  linkLabel: "truncate",
7214
7587
  linkTrailing: "ms-auto inline-flex gap-1.5 items-center",
7215
- linkTrailingIcon: "shrink-0 transform transition-transform duration-200 group-data-expanded:rotate-180"
7588
+ linkTrailingIcon: "shrink-0 transform transition-transform duration-200 ease-out motion-reduce:transition-none group-data-expanded:rotate-180"
7216
7589
  },
7217
7590
  variants: {
7218
7591
  virtualize: {
@@ -7318,7 +7691,7 @@ const user = (options) => ({
7318
7691
  root: ["rounded-md outline-primary/25 has-focus-visible:outline-3", options.theme.transitions && "transition"],
7319
7692
  name: ["text-default peer-hover:text-highlighted peer-focus-visible:text-highlighted", options.theme.transitions && "transition-colors"],
7320
7693
  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"
7694
+ avatar: "transform transition-transform ease-out motion-reduce:transition-none group-hover/user:scale-115 group-has-focus-visible/user:scale-115"
7322
7695
  },
7323
7696
  false: {
7324
7697
  name: "text-highlighted",
@@ -7478,6 +7851,7 @@ const theme = {
7478
7851
  pricingPlans: pricingPlans,
7479
7852
  pricingTable: pricingTable,
7480
7853
  progress: progress,
7854
+ progressGroup: progressGroup,
7481
7855
  radioGroup: radioGroup,
7482
7856
  scrollArea: scrollArea,
7483
7857
  select: select,
@@ -7487,6 +7861,7 @@ const theme = {
7487
7861
  skeleton: skeleton,
7488
7862
  slideover: slideover,
7489
7863
  slider: slider,
7864
+ splitter: splitter,
7490
7865
  stepper: stepper,
7491
7866
  switch: _switch,
7492
7867
  table: table$1,
@@ -7653,7 +8028,7 @@ const codeGroup = (options) => ({
7653
8028
  slots: {
7654
8029
  root: "relative group *:not-first:my-0! *:not-first:static! my-5",
7655
8030
  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",
8031
+ 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
8032
  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
8033
  triggerIcon: "size-4 shrink-0",
7659
8034
  triggerLabel: "truncate"
@@ -7661,71 +8036,71 @@ const codeGroup = (options) => ({
7661
8036
  });
7662
8037
 
7663
8038
  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
8039
  ".editorconfig": "i-vscode-icons-file-type-editorconfig",
8040
+ ".env": "i-vscode-icons-file-type-dotenv",
8041
+ ".env.example": "i-vscode-icons-file-type-dotenv",
8042
+ ".eslintignore": "i-vscode-icons-file-type-eslint",
7668
8043
  ".eslintrc": "i-vscode-icons-file-type-eslint",
7669
8044
  ".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
8045
  ".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",
8046
+ ".npmrc": "i-vscode-icons-file-type-npm",
7681
8047
  ".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",
8048
+ ".nuxtrc": "i-vscode-icons-file-type-nuxt",
8049
+ ".vscode/settings.json": "i-vscode-icons-file-type-vscode",
8050
+ "asm": "i-vscode-icons-file-type-assembly",
8051
+ "bicep": "i-vscode-icons-file-type-bicep",
8052
+ "bicepparam": "i-vscode-icons-file-type-bicep",
8053
+ "bun": "i-vscode-icons-file-type-bun",
7691
8054
  "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
8055
  "cs": "i-vscode-icons-file-type-csharp",
7697
- "asm": "i-vscode-icons-file-type-assembly",
8056
+ "dart": "i-vscode-icons-file-type-dartlang",
8057
+ "deno": "i-vscode-icons-file-type-deno",
8058
+ "erl": "i-vscode-icons-file-type-erlang",
8059
+ "eslint.config.cjs": "i-vscode-icons-file-type-eslint",
8060
+ "eslint.config.js": "i-vscode-icons-file-type-eslint",
8061
+ "eslint.config.mjs": "i-vscode-icons-file-type-eslint",
8062
+ "exs": "i-vscode-icons-file-type-elixir",
7698
8063
  "f": "i-vscode-icons-file-type-fortran",
7699
- "hs": "i-vscode-icons-file-type-haskell",
7700
8064
  "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
8065
  "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",
8066
+ "go": "i-vscode-icons-file-type-go",
7715
8067
  "h": "i-vscode-icons-file-type-cppheader",
8068
+ "hs": "i-vscode-icons-file-type-haskell",
8069
+ "ico": "i-vscode-icons-file-type-favicon",
7716
8070
  "ino": "i-vscode-icons-file-type-arduino",
7717
- "pl": "i-vscode-icons-file-type-perl",
7718
8071
  "jl": "i-vscode-icons-file-type-julia",
7719
- "dart": "i-vscode-icons-file-type-dartlang",
7720
- "ico": "i-vscode-icons-file-type-favicon",
8072
+ "js": "i-vscode-icons-file-type-js",
8073
+ "jsx": "i-vscode-icons-file-type-js",
8074
+ "kt": "i-vscode-icons-file-type-kotlin",
8075
+ "lsp": "i-vscode-icons-file-type-lisp",
8076
+ "md": "i-vscode-icons-file-type-markdown",
8077
+ "mjs": "i-vscode-icons-file-type-js",
7721
8078
  "npm": "i-vscode-icons-file-type-npm",
7722
- "pnpm": "i-vscode-icons-file-type-pnpm",
7723
8079
  "npx": "i-vscode-icons-file-type-npm",
8080
+ "nuxt": "i-vscode-icons-file-type-nuxt",
8081
+ "nuxt.config.js": "i-vscode-icons-file-type-nuxt",
8082
+ "nuxt.config.ts": "i-vscode-icons-file-type-nuxt",
8083
+ "nuxt.schema.ts": "i-vscode-icons-file-type-nuxt",
8084
+ "package.json": "i-vscode-icons-file-type-node",
8085
+ "pl": "i-vscode-icons-file-type-perl",
8086
+ "pnpm": "i-vscode-icons-file-type-pnpm",
8087
+ "ps1": "i-vscode-icons-file-type-powershell",
8088
+ "psd1": "i-vscode-icons-file-type-powershell",
8089
+ "psm1": "i-vscode-icons-file-type-powershell",
8090
+ "py": "i-vscode-icons-file-type-python",
8091
+ "rb": "i-vscode-icons-file-type-ruby",
8092
+ "rs": "i-vscode-icons-file-type-rust",
8093
+ "sbt": "i-vscode-icons-file-type-scala",
8094
+ "tailwind.config.js": "i-vscode-icons-file-type-tailwind",
8095
+ "tailwind.config.ts": "i-vscode-icons-file-type-tailwind",
8096
+ "terminal": "i-lucide-terminal",
8097
+ "ts": "i-vscode-icons-file-type-typescript",
8098
+ "tsconfig.json": "i-vscode-icons-file-type-tsconfig",
8099
+ "tsx": "i-vscode-icons-file-type-typescript",
8100
+ "vue": "i-vscode-icons-file-type-vue",
7724
8101
  "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"
8102
+ "yarn.lock": "i-vscode-icons-file-type-yarn",
8103
+ "yml": "i-vscode-icons-file-type-yaml"
7729
8104
  };
7730
8105
 
7731
8106
  const codePreview = {
@@ -7754,7 +8129,7 @@ const codeTree = (options) => ({
7754
8129
  linkLeadingIcon: "size-4 shrink-0",
7755
8130
  linkLabel: "truncate",
7756
8131
  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",
8132
+ linkTrailingIcon: "size-5 transform transition-transform duration-200 ease-out motion-reduce:transition-none shrink-0 group-data-expanded:rotate-180",
7758
8133
  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
8134
  },
7760
8135
  variants: {
@@ -7773,7 +8148,7 @@ const collapsible = (options) => ({
7773
8148
  slots: {
7774
8149
  root: "my-5",
7775
8150
  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",
8151
+ triggerIcon: "size-4 shrink-0 group-data-[state=open]:rotate-180 transition-transform duration-200 ease-out motion-reduce:transition-none",
7777
8152
  triggerLabel: "truncate",
7778
8153
  content: "*:first:mt-2.5 *:last:mb-0 *:my-1.5"
7779
8154
  }
@@ -8036,7 +8411,7 @@ const themeProse = {
8036
8411
  const contentNavigation = (options) => ({
8037
8412
  slots: {
8038
8413
  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",
8414
+ 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
8415
  list: "isolate -mx-2.5 -mt-1.5",
8041
8416
  item: "",
8042
8417
  listWithChildren: "ms-5 border-s border-default",
@@ -8047,7 +8422,7 @@ const contentNavigation = (options) => ({
8047
8422
  linkTrailing: "ms-auto inline-flex gap-1.5 items-center",
8048
8423
  linkTrailingBadge: "shrink-0",
8049
8424
  linkTrailingBadgeSize: "sm",
8050
- linkTrailingIcon: "size-5 transform transition-transform duration-200 shrink-0 group-data-[state=open]:rotate-180",
8425
+ linkTrailingIcon: "size-5 transform transition-transform duration-200 ease-out motion-reduce:transition-none shrink-0 group-data-[state=open]:rotate-180",
8051
8426
  linkTitle: "truncate",
8052
8427
  linkTitleExternalIcon: "size-3 align-top text-dimmed"
8053
8428
  },
@@ -8230,7 +8605,7 @@ const contentSurround = (options) => ({
8230
8605
  root: "grid grid-cols-1 sm:grid-cols-2 gap-8",
8231
8606
  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
8607
  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]"],
8608
+ linkLeadingIcon: ["size-5 shrink-0 text-highlighted group-hover:text-primary", options.theme.transitions && "transition-[color,translate] ease-out motion-reduce:transition-none"],
8234
8609
  linkTitle: "font-medium text-[15px] text-highlighted mb-1 truncate",
8235
8610
  linkDescription: "text-sm text-muted line-clamp-2"
8236
8611
  },
@@ -8249,15 +8624,15 @@ const contentSurround = (options) => ({
8249
8624
 
8250
8625
  const contentToc = (options) => ({
8251
8626
  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))]",
8627
+ 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
8628
  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
8629
  top: "lg:shrink-0",
8255
8630
  bottom: "hidden lg:flex lg:flex-col lg:shrink-0 gap-6",
8256
8631
  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
8632
  title: "truncate",
8258
8633
  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",
8634
+ trailingIcon: "size-5 transform transition-transform duration-200 ease-out motion-reduce:transition-none shrink-0 group-data-[state=open]:rotate-180 lg:hidden",
8635
+ 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
8636
  list: "min-w-0",
8262
8637
  listWithChildren: "ms-3",
8263
8638
  item: "min-w-0",
@@ -8317,7 +8692,7 @@ const contentToc = (options) => ({
8317
8692
  class: {
8318
8693
  list: "ms-2.5 ps-4 border-s border-default",
8319
8694
  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",
8695
+ 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
8696
  indicatorLine: "hidden",
8322
8697
  indicatorActive: "w-full h-full"
8323
8698
  }
@@ -8330,7 +8705,7 @@ const contentToc = (options) => ({
8330
8705
  itemWithChildren: "ps-px",
8331
8706
  indicator: "absolute ms-2.5 start-0 top-0 rtl:-scale-x-100",
8332
8707
  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"
8708
+ indicatorActive: "absolute w-full h-(--indicator-size) translate-y-(--indicator-position) transition-[translate,height] duration-200 ease-out motion-reduce:transition-none"
8334
8709
  }
8335
8710
  }],
8336
8711
  defaultVariants: {
@@ -8349,7 +8724,7 @@ const themeContent = {
8349
8724
  contentToc: contentToc
8350
8725
  };
8351
8726
 
8352
- function getTemplates(options, uiConfig, nuxt, resolve) {
8727
+ function getTemplates(options, uiConfig, nuxt, resolve, vue) {
8353
8728
  const templates = [];
8354
8729
  let hasProse = false;
8355
8730
  let hasContent = false;
@@ -8362,8 +8737,9 @@ function getTemplates(options, uiConfig, nuxt, resolve) {
8362
8737
  getContents: async () => {
8363
8738
  const template = theme2[component];
8364
8739
  let result = typeof template === "function" ? template(options) : template;
8740
+ const unused = path !== "prose" && !!vue?.detectedComponents?.size && !Array.from(vue.detectedComponents).some((detected) => camelCase(detected) === component);
8365
8741
  result = applyDefaultVariants(result, options.theme?.defaultVariants);
8366
- result = applyUnstyled(result, options.theme?.unstyled);
8742
+ result = applyUnstyled(result, options.theme?.unstyled || unused);
8367
8743
  result = applyPrefixToObject(result, options.theme?.prefix);
8368
8744
  const variants = Object.entries(result.variants || {}).filter(([_, values]) => {
8369
8745
  const keys = Object.keys(values);
@@ -8407,29 +8783,29 @@ function getTemplates(options, uiConfig, nuxt, resolve) {
8407
8783
  }
8408
8784
  writeThemeTemplate(theme);
8409
8785
  async function generateSources() {
8410
- if (!nuxt) {
8411
- return '@source "./ui";';
8412
- }
8413
8786
  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)});`);
8787
+ const layers = nuxt ? getLayerDirectories(nuxt).map((layer) => layer.app) : [];
8788
+ if (nuxt) {
8789
+ for (const layer of layers) {
8790
+ sources.push(`@source "${layer}**/*";`);
8791
+ }
8792
+ const inlineConfigs = [
8793
+ nuxt.options.app?.rootAttrs?.class,
8794
+ nuxt.options.app?.head?.htmlAttrs?.class,
8795
+ nuxt.options.app?.head?.bodyAttrs?.class
8796
+ ];
8797
+ for (const value of inlineConfigs) {
8798
+ if (value && typeof value === "string") {
8799
+ sources.push(`@source inline(${JSON.stringify(value)});`);
8800
+ }
8426
8801
  }
8427
8802
  }
8428
- if (resolve && options.experimental?.componentDetection) {
8803
+ const componentDir = resolve ? resolve("./runtime/components") : void 0;
8804
+ if (options.experimental?.componentDetection && nuxt && componentDir && layers.length) {
8429
8805
  const detectedComponents = await detectUsedComponents(
8430
8806
  layers,
8431
8807
  options.prefix,
8432
- resolve("./runtime/components"),
8808
+ componentDir,
8433
8809
  Array.isArray(options.experimental.componentDetection) ? options.experimental.componentDetection : void 0
8434
8810
  );
8435
8811
  if (detectedComponents && detectedComponents.size > 0) {
@@ -8633,7 +9009,7 @@ function addTemplates(options, nuxt, resolve) {
8633
9009
  });
8634
9010
  if (options.experimental?.componentDetection && nuxt.options.dev) {
8635
9011
  nuxt.hook("builder:watch", async (_, path) => {
8636
- if (/\.(?:vue|ts|js|tsx|jsx)$/.test(path)) {
9012
+ if (/\.(?:vue|ts|mts|js|mjs|cjs|tsx|jsx)$/.test(path)) {
8637
9013
  await updateTemplates({ filter: (template) => template.filename === "ui.css" });
8638
9014
  }
8639
9015
  });
@@ -8694,4 +9070,4 @@ function getClientBundleIcons(icons = {}) {
8694
9070
  return [...names];
8695
9071
  }
8696
9072
 
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 };
9073
+ 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 };