@viraui/react 2026.7.0-next.0 → 2026.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/dist/catalog.json +13 -1
  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/avatar/avatar.d.ts +6 -6
  8. package/dist/components/avatar-group/avatar-group.d.ts +6 -6
  9. package/dist/components/badge/badge.d.ts +5 -5
  10. package/dist/components/basic-input/basic-input.d.ts +1 -1
  11. package/dist/components/basic-input/input-control-group.d.ts +2 -2
  12. package/dist/components/beam/beam.css +1 -1
  13. package/dist/components/beam/beam.d.ts +12 -12
  14. package/dist/components/bleed/bleed.d.ts +3 -3
  15. package/dist/components/button/button-link.d.ts +1 -1
  16. package/dist/components/button/button.d.ts +1 -1
  17. package/dist/components/checkbox/checkbox-group.d.ts +1 -1
  18. package/dist/components/checkbox/checkbox.d.ts +7 -7
  19. package/dist/components/chip/chip.d.ts +6 -6
  20. package/dist/components/clamp-text/clamp-text.d.ts +5 -5
  21. package/dist/components/dialog/dialog-close.d.ts +1 -1
  22. package/dist/components/dialog/dialog-indent-background.d.ts +1 -1
  23. package/dist/components/dialog/dialog-indent.d.ts +1 -1
  24. package/dist/components/dialog/dialog-sheet.d.ts +10 -10
  25. package/dist/components/dialog/dialog-trigger.d.ts +1 -1
  26. package/dist/components/dialog/dialog.d.ts +1 -1
  27. package/dist/components/disclosure/disclosure-panel.d.ts +12 -0
  28. package/dist/components/disclosure/disclosure-panel.js +13 -0
  29. package/dist/components/disclosure/disclosure-trigger.d.ts +46 -0
  30. package/dist/components/disclosure/disclosure-trigger.js +82 -0
  31. package/dist/components/disclosure/disclosure.css +1 -0
  32. package/dist/components/disclosure/disclosure.d.ts +25 -0
  33. package/dist/components/disclosure/disclosure.js +30 -0
  34. package/dist/components/disclosure/disclosure.module.js +15 -0
  35. package/dist/components/disclosure/index.d.ts +4 -0
  36. package/dist/components/elevator/elevator.d.ts +7 -7
  37. package/dist/components/fieldset/fieldset.d.ts +4 -4
  38. package/dist/components/fit-text/fit-text.d.ts +2 -2
  39. package/dist/components/glow/glow.d.ts +12 -12
  40. package/dist/components/grid/grid-item.d.ts +8 -8
  41. package/dist/components/grid/grid.d.ts +12 -12
  42. package/dist/components/icon-button/icon-button-link.d.ts +2 -2
  43. package/dist/components/icon-button/icon-button.d.ts +2 -2
  44. package/dist/components/index.d.ts +2 -0
  45. package/dist/components/linear-progress/linear-progress.d.ts +4 -4
  46. package/dist/components/masonry/masonry-item.d.ts +3 -3
  47. package/dist/components/masonry/masonry.d.ts +4 -4
  48. package/dist/components/menu/menu-checkbox-item.d.ts +4 -4
  49. package/dist/components/menu/menu-item.d.ts +4 -4
  50. package/dist/components/menu/menu-link-item.d.ts +4 -4
  51. package/dist/components/menu/menu-popup.d.ts +2 -2
  52. package/dist/components/menu/menu-radio-group.d.ts +2 -2
  53. package/dist/components/menu/menu-radio-item.d.ts +4 -4
  54. package/dist/components/menu/menu-separator.d.ts +1 -1
  55. package/dist/components/menu/menu-submenu-trigger.d.ts +3 -3
  56. package/dist/components/menu/menu.d.ts +3 -3
  57. package/dist/components/meter/meter.d.ts +5 -5
  58. package/dist/components/number-field/index.d.ts +2 -0
  59. package/dist/components/number-field/number-field.css +1 -0
  60. package/dist/components/number-field/number-field.d.ts +78 -0
  61. package/dist/components/number-field/number-field.js +120 -0
  62. package/dist/components/number-field/number-field.module.js +21 -0
  63. package/dist/components/otp-field/index.d.ts +1 -1
  64. package/dist/components/otp-field/otp-field-input.d.ts +1 -1
  65. package/dist/components/otp-field/otp-field-separator.d.ts +3 -1
  66. package/dist/components/otp-field/otp-field-separator.js +5 -1
  67. package/dist/components/otp-field/otp-field.d.ts +4 -5
  68. package/dist/components/otp-field/otp-field.js +0 -1
  69. package/dist/components/popover/popover-sheet.d.ts +6 -6
  70. package/dist/components/popover/popover.d.ts +5 -5
  71. package/dist/components/progressive-blur/progressive-blur.d.ts +5 -5
  72. package/dist/components/prose/prose.css +1 -1
  73. package/dist/components/prose/prose.d.ts +4 -4
  74. package/dist/components/radio/radio-group.d.ts +1 -1
  75. package/dist/components/radio/radio.d.ts +6 -6
  76. package/dist/components/select/select-indicator-slot.d.ts +1 -1
  77. package/dist/components/select/select-option.d.ts +4 -4
  78. package/dist/components/select/select-separator.d.ts +1 -1
  79. package/dist/components/select/select.d.ts +10 -10
  80. package/dist/components/separator/separator.d.ts +9 -9
  81. package/dist/components/shimmer/shimmer.d.ts +6 -6
  82. package/dist/components/skeleton/skeleton-overlay.d.ts +5 -5
  83. package/dist/components/skeleton/skeleton.d.ts +9 -9
  84. package/dist/components/slider/slider.d.ts +7 -7
  85. package/dist/components/spinner/spinner.d.ts +3 -3
  86. package/dist/components/stack/stack.d.ts +17 -17
  87. package/dist/components/static-noise/static-noise.d.ts +5 -5
  88. package/dist/components/surface/surface.d.ts +12 -12
  89. package/dist/components/switch/switch.d.ts +7 -7
  90. package/dist/components/tabs/tabs-list.d.ts +1 -1
  91. package/dist/components/tabs/tabs-panel.d.ts +1 -1
  92. package/dist/components/tabs/tabs-tab.d.ts +3 -3
  93. package/dist/components/tabs/tabs.d.ts +2 -2
  94. package/dist/components/text/text.d.ts +23 -23
  95. package/dist/components/textarea/textarea.d.ts +6 -6
  96. package/dist/components/textfield/textfield.d.ts +1 -1
  97. package/dist/components/title/title.d.ts +21 -21
  98. package/dist/components/toast/toast-action.d.ts +1 -1
  99. package/dist/components/toast/toast-banner.d.ts +7 -7
  100. package/dist/components/toast/toast-viewport.d.ts +2 -2
  101. package/dist/components/toggle-button/toggle-button.d.ts +6 -6
  102. package/dist/components/toggle-group/toggle-group.d.ts +1 -1
  103. package/dist/components/tooltip/tooltip-content.d.ts +2 -2
  104. package/dist/components/typewriter/typewriter.d.ts +10 -10
  105. package/dist/index.js +3 -1
  106. package/dist/specs/components/accordion/usage.xml +1 -0
  107. package/dist/specs/components/disclosure/a11y.xml +9 -0
  108. package/dist/specs/components/disclosure/meta.xml +20 -0
  109. package/dist/specs/components/disclosure/patterns.xml +55 -0
  110. package/dist/specs/components/disclosure/props.xml +54 -0
  111. package/dist/specs/components/disclosure/usage.xml +11 -0
  112. package/dist/specs/components/number-field/a11y.xml +10 -0
  113. package/dist/specs/components/number-field/meta.xml +21 -0
  114. package/dist/specs/components/number-field/patterns.xml +43 -0
  115. package/dist/specs/components/number-field/props.xml +35 -0
  116. package/dist/specs/components/number-field/usage.xml +12 -0
  117. package/dist/specs/components/otp-field/meta.xml +1 -4
  118. package/dist/specs/components/otp-field/patterns.xml +8 -8
  119. package/dist/specs/components/otp-field/props.xml +2 -2
  120. package/dist/specs/components/otp-field/usage.xml +4 -4
  121. package/dist/specs/index.xml +22 -2
  122. package/package.json +2 -2
@@ -0,0 +1,35 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <props surface="number-field">
3
+ <when_to_use>
4
+ <item>Numeric values with optional increment/decrement and label scrub</item>
5
+ <item>Form fields that submit a number via `name` (min/max/step/format on the same NumberField)</item>
6
+ <item>Textfield-aligned label / description / error with Field validation</item>
7
+ </when_to_use>
8
+ <when_not_to_use>
9
+ <item>Exposing Group / Decrement / Increment / ScrubArea as public parts — they stay internal</item>
10
+ <item>Textfield start/end addon API or custom stepper children in v1</item>
11
+ <item>Exposing a NumberField size or variant prop — steppers stay fixed IconButton `size=&quot;s&quot;` / `variant=&quot;secondary&quot;`</item>
12
+ <item>Composing a public `NumberField.Input` — chrome and steppers live on NumberField</item>
13
+ </when_not_to_use>
14
+ <prop name="description" kind="react">
15
+ <description>Helper copy rendered with `Field.Description` and `Text` while the field is valid. When a string, also sets `aria-roledescription` on the numeric input.</description>
16
+ </prop>
17
+ <prop name="error" kind="react">
18
+ <description>Error copy rendered with `Field.Error` and `Text` in the same slot as `description`. Replaces description while invalid and dirty.</description>
19
+ </prop>
20
+ <prop name="fitContent" kind="react">
21
+ <description>When `true`, sets `field-sizing: content` on the numeric input only. Steppers stay intrinsic.</description>
22
+ </prop>
23
+ <prop name="fullWidth" kind="react">
24
+ <description>When `true`, field and control row fill the column; only the numeric input flex-grows. Steppers stay intrinsic. Prefer over CSS `width: 100%` on the field.</description>
25
+ </prop>
26
+ <prop name="label" kind="react">
27
+ <description>Visible label rendered with shared internal `FieldLabel`. Hosts scrub when `labelScrub` is true.</description>
28
+ </prop>
29
+ <prop name="labelScrub" kind="react">
30
+ <description>When `true` (default) and `label` is set, wrap the label in Base UI scrub. When `false` or no label, plain field label.</description>
31
+ </prop>
32
+ <prop name="stepperPlacement" kind="react">
33
+ <description>Where steppers sit relative to the input: `split` (default, button|input|button) or `grouped` (both at inline-end; physical right in LTR, left in RTL via document direction).</description>
34
+ </prop>
35
+ </props>
@@ -0,0 +1,12 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <usage surface="number-field">
3
+ <do>Use a single `NumberField` for value/min/max/step/name plus label/helper/steppers</do>
4
+ <do>Put Field validation props (`invalid`, `dirty`, `touched`, `validate`, …) on NumberField</do>
5
+ <do>Steppers are fixed IconButton `size=&quot;s&quot;` / `variant=&quot;secondary&quot;` with uniform addon padding — do not expose variant/size</do>
6
+ <do>Use `fullWidth` when the numeric input should grow; steppers stay compact</do>
7
+ <do>Turn off label scrub with `labelScrub={false}` when drag-on-label is unwanted</do>
8
+ <dont>Export or compose public Group / Decrement / Increment / ScrubArea / ScrubAreaCursor</dont>
9
+ <dont>Compose a public `NumberField.Input` — there is no Input part</dont>
10
+ <dont>Add Textfield start/end addon API or custom stepper children in v1</dont>
11
+ <dont>Invent CSS width hacks when `fullWidth` / `fitContent` cover sizing</dont>
12
+ </usage>
@@ -1,11 +1,8 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
2
  <meta id="otp-field" title="OTPField" category="form" shared_contract="otp-field">
3
- <summary>Field-wrapped one-time code slots. Default slots compose Textfield controlOnly; one label/helper on Root.</summary>
3
+ <summary>Field-wrapped one-time code slots. Default slots compose Textfield controlOnly; one label/helper on OTPField.</summary>
4
4
  <exports>
5
5
  <export name="OTPField" />
6
- <export name="OTPField.Root" />
7
- <export name="OTPField.Input" />
8
- <export name="OTPField.Separator" />
9
6
  </exports>
10
7
  <related>
11
8
  <ref id="textfield" />
@@ -2,7 +2,7 @@
2
2
  <patterns surface="otp-field">
3
3
  <example title="Labeled six-slot code">
4
4
  <tsx><![CDATA[
5
- <OTPField.Root
5
+ <OTPField
6
6
  length={6}
7
7
  label="Verification code"
8
8
  description="Enter the 6-character code we sent to your device."
@@ -10,7 +10,7 @@
10
10
  {Array.from({ length: 6 }, (_, slotIndex) => (
11
11
  <OTPField.Input key={`character-${slotIndex + 1}`} />
12
12
  ))}
13
- </OTPField.Root>
13
+ </OTPField>
14
14
  ]]></tsx>
15
15
  <notes>Explicit Inputs. First slot uses the field label; later slots get generated names.</notes>
16
16
  </example>
@@ -18,14 +18,14 @@
18
18
  <example title="Form name + autoSubmit">
19
19
  <tsx><![CDATA[
20
20
  <Form>
21
- <OTPField.Root length={6} name="verificationCode" label="Verification code" autoSubmit>
21
+ <OTPField length={6} name="verificationCode" label="Verification code" autoSubmit>
22
22
  <OTPField.Input />
23
23
  <OTPField.Input />
24
24
  <OTPField.Input />
25
25
  <OTPField.Input />
26
26
  <OTPField.Input />
27
27
  <OTPField.Input />
28
- </OTPField.Root>
28
+ </OTPField>
29
29
  </Form>
30
30
  ]]></tsx>
31
31
  <notes>One concatenated form value. `autoSubmit` submits when complete. `Form` is `@base-ui/react/form`.</notes>
@@ -33,7 +33,7 @@
33
33
 
34
34
  <example title="Grouped slots with Separator">
35
35
  <tsx><![CDATA[
36
- <OTPField.Root length={6} label="Verification code">
36
+ <OTPField length={6} label="Verification code">
37
37
  <Stack columnGap="s" direction="row">
38
38
  <OTPField.Input />
39
39
  <OTPField.Input />
@@ -45,21 +45,21 @@
45
45
  <OTPField.Input />
46
46
  <OTPField.Input />
47
47
  </Stack>
48
- </OTPField.Root>
48
+ </OTPField>
49
49
  ]]></tsx>
50
50
  <notes>Separator is not an input and is not counted in `length`. Stack owns group gaps.</notes>
51
51
  </example>
52
52
 
53
53
  <example title="Equal-grow in a form column">
54
54
  <tsx><![CDATA[
55
- <OTPField.Root length={6} label="Verification code" fullWidth>
55
+ <OTPField length={6} label="Verification code" fullWidth>
56
56
  <OTPField.Input />
57
57
  <OTPField.Input />
58
58
  <OTPField.Input />
59
59
  <OTPField.Input />
60
60
  <OTPField.Input />
61
61
  <OTPField.Input />
62
- </OTPField.Root>
62
+ </OTPField>
63
63
  ]]></tsx>
64
64
  <notes>Default hugs. `fullWidth` fills the column and grows slots equally.</notes>
65
65
  </example>
@@ -7,9 +7,9 @@
7
7
  </when_to_use>
8
8
  <when_not_to_use>
9
9
  <item>Auto-generating Inputs from `length` — always list one `OTPField.Input` per slot</item>
10
- <item>Per-slot label, description, or error — Field chrome is on Root only</item>
10
+ <item>Per-slot label, description, or error — Field chrome is on OTPField only</item>
11
11
  <item>Swapping the slot host via `render` — host is always a native `input`; chrome is Textfield `controlOnly`</item>
12
- <item>Inventing CSS `width: 100%` on slots when Root `fullWidth` covers equal-grow</item>
12
+ <item>Inventing CSS `width: 100%` on slots when OTPField `fullWidth` covers equal-grow</item>
13
13
  </when_not_to_use>
14
14
  <prop name="description" kind="react">
15
15
  <description>Helper copy rendered with `Field.Description` and `Text` while the field is valid.</description>
@@ -1,13 +1,13 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
2
  <usage surface="otp-field">
3
3
  <do>List exactly `length` `OTPField.Input` children (Array.from or explicit)</do>
4
- <do>Put `label` / `description` / `error` on `OTPField.Root` (or `OTPField`)</do>
4
+ <do>Put `label` / `description` / `error` on `OTPField`</do>
5
5
  <do>Let the first slot take the field label; later slots get generated `Character N of {length}` unless you pass `aria-label`</do>
6
6
  <do>Group slots with Stack + `OTPField.Separator` when the code is shown as chunks</do>
7
- <do>Span the form column with Root `fullWidth` so slots grow equally</do>
8
- <do>Keep error copy on Root — invalid wiggle is extra chrome, not the only signal</do>
7
+ <do>Span the form column with `OTPField` `fullWidth` so slots grow equally</do>
8
+ <do>Keep error copy on `OTPField` — invalid wiggle is extra chrome, not the only signal</do>
9
9
  <dont>Pass `render` on Input — slot is always a native `input`; chrome is Textfield `controlOnly`</dont>
10
10
  <dont>Put label/description/error on each slot</dont>
11
- <dont>Expect Root to auto-generate Inputs from `length`</dont>
11
+ <dont>Expect `OTPField` to auto-generate Inputs from `length`</dont>
12
12
  <dont>Invent a `groups` prop or width CSS on slots when Stack / `fullWidth` cover layout</dont>
13
13
  </usage>
@@ -1,5 +1,5 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
- <index package="@viraui/react" version="2026.7.0-next.0" generated="2026-10-06T15:23:28.840Z">
2
+ <index package="@viraui/react" version="2026.7.0" generated="2026-10-08T07:14:12.516Z">
3
3
  <categories>
4
4
  <category id="layout" />
5
5
  <category id="action" />
@@ -151,6 +151,16 @@
151
151
  <unit kind="patterns" href="components/dialog/patterns.xml" />
152
152
  </units>
153
153
  </entry>
154
+ <entry id="disclosure" category="layout" title="Disclosure">
155
+ <summary>Single-section expand/collapse wrapping Base UI Collapsible. Default Trigger is Surface with render → Collapsible Trigger; Panel is a height motion shell with no default content padding. Use Accordio…</summary>
156
+ <units>
157
+ <unit kind="meta" href="components/disclosure/meta.xml" />
158
+ <unit kind="a11y" href="components/disclosure/a11y.xml" />
159
+ <unit kind="props" href="components/disclosure/props.xml" />
160
+ <unit kind="usage" href="components/disclosure/usage.xml" />
161
+ <unit kind="patterns" href="components/disclosure/patterns.xml" />
162
+ </units>
163
+ </entry>
154
164
  <entry id="elevator" category="effect" title="Elevator">
155
165
  <summary>No-DOM elevation utility that merges shadow hooks onto valid element children.</summary>
156
166
  <units>
@@ -251,8 +261,18 @@
251
261
  <unit kind="patterns" href="components/meter/patterns.xml" />
252
262
  </units>
253
263
  </entry>
264
+ <entry id="number-field" category="form" title="NumberField">
265
+ <summary>Single public NumberField with Field chrome, internal IconButton steppers, and optional label scrub. Group / Decrement / Increment / ScrubArea stay internal.</summary>
266
+ <units>
267
+ <unit kind="meta" href="components/number-field/meta.xml" />
268
+ <unit kind="a11y" href="components/number-field/a11y.xml" />
269
+ <unit kind="props" href="components/number-field/props.xml" />
270
+ <unit kind="usage" href="components/number-field/usage.xml" />
271
+ <unit kind="patterns" href="components/number-field/patterns.xml" />
272
+ </units>
273
+ </entry>
254
274
  <entry id="otp-field" category="form" title="OTPField">
255
- <summary>Field-wrapped one-time code slots. Default slots compose Textfield controlOnly; one label/helper on Root.</summary>
275
+ <summary>Field-wrapped one-time code slots. Default slots compose Textfield controlOnly; one label/helper on OTPField.</summary>
256
276
  <units>
257
277
  <unit kind="meta" href="components/otp-field/meta.xml" />
258
278
  <unit kind="a11y" href="components/otp-field/a11y.xml" />
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@viraui/react",
3
- "version": "2026.7.0-next.0",
3
+ "version": "2026.7.0",
4
4
  "private": false,
5
5
  "files": [
6
6
  "dist"
@@ -28,7 +28,7 @@
28
28
  },
29
29
  "devDependencies": {
30
30
  "@base-ui/react": ">=1.8.0",
31
- "@viraui/foundation": "2026.7.0-next.0",
31
+ "@viraui/foundation": "2026.7.0",
32
32
  "@viraui/icons": "2026.1.0",
33
33
  "@viraui/postcss-config": "2026.0.0",
34
34
  "@viraui/tsconfig": "2026.0.0",