@viraui/react 2026.3.11 → 2026.4.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.
- package/dist/catalog.json +50 -50
- package/dist/components/textarea/textarea.js +2 -2
- package/dist/components/textfield/textfield.js +2 -2
- package/dist/specs/PROTOCOL.md +48 -0
- package/dist/specs/activity-hints.xml +42 -0
- package/dist/specs/components/accordion/a11y.xml +6 -0
- package/dist/specs/components/accordion/meta.xml +20 -0
- package/dist/specs/components/accordion/patterns.xml +9 -0
- package/dist/specs/components/accordion/props.xml +48 -0
- package/dist/specs/components/accordion/usage.xml +8 -0
- package/dist/specs/components/annotate/a11y.xml +6 -0
- package/dist/specs/components/annotate/meta.xml +19 -0
- package/dist/specs/components/annotate/patterns.xml +7 -0
- package/dist/specs/components/annotate/props.xml +88 -0
- package/dist/specs/components/annotate/usage.xml +10 -0
- package/dist/specs/components/autocomplete/a11y.xml +6 -0
- package/dist/specs/components/autocomplete/meta.xml +22 -0
- package/dist/specs/components/autocomplete/patterns.xml +14 -0
- package/dist/specs/components/autocomplete/props.xml +81 -0
- package/dist/specs/components/autocomplete/usage.xml +11 -0
- package/dist/specs/components/avatar/a11y.xml +5 -0
- package/dist/specs/components/avatar/meta.xml +17 -0
- package/dist/specs/components/avatar/patterns.xml +7 -0
- package/dist/specs/components/avatar/props.xml +38 -0
- package/dist/specs/components/avatar/usage.xml +7 -0
- package/dist/specs/components/avatar-group/a11y.xml +6 -0
- package/dist/specs/components/avatar-group/meta.xml +16 -0
- package/dist/specs/components/avatar-group/patterns.xml +7 -0
- package/dist/specs/components/avatar-group/props.xml +39 -0
- package/dist/specs/components/avatar-group/usage.xml +10 -0
- package/dist/specs/components/badge/a11y.xml +7 -0
- package/dist/specs/components/badge/meta.xml +19 -0
- package/dist/specs/components/badge/patterns.xml +7 -0
- package/dist/specs/components/badge/props.xml +37 -0
- package/dist/specs/components/badge/usage.xml +9 -0
- package/dist/specs/components/beam/a11y.xml +7 -0
- package/dist/specs/components/beam/meta.xml +18 -0
- package/dist/specs/components/beam/patterns.xml +7 -0
- package/dist/specs/components/beam/props.xml +90 -0
- package/dist/specs/components/beam/usage.xml +11 -0
- package/dist/specs/components/bleed/a11y.xml +7 -0
- package/dist/specs/components/bleed/meta.xml +18 -0
- package/dist/specs/components/bleed/patterns.xml +7 -0
- package/dist/specs/components/bleed/props.xml +22 -0
- package/dist/specs/components/bleed/usage.xml +10 -0
- package/dist/specs/components/breakpoints/a11y.xml +5 -0
- package/dist/specs/components/breakpoints/meta.xml +17 -0
- package/dist/specs/components/breakpoints/patterns.xml +9 -0
- package/dist/specs/components/breakpoints/props.xml +20 -0
- package/dist/specs/components/breakpoints/usage.xml +9 -0
- package/dist/specs/components/button/a11y.xml +9 -0
- package/dist/specs/components/button/meta.xml +20 -0
- package/dist/specs/components/button/patterns.xml +11 -0
- package/dist/specs/components/button/props.xml +101 -0
- package/dist/specs/components/button/usage.xml +18 -0
- package/dist/specs/components/checkbox/a11y.xml +6 -0
- package/dist/specs/components/checkbox/meta.xml +21 -0
- package/dist/specs/components/checkbox/patterns.xml +7 -0
- package/dist/specs/components/checkbox/props.xml +48 -0
- package/dist/specs/components/checkbox/usage.xml +10 -0
- package/dist/specs/components/chip/a11y.xml +6 -0
- package/dist/specs/components/chip/meta.xml +19 -0
- package/dist/specs/components/chip/patterns.xml +7 -0
- package/dist/specs/components/chip/props.xml +49 -0
- package/dist/specs/components/chip/usage.xml +11 -0
- package/dist/specs/components/clamp-text/a11y.xml +6 -0
- package/dist/specs/components/clamp-text/meta.xml +17 -0
- package/dist/specs/components/clamp-text/patterns.xml +7 -0
- package/dist/specs/components/clamp-text/props.xml +27 -0
- package/dist/specs/components/clamp-text/usage.xml +8 -0
- package/dist/specs/components/dialog/a11y.xml +7 -0
- package/dist/specs/components/dialog/meta.xml +21 -0
- package/dist/specs/components/dialog/patterns.xml +19 -0
- package/dist/specs/components/dialog/props.xml +49 -0
- package/dist/specs/components/dialog/usage.xml +12 -0
- package/dist/specs/components/elevator/a11y.xml +6 -0
- package/dist/specs/components/elevator/meta.xml +16 -0
- package/dist/specs/components/elevator/patterns.xml +7 -0
- package/dist/specs/components/elevator/props.xml +31 -0
- package/dist/specs/components/elevator/usage.xml +8 -0
- package/dist/specs/components/fieldset/a11y.xml +6 -0
- package/dist/specs/components/fieldset/meta.xml +22 -0
- package/dist/specs/components/fieldset/patterns.xml +7 -0
- package/dist/specs/components/fieldset/props.xml +26 -0
- package/dist/specs/components/fieldset/usage.xml +11 -0
- package/dist/specs/components/fit-text/a11y.xml +6 -0
- package/dist/specs/components/fit-text/meta.xml +18 -0
- package/dist/specs/components/fit-text/patterns.xml +7 -0
- package/dist/specs/components/fit-text/props.xml +19 -0
- package/dist/specs/components/fit-text/usage.xml +9 -0
- package/dist/specs/components/glow/a11y.xml +6 -0
- package/dist/specs/components/glow/meta.xml +19 -0
- package/dist/specs/components/glow/patterns.xml +7 -0
- package/dist/specs/components/glow/props.xml +74 -0
- package/dist/specs/components/glow/usage.xml +12 -0
- package/dist/specs/components/grid/a11y.xml +6 -0
- package/dist/specs/components/grid/meta.xml +18 -0
- package/dist/specs/components/grid/patterns.xml +9 -0
- package/dist/specs/components/grid/props.xml +101 -0
- package/dist/specs/components/grid/usage.xml +10 -0
- package/dist/specs/components/icon-button/a11y.xml +9 -0
- package/dist/specs/components/icon-button/meta.xml +18 -0
- package/dist/specs/components/icon-button/patterns.xml +11 -0
- package/dist/specs/components/icon-button/props.xml +95 -0
- package/dist/specs/components/icon-button/usage.xml +14 -0
- package/dist/specs/components/linear-progress/a11y.xml +6 -0
- package/dist/specs/components/linear-progress/meta.xml +21 -0
- package/dist/specs/components/linear-progress/patterns.xml +7 -0
- package/dist/specs/components/linear-progress/props.xml +31 -0
- package/dist/specs/components/linear-progress/usage.xml +11 -0
- package/dist/specs/components/masonry/a11y.xml +6 -0
- package/dist/specs/components/masonry/meta.xml +18 -0
- package/dist/specs/components/masonry/patterns.xml +9 -0
- package/dist/specs/components/masonry/props.xml +32 -0
- package/dist/specs/components/masonry/usage.xml +9 -0
- package/dist/specs/components/menu/a11y.xml +7 -0
- package/dist/specs/components/menu/meta.xml +25 -0
- package/dist/specs/components/menu/patterns.xml +25 -0
- package/dist/specs/components/menu/props.xml +73 -0
- package/dist/specs/components/menu/usage.xml +15 -0
- package/dist/specs/components/meter/a11y.xml +6 -0
- package/dist/specs/components/meter/meta.xml +19 -0
- package/dist/specs/components/meter/patterns.xml +7 -0
- package/dist/specs/components/meter/props.xml +31 -0
- package/dist/specs/components/meter/usage.xml +10 -0
- package/dist/specs/components/popover/a11y.xml +7 -0
- package/dist/specs/components/popover/meta.xml +22 -0
- package/dist/specs/components/popover/patterns.xml +15 -0
- package/dist/specs/components/popover/props.xml +37 -0
- package/dist/specs/components/popover/usage.xml +12 -0
- package/dist/specs/components/progressive-blur/a11y.xml +6 -0
- package/dist/specs/components/progressive-blur/meta.xml +17 -0
- package/dist/specs/components/progressive-blur/patterns.xml +7 -0
- package/dist/specs/components/progressive-blur/props.xml +28 -0
- package/dist/specs/components/progressive-blur/usage.xml +10 -0
- package/dist/specs/components/radio/a11y.xml +6 -0
- package/dist/specs/components/radio/meta.xml +20 -0
- package/dist/specs/components/radio/patterns.xml +9 -0
- package/dist/specs/components/radio/props.xml +44 -0
- package/dist/specs/components/radio/usage.xml +12 -0
- package/dist/specs/components/select/a11y.xml +6 -0
- package/dist/specs/components/select/meta.xml +21 -0
- package/dist/specs/components/select/patterns.xml +13 -0
- package/dist/specs/components/select/props.xml +83 -0
- package/dist/specs/components/select/usage.xml +14 -0
- package/dist/specs/components/separator/a11y.xml +6 -0
- package/dist/specs/components/separator/meta.xml +18 -0
- package/dist/specs/components/separator/patterns.xml +7 -0
- package/dist/specs/components/separator/props.xml +39 -0
- package/dist/specs/components/separator/usage.xml +8 -0
- package/dist/specs/components/shimmer/a11y.xml +6 -0
- package/dist/specs/components/shimmer/meta.xml +18 -0
- package/dist/specs/components/shimmer/patterns.xml +7 -0
- package/dist/specs/components/shimmer/props.xml +40 -0
- package/dist/specs/components/shimmer/usage.xml +9 -0
- package/dist/specs/components/skeleton/a11y.xml +8 -0
- package/dist/specs/components/skeleton/meta.xml +17 -0
- package/dist/specs/components/skeleton/patterns.xml +8 -0
- package/dist/specs/components/skeleton/props.xml +73 -0
- package/dist/specs/components/skeleton/usage.xml +10 -0
- package/dist/specs/components/slider/a11y.xml +6 -0
- package/dist/specs/components/slider/meta.xml +19 -0
- package/dist/specs/components/slider/patterns.xml +7 -0
- package/dist/specs/components/slider/props.xml +45 -0
- package/dist/specs/components/slider/usage.xml +8 -0
- package/dist/specs/components/spinner/a11y.xml +7 -0
- package/dist/specs/components/spinner/meta.xml +17 -0
- package/dist/specs/components/spinner/patterns.xml +7 -0
- package/dist/specs/components/spinner/props.xml +24 -0
- package/dist/specs/components/spinner/usage.xml +8 -0
- package/dist/specs/components/stack/a11y.xml +6 -0
- package/dist/specs/components/stack/meta.xml +19 -0
- package/dist/specs/components/stack/patterns.xml +7 -0
- package/dist/specs/components/stack/props.xml +94 -0
- package/dist/specs/components/stack/usage.xml +14 -0
- package/dist/specs/components/static-noise/a11y.xml +6 -0
- package/dist/specs/components/static-noise/meta.xml +17 -0
- package/dist/specs/components/static-noise/patterns.xml +7 -0
- package/dist/specs/components/static-noise/props.xml +27 -0
- package/dist/specs/components/static-noise/usage.xml +10 -0
- package/dist/specs/components/surface/a11y.xml +6 -0
- package/dist/specs/components/surface/meta.xml +17 -0
- package/dist/specs/components/surface/patterns.xml +7 -0
- package/dist/specs/components/surface/props.xml +92 -0
- package/dist/specs/components/surface/usage.xml +16 -0
- package/dist/specs/components/switch/a11y.xml +6 -0
- package/dist/specs/components/switch/meta.xml +19 -0
- package/dist/specs/components/switch/patterns.xml +7 -0
- package/dist/specs/components/switch/props.xml +48 -0
- package/dist/specs/components/switch/usage.xml +8 -0
- package/dist/specs/components/tabs/a11y.xml +6 -0
- package/dist/specs/components/tabs/meta.xml +19 -0
- package/dist/specs/components/tabs/patterns.xml +14 -0
- package/dist/specs/components/tabs/props.xml +24 -0
- package/dist/specs/components/tabs/usage.xml +8 -0
- package/dist/specs/components/text/a11y.xml +6 -0
- package/dist/specs/components/text/meta.xml +17 -0
- package/dist/specs/components/text/patterns.xml +7 -0
- package/dist/specs/components/text/props.xml +129 -0
- package/dist/specs/components/text/usage.xml +7 -0
- package/dist/specs/components/textarea/a11y.xml +6 -0
- package/dist/specs/components/textarea/meta.xml +19 -0
- package/dist/specs/components/textarea/patterns.xml +7 -0
- package/dist/specs/components/textarea/props.xml +39 -0
- package/dist/specs/components/textarea/usage.xml +10 -0
- package/dist/specs/components/textfield/a11y.xml +6 -0
- package/dist/specs/components/textfield/meta.xml +21 -0
- package/dist/specs/components/textfield/patterns.xml +7 -0
- package/dist/specs/components/textfield/props.xml +51 -0
- package/dist/specs/components/textfield/usage.xml +9 -0
- package/dist/specs/components/title/a11y.xml +7 -0
- package/dist/specs/components/title/meta.xml +17 -0
- package/dist/specs/components/title/patterns.xml +7 -0
- package/dist/specs/components/title/props.xml +124 -0
- package/dist/specs/components/title/usage.xml +10 -0
- package/dist/specs/components/toast/a11y.xml +7 -0
- package/dist/specs/components/toast/meta.xml +20 -0
- package/dist/specs/components/toast/patterns.xml +15 -0
- package/dist/specs/components/toast/props.xml +42 -0
- package/dist/specs/components/toast/usage.xml +10 -0
- package/dist/specs/components/toggle-button/a11y.xml +6 -0
- package/dist/specs/components/toggle-button/meta.xml +20 -0
- package/dist/specs/components/toggle-button/patterns.xml +7 -0
- package/dist/specs/components/toggle-button/props.xml +61 -0
- package/dist/specs/components/toggle-button/usage.xml +10 -0
- package/dist/specs/components/toggle-group/a11y.xml +6 -0
- package/dist/specs/components/toggle-group/meta.xml +19 -0
- package/dist/specs/components/toggle-group/patterns.xml +9 -0
- package/dist/specs/components/toggle-group/props.xml +15 -0
- package/dist/specs/components/toggle-group/usage.xml +9 -0
- package/dist/specs/components/tooltip/a11y.xml +6 -0
- package/dist/specs/components/tooltip/meta.xml +21 -0
- package/dist/specs/components/tooltip/patterns.xml +12 -0
- package/dist/specs/components/tooltip/props.xml +20 -0
- package/dist/specs/components/tooltip/usage.xml +10 -0
- package/dist/specs/components/typewriter/a11y.xml +7 -0
- package/dist/specs/components/typewriter/meta.xml +18 -0
- package/dist/specs/components/typewriter/patterns.xml +7 -0
- package/dist/specs/components/typewriter/props.xml +43 -0
- package/dist/specs/components/typewriter/usage.xml +11 -0
- package/dist/specs/foundation/attributes.xml +127 -0
- package/dist/specs/foundation/bootstrap.xml +62 -0
- package/dist/specs/foundation/elevation.xml +21 -0
- package/dist/specs/foundation/meta.xml +20 -0
- package/dist/specs/foundation/modules.xml +62 -0
- package/dist/specs/foundation/theme-topics.xml +60 -0
- package/dist/specs/foundation/toggles.xml +25 -0
- package/dist/specs/index.xml +538 -0
- package/dist/specs/patterns/settings-row.xml +19 -0
- package/package.json +12 -11
- package/dist/components/accordion/accordion.guide.json +0 -69
- package/dist/components/annotate/annotate.guide.json +0 -110
- package/dist/components/autocomplete/autocomplete.guide.json +0 -103
- package/dist/components/avatar/avatar.guide.json +0 -53
- package/dist/components/avatar-group/avatar-group.guide.json +0 -56
- package/dist/components/badge/badge.guide.json +0 -59
- package/dist/components/beam/beam.guide.json +0 -123
- package/dist/components/bleed/bleed.guide.json +0 -43
- package/dist/components/breakpoints/breakpoints.guide.json +0 -40
- package/dist/components/button/button-link.guide.json +0 -69
- package/dist/components/button/button.guide.json +0 -78
- package/dist/components/checkbox/checkbox.guide.json +0 -68
- package/dist/components/chip/chip.guide.json +0 -69
- package/dist/components/clamp-text/clamp-text.guide.json +0 -47
- package/dist/components/dialog/dialog.guide.json +0 -72
- package/dist/components/elevator/elevator.guide.json +0 -46
- package/dist/components/fieldset/fieldset.guide.json +0 -43
- package/dist/components/fit-text/fit-text.guide.json +0 -38
- package/dist/components/glow/glow.guide.json +0 -108
- package/dist/components/grid/grid.guide.json +0 -120
- package/dist/components/icon-button/icon-button-link.guide.json +0 -73
- package/dist/components/icon-button/icon-button.guide.json +0 -72
- package/dist/components/linear-progress/linear-progress.guide.json +0 -53
- package/dist/components/masonry/masonry.guide.json +0 -50
- package/dist/components/menu/menu.guide.json +0 -94
- package/dist/components/meter/meter.guide.json +0 -52
- package/dist/components/popover/popover.guide.json +0 -58
- package/dist/components/progressive-blur/progressive-blur.guide.json +0 -50
- package/dist/components/radio/radio.guide.json +0 -65
- package/dist/components/select/select.guide.json +0 -105
- package/dist/components/separator/separator.guide.json +0 -58
- package/dist/components/shimmer/shimmer.guide.json +0 -67
- package/dist/components/skeleton/skeleton.guide.json +0 -98
- package/dist/components/slider/slider.guide.json +0 -64
- package/dist/components/spinner/spinner.guide.json +0 -43
- package/dist/components/stack/stack.guide.json +0 -116
- package/dist/components/static-noise/static-noise.guide.json +0 -44
- package/dist/components/surface/surface.guide.json +0 -115
- package/dist/components/switch/switch.guide.json +0 -71
- package/dist/components/tabs/tabs.guide.json +0 -43
- package/dist/components/text/text.guide.json +0 -152
- package/dist/components/textarea/textarea.guide.json +0 -55
- package/dist/components/textfield/textfield.guide.json +0 -70
- package/dist/components/title/title.guide.json +0 -149
- package/dist/components/toast/toast.guide.json +0 -60
- package/dist/components/toggle-button/toggle-button.guide.json +0 -81
- package/dist/components/toggle-group/toggle-group.guide.json +0 -27
- package/dist/components/tooltip/tooltip.guide.json +0 -40
- package/dist/components/typewriter/typewriter.guide.json +0 -65
- package/dist/consumption.json +0 -84
- package/dist/preflight-surface.json +0 -233
- package/dist/theme-surface.json +0 -71
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "Accordion",
|
|
3
|
-
"baseUIApi": "https://base-ui.com/react/components/accordion#api-reference",
|
|
4
|
-
"structure": "<Accordion>\n <Accordion.Item trigger=\"…\">…</Accordion.Item>\n</Accordion>",
|
|
5
|
-
"summary": "Collapsible sections grouped into open/closed blocks with optional Surface wrapping, shared corner radius, and optional Item color for open-block background.",
|
|
6
|
-
"whenToUse": [
|
|
7
|
-
"Progressive disclosure for related content sections in one surface",
|
|
8
|
-
"FAQ or settings groups where only one section may be open by default",
|
|
9
|
-
"Multiple open sections when `multiple` is enabled"
|
|
10
|
-
],
|
|
11
|
-
"whenNotToUse": [
|
|
12
|
-
"Primary navigation that should use links, tabs, or routes directly",
|
|
13
|
-
"Expecting to compose public Header/Trigger/Panel parts; those are owned by `Accordion.Item`"
|
|
14
|
-
],
|
|
15
|
-
"accessibility": [
|
|
16
|
-
"Provide meaningful `trigger` text so each section has an accessible name",
|
|
17
|
-
"Use `value` when controlling or identifying items programmatically",
|
|
18
|
-
"Disabled items cannot be expanded through pointer or keyboard"
|
|
19
|
-
],
|
|
20
|
-
"antiPatterns": [
|
|
21
|
-
"Trying to compose separate public `Accordion.Header`, `Accordion.Trigger`, or `Accordion.Panel` exports",
|
|
22
|
-
"Rendering an item without trigger text and without an external aria-label strategy"
|
|
23
|
-
],
|
|
24
|
-
"related": ["Surface", "Separator", "Stack", "Text", "Icon"],
|
|
25
|
-
"properties": {
|
|
26
|
-
"react": {
|
|
27
|
-
"islands": {
|
|
28
|
-
"description": "When `true`, open/closed blocks render as separated Surface islands with gap between them. When `false`, blocks stay attached with corner radius only on the first and last items. Applies only to items with `useSurface`."
|
|
29
|
-
},
|
|
30
|
-
"Item.border": {
|
|
31
|
-
"description": "Contrast border side(s) forwarded to the wrapping `Surface` when `useSurface` is `true`. Pass a single side or a list (e.g. `[\"bottom\", \"left\"]`). Omit for no border."
|
|
32
|
-
},
|
|
33
|
-
"Item.children": {
|
|
34
|
-
"description": "Panel content revealed when the item is open."
|
|
35
|
-
},
|
|
36
|
-
"Item.color": {
|
|
37
|
-
"description": "Resting background for the item card, forwarded to the wrapping `Surface` when `useSurface` is `true`. Omit for no background."
|
|
38
|
-
},
|
|
39
|
-
"Item.iconClosed": {
|
|
40
|
-
"description": "Decorative icon shown when the item is closed."
|
|
41
|
-
},
|
|
42
|
-
"Item.iconOpen": {
|
|
43
|
-
"description": "Decorative icon shown when the item is open."
|
|
44
|
-
},
|
|
45
|
-
"Item.iconPosition": {
|
|
46
|
-
"description": "Side of the trigger label where the expand/collapse icon is rendered."
|
|
47
|
-
},
|
|
48
|
-
"Item.radius": {
|
|
49
|
-
"description": "Corner radius token for the wrapping Surface island edges when useSurface is true.",
|
|
50
|
-
"refCss": "radius"
|
|
51
|
-
},
|
|
52
|
-
"Item.trigger": {
|
|
53
|
-
"description": "Visible trigger label rendered inside the accordion header button."
|
|
54
|
-
},
|
|
55
|
-
"Item.useSurface": {
|
|
56
|
-
"description": "When `true`, wraps the item in `Surface` (optional open-block background via `color`). When `false`, renders without `Surface` so consumers can insert `Separator` between items; island styling is skipped for that item."
|
|
57
|
-
}
|
|
58
|
-
},
|
|
59
|
-
"css": {
|
|
60
|
-
"island-gap": {
|
|
61
|
-
"description": "Gap between separated Surface islands when islands={true}."
|
|
62
|
-
},
|
|
63
|
-
"radius": {
|
|
64
|
-
"description": "Corner radius for Surface island block edges when useSurface is true.",
|
|
65
|
-
"refReact": "Item.radius"
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
}
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "Annotate",
|
|
3
|
-
"structure": "<Annotate note=\"…\">…</Annotate>",
|
|
4
|
-
"summary": "Decorative arrow and handwritten label that wraps inline content with optional highlighter mark, positioned via CSS anchor positioning.",
|
|
5
|
-
"whenToUse": [
|
|
6
|
-
"Call out a word or phrase in marketing, docs, or onboarding copy",
|
|
7
|
-
"Add a playful visual annotation without interactive chrome",
|
|
8
|
-
"Highlight a target with an optional mark while keeping children as the real content"
|
|
9
|
-
],
|
|
10
|
-
"whenNotToUse": [
|
|
11
|
-
"Conveying critical instructions, status, or validation that assistive tech must announce",
|
|
12
|
-
"Interactive tooltips or popovers that need focus and keyboard behavior",
|
|
13
|
-
"Layouts that clip overflow and cannot leave room for the arrow and label"
|
|
14
|
-
],
|
|
15
|
-
"accessibility": [
|
|
16
|
-
"Arrow and note are presentational spans with aria-hidden — decorative only and not exposed to assistive tech",
|
|
17
|
-
"Do not put critical information in note; keep real meaning in children or aria-describedby content",
|
|
18
|
-
"Children retain native semantics; Annotate itself is a presentational span wrap"
|
|
19
|
-
],
|
|
20
|
-
"antiPatterns": [
|
|
21
|
-
"Using note as the only source of instructions or status",
|
|
22
|
-
"Nesting Annotate inside overflow-hidden parents without padding for the arrow",
|
|
23
|
-
"Expecting the label to participate in hit-testing or selection",
|
|
24
|
-
"Adding position:relative on Annotate — it breaks CSS anchor position-area placement"
|
|
25
|
-
],
|
|
26
|
-
"related": ["Text", "Title", "Tooltip", "Chip"],
|
|
27
|
-
"properties": {
|
|
28
|
-
"react": {
|
|
29
|
-
"arrowOffsetX": {
|
|
30
|
-
"description": "Horizontal offset for the arrow pseudo (`--vui-annotate-arrow-x`)."
|
|
31
|
-
},
|
|
32
|
-
"arrowOffsetY": {
|
|
33
|
-
"description": "Vertical offset for the arrow pseudo (`--vui-annotate-arrow-y`)."
|
|
34
|
-
},
|
|
35
|
-
"color": {
|
|
36
|
-
"description": "Highlight token driving arrow, label, and optional mark color via `--vui-annotate-color`."
|
|
37
|
-
},
|
|
38
|
-
"labelGap": {
|
|
39
|
-
"description": "Gap between arrow and label on all sides via `--vui-annotate-label-gap`."
|
|
40
|
-
},
|
|
41
|
-
"labelMaxWidth": {
|
|
42
|
-
"description": "Max width for the label pseudo via `--vui-annotate-label-max-width`."
|
|
43
|
-
},
|
|
44
|
-
"mark": {
|
|
45
|
-
"description": "When true, applies a highlighter mark behind the wrapped content."
|
|
46
|
-
},
|
|
47
|
-
"note": {
|
|
48
|
-
"description": "Decorative label rendered in a presentational note span (not announced). Do not put critical information here — assistive tech does not announce the note."
|
|
49
|
-
},
|
|
50
|
-
"rotate": {
|
|
51
|
-
"description": "Rotation for the label (and composed transforms) via `--vui-annotate-rotate`.",
|
|
52
|
-
"refCss": "rotate"
|
|
53
|
-
},
|
|
54
|
-
"side": {
|
|
55
|
-
"description": "Places the decorative arrow and label relative to the wrapped content."
|
|
56
|
-
},
|
|
57
|
-
"targetGap": {
|
|
58
|
-
"description": "Gap between the target and the arrow via `--vui-annotate-target-gap`."
|
|
59
|
-
},
|
|
60
|
-
"textAlign": {
|
|
61
|
-
"description": "Text alignment for the note via `--vui-annotate-text-align`."
|
|
62
|
-
},
|
|
63
|
-
"textOffsetX": {
|
|
64
|
-
"description": "Horizontal nudge for the note part (translateX on the inner nudge wrapper)."
|
|
65
|
-
},
|
|
66
|
-
"textOffsetY": {
|
|
67
|
-
"description": "Vertical nudge for the note part (translateY on the inner nudge wrapper)."
|
|
68
|
-
},
|
|
69
|
-
"zIndex": {
|
|
70
|
-
"description": "Stacking order for arrow and note via `--vui-annotate-z-index`. Same value on both parts."
|
|
71
|
-
}
|
|
72
|
-
},
|
|
73
|
-
"css": {
|
|
74
|
-
"arrow-x": {
|
|
75
|
-
"description": "Horizontal arrow offset."
|
|
76
|
-
},
|
|
77
|
-
"arrow-y": {
|
|
78
|
-
"description": "Vertical arrow offset."
|
|
79
|
-
},
|
|
80
|
-
"color": {
|
|
81
|
-
"description": "Arrow, note, and mark accent color. Defaults to var(--global-foreground)."
|
|
82
|
-
},
|
|
83
|
-
"label-gap": {
|
|
84
|
-
"description": "Gap between arrow and note on all sides."
|
|
85
|
-
},
|
|
86
|
-
"label-max-width": {
|
|
87
|
-
"description": "Max width for the note part."
|
|
88
|
-
},
|
|
89
|
-
"rotate": {
|
|
90
|
-
"description": "Note rotation angle.",
|
|
91
|
-
"refReact": "rotate"
|
|
92
|
-
},
|
|
93
|
-
"target-gap": {
|
|
94
|
-
"description": "Gap between the target and the arrow."
|
|
95
|
-
},
|
|
96
|
-
"text-align": {
|
|
97
|
-
"description": "Text alignment for the note. Defaults to start."
|
|
98
|
-
},
|
|
99
|
-
"text-x": {
|
|
100
|
-
"description": "Legacy horizontal note offset custom property. Prefer textOffsetX from React."
|
|
101
|
-
},
|
|
102
|
-
"text-y": {
|
|
103
|
-
"description": "Legacy vertical note offset custom property. Prefer textOffsetY from React."
|
|
104
|
-
},
|
|
105
|
-
"z-index": {
|
|
106
|
-
"description": "Stacking order for arrow and note. Defaults to auto."
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
}
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "Autocomplete",
|
|
3
|
-
"baseUIApi": "https://base-ui.com/react/components/autocomplete#api-reference",
|
|
4
|
-
"structure": "<Autocomplete>\n <Autocomplete.Item value=\"…\">…</Autocomplete.Item>\n <Autocomplete.Group label=\"…\" items={[…]}>\n <Autocomplete.Collection>\n {(item) => <Autocomplete.Item value={item}>…</Autocomplete.Item>}\n </Autocomplete.Collection>\n </Autocomplete.Group>\n</Autocomplete>",
|
|
5
|
-
"summary": "Field-wrapped free-form suggest input with Textfield chrome and Select-like popup list.",
|
|
6
|
-
"whenToUse": [
|
|
7
|
-
"Suggest options while allowing free-form text in the input",
|
|
8
|
-
"Filterable tag, movie, or docs search with optional empty and status copy",
|
|
9
|
-
"Grouped suggestion lists via Autocomplete.Group and Collection",
|
|
10
|
-
"Async or limited result lists that need polite status announcements",
|
|
11
|
-
"Custom portal host (iframe preview, shadow root, or app overlay root) via `container` on the portal-owning public part"
|
|
12
|
-
],
|
|
13
|
-
"whenNotToUse": [
|
|
14
|
-
"Remembered selection from a closed list — use Select (or Combobox when available)",
|
|
15
|
-
"Command palette, grid picker, or virtualized lists — separate surfaces on Base UI Autocomplete",
|
|
16
|
-
"Wrapping a lone Autocomplete in Fieldset when its own label is sufficient"
|
|
17
|
-
],
|
|
18
|
-
"accessibility": [
|
|
19
|
-
"Provide label or aria-label so the input has an accessible name",
|
|
20
|
-
"Wire description and error copy through the field pattern so assistive tech gets helper text",
|
|
21
|
-
"Keep empty and status slots mounted; update their children when messaging changes"
|
|
22
|
-
],
|
|
23
|
-
"antiPatterns": [
|
|
24
|
-
"Expecting Select-like closed selection state",
|
|
25
|
-
"Leaving the input without label or aria-label",
|
|
26
|
-
"Conditionally unmounting Empty or Status instead of updating their children"
|
|
27
|
-
],
|
|
28
|
-
"related": ["Textfield", "Select", "Fieldset", "Stack", "Surface", "Spinner"],
|
|
29
|
-
"properties": {
|
|
30
|
-
"react": {
|
|
31
|
-
"children": {
|
|
32
|
-
"description": "List content: static Item, Group, or Collection nodes, or a Base UI list render function."
|
|
33
|
-
},
|
|
34
|
-
"container": {
|
|
35
|
-
"description": "Portal mount node (iframe body, shadow root, or app overlay root). Omit for Base UI default (`document.body` from the module window — iframe hosts must pass the iframe document body explicitly)."
|
|
36
|
-
},
|
|
37
|
-
"description": {
|
|
38
|
-
"description": "Helper copy rendered with `Field.Description` and `Text` while the field is valid."
|
|
39
|
-
},
|
|
40
|
-
"empty": {
|
|
41
|
-
"description": "Content rendered inside baked `Autocomplete.Empty` when the filtered list has no items."
|
|
42
|
-
},
|
|
43
|
-
"endAddon": {
|
|
44
|
-
"description": "Trailing decoration (icon, button). Buttons must use `type=\"button\"`."
|
|
45
|
-
},
|
|
46
|
-
"error": {
|
|
47
|
-
"description": "Error copy rendered with `Field.Error` and `Text` in the same slot as `description`. Replaces description while the field is invalid and dirty."
|
|
48
|
-
},
|
|
49
|
-
"fitContent": {
|
|
50
|
-
"description": "When `true`, sets `field-sizing: content` so the control grows inline with its value. Block chrome stays `var(--vui-autocomplete-input-height)`. Omitted / `false` keeps the browser fixed default.",
|
|
51
|
-
"refCss": "input-height"
|
|
52
|
-
},
|
|
53
|
-
"Group.label": {
|
|
54
|
-
"description": "Accessible group label rendered with `Autocomplete.GroupLabel`."
|
|
55
|
-
},
|
|
56
|
-
"Item.addon": {
|
|
57
|
-
"description": "Decorative leading node rendered before the item label."
|
|
58
|
-
},
|
|
59
|
-
"Item.addonAlign": {
|
|
60
|
-
"description": "Vertical alignment of the addon relative to the item label row."
|
|
61
|
-
},
|
|
62
|
-
"label": {
|
|
63
|
-
"description": "Visible label rendered with shared internal `FieldLabel`."
|
|
64
|
-
},
|
|
65
|
-
"placeholder": {
|
|
66
|
-
"description": "Placeholder text shown in the input when empty."
|
|
67
|
-
},
|
|
68
|
-
"ref": {
|
|
69
|
-
"description": "Ref forwarded to the autocomplete input."
|
|
70
|
-
},
|
|
71
|
-
"startAddon": {
|
|
72
|
-
"description": "Leading decoration (prefix text, icon). Not a second field control."
|
|
73
|
-
},
|
|
74
|
-
"status": {
|
|
75
|
-
"description": "Content rendered inside baked `Autocomplete.Status` (async / limit messaging). Keep the slot mounted; update children when status changes."
|
|
76
|
-
}
|
|
77
|
-
},
|
|
78
|
-
"css": {
|
|
79
|
-
"control-group-background": {
|
|
80
|
-
"description": "Autocomplete control group background."
|
|
81
|
-
},
|
|
82
|
-
"control-group-border-color": {
|
|
83
|
-
"description": "Autocomplete control group border color; invalid state overrides."
|
|
84
|
-
},
|
|
85
|
-
"control-group-border-radius": {
|
|
86
|
-
"description": "Autocomplete control group corner radius."
|
|
87
|
-
},
|
|
88
|
-
"control-group-color": {
|
|
89
|
-
"description": "Autocomplete control group foreground color."
|
|
90
|
-
},
|
|
91
|
-
"input-height": {
|
|
92
|
-
"description": "Autocomplete control group block size.",
|
|
93
|
-
"refReact": "fitContent"
|
|
94
|
-
},
|
|
95
|
-
"list-border-radius": {
|
|
96
|
-
"description": "Popup list border radius custom property on the popup root."
|
|
97
|
-
},
|
|
98
|
-
"list-padding": {
|
|
99
|
-
"description": "Popup list padding custom property used for scroll padding."
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
}
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "Avatar",
|
|
3
|
-
"baseUIApi": "https://base-ui.com/react/components/avatar#api-reference",
|
|
4
|
-
"structure": "<Avatar fallback=\"AB\" />",
|
|
5
|
-
"summary": "Circular identity image or fallback for users, entities, or profile chips.",
|
|
6
|
-
"whenToUse": [
|
|
7
|
-
"Show a user or entity photo with text or image fallback",
|
|
8
|
-
"Display profile chips from x-small through large sizes"
|
|
9
|
-
],
|
|
10
|
-
"whenNotToUse": ["Interactive controls or navigation", "Non-identity imagery without a fallback plan"],
|
|
11
|
-
"accessibility": [
|
|
12
|
-
"Provide meaningful alt text when the image conveys identity",
|
|
13
|
-
"Use fallback text or initials when the image is unavailable"
|
|
14
|
-
],
|
|
15
|
-
"antiPatterns": [
|
|
16
|
-
"Relying on Avatar children for layout sizing",
|
|
17
|
-
"Omitting meaningful alt text when the image conveys identity"
|
|
18
|
-
],
|
|
19
|
-
"related": ["Skeleton"],
|
|
20
|
-
"properties": {
|
|
21
|
-
"react": {
|
|
22
|
-
"alt": {
|
|
23
|
-
"description": "Supplies alternative text for the avatar image."
|
|
24
|
-
},
|
|
25
|
-
"fallback": {
|
|
26
|
-
"description": "Supplies the content shown when the image is absent or fails to load."
|
|
27
|
-
},
|
|
28
|
-
"ref": {
|
|
29
|
-
"description": "Ref forwarded to the rendered avatar root element."
|
|
30
|
-
},
|
|
31
|
-
"size": {
|
|
32
|
-
"description": "Selects the rendered avatar footprint."
|
|
33
|
-
},
|
|
34
|
-
"src": {
|
|
35
|
-
"description": "Supplies the avatar image source URL."
|
|
36
|
-
}
|
|
37
|
-
},
|
|
38
|
-
"css": {
|
|
39
|
-
"background": {
|
|
40
|
-
"description": "Root background fill behind image or fallback."
|
|
41
|
-
},
|
|
42
|
-
"foreground": {
|
|
43
|
-
"description": "Root foreground color for fallback content."
|
|
44
|
-
},
|
|
45
|
-
"radius": {
|
|
46
|
-
"description": "Corner radius on the root; size presets also adjust this."
|
|
47
|
-
},
|
|
48
|
-
"size": {
|
|
49
|
-
"description": "Avatar inline and block size on the root."
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
}
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "AvatarGroup",
|
|
3
|
-
"structure": "<AvatarGroup avatars={[{ fallback: \"AB\" }]} />",
|
|
4
|
-
"summary": "Overlapping avatar stack with shared sizing, directional layout, and an optional overflow pill.",
|
|
5
|
-
"whenToUse": [
|
|
6
|
-
"Show a compact list of people or entities with consistent avatar sizing",
|
|
7
|
-
"Display overlapping identity clusters in horizontal or vertical layouts",
|
|
8
|
-
"Collapse long avatar lists into a final overflow pill such as +15 or +9938"
|
|
9
|
-
],
|
|
10
|
-
"whenNotToUse": ["Interactive chip collections that need per-item actions", "Mixed avatar sizes inside one group"],
|
|
11
|
-
"accessibility": [
|
|
12
|
-
"Provide meaningful alt text on each avatar image when identity matters",
|
|
13
|
-
"Treat overflow content such as +3 or +9938 as summary text rather than an interactive affordance",
|
|
14
|
-
"Keep decorative avatars on empty alt text when the surrounding context already labels the group"
|
|
15
|
-
],
|
|
16
|
-
"antiPatterns": [
|
|
17
|
-
"Passing per-avatar size values instead of using the group size prop",
|
|
18
|
-
"Expecting AvatarGroup to derive hidden-count labels instead of passing overflowText directly",
|
|
19
|
-
"Expecting grouped avatars to always render as circles — items keep theme radius/squircle via --vui-avatar-group-item-radius",
|
|
20
|
-
"Using non-positive maxVisible values expecting truncation"
|
|
21
|
-
],
|
|
22
|
-
"related": ["Avatar"],
|
|
23
|
-
"properties": {
|
|
24
|
-
"react": {
|
|
25
|
-
"avatars": {
|
|
26
|
-
"description": "Supplies the avatar payloads rendered by the group in DOM order."
|
|
27
|
-
},
|
|
28
|
-
"direction": {
|
|
29
|
-
"description": "Chooses whether avatars overlap across the inline or block axis."
|
|
30
|
-
},
|
|
31
|
-
"maxVisible": {
|
|
32
|
-
"description": "Limits how many real avatars render before the optional overflow pill is appended. Omitted, zero, and negative values are ignored."
|
|
33
|
-
},
|
|
34
|
-
"overflowText": {
|
|
35
|
-
"description": "Supplies the content rendered inside the optional overflow pill when truncation is active."
|
|
36
|
-
},
|
|
37
|
-
"size": {
|
|
38
|
-
"description": "Selects the shared avatar footprint for every rendered avatar."
|
|
39
|
-
}
|
|
40
|
-
},
|
|
41
|
-
"css": {
|
|
42
|
-
"gap-size": {
|
|
43
|
-
"description": "Cutout gap used by overlap clip-path math."
|
|
44
|
-
},
|
|
45
|
-
"item-radius": {
|
|
46
|
-
"description": "Corner radius applied to grouped avatar items."
|
|
47
|
-
},
|
|
48
|
-
"overlap-distance": {
|
|
49
|
-
"description": "Negative margin overlap between adjacent avatars."
|
|
50
|
-
},
|
|
51
|
-
"size": {
|
|
52
|
-
"description": "Rendered avatar size used for overlap layout."
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
}
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "Badge",
|
|
3
|
-
"structure": "<Badge>{child}</Badge>",
|
|
4
|
-
"summary": "Decorative status-dot overlay that wraps a child, with optional radial mask cutout on the child around the corner dot.",
|
|
5
|
-
"whenToUse": [
|
|
6
|
-
"Show online/offline or presence on an Avatar or icon without changing the child component API",
|
|
7
|
-
"Mark a control as needing attention with a small corner indicator",
|
|
8
|
-
"Keep Chip for labeled text badges; use Badge only for the status-dot overlay"
|
|
9
|
-
],
|
|
10
|
-
"whenNotToUse": [
|
|
11
|
-
"Conveying critical status that assistive tech must announce — put real meaning in the child name or nearby text",
|
|
12
|
-
"Labeled text badges or tags — use Chip",
|
|
13
|
-
"Count or text inside a pill — out of scope for v1"
|
|
14
|
-
],
|
|
15
|
-
"accessibility": [
|
|
16
|
-
"The status dot is a decorative ::after pseudo — not exposed to assistive tech",
|
|
17
|
-
"Do not rely on the dot alone for status; keep real meaning in the child's accessible name or nearby text",
|
|
18
|
-
"Children retain native semantics; Badge itself is a presentational div wrap",
|
|
19
|
-
"Enter/exit motion (hole↔dot, reverse on hide) is suppressed under prefers-reduced-motion"
|
|
20
|
-
],
|
|
21
|
-
"antiPatterns": [
|
|
22
|
-
"Using the visible dot as the only source of status for assistive tech",
|
|
23
|
-
"Wrapping multiple element children when only one should receive the radial mask cutout",
|
|
24
|
-
"Expecting the dot to participate in hit-testing"
|
|
25
|
-
],
|
|
26
|
-
"related": ["Avatar", "AvatarGroup", "Chip", "Annotate"],
|
|
27
|
-
"properties": {
|
|
28
|
-
"react": {
|
|
29
|
-
"color": {
|
|
30
|
-
"description": "Highlight token driving the status-dot color via `--vui-badge-color`."
|
|
31
|
-
},
|
|
32
|
-
"position": {
|
|
33
|
-
"description": "Places the status dot on a corner of the wrapped content."
|
|
34
|
-
},
|
|
35
|
-
"show": {
|
|
36
|
-
"description": "When true, shows the decorative status dot and applies the radial mask cutout. Enter: hole expands, then the dot scales in. Exit: reverse (dot then hole)."
|
|
37
|
-
},
|
|
38
|
-
"size": {
|
|
39
|
-
"description": "Diameter of the status dot via `--vui-badge-size`.",
|
|
40
|
-
"refCss": "size"
|
|
41
|
-
}
|
|
42
|
-
},
|
|
43
|
-
"css": {
|
|
44
|
-
"color": {
|
|
45
|
-
"description": "Status-dot accent color. Defaults to var(--global-primary)."
|
|
46
|
-
},
|
|
47
|
-
"position-x": {
|
|
48
|
-
"description": "Horizontal status-dot anchor. Position presets set it to 0% for start or 100% for end."
|
|
49
|
-
},
|
|
50
|
-
"position-y": {
|
|
51
|
-
"description": "Vertical status-dot anchor. Position presets set it to 0% for top or 100% for bottom."
|
|
52
|
-
},
|
|
53
|
-
"size": {
|
|
54
|
-
"description": "Status-dot diameter. Defaults to 0.5rem.",
|
|
55
|
-
"refReact": "size"
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
}
|
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "Beam",
|
|
3
|
-
"structure": "<Beam>{children}</Beam>",
|
|
4
|
-
"summary": "Decorative animated border, line, or pulse glow on a transparent Surface shell (radius only). Put the visual card as children. CSS-module geometry plus shared ~30fps pulse rAF for pulse variants. Memory/CPU cost — use sparingly.",
|
|
5
|
-
"whenToUse": [
|
|
6
|
-
"Highlight a focal Surface with a traveling border beam",
|
|
7
|
-
"Bottom-edge line travel under a card or panel",
|
|
8
|
-
"Breathing pulse glow inside or outside a Surface",
|
|
9
|
-
"Token-colored or colorful multi-stop decorative emphasis"
|
|
10
|
-
],
|
|
11
|
-
"whenNotToUse": [
|
|
12
|
-
"Default decoration on many cards — reserve for rare focal moments",
|
|
13
|
-
"Accessible status or focus indication — Beam is decorative only",
|
|
14
|
-
"As a replacement for Surface color/padding — compose Surface as children",
|
|
15
|
-
"Pointer-driven highlight — use Glow instead"
|
|
16
|
-
],
|
|
17
|
-
"accessibility": [
|
|
18
|
-
"Root stays in the accessibility tree; bloom layer is empty div",
|
|
19
|
-
"Beam is not a focus or status indicator — consumer owns accessible names and state",
|
|
20
|
-
"Offscreen instances pause animations without firing activate/deactivate",
|
|
21
|
-
"prefers-reduced-motion disables motion and leaves a static resting look"
|
|
22
|
-
],
|
|
23
|
-
"antiPatterns": [
|
|
24
|
-
"Relying on Beam for keyboard focus visibility",
|
|
25
|
-
"Treating Beam as the visual card instead of composing Surface children",
|
|
26
|
-
"Expecting theme light/dark auto-tuning — colors are token-driven and theme-agnostic",
|
|
27
|
-
"Using many pulse Beam instances on one page — shared rAF still paints per instance"
|
|
28
|
-
],
|
|
29
|
-
"related": ["Surface", "Glow", "Shimmer"],
|
|
30
|
-
"properties": {
|
|
31
|
-
"react": {
|
|
32
|
-
"radius": {
|
|
33
|
-
"description": "Sets corner radius from the Vira radius token scale, a per-corner [top-left, top-right, bottom-right, bottom-left] tuple (0 for square corners), or auto for concentric radii from the nearest ancestor Surface."
|
|
34
|
-
},
|
|
35
|
-
"variant": {
|
|
36
|
-
"description": "Effect family: rotating border, bottom line travel, or pulse breathe (outside/inside)."
|
|
37
|
-
},
|
|
38
|
-
"size": {
|
|
39
|
-
"description": "Border-only size preset (small compact / medium card). Ignored for other variants."
|
|
40
|
-
},
|
|
41
|
-
"color": {
|
|
42
|
-
"description": "Beam color: primary → --global-primary, highlight token name → --highlight-*, colorful → upstream neon multi-stop RGB palette.",
|
|
43
|
-
"refCss": "color"
|
|
44
|
-
},
|
|
45
|
-
"animate": {
|
|
46
|
-
"description": "Whether the animation is logically on (fade in/out when toggled)."
|
|
47
|
-
},
|
|
48
|
-
"duration": {
|
|
49
|
-
"description": "CSS time string for spin / travel / pulse period scaling.",
|
|
50
|
-
"refCss": "duration"
|
|
51
|
-
},
|
|
52
|
-
"strength": {
|
|
53
|
-
"description": "Overall strength/opacity of beam layers (0–1). Does not affect children.",
|
|
54
|
-
"refCss": "strength"
|
|
55
|
-
},
|
|
56
|
-
"brightness": {
|
|
57
|
-
"description": "Brightness filter multiplier for glow layers. Defaults to 1.9 for pulse-outside, 0.75 for pulse-inside, otherwise 1.3.",
|
|
58
|
-
"refCss": "brightness"
|
|
59
|
-
},
|
|
60
|
-
"saturation": {
|
|
61
|
-
"description": "Saturation filter multiplier for glow layers.",
|
|
62
|
-
"refCss": "saturation"
|
|
63
|
-
},
|
|
64
|
-
"hueRange": {
|
|
65
|
-
"description": "Hue-rotate range for the CSS hue-shift animation (degrees). Line variant caps at 13.",
|
|
66
|
-
"refCss": "hue-range"
|
|
67
|
-
},
|
|
68
|
-
"staticColors": {
|
|
69
|
-
"description": "Disables hue-shift / pulse hue drift so token colors stay fixed. Defaults to true when color is not colorful; false for colorful."
|
|
70
|
-
},
|
|
71
|
-
"fitContent": {
|
|
72
|
-
"description": "Shrinks the root to fit its content (`max-width: fit-content`)."
|
|
73
|
-
},
|
|
74
|
-
"onActivate": {
|
|
75
|
-
"description": "Fired when the fade-in animation completes."
|
|
76
|
-
},
|
|
77
|
-
"onDeactivate": {
|
|
78
|
-
"description": "Fired when the fade-out animation completes."
|
|
79
|
-
}
|
|
80
|
-
},
|
|
81
|
-
"css": {
|
|
82
|
-
"angle": {
|
|
83
|
-
"description": "Conic / travel start angle animated by border and line variants."
|
|
84
|
-
},
|
|
85
|
-
"opacity": {
|
|
86
|
-
"description": "Fade opacity driven by fade-in / fade-out keyframes."
|
|
87
|
-
},
|
|
88
|
-
"duration": {
|
|
89
|
-
"description": "Spin / travel duration (and pulse period scale input).",
|
|
90
|
-
"refReact": "duration"
|
|
91
|
-
},
|
|
92
|
-
"strength": {
|
|
93
|
-
"description": "Overall beam layer strength multiplier.",
|
|
94
|
-
"refReact": "strength"
|
|
95
|
-
},
|
|
96
|
-
"brightness": {
|
|
97
|
-
"description": "Brightness filter multiplier.",
|
|
98
|
-
"refReact": "brightness"
|
|
99
|
-
},
|
|
100
|
-
"saturation": {
|
|
101
|
-
"description": "Saturation filter multiplier.",
|
|
102
|
-
"refReact": "saturation"
|
|
103
|
-
},
|
|
104
|
-
"hue-range": {
|
|
105
|
-
"description": "Hue-rotate oscillation range for non-static colors.",
|
|
106
|
-
"refReact": "hueRange"
|
|
107
|
-
},
|
|
108
|
-
"color": {
|
|
109
|
-
"description": "Resolved beam token color (primary or highlight). Colorful mode uses multi-stop internals.",
|
|
110
|
-
"refReact": "color"
|
|
111
|
-
},
|
|
112
|
-
"hue": {
|
|
113
|
-
"description": "Pulse hue drift angle written by the shared pulse driver."
|
|
114
|
-
},
|
|
115
|
-
"pulse-glow-sx": {
|
|
116
|
-
"description": "Per-axis X scale for pulse-outside glow geometry relative to a 350×140 reference."
|
|
117
|
-
},
|
|
118
|
-
"pulse-glow-sy": {
|
|
119
|
-
"description": "Per-axis Y scale for pulse-outside glow geometry relative to a 350×140 reference."
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "Bleed",
|
|
3
|
-
"structure": "<Bleed>…</Bleed>",
|
|
4
|
-
"summary": "Layout utility that pulls content past inline padding using negative margins or full viewport bleed.",
|
|
5
|
-
"whenToUse": [
|
|
6
|
-
"Edge-to-edge media or dividers inside padded Surface or Stack containers",
|
|
7
|
-
"Hero bands or callouts that should break out of card padding",
|
|
8
|
-
"Full-bleed sections that span the viewport width from a centered layout"
|
|
9
|
-
],
|
|
10
|
-
"whenNotToUse": [
|
|
11
|
-
"Replacing Stack or Surface padding instead of composing with them",
|
|
12
|
-
"Interactive controls that need their own hit target sizing",
|
|
13
|
-
"Cases where overflow clipping on the parent should remain strict"
|
|
14
|
-
],
|
|
15
|
-
"accessibility": [
|
|
16
|
-
"Bleed is a layout wrapper only — child content keeps native semantics",
|
|
17
|
-
"Parent containers should preserve readable line length for text content",
|
|
18
|
-
"Full bleed can introduce horizontal scroll when ancestors use overflow hidden incorrectly",
|
|
19
|
-
"Full bleed uses physical `margin-left: calc(50% - 50vw)` — known RTL limitation; verify mirroring in right-to-left layouts"
|
|
20
|
-
],
|
|
21
|
-
"antiPatterns": [
|
|
22
|
-
"Nesting multiple full bleeds without checking ancestor overflow",
|
|
23
|
-
"Using Bleed to compensate for missing Stack padding instead of fixing layout composition",
|
|
24
|
-
"Applying full bleed inside narrow overflow-hidden cards without testing clipping",
|
|
25
|
-
"Expecting full bleed `margin-left` to flip automatically in RTL"
|
|
26
|
-
],
|
|
27
|
-
"related": ["Stack", "Surface", "Separator"],
|
|
28
|
-
"properties": {
|
|
29
|
-
"react": {
|
|
30
|
-
"amount": {
|
|
31
|
-
"description": "Sets the inline bleed amount using a Vira space token."
|
|
32
|
-
},
|
|
33
|
-
"full": {
|
|
34
|
-
"description": "Bleeds content to the viewport edges and ignores `amount`."
|
|
35
|
-
}
|
|
36
|
-
},
|
|
37
|
-
"css": {
|
|
38
|
-
"amount": {
|
|
39
|
-
"description": "Bleed distance on the root via `margin: 0 calc(var(--vui-bleed-amount, 0) * -1)` (negative inline, zero block)."
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "BreakpointsProvider",
|
|
3
|
-
"structure": "<BreakpointsProvider>\n {children}\n</BreakpointsProvider>",
|
|
4
|
-
"summary": "Client provider plus `useBreakpoints` for mobile-first viewport min-width matches. Defaults are hardcoded em thresholds, not theme tokens.",
|
|
5
|
-
"whenToUse": [
|
|
6
|
-
"Swap or hide React markup when the viewport crosses named breakpoints",
|
|
7
|
-
"Read one flag with `useBreakpoints('small')` so unrelated breakpoint flips skip work",
|
|
8
|
-
"Override the full map with the `breakpoints` prop for product-specific thresholds"
|
|
9
|
-
],
|
|
10
|
-
"whenNotToUse": [
|
|
11
|
-
"Layout that CSS `@media` or container queries can own without branching markup",
|
|
12
|
-
"Calling `useBreakpoints` outside this provider",
|
|
13
|
-
"Reading design-token CSS variables for breakpoint widths"
|
|
14
|
-
],
|
|
15
|
-
"accessibility": [
|
|
16
|
-
"Match state is not an APG widget. Keep the same accessible name and semantics when swapping chrome",
|
|
17
|
-
"Do not rely on breakpoint-only visibility as the only way to reach essential actions on small viewports"
|
|
18
|
-
],
|
|
19
|
-
"antiPatterns": [
|
|
20
|
-
"Using `useBreakpoints` without wrapping the tree in `BreakpointsProvider`",
|
|
21
|
-
"Merging a sparse custom map onto defaults — the `breakpoints` prop replaces the whole map",
|
|
22
|
-
"Putting the provider in a Server Component module — wrap it in a Client Component (`'use client'`)"
|
|
23
|
-
],
|
|
24
|
-
"related": ["Stack", "Grid"],
|
|
25
|
-
"usage": [
|
|
26
|
-
"Place `BreakpointsProvider` in a Client Component (Next.js: same client providers module as overlays, or a nested client wrapper). Server Components may compose around that boundary.",
|
|
27
|
-
"On the server and before measure, every named breakpoint is unmatched (mobile-first base). After hydration, flags follow the real viewport; first paint may differ on wide screens — prefer CSS for chrome that must not flash.",
|
|
28
|
-
"Nested providers isolate subtrees. The innermost map wins."
|
|
29
|
-
],
|
|
30
|
-
"properties": {
|
|
31
|
-
"react": {
|
|
32
|
-
"breakpoints": {
|
|
33
|
-
"description": "Replaces the entire default map (extra-small 30em, small 48em, medium 60em, large 80em, extra-large 100em). Values are CSS lengths used as mobile-first min-width queries."
|
|
34
|
-
},
|
|
35
|
-
"children": {
|
|
36
|
-
"description": "Tree that may call `useBreakpoints`. The hook returns all match flags, or `useBreakpoints(name)` for one boolean."
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
}
|