@vamos-ui/react 0.4.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 (194) hide show
  1. package/README.md +4 -0
  2. package/dist/blocks/block-heading.js +1 -1
  3. package/dist/blocks/block-link.js +1 -1
  4. package/dist/blocks/index.d.ts +3 -3
  5. package/dist/blocks/index.js +3 -3
  6. package/dist/blocks/labels.d.ts +8 -0
  7. package/dist/blocks/labels.js +60 -0
  8. package/dist/blocks/section-header.js +1 -1
  9. package/dist/blocks/section.js +2 -2
  10. package/dist/blocks/site/feature-tabs.js +1 -1
  11. package/dist/blocks/site/footer.d.ts +10 -1
  12. package/dist/blocks/site/footer.js +28 -4
  13. package/dist/blocks/site/registry-2.js +3 -1
  14. package/dist/blocks/site/shared/labels-2.d.ts +8 -0
  15. package/dist/blocks/site/shared/labels-2.js +808 -0
  16. package/dist/blocks/site/site-shell.js +3 -3
  17. package/dist/business/approval-flow.js +2 -2
  18. package/dist/business/import-wizard.js +1 -1
  19. package/dist/business/line-items.js +1 -1
  20. package/dist/business/multi-step-form.js +2 -2
  21. package/dist/business/permission-matrix.js +1 -1
  22. package/dist/business/setup-checklist.js +2 -2
  23. package/dist/business/signer-status.js +1 -1
  24. package/dist/charts/bar-list.js +1 -1
  25. package/dist/charts/chart-shell.js +1 -1
  26. package/dist/charts/donut-chart.js +1 -1
  27. package/dist/charts/funnel.js +1 -1
  28. package/dist/charts/gauge.js +2 -2
  29. package/dist/components/accordion.d.ts +1 -1
  30. package/dist/components/accordion.js +8 -8
  31. package/dist/components/activity-timeline.js +6 -6
  32. package/dist/components/address-field.js +3 -3
  33. package/dist/components/alert-dialog.d.ts +1 -1
  34. package/dist/components/alert-dialog.js +8 -8
  35. package/dist/components/alert.js +2 -2
  36. package/dist/components/app-shell.js +3 -3
  37. package/dist/components/aspect-ratio.js +2 -2
  38. package/dist/components/attachment-list.js +2 -2
  39. package/dist/components/audit-log.js +1 -1
  40. package/dist/components/avatar.d.ts +1 -1
  41. package/dist/components/avatar.js +8 -8
  42. package/dist/components/backup-codes.js +1 -1
  43. package/dist/components/badge.js +3 -3
  44. package/dist/components/breadcrumb.js +10 -9
  45. package/dist/components/button-group.js +4 -4
  46. package/dist/components/button.js +4 -4
  47. package/dist/components/calendar.js +5 -5
  48. package/dist/components/card.js +8 -8
  49. package/dist/components/carousel.js +9 -9
  50. package/dist/components/checkbox.d.ts +1 -1
  51. package/dist/components/checkbox.js +6 -6
  52. package/dist/components/collapsible.d.ts +1 -1
  53. package/dist/components/collapsible.js +4 -4
  54. package/dist/components/color-picker.js +3 -3
  55. package/dist/components/combobox.js +1 -1
  56. package/dist/components/command.js +9 -9
  57. package/dist/components/comment-thread.js +3 -3
  58. package/dist/components/context-menu.d.ts +1 -1
  59. package/dist/components/context-menu.js +9 -9
  60. package/dist/components/currency-input.js +1 -1
  61. package/dist/components/date-picker.js +2 -2
  62. package/dist/components/date-range-picker.js +1 -1
  63. package/dist/components/description-list.js +2 -2
  64. package/dist/components/dialog.d.ts +1 -1
  65. package/dist/components/dialog.js +9 -9
  66. package/dist/components/dropdown-menu.d.ts +1 -1
  67. package/dist/components/dropdown-menu.js +9 -9
  68. package/dist/components/editor-layout.js +9 -9
  69. package/dist/components/empty-state.js +2 -2
  70. package/dist/components/entity-card.js +1 -1
  71. package/dist/components/file-upload.js +5 -5
  72. package/dist/components/formatted-input.js +3 -3
  73. package/dist/components/hierarchy-chart.js +1 -1
  74. package/dist/components/hover-card.d.ts +1 -1
  75. package/dist/components/hover-card.js +3 -3
  76. package/dist/components/iban-input.js +1 -1
  77. package/dist/components/id-input.js +3 -3
  78. package/dist/components/image.js +5 -5
  79. package/dist/components/input-otp.js +6 -6
  80. package/dist/components/input.d.ts +1 -1
  81. package/dist/components/input.js +6 -6
  82. package/dist/components/item.js +4 -4
  83. package/dist/components/kbd.js +3 -3
  84. package/dist/components/list-layout.js +9 -9
  85. package/dist/components/menubar.d.ts +1 -1
  86. package/dist/components/menubar.js +12 -12
  87. package/dist/components/native-select.js +1 -1
  88. package/dist/components/navigation-menu.d.ts +1 -1
  89. package/dist/components/navigation-menu.js +12 -11
  90. package/dist/components/notification-center.js +4 -4
  91. package/dist/components/page-header.js +3 -3
  92. package/dist/components/pagination.js +9 -9
  93. package/dist/components/phone-input.js +1 -1
  94. package/dist/components/pin-map.js +1 -1
  95. package/dist/components/placeholder-art.js +1 -1
  96. package/dist/components/popover.d.ts +1 -1
  97. package/dist/components/popover.js +7 -7
  98. package/dist/components/progress.js +3 -3
  99. package/dist/components/qr-code.js +1 -1
  100. package/dist/components/radio-group.d.ts +1 -1
  101. package/dist/components/radio-group.js +4 -4
  102. package/dist/components/record-detail-layout.js +10 -10
  103. package/dist/components/record-picker.js +2 -2
  104. package/dist/components/resizable.js +2 -2
  105. package/dist/components/scroll-area.d.ts +1 -1
  106. package/dist/components/scroll-area.js +4 -4
  107. package/dist/components/select.d.ts +1 -1
  108. package/dist/components/select.js +10 -10
  109. package/dist/components/separator.d.ts +1 -1
  110. package/dist/components/separator.js +3 -3
  111. package/dist/components/settings-layout.js +6 -6
  112. package/dist/components/sheet.js +3 -3
  113. package/dist/components/sidebar.js +12 -11
  114. package/dist/components/signature-pad.js +1 -1
  115. package/dist/components/skeleton.js +5 -5
  116. package/dist/components/sla-timer.js +2 -2
  117. package/dist/components/slider.d.ts +1 -1
  118. package/dist/components/slider.js +2 -2
  119. package/dist/components/slug-input.js +1 -1
  120. package/dist/components/sparkline.js +1 -1
  121. package/dist/components/spinner.js +2 -2
  122. package/dist/components/stat.js +5 -5
  123. package/dist/components/status-picker.js +2 -2
  124. package/dist/components/stepper.js +1 -1
  125. package/dist/components/switch.d.ts +1 -1
  126. package/dist/components/switch.js +3 -3
  127. package/dist/components/table.js +10 -10
  128. package/dist/components/tabs.d.ts +1 -1
  129. package/dist/components/tabs.js +11 -11
  130. package/dist/components/tag-input.js +1 -1
  131. package/dist/components/task-list.js +1 -1
  132. package/dist/components/time-picker.js +3 -3
  133. package/dist/components/toggle.d.ts +2 -1
  134. package/dist/components/toggle.js +7 -6
  135. package/dist/components/tooltip.d.ts +1 -1
  136. package/dist/components/tooltip.js +5 -4
  137. package/dist/components/top-bar.js +4 -4
  138. package/dist/components/tour.js +1 -1
  139. package/dist/components/tree-select.js +2 -2
  140. package/dist/components/tree-view.js +3 -3
  141. package/dist/components/typography.js +11 -11
  142. package/dist/components/user-picker.js +2 -2
  143. package/dist/components/version-history.js +3 -3
  144. package/dist/data-table/data-table.js +1 -1
  145. package/dist/data-table/filter-bar.js +2 -2
  146. package/dist/data-table/index.d.ts +15 -8
  147. package/dist/data-table/index.js +9 -8
  148. package/dist/data-table/saved-views.js +1 -1
  149. package/dist/editor/block-editor.js +1 -1
  150. package/dist/editor/context.js +1 -1
  151. package/dist/editor/menus.js +1 -1
  152. package/dist/fonts/font-picker.js +3 -3
  153. package/dist/fonts/pairing-picker.js +1 -1
  154. package/dist/fonts/provider.js +1 -1
  155. package/dist/index.d.ts +188 -94
  156. package/dist/index.js +94 -94
  157. package/dist/lib/data-islands.js +1 -1
  158. package/dist/lib/field-context.js +1 -1
  159. package/dist/lib/floating-arrow.js +1 -1
  160. package/dist/lib/islands.js +1 -1
  161. package/dist/lib/layer.js +3 -3
  162. package/dist/lib/locale.js +2 -2
  163. package/dist/lib/menu.js +2 -2
  164. package/dist/lib/provider.js +4 -4
  165. package/dist/lib/theme-scope.js +4 -3
  166. package/dist/lib/variants.js +2 -2
  167. package/dist/media/focal-point.js +1 -1
  168. package/dist/media/gallery.js +1 -1
  169. package/dist/media/image-cropper.js +1 -1
  170. package/dist/media/image-field.js +2 -2
  171. package/dist/media/lightbox.js +4 -3
  172. package/dist/media/link-preview.js +3 -3
  173. package/dist/media/media-library.js +3 -3
  174. package/dist/media/media-picker.js +1 -1
  175. package/dist/media/media-provider.js +1 -1
  176. package/dist/media/video-player.js +4 -4
  177. package/dist/motion/count-up.js +1 -1
  178. package/dist/motion/motion-scope.js +2 -2
  179. package/dist/motion/page-transition.js +1 -1
  180. package/dist/motion/parallax.js +2 -2
  181. package/dist/motion/pointer.js +3 -3
  182. package/dist/motion/reveal.js +3 -3
  183. package/dist/motion/skeleton-swap.js +1 -1
  184. package/dist/motion/text-reveal.js +1 -1
  185. package/dist/motion/ticker.js +1 -1
  186. package/dist/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
  187. package/dist/scheduler/gantt.js +2 -2
  188. package/dist/scheduler/resource-calendar.js +2 -2
  189. package/dist/scheduler/scheduler.js +3 -3
  190. package/dist/scheduler/time-tracker.js +4 -4
  191. package/dist/sortable/kanban.js +2 -2
  192. package/dist/sortable/sortable-list.js +2 -2
  193. package/dist/sortable/sortable.js +4 -4
  194. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
3
  import * as React from "react";
4
- import { Direction } from "radix-ui";
4
+ import * as Direction from "radix-ui/direction";
5
5
  import { en } from "../locales/en.js";
6
6
  import { createFormatter } from "../format/core.js";
7
7
  import { formatMessage } from "./message-format.js";
@@ -45,7 +45,7 @@ function createValue(locale, messages, dir, timeZone, currency) {
45
45
  };
46
46
  }
47
47
  const defaultValue = createValue("en-US", en, "ltr", "UTC", "USD");
48
- const LocaleContext = React.createContext(defaultValue);
48
+ const LocaleContext = /*#__PURE__*/ React.createContext(defaultValue);
49
49
  /**
50
50
  * Locale for built-in strings, text rules and Intl formatting. No i18n library required.
51
51
  * Zero config means English (`en-US`, USD, UTC). Nest providers to override a subtree.
package/dist/lib/menu.js CHANGED
@@ -12,7 +12,7 @@ import { itemSlots, itemVariants } from "./variants.js";
12
12
  import { useCan, useLink } from "./provider.js";
13
13
  import { KbdGroup } from "../components/kbd.js";
14
14
  /** Floating panel of a menu (root content and sub-content). */
15
- export const menuContentVariants = cva([
15
+ export const menuContentVariants = /*#__PURE__*/ cva([
16
16
  "surface-popover ui-pop z-(--z-popover) rounded-ui-lg p-1 outline-none",
17
17
  "overflow-x-hidden overflow-y-auto overscroll-contain",
18
18
  ], {
@@ -32,7 +32,7 @@ export const menuLabelClass = itemSlots.groupLabel;
32
32
  export const menuSeparatorClass = itemSlots.separator;
33
33
  export const menuIndicatorClass = itemSlots.indicator;
34
34
  /** Size context so items pick up the content's `size`. */
35
- export const MenuSizeContext = React.createContext("md");
35
+ export const MenuSizeContext = /*#__PURE__*/ React.createContext("md");
36
36
  /** Icon · label (+ description) · badge · shortcut · chevron. */
37
37
  export function MenuItemContent({ icon, description, shortcut, badge, chevron, children }) {
38
38
  return (_jsxs(_Fragment, { children: [icon ? (_jsx("span", { "aria-hidden": true, className: cn("flex shrink-0 items-center", description ? "self-start pt-px" : undefined), children: icon })) : null, _jsxs("span", { className: itemSlots.label, children: [children, description ? _jsx("span", { className: cn(itemSlots.description, "mt-0.5 whitespace-normal"), children: description }) : null] }), badge != null ? _jsx("span", { className: "ms-auto shrink-0 ps-3 text-xs tabular text-fg-subtle", children: badge }) : null, shortcut ? _jsx(KbdGroup, { keys: shortcut, size: "sm", variant: "ghost", className: cn("shrink-0 ps-4", badge == null && "ms-auto") }) : null, chevron ? _jsx(ChevronRight, { "aria-hidden": true, className: cn("ms-auto size-3.5! shrink-0 text-fg-subtle rtl:-scale-x-100", (shortcut || badge != null) && "ms-2") }) : null] }));
@@ -3,11 +3,11 @@ import { jsx as _jsx } from "react/jsx-runtime";
3
3
  import * as React from "react";
4
4
  import { LocaleProvider } from "./locale.js";
5
5
  /** Default link: a plain `<a>` (router hints are dropped). */
6
- export const DefaultLink = React.forwardRef(function DefaultLink({ replace: _r, prefetch: _p, ...props }, ref) {
6
+ export const DefaultLink = /*#__PURE__*/ React.forwardRef(function DefaultLink({ replace: _r, prefetch: _p, ...props }, ref) {
7
7
  return _jsx("a", { ref: ref, ...props });
8
8
  });
9
9
  /** Default image: a plain `<img>` with lazy loading; `fill` covers the positioned parent. */
10
- export const DefaultImage = React.forwardRef(function DefaultImage({ fill, priority, quality: _q, style, loading, decoding, ...props }, ref) {
10
+ export const DefaultImage = /*#__PURE__*/ React.forwardRef(function DefaultImage({ fill, priority, quality: _q, style, loading, decoding, ...props }, ref) {
11
11
  return (_jsx("img", { ref: ref, loading: loading ?? (priority ? "eager" : "lazy"), decoding: decoding ?? "async", fetchPriority: priority ? "high" : undefined, style: fill ? { position: "absolute", inset: 0, width: "100%", height: "100%", ...style } : style, ...props }));
12
12
  });
13
13
  const defaultNavigate = (href, o) => {
@@ -18,7 +18,7 @@ const defaultNavigate = (href, o) => {
18
18
  else
19
19
  window.location.assign(href);
20
20
  };
21
- const VamosContext = React.createContext({
21
+ const VamosContext = /*#__PURE__*/ React.createContext({
22
22
  Link: DefaultLink,
23
23
  Image: DefaultImage,
24
24
  navigate: defaultNavigate,
@@ -93,7 +93,7 @@ export function isExternalHref(href) {
93
93
  * Internal links go through the app's router `Link`; external ones render `<a target="_blank" rel="noopener noreferrer">`
94
94
  * (`mailto:` / `tel:` stay in the same tab).
95
95
  */
96
- export const SmartLink = React.forwardRef(function SmartLink({ href, external, target, rel, ...props }, ref) {
96
+ export const SmartLink = /*#__PURE__*/ React.forwardRef(function SmartLink({ href, external, target, rel, ...props }, ref) {
97
97
  const Link = useLink();
98
98
  const isExternal = external ?? isExternalHref(href);
99
99
  if (isExternal) {
@@ -1,7 +1,8 @@
1
1
  "use client";
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
3
  import * as React from "react";
4
- import { Direction, Slot } from "radix-ui";
4
+ import * as Direction from "radix-ui/direction";
5
+ import * as Slot from "radix-ui/slot";
5
6
  import { cn } from "./cn.js";
6
7
  import { useComposedRefs } from "./compose-refs.js";
7
8
  /**
@@ -22,7 +23,7 @@ export function themeAttributes(axes) {
22
23
  dir: axes.dir,
23
24
  };
24
25
  }
25
- const PortalContainerContext = React.createContext(null);
26
+ const PortalContainerContext = /*#__PURE__*/ React.createContext(null);
26
27
  /**
27
28
  * The element overlays should portal into, or `undefined` for `document.body`.
28
29
  * Pass it to every Radix `Portal`: `<Popover.Portal container={usePortalContainer()}>`.
@@ -47,7 +48,7 @@ export function PortalContainer({ container, children }) {
47
48
  * The scope element must not use `transform`, `filter`, `backdrop-filter` or `contain`, because
48
49
  * those turn it into the containing block for the fixed-position overlays inside it.
49
50
  */
50
- export const ThemeScope = React.forwardRef(function ThemeScope({ theme, material, accent, density, font, dir, glassQuality, asChild, portal = true, className, children, ...props }, ref) {
51
+ export const ThemeScope = /*#__PURE__*/ React.forwardRef(function ThemeScope({ theme, material, accent, density, font, dir, glassQuality, asChild, portal = true, className, children, ...props }, ref) {
51
52
  const [node, setNode] = React.useState(null);
52
53
  const composed = useComposedRefs(ref, setNode);
53
54
  const { className: themeClass, ...attrs } = themeAttributes({ theme, material, accent, density, font, dir, glassQuality });
@@ -12,7 +12,7 @@ import { cva } from "class-variance-authority";
12
12
  * <button className={controlVariants({ size: "sm" })}>Status</button>
13
13
  * ```
14
14
  */
15
- export const controlVariants = cva([
15
+ export const controlVariants = /*#__PURE__*/ cva([
16
16
  "relative flex w-full min-w-0 items-center rounded-ui border text-fg",
17
17
  "transition-[border-color,box-shadow,background-color] duration-150",
18
18
  // focus on self (trigger) or on a child (input group)
@@ -65,7 +65,7 @@ export const controlVariants = cva([
65
65
  * </DropdownMenu.Item>
66
66
  * ```
67
67
  */
68
- export const itemVariants = cva([
68
+ export const itemVariants = /*#__PURE__*/ cva([
69
69
  "relative flex w-full cursor-default select-none items-center gap-2 rounded-ui-sm text-start text-fg outline-none",
70
70
  "transition-colors duration-100",
71
71
  "data-highlighted:bg-hover data-[selected=true]:bg-hover aria-selected:bg-hover focus-visible:bg-hover",
@@ -26,7 +26,7 @@ const round = (n) => Math.round(n * 1000) / 1000;
26
26
  * <FocalPointPicker src={asset} defaultValue={asset.focalPoint} onValueCommit={(focalPoint) => adapter.update(asset.id, { focalPoint })} />
27
27
  * ```
28
28
  */
29
- export const FocalPointPicker = React.forwardRef(function FocalPointPicker({ src, value, defaultValue, onValueChange, onValueCommit, previews = ["1/1", "16/9", "4/5"], maxHeight = "20rem", disabled, labels, className, ...props }, ref) {
29
+ export const FocalPointPicker = /*#__PURE__*/ React.forwardRef(function FocalPointPicker({ src, value, defaultValue, onValueChange, onValueCommit, previews = ["1/1", "16/9", "4/5"], maxHeight = "20rem", disabled, labels, className, ...props }, ref) {
30
30
  const t = useLabels("focalPoint", focalLabels, labels);
31
31
  const { locale } = useLocale();
32
32
  const [point, setPoint] = useControllableState({ value, defaultValue: defaultValue ?? (isMediaAsset(src) ? src.focalPoint : undefined) ?? { x: 0.5, y: 0.5 }, onChange: onValueChange, name: "FocalPointPicker" });
@@ -25,7 +25,7 @@ const galleryLabels = {
25
25
  loading: "Loading images",
26
26
  video: "Video",
27
27
  };
28
- export const galleryVariants = cva("vui-gallery @container/gallery min-w-0", {
28
+ export const galleryVariants = /*#__PURE__*/ cva("vui-gallery @container/gallery min-w-0", {
29
29
  variants: {
30
30
  gap: { sm: "[--gallery-gap:0.375rem]", md: "[--gallery-gap:0.75rem]", lg: "[--gallery-gap:1.25rem]" },
31
31
  },
@@ -61,7 +61,7 @@ export function formatAspectRatio(value, locale = "en-US") {
61
61
  * <ImageCropper src={asset} defaultAspect={1.91} onChange={(rect) => adapter.update(asset.id, { crops: { ...asset.crops, og: rect } })} />
62
62
  * ```
63
63
  */
64
- export const ImageCropper = React.forwardRef(function ImageCropper({ src, value, defaultValue, onChange, aspect: aspectProp, defaultAspect, onAspectChange, presets: presetsProp, shape = "rect", grid = true, minZoom = 1, maxZoom = 4, toolbar = true, transform = true, height = "22rem", labels, className, ...props }, ref) {
64
+ export const ImageCropper = /*#__PURE__*/ React.forwardRef(function ImageCropper({ src, value, defaultValue, onChange, aspect: aspectProp, defaultAspect, onAspectChange, presets: presetsProp, shape = "rect", grid = true, minZoom = 1, maxZoom = 4, toolbar = true, transform = true, height = "22rem", labels, className, ...props }, ref) {
65
65
  const t = useLabels("imageCropper", cropperLabels, labels);
66
66
  const { locale } = useLocale();
67
67
  const url = isMediaAsset(src) ? src.url : src;
@@ -54,7 +54,7 @@ const fieldLabels = {
54
54
  pickerTitle: "Select image",
55
55
  pickerConfirm: "Use image",
56
56
  };
57
- export const imageFieldVariants = cva("vui-image-field group/imgfield relative grid min-w-0 gap-2", {
57
+ export const imageFieldVariants = /*#__PURE__*/ cva("vui-image-field group/imgfield relative grid min-w-0 gap-2", {
58
58
  variants: {
59
59
  size: { sm: "w-24", md: "w-full max-w-[22rem]", full: "w-full" },
60
60
  layout: { stacked: "", inline: "grid-cols-[auto_minmax(0,1fr)] items-start gap-x-4" },
@@ -75,7 +75,7 @@ const ratioOf = (aspect, a) => aspectRatioOf(aspect ?? "auto", a?.width, a?.heig
75
75
  * </Field>
76
76
  * ```
77
77
  */
78
- export const ImageField = React.forwardRef(function ImageField(props, ref) {
78
+ export const ImageField = /*#__PURE__*/ React.forwardRef(function ImageField(props, ref) {
79
79
  const { value: valueProp, defaultValue, onChange, adapter: adapterProp, aspect: aspectProp, cropPresets, recommended, shape = "rect", size = "md", layout = "stacked", focal: focalEnabled = shape !== "round", crop: cropMode = true, requireAlt = false, accept = "image/*", name, className, labels, } = props;
80
80
  const control = useFieldControl({ id: props.id, "aria-describedby": props["aria-describedby"], disabled: props.disabled, readOnly: props.readOnly, required: props.required, "aria-invalid": props.invalid || undefined });
81
81
  const disabled = Boolean(control.disabled);
@@ -1,7 +1,8 @@
1
1
  "use client";
2
2
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
3
  import * as React from "react";
4
- import { Dialog as DialogPrimitive, Slot } from "radix-ui";
4
+ import * as DialogPrimitive from "radix-ui/dialog";
5
+ import * as Slot from "radix-ui/slot";
5
6
  import { Download, ImageOff, Info, X, ZoomIn, ZoomOut } from "lucide-react";
6
7
  import { cn } from "../lib/cn.js";
7
8
  import { useLabels } from "../lib/labels.js";
@@ -38,7 +39,7 @@ const lightboxLabels = {
38
39
  noAlt: "Missing alt text",
39
40
  decorative: "Decorative (no alt text)",
40
41
  };
41
- const LightboxContext = React.createContext(null);
42
+ const LightboxContext = /*#__PURE__*/ React.createContext(null);
42
43
  /** Open / close the surrounding `Lightbox` from custom triggers. */
43
44
  export function useLightbox() {
44
45
  const ctx = React.useContext(LightboxContext);
@@ -75,7 +76,7 @@ export function Lightbox({ items, open: openProp, defaultOpen = false, onOpenCha
75
76
  return (_jsxs(LightboxContext.Provider, { value: ctx, children: [children, _jsx(DialogPrimitive.Root, { open: open, onOpenChange: setOpen, children: _jsx(LightboxViewer, { items: items, index: Math.min(Math.max(0, index), Math.max(0, items.length - 1)), setIndex: setIndex, zoom: zoom, thumbnails: thumbnails ?? items.length > 1, download: download, info: info, loop: loop, backdrop: backdrop, chrome: chrome, labels: labels, returnFocus: returnFocus }) })] }));
76
77
  }
77
78
  /** Opens the surrounding Lightbox at `index`. Renders a button (or the child with `asChild`). */
78
- export const LightboxTrigger = React.forwardRef(function LightboxTrigger({ index, asChild, onClick, className, type, ...props }, ref) {
79
+ export const LightboxTrigger = /*#__PURE__*/ React.forwardRef(function LightboxTrigger({ index, asChild, onClick, className, type, ...props }, ref) {
79
80
  const lb = useLightbox();
80
81
  const Comp = asChild ? Slot.Root : "button";
81
82
  return (_jsx(Comp, { ref: ref, type: asChild ? undefined : type ?? "button", "data-slot": "lightbox-trigger", "aria-haspopup": "dialog", className: cn(!asChild && "focus-ring block cursor-zoom-in rounded-[inherit]", className), onClick: (e) => {
@@ -85,7 +85,7 @@ function highlight(text, term, locale) {
85
85
  * How a page appears in a search result on desktop or mobile, with pixel-accurate truncation
86
86
  * (`measureSerp`) and keyword bolding.
87
87
  */
88
- export const SearchPreview = React.forwardRef(function SearchPreview({ data, device = "desktop", highlight: term, appearance = "auto", size = "md", labels, className, ...props }, ref) {
88
+ export const SearchPreview = /*#__PURE__*/ React.forwardRef(function SearchPreview({ data, device = "desktop", highlight: term, appearance = "auto", size = "md", labels, className, ...props }, ref) {
89
89
  const t = useLabels("linkPreview", previewLabels, labels);
90
90
  const { locale } = useLocale();
91
91
  const { host, path } = parseUrl(data.url);
@@ -103,7 +103,7 @@ export const SearchPreview = React.forwardRef(function SearchPreview({ data, dev
103
103
  const TARGET_RATIO = { facebook: 1.91, linkedin: 1.91, x: 1.91, whatsapp: 1.91, slack: 1.91 };
104
104
  const MIN_SIZE = { width: 1200, height: 630 };
105
105
  /** How a shared link unfurls on Facebook, LinkedIn, X, WhatsApp or Slack, with image warnings. */
106
- export const SocialCardPreview = React.forwardRef(function SocialCardPreview({ data, platform, appearance = "auto", size = "md", hideWarnings, labels, className, ...props }, ref) {
106
+ export const SocialCardPreview = /*#__PURE__*/ React.forwardRef(function SocialCardPreview({ data, platform, appearance = "auto", size = "md", hideWarnings, labels, className, ...props }, ref) {
107
107
  const t = useLabels("linkPreview", previewLabels, labels);
108
108
  const { locale } = useLocale();
109
109
  const { host } = parseUrl(data.url);
@@ -149,7 +149,7 @@ export const SocialCardPreview = React.forwardRef(function SocialCardPreview({ d
149
149
  * Characters (graphemes) and, for SEO fields, rendered pixels against the limit, said in words
150
150
  * too ("58 of 60 characters, 540 of 600 px: good"), never by colour alone.
151
151
  */
152
- export const LengthMeter = React.forwardRef(function LengthMeter({ value, max: maxProp, min: minProp, field, device = "desktop", label, labels, className, ...props }, ref) {
152
+ export const LengthMeter = /*#__PURE__*/ React.forwardRef(function LengthMeter({ value, max: maxProp, min: minProp, field, device = "desktop", label, labels, className, ...props }, ref) {
153
153
  const t = useLabels("linkPreview", previewLabels, labels);
154
154
  const { locale } = useLocale();
155
155
  const nf = new Intl.NumberFormat(locale);
@@ -167,7 +167,7 @@ export function MediaThumb({ asset, className, rounded = "ui" }) {
167
167
  }
168
168
  const dimensions = (a, nf) => (a.width && a.height ? `${nf.format(a.width)} × ${nf.format(a.height)}` : "—");
169
169
  /** Per-file progress with cancel, retry and the reason a file failed; a polite live summary. */
170
- export const MediaUploadQueue = React.forwardRef(function MediaUploadQueue({ queue, variant = "inline", labels, className, ...props }, ref) {
170
+ export const MediaUploadQueue = /*#__PURE__*/ React.forwardRef(function MediaUploadQueue({ queue, variant = "inline", labels, className, ...props }, ref) {
171
171
  const t = useLabels("mediaUploadQueue", queueLabels, labels);
172
172
  const f = useFormat();
173
173
  if (!queue.items.length)
@@ -186,7 +186,7 @@ function MediaUploadRow({ item, queue, t }) {
186
186
  * Preview, editable metadata with autosave (alt text, decorative, title, caption, description),
187
187
  * focal point, file info, usage and actions. The body of the library's details panel.
188
188
  */
189
- export const MediaDetails = React.forwardRef(function MediaDetails({ asset, adapter: adapterProp, onChange, onDelete, onClose, readOnly: readOnlyProp, autosaveDelay = 700, labels, className, ...props }, ref) {
189
+ export const MediaDetails = /*#__PURE__*/ React.forwardRef(function MediaDetails({ asset, adapter: adapterProp, onChange, onDelete, onClose, readOnly: readOnlyProp, autosaveDelay = 700, labels, className, ...props }, ref) {
190
190
  const t = useLabels("mediaDetails", detailsLabels, labels);
191
191
  const f = useFormat();
192
192
  const { locale } = useLocale();
@@ -310,7 +310,7 @@ const GRID_GAP = 12;
310
310
  * Keyboard (grid): arrows move, Space selects, Shift + arrows extends, Ctrl/⌘ + A selects all,
311
311
  * Enter opens details, Delete asks to delete, Esc clears the selection.
312
312
  */
313
- export const MediaLibrary = React.forwardRef(function MediaLibrary({ adapter: adapterProp, view: viewProp, defaultView = "grid", onViewChange, query: queryProp, defaultQuery, onQueryChange, selection = "multiple", selected: selectedProp, defaultSelected, onSelectedChange, accept, max, detailsPanel = "side", folders: foldersMode, pageSize = 60, tileSize = "md", height = "34rem", virtualizeAfter = 120, readOnly: readOnlyProp, selectUploaded = false, maxDimension, emptyState, searchRef, toolbar = true, onDeleted, handleRef, labels, queueLabels: queueLabelsProp, detailsLabels: detailsLabelsProp, className, ...props }, ref) {
313
+ export const MediaLibrary = /*#__PURE__*/ React.forwardRef(function MediaLibrary({ adapter: adapterProp, view: viewProp, defaultView = "grid", onViewChange, query: queryProp, defaultQuery, onQueryChange, selection = "multiple", selected: selectedProp, defaultSelected, onSelectedChange, accept, max, detailsPanel = "side", folders: foldersMode, pageSize = 60, tileSize = "md", height = "34rem", virtualizeAfter = 120, readOnly: readOnlyProp, selectUploaded = false, maxDimension, emptyState, searchRef, toolbar = true, onDeleted, handleRef, labels, queueLabels: queueLabelsProp, detailsLabels: detailsLabelsProp, className, ...props }, ref) {
314
314
  const t = useLabels("mediaLibrary", libraryLabels, labels);
315
315
  const tq = useLabels("mediaUploadQueue", queueLabels, queueLabelsProp);
316
316
  const f = useFormat();
@@ -176,7 +176,7 @@ function PickerUrlForm({ adapter, onImported, t }) {
176
176
  };
177
177
  return (_jsxs("form", { onSubmit: submit, className: "mx-auto grid max-w-xl gap-2 py-6", children: [_jsx("label", { htmlFor: id, className: "text-[13px] font-medium text-fg", children: t("urlLabel") }), _jsxs("div", { className: "flex gap-2", children: [_jsx(Input, { id: id, type: "url", inputMode: "url", leading: _jsx(Link2, { "aria-hidden": true }), placeholder: t("urlPlaceholder"), value: url, "aria-describedby": hintId, invalid: state === "error", onChange: (e) => setUrl(e.target.value), className: "flex-1" }), _jsx(Button, { type: "submit", variant: "secondary", disabled: !valid, loading: state === "loading", loadingText: t("urlImporting"), children: t("urlImport") })] }), _jsx("p", { id: hintId, className: cn("text-[12.5px]", state === "error" ? "text-danger" : "text-fg-muted"), children: state === "error" ? (_jsxs("span", { className: "inline-flex items-center gap-1.5", children: [_jsx(TriangleAlert, { "aria-hidden": true, className: "size-3.5" }), t("urlError")] })) : (t("urlHint")) })] }));
178
178
  }
179
- const PickerContext = React.createContext(null);
179
+ const PickerContext = /*#__PURE__*/ React.createContext(null);
180
180
  /**
181
181
  * Hosts one Media picker for `useMediaPicker()`. Put it once near the app root, inside `MediaProvider`.
182
182
  */
@@ -2,7 +2,7 @@
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
3
  import * as React from "react";
4
4
  import { useMediaAdapter } from "../lib/provider.js";
5
- const MediaContext = React.createContext(undefined);
5
+ const MediaContext = /*#__PURE__*/ React.createContext(undefined);
6
6
  /**
7
7
  * Provides the media adapter to Media library, Media picker, Image field, Gallery and the editor.
8
8
  * `VamosProvider media={adapter}` works too; this provider wins when both are set.
@@ -49,7 +49,7 @@ export function formatMediaTime(seconds, locale = "en-US") {
49
49
  return h > 0 ? `${one.format(h)}:${two.format(m)}:${two.format(s)}` : `${one.format(m)}:${two.format(s)}`;
50
50
  }
51
51
  const SPEEDS = [0.5, 0.75, 1, 1.25, 1.5, 2];
52
- export const videoPlayerVariants = cva("vui-video group/video relative isolate overflow-hidden bg-scene", {
52
+ export const videoPlayerVariants = /*#__PURE__*/ cva("vui-video group/video relative isolate overflow-hidden bg-scene", {
53
53
  variants: {
54
54
  rounded: { none: "", ui: "rounded-ui", "ui-lg": "rounded-ui-lg" },
55
55
  chrome: { overlay: "", bar: "" },
@@ -75,7 +75,7 @@ const MIME = { mp4: "video/mp4", webm: "video/webm", hls: "application/vnd.apple
75
75
  * tracks={[{ src: "/media/onboarding.en.vtt", lang: "en", label: "English", default: true }]} />
76
76
  * ```
77
77
  */
78
- export const VideoPlayer = React.forwardRef(function VideoPlayer({ src, poster: posterProp, aspect, tracks, autoPlay, muted: mutedProp = false, loop, playsInline = true, controls = "custom", chrome = "overlay", rounded, title, preload = "metadata", hls, onEnded, onTimeUpdate, videoRef, crossOrigin, labels, className, style, onKeyDown, ...props }, ref) {
78
+ export const VideoPlayer = /*#__PURE__*/ React.forwardRef(function VideoPlayer({ src, poster: posterProp, aspect, tracks, autoPlay, muted: mutedProp = false, loop, playsInline = true, controls = "custom", chrome = "overlay", rounded, title, preload = "metadata", hls, onEnded, onTimeUpdate, videoRef, crossOrigin, labels, className, style, onKeyDown, ...props }, ref) {
79
79
  const t = useLabels("videoPlayer", videoLabels, labels);
80
80
  const { locale } = useLocale();
81
81
  const reduced = useReducedMotion();
@@ -283,7 +283,7 @@ export const VideoPlayer = React.forwardRef(function VideoPlayer({ src, poster:
283
283
  * `youtube-nocookie.com` (or `player.vimeo.com` with `dnt=1`) iframe. No third-party request,
284
284
  * cookie or script before the visitor chooses to play.
285
285
  */
286
- export const VideoEmbed = React.forwardRef(function VideoEmbed({ provider, id, title, poster, aspect = "16/9", start, rounded = "ui", labels, className, style, ...props }, ref) {
286
+ export const VideoEmbed = /*#__PURE__*/ React.forwardRef(function VideoEmbed({ provider, id, title, poster, aspect = "16/9", start, rounded = "ui", labels, className, style, ...props }, ref) {
287
287
  const t = useLabels("videoPlayer", videoLabels, labels);
288
288
  const [active, setActive] = React.useState(false);
289
289
  const ratio = aspectRatioOf(aspect) ?? 16 / 9;
@@ -297,7 +297,7 @@ export const VideoEmbed = React.forwardRef(function VideoEmbed({ provider, id, t
297
297
  * Muted, looping, decorative video (hero backgrounds). `aria-hidden`, with a visible pause
298
298
  * button (WCAG 2.2.2). Reduced motion shows the poster only.
299
299
  */
300
- export const BackgroundVideo = React.forwardRef(function BackgroundVideo({ src, poster, labels, className, children, ...props }, ref) {
300
+ export const BackgroundVideo = /*#__PURE__*/ React.forwardRef(function BackgroundVideo({ src, poster, labels, className, children, ...props }, ref) {
301
301
  const t = useLabels("videoPlayer", videoLabels, labels);
302
302
  const reduced = useReducedMotion();
303
303
  const video = React.useRef(null);
@@ -18,7 +18,7 @@ function decimalsOf(v) {
18
18
  * <CountUp value={1240} /> reviews · <CountUp value={4.8} locale="tr-TR" />
19
19
  * ```
20
20
  */
21
- export const CountUp = React.forwardRef(function CountUp({ value, from = 0, duration, delay = 0, locale: localeProp, format, className, ...props }, ref) {
21
+ export const CountUp = /*#__PURE__*/ React.forwardRef(function CountUp({ value, from = 0, duration, delay = 0, locale: localeProp, format, className, ...props }, ref) {
22
22
  const ctx = useLocale();
23
23
  const locale = localeProp ?? ctx?.locale ?? "en-US";
24
24
  const fmt = React.useMemo(() => {
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx } 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
  /**
5
5
  * Sets the motion level for everything inside (`data-motion`). SiteShell does this for a site
6
6
  * via its `motion` prop; use MotionScope for any other subtree. `data-motion="off"` on `<html>`
@@ -10,7 +10,7 @@ import { Slot } from "radix-ui";
10
10
  * <MotionScope level="full"><Stagger>…</Stagger></MotionScope>
11
11
  * ```
12
12
  */
13
- export const MotionScope = React.forwardRef(function MotionScope({ level, asChild, ...props }, ref) {
13
+ export const MotionScope = /*#__PURE__*/ React.forwardRef(function MotionScope({ level, asChild, ...props }, ref) {
14
14
  const Comp = asChild ? Slot.Root : "div";
15
15
  return _jsx(Comp, { ref: ref, "data-motion": level, ...props });
16
16
  });
@@ -47,7 +47,7 @@ export function startPageTransition(update, { scope } = {}) {
47
47
  * <PageTransition pageKey={tab}>{panels[tab]}</PageTransition>
48
48
  * ```
49
49
  */
50
- export const PageTransition = React.forwardRef(function PageTransition({ pageKey, className, children, ...props }, ref) {
50
+ export const PageTransition = /*#__PURE__*/ React.forwardRef(function PageTransition({ pageKey, className, children, ...props }, ref) {
51
51
  const first = React.useRef(pageKey);
52
52
  // Inside a View Transition the browser already cross-fades: no second fade on top.
53
53
  const inViewTransition = typeof document !== "undefined" && document.documentElement.hasAttribute("data-vm-transition");
@@ -44,7 +44,7 @@ function useScrollFallback(enabled, ref, measure) {
44
44
  * <Parallax shift={48} className="aspect-[16/9] rounded-ui-lg"><img className="size-full object-cover" … /></Parallax>
45
45
  * ```
46
46
  */
47
- export const Parallax = React.forwardRef(function Parallax({ shift = 40, clip = true, className, style, children, ...props }, ref) {
47
+ export const Parallax = /*#__PURE__*/ React.forwardRef(function Parallax({ shift = 40, clip = true, className, style, children, ...props }, ref) {
48
48
  const inner = React.useRef(null);
49
49
  const [fallback, setFallback] = React.useState(false);
50
50
  React.useEffect(() => {
@@ -72,7 +72,7 @@ export const Parallax = React.forwardRef(function Parallax({ shift = 40, clip =
72
72
  * <ScrollProgress />
73
73
  * ```
74
74
  */
75
- export const ScrollProgress = React.forwardRef(function ScrollProgress({ fixed = true, className, ...props }, ref) {
75
+ export const ScrollProgress = /*#__PURE__*/ React.forwardRef(function ScrollProgress({ fixed = true, className, ...props }, ref) {
76
76
  const inner = React.useRef(null);
77
77
  const [fallback, setFallback] = React.useState(false);
78
78
  React.useEffect(() => setFallback(!supports("animation-timeline: scroll()")), []);
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
3
  import * as React from "react";
4
- import { Slot } from "radix-ui";
4
+ import * as Slot from "radix-ui/slot";
5
5
  import { cn } from "../lib/cn.js";
6
6
  import { motionLevel } from "./core.js";
7
7
  const finePointer = () => typeof window !== "undefined" && typeof window.matchMedia === "function" && window.matchMedia("(hover: hover) and (pointer: fine)").matches;
@@ -79,7 +79,7 @@ function setRefs(node, ...refs) {
79
79
  * <Tilt max={6} glare><article className="surface rounded-ui-lg p-6">…</article></Tilt>
80
80
  * ```
81
81
  */
82
- export const Tilt = React.forwardRef(function Tilt({ max = 5, glare = false, level = "subtle", asChild, className, style, children, ...props }, ref) {
82
+ export const Tilt = /*#__PURE__*/ React.forwardRef(function Tilt({ max = 5, glare = false, level = "subtle", asChild, className, style, children, ...props }, ref) {
83
83
  const inner = React.useRef(null);
84
84
  usePointerVars(inner, level, (el, x, y) => {
85
85
  el.style.setProperty("--vm-tilt-x", `${(-y * max).toFixed(2)}deg`);
@@ -101,7 +101,7 @@ export const Tilt = React.forwardRef(function Tilt({ max = 5, glare = false, lev
101
101
  * <Magnetic><Button variant="primary" size="xl">Book a table</Button></Magnetic>
102
102
  * ```
103
103
  */
104
- export const Magnetic = React.forwardRef(function Magnetic({ strength = 0.3, limit = 10, level = "full", asChild, className, children, ...props }, ref) {
104
+ export const Magnetic = /*#__PURE__*/ React.forwardRef(function Magnetic({ strength = 0.3, limit = 10, level = "full", asChild, className, children, ...props }, ref) {
105
105
  const inner = React.useRef(null);
106
106
  usePointerVars(inner, level, (el, x, y) => {
107
107
  const r = el.getBoundingClientRect();
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
3
  import * as React from "react";
4
- import { Slot } from "radix-ui";
4
+ import * as Slot from "radix-ui/slot";
5
5
  import { cn } from "../lib/cn.js";
6
6
  import { inViewport, ioSupported, motionAllowed, observe, transitionEnd } from "./core.js";
7
7
  const noopSubscribe = () => () => { };
@@ -109,7 +109,7 @@ const timing = (delay, duration, extra) => ({
109
109
  * <Reveal effect="rise" delay={80}><Card>…</Card></Reveal>
110
110
  * ```
111
111
  */
112
- export const Reveal = React.forwardRef(function Reveal({ effect = "rise", delay, duration, once, rootMargin, threshold, disabled, onReveal, asChild, className, style, ...props }, ref) {
112
+ export const Reveal = /*#__PURE__*/ React.forwardRef(function Reveal({ effect = "rise", delay, duration, once, rootMargin, threshold, disabled, onReveal, asChild, className, style, ...props }, ref) {
113
113
  const inner = React.useRef(null);
114
114
  const setRef = useComposedRef(ref, inner);
115
115
  const initial = useReveal(inner, { once, rootMargin, threshold, disabled, onReveal });
@@ -124,7 +124,7 @@ export const Reveal = React.forwardRef(function Reveal({ effect = "rise", delay,
124
124
  * <Stagger asChild step={70}><ul className="grid grid-cols-3">{plans.map(…)}</ul></Stagger>
125
125
  * ```
126
126
  */
127
- export const Stagger = React.forwardRef(function Stagger({ effect = "rise", step, delay, duration, once, rootMargin, threshold, disabled, onReveal, asChild, className, style, ...props }, ref) {
127
+ export const Stagger = /*#__PURE__*/ React.forwardRef(function Stagger({ effect = "rise", step, delay, duration, once, rootMargin, threshold, disabled, onReveal, asChild, className, style, ...props }, ref) {
128
128
  const inner = React.useRef(null);
129
129
  const setRef = useComposedRef(ref, inner);
130
130
  const initial = useReveal(inner, { once, rootMargin, threshold, disabled, onReveal, stagger: true });
@@ -13,7 +13,7 @@ import { useIsoLayoutEffect } from "./reveal.js";
13
13
  * <SkeletonSwap loading={isLoading} skeleton={<InvoiceSkeleton />}><InvoiceTable rows={rows} /></SkeletonSwap>
14
14
  * ```
15
15
  */
16
- export const SkeletonSwap = React.forwardRef(function SkeletonSwap({ loading, skeleton, className, children, ...props }, ref) {
16
+ export const SkeletonSwap = /*#__PURE__*/ React.forwardRef(function SkeletonSwap({ loading, skeleton, className, children, ...props }, ref) {
17
17
  const inner = React.useRef(null);
18
18
  const [prevLoading, setPrevLoading] = React.useState(loading);
19
19
  const [leaving, setLeaving] = React.useState(false);
@@ -14,7 +14,7 @@ import { useReveal } from "./reveal.js";
14
14
  * <TextReveal as="h2">Small rooms, slow mornings, nothing to scroll.</TextReveal>
15
15
  * ```
16
16
  */
17
- export const TextReveal = React.forwardRef(function TextReveal({ children, as: Tag = "h2", by = "word", effect = "mask", step, delay, once, rootMargin, threshold, disabled, onReveal, className, style, ...props }, ref) {
17
+ export const TextReveal = /*#__PURE__*/ React.forwardRef(function TextReveal({ children, as: Tag = "h2", by = "word", effect = "mask", step, delay, once, rootMargin, threshold, disabled, onReveal, className, style, ...props }, ref) {
18
18
  const inner = React.useRef(null);
19
19
  const initial = useReveal(inner, { once, rootMargin, threshold, disabled, onReveal });
20
20
  const text = String(children);
@@ -11,6 +11,6 @@ import { cn } from "../lib/cn.js";
11
11
  * <Ticker as="ul" duration={30}>{logos.map((l) => <li key={l.name}>…</li>)}</Ticker>
12
12
  * ```
13
13
  */
14
- export const Ticker = React.forwardRef(function Ticker({ duration = 40, direction = "start", as: Group = "div", gap, fade = true, controls = true, pauseLabel = "Pause animation", groupClassName, className, style, children, "aria-label": ariaLabel, ...props }, ref) {
14
+ export const Ticker = /*#__PURE__*/ React.forwardRef(function Ticker({ duration = 40, direction = "start", as: Group = "div", gap, fade = true, controls = true, pauseLabel = "Pause animation", groupClassName, className, style, children, "aria-label": ariaLabel, ...props }, ref) {
15
15
  return (_jsxs("div", { ref: ref, "data-direction": direction, "data-fade": fade ? "" : undefined, className: cn("vm-marquee", className), style: { "--vm-marquee-duration": `${duration}s`, ...(gap ? { "--vm-marquee-gap": gap } : null), ...style }, ...props, children: [_jsx("div", { className: "vm-marquee-viewport", children: _jsxs("div", { className: "vm-marquee-track", children: [_jsx(Group, { className: cn("vm-marquee-group", groupClassName), "aria-label": ariaLabel, children: children }), _jsx(Group, { className: cn("vm-marquee-group", groupClassName), "aria-hidden": "true", inert: true, "data-marquee-copy": "", children: children })] }) }), controls ? (_jsxs("label", { className: "vm-marquee-toggle", children: [_jsx("input", { type: "checkbox", className: "vm-marquee-pause sr-only", "aria-label": pauseLabel }), _jsxs("svg", { "aria-hidden": "true", viewBox: "0 0 16 16", className: "vm-marquee-icon-pause", children: [_jsx("rect", { x: "4", y: "3", width: "2.5", height: "10", rx: "0.5" }), _jsx("rect", { x: "9.5", y: "3", width: "2.5", height: "10", rx: "0.5" })] }), _jsx("svg", { "aria-hidden": "true", viewBox: "0 0 16 16", className: "vm-marquee-icon-play", children: _jsx("path", { d: "M5 3.2v9.6a.5.5 0 0 0 .77.42l7.2-4.8a.5.5 0 0 0 0-.84l-7.2-4.8A.5.5 0 0 0 5 3.2Z" }) })] })) : null] }));
16
16
  });
@@ -0,0 +1 @@
1
+ {"version":1,"projects":{"":{"files":{"scheduler/core/duration.test.ts":{"failed":false,"duration":82.473375,"lastRun":1794296632342},"scheduler/core/gantt.test.ts":{"failed":false,"duration":4.834499999999991,"lastRun":1794296632342},"scheduler/core/layout.test.ts":{"failed":false,"duration":36.943083,"lastRun":1794296632342},"scheduler/core/time-scale.test.ts":{"failed":false,"duration":10.341207999999938,"lastRun":1794296632342}}}}}
@@ -68,7 +68,7 @@ export const ganttLabels = {
68
68
  quarterShort: "Q{quarter}",
69
69
  noOwner: "Unassigned",
70
70
  };
71
- export const ganttVariants = cva("ui-gantt relative flex min-w-0 flex-col", {
71
+ export const ganttVariants = /*#__PURE__*/ cva("ui-gantt relative flex min-w-0 flex-col", {
72
72
  variants: { framed: { true: "surface rounded-ui-lg", false: "" } },
73
73
  defaultVariants: { framed: true },
74
74
  });
@@ -88,7 +88,7 @@ const COL_W = { assignees: 76, start: 84, end: 84, duration: 128, progress: 76,
88
88
  * />
89
89
  * ```
90
90
  */
91
- export const Gantt = React.forwardRef(function Gantt({ tasks, links = [], scale: scaleProp, defaultScale = "week", onScaleChange, scales = ["day", "week", "month", "quarter"], workCalendar, durationUnit = "workdays", onTaskChange, onLinkCreate, onLinkDelete, autoSchedule = true, readOnly = false, columns = ["title", "start", "end", "duration", "progress"], gridWidth: gridWidthProp, defaultGridWidth, onGridWidthChange, collapsed: collapsedProp, defaultCollapsed = [], onCollapsedChange, height = "32rem", rowHeight: rowHeightProp, virtualizeAt = 150, toolbar, today: todayProp, labels, className, ...props }, ref) {
91
+ export const Gantt = /*#__PURE__*/ React.forwardRef(function Gantt({ tasks, links = [], scale: scaleProp, defaultScale = "week", onScaleChange, scales = ["day", "week", "month", "quarter"], workCalendar, durationUnit = "workdays", onTaskChange, onLinkCreate, onLinkDelete, autoSchedule = true, readOnly = false, columns = ["title", "start", "end", "duration", "progress"], gridWidth: gridWidthProp, defaultGridWidth, onGridWidthChange, collapsed: collapsedProp, defaultCollapsed = [], onCollapsedChange, height = "32rem", rowHeight: rowHeightProp, virtualizeAt = 150, toolbar, today: todayProp, labels, className, ...props }, ref) {
92
92
  const { locale, timeZone, dir } = useLocale();
93
93
  const rtl = dir === "rtl";
94
94
  const t = useLabels("gantt", ganttLabels, labels);
@@ -64,7 +64,7 @@ export const resourceCalendarLabels = {
64
64
  saveFailed: "Couldn't save the schedule. Your change was undone.",
65
65
  loading: "Loading schedule…",
66
66
  };
67
- export const resourceCalendarVariants = cva("ui-rc relative flex min-w-0 flex-col", {
67
+ export const resourceCalendarVariants = /*#__PURE__*/ cva("ui-rc relative flex min-w-0 flex-col", {
68
68
  variants: { variant: { blocks: "", codes: "" }, framed: { true: "surface rounded-ui-lg", false: "" } },
69
69
  defaultVariants: { variant: "blocks", framed: true },
70
70
  });
@@ -92,7 +92,7 @@ const blockEndDay = (b, tz) => (isDateOnly(b.start) ? (isDateOnly(b.end) ? b.end
92
92
  * />
93
93
  * ```
94
94
  */
95
- export const ResourceCalendar = React.forwardRef(function ResourceCalendar({ resources, blocks, range, onRangeChange, unit = "day", hours = { start: "08:00", end: "20:00" }, variant = "blocks", templates = [], workCalendar, rules = [], onBlocksChange, cellActions = [], onCellAction, onBlockOpen, renderBlock, summary, rowSummary, groupBy = null, showRejected = false, readOnly = false, loading = false, timeZone, height = "32rem", virtualizeAt = 60, toolbar, now: nowProp, labels, className, ...props }, ref) {
95
+ export const ResourceCalendar = /*#__PURE__*/ React.forwardRef(function ResourceCalendar({ resources, blocks, range, onRangeChange, unit = "day", hours = { start: "08:00", end: "20:00" }, variant = "blocks", templates = [], workCalendar, rules = [], onBlocksChange, cellActions = [], onCellAction, onBlockOpen, renderBlock, summary, rowSummary, groupBy = null, showRejected = false, readOnly = false, loading = false, timeZone, height = "32rem", virtualizeAt = 60, toolbar, now: nowProp, labels, className, ...props }, ref) {
96
96
  const { locale, timeZone: ctxZone, dir } = useLocale();
97
97
  const tz = timeZone ?? ctxZone;
98
98
  const rtl = dir === "rtl";
@@ -75,7 +75,7 @@ export const schedulerLabels = {
75
75
  dayGrid: "{month}",
76
76
  weekNumber: "Week {week}",
77
77
  };
78
- export const schedulerVariants = cva("ui-sch relative flex min-w-0 flex-col", {
78
+ export const schedulerVariants = /*#__PURE__*/ cva("ui-sch relative flex min-w-0 flex-col", {
79
79
  variants: {
80
80
  variant: {
81
81
  full: "surface rounded-ui-lg",
@@ -84,7 +84,7 @@ export const schedulerVariants = cva("ui-sch relative flex min-w-0 flex-col", {
84
84
  },
85
85
  defaultVariants: { variant: "full" },
86
86
  });
87
- const SchedulerContext = React.createContext(null);
87
+ const SchedulerContext = /*#__PURE__*/ React.createContext(null);
88
88
  const useSch = () => {
89
89
  const c = React.useContext(SchedulerContext);
90
90
  if (!c)
@@ -136,7 +136,7 @@ function stepDate(view, anchor, dir, listDays) {
136
136
  * />
137
137
  * ```
138
138
  */
139
- export const Scheduler = React.forwardRef(function Scheduler({ events, view: viewProp, defaultView = "week", onViewChange, views = ["day", "week", "month", "list"], date: dateProp, defaultDate, onDateChange, onRangeChange, slotMinutes = 30, snapMinutes = 15, dayRange, scrollToTime, height = "36rem", workCalendar, restrictToBusinessHours = false, timeZone, onCreate, onEventChange, onEventOpen, renderEvent, maxEventsPerDay = 3, variant = "full", loading = false, readOnly = false, toolbar, listDays = 7, now: nowProp, labels, className, ...props }, ref) {
139
+ export const Scheduler = /*#__PURE__*/ React.forwardRef(function Scheduler({ events, view: viewProp, defaultView = "week", onViewChange, views = ["day", "week", "month", "list"], date: dateProp, defaultDate, onDateChange, onRangeChange, slotMinutes = 30, snapMinutes = 15, dayRange, scrollToTime, height = "36rem", workCalendar, restrictToBusinessHours = false, timeZone, onCreate, onEventChange, onEventOpen, renderEvent, maxEventsPerDay = 3, variant = "full", loading = false, readOnly = false, toolbar, listDays = 7, now: nowProp, labels, className, ...props }, ref) {
140
140
  const { locale, timeZone: ctxZone, dir } = useLocale();
141
141
  const tz = timeZone ?? ctxZone;
142
142
  const t = useLabels("scheduler", schedulerLabels, labels);
@@ -161,7 +161,7 @@ const clock = (sec) => {
161
161
  * <TimerButton adapter={adapter} projects={projects} defaultProjectId="mobile-app" />
162
162
  * ```
163
163
  */
164
- export const TimerButton = React.forwardRef(function TimerButton({ adapter, projects = [], projectId: projectIdProp, defaultProjectId, onProjectChange, variant = "compact", staleAfterMin = 600, onStart, onStop, onAdjust, titleTicker = false, labels, className, ...props }, ref) {
164
+ export const TimerButton = /*#__PURE__*/ React.forwardRef(function TimerButton({ adapter, projects = [], projectId: projectIdProp, defaultProjectId, onProjectChange, variant = "compact", staleAfterMin = 600, onStart, onStop, onAdjust, titleTicker = false, labels, className, ...props }, ref) {
165
165
  const t = useLabels("timeTracker", timeTrackerLabels, labels);
166
166
  const { locale } = useLocale();
167
167
  const [projectId, setProjectId] = useControllableState({ value: projectIdProp, defaultValue: defaultProjectId ?? projects[0]?.id ?? "", onChange: onProjectChange });
@@ -232,7 +232,7 @@ export const TimerButton = React.forwardRef(function TimerButton({ adapter, proj
232
232
  const button = (_jsxs("button", { type: "button", "aria-pressed": running, "aria-busy": busy || undefined, "data-slot": "timer-button", "data-running": running ? "" : undefined, disabled: busy, onClick: toggle, className: cn("ui-tt-btn focus-ring", variant === "full" && "ui-tt-btn-lg"), children: [_jsx("span", { className: "sr-only", children: name }), running ? _jsx("span", { "aria-hidden": true, className: "ui-tt-pulse" }) : _jsx(Play, { "aria-hidden": true, className: "ui-tt-ico" }), _jsx("span", { "aria-hidden": true, className: "tabular", children: clock(elapsedSec) }), variant === "compact" ? _jsx("span", { "aria-hidden": true, className: "ui-tt-proj", children: projectName }) : null, running && variant === "full" ? _jsx(Square, { "aria-hidden": true, className: "ui-tt-ico" }) : null] }));
233
233
  return (_jsxs("div", { ref: ref, "data-slot": "timer", "data-variant": variant, className: cn(variant === "full" ? "ui-tt-full grid gap-3" : "inline-flex items-center gap-2", className), ...props, children: [variant === "full" ? (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex flex-wrap items-end gap-2", children: [_jsxs("label", { className: "grid min-w-[12rem] flex-1 gap-1", children: [_jsx("span", { className: "text-[12px] font-medium text-fg-muted", children: t("project") }), _jsx(NativeSelect, { value: active?.projectId ?? projectId, disabled: running, onChange: (e) => setProjectId(e.target.value), items: projects.map((p) => ({ value: p.id, label: p.meta ? `${p.label} · ${p.meta}` : p.label })) })] }), _jsxs("label", { className: "grid min-w-[14rem] flex-[2] gap-1", children: [_jsx("span", { className: "text-[12px] font-medium text-fg-muted", children: t("note") }), _jsx(Input, { value: active?.note ?? note, disabled: running, onChange: (e) => setNote(e.target.value), placeholder: t("notePlaceholder") })] }), button] }), elsewhere || stale ? (_jsxs("p", { className: "flex items-center gap-2 text-[12.5px]", "data-slot": "timer-note", children: [stale ? _jsx(TriangleAlert, { "aria-hidden": true, className: "size-3.5 text-warning" }) : null, _jsx("span", { className: stale ? "text-warning" : "text-fg-muted", children: stale ? t("stale", { duration: formatDuration(elapsedSec / 60, locale) }) : t("elsewhere") }), stale && onAdjust && active ? _jsx(Button, { size: "xs", variant: "ghost", onClick: () => onAdjust(active), children: t("adjust") }) : null] })) : null] })) : (_jsxs(_Fragment, { children: [button, stale ? _jsx("span", { className: "sr-only", children: t("stale", { duration: formatDuration(elapsedSec / 60, locale) }) }) : null, stale ? _jsx(TriangleAlert, { "aria-hidden": true, className: "size-3.5 text-warning" }) : null] })), _jsx("span", { className: "sr-only", "aria-live": "polite", children: message })] }));
234
234
  });
235
- export const timesheetVariants = cva("ui-ts relative min-w-0", {
235
+ export const timesheetVariants = /*#__PURE__*/ cva("ui-ts relative min-w-0", {
236
236
  variants: { framed: { true: "surface rounded-ui-lg", false: "" } },
237
237
  defaultVariants: { framed: true },
238
238
  });
@@ -241,7 +241,7 @@ export const timesheetVariants = cva("ui-ts relative min-w-0", {
241
241
  * <Timesheet weekStart="2026-11-09" rows={projects} value={hours} onCellChange={save} dailyTarget={8 * 60} />
242
242
  * ```
243
243
  */
244
- export const Timesheet = React.forwardRef(function Timesheet({ weekStart, days: dayCount = 7, rows, value: valueProp, defaultValue, onCellChange, dailyTarget, locked = false, workCalendar, display = "clock", labels, className, ...props }, ref) {
244
+ export const Timesheet = /*#__PURE__*/ React.forwardRef(function Timesheet({ weekStart, days: dayCount = 7, rows, value: valueProp, defaultValue, onCellChange, dailyTarget, locked = false, workCalendar, display = "clock", labels, className, ...props }, ref) {
245
245
  const t = useLabels("timeTracker", timeTrackerLabels, labels);
246
246
  const { locale, timeZone } = useLocale();
247
247
  const cal = React.useMemo(() => resolveWorkCalendar(workCalendar, locale), [workCalendar, locale]);
@@ -372,7 +372,7 @@ export const Timesheet = React.forwardRef(function Timesheet({ weekStart, days:
372
372
  });
373
373
  const compareDay = (a, b) => (a < b ? -1 : a > b ? 1 : 0);
374
374
  /** Entries grouped by day (newest first) with day totals. */
375
- export const TimeEntryList = React.forwardRef(function TimeEntryList({ entries, onEntryOpen, showAmounts = false, labels, className, ...props }, ref) {
375
+ export const TimeEntryList = /*#__PURE__*/ React.forwardRef(function TimeEntryList({ entries, onEntryOpen, showAmounts = false, labels, className, ...props }, ref) {
376
376
  const t = useLabels("timeTracker", timeTrackerLabels, labels);
377
377
  const { locale, timeZone, format } = useLocale();
378
378
  const now = useNow(entries.some((e) => !e.end && e.durationMin === undefined), 30_000);
@@ -60,7 +60,7 @@ export const kanbanLabels = {
60
60
  retry: "Retry",
61
61
  saving: "Saving",
62
62
  };
63
- const KanbanContext = React.createContext(null);
63
+ const KanbanContext = /*#__PURE__*/ React.createContext(null);
64
64
  function useKanban() {
65
65
  const ctx = React.useContext(KanbanContext);
66
66
  if (!ctx)
@@ -73,7 +73,7 @@ const defaultGetLabel = (item) => {
73
73
  const v = o?.title ?? o?.name ?? o?.label;
74
74
  return typeof v === "string" ? v : undefined;
75
75
  };
76
- export const kanbanColumnVariants = cva("vui-kanban-column relative flex min-h-0 shrink-0 flex-col rounded-ui-lg", {
76
+ export const kanbanColumnVariants = /*#__PURE__*/ cva("vui-kanban-column relative flex min-h-0 shrink-0 flex-col rounded-ui-lg", {
77
77
  variants: {
78
78
  width: { sm: "w-[15.5rem]", md: "w-[18.5rem]", lg: "w-[22rem]" },
79
79
  },