@viraui/react 2026.6.5 → 2026.7.0-next.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 (168) hide show
  1. package/dist/catalog.json +24 -0
  2. package/dist/components/accordion/accordion-item.d.ts +10 -10
  3. package/dist/components/accordion/accordion.d.ts +2 -2
  4. package/dist/components/annotate/annotate.d.ts +15 -15
  5. package/dist/components/autocomplete/autocomplete-item.d.ts +3 -3
  6. package/dist/components/autocomplete/autocomplete.d.ts +12 -12
  7. package/dist/components/autocomplete/autocomplete.js +1 -1
  8. package/dist/components/avatar/avatar.d.ts +6 -6
  9. package/dist/components/avatar-group/avatar-group.d.ts +6 -6
  10. package/dist/components/badge/badge.d.ts +5 -5
  11. package/dist/components/basic-input/basic-input.d.ts +3 -2
  12. package/dist/components/basic-input/basic-input.js +7 -0
  13. package/dist/components/basic-input/input-control-group.d.ts +2 -2
  14. package/dist/components/beam/beam-pulse-driver.d.ts +1 -0
  15. package/dist/components/beam/beam-pulse-driver.js +2 -2
  16. package/dist/components/beam/beam.css +1 -1
  17. package/dist/components/beam/beam.d.ts +17 -14
  18. package/dist/components/beam/beam.js +31 -26
  19. package/dist/components/bleed/bleed.d.ts +3 -3
  20. package/dist/components/button/button-link.d.ts +1 -1
  21. package/dist/components/button/button.d.ts +1 -1
  22. package/dist/components/checkbox/checkbox-group.d.ts +1 -1
  23. package/dist/components/checkbox/checkbox.d.ts +7 -7
  24. package/dist/components/chip/chip.d.ts +6 -6
  25. package/dist/components/clamp-text/clamp-text.d.ts +5 -5
  26. package/dist/components/dialog/dialog-close.d.ts +1 -1
  27. package/dist/components/dialog/dialog-indent-background.d.ts +1 -1
  28. package/dist/components/dialog/dialog-indent.d.ts +1 -1
  29. package/dist/components/dialog/dialog-sheet.d.ts +10 -10
  30. package/dist/components/dialog/dialog-sheet.js +1 -1
  31. package/dist/components/dialog/dialog-trigger.d.ts +1 -1
  32. package/dist/components/dialog/dialog.d.ts +1 -1
  33. package/dist/components/disclosure/disclosure-panel.d.ts +12 -0
  34. package/dist/components/disclosure/disclosure-panel.js +13 -0
  35. package/dist/components/disclosure/disclosure-trigger.d.ts +46 -0
  36. package/dist/components/disclosure/disclosure-trigger.js +82 -0
  37. package/dist/components/disclosure/disclosure.css +1 -0
  38. package/dist/components/disclosure/disclosure.d.ts +25 -0
  39. package/dist/components/disclosure/disclosure.js +30 -0
  40. package/dist/components/disclosure/disclosure.module.js +15 -0
  41. package/dist/components/disclosure/index.d.ts +4 -0
  42. package/dist/components/elevator/elevator.d.ts +7 -7
  43. package/dist/components/fieldset/fieldset.d.ts +4 -4
  44. package/dist/components/fit-text/fit-text.d.ts +2 -2
  45. package/dist/components/glow/glow.d.ts +12 -12
  46. package/dist/components/grid/grid-item.d.ts +8 -8
  47. package/dist/components/grid/grid.d.ts +12 -12
  48. package/dist/components/icon-button/icon-button-link.d.ts +2 -2
  49. package/dist/components/icon-button/icon-button.d.ts +2 -2
  50. package/dist/components/index.d.ts +4 -0
  51. package/dist/components/linear-progress/linear-progress.d.ts +4 -4
  52. package/dist/components/masonry/masonry-item.d.ts +3 -3
  53. package/dist/components/masonry/masonry.d.ts +4 -4
  54. package/dist/components/menu/menu-checkbox-item.d.ts +4 -4
  55. package/dist/components/menu/menu-item.d.ts +4 -4
  56. package/dist/components/menu/menu-link-item.d.ts +4 -4
  57. package/dist/components/menu/menu-popup.d.ts +2 -2
  58. package/dist/components/menu/menu-popup.js +1 -1
  59. package/dist/components/menu/menu-radio-group.d.ts +2 -2
  60. package/dist/components/menu/menu-radio-item.d.ts +4 -4
  61. package/dist/components/menu/menu-separator.d.ts +1 -1
  62. package/dist/components/menu/menu-submenu-trigger.d.ts +3 -3
  63. package/dist/components/menu/menu.d.ts +3 -3
  64. package/dist/components/meter/meter.css +1 -1
  65. package/dist/components/meter/meter.d.ts +15 -5
  66. package/dist/components/meter/meter.js +2 -1
  67. package/dist/components/number-field/index.d.ts +2 -0
  68. package/dist/components/number-field/number-field.css +1 -0
  69. package/dist/components/number-field/number-field.d.ts +78 -0
  70. package/dist/components/number-field/number-field.js +120 -0
  71. package/dist/components/number-field/number-field.module.js +21 -0
  72. package/dist/components/otp-field/index.d.ts +4 -0
  73. package/dist/components/otp-field/otp-field-input.d.ts +12 -0
  74. package/dist/components/otp-field/otp-field-input.js +29 -0
  75. package/dist/components/otp-field/otp-field-separator.d.ts +13 -0
  76. package/dist/components/otp-field/otp-field-separator.js +20 -0
  77. package/dist/components/otp-field/otp-field.css +1 -0
  78. package/dist/components/otp-field/otp-field.d.ts +48 -0
  79. package/dist/components/otp-field/otp-field.js +78 -0
  80. package/dist/components/otp-field/otp-field.module.js +23 -0
  81. package/dist/components/popover/popover-sheet.d.ts +6 -6
  82. package/dist/components/popover/popover.d.ts +5 -5
  83. package/dist/components/progressive-blur/progressive-blur.d.ts +5 -5
  84. package/dist/components/prose/index.d.ts +2 -0
  85. package/dist/components/prose/prose.css +1 -0
  86. package/dist/components/prose/prose.d.ts +40 -0
  87. package/dist/components/prose/prose.js +27 -0
  88. package/dist/components/prose/prose.module.js +5 -0
  89. package/dist/components/radio/radio-group.d.ts +1 -1
  90. package/dist/components/radio/radio.d.ts +6 -6
  91. package/dist/components/select/select-indicator-slot.d.ts +1 -1
  92. package/dist/components/select/select-option.d.ts +4 -4
  93. package/dist/components/select/select-separator.d.ts +1 -1
  94. package/dist/components/select/select.d.ts +10 -10
  95. package/dist/components/select/select.js +1 -1
  96. package/dist/components/separator/separator.d.ts +15 -8
  97. package/dist/components/separator/separator.js +2 -1
  98. package/dist/components/shimmer/shimmer.d.ts +6 -6
  99. package/dist/components/skeleton/skeleton-overlay.d.ts +5 -5
  100. package/dist/components/skeleton/skeleton.d.ts +9 -9
  101. package/dist/components/slider/slider.d.ts +7 -7
  102. package/dist/components/spinner/spinner.d.ts +3 -3
  103. package/dist/components/stack/stack.d.ts +17 -17
  104. package/dist/components/static-noise/static-noise.d.ts +5 -5
  105. package/dist/components/surface/surface.d.ts +12 -12
  106. package/dist/components/switch/switch.d.ts +7 -7
  107. package/dist/components/tabs/tabs-list.d.ts +1 -1
  108. package/dist/components/tabs/tabs-panel.d.ts +1 -1
  109. package/dist/components/tabs/tabs-tab.d.ts +3 -3
  110. package/dist/components/tabs/tabs.d.ts +2 -2
  111. package/dist/components/text/text.css +1 -1
  112. package/dist/components/text/text.d.ts +24 -23
  113. package/dist/components/text/text.js +4 -2
  114. package/dist/components/textarea/textarea.d.ts +6 -6
  115. package/dist/components/textfield/textfield.css +1 -1
  116. package/dist/components/textfield/textfield.d.ts +19 -11
  117. package/dist/components/textfield/textfield.js +43 -39
  118. package/dist/components/textfield/textfield.module.js +3 -1
  119. package/dist/components/title/title.css +1 -1
  120. package/dist/components/title/title.d.ts +22 -21
  121. package/dist/components/title/title.js +4 -2
  122. package/dist/components/toast/toast-action.d.ts +1 -1
  123. package/dist/components/toast/toast-banner.d.ts +7 -7
  124. package/dist/components/toast/toast-banner.js +1 -1
  125. package/dist/components/toast/toast-viewport.d.ts +2 -2
  126. package/dist/components/toggle-button/toggle-button.d.ts +6 -6
  127. package/dist/components/toggle-group/toggle-group.d.ts +1 -1
  128. package/dist/components/tooltip/tooltip-content.d.ts +2 -2
  129. package/dist/components/typewriter/typewriter.d.ts +10 -10
  130. package/dist/index.js +7 -3
  131. package/dist/specs/components/accordion/usage.xml +1 -0
  132. package/dist/specs/components/beam/a11y.xml +3 -3
  133. package/dist/specs/components/beam/props.xml +22 -1
  134. package/dist/specs/components/beam/usage.xml +1 -0
  135. package/dist/specs/components/disclosure/a11y.xml +9 -0
  136. package/dist/specs/components/disclosure/meta.xml +20 -0
  137. package/dist/specs/components/disclosure/patterns.xml +55 -0
  138. package/dist/specs/components/disclosure/props.xml +54 -0
  139. package/dist/specs/components/disclosure/usage.xml +11 -0
  140. package/dist/specs/components/meter/patterns.xml +12 -0
  141. package/dist/specs/components/meter/props.xml +7 -0
  142. package/dist/specs/components/meter/usage.xml +2 -0
  143. package/dist/specs/components/number-field/a11y.xml +10 -0
  144. package/dist/specs/components/number-field/meta.xml +21 -0
  145. package/dist/specs/components/number-field/patterns.xml +43 -0
  146. package/dist/specs/components/number-field/props.xml +35 -0
  147. package/dist/specs/components/number-field/usage.xml +12 -0
  148. package/dist/specs/components/otp-field/a11y.xml +10 -0
  149. package/dist/specs/components/otp-field/meta.xml +20 -0
  150. package/dist/specs/components/otp-field/patterns.xml +66 -0
  151. package/dist/specs/components/otp-field/props.xml +29 -0
  152. package/dist/specs/components/otp-field/usage.xml +13 -0
  153. package/dist/specs/components/prose/a11y.xml +7 -0
  154. package/dist/specs/components/prose/meta.xml +18 -0
  155. package/dist/specs/components/prose/patterns.xml +59 -0
  156. package/dist/specs/components/prose/props.xml +37 -0
  157. package/dist/specs/components/prose/usage.xml +12 -0
  158. package/dist/specs/components/separator/props.xml +3 -0
  159. package/dist/specs/components/separator/usage.xml +1 -0
  160. package/dist/specs/components/text/props.xml +2 -2
  161. package/dist/specs/components/text/usage.xml +1 -0
  162. package/dist/specs/components/textfield/meta.xml +1 -0
  163. package/dist/specs/components/textfield/props.xml +6 -1
  164. package/dist/specs/components/textfield/usage.xml +2 -1
  165. package/dist/specs/components/title/props.xml +2 -2
  166. package/dist/specs/components/title/usage.xml +1 -0
  167. package/dist/specs/index.xml +41 -1
  168. package/package.json +2 -2
@@ -10,19 +10,19 @@ type GridAxisPadding = GridSpace | [GridSpace | 0, GridSpace | 0];
10
10
  * Includes standard `div` attributes such as `id`, `role`, `title`, and event handlers,
11
11
  * plus Vira-owned CSS Grid controls and Base UI `render` support for replacing the root element.
12
12
  *
13
- * @default Base UI pass-through props keep upstream defaults.
13
+ * @defaultValue Base UI pass-through props keep upstream defaults.
14
14
  */
15
15
  export type GridProps = React.ComponentPropsWithoutRef<'div'> & {
16
16
  /**
17
17
  * Replaces the default `div` root using Base UI render semantics.
18
18
  *
19
- * @default The grid renders a `div` root.
19
+ * @defaultValue The grid renders a `div` root.
20
20
  */
21
21
  render?: useRender.RenderProp;
22
22
  /**
23
23
  * Ref forwarded to the rendered grid root element.
24
24
  *
25
- * @default No ref is attached.
25
+ * @defaultValue No ref is attached.
26
26
  */
27
27
  ref?: React.Ref<HTMLElement>;
28
28
  /**
@@ -33,32 +33,32 @@ export type GridProps = React.ComponentPropsWithoutRef<'div'> & {
33
33
  * explicit `colMinWidth` as well for fixed-breadth tracks and
34
34
  * `data-grid-fixed-breadth="true"` (`inline-size: max-content`).
35
35
  *
36
- * @default No fixed column count (uses `filling` auto tracks).
36
+ * @defaultValue No fixed column count (uses `filling` auto tracks).
37
37
  */
38
38
  columns?: number;
39
39
  /**
40
40
  * Fixes the number of row tracks via `--vui-grid-rows`.
41
41
  *
42
- * @default No fixed row count.
42
+ * @defaultValue No fixed row count.
43
43
  */
44
44
  rows?: number;
45
45
  /**
46
46
  * Sets the gap between grid rows using the Vira space token scale.
47
47
  *
48
- * @default No row gap (`0`).
48
+ * @defaultValue No row gap (`0`).
49
49
  */
50
50
  rowGap?: GridSpace;
51
51
  /**
52
52
  * Sets the gap between grid columns using the Vira space token scale.
53
53
  *
54
- * @default No column gap (`0`).
54
+ * @defaultValue No column gap (`0`).
55
55
  */
56
56
  columnGap?: GridSpace;
57
57
  /**
58
58
  * Controls `repeat(auto-fill|auto-fit, …)` when `columns` is unset.
59
59
  * Pass `false` to skip the filling data attribute.
60
60
  *
61
- * @default 'fill'
61
+ * @defaultValue 'fill'
62
62
  */
63
63
  filling?: 'fit' | 'fill' | false;
64
64
  /**
@@ -67,25 +67,25 @@ export type GridProps = React.ComponentPropsWithoutRef<'div'> & {
67
67
  * tracks (`repeat(N, var(--vui-grid-column-min-w))`) and sets
68
68
  * `data-grid-fixed-breadth`; omit this prop to keep fluid `1fr` tracks.
69
69
  *
70
- * @default '10rem'
70
+ * @defaultValue '10rem'
71
71
  */
72
72
  colMinWidth?: string;
73
73
  /**
74
74
  * Minimum row track size used when `rows` is set.
75
75
  *
76
- * @default '1fr'
76
+ * @defaultValue '1fr'
77
77
  */
78
78
  rowMinHeight?: string;
79
79
  /**
80
80
  * Sets inline padding using one token for both sides or a `[start, end]` tuple.
81
81
  *
82
- * @default No inline padding.
82
+ * @defaultValue No inline padding.
83
83
  */
84
84
  hPadding?: GridAxisPadding;
85
85
  /**
86
86
  * Sets block padding using one token for both sides or a `[start, end]` tuple.
87
87
  *
88
- * @default No block padding.
88
+ * @defaultValue No block padding.
89
89
  */
90
90
  vPadding?: GridAxisPadding;
91
91
  };
@@ -18,13 +18,13 @@ export type IconButtonLinkProps = Omit<ButtonLinkProps, 'children' | 'addon' | '
18
18
  /**
19
19
  * Controls the visual button size.
20
20
  *
21
- * @default 'm'
21
+ * @defaultValue 'm'
22
22
  */
23
23
  size?: ButtonLinkProps['size'];
24
24
  /**
25
25
  * Icon rendered as the sole visible control content.
26
26
  *
27
- * @default No default; required for every IconButtonLink.
27
+ * @defaultValue No default; required for every IconButtonLink.
28
28
  */
29
29
  icon: ReactNode;
30
30
  };
@@ -17,13 +17,13 @@ export type IconButtonProps = Omit<ButtonProps, 'children' | 'addon' | 'addonPos
17
17
  /**
18
18
  * Controls the visual button size.
19
19
  *
20
- * @default 'm'
20
+ * @defaultValue 'm'
21
21
  */
22
22
  size?: ButtonProps['size'];
23
23
  /**
24
24
  * Icon rendered as the sole visible control content.
25
25
  *
26
- * @default No default; required for every IconButton.
26
+ * @defaultValue No default; required for every IconButton.
27
27
  */
28
28
  icon: ReactNode;
29
29
  };
@@ -12,6 +12,7 @@ export * from './checkbox';
12
12
  export * from './chip';
13
13
  export * from './clamp-text';
14
14
  export * from './dialog';
15
+ export * from './disclosure';
15
16
  export * from './elevator';
16
17
  export * from './fieldset';
17
18
  export * from './fit-text';
@@ -22,8 +23,11 @@ export * from './linear-progress';
22
23
  export * from './masonry';
23
24
  export * from './menu';
24
25
  export * from './meter';
26
+ export * from './number-field';
27
+ export * from './otp-field';
25
28
  export * from './popover';
26
29
  export * from './progressive-blur';
30
+ export * from './prose';
27
31
  export * from './radio';
28
32
  export * from './select';
29
33
  export * from './separator';
@@ -6,19 +6,19 @@ import type * as React from 'react';
6
6
  * Includes Base UI progress root props such as `value`, `min`, `max`, `format`,
7
7
  * and `getAriaValueText`, plus optional label, description, and value display.
8
8
  *
9
- * @default Base UI pass-through props keep upstream defaults.
9
+ * @defaultValue Base UI pass-through props keep upstream defaults.
10
10
  */
11
11
  export type LinearProgressProps = ProgressRoot.Props & {
12
12
  /**
13
13
  * Visible label rendered through `Progress.Label` with shared internal `FieldLabel`.
14
14
  *
15
- * @default No label is rendered.
15
+ * @defaultValue No label is rendered.
16
16
  */
17
17
  label?: React.ReactNode;
18
18
  /**
19
19
  * Static helper copy rendered with `Text` below the progress track.
20
20
  *
21
- * @default No description is rendered.
21
+ * @defaultValue No description is rendered.
22
22
  */
23
23
  description?: React.ReactNode;
24
24
  /**
@@ -27,7 +27,7 @@ export type LinearProgressProps = ProgressRoot.Props & {
27
27
  * Pass `true` for Base UI default formatting, or a function matching
28
28
  * `Progress.Value` `children` to customize the printed label.
29
29
  *
30
- * @default Value UI is hidden.
30
+ * @defaultValue Value UI is hidden.
31
31
  */
32
32
  renderValue?: boolean | Exclude<React.ComponentProps<typeof PrimitiveProgress.Value>['children'], null | undefined>;
33
33
  };
@@ -6,19 +6,19 @@ import type * as React from 'react';
6
6
  * Includes standard `div` attributes such as `id`, `role`, `title`, data attributes, and event handlers,
7
7
  * plus Base UI `render` support for replacing the default item root.
8
8
  *
9
- * @default Native div pass-through props keep React defaults.
9
+ * @defaultValue Native div pass-through props keep React defaults.
10
10
  */
11
11
  export type MasonryItemProps = React.ComponentPropsWithRef<'div'> & {
12
12
  /**
13
13
  * Replaces the default `div` root using Base UI render semantics.
14
14
  *
15
- * @default The item renders a `div` root.
15
+ * @defaultValue The item renders a `div` root.
16
16
  */
17
17
  render?: useRender.RenderProp;
18
18
  /**
19
19
  * Ref forwarded to the rendered item root element.
20
20
  *
21
- * @default No ref is attached.
21
+ * @defaultValue No ref is attached.
22
22
  */
23
23
  ref?: React.Ref<HTMLElement>;
24
24
  };
@@ -19,19 +19,19 @@ export type MasonryBreakpointCols = {
19
19
  * Includes standard `div` attributes such as `id`, `role`, `title`, data attributes, and event handlers,
20
20
  * plus mobile-first React column distribution controls.
21
21
  *
22
- * @default Native div pass-through props keep React defaults.
22
+ * @defaultValue Native div pass-through props keep React defaults.
23
23
  */
24
24
  export type MasonryProps = React.ComponentPropsWithRef<'div'> & {
25
25
  /**
26
26
  * Replaces the default `div` root using Base UI render semantics.
27
27
  *
28
- * @default The masonry renders a `div` root.
28
+ * @defaultValue The masonry renders a `div` root.
29
29
  */
30
30
  render?: useRender.RenderProp;
31
31
  /**
32
32
  * Sets the gap between columns (`--vui-masonry-gap`) and the `rowGap` on each column `Stack`.
33
33
  *
34
- * @default 'l'
34
+ * @defaultValue 'l'
35
35
  */
36
36
  gap?: StackProps['columnGap'];
37
37
  /**
@@ -41,7 +41,7 @@ export type MasonryProps = React.ComponentPropsWithRef<'div'> & {
41
41
  * root's content-box inline size. Keys may be in any order; the largest
42
42
  * matching breakpoint wins. Non-finite keys are ignored.
43
43
  *
44
- * @default { default: 1, 480: 2, 768: 3, 960: 4, 1280: 5, 2560: 6 }
44
+ * @defaultValue { default: 1, 480: 2, 768: 3, 960: 4, 1280: 5, 2560: 6 }
45
45
  */
46
46
  breakpointCols?: MasonryBreakpointCols;
47
47
  };
@@ -3,26 +3,26 @@ import type * as React from 'react';
3
3
  /**
4
4
  * Public Menu.CheckboxItem props.
5
5
  *
6
- * @default `closeOnClick` is `false`.
6
+ * @defaultValue `closeOnClick` is `false`.
7
7
  */
8
8
  export type MenuCheckboxItemProps = MenuCheckboxItemPrimitive.Props & {
9
9
  /**
10
10
  * Decorative leading node rendered before the item label.
11
11
  *
12
- * @default No addon is rendered.
12
+ * @defaultValue No addon is rendered.
13
13
  */
14
14
  addon?: React.ReactNode;
15
15
  /**
16
16
  * End-aligned secondary text (e.g. keyboard shortcut) before the check indicator.
17
17
  * Rendered muted `xs`.
18
18
  *
19
- * @default No note is rendered.
19
+ * @defaultValue No note is rendered.
20
20
  */
21
21
  note?: React.ReactNode;
22
22
  /**
23
23
  * Visual sentiment. `destructive` uses highlight-red wash + text.
24
24
  *
25
- * @default Neutral item styling.
25
+ * @defaultValue Neutral item styling.
26
26
  */
27
27
  sentiment?: 'destructive';
28
28
  };
@@ -3,25 +3,25 @@ import type * as React from 'react';
3
3
  /**
4
4
  * Public Menu.Item props.
5
5
  *
6
- * @default Base UI pass-through props keep upstream defaults.
6
+ * @defaultValue Base UI pass-through props keep upstream defaults.
7
7
  */
8
8
  export type MenuItemProps = MenuItemPrimitive.Props & {
9
9
  /**
10
10
  * Decorative leading node rendered before the item label.
11
11
  *
12
- * @default No addon is rendered.
12
+ * @defaultValue No addon is rendered.
13
13
  */
14
14
  addon?: React.ReactNode;
15
15
  /**
16
16
  * End-aligned secondary text (e.g. keyboard shortcut). Rendered muted `xs`.
17
17
  *
18
- * @default No note is rendered.
18
+ * @defaultValue No note is rendered.
19
19
  */
20
20
  note?: React.ReactNode;
21
21
  /**
22
22
  * Visual sentiment. `destructive` uses highlight-red wash + text.
23
23
  *
24
- * @default Neutral item styling.
24
+ * @defaultValue Neutral item styling.
25
25
  */
26
26
  sentiment?: 'destructive';
27
27
  };
@@ -3,25 +3,25 @@ import type * as React from 'react';
3
3
  /**
4
4
  * Public Menu.LinkItem props.
5
5
  *
6
- * @default Base UI pass-through props keep upstream defaults.
6
+ * @defaultValue Base UI pass-through props keep upstream defaults.
7
7
  */
8
8
  export type MenuLinkItemProps = MenuLinkItemPrimitive.Props & {
9
9
  /**
10
10
  * Decorative leading node rendered before the item label.
11
11
  *
12
- * @default No addon is rendered.
12
+ * @defaultValue No addon is rendered.
13
13
  */
14
14
  addon?: React.ReactNode;
15
15
  /**
16
16
  * End-aligned secondary text (e.g. keyboard shortcut). Rendered muted `xs`.
17
17
  *
18
- * @default No note is rendered.
18
+ * @defaultValue No note is rendered.
19
19
  */
20
20
  note?: React.ReactNode;
21
21
  /**
22
22
  * Visual sentiment. `destructive` uses highlight-red wash + text.
23
23
  *
24
- * @default Neutral item styling.
24
+ * @defaultValue Neutral item styling.
25
25
  */
26
26
  sentiment?: 'destructive';
27
27
  };
@@ -9,7 +9,7 @@ type MenuPopupPositionerProps = Omit<MenuPositioner.Props, 'className' | 'style'
9
9
  * defaults to `2`. RTL placement comes from Base UI `DirectionProvider`;
10
10
  * app must also set HTML/`dir` (or `direction`) so portaled CSS inherits RTL.
11
11
  *
12
- * @default `sideOffset` is `2`.
12
+ * @defaultValue `sideOffset` is `2`.
13
13
  */
14
14
  export type MenuPopupProps = MenuPopupPositionerProps & {
15
15
  children?: React.ReactNode;
@@ -18,7 +18,7 @@ export type MenuPopupProps = MenuPopupPositionerProps & {
18
18
  * Omit for Base UI default (`document.body` from the module window —
19
19
  * iframe hosts must pass the iframe document body explicitly).
20
20
  *
21
- * @default Base UI FloatingPortal resolution
21
+ * @defaultValue Base UI FloatingPortal resolution
22
22
  */
23
23
  container?: React.ComponentProps<typeof PrimitiveMenu.Portal>['container'];
24
24
  };
@@ -1,5 +1,5 @@
1
- import { Elevator } from "../elevator/elevator.js";
2
1
  import { Surface } from "../surface/surface.js";
2
+ import { Elevator } from "../elevator/elevator.js";
3
3
  import menu_module_default from "./menu.module.js";
4
4
  import { jsx } from "react/jsx-runtime";
5
5
  import { Menu } from "@base-ui/react/menu";
@@ -3,13 +3,13 @@ import type * as React from 'react';
3
3
  /**
4
4
  * Public Menu.RadioGroup props.
5
5
  *
6
- * @default No label is rendered.
6
+ * @defaultValue No label is rendered.
7
7
  */
8
8
  export type MenuRadioGroupProps = MenuRadioGroupPrimitive.Props & {
9
9
  /**
10
10
  * Optional accessible group label rendered with `Menu.GroupLabel`.
11
11
  *
12
- * @default No label is rendered.
12
+ * @defaultValue No label is rendered.
13
13
  */
14
14
  label?: React.ReactNode;
15
15
  };
@@ -3,26 +3,26 @@ import type * as React from 'react';
3
3
  /**
4
4
  * Public Menu.RadioItem props.
5
5
  *
6
- * @default `closeOnClick` is `false`.
6
+ * @defaultValue `closeOnClick` is `false`.
7
7
  */
8
8
  export type MenuRadioItemProps = MenuRadioItemPrimitive.Props & {
9
9
  /**
10
10
  * Decorative leading node rendered before the item label.
11
11
  *
12
- * @default No addon is rendered.
12
+ * @defaultValue No addon is rendered.
13
13
  */
14
14
  addon?: React.ReactNode;
15
15
  /**
16
16
  * End-aligned secondary text (e.g. keyboard shortcut) before the check indicator.
17
17
  * Rendered muted `xs`.
18
18
  *
19
- * @default No note is rendered.
19
+ * @defaultValue No note is rendered.
20
20
  */
21
21
  note?: React.ReactNode;
22
22
  /**
23
23
  * Visual sentiment. `destructive` uses highlight-red wash + text.
24
24
  *
25
- * @default Neutral item styling.
25
+ * @defaultValue Neutral item styling.
26
26
  */
27
27
  sentiment?: 'destructive';
28
28
  };
@@ -3,7 +3,7 @@ import type * as React from 'react';
3
3
  /**
4
4
  * Public Menu.Separator props.
5
5
  *
6
- * @default `orientation` is `'horizontal'`.
6
+ * @defaultValue `orientation` is `'horizontal'`.
7
7
  */
8
8
  export type MenuSeparatorProps = React.ComponentProps<typeof PrimitiveMenu.Separator>;
9
9
  export declare const MenuSeparator: React.FC<MenuSeparatorProps>;
@@ -3,19 +3,19 @@ import type * as React from 'react';
3
3
  /**
4
4
  * Public Menu.SubmenuTrigger props.
5
5
  *
6
- * @default Trailing end chevron; RTL mirror via CSS `:dir(rtl)`.
6
+ * @defaultValue Trailing end chevron; RTL mirror via CSS `:dir(rtl)`.
7
7
  */
8
8
  export type MenuSubmenuTriggerProps = MenuSubmenuTriggerPrimitive.Props & {
9
9
  /**
10
10
  * Decorative leading node rendered before the item label.
11
11
  *
12
- * @default No addon is rendered.
12
+ * @defaultValue No addon is rendered.
13
13
  */
14
14
  addon?: React.ReactNode;
15
15
  /**
16
16
  * Visual sentiment. `destructive` uses highlight-red wash + text.
17
17
  *
18
- * @default Neutral item styling.
18
+ * @defaultValue Neutral item styling.
19
19
  */
20
20
  sentiment?: 'destructive';
21
21
  };
@@ -17,7 +17,7 @@ import type * as React from 'react';
17
17
  * triggers. `children` may be a node or a `({ payload }) => ReactNode` render function
18
18
  * for per-trigger content.
19
19
  *
20
- * @default Base UI pass-through props keep upstream defaults.
20
+ * @defaultValue Base UI pass-through props keep upstream defaults.
21
21
  */
22
22
  export type MenuProps = MenuRoot.Props;
23
23
  /**
@@ -26,7 +26,7 @@ export type MenuProps = MenuRoot.Props;
26
26
  * Pass-through to Base UI `Menu.Trigger`. Use `render` for the visible control
27
27
  * (`Button`, `IconButton`, or another element).
28
28
  *
29
- * @default Base UI pass-through props keep upstream defaults.
29
+ * @defaultValue Base UI pass-through props keep upstream defaults.
30
30
  */
31
31
  export type MenuTriggerProps = MenuTriggerNamespace.Props;
32
32
  /**
@@ -35,7 +35,7 @@ export type MenuTriggerProps = MenuTriggerNamespace.Props;
35
35
  * Pass-through to Base UI `Menu.SubmenuRoot`. Compose `Menu.SubmenuTrigger` and
36
36
  * nested `Menu.Popup` as children.
37
37
  *
38
- * @default Base UI pass-through props keep upstream defaults.
38
+ * @defaultValue Base UI pass-through props keep upstream defaults.
39
39
  */
40
40
  export type MenuSubmenuProps = React.ComponentProps<typeof PrimitiveMenu.SubmenuRoot>;
41
41
  export declare const MenuTrigger: PrimitiveMenu.Trigger;
@@ -1 +1 @@
1
- @layer viraui.preflight, viraui.components, viraui.overrides;@layer viraui.components{@property --vui-meter-track-size{syntax:"<length>";inherits:true;initial-value:0}@property --vui-meter-track-background{syntax:"<color>";inherits:true;initial-value:#0000}@property --vui-meter-indicator-color{syntax:"<color>";inherits:true;initial-value:#0000}.viraui__meter-module__Meter_YRI7d{--vui-meter-track-size:var(--space-xs);--vui-meter-track-background:var(--global-contrast);--vui-meter-indicator-color:var(--global-primary);& .viraui__meter-module__Track_uF9wy{--__corner-shape:round;position:relative;overflow:hidden;block-size:round(to-zero,var(--vui-meter-track-size),2px);background:var(--vui-meter-track-background);border-radius:var(--radius-full)}& .viraui__meter-module__Indicator_dNjqU{block-size:100%;background:var(--vui-meter-indicator-color);border-radius:inherit}}}
1
+ @layer viraui.preflight, viraui.components, viraui.overrides;@layer viraui.components{@property --vui-meter-track-size{syntax:"<length>";inherits:true;initial-value:0}@property --vui-meter-track-background{syntax:"<color>";inherits:true;initial-value:#0000}@property --vui-meter-indicator-color{syntax:"<color>";inherits:true;initial-value:#0000}@property --vui-meter-track-opacity{syntax:"<number> | <percentage>";inherits:false;initial-value:15%}.viraui__meter-module__Meter_YRI7d{--vui-meter-track-size:var(--space-xs);--vui-meter-indicator-color:var(--global-primary);--vui-meter-track-background:oklab(from var(--vui-meter-indicator-color) l a b / var(--vui-meter-track-opacity));&[data-variant=primary]{--vui-meter-track-background:var(--global-contrast)}&[data-variant=gray]{--vui-meter-indicator-color:var(--highlight-gray)}&[data-variant=slate]{--vui-meter-indicator-color:var(--highlight-slate)}&[data-variant=yellow]{--vui-meter-indicator-color:var(--highlight-yellow)}&[data-variant=green]{--vui-meter-indicator-color:var(--highlight-green)}&[data-variant=blue]{--vui-meter-indicator-color:var(--highlight-blue)}&[data-variant=red]{--vui-meter-indicator-color:var(--highlight-red)}&[data-variant=cyan]{--vui-meter-indicator-color:var(--highlight-cyan)}&[data-variant=purple]{--vui-meter-indicator-color:var(--highlight-purple)}&[data-variant=indigo]{--vui-meter-indicator-color:var(--highlight-indigo)}&[data-variant=acid]{--vui-meter-indicator-color:var(--highlight-acid)}&[data-variant=salmon]{--vui-meter-indicator-color:var(--highlight-salmon)}&[data-variant=magenta]{--vui-meter-indicator-color:var(--highlight-magenta)}& .viraui__meter-module__Track_uF9wy{--__corner-shape:round;position:relative;overflow:hidden;block-size:round(to-zero,var(--vui-meter-track-size),2px);background:var(--vui-meter-track-background);border-radius:var(--radius-full)}& .viraui__meter-module__Indicator_dNjqU{block-size:100%;background:var(--vui-meter-indicator-color);border-radius:inherit}}}
@@ -1,24 +1,26 @@
1
1
  import { Meter as PrimitiveMeter, MeterRoot } from '@base-ui/react';
2
+ import { ThemeTypes } from '@viraui/foundation/vira/types';
2
3
  import type * as React from 'react';
3
4
  /**
4
5
  * Public Meter props.
5
6
  *
6
7
  * Includes Base UI meter root props such as `value`, `min`, `max`, `format`,
7
- * and `getAriaValueText`, plus optional label, description, and value display.
8
+ * and `getAriaValueText`, plus optional label, description, value display, and
9
+ * highlight `variant` for track/indicator color.
8
10
  *
9
- * @default Base UI pass-through props keep upstream defaults.
11
+ * @defaultValue Base UI pass-through props keep upstream defaults.
10
12
  */
11
13
  export type MeterProps = MeterRoot.Props & {
12
14
  /**
13
15
  * Visible label rendered through `Meter.Label` with shared internal `FieldLabel`.
14
16
  *
15
- * @default No label is rendered.
17
+ * @defaultValue No label is rendered.
16
18
  */
17
19
  label?: React.ReactNode;
18
20
  /**
19
21
  * Static helper copy rendered with `Text` below the meter track.
20
22
  *
21
- * @default No description is rendered.
23
+ * @defaultValue No description is rendered.
22
24
  */
23
25
  description?: React.ReactNode;
24
26
  /**
@@ -27,8 +29,16 @@ export type MeterProps = MeterRoot.Props & {
27
29
  * Pass `true` for Base UI default formatting, or a function matching
28
30
  * `Meter.Value` `children` to customize the printed label.
29
31
  *
30
- * @default Value UI is hidden.
32
+ * @defaultValue Value UI is hidden.
31
33
  */
32
34
  renderValue?: boolean | Exclude<React.ComponentProps<typeof PrimitiveMeter.Value>['children'], null | undefined>;
35
+ /**
36
+ * Selects track and indicator colors. `primary` uses brand primary on the
37
+ * indicator; highlight token names tint both track (wash) and indicator
38
+ * via `--highlight-*`, matching Chip highlight variants.
39
+ *
40
+ * @defaultValue 'primary'
41
+ */
42
+ variant?: 'primary' | ThemeTypes['highlight'];
33
43
  };
34
44
  export declare const Meter: React.FC<MeterProps>;
@@ -7,11 +7,12 @@ import meter_module_default from "./meter.module.js";
7
7
  import { jsx, jsxs } from "react/jsx-runtime";
8
8
  import { Meter } from "@base-ui/react";
9
9
  //#region src/components/meter/meter.tsx
10
- var Meter$1 = ({ className, description, label, renderValue, value, ...otherProps }) => {
10
+ var Meter$1 = ({ className, description, label, renderValue, value, variant = "primary", ...otherProps }) => {
11
11
  const showRenderedValue = renderValue === true || typeof renderValue === "function";
12
12
  return /* @__PURE__ */ jsxs(Meter.Root, {
13
13
  ...otherProps,
14
14
  className: clsx(meter_module_default.Meter, className),
15
+ "data-variant": variant,
15
16
  value,
16
17
  render: /* @__PURE__ */ jsx(Stack, {
17
18
  rowGap: "m",
@@ -0,0 +1,2 @@
1
+ export { NumberField } from './number-field';
2
+ export type { NumberFieldProps } from './number-field';
@@ -0,0 +1 @@
1
+ @layer viraui.preflight, viraui.components, viraui.overrides;@layer viraui.components{.viraui__number-field-module__NumberField_l7i9a{display:contents}.viraui__number-field-module__Field_Ud43i{--vui-textfield-input-height:var(--space-2xl);--vui-textfield-control-group-background:var(--base-1);--vui-textfield-control-group-color:var(--global-foreground);--vui-textfield-control-group-border-color:var(--global-contrast);--vui-textfield-control-group-border-radius:var(--radius-m);--vui-field-label-padding-inline:calc(var(--vui-textfield-control-group-border-radius) / 2);max-block-size:min-content;&:has([required]) .viraui__number-field-module__Label_-Sji0:after{content:" *";color:var(--highlight-red)}}.viraui__number-field-module__ControlGroup_CX5th{box-sizing:border-box;block-size:round(to-zero,var(--vui-textfield-input-height),2px);background:var(--vui-textfield-control-group-background);color:var(--vui-textfield-control-group-color);border:1px solid var(--vui-textfield-control-group-border-color);border-radius:var(--vui-textfield-control-group-border-radius);&:has(.viraui__number-field-module__CustomBasicInput_6fmMO:focus),&:has(.viraui__number-field-module__CustomBasicInput_6fmMO:focus-visible),&:has(.viraui__number-field-module__CustomBasicInput_6fmMO[data-focused]){outline:var(--outline);outline-offset:var(--outline-offset)}&:has(.viraui__number-field-module__CustomBasicInput_6fmMO[data-invalid][data-dirty]){--vui-textfield-control-group-border-color:var(--highlight-red);box-shadow:none;outline-color:oklab(from var(--highlight-red) l a b/.5)}&:has(.viraui__number-field-module__CustomBasicInput_6fmMO:disabled),&:has(.viraui__number-field-module__CustomBasicInput_6fmMO[data-disabled]){--vui-textfield-control-group-background:var(--global-disabled-background);--vui-textfield-control-group-border-color:#0000;--vui-textfield-control-group-color:var(--global-disabled-foreground);box-shadow:none;cursor:not-allowed}}.viraui__number-field-module__Addon_QwT1q{min-inline-size:var(--space-xl)}.viraui__number-field-module__ScrubArea_3Wzje{-webkit-user-select:none;user-select:none;:where(& *){cursor:ew-resize;-webkit-user-select:none;user-select:none}}.viraui__number-field-module__Description_GWcij{padding-inline:calc(var(--vui-textfield-control-group-border-radius) / 2)}}@layer viraui.overrides{.viraui__number-field-module__CustomBasicInput_6fmMO{text-align:center;&:focus,&:focus-visible{outline:none}}}
@@ -0,0 +1,78 @@
1
+ import { FieldRoot } from '@base-ui/react/field';
2
+ import { NumberFieldRoot as PrimitiveNumberFieldRoot } from '@base-ui/react/number-field';
3
+ import { BasicInputProps } from '../basic-input';
4
+ import type * as React from 'react';
5
+ /**
6
+ * Public NumberField props.
7
+ *
8
+ * Base UI Number Field Root pass-through (`value`, `min`/`max`/`step`, `format`, `name`,
9
+ * `disabled`, `readOnly`, …) plus Field chrome, IconButton steppers, scrub, and width knobs.
10
+ * String `description` also sets numeric-input `aria-roledescription`. Group / Decrement /
11
+ * Increment / ScrubArea stay internal.
12
+ *
13
+ * @defaultValue Base UI pass-through props keep upstream defaults.
14
+ */
15
+ export type NumberFieldProps = Omit<PrimitiveNumberFieldRoot.Props, 'render' | 'children' | 'ref' | 'style'> & Omit<FieldRoot.Props, 'ref' | 'render' | 'name' | 'style' | keyof PrimitiveNumberFieldRoot.Props> & {
16
+ /**
17
+ * Ref to the visible numeric input.
18
+ *
19
+ * @defaultValue No ref is attached.
20
+ */
21
+ ref?: React.Ref<HTMLInputElement>;
22
+ /**
23
+ * Presentation styles on the Field chrome host (not the `display: contents` Root).
24
+ *
25
+ * @defaultValue No inline style is applied.
26
+ */
27
+ style?: React.CSSProperties;
28
+ /**
29
+ * Visible label rendered with shared internal `FieldLabel`. When present and
30
+ * `labelScrub` is true, the label hosts Base UI scrub.
31
+ *
32
+ * @defaultValue No label is rendered.
33
+ */
34
+ label?: React.ReactNode;
35
+ /**
36
+ * Helper copy rendered with `Field.Description` and `Text` while the field is valid.
37
+ * When a string, also sets `aria-roledescription` on the numeric input.
38
+ *
39
+ * @defaultValue No description is rendered.
40
+ */
41
+ description?: React.ReactNode;
42
+ /**
43
+ * Error copy rendered with `Field.Error` and `Text` in the same slot as `description`.
44
+ * Replaces description while the field is invalid and dirty.
45
+ *
46
+ * @defaultValue No static error copy is rendered.
47
+ */
48
+ error?: React.ReactNode;
49
+ /**
50
+ * Where decrement/increment sit relative to the numeric input.
51
+ * `split` = button | input | button; `grouped` = both steppers at inline-end
52
+ * (physical right in LTR, left in RTL — follows document/`dir` / Base UI direction).
53
+ *
54
+ * @defaultValue 'split'
55
+ */
56
+ stepperPlacement?: 'split' | 'grouped';
57
+ /**
58
+ * When `true` and `label` is set, wrap the label in Base UI `ScrubArea`.
59
+ * When `false` or no label, render a plain field label.
60
+ *
61
+ * @defaultValue true
62
+ */
63
+ labelScrub?: boolean;
64
+ /**
65
+ * When `true`, field and control row fill the column; only the numeric input flex-grows.
66
+ * Steppers stay intrinsic size (`data-grow="false"`).
67
+ *
68
+ * @defaultValue false
69
+ */
70
+ fullWidth?: boolean;
71
+ /**
72
+ * When `true`, sets `field-sizing: content` on the numeric input only.
73
+ *
74
+ * @defaultValue undefined (browser fixed)
75
+ */
76
+ fitContent?: BasicInputProps['fitContent'];
77
+ };
78
+ export declare const NumberField: React.FC<NumberFieldProps>;