@vamos-ui/react 0.3.0 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (274) hide show
  1. package/README.md +4 -0
  2. package/dist/blocks/block-heading.js +1 -1
  3. package/dist/blocks/block-image.js +1 -1
  4. package/dist/blocks/block-link.js +2 -2
  5. package/dist/blocks/index.d.ts +5 -5
  6. package/dist/blocks/index.js +5 -5
  7. package/dist/blocks/labels.d.ts +8 -0
  8. package/dist/blocks/labels.js +60 -0
  9. package/dist/blocks/section-header.js +1 -1
  10. package/dist/blocks/section.js +2 -2
  11. package/dist/blocks/site/_kit-1.js +1 -1
  12. package/dist/blocks/site/announcement-bar.js +1 -1
  13. package/dist/blocks/site/article-layout.d.ts +1 -0
  14. package/dist/blocks/site/article-layout.js +2 -1
  15. package/dist/blocks/site/blog-list.d.ts +1 -0
  16. package/dist/blocks/site/blog-list.js +3 -2
  17. package/dist/blocks/site/contact-dock.js +3 -1
  18. package/dist/blocks/site/contact-form.js +1 -1
  19. package/dist/blocks/site/cta.d.ts +2 -2
  20. package/dist/blocks/site/cta.js +6 -4
  21. package/dist/blocks/site/feature-grid.d.ts +1 -0
  22. package/dist/blocks/site/feature-grid.js +5 -4
  23. package/dist/blocks/site/feature-tabs.js +1 -1
  24. package/dist/blocks/site/footer.d.ts +11 -2
  25. package/dist/blocks/site/footer.js +36 -11
  26. package/dist/blocks/site/gallery-section.d.ts +6 -1
  27. package/dist/blocks/site/gallery-section.js +5 -4
  28. package/dist/blocks/site/hero.d.ts +3 -2
  29. package/dist/blocks/site/hero.js +7 -5
  30. package/dist/blocks/site/logo-strip.d.ts +1 -0
  31. package/dist/blocks/site/logo-strip.js +1 -1
  32. package/dist/blocks/site/map-hours.d.ts +2 -2
  33. package/dist/blocks/site/map-hours.js +4 -2
  34. package/dist/blocks/site/media-text.d.ts +4 -1
  35. package/dist/blocks/site/media-text.js +4 -3
  36. package/dist/blocks/site/menu-list.d.ts +7 -3
  37. package/dist/blocks/site/menu-list.js +34 -7
  38. package/dist/blocks/site/navbar.d.ts +1 -0
  39. package/dist/blocks/site/navbar.js +6 -5
  40. package/dist/blocks/site/not-found.js +2 -1
  41. package/dist/blocks/site/page-intro.d.ts +1 -0
  42. package/dist/blocks/site/page-intro.js +2 -1
  43. package/dist/blocks/site/process.d.ts +1 -0
  44. package/dist/blocks/site/process.js +2 -1
  45. package/dist/blocks/site/registry-1.d.ts +1 -1
  46. package/dist/blocks/site/registry-2.d.ts +5 -0
  47. package/dist/blocks/site/registry-2.js +5 -3
  48. package/dist/blocks/site/rich-text-section.js +2 -1
  49. package/dist/blocks/site/shared/heading-lines.d.ts +9 -0
  50. package/dist/blocks/site/shared/heading-lines.js +32 -0
  51. package/dist/blocks/site/shared/image-sizes.d.ts +25 -0
  52. package/dist/blocks/site/shared/image-sizes.js +37 -0
  53. package/dist/blocks/site/shared/island-keys.d.ts +1 -1
  54. package/dist/blocks/site/shared/island-keys.js +1 -1
  55. package/dist/blocks/site/shared/labels-2.d.ts +17 -1
  56. package/dist/blocks/site/shared/labels-2.js +832 -6
  57. package/dist/blocks/site/shared/open-now.d.ts +1 -1
  58. package/dist/blocks/site/shared/open-now.js +1 -1
  59. package/dist/blocks/site/shared/opening-hours.d.ts +18 -2
  60. package/dist/blocks/site/shared/opening-hours.js +36 -7
  61. package/dist/blocks/site/shared/tap.d.ts +9 -0
  62. package/dist/blocks/site/shared/tap.js +16 -0
  63. package/dist/blocks/site/site-shell.js +3 -3
  64. package/dist/blocks/site/team.d.ts +1 -1
  65. package/dist/blocks/site/team.js +4 -3
  66. package/dist/blocks/site/testimonials.d.ts +2 -2
  67. package/dist/blocks/site/testimonials.js +3 -3
  68. package/dist/business/approval-flow.js +2 -2
  69. package/dist/business/import-wizard.js +1 -1
  70. package/dist/business/line-items.js +1 -1
  71. package/dist/business/multi-step-form.js +2 -2
  72. package/dist/business/permission-matrix.js +1 -1
  73. package/dist/business/setup-checklist.js +2 -2
  74. package/dist/business/signer-status.js +1 -1
  75. package/dist/charts/bar-chart.js +1 -1
  76. package/dist/charts/bar-list.js +1 -1
  77. package/dist/charts/chart-shell.d.ts +9 -2
  78. package/dist/charts/chart-shell.js +11 -5
  79. package/dist/charts/chart.js +1 -1
  80. package/dist/charts/combo-chart.js +5 -7
  81. package/dist/charts/donut-chart.js +1 -1
  82. package/dist/charts/funnel.js +1 -1
  83. package/dist/charts/gauge.js +2 -2
  84. package/dist/charts/utils.d.ts +10 -0
  85. package/dist/charts/utils.js +46 -0
  86. package/dist/components/accordion.d.ts +1 -1
  87. package/dist/components/accordion.js +8 -8
  88. package/dist/components/activity-timeline.js +11 -11
  89. package/dist/components/address-field.js +3 -3
  90. package/dist/components/alert-dialog.d.ts +1 -1
  91. package/dist/components/alert-dialog.js +8 -8
  92. package/dist/components/alert.js +2 -2
  93. package/dist/components/app-shell.js +3 -3
  94. package/dist/components/aspect-ratio.d.ts +26 -0
  95. package/dist/components/aspect-ratio.js +42 -0
  96. package/dist/components/attachment-list.js +2 -2
  97. package/dist/components/audit-log.js +1 -1
  98. package/dist/components/avatar.d.ts +1 -1
  99. package/dist/components/avatar.js +8 -8
  100. package/dist/components/backup-codes.js +1 -1
  101. package/dist/components/badge.js +3 -3
  102. package/dist/components/breadcrumb.js +10 -9
  103. package/dist/components/button-group.js +4 -4
  104. package/dist/components/button.js +4 -4
  105. package/dist/components/calendar.js +5 -5
  106. package/dist/components/card.js +8 -8
  107. package/dist/components/carousel.d.ts +12 -3
  108. package/dist/components/carousel.js +17 -14
  109. package/dist/components/checkbox.d.ts +1 -1
  110. package/dist/components/checkbox.js +6 -6
  111. package/dist/components/collapsible.d.ts +36 -0
  112. package/dist/components/collapsible.js +37 -0
  113. package/dist/components/color-picker.js +3 -3
  114. package/dist/components/combobox.js +1 -1
  115. package/dist/components/command.js +9 -9
  116. package/dist/components/comment-thread.js +3 -3
  117. package/dist/components/context-menu.d.ts +1 -1
  118. package/dist/components/context-menu.js +9 -9
  119. package/dist/components/currency-input.js +1 -1
  120. package/dist/components/date-picker.js +2 -2
  121. package/dist/components/date-range-picker.js +1 -1
  122. package/dist/components/description-list.js +2 -2
  123. package/dist/components/dialog.d.ts +1 -1
  124. package/dist/components/dialog.js +9 -9
  125. package/dist/components/dropdown-menu.d.ts +1 -1
  126. package/dist/components/dropdown-menu.js +9 -9
  127. package/dist/components/editor-layout.js +9 -9
  128. package/dist/components/empty-state.js +2 -2
  129. package/dist/components/entity-card.js +1 -1
  130. package/dist/components/file-upload.js +5 -5
  131. package/dist/components/formatted-input.js +3 -3
  132. package/dist/components/hierarchy-chart.js +1 -1
  133. package/dist/components/hover-card.d.ts +1 -1
  134. package/dist/components/hover-card.js +3 -3
  135. package/dist/components/iban-input.js +1 -1
  136. package/dist/components/id-input.js +3 -3
  137. package/dist/components/image.d.ts +18 -2
  138. package/dist/components/image.js +16 -9
  139. package/dist/components/input-otp.js +6 -6
  140. package/dist/components/input.d.ts +1 -1
  141. package/dist/components/input.js +6 -6
  142. package/dist/components/item.js +4 -4
  143. package/dist/components/kbd.js +3 -3
  144. package/dist/components/list-layout.js +9 -9
  145. package/dist/components/menubar.d.ts +96 -0
  146. package/dist/components/menubar.js +123 -0
  147. package/dist/components/native-select.js +1 -1
  148. package/dist/components/navigation-menu.d.ts +1 -1
  149. package/dist/components/navigation-menu.js +12 -11
  150. package/dist/components/notification-center.js +4 -4
  151. package/dist/components/page-header.js +3 -3
  152. package/dist/components/pagination.js +9 -9
  153. package/dist/components/phone-input.js +1 -1
  154. package/dist/components/pin-map.js +1 -1
  155. package/dist/components/placeholder-art.d.ts +51 -0
  156. package/dist/components/placeholder-art.js +82 -0
  157. package/dist/components/popover.d.ts +1 -1
  158. package/dist/components/popover.js +7 -7
  159. package/dist/components/progress.js +3 -3
  160. package/dist/components/qr-code.js +1 -1
  161. package/dist/components/radio-group.d.ts +1 -1
  162. package/dist/components/radio-group.js +4 -4
  163. package/dist/components/record-detail-layout.js +10 -10
  164. package/dist/components/record-picker.js +2 -2
  165. package/dist/components/resizable.js +2 -2
  166. package/dist/components/scroll-area.d.ts +1 -1
  167. package/dist/components/scroll-area.js +4 -4
  168. package/dist/components/select.d.ts +1 -1
  169. package/dist/components/select.js +10 -10
  170. package/dist/components/separator.d.ts +1 -1
  171. package/dist/components/separator.js +3 -3
  172. package/dist/components/settings-layout.js +6 -6
  173. package/dist/components/sheet.js +3 -3
  174. package/dist/components/sidebar.js +12 -11
  175. package/dist/components/signature-pad.js +1 -1
  176. package/dist/components/skeleton.js +5 -5
  177. package/dist/components/sla-timer.js +2 -2
  178. package/dist/components/slider.d.ts +1 -1
  179. package/dist/components/slider.js +2 -2
  180. package/dist/components/slug-input.js +1 -1
  181. package/dist/components/sparkline.js +1 -1
  182. package/dist/components/spinner.js +2 -2
  183. package/dist/components/stat.js +5 -5
  184. package/dist/components/status-picker.js +2 -2
  185. package/dist/components/stepper.js +1 -1
  186. package/dist/components/switch.d.ts +1 -1
  187. package/dist/components/switch.js +3 -3
  188. package/dist/components/table.js +10 -10
  189. package/dist/components/tabs.d.ts +1 -1
  190. package/dist/components/tabs.js +11 -11
  191. package/dist/components/tag-input.js +1 -1
  192. package/dist/components/task-list.js +1 -1
  193. package/dist/components/time-picker.js +3 -3
  194. package/dist/components/toggle.d.ts +2 -1
  195. package/dist/components/toggle.js +7 -6
  196. package/dist/components/tooltip.d.ts +1 -1
  197. package/dist/components/tooltip.js +5 -4
  198. package/dist/components/top-bar.js +4 -4
  199. package/dist/components/tour.js +1 -1
  200. package/dist/components/tree-select.js +2 -2
  201. package/dist/components/tree-view.js +3 -3
  202. package/dist/components/typography.js +11 -11
  203. package/dist/components/user-picker.js +2 -2
  204. package/dist/components/version-history.js +3 -3
  205. package/dist/data-table/data-table.js +1 -1
  206. package/dist/data-table/filter-bar.js +2 -2
  207. package/dist/data-table/index.d.ts +15 -8
  208. package/dist/data-table/index.js +9 -8
  209. package/dist/data-table/saved-views.js +1 -1
  210. package/dist/editor/block-editor.js +1 -1
  211. package/dist/editor/context.js +1 -1
  212. package/dist/editor/menus.js +1 -1
  213. package/dist/fonts/font-picker.js +3 -3
  214. package/dist/fonts/pairing-picker.js +1 -1
  215. package/dist/fonts/provider.js +1 -1
  216. package/dist/index.d.ts +188 -90
  217. package/dist/index.js +94 -90
  218. package/dist/lib/data-islands.js +1 -1
  219. package/dist/lib/field-context.js +1 -1
  220. package/dist/lib/floating-arrow.js +1 -1
  221. package/dist/lib/islands.js +1 -1
  222. package/dist/lib/layer.js +3 -3
  223. package/dist/lib/locale.js +2 -2
  224. package/dist/lib/menu.js +2 -2
  225. package/dist/lib/provider.js +4 -4
  226. package/dist/lib/theme-scope.js +4 -3
  227. package/dist/lib/value-format.js +1 -1
  228. package/dist/lib/variants.js +2 -2
  229. package/dist/locales/ar.d.ts +2087 -0
  230. package/dist/locales/ar.js +2088 -0
  231. package/dist/locales/de.d.ts +2087 -0
  232. package/dist/locales/de.js +2088 -0
  233. package/dist/locales/en.d.ts +1 -0
  234. package/dist/locales/en.js +1 -0
  235. package/dist/locales/es.d.ts +2087 -0
  236. package/dist/locales/es.js +2087 -0
  237. package/dist/locales/fr.d.ts +2087 -0
  238. package/dist/locales/fr.js +2088 -0
  239. package/dist/locales/tr.d.ts +1 -0
  240. package/dist/locales/tr.js +1 -0
  241. package/dist/media/focal-point.js +1 -1
  242. package/dist/media/gallery.js +1 -1
  243. package/dist/media/image-cropper.js +1 -1
  244. package/dist/media/image-field.js +2 -2
  245. package/dist/media/lightbox.js +4 -3
  246. package/dist/media/link-preview.js +3 -3
  247. package/dist/media/media-library.js +4 -4
  248. package/dist/media/media-picker.js +1 -1
  249. package/dist/media/media-provider.js +1 -1
  250. package/dist/media/video-player.js +4 -4
  251. package/dist/motion/count-up.js +1 -1
  252. package/dist/motion/motion-scope.js +2 -2
  253. package/dist/motion/page-transition.js +1 -1
  254. package/dist/motion/parallax.js +2 -2
  255. package/dist/motion/pointer.js +3 -3
  256. package/dist/motion/reveal.js +3 -3
  257. package/dist/motion/skeleton-swap.js +1 -1
  258. package/dist/motion/text-reveal.d.ts +3 -1
  259. package/dist/motion/text-reveal.js +6 -4
  260. package/dist/motion/ticker.js +1 -1
  261. package/dist/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
  262. package/dist/render/block-renderer.js +1 -1
  263. package/dist/scheduler/gantt.js +2 -2
  264. package/dist/scheduler/resource-calendar.js +2 -2
  265. package/dist/scheduler/scheduler.js +3 -3
  266. package/dist/scheduler/time-tracker.js +4 -4
  267. package/dist/sortable/kanban.js +2 -2
  268. package/dist/sortable/sortable-list.js +2 -2
  269. package/dist/sortable/sortable.js +4 -4
  270. package/dist/styles/blocks.css +18 -9
  271. package/dist/styles/editors.css +2 -1
  272. package/dist/styles/media.css +31 -5
  273. package/dist/styles.css +39 -9
  274. package/package.json +1 -1
@@ -1,7 +1,8 @@
1
1
  "use client";
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import * as React from "react";
4
- import { DropdownMenu, Slot } from "radix-ui";
4
+ import * as DropdownMenu from "radix-ui/dropdown-menu";
5
+ import * as Slot from "radix-ui/slot";
5
6
  import { ChevronRight, ChevronsUpDown, MoreHorizontal } from "lucide-react";
6
7
  import { cva } from "class-variance-authority";
7
8
  import { cn } from "../lib/cn.js";
@@ -15,7 +16,7 @@ const breadcrumbLabels = {
15
16
  showHidden: "Show hidden pages",
16
17
  siblings: "Pages next to {label}",
17
18
  };
18
- const SizeContext = React.createContext("md");
19
+ const SizeContext = /*#__PURE__*/ React.createContext("md");
19
20
  /**
20
21
  * Shows where a page sits in a hierarchy and offers a way up (WAI-ARIA Breadcrumb: `nav` + `ol`,
21
22
  * `aria-current="page"` on the last item). Links go through the app's router `Link`.
@@ -26,7 +27,7 @@ const SizeContext = React.createContext("md");
26
27
  *
27
28
  * Compound: `<Breadcrumb><BreadcrumbList><BreadcrumbItem><BreadcrumbLink href/></BreadcrumbItem><BreadcrumbSeparator/>…<BreadcrumbPage/></BreadcrumbList></Breadcrumb>`.
28
29
  */
29
- export const Breadcrumb = React.forwardRef(function Breadcrumb({ items, maxItems, separator, size = "md", jsonLd, baseUrl, labels, className, children, ...props }, ref) {
30
+ export const Breadcrumb = /*#__PURE__*/ React.forwardRef(function Breadcrumb({ items, maxItems, separator, size = "md", jsonLd, baseUrl, labels, className, children, ...props }, ref) {
30
31
  const t = useLabels("breadcrumb", breadcrumbLabels, labels);
31
32
  return (_jsx(SizeContext.Provider, { value: size, children: _jsxs("nav", { ref: ref, "aria-label": t("label"), "data-slot": "breadcrumb", className: cn("min-w-0", className), ...props, children: [items ? _jsx(BreadcrumbTrail, { items: items, maxItems: maxItems, separator: separator, labels: labels }) : children, items && jsonLd ? _jsx(BreadcrumbJsonLd, { items: items, baseUrl: baseUrl }) : null] }) }));
32
33
  });
@@ -47,29 +48,29 @@ function BreadcrumbTrail({ items, maxItems, separator, labels }) {
47
48
  return (_jsxs(React.Fragment, { children: [sep, _jsxs(BreadcrumbItem, { children: [last || !item.href ? (_jsx(BreadcrumbPage, { icon: item.icon, "aria-current": last ? "page" : undefined, children: item.label })) : (_jsx(BreadcrumbLink, { href: item.href, icon: item.icon, children: item.label })), item.menu?.length ? _jsx(BreadcrumbSiblings, { label: item.label, items: item.menu, labels: labels }) : null] })] }, index));
48
49
  }) }));
49
50
  }
50
- const listVariants = cva("flex min-w-0 flex-wrap items-center text-fg-muted", {
51
+ const listVariants = /*#__PURE__*/ cva("flex min-w-0 flex-wrap items-center text-fg-muted", {
51
52
  variants: { size: { sm: "gap-1 text-[13px] [&_svg]:size-3.5", md: "gap-1.5 text-sm [&_svg]:size-4" } },
52
53
  defaultVariants: { size: "md" },
53
54
  });
54
55
  /** The ordered list of crumbs. */
55
- export const BreadcrumbList = React.forwardRef(function BreadcrumbList({ className, ...props }, ref) {
56
+ export const BreadcrumbList = /*#__PURE__*/ React.forwardRef(function BreadcrumbList({ className, ...props }, ref) {
56
57
  const size = React.useContext(SizeContext);
57
58
  return _jsx("ol", { ref: ref, "data-slot": "breadcrumb-list", className: cn(listVariants({ size }), className), ...props });
58
59
  });
59
60
  /** One crumb (`li`). */
60
- export const BreadcrumbItem = React.forwardRef(function BreadcrumbItem({ className, ...props }, ref) {
61
+ export const BreadcrumbItem = /*#__PURE__*/ React.forwardRef(function BreadcrumbItem({ className, ...props }, ref) {
61
62
  return _jsx("li", { ref: ref, "data-slot": "breadcrumb-item", className: cn("inline-flex min-w-0 items-center gap-0.5", className), ...props });
62
63
  });
63
64
  const crumbClass = "inline-flex min-w-0 max-w-[16rem] items-center gap-1.5 rounded-ui-sm [&_svg]:shrink-0";
64
65
  /** A crumb that links up the hierarchy. Uses the app's router `Link` (external URLs open in a new tab). */
65
- export const BreadcrumbLink = React.forwardRef(function BreadcrumbLink({ href, icon, asChild, className, children, title, ...props }, ref) {
66
+ export const BreadcrumbLink = /*#__PURE__*/ React.forwardRef(function BreadcrumbLink({ href, icon, asChild, className, children, title, ...props }, ref) {
66
67
  const classes = cn(crumbClass, "transition-colors hover:text-fg focus-ring", className);
67
68
  if (asChild)
68
69
  return _jsx(Slot.Root, { ref: ref, "data-slot": "breadcrumb-link", className: classes, ...props, children: children });
69
70
  return (_jsxs(SmartLink, { ref: ref, href: href ?? "#", "data-slot": "breadcrumb-link", className: classes, title: title ?? (typeof children === "string" ? children : undefined), ...props, children: [icon ? _jsx("span", { "aria-hidden": true, className: "inline-flex", children: icon }) : null, _jsx("span", { className: "truncate", children: children })] }));
70
71
  });
71
72
  /** The current page: plain text, `aria-current="page"` (override for a non-link middle crumb). */
72
- export const BreadcrumbPage = React.forwardRef(function BreadcrumbPage({ icon, className, children, title, ...props }, ref) {
73
+ export const BreadcrumbPage = /*#__PURE__*/ React.forwardRef(function BreadcrumbPage({ icon, className, children, title, ...props }, ref) {
73
74
  const current = !("aria-current" in props) || props["aria-current"] !== undefined;
74
75
  return (_jsxs("span", { ref: ref, "data-slot": "breadcrumb-page", "aria-current": "page", title: title ?? (typeof children === "string" ? children : undefined), className: cn(crumbClass, current ? "font-medium text-fg" : "text-fg-muted", className), ...props, children: [icon ? _jsx("span", { "aria-hidden": true, className: "inline-flex", children: icon }) : null, _jsx("span", { className: "truncate", children: children })] }));
75
76
  });
@@ -84,7 +85,7 @@ function CrumbMenu({ trigger, items }) {
84
85
  }
85
86
  const iconTrigger = "inline-flex size-6 items-center justify-center rounded-ui-sm text-fg-subtle transition-colors hover:bg-hover hover:text-fg focus-ring data-[state=open]:bg-hover data-[state=open]:text-fg";
86
87
  /** "…" for collapsed crumbs; opens a menu with the hidden pages. */
87
- export const BreadcrumbEllipsis = React.forwardRef(function BreadcrumbEllipsis({ items, labels, className, ...props }, ref) {
88
+ export const BreadcrumbEllipsis = /*#__PURE__*/ React.forwardRef(function BreadcrumbEllipsis({ items, labels, className, ...props }, ref) {
88
89
  const t = useLabels("breadcrumb", breadcrumbLabels, labels);
89
90
  if (!items?.length) {
90
91
  return (_jsxs("span", { "data-slot": "breadcrumb-ellipsis", className: "inline-flex size-6 items-center justify-center text-fg-subtle", children: [_jsx(MoreHorizontal, { "aria-hidden": true }), _jsx("span", { className: "sr-only", children: t("showHidden") })] }));
@@ -7,7 +7,7 @@ import { Button, IconButton } from "./button.js";
7
7
  * Merged-edge styling for any row of controls. Corner rounding is done with logical
8
8
  * properties (`rounded-s` / `rounded-e`), so the group is RTL-safe.
9
9
  */
10
- export const buttonGroupVariants = cva("relative isolate inline-flex w-fit max-w-full", {
10
+ export const buttonGroupVariants = /*#__PURE__*/ cva("relative isolate inline-flex w-fit max-w-full", {
11
11
  variants: {
12
12
  orientation: {
13
13
  horizontal: "flex-row items-stretch",
@@ -48,7 +48,7 @@ export const buttonGroupVariants = cva("relative isolate inline-flex w-fit max-w
48
48
  * For a selected state (view switch, text alignment) use `ToggleGroup`; for a form value use
49
49
  * `RadioGroup variant="segmented"`.
50
50
  */
51
- export const ButtonGroup = React.forwardRef(function ButtonGroup({ attached = true, orientation = "horizontal", variant, size, className, children, ...props }, ref) {
51
+ export const ButtonGroup = /*#__PURE__*/ React.forwardRef(function ButtonGroup({ attached = true, orientation = "horizontal", variant, size, className, children, ...props }, ref) {
52
52
  const content = variant || size
53
53
  ? React.Children.map(children, (child) => {
54
54
  if (!React.isValidElement(child))
@@ -68,10 +68,10 @@ export const ButtonGroup = React.forwardRef(function ButtonGroup({ attached = tr
68
68
  * Hairline between two attached buttons that share a fill (a primary split button), where
69
69
  * the merged border would otherwise disappear.
70
70
  */
71
- export const ButtonGroupSeparator = React.forwardRef(function ButtonGroupSeparator({ orientation = "vertical", className, ...props }, ref) {
71
+ export const ButtonGroupSeparator = /*#__PURE__*/ React.forwardRef(function ButtonGroupSeparator({ orientation = "vertical", className, ...props }, ref) {
72
72
  return (_jsx("div", { ref: ref, "aria-hidden": true, "data-slot": "button-group-separator", className: cn("relative z-20 shrink-0 self-stretch bg-(--group-sep,var(--field-border))", orientation === "vertical" ? "w-px" : "h-px", className), ...props }));
73
73
  });
74
74
  /** A static segment inside a group: "21–40 of 340", a unit, a prefix. */
75
- export const ButtonGroupText = React.forwardRef(function ButtonGroupText({ size = "md", className, ...props }, ref) {
75
+ export const ButtonGroupText = /*#__PURE__*/ React.forwardRef(function ButtonGroupText({ size = "md", className, ...props }, ref) {
76
76
  return (_jsx("span", { ref: ref, "data-slot": "button-group-text", className: cn("inline-flex shrink-0 items-center whitespace-nowrap border border-field-border bg-surface-2 font-medium tabular text-fg-muted [&_svg]:size-4", size === "xs" ? "h-7 rounded-ui-sm px-2.5 text-xs" : size === "sm" ? "h-8 rounded-ui-sm px-3 text-[13px]" : size === "lg" ? "h-12 rounded-ui px-5 text-[15px]" : "h-(--control-h) rounded-ui px-3.5 text-sm", className), ...props }));
77
77
  });
@@ -1,11 +1,11 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import * as React from "react";
3
- import { Slot } from "radix-ui";
3
+ import * as Slot from "radix-ui/slot";
4
4
  import { cva } from "class-variance-authority";
5
5
  import { cn } from "../lib/cn.js";
6
6
  import { Spinner } from "./spinner.js";
7
7
  import { IconButtonTooltip } from "./tooltip.js";
8
- export const buttonVariants = cva([
8
+ export const buttonVariants = /*#__PURE__*/ cva([
9
9
  "relative inline-flex shrink-0 select-none items-center justify-center whitespace-nowrap font-medium",
10
10
  "transition-[background-color,border-color,box-shadow,color,filter,opacity] duration-150 focus-ring",
11
11
  "disabled:pointer-events-none disabled:opacity-45 aria-disabled:pointer-events-none aria-disabled:opacity-45",
@@ -56,7 +56,7 @@ const spinnerSize = (size) => (size === "xs" || size === "sm" || size === "icon-
56
56
  * Defaults to `type="button"` (no accidental form submits). With `asChild` + `disabled`/`loading`
57
57
  * the element gets `aria-disabled`, leaves the tab order and ignores clicks.
58
58
  */
59
- export const Button = React.forwardRef(function Button({ className, variant, size, block, pill, asChild, loading, loadingText, loadingMode = "inline", disabled, children, type, onClick, ...props }, ref) {
59
+ export const Button = /*#__PURE__*/ React.forwardRef(function Button({ className, variant, size, block, pill, asChild, loading, loadingText, loadingMode = "inline", disabled, children, type, onClick, ...props }, ref) {
60
60
  const classes = cn(buttonVariants({ variant, size, block, pill }), className);
61
61
  const state = {
62
62
  "data-slot": "button",
@@ -99,7 +99,7 @@ const iconSize = { xs: "icon-xs", sm: "icon-sm", md: "icon", lg: "icon-lg" };
99
99
  * <IconButton label="Edit" shortcut="mod+e"><Pencil /></IconButton>
100
100
  * ```
101
101
  */
102
- export const IconButton = React.forwardRef(function IconButton({ label, size = "md", variant = "ghost", title, loading, tooltip = true, tooltipSide, shortcut, children, ...props }, ref) {
102
+ export const IconButton = /*#__PURE__*/ React.forwardRef(function IconButton({ label, size = "md", variant = "ghost", title, loading, tooltip = true, tooltipSide, shortcut, children, ...props }, ref) {
103
103
  if (tooltip === false) {
104
104
  return (_jsx(Button, { ref: ref, "aria-label": label, title: title ?? label, variant: variant, size: iconSize[size], loading: loading, loadingMode: "replace", ...props, children: children }));
105
105
  }
@@ -73,7 +73,7 @@ export function useCalendarWeek(locale) {
73
73
  weekend: info.weekend,
74
74
  }), [info]);
75
75
  }
76
- const GridContext = React.createContext({ size: "md" });
76
+ const GridContext = /*#__PURE__*/ React.createContext({ size: "md" });
77
77
  // Modifiers surfaced as data attributes on the day cell (in addition to rdp's own).
78
78
  const DATA_MODIFIERS = {
79
79
  range_start: "data-range-start",
@@ -116,7 +116,7 @@ function GridChevron({ orientation = "left", className }) {
116
116
  const Icon = orientation === "right" ? ChevronRight : orientation === "down" ? ChevronDown : orientation === "up" ? ChevronUp : ChevronLeft;
117
117
  return _jsx(Icon, { "aria-hidden": true, className: cn("size-4", (orientation === "left" || orientation === "right") && "rtl:-scale-x-100", className) });
118
118
  }
119
- const MonthDateContext = React.createContext(null);
119
+ const MonthDateContext = /*#__PURE__*/ React.createContext(null);
120
120
  function GridMonthCaption({ calendarMonth, displayIndex: _i, ...props }) {
121
121
  return (_jsx(MonthDateContext.Provider, { value: calendarMonth.date, children: _jsx("div", { ...props }) }));
122
122
  }
@@ -262,7 +262,7 @@ function initialSelectionMonth(props) {
262
262
  * <Calendar months={12} size="sm" markers={density} />
263
263
  * ```
264
264
  */
265
- export const Calendar = React.forwardRef(function Calendar(props, ref) {
265
+ export const Calendar = /*#__PURE__*/ React.forwardRef(function Calendar(props, ref) {
266
266
  const { months = 1, month: monthProp, defaultMonth, onMonthChange, onVisibleRangeChange, min, max, disabledDays, required, showWeekNumbers, holidays: holidaysProp, holidayRegion, markers, renderDay, size: sizeProp, variant = "plain", header = true, headerAction, legend, loading, weekStartsOn, footer, gridProps, className, id, labels, } = props;
267
267
  const mode = props.mode ?? "single";
268
268
  const t = useLabels("calendar", calendarLabels, labels);
@@ -428,7 +428,7 @@ export const Calendar = React.forwardRef(function Calendar(props, ref) {
428
428
  }, ...restGrid }), legendItems.length ? _jsx(CalendarLegend, { items: legendItems }) : null] }));
429
429
  });
430
430
  /** Key for the marks on a Calendar (dot tones, holidays, today). */
431
- export const CalendarLegend = React.forwardRef(function CalendarLegend({ items, className, labels: _labels, ...props }, ref) {
431
+ export const CalendarLegend = /*#__PURE__*/ React.forwardRef(function CalendarLegend({ items, className, labels: _labels, ...props }, ref) {
432
432
  return (_jsx("ul", { ref: ref, "data-slot": "calendar-legend", className: cn("flex flex-wrap items-center gap-x-4 gap-y-1.5 text-xs text-fg-muted", className), ...props, children: items.map((item, i) => (_jsxs("li", { className: "inline-flex items-center gap-1.5", children: [item.kind === "holiday" ? (_jsx("span", { "aria-hidden": true, className: "ui-cal-legend-holiday" })) : item.kind === "today" ? (_jsx("span", { "aria-hidden": true, className: "h-0.5 w-3 rounded-full bg-accent-ink" })) : (_jsx("span", { "aria-hidden": true, className: "size-1.5 rounded-full", style: { background: toneVar[item.tone ?? "accent"] } })), item.label] }, i))) }));
433
433
  });
434
434
  /**
@@ -439,7 +439,7 @@ export const CalendarLegend = React.forwardRef(function CalendarLegend({ items,
439
439
  * <CalendarSlots day={day} slots={slots} value={time} onValueChange={setTime} />
440
440
  * ```
441
441
  */
442
- export const CalendarSlots = React.forwardRef(function CalendarSlots({ slots, value: valueProp, defaultValue, onValueChange, day, loading, error, onRetry, hourCycle, columns = 3, labels, className, ...props }, ref) {
442
+ export const CalendarSlots = /*#__PURE__*/ React.forwardRef(function CalendarSlots({ slots, value: valueProp, defaultValue, onValueChange, day, loading, error, onRetry, hourCycle, columns = 3, labels, className, ...props }, ref) {
443
443
  const t = useLabels("calendar", calendarLabels, labels);
444
444
  const { locale, format } = useLocale();
445
445
  const [value, setValue] = useControllableState({ value: valueProp, defaultValue: defaultValue ?? null, onChange: onValueChange, name: "CalendarSlots" });
@@ -1,10 +1,10 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import * as React from "react";
3
- import { Slot } from "radix-ui";
3
+ import * as Slot from "radix-ui/slot";
4
4
  import { cva } from "class-variance-authority";
5
5
  import { cn } from "../lib/cn.js";
6
6
  import { SkeletonText } from "./skeleton.js";
7
- export const cardVariants = cva("relative block [--card-p:var(--gap)]", {
7
+ export const cardVariants = /*#__PURE__*/ cva("relative block [--card-p:var(--gap)]", {
8
8
  variants: {
9
9
  variant: {
10
10
  /** The main surface: glass or solid from tokens. */
@@ -40,12 +40,12 @@ export const cardVariants = cva("relative block [--card-p:var(--gap)]", {
40
40
  * </Card>
41
41
  * ```
42
42
  */
43
- export const Card = React.forwardRef(function Card({ className, variant, padding, interactive, asChild, as = "div", loading, selected, ...props }, ref) {
43
+ export const Card = /*#__PURE__*/ React.forwardRef(function Card({ className, variant, padding, interactive, asChild, as = "div", loading, selected, ...props }, ref) {
44
44
  const Comp = (asChild ? Slot.Root : as);
45
45
  return (_jsx(Comp, { ref: ref, "data-slot": "card", "data-variant": variant ?? "surface", "data-selected": selected ? "" : undefined, "aria-busy": loading || undefined, className: cn(cardVariants({ variant, padding, interactive }), selected && "border-accent-ink! ring-1 ring-accent-ink", className), ...props }));
46
46
  });
47
47
  /** Prop-based header (title, description, action). For custom layouts compose CardTitle / CardDescription / CardAction. */
48
- export const CardHeader = React.forwardRef(function CardHeader({ eyebrow, title, description, action, titleAs = "h3", titleId, divider, className, children, ...props }, ref) {
48
+ export const CardHeader = /*#__PURE__*/ React.forwardRef(function CardHeader({ eyebrow, title, description, action, titleAs = "h3", titleId, divider, className, children, ...props }, ref) {
49
49
  return (_jsxs("div", { ref: ref, "data-slot": "card-header", className: cn("flex items-start justify-between gap-4 px-(--card-p,1.25rem) pt-[calc(var(--card-p,1.25rem)*0.8)] pb-[calc(var(--card-p,1.25rem)*0.6)]", divider && "border-b border-line pb-[calc(var(--card-p,1.25rem)*0.8)]", className), ...props, children: [_jsxs("div", { className: "min-w-0", children: [eyebrow ? _jsx(CardEyebrow, { children: eyebrow }) : null, title ? (_jsx(CardTitle, { as: titleAs, id: titleId, children: title })) : null, description ? _jsx(CardDescription, { children: description }) : null, children] }), action ? _jsx(CardAction, { children: action }) : null] }));
50
50
  });
51
51
  /** Small mono line above a title. */
@@ -53,7 +53,7 @@ export function CardEyebrow({ className, ...props }) {
53
53
  return _jsx("p", { "data-slot": "card-eyebrow", className: cn("mb-1 font-mono text-[11px] tracking-[0.06em] text-fg-subtle", className), ...props });
54
54
  }
55
55
  /** Card title. Default `<h3>`. */
56
- export const CardTitle = React.forwardRef(function CardTitle({ as: Tag = "h3", className, ...props }, ref) {
56
+ export const CardTitle = /*#__PURE__*/ React.forwardRef(function CardTitle({ as: Tag = "h3", className, ...props }, ref) {
57
57
  return _jsx(Tag, { ref: ref, "data-slot": "card-title", className: cn("text-[15px] font-semibold tracking-[-0.01em] text-balance text-fg", className), ...props });
58
58
  });
59
59
  /** Secondary line under the title. */
@@ -64,13 +64,13 @@ export function CardDescription({ className, ...props }) {
64
64
  export function CardAction({ className, ...props }) {
65
65
  return _jsx("div", { "data-slot": "card-action", className: cn("flex shrink-0 items-center gap-1.5", className), ...props });
66
66
  }
67
- export const CardBody = React.forwardRef(function CardBody({ className, loading, loadingLines = 3, children, ...props }, ref) {
67
+ export const CardBody = /*#__PURE__*/ React.forwardRef(function CardBody({ className, loading, loadingLines = 3, children, ...props }, ref) {
68
68
  return (_jsx("div", { ref: ref, "data-slot": "card-body", className: cn("px-(--card-p,1.25rem) pb-(--card-p,1.25rem)", className), ...props, children: loading ? _jsx(SkeletonText, { lines: loadingLines }) : children }));
69
69
  });
70
- export const CardFooter = React.forwardRef(function CardFooter({ className, ...props }, ref) {
70
+ export const CardFooter = /*#__PURE__*/ React.forwardRef(function CardFooter({ className, ...props }, ref) {
71
71
  return (_jsx("div", { ref: ref, "data-slot": "card-footer", className: cn("flex items-center gap-2 border-t border-line px-(--card-p,1.25rem) py-[calc(var(--card-p,1.25rem)*0.6)]", className), ...props }));
72
72
  });
73
73
  /** A secondary tile inside a card (`surface-2`, never blurs). */
74
- export const Inset = React.forwardRef(function Inset({ className, ...props }, ref) {
74
+ export const Inset = /*#__PURE__*/ React.forwardRef(function Inset({ className, ...props }, ref) {
75
75
  return _jsx("div", { ref: ref, "data-slot": "inset", className: cn("surface-2 rounded-ui", className), ...props });
76
76
  });
@@ -19,6 +19,7 @@ declare const carouselLabels: {
19
19
  thumbs: string;
20
20
  empty: string;
21
21
  loading: string;
22
+ marqueePause: string;
22
23
  };
23
24
  export type CarouselLabels = typeof carouselLabels;
24
25
  export type CarouselPreset = "default" | "gallery" | "hero" | "strip";
@@ -161,10 +162,18 @@ export interface MarqueeProps extends React.HTMLAttributes<HTMLDivElement> {
161
162
  /** Fade the edges. Default `true`. */
162
163
  fade?: boolean;
163
164
  gap?: "sm" | "md" | "lg";
165
+ /**
166
+ * A small pause control (a native checkbox, works without JavaScript). Moving content that runs
167
+ * longer than five seconds needs one (WCAG 2.2.2). Default `true`.
168
+ */
169
+ controls?: boolean;
170
+ /** Accessible name of the pause control. Default "Pause scrolling" (dictionary `carousel.marqueePause`). */
171
+ pauseLabel?: string;
164
172
  }
165
173
  /**
166
- * Endless logo band in pure CSS: no JS, renders with SSR. The items are listed once for assistive
167
- * tech; a duplicate track (aria-hidden) closes the loop. Reduced motion: static, scrollable row.
174
+ * Endless logo band in pure CSS: renders with SSR. The items are listed once for assistive tech;
175
+ * a duplicate track (`aria-hidden` + `inert`, so its links never take focus) closes the loop.
176
+ * Pauses on hover/focus and with its pause control. Reduced motion: static, scrollable row.
168
177
  */
169
- export declare function Marquee({ label, duration, reverse, pauseOnHover, fade, gap, className, style, children, ...props }: MarqueeProps): React.JSX.Element;
178
+ export declare function Marquee({ label, duration, reverse, pauseOnHover, fade, gap, controls, pauseLabel, className, style, children, ...props }: MarqueeProps): React.JSX.Element;
170
179
  export {};
@@ -27,8 +27,9 @@ const carouselLabels = {
27
27
  thumbs: "Slide thumbnails",
28
28
  empty: "Nothing to show yet",
29
29
  loading: "Loading slides",
30
+ marqueePause: "Pause scrolling",
30
31
  };
31
- const CarouselContext = React.createContext(null);
32
+ const CarouselContext = /*#__PURE__*/ React.createContext(null);
32
33
  function useCarouselContext(part) {
33
34
  const ctx = React.useContext(CarouselContext);
34
35
  if (!ctx)
@@ -62,7 +63,7 @@ export function useCarousel() {
62
63
  /* ------------------------------------------------------------------ */
63
64
  /* Root */
64
65
  /* ------------------------------------------------------------------ */
65
- export const carouselVariants = cva("vui-carousel relative min-w-0", {
66
+ export const carouselVariants = /*#__PURE__*/ cva("vui-carousel relative min-w-0", {
66
67
  variants: {
67
68
  preset: {
68
69
  default: "",
@@ -101,7 +102,7 @@ const GAP = {
101
102
  * </Carousel>
102
103
  * ```
103
104
  */
104
- export const Carousel = React.forwardRef(function Carousel({ label, preset = "default", orientation = "horizontal", slidesPerView, gap = "md", loop = false, align = "start", transition = "slide", autoplay = false, controls: controlsProp, index: indexProp, defaultIndex = 0, onIndexChange, loading = false, options, plugins: extraPlugins, setApi, labels, className, style, onKeyDown, children, ...props }, ref) {
105
+ export const Carousel = /*#__PURE__*/ React.forwardRef(function Carousel({ label, preset = "default", orientation = "horizontal", slidesPerView, gap = "md", loop = false, align = "start", transition = "slide", autoplay = false, controls: controlsProp, index: indexProp, defaultIndex = 0, onIndexChange, loading = false, options, plugins: extraPlugins, setApi, labels, className, style, onKeyDown, children, ...props }, ref) {
105
106
  const t = useLabels("carousel", carouselLabels, labels);
106
107
  const { dir, locale } = useLocale();
107
108
  const reduced = useReducedMotion();
@@ -257,12 +258,12 @@ export const Carousel = React.forwardRef(function Carousel({ label, preset = "de
257
258
  /* ------------------------------------------------------------------ */
258
259
  /* Viewport + slides */
259
260
  /* ------------------------------------------------------------------ */
260
- const SlideIndexContext = React.createContext({ index: -1, total: 0 });
261
+ const SlideIndexContext = /*#__PURE__*/ React.createContext({ index: -1, total: 0 });
261
262
  /**
262
263
  * The clipping viewport and the slide track. Children are `CarouselSlide`s. Renders the arrows
263
264
  * (and the pause button with autoplay) on the stage, so they line up with the slides.
264
265
  */
265
- export const CarouselViewport = React.forwardRef(function CarouselViewport({ arrows = true, playPause = true, empty, containerClassName, className, children, ...props }, ref) {
266
+ export const CarouselViewport = /*#__PURE__*/ React.forwardRef(function CarouselViewport({ arrows = true, playPause = true, empty, containerClassName, className, children, ...props }, ref) {
266
267
  const c = useCarouselContext("CarouselViewport");
267
268
  const slides = React.Children.toArray(children).filter(React.isValidElement);
268
269
  const n = slides.length;
@@ -276,7 +277,7 @@ export const CarouselViewport = React.forwardRef(function CarouselViewport({ arr
276
277
  return (_jsxs("div", { "data-slot": "carousel-stage", className: "vui-carousel-stage relative", children: [c.autoplay && playPause ? _jsx(CarouselPlayPause, { className: "vui-carousel-playpause absolute end-3 top-3 z-20" }) : null, _jsx("div", { ref: ref, className: cn("vui-carousel-viewport overflow-hidden", className), "data-slot": "carousel-viewport", ...props, children: _jsx("div", { ref: c.viewportRef, className: "h-full", children: _jsx("div", { "data-slot": "carousel-container", "aria-live": c.playing ? "off" : "polite", "aria-busy": c.loading || undefined, className: cn("vui-carousel-container flex", vertical ? "h-full flex-col" : "touch-pan-y", containerClassName), children: c.loading && n === 0 ? (_jsx(CarouselSlide, { "aria-label": c.t("loading"), children: _jsx(Skeleton, { className: "ui-shimmer aspect-video w-full rounded-ui" }) })) : (slides.map((slide, i) => (_jsx(SlideIndexContext.Provider, { value: { index: i, total: n }, children: slide }, slide.key ?? i)))) }) }) }), showArrows ? (_jsxs(_Fragment, { children: [_jsx(CarouselPrev, { className: cn("vui-carousel-arrow absolute z-10", vertical ? "start-1/2 top-2 -translate-x-1/2 rtl:translate-x-1/2" : "start-3 top-1/2 -translate-y-1/2") }), _jsx(CarouselNext, { className: cn("vui-carousel-arrow absolute z-10", vertical ? "start-1/2 bottom-2 -translate-x-1/2 rtl:translate-x-1/2" : "end-3 top-1/2 -translate-y-1/2") })] })) : null] }));
277
278
  });
278
279
  /** One slide: `role="group"`, `aria-roledescription="slide"`, labelled "3 of 7"; `inert` while off-screen. */
279
- export const CarouselSlide = React.forwardRef(function CarouselSlide({ className, children, ...props }, ref) {
280
+ export const CarouselSlide = /*#__PURE__*/ React.forwardRef(function CarouselSlide({ className, children, ...props }, ref) {
280
281
  const c = useCarouselContext("CarouselSlide");
281
282
  const { index: i, total } = React.useContext(SlideIndexContext);
282
283
  const hidden = c.inView !== null && i >= 0 && !c.inView.has(i);
@@ -303,14 +304,14 @@ export function CarouselNext(props) {
303
304
  return _jsx(ArrowButton, { direction: "next", ...props });
304
305
  }
305
306
  /** One button per slide; the current one is `aria-current` and painted with `--accent`. */
306
- export const CarouselDots = React.forwardRef(function CarouselDots({ className, ...props }, ref) {
307
+ export const CarouselDots = /*#__PURE__*/ React.forwardRef(function CarouselDots({ className, ...props }, ref) {
307
308
  const c = useCarouselContext("CarouselDots");
308
309
  if (c.count <= 1)
309
310
  return null;
310
311
  return (_jsx("div", { ref: ref, role: "group", "aria-label": c.t("dots"), "data-slot": "carousel-dots", className: cn("vui-carousel-dots flex items-center justify-center gap-1", c.preset === "hero" ? "absolute inset-x-0 bottom-4 z-10" : "mt-4", className), ...props, children: Array.from({ length: c.count }, (_, i) => (_jsx("button", { type: "button", "aria-label": c.t("goTo", { index: c.nf.format(i + 1) }), "aria-current": i === c.index ? "true" : undefined, "data-slot": "carousel-dot", onClick: () => c.scrollTo(i), className: "vui-carousel-dot focus-ring group/dot relative flex h-6 min-w-6 items-center justify-center rounded-full", children: _jsx("span", { "aria-hidden": true, className: "block h-1.5 rounded-full" }) }, i))) }));
311
312
  });
312
313
  /** A row of thumbnail buttons under a gallery carousel; the selected one gets a `--ring` border. */
313
- export const CarouselThumbs = React.forwardRef(function CarouselThumbs({ items, aspect = 4 / 3, align = "start", className, ...props }, ref) {
314
+ export const CarouselThumbs = /*#__PURE__*/ React.forwardRef(function CarouselThumbs({ items, aspect = 4 / 3, align = "start", className, ...props }, ref) {
314
315
  const c = useCarouselContext("CarouselThumbs");
315
316
  const listRef = React.useRef(null);
316
317
  React.useEffect(() => {
@@ -331,18 +332,20 @@ export function CarouselPlayPause({ className, size, ...props }) {
331
332
  return (_jsx(IconButton, { label: c.t(c.playing ? "pause" : "play"), tooltip: false, size: size ?? "sm", variant: "ghost", "data-slot": "carousel-playpause", "aria-pressed": undefined, onClick: c.playing ? c.pause : c.play, className: cn("surface-popover rounded-full! hover:bg-popover", className), ...props, children: c.playing ? _jsx(Pause, { "aria-hidden": true }) : _jsx(Play, { "aria-hidden": true }) }));
332
333
  }
333
334
  /** "3 / 7" in the locale's digits. */
334
- export const CarouselCounter = React.forwardRef(function CarouselCounter({ className, ...props }, ref) {
335
+ export const CarouselCounter = /*#__PURE__*/ React.forwardRef(function CarouselCounter({ className, ...props }, ref) {
335
336
  const c = useCarouselContext("CarouselCounter");
336
337
  if (c.count === 0)
337
338
  return null;
338
339
  return (_jsxs("span", { ref: ref, "data-slot": "carousel-counter", className: cn("tabular text-[13px] text-fg-muted", className), ...props, children: [_jsx("span", { className: "sr-only", children: c.t("counter", { index: c.nf.format(c.index + 1), total: c.nf.format(c.count) }) }), _jsxs("span", { "aria-hidden": true, children: [_jsx("span", { className: "font-medium text-fg", children: c.nf.format(c.index + 1) }), _jsx("span", { className: "mx-1 text-fg-subtle", children: "/" }), c.nf.format(c.count)] })] }));
339
340
  });
340
341
  /**
341
- * Endless logo band in pure CSS: no JS, renders with SSR. The items are listed once for assistive
342
- * tech; a duplicate track (aria-hidden) closes the loop. Reduced motion: static, scrollable row.
342
+ * Endless logo band in pure CSS: renders with SSR. The items are listed once for assistive tech;
343
+ * a duplicate track (`aria-hidden` + `inert`, so its links never take focus) closes the loop.
344
+ * Pauses on hover/focus and with its pause control. Reduced motion: static, scrollable row.
343
345
  */
344
- export function Marquee({ label, duration = 40, reverse, pauseOnHover = true, fade = true, gap = "lg", className, style, children, ...props }) {
346
+ export function Marquee({ label, duration = 40, reverse, pauseOnHover = true, fade = true, gap = "lg", controls = true, pauseLabel, className, style, children, ...props }) {
347
+ const t = useLabels("carousel", carouselLabels, pauseLabel ? { marqueePause: pauseLabel } : undefined);
345
348
  const items = React.Children.toArray(children);
346
- const track = (hidden) => (_jsx("ul", { "aria-hidden": hidden || undefined, "aria-label": hidden ? undefined : label, className: "vui-marquee-track flex shrink-0 items-center", children: items.map((child, i) => (_jsx("li", { className: "flex shrink-0 items-center", children: child }, i))) }));
347
- return (_jsxs("div", { "data-slot": "marquee", "data-reverse": reverse ? "" : undefined, "data-pause-on-hover": pauseOnHover ? "" : undefined, "data-fade": fade ? "" : undefined, className: cn("vui-marquee flex overflow-hidden", className), style: { "--marquee-duration": `${duration}s`, "--marquee-gap": GAP[gap], ...style }, ...props, children: [track(false), track(true)] }));
349
+ const track = (hidden) => (_jsx("ul", { "aria-hidden": hidden || undefined, inert: hidden || undefined, "aria-label": hidden ? undefined : label, className: "vui-marquee-track flex shrink-0 items-center", children: items.map((child, i) => (_jsx("li", { className: "flex shrink-0 items-center", children: child }, i))) }));
350
+ return (_jsxs("div", { "data-slot": "marquee", "data-reverse": reverse ? "" : undefined, "data-pause-on-hover": pauseOnHover ? "" : undefined, "data-fade": fade ? "" : undefined, "data-controls": controls ? "" : undefined, className: cn("vui-marquee relative", className), style: { "--marquee-duration": `${duration}s`, "--marquee-gap": GAP[gap], ...style }, ...props, children: [_jsxs("div", { className: "vui-marquee-viewport flex overflow-hidden", children: [track(false), track(true)] }), controls ? (_jsxs("label", { className: "vui-marquee-toggle", children: [_jsx("input", { type: "checkbox", className: "vui-marquee-pause sr-only", "aria-label": t("marqueePause") }), _jsx(Pause, { "aria-hidden": true, className: "vui-marquee-icon-pause" }), _jsx(Play, { "aria-hidden": true, className: "vui-marquee-icon-play" })] })) : null] }));
348
351
  }
@@ -1,5 +1,5 @@
1
1
  import * as React from "react";
2
- import { Checkbox as CheckboxPrimitive } from "radix-ui";
2
+ import * as CheckboxPrimitive from "radix-ui/checkbox";
3
3
  export type CheckboxCheckedState = boolean | "indeterminate";
4
4
  export declare const checkboxVariants: (props?: ({
5
5
  size?: "sm" | "md" | null | undefined;
@@ -1,13 +1,13 @@
1
1
  "use client";
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import * as React from "react";
4
- import { Checkbox as CheckboxPrimitive } from "radix-ui";
4
+ import * as CheckboxPrimitive from "radix-ui/checkbox";
5
5
  import { cva } from "class-variance-authority";
6
6
  import { cn } from "../lib/cn.js";
7
7
  import { mergeIds } from "../lib/compose-refs.js";
8
8
  import { FieldContextReset, useFieldContext, useFieldControl } from "../lib/field-context.js";
9
9
  import { useControllableState } from "../lib/use-controllable-state.js";
10
- export const checkboxVariants = cva([
10
+ export const checkboxVariants = /*#__PURE__*/ cva([
11
11
  "peer relative inline-flex shrink-0 items-center justify-center border bg-field text-accent-fg outline-none",
12
12
  // 16–18px boxes need the stronger edge in every material, or they vanish on dark solid
13
13
  "border-field-border-hover",
@@ -29,7 +29,7 @@ export const checkboxVariants = cva([
29
29
  },
30
30
  defaultVariants: { size: "md" },
31
31
  });
32
- const CheckboxGroupContext = React.createContext(null);
32
+ const CheckboxGroupContext = /*#__PURE__*/ React.createContext(null);
33
33
  function CheckIcon() {
34
34
  return (_jsx("svg", { viewBox: "0 0 14 14", fill: "none", "aria-hidden": true, focusable: "false", children: _jsx("path", { className: "ui-check-path", d: "M3 7.4 5.8 10 11 4.2", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) }));
35
35
  }
@@ -46,7 +46,7 @@ function DashIcon() {
46
46
  * <Field label="I accept the terms" orientation="horizontal" error={err}><Checkbox name="terms" /></Field>
47
47
  * ```
48
48
  */
49
- export const Checkbox = React.forwardRef(function Checkbox(rawProps, ref) {
49
+ export const Checkbox = /*#__PURE__*/ React.forwardRef(function Checkbox(rawProps, ref) {
50
50
  const group = React.useContext(CheckboxGroupContext);
51
51
  const { checked: checkedProp, defaultChecked, onCheckedChange, label, description, size = group?.size ?? "md", variant = group?.variant ?? "default", icon, invalid, readOnly: readOnlyProp, className, controlClassName, value, style, ...rest } = rawProps;
52
52
  const groupValue = value === undefined ? undefined : String(value);
@@ -103,7 +103,7 @@ export const Checkbox = React.forwardRef(function Checkbox(rawProps, ref) {
103
103
  * </Field>
104
104
  * ```
105
105
  */
106
- export const CheckboxGroup = React.forwardRef(function CheckboxGroup({ value, defaultValue, onValueChange, name, items, orientation = "vertical", variant = "default", size, disabled, readOnly, invalid, required, className, children, id, "aria-labelledby": labelledBy, "aria-describedby": describedBy, ...props }, ref) {
106
+ export const CheckboxGroup = /*#__PURE__*/ React.forwardRef(function CheckboxGroup({ value, defaultValue, onValueChange, name, items, orientation = "vertical", variant = "default", size, disabled, readOnly, invalid, required, className, children, id, "aria-labelledby": labelledBy, "aria-describedby": describedBy, ...props }, ref) {
107
107
  const field = useFieldContext();
108
108
  const [current, setCurrent] = useControllableState({ value, defaultValue: defaultValue ?? [], onChange: onValueChange, name: "CheckboxGroup" });
109
109
  const order = React.useRef([]);
@@ -133,6 +133,6 @@ export const CheckboxGroup = React.forwardRef(function CheckboxGroup({ value, de
133
133
  : "grid gap-2.5", className), children: _jsx(FieldContextReset, { children: _jsxs(CheckboxGroupContext.Provider, { value: ctx, children: [items?.map((item) => (_jsx(CheckboxGroupItem, { value: item.value, label: item.label, description: item.description, icon: item.icon, disabled: item.disabled }, item.value))), children] }) }) }));
134
134
  });
135
135
  /** One option inside a `CheckboxGroup`. */
136
- export const CheckboxGroupItem = React.forwardRef(function CheckboxGroupItem(props, ref) {
136
+ export const CheckboxGroupItem = /*#__PURE__*/ React.forwardRef(function CheckboxGroupItem(props, ref) {
137
137
  return _jsx(Checkbox, { ref: ref, ...props });
138
138
  });
@@ -0,0 +1,36 @@
1
+ import * as React from "react";
2
+ import * as CollapsiblePrimitive from "radix-ui/collapsible";
3
+ export interface CollapsibleProps extends React.ComponentPropsWithoutRef<typeof CollapsiblePrimitive.Root> {
4
+ }
5
+ /**
6
+ * One show/hide region with its trigger (WAI-ARIA disclosure). Controlled (`open` / `onOpenChange`)
7
+ * or uncontrolled (`defaultOpen`). For several sections that coordinate, use Accordion.
8
+ *
9
+ * ```tsx
10
+ * <Collapsible>
11
+ * <CollapsibleTrigger>Advanced settings</CollapsibleTrigger>
12
+ * <CollapsibleContent>…</CollapsibleContent>
13
+ * </Collapsible>
14
+ * ```
15
+ */
16
+ export declare const Collapsible: React.ForwardRefExoticComponent<CollapsibleProps & React.RefAttributes<HTMLDivElement>>;
17
+ export interface CollapsibleTriggerProps extends React.ComponentPropsWithoutRef<typeof CollapsiblePrimitive.Trigger> {
18
+ /** Trailing chevron that turns when open. Default `true` (ignored with `asChild`). */
19
+ chevron?: boolean;
20
+ /** Leading icon. */
21
+ icon?: React.ReactNode;
22
+ /** Right-side summary while closed, e.g. "4 fields". Part of the button's name. */
23
+ meta?: React.ReactNode;
24
+ }
25
+ /**
26
+ * The toggle button (`aria-expanded`, `aria-controls`). Styled as a quiet full-width row; pass
27
+ * `asChild` to make any button (a Button, a link-styled text) the trigger instead.
28
+ */
29
+ export declare const CollapsibleTrigger: React.ForwardRefExoticComponent<CollapsibleTriggerProps & React.RefAttributes<HTMLButtonElement>>;
30
+ export interface CollapsibleContentProps extends React.ComponentPropsWithoutRef<typeof CollapsiblePrimitive.Content> {
31
+ }
32
+ /**
33
+ * The hidden region. Animates its height (`ui-collapse`); no animation with
34
+ * `prefers-reduced-motion` or inside `data-motion="off"`. `forceMount` keeps it in the DOM while closed.
35
+ */
36
+ export declare const CollapsibleContent: React.ForwardRefExoticComponent<CollapsibleContentProps & React.RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,37 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import * as CollapsiblePrimitive from "radix-ui/collapsible";
5
+ import { ChevronDown } from "lucide-react";
6
+ import { cn } from "../lib/cn.js";
7
+ /**
8
+ * One show/hide region with its trigger (WAI-ARIA disclosure). Controlled (`open` / `onOpenChange`)
9
+ * or uncontrolled (`defaultOpen`). For several sections that coordinate, use Accordion.
10
+ *
11
+ * ```tsx
12
+ * <Collapsible>
13
+ * <CollapsibleTrigger>Advanced settings</CollapsibleTrigger>
14
+ * <CollapsibleContent>…</CollapsibleContent>
15
+ * </Collapsible>
16
+ * ```
17
+ */
18
+ export const Collapsible = /*#__PURE__*/ React.forwardRef(function Collapsible({ className, ...props }, ref) {
19
+ return _jsx(CollapsiblePrimitive.Root, { ref: ref, "data-slot": "collapsible", className: cn("group/collapsible", className), ...props });
20
+ });
21
+ /**
22
+ * The toggle button (`aria-expanded`, `aria-controls`). Styled as a quiet full-width row; pass
23
+ * `asChild` to make any button (a Button, a link-styled text) the trigger instead.
24
+ */
25
+ export const CollapsibleTrigger = /*#__PURE__*/ React.forwardRef(function CollapsibleTrigger({ className, chevron = true, icon, meta, asChild, children, ...props }, ref) {
26
+ if (asChild) {
27
+ return (_jsx(CollapsiblePrimitive.Trigger, { ref: ref, "data-slot": "collapsible-trigger", asChild: true, className: className, ...props, children: children }));
28
+ }
29
+ return (_jsxs(CollapsiblePrimitive.Trigger, { ref: ref, "data-slot": "collapsible-trigger", className: cn("group/collapsible-trigger flex w-full min-w-0 items-center gap-2.5 rounded-ui-sm py-2 text-start text-sm font-medium text-fg outline-none transition-colors focus-ring", "hover:[&_[data-slot=collapsible-title]]:underline hover:[&_[data-slot=collapsible-title]]:decoration-line hover:[&_[data-slot=collapsible-title]]:underline-offset-4", "disabled:cursor-not-allowed disabled:opacity-45", "[&_svg]:size-4 [&_svg]:shrink-0", className), ...props, children: [icon ? (_jsx("span", { "aria-hidden": true, className: "inline-flex shrink-0 text-fg-muted", children: icon })) : null, _jsx("span", { "data-slot": "collapsible-title", className: "min-w-0 flex-1 text-pretty", children: children }), meta ? _jsx("span", { className: "sr-only", children: ", " }) : null, meta ? (_jsx("span", { "data-slot": "collapsible-meta", className: "tabular shrink-0 truncate text-[13px] font-normal text-fg-subtle", children: meta })) : null, chevron ? (_jsx(ChevronDown, { "aria-hidden": true, className: "text-fg-subtle transition-transform duration-200 group-data-[state=open]/collapsible-trigger:rotate-180 motion-reduce:transition-none in-data-[motion=off]:transition-none" })) : null] }));
30
+ });
31
+ /**
32
+ * The hidden region. Animates its height (`ui-collapse`); no animation with
33
+ * `prefers-reduced-motion` or inside `data-motion="off"`. `forceMount` keeps it in the DOM while closed.
34
+ */
35
+ export const CollapsibleContent = /*#__PURE__*/ React.forwardRef(function CollapsibleContent({ className, ...props }, ref) {
36
+ return _jsx(CollapsiblePrimitive.Content, { ref: ref, "data-slot": "collapsible-content", className: cn("ui-collapse in-data-[motion=off]:animate-none", className), ...props });
37
+ });
@@ -2,7 +2,7 @@
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import * as React from "react";
4
4
  import { HexAlphaColorPicker, HexColorPicker } from "react-colorful";
5
- import { RadioGroup as RadioGroupPrimitive } from "radix-ui";
5
+ import * as RadioGroupPrimitive from "radix-ui/radio-group";
6
6
  import { Check, ChevronDown, Pipette } from "lucide-react";
7
7
  import { cn } from "../lib/cn.js";
8
8
  import { mergeIds } from "../lib/compose-refs.js";
@@ -72,7 +72,7 @@ function useSwatches(swatches, probe) {
72
72
  * A row of preset colours as a radio group (one tab stop, arrow keys move and select). For label
73
73
  * colours, calendar categories and campaign colours where a free picker is too much.
74
74
  */
75
- export const ColorSwatchPicker = React.forwardRef(function ColorSwatchPicker({ swatches: swatchesProp, value: valueProp, defaultValue, onValueChange, size = "md", name: nameProp, disabled, id, className, labels, ...aria }, ref) {
75
+ export const ColorSwatchPicker = /*#__PURE__*/ React.forwardRef(function ColorSwatchPicker({ swatches: swatchesProp, value: valueProp, defaultValue, onValueChange, size = "md", name: nameProp, disabled, id, className, labels, ...aria }, ref) {
76
76
  const t = useLabels("colorPicker", colorLabels, labels);
77
77
  const field = useFieldContext();
78
78
  const probe = React.useRef(null);
@@ -204,7 +204,7 @@ export function ColorPickerPanel({ value, onValueChange, alpha = false, swatches
204
204
  * <ColorPicker alpha swatches="tokens" variant="inline" />
205
205
  * ```
206
206
  */
207
- export const ColorPicker = React.forwardRef(function ColorPicker(props, ref) {
207
+ export const ColorPicker = /*#__PURE__*/ React.forwardRef(function ColorPicker(props, ref) {
208
208
  const { value: valueProp, defaultValue, onValueChange, alpha, swatches, eyeDropper, format: formatProp, defaultFormat, onFormatChange, showFormats, contrastAgainst, variant = "popover", name: nameProp, size = "md", invalid, open: openProp, defaultOpen, onOpenChange, className, labels, } = props;
209
209
  const t = useLabels("colorPicker", colorLabels, labels);
210
210
  const field = useFieldContext();
@@ -291,4 +291,4 @@ function ComboboxInner(props, ref) {
291
291
  * <Combobox items={categories} onCreate={async (name) => api.createCategory(name)} />
292
292
  * ```
293
293
  */
294
- export const Combobox = React.forwardRef(ComboboxInner);
294
+ export const Combobox = /*#__PURE__*/ React.forwardRef(ComboboxInner);