@acronis-platform/ui-react 3.0.0 → 4.0.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/components/ui/accordion-container/accordion-container.js +14 -14
- package/dist/components/ui/accordion-container/accordion-container.js.map +1 -1
- package/dist/components/ui/app-shell-chat/app-shell-chat.js.map +1 -1
- package/dist/components/ui/area-chart/area-chart.js +141 -139
- package/dist/components/ui/area-chart/area-chart.js.map +1 -1
- package/dist/components/ui/bar-chart/bar-chart.js +295 -293
- package/dist/components/ui/bar-chart/bar-chart.js.map +1 -1
- package/dist/components/ui/category-bar/category-bar.js +109 -93
- package/dist/components/ui/category-bar/category-bar.js.map +1 -1
- package/dist/components/ui/chart/chart-palette.js +113 -0
- package/dist/components/ui/chart/chart-palette.js.map +1 -0
- package/dist/components/ui/chart/chart.js +176 -129
- package/dist/components/ui/chart/chart.js.map +1 -1
- package/dist/components/ui/chart-state/chart-state-illustrations.js +310 -0
- package/dist/components/ui/chart-state/chart-state-illustrations.js.map +1 -0
- package/dist/components/ui/chart-state/chart-state.js +48 -34
- package/dist/components/ui/chart-state/chart-state.js.map +1 -1
- package/dist/components/ui/chart-widget/chart-widget.js +87 -0
- package/dist/components/ui/chart-widget/chart-widget.js.map +1 -0
- package/dist/components/ui/composed-chart/composed-chart.js +117 -115
- package/dist/components/ui/composed-chart/composed-chart.js.map +1 -1
- package/dist/components/ui/confidence-cone/confidence-cone.js +166 -158
- package/dist/components/ui/confidence-cone/confidence-cone.js.map +1 -1
- package/dist/components/ui/funnel-chart/funnel-chart.js +162 -161
- package/dist/components/ui/funnel-chart/funnel-chart.js.map +1 -1
- package/dist/components/ui/histogram/histogram.js +94 -92
- package/dist/components/ui/histogram/histogram.js.map +1 -1
- package/dist/components/ui/input/input.js.map +1 -1
- package/dist/components/ui/label/label.js +2 -9
- package/dist/components/ui/label/label.js.map +1 -1
- package/dist/components/ui/line-chart/line-chart.js +143 -141
- package/dist/components/ui/line-chart/line-chart.js.map +1 -1
- package/dist/components/ui/metric/metric.js +74 -185
- package/dist/components/ui/metric/metric.js.map +1 -1
- package/dist/components/ui/page-content/page-content.js.map +1 -1
- package/dist/components/ui/pie-chart/pie-chart.js +201 -195
- package/dist/components/ui/pie-chart/pie-chart.js.map +1 -1
- package/dist/components/ui/radar-chart/radar-chart.js +133 -131
- package/dist/components/ui/radar-chart/radar-chart.js.map +1 -1
- package/dist/components/ui/radial-bar-chart/radial-bar-chart.js +297 -265
- package/dist/components/ui/radial-bar-chart/radial-bar-chart.js.map +1 -1
- package/dist/components/ui/sankey-chart/sankey-chart.js +123 -101
- package/dist/components/ui/sankey-chart/sankey-chart.js.map +1 -1
- package/dist/components/ui/scatter-chart/scatter-chart.js +76 -74
- package/dist/components/ui/scatter-chart/scatter-chart.js.map +1 -1
- package/dist/components/ui/section/section.js +157 -31
- package/dist/components/ui/section/section.js.map +1 -1
- package/dist/components/ui/stepper/stepper.js +24 -24
- package/dist/components/ui/stepper/stepper.js.map +1 -1
- package/dist/components/ui/stepper-item/stepper-item.js +43 -24
- package/dist/components/ui/stepper-item/stepper-item.js.map +1 -1
- package/dist/components/ui/treemap/treemap.js +133 -124
- package/dist/components/ui/treemap/treemap.js.map +1 -1
- package/dist/components/ui/trend-indicator/trend-indicator.js +34 -69
- package/dist/components/ui/trend-indicator/trend-indicator.js.map +1 -1
- package/dist/components/ui/wizard/wizard.js +59 -0
- package/dist/components/ui/wizard/wizard.js.map +1 -0
- package/dist/hooks/use-wizard.js +75 -0
- package/dist/hooks/use-wizard.js.map +1 -0
- package/dist/index.js +502 -497
- package/dist/index.js.map +1 -1
- package/dist/llms/accordion-container.md +181 -0
- package/dist/llms/accordion.md +124 -0
- package/dist/llms/alert.md +225 -0
- package/dist/llms/app-shell-chat.md +415 -0
- package/dist/llms/area-chart.md +355 -0
- package/dist/llms/avatar.md +208 -0
- package/dist/llms/bar-chart.md +406 -0
- package/dist/llms/breadcrumb.md +326 -0
- package/dist/llms/button-group.md +298 -0
- package/dist/llms/button-icon-input.md +142 -0
- package/dist/llms/button-icon-menu.md +209 -0
- package/dist/llms/button-icon.md +128 -0
- package/dist/llms/button-menu.md +172 -0
- package/dist/llms/button.md +185 -0
- package/dist/llms/calendar-panel.md +733 -0
- package/dist/llms/calendar.md +188 -0
- package/dist/llms/card-filter.md +214 -0
- package/dist/llms/card-section.md +293 -0
- package/dist/llms/card.md +447 -0
- package/dist/llms/carousel-dialog.md +156 -0
- package/dist/llms/category-bar.md +193 -0
- package/dist/llms/chart-state.md +190 -0
- package/dist/llms/chart-widget.md +209 -0
- package/dist/llms/chart.md +182 -0
- package/dist/llms/checkbox.md +257 -0
- package/dist/llms/chip.md +195 -0
- package/dist/llms/combobox.md +164 -0
- package/dist/llms/composed-chart.md +508 -0
- package/dist/llms/confidence-cone.md +277 -0
- package/dist/llms/data-table.md +474 -0
- package/dist/llms/date-range-picker.md +272 -0
- package/dist/llms/description-list.md +131 -0
- package/dist/llms/dialog-footer-carousel.md +147 -0
- package/dist/llms/dialog-footer-default.md +142 -0
- package/dist/llms/dialog-root.md +246 -0
- package/dist/llms/dialog-welcome.md +223 -0
- package/dist/llms/dialog.md +403 -0
- package/dist/llms/dropdown-menu.md +193 -0
- package/dist/llms/empty-overlay.md +146 -0
- package/dist/llms/empty.md +156 -0
- package/dist/llms/field.md +185 -0
- package/dist/llms/filter-cards.md +157 -0
- package/dist/llms/filter-chips.md +323 -0
- package/dist/llms/filter-search.md +512 -0
- package/dist/llms/form.md +154 -0
- package/dist/llms/funnel-chart.md +333 -0
- package/dist/llms/grid.md +80 -0
- package/dist/llms/histogram.md +190 -0
- package/dist/llms/input-date-picker.md +203 -0
- package/dist/llms/input-otp.md +173 -0
- package/dist/llms/input-password.md +197 -0
- package/dist/llms/input-search.md +170 -0
- package/dist/llms/input-select.md +278 -0
- package/dist/llms/input-text-area.md +271 -0
- package/dist/llms/input-text.md +192 -0
- package/dist/llms/line-chart.md +369 -0
- package/dist/llms/link.md +209 -0
- package/dist/llms/loading.md +130 -0
- package/dist/llms/meter.md +177 -0
- package/dist/llms/metric.md +204 -0
- package/dist/llms/number-field.md +122 -0
- package/dist/llms/page-content.md +69 -0
- package/dist/llms/page-header.md +182 -0
- package/dist/llms/pagination.md +133 -0
- package/dist/llms/pie-chart.md +307 -0
- package/dist/llms/popover.md +252 -0
- package/dist/llms/progress-circle.md +126 -0
- package/dist/llms/progress.md +111 -0
- package/dist/llms/radar-chart.md +316 -0
- package/dist/llms/radial-bar-chart.md +319 -0
- package/dist/llms/radio.md +255 -0
- package/dist/llms/resizable.md +195 -0
- package/dist/llms/sankey-chart.md +208 -0
- package/dist/llms/scatter-chart.md +239 -0
- package/dist/llms/scroll-area.md +183 -0
- package/dist/llms/section.md +401 -0
- package/dist/llms/select.md +210 -0
- package/dist/llms/separator.md +87 -0
- package/dist/llms/sheet.md +202 -0
- package/dist/llms/sidebar-primary.md +360 -0
- package/dist/llms/sidebar-secondary.md +417 -0
- package/dist/llms/skeleton.md +81 -0
- package/dist/llms/slider.md +97 -0
- package/dist/llms/spinner.md +100 -0
- package/dist/llms/stack.md +80 -0
- package/dist/llms/stepper-item.md +309 -0
- package/dist/llms/stepper.md +251 -0
- package/dist/llms/switch.md +140 -0
- package/dist/llms/table.md +436 -0
- package/dist/llms/tabs.md +197 -0
- package/dist/llms/tag.md +139 -0
- package/dist/llms/timeline.md +361 -0
- package/dist/llms/timer.md +259 -0
- package/dist/llms/toast.md +241 -0
- package/dist/llms/toggle-group.md +121 -0
- package/dist/llms/toolbar.md +453 -0
- package/dist/llms/tooltip.md +164 -0
- package/dist/llms/treemap.md +254 -0
- package/dist/llms/trend-indicator.md +132 -0
- package/dist/llms/widget-placeholder.md +169 -0
- package/dist/llms/wizard.md +412 -0
- package/dist/llms.txt +142 -0
- package/dist/react.js +502 -497
- package/dist/react.js.map +1 -1
- package/dist/src/components/ui/area-chart/area-chart.d.ts +9 -4
- package/dist/src/components/ui/avatar/avatar.d.ts +1 -1
- package/dist/src/components/ui/bar-chart/bar-chart.d.ts +9 -4
- package/dist/src/components/ui/category-bar/category-bar.d.ts +10 -4
- package/dist/src/components/ui/chart/__stories__/palette-control.d.ts +48 -0
- package/dist/src/components/ui/chart/__tests__/chart-palette.test.d.ts +1 -0
- package/dist/src/components/ui/chart/chart-palette.d.ts +128 -0
- package/dist/src/components/ui/chart/chart.d.ts +66 -15
- package/dist/src/components/ui/chart/index.d.ts +4 -2
- package/dist/src/components/ui/chart-state/chart-state-illustrations.d.ts +6 -0
- package/dist/src/components/ui/chart-state/chart-state.d.ts +13 -2
- package/dist/src/components/ui/chart-state/index.d.ts +1 -0
- package/dist/src/components/ui/chart-widget/chart-widget.d.ts +64 -0
- package/dist/src/components/ui/chart-widget/index.d.ts +1 -0
- package/dist/src/components/ui/composed-chart/composed-chart.d.ts +12 -7
- package/dist/src/components/ui/confidence-cone/confidence-cone.d.ts +10 -5
- package/dist/src/components/ui/empty-overlay/empty-overlay.d.ts +1 -1
- package/dist/src/components/ui/funnel-chart/funnel-chart.d.ts +11 -5
- package/dist/src/components/ui/histogram/histogram.d.ts +10 -4
- package/dist/src/components/ui/label/index.d.ts +1 -1
- package/dist/src/components/ui/label/label.d.ts +1 -5
- package/dist/src/components/ui/line-chart/line-chart.d.ts +9 -4
- package/dist/src/components/ui/metric/metric.d.ts +13 -14
- package/dist/src/components/ui/pie-chart/pie-chart.d.ts +17 -8
- package/dist/src/components/ui/radar-chart/radar-chart.d.ts +10 -5
- package/dist/src/components/ui/radial-bar-chart/radial-bar-chart.d.ts +17 -6
- package/dist/src/components/ui/sankey-chart/sankey-chart.d.ts +10 -5
- package/dist/src/components/ui/scatter-chart/scatter-chart.d.ts +10 -5
- package/dist/src/components/ui/section/index.d.ts +1 -1
- package/dist/src/components/ui/section/section.d.ts +75 -6
- package/dist/src/components/ui/stepper-item/stepper-item.d.ts +6 -5
- package/dist/src/components/ui/tag/tag.d.ts +1 -1
- package/dist/src/components/ui/treemap/treemap.d.ts +11 -5
- package/dist/src/components/ui/trend-indicator/trend-indicator.d.ts +3 -7
- package/dist/src/components/ui/wizard/index.d.ts +1 -0
- package/dist/src/components/ui/wizard/wizard.d.ts +6 -0
- package/dist/src/hooks/index.d.ts +1 -0
- package/dist/src/hooks/use-wizard.d.ts +80 -0
- package/dist/src/index.d.ts +2 -3
- package/dist/ui-react.css +1 -1
- package/package.json +9 -3
- package/dist/components/ui/app-shell/app-shell.js +0 -75
- package/dist/components/ui/app-shell/app-shell.js.map +0 -1
- package/dist/components/ui/auth-layout/auth-layout.js +0 -56
- package/dist/components/ui/auth-layout/auth-layout.js.map +0 -1
- package/dist/components/ui/collapsible/collapsible.js +0 -22
- package/dist/components/ui/collapsible/collapsible.js.map +0 -1
- package/dist/src/components/ui/app-shell/app-shell.d.ts +0 -8
- package/dist/src/components/ui/app-shell/index.d.ts +0 -1
- package/dist/src/components/ui/auth-layout/auth-layout.d.ts +0 -6
- package/dist/src/components/ui/auth-layout/index.d.ts +0 -1
- package/dist/src/components/ui/collapsible/collapsible.d.ts +0 -5
- package/dist/src/components/ui/collapsible/index.d.ts +0 -1
- package/dist/src/components/ui/label/label.docs.d.ts +0 -10
|
@@ -0,0 +1,412 @@
|
|
|
1
|
+
# Wizard
|
|
2
|
+
|
|
3
|
+
> The full-page wizard page template — a sticky header band (breadcrumb, title row with the flow's Cancel/Back/Next actions, an optional subtitle, an optional stepper) above a content column capped at 1024px. Layout and slots only: it owns no step index, no navigation, and no button wiring — which actions show on which step is the consuming UI block's decision, the same boundary PageHeader draws around its own actions slot. Mapped to the ui-react Figma "RegionMain" frame (node 10511-61418).
|
|
4
|
+
|
|
5
|
+
**Status:** ready · **Category:** layout · **Since:** v1.1.0
|
|
6
|
+
|
|
7
|
+
## Import
|
|
8
|
+
|
|
9
|
+
```tsx
|
|
10
|
+
import { Wizard, WizardHeader, WizardSubtitle, WizardBody } from '@acronis-platform/ui-react'
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Quick example
|
|
14
|
+
|
|
15
|
+
```tsx
|
|
16
|
+
<Wizard>
|
|
17
|
+
<WizardHeader>
|
|
18
|
+
<Breadcrumb>
|
|
19
|
+
<BreadcrumbList>
|
|
20
|
+
<BreadcrumbItem><BreadcrumbLink href="#">Dashboards</BreadcrumbLink></BreadcrumbItem>
|
|
21
|
+
<BreadcrumbSeparator />
|
|
22
|
+
<BreadcrumbItem><BreadcrumbPage>Create dashboard</BreadcrumbPage></BreadcrumbItem>
|
|
23
|
+
</BreadcrumbList>
|
|
24
|
+
</Breadcrumb>
|
|
25
|
+
<PageHeaderRow>
|
|
26
|
+
<PageHeaderTitle>Create dashboard</PageHeaderTitle>
|
|
27
|
+
<PageHeaderActions>
|
|
28
|
+
<Button variant="secondary">Cancel</Button>
|
|
29
|
+
<Button variant="secondary">Back</Button>
|
|
30
|
+
<Button>Next</Button>
|
|
31
|
+
</PageHeaderActions>
|
|
32
|
+
</PageHeaderRow>
|
|
33
|
+
<WizardSubtitle>Name it, pick its widgets, choose who can see it.</WizardSubtitle>
|
|
34
|
+
<Stepper currentStep={2} totalSteps={3} current="Choose widgets" next="Set permissions">
|
|
35
|
+
<StepperItem variant="completed" label="Name the dashboard" avatar={<Avatar color="green" className="[box-shadow:none]"><AvatarFallback>1</AvatarFallback></Avatar>} />
|
|
36
|
+
<StepperItem variant="current" label="Choose widgets" avatar={<Avatar color="blue" className="[box-shadow:none] text-[var(--ui-stepper-item-current-label-color)]"><AvatarFallback>2</AvatarFallback></Avatar>} />
|
|
37
|
+
<StepperItem variant="future" label="Set permissions" avatar={<Avatar color="gray" className="[box-shadow:none] text-[var(--ui-stepper-item-future-label-color)]"><AvatarFallback>3</AvatarFallback></Avatar>} />
|
|
38
|
+
</Stepper>
|
|
39
|
+
</WizardHeader>
|
|
40
|
+
<WizardBody>
|
|
41
|
+
<Section>
|
|
42
|
+
<SectionHeader title="Choose widgets" />
|
|
43
|
+
<SectionContent>{/* step fields */}</SectionContent>
|
|
44
|
+
</Section>
|
|
45
|
+
</WizardBody>
|
|
46
|
+
</Wizard>
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
The full-page wizard page template — a sticky header band (breadcrumb, title row
|
|
50
|
+
with the flow's actions, an optional subtitle, an optional stepper) above a
|
|
51
|
+
content column capped at 1024px. Mapped to the ui-react Figma "RegionMain" frame
|
|
52
|
+
(node `10511-61418`).
|
|
53
|
+
|
|
54
|
+
Wizard is a **composition, not a primitive**. Every visual part it needs already
|
|
55
|
+
exists in the kit — `Breadcrumb`, `PageHeaderRow` / `PageHeaderTitle` /
|
|
56
|
+
`PageHeaderActions`, `Stepper` + `StepperItem`, `Section`, `Button` — and Wizard
|
|
57
|
+
reimplements none of them. Its job is the structural skeleton and the slots.
|
|
58
|
+
|
|
59
|
+
## When to use
|
|
60
|
+
|
|
61
|
+
- A full-page, multi-step creation or configuration flow (e.g. Create dashboard,
|
|
62
|
+
Create protection plan) that takes over the page rather than a dialog.
|
|
63
|
+
- A single-page form that still wants the same header band treatment: the stepper
|
|
64
|
+
is optional.
|
|
65
|
+
|
|
66
|
+
## When not to use
|
|
67
|
+
|
|
68
|
+
- A short flow that fits in a modal — use `Dialog` (and `DialogWelcome` for the
|
|
69
|
+
carousel-style onboarding flow).
|
|
70
|
+
- A normal, non-stepped page — use `PageHeader` + `PageContent`.
|
|
71
|
+
- **Step state or navigation logic.** Wizard has no `step` / `onNext` props by
|
|
72
|
+
design; see below.
|
|
73
|
+
|
|
74
|
+
## What Wizard deliberately does not do
|
|
75
|
+
|
|
76
|
+
Per the design brief, deciding which of Cancel / Back / Next / Submit appears on
|
|
77
|
+
a given step — and what each one does — is a per-flow product decision owned by
|
|
78
|
+
the consuming UI block, not the kit. So Wizard holds no step index, fires no
|
|
79
|
+
navigation events, and renders no buttons; `PageHeaderActions` is a slot the
|
|
80
|
+
consumer fills. This is the same boundary `PageHeader` draws around its own
|
|
81
|
+
actions slot.
|
|
82
|
+
|
|
83
|
+
That is a statement about these components, not about the implementation
|
|
84
|
+
package: the React adapter also ships an opt-in headless hook (`useWizard`,
|
|
85
|
+
`packages/ui-react/src/hooks/use-wizard.ts`) that holds the step index and
|
|
86
|
+
derives the `Stepper` summary props plus each step's `variant` and avatar
|
|
87
|
+
treatment, so a consumer needn't hand-maintain one `StepperItem` block per step.
|
|
88
|
+
It sits outside this spec's contract — it renders nothing, still leaves button
|
|
89
|
+
visibility to the consumer, and does no validation, branching, skipping or
|
|
90
|
+
persistence.
|
|
91
|
+
|
|
92
|
+
Likewise there is no `WizardTitle` or `WizardActions`: the title row is
|
|
93
|
+
functionally identical to a page header's, so it is `PageHeaderRow` and friends,
|
|
94
|
+
reused. And there is no `WizardStepper` wrapper — the consumer places a plain
|
|
95
|
+
`Stepper` in the header, or omits it.
|
|
96
|
+
|
|
97
|
+
The design brief's own reference pairing for which buttons to place in
|
|
98
|
+
`PageHeaderActions`:
|
|
99
|
+
|
|
100
|
+
| Flow | Buttons |
|
|
101
|
+
| ------------------------ | ------------------------ |
|
|
102
|
+
| Single-step | `[Cancel] [CTA]` |
|
|
103
|
+
| Multi-step — first step | `[Cancel] [Next]` |
|
|
104
|
+
| Multi-step — middle step | `[Cancel] [Back] [Next]` |
|
|
105
|
+
| Multi-step — final step | `[Cancel] [CTA]` |
|
|
106
|
+
|
|
107
|
+
"CTA" is the flow's submit action (e.g. "Install agent", "Create migration"),
|
|
108
|
+
never a generic "Submit" label. The final step drops `Back` along with `Next` —
|
|
109
|
+
it is not a three-button state.
|
|
110
|
+
|
|
111
|
+
## Parts
|
|
112
|
+
|
|
113
|
+
| Export | Element | Purpose |
|
|
114
|
+
| ---------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
115
|
+
| `Wizard` | `div` | The template root — a full-height flex column. |
|
|
116
|
+
| `WizardHeader` | `div` | The sticky header band: breadcrumb, title row, optional subtitle, optional stepper. Owns the surface, divider, padding, and inter-row gap. |
|
|
117
|
+
| `WizardSubtitle` | `p` | Optional muted supporting line under the title row (same treatment as `PageHeaderDescription`; there is no separate `Subtitle` component). |
|
|
118
|
+
| `WizardBody` | `div` | The step's content column, capped at 1024px. Always wraps a `Section`. |
|
|
119
|
+
|
|
120
|
+
All parts accept their native element attributes plus `className`.
|
|
121
|
+
|
|
122
|
+
## Example
|
|
123
|
+
|
|
124
|
+
```tsx
|
|
125
|
+
<Wizard>
|
|
126
|
+
<WizardHeader>
|
|
127
|
+
<Breadcrumb>
|
|
128
|
+
<BreadcrumbList>
|
|
129
|
+
<BreadcrumbItem>
|
|
130
|
+
<BreadcrumbLink href="#">Dashboards</BreadcrumbLink>
|
|
131
|
+
</BreadcrumbItem>
|
|
132
|
+
<BreadcrumbSeparator />
|
|
133
|
+
<BreadcrumbItem>
|
|
134
|
+
<BreadcrumbPage>Create dashboard</BreadcrumbPage>
|
|
135
|
+
</BreadcrumbItem>
|
|
136
|
+
</BreadcrumbList>
|
|
137
|
+
</Breadcrumb>
|
|
138
|
+
|
|
139
|
+
<PageHeaderRow>
|
|
140
|
+
<PageHeaderTitle>Create dashboard</PageHeaderTitle>
|
|
141
|
+
<PageHeaderActions>
|
|
142
|
+
<Button variant="secondary">Cancel</Button>
|
|
143
|
+
<Button variant="secondary">Back</Button>
|
|
144
|
+
<Button>Next</Button>
|
|
145
|
+
</PageHeaderActions>
|
|
146
|
+
</PageHeaderRow>
|
|
147
|
+
|
|
148
|
+
<WizardSubtitle>
|
|
149
|
+
Name the dashboard, pick its widgets, and choose who can see it.
|
|
150
|
+
</WizardSubtitle>
|
|
151
|
+
|
|
152
|
+
<Stepper
|
|
153
|
+
currentStep={2}
|
|
154
|
+
totalSteps={3}
|
|
155
|
+
current="Choose widgets"
|
|
156
|
+
next="Set permissions"
|
|
157
|
+
>
|
|
158
|
+
<StepperItem
|
|
159
|
+
variant="completed"
|
|
160
|
+
label="Name the dashboard"
|
|
161
|
+
avatar={
|
|
162
|
+
<Avatar color="green" className="[box-shadow:none]">
|
|
163
|
+
<AvatarFallback>1</AvatarFallback>
|
|
164
|
+
</Avatar>
|
|
165
|
+
}
|
|
166
|
+
/>
|
|
167
|
+
<StepperItem
|
|
168
|
+
variant="current"
|
|
169
|
+
label="Choose widgets"
|
|
170
|
+
avatar={
|
|
171
|
+
<Avatar
|
|
172
|
+
color="blue"
|
|
173
|
+
className="[box-shadow:none] text-[var(--ui-stepper-item-current-label-color)]"
|
|
174
|
+
>
|
|
175
|
+
<AvatarFallback>2</AvatarFallback>
|
|
176
|
+
</Avatar>
|
|
177
|
+
}
|
|
178
|
+
/>
|
|
179
|
+
<StepperItem
|
|
180
|
+
variant="future"
|
|
181
|
+
label="Set permissions"
|
|
182
|
+
avatar={
|
|
183
|
+
<Avatar
|
|
184
|
+
color="gray"
|
|
185
|
+
className="[box-shadow:none] text-[var(--ui-stepper-item-future-label-color)]"
|
|
186
|
+
>
|
|
187
|
+
<AvatarFallback>3</AvatarFallback>
|
|
188
|
+
</Avatar>
|
|
189
|
+
}
|
|
190
|
+
/>
|
|
191
|
+
</Stepper>
|
|
192
|
+
</WizardHeader>
|
|
193
|
+
|
|
194
|
+
<WizardBody>
|
|
195
|
+
<Section>
|
|
196
|
+
<SectionHeader
|
|
197
|
+
title="Choose widgets"
|
|
198
|
+
description="Widgets you add here appear on the dashboard in the order you pick them."
|
|
199
|
+
hasDescription
|
|
200
|
+
/>
|
|
201
|
+
<SectionContent>{/* step fields */}</SectionContent>
|
|
202
|
+
</Section>
|
|
203
|
+
</WizardBody>
|
|
204
|
+
</Wizard>
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
The step markers follow `StepperItem`'s composed-`Avatar` conventions: `Avatar`'s
|
|
208
|
+
2px outset ring is switched off with `[box-shadow:none]` (it would otherwise show
|
|
209
|
+
as a halo on the filled step container), and the `current`/`future` digits are
|
|
210
|
+
recolored to the step's own `--ui-stepper-item-{current,future}-label-color`.
|
|
211
|
+
Wizard's `completed` marker is a digit on a green `Avatar` and carries no digit
|
|
212
|
+
color override, so the digit keeps `Avatar`'s own green-scheme foreground; the
|
|
213
|
+
reference pattern in `StepperItem`'s stories instead puts a fixed checkmark icon
|
|
214
|
+
in the `completed` avatar, where the question doesn't arise. See
|
|
215
|
+
[`stepper-item/README.md`](../stepper-item/README.md) for what each override
|
|
216
|
+
does.
|
|
217
|
+
|
|
218
|
+
### Short flow — no stepper
|
|
219
|
+
|
|
220
|
+
```tsx
|
|
221
|
+
<Wizard>
|
|
222
|
+
<WizardHeader>
|
|
223
|
+
<PageHeaderRow>
|
|
224
|
+
<PageHeaderTitle>Create dashboard</PageHeaderTitle>
|
|
225
|
+
<PageHeaderActions>
|
|
226
|
+
<Button variant="secondary">Cancel</Button>
|
|
227
|
+
<Button>Create dashboard</Button>
|
|
228
|
+
</PageHeaderActions>
|
|
229
|
+
</PageHeaderRow>
|
|
230
|
+
</WizardHeader>
|
|
231
|
+
<WizardBody>
|
|
232
|
+
<Section>{/* … */}</Section>
|
|
233
|
+
</WizardBody>
|
|
234
|
+
</Wizard>
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
### Wider step
|
|
238
|
+
|
|
239
|
+
```tsx
|
|
240
|
+
<WizardBody className="max-w-[1280px]">
|
|
241
|
+
<Section>{/* a data table step */}</Section>
|
|
242
|
+
</WizardBody>
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
## Behavior
|
|
246
|
+
|
|
247
|
+
```gherkin
|
|
248
|
+
Scenario: Header band above the content column
|
|
249
|
+
Given a Wizard holding a WizardHeader and a WizardBody
|
|
250
|
+
Then the header band renders above the content column
|
|
251
|
+
And the band sits on the secondary surface with a divider along its bottom edge
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
```gherkin
|
|
255
|
+
Scenario: Header stays put while a long step scrolls
|
|
256
|
+
Given a WizardBody taller than the viewport
|
|
257
|
+
When the user scrolls the step's content
|
|
258
|
+
Then the WizardHeader stays pinned to the top of the scroll container
|
|
259
|
+
So that the step context and the Cancel/Back/Next actions remain reachable
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
```gherkin
|
|
263
|
+
Scenario: Header row order
|
|
264
|
+
Given a WizardHeader
|
|
265
|
+
Then its children stack vertically in the order the consumer wrote them —
|
|
266
|
+
breadcrumb, title row, subtitle, stepper — separated by a single fixed gap
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
```gherkin
|
|
270
|
+
Scenario: Title row is PageHeader's, reused
|
|
271
|
+
Given a wizard's title and its Cancel/Back/Next actions
|
|
272
|
+
Then they are composed from PageHeaderRow, PageHeaderTitle and PageHeaderActions
|
|
273
|
+
And Wizard adds no WizardTitle / WizardActions parts of its own, since the row
|
|
274
|
+
is functionally identical to a page header's
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
```gherkin
|
|
278
|
+
Scenario: Which actions show on a step
|
|
279
|
+
Given a multi-step flow whose last step submits instead of advancing
|
|
280
|
+
Then the consuming UI block decides which of Cancel / Back / Next / Submit to
|
|
281
|
+
place in PageHeaderActions on each step
|
|
282
|
+
And Wizard neither tracks the step index nor renders or wires any of those
|
|
283
|
+
buttons — it provides only the slot
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
The design brief's own reference pairing (Figma's "Wizard" documentation page,
|
|
287
|
+
`node-id=11098-18`) for that per-step decision:
|
|
288
|
+
|
|
289
|
+
| Flow | Buttons |
|
|
290
|
+
| ------------------------ | ------------------------ |
|
|
291
|
+
| Single-step | `[Cancel] [CTA]` |
|
|
292
|
+
| Multi-step — first step | `[Cancel] [Next]` |
|
|
293
|
+
| Multi-step — middle step | `[Cancel] [Back] [Next]` |
|
|
294
|
+
| Multi-step — final step | `[Cancel] [CTA]` |
|
|
295
|
+
|
|
296
|
+
"CTA" is the flow's submit action (e.g. "Install agent", "Create migration",
|
|
297
|
+
"Delete device") — its label is never "Submit" generically. Note the final step
|
|
298
|
+
drops `Back` along with `Next`, matching the single-step pairing exactly; only
|
|
299
|
+
the middle steps carry three buttons.
|
|
300
|
+
|
|
301
|
+
Knowing _where in the flow_ you are is a separate concern from deciding which
|
|
302
|
+
buttons that position shows. The React adapter's opt-in `useWizard` hook answers
|
|
303
|
+
the first (`isFirstStep` / `isLastStep`, plus the `Stepper` props); the pairing
|
|
304
|
+
above stays the consumer's, on every implementation.
|
|
305
|
+
|
|
306
|
+
```gherkin
|
|
307
|
+
Scenario: Optional subtitle
|
|
308
|
+
Given a flow that needs a supporting line under its title
|
|
309
|
+
Then a WizardSubtitle renders it in the muted secondary text color
|
|
310
|
+
And omitting it leaves no empty row in the header band
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
```gherkin
|
|
314
|
+
Scenario: Optional stepper
|
|
315
|
+
Given a wizard of two or three steps
|
|
316
|
+
Then the flow may omit the Stepper entirely
|
|
317
|
+
And Wizard neither requires one nor renders a fallback in its place
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
```gherkin
|
|
321
|
+
Scenario: Stepper collapses on a narrow viewport
|
|
322
|
+
Given a WizardHeader containing a Stepper
|
|
323
|
+
When the viewport is narrower than 1024px
|
|
324
|
+
Then the Stepper itself swaps its item row for its two-line text summary
|
|
325
|
+
And Wizard's own layout is unchanged — the switch belongs to Stepper
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
```gherkin
|
|
329
|
+
Scenario: Content column width
|
|
330
|
+
Given a WizardBody
|
|
331
|
+
Then its content is capped at 1024px and bottom-padded
|
|
332
|
+
And a step needing a different width overrides it through className, since
|
|
333
|
+
there is no width variant
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
```gherkin
|
|
337
|
+
Scenario: Step content is a Section
|
|
338
|
+
Given a wizard step's fields
|
|
339
|
+
Then they live inside a Section rendered as WizardBody's child
|
|
340
|
+
And WizardBody itself contributes no titling or padding of its own beyond the
|
|
341
|
+
cap and the bottom pad
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
```gherkin
|
|
345
|
+
Scenario: Right-to-left
|
|
346
|
+
Given the wizard renders under dir="rtl"
|
|
347
|
+
Then the header band's padding, the title row, and the content column mirror
|
|
348
|
+
Because Wizard uses only symmetric and logical spacing utilities
|
|
349
|
+
```
|
|
350
|
+
|
|
351
|
+
## Accessibility
|
|
352
|
+
|
|
353
|
+
Wizard is a layout scaffold: it renders no text and no interactive element of its
|
|
354
|
+
own, so nearly all of its accessibility contract belongs to the components the
|
|
355
|
+
consumer composes into it. What Wizard itself is responsible for is not getting in
|
|
356
|
+
their way.
|
|
357
|
+
|
|
358
|
+
- **No landmark of its own.** Neither `Wizard` nor `WizardHeader` sets a `role`.
|
|
359
|
+
`PageHeader`'s root is deliberately **not** reused for the header band —
|
|
360
|
+
it carries `role="banner"`, and a wizard's header band is not the page banner.
|
|
361
|
+
Composing `PageHeaderRow` / `PageHeaderTitle` / `PageHeaderActions` directly
|
|
362
|
+
keeps the landmark structure honest and avoids a second `banner` on a page that
|
|
363
|
+
already has one (e.g. inside `AppShell`).
|
|
364
|
+
- **Heading outline.** `PageHeaderTitle` is an `<h1>` — one per page, and the
|
|
365
|
+
only heading the wizard template contributes on its own. `SectionHeader`'s
|
|
366
|
+
`title` prop renders a `<p>`, not a heading, so a step's `Section` adds
|
|
367
|
+
nothing to the document outline: an `<h1>` alone is the whole outline. That's
|
|
368
|
+
fine for a single-section step, where the `<h1>` already names the flow. If a
|
|
369
|
+
step's body needs navigable structure — several `Section`s, or one a
|
|
370
|
+
screen-reader user should be able to jump to — `Section` offers an escape
|
|
371
|
+
hatch: pass a real heading (`h2`, to sit directly under the wizard's `<h1>`)
|
|
372
|
+
through `SectionHeader`'s `children` slot and omit `title` so the section
|
|
373
|
+
isn't titled twice; see
|
|
374
|
+
[`section/accessibility.md`](../section/accessibility.md) for the markup and
|
|
375
|
+
the styling you have to supply yourself. Wizard's own stories don't use that
|
|
376
|
+
escape hatch — the multi-`Section` story titles each section with `title`, so
|
|
377
|
+
those steps contribute no headings beyond the `<h1>`.
|
|
378
|
+
- **The subtitle is a plain `<p>`**, not a heading and not the title's accessible
|
|
379
|
+
description. If the flow needs it announced with the title, associate it
|
|
380
|
+
explicitly (`aria-describedby` on the relevant control), since proximity alone
|
|
381
|
+
conveys nothing to a screen reader.
|
|
382
|
+
- **Step progress** is announced by the composed `Stepper`, which owns that
|
|
383
|
+
contract (see the Stepper spec). A wizard that omits the stepper — as two- and
|
|
384
|
+
three-step flows may — leaves the user without a progress cue, so give those
|
|
385
|
+
flows a title or subtitle that makes the position obvious.
|
|
386
|
+
- **Navigation actions** are plain `Button`s the consumer supplies, so their
|
|
387
|
+
accessible names come from their own children. Keep them as real buttons in DOM
|
|
388
|
+
order — Cancel, then `Back` on middle steps only, then Next/CTA — matching the
|
|
389
|
+
per-step pairing in [`behavior.md`](./behavior.md), rather than reordering
|
|
390
|
+
visually. Because that pairing genuinely adds and removes `Back` between steps
|
|
391
|
+
(it is absent, not disabled, on the first and final steps), the action row's
|
|
392
|
+
composition changes as the flow advances. Wizard tracks no step index and moves
|
|
393
|
+
no focus, so the consumer owns the transition: after navigating, move focus
|
|
394
|
+
deliberately — to the new step's first focusable field, since (per the
|
|
395
|
+
heading-outline bullet above) a step's `Section` title is a `<p>` and
|
|
396
|
+
contributes no heading to land on by default — so it never lands on a
|
|
397
|
+
button that has just been removed or shifted position, and never silently
|
|
398
|
+
falls back to the document body.
|
|
399
|
+
- **Sticky header and focus.** The header band is `position: sticky`, so it can
|
|
400
|
+
overlay content scrolled under it. Give focusable content inside `WizardBody`
|
|
401
|
+
enough scroll margin that keyboard focus never lands underneath the band.
|
|
402
|
+
- **RTL.** Wizard uses only symmetric (`p-`) and logical spacing, so the whole
|
|
403
|
+
template mirrors under `dir="rtl"` with no per-part handling.
|
|
404
|
+
|
|
405
|
+
## Contrast
|
|
406
|
+
|
|
407
|
+
The header band pairs `--ui-background-surface-secondary` with the composed
|
|
408
|
+
parts' own on-surface text colors; the subtitle uses
|
|
409
|
+
`--ui-text-on-surface-secondary` (via `text-muted-foreground`). Both meet
|
|
410
|
+
contrast in light and dark. The band's bottom rule is
|
|
411
|
+
`--ui-border-on-surface-divider`, a decorative separator — the header/content
|
|
412
|
+
boundary is also conveyed structurally, not by that line alone.
|
package/dist/llms.txt
ADDED
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
# Acronis UI Kit for React — LLM Reference
|
|
2
|
+
|
|
3
|
+
> `@acronis-platform/ui-react` v4.0.0
|
|
4
|
+
|
|
5
|
+
Machine-readable component reference compiled from framework-agnostic specs.
|
|
6
|
+
Each entry links to a self-contained markdown file with props, behavior,
|
|
7
|
+
accessibility notes, and usage examples.
|
|
8
|
+
|
|
9
|
+
## How to reference in CLAUDE.md / project instructions
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
# Full index (broad overview):
|
|
13
|
+
@node_modules/@acronis-platform/ui-react/dist/llms.txt
|
|
14
|
+
|
|
15
|
+
# Single component (deep reference):
|
|
16
|
+
@node_modules/@acronis-platform/ui-react/dist/llms/button.md
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Actions
|
|
20
|
+
|
|
21
|
+
- [Button](./llms/button.md): Triggers an action or event when activated. Five visual styles (default, secondary, ghost, destructive, ai) in a single 32px-tall size.
|
|
22
|
+
- [ButtonGroup](./llms/button-group.md): A compact cluster of related icon-only actions sharing a single box, hairline-separated. Two container styles (outlined, inlined) around a variadic list of 32px-tall items.
|
|
23
|
+
- [ButtonIcon](./llms/button-icon.md): Icon-only button (32×32, 24px glyph) with idle, hover, active, and disabled states. Two variants share the same fill and icon colors: `ghost` (borderless) and `secondary` (a 1px container border). Use when an action is represented by an icon alone.
|
|
24
|
+
- [ButtonIconInput](./llms/button-icon-input.md): A smaller icon-only button (20×20, 16px glyph) meant to live inside an input's box (e.g. a clear or reveal affordance), as opposed to `ButtonIcon`'s standalone 32×32 sizing. `variant` (`normal` / `error`) mirrors the tone of the field it sits in.
|
|
25
|
+
- [ButtonIconMenu](./llms/button-icon-menu.md): The kebab ("more options") trigger: a 32×32 bordered icon-only button holding a fixed 16px ellipsis glyph, across idle, hover, open, disabled, and focus states. Opens a menu of actions where there is no room for a label.
|
|
26
|
+
- [ButtonMenu](./llms/button-menu.md): A button that opens a dropdown menu: a label followed by a chevron that points up while the menu is open. Two visual styles (primary, secondary) across idle, hover, open, and disabled states.
|
|
27
|
+
|
|
28
|
+
## Data display
|
|
29
|
+
|
|
30
|
+
- [AreaChart](./llms/area-chart.md): A typed area-chart composition over the shared `Chart` primitives. Takes `data` + `config` + a set of series `dataKeys` and renders a themed recharts `AreaChart` inside a `ChartContainer`, with tooltip and legend chrome. Two variant axes: `layout` (single / stacked areas) and `fill` (solid flat fill / vertical gradient); single vs multi area is driven by the number of `dataKeys`. Ported from the apps/demo `AreaChartPlayground`.
|
|
31
|
+
- [Avatar](./llms/avatar.md): A user or entity avatar — a circular badge showing a profile image, initials, or an icon. Eight color schemes; stack several with AvatarGroup for an overlapping row.
|
|
32
|
+
- [BarChart](./llms/bar-chart.md): A typed bar-chart composition over the shared `Chart` primitives. Takes `data` + `config` + a set of series `dataKeys` and renders a themed recharts `BarChart` inside a `ChartContainer`, with tooltip and legend chrome. Two variant axes: `orientation` (vertical / horizontal bars) and `layout` (grouped / stacked). Ported from the apps/demo `BarChartPlayground`.
|
|
33
|
+
- [CardFilter](./llms/card-filter.md): A compact stat/filter card: a caption label above a prominent value, with an optional leading icon. Three variants — `static` (presentational), `static-empty` (presentational placeholder with an em-dash), and `clickable` (an interactive filter that renders a button with hover / active / focus states).
|
|
34
|
+
- [CategoryBar](./llms/category-bar.md): A single horizontal bar split into proportional colored segments — one part-to-whole across a handful of categories in one row (onboarding stages, certification status, a pass/fail split). Each segment's width is its value over the sum of all values; segment colors are caller-supplied via `config`. A plain flex composition (not a recharts chart) with one CVA axis (`size`), an optional count/% legend, and per-segment hover tooltips. Design-pending v1 — no chart token tier exists yet.
|
|
35
|
+
- [Chart](./llms/chart.md): A theming layer over recharts — a `ChartContainer` that supplies series colors and recharts class overrides, plus tooltip and legend chrome (`ChartTooltipContent`, `ChartLegendContent`). The chart type (bar / line / area / pie / …) is composed from recharts primitives by the caller. Ported from the legacy shadcn-uikit `chart`.
|
|
36
|
+
- [ChartState](./llms/chart-state.md): A shared loading / empty / error placeholder for the chart types, rendered in place of the chart inside the same sized slot. A compact status block — a leading glyph over a centered label, with an optional retry action for the error state. The `empty` state draws the silhouette the design defines for each chart type (`variant`), plus an optional "Widget description" line; `loading` and `error` share one treatment. Distinct from `WidgetPlaceholder`, which is the composable skeleton for a widget that isn't a chart — see behavior.md.
|
|
37
|
+
- [ChartWidget](./llms/chart-widget.md): The dashboard card a chart sits in: a `Card` with the standard widget header (title, optional filter chip and the ⋯ actions menu) and an optional metric readout above the plot. Adds the one thing a `Card` doesn't know about — the body's loading / empty / error placeholder — and re-implements nothing else: its `header` is `CardHeaderProps`, spread. It declares no size: the grid sizes the card and the widget passes that height down, so a `size-full` chart fills whatever the header leaves. The per-type chart components stay card-less, so a chart is still usable outside a widget.
|
|
38
|
+
- [Chip](./llms/chip.md): A compact, interactive label for a selection, a removable token, or an inline action. The `removable` variant carries a trailing × button; `selectable` is a toggle that shows an active style when selected; `operational` is a plain action chip with a strong-link label. All three accept an optional leading icon.
|
|
39
|
+
- [ComposedChart](./llms/composed-chart.md): A typed composed (mixed) chart over the shared `Chart` primitives. Plots a `series` list over one shared category axis, where each entry picks its own render `type` (bar / line / area), inside a `ChartContainer` with tooltip and legend chrome. No variant axes — the mix is data-driven via `series[].type`. Series render in the caller's `series` order (later entries paint on top). Ported from the apps/demo `ComposedChartPlayground`.
|
|
40
|
+
- [ConfidenceCone](./llms/confidence-cone.md): A forecast confidence-cone over the shared `Chart` primitives: a solid line for the known/actual period, a dashed line for the forecast, and a shaded band (the "cone") between a lower and upper bound that typically widens with the horizon, visualizing growing uncertainty. Distinct from the conversion `FunnelChart`. Design-pending v1 (no `--ui-chart-*` palette, no `apps/demo` playground — built net-new).
|
|
41
|
+
- [DataTable](./llms/data-table.md): A data grid built on TanStack react-table v8, composed over the Table primitives — sorting, filtering (text + per-column), column visibility, row selection, pagination, optional row expansion (row-level or an in-cell expand trigger), column resizing, drag-to-reorder columns, and sticky (pinned) columns. Renders a built-in trailing action column (the column-settings cog in the header, a per-row overflow-actions trigger in each row) and per-header capability-hint tooltips, and navigates rows with a roving tabindex. Ships with companion parts (column header, toolbar, pagination, view options, expand trigger, bulk-actions bar). Also supports server-driven usage: rendering from an externally-built TanStack `table` instance, manual (server-driven) sorting, infinite-scroll pagination, and custom row/empty-state rendering. Ported from the legacy shadcn-uikit `data-table`.
|
|
42
|
+
- [DescriptionList](./llms/description-list.md): A key/value data list — rows of label → value, where the value can be plain text, a status (leading icon + value + a muted description), or action links. Composable, semantic `<dl>`. NOT backed by a shared design-system design: it is the pattern extracted from the "Service status" list in the product-specific Cyber-Compliance Figma file (hc8FRfvlHBqZwNYUsD0DaX), not from the shared ui-react file, so the `figma.node` below is a product mapping rather than a design-system source of truth. Whether to formalize this as a generic kit component is still an open decision.
|
|
43
|
+
- [Empty](./llms/empty.md): A centered empty-state placeholder shown when there is no data or content. A set of composable parts (icon, header, title, description, actions, links). Ported from the legacy shadcn-uikit `Empty`; themed by the shared semantic text tokens.
|
|
44
|
+
- [EmptyOverlay](./llms/empty-overlay.md): A full-bleed empty-state overlay — a colored icon badge over a centered title/description, on a fade-to-solid backdrop. Meant to sit over other content (e.g. a frozen/blurred widget preview); the developer sizes it (typically `absolute inset-0` over a positioned parent).
|
|
45
|
+
- [FilterCards](./llms/filter-cards.md): A horizontal row container (the Figma `FilterCards` component) that lays out a set of `CardFilter` items, stretching each to an equal share of the available width. Pure layout — it owns no visual styling of its own besides the inter-card gap. Figma's nested `ListCards` slot maps to `children`.
|
|
46
|
+
- [FilterChips](./llms/filter-chips.md): A wrapping row that summarises the filters currently applied to a data set (the Figma `FilterChips` component): one removable `Chip` per filter, closed by a ghost "Reset filters" action that clears them all at once. Pure layout — it owns no visual styling of its own besides the two gaps. Figma's nested `ListChips` slot maps to `FilterChipsList`'s children.
|
|
47
|
+
- [FunnelChart](./llms/funnel-chart.md): A typed funnel-chart composition over the shared `Chart` primitives. Plots a single series of stages (rows) as stacked, narrowing segments inside a `ChartContainer`, with a tooltip and on-chart stage labels (no legend — the inline labels name every stage). One variant axis: `lastShape` (the funnel narrows to a `triangle` point or ends `rectangle` flat). Ported from the apps/demo `FunnelChartPlayground`.
|
|
48
|
+
- [Histogram](./llms/histogram.md): A frequency histogram — bins a set of continuous samples (`values`) into equal-width ranges and plots the count of each as contiguous bars. Distinct from `BarChart`, which plots pre-categorized rows: the binning is the component's own job (a pure helper). Built on the shared `Chart` primitives; design-pending v1 (no `--ui-chart-*` palette yet, no `apps/demo` playground).
|
|
49
|
+
- [LineChart](./llms/line-chart.md): A typed line-chart composition over the shared `Chart` primitives. Takes `data` + `config` + a set of series `dataKeys` and renders a themed recharts `LineChart` inside a `ChartContainer`, with tooltip and legend chrome. Two variant axes: `curve` (linear / monotone / step interpolation) and `lineStyle` (solid / dashed stroke); single vs multi line is driven by the number of `dataKeys`. Ported from the apps/demo `ChartPlayground`.
|
|
50
|
+
- [Meter](./llms/meter.md): A labelled bar showing a scalar value within a known range — a fractional value / share (`role="meter"`, mirroring the HTML `<meter>` element), as opposed to `Progress` which tracks a task over time. One row: label + `value · %` over a proportional track bar, with a hover tooltip; designed to be stacked into a ranked breakdown (a "bar list"). Design-pending v1 (no `--ui-chart-*` palette; the fill color is caller-supplied per row).
|
|
51
|
+
- [Metric](./llms/metric.md): A presentational stats strip: an optional info-tinted icon badge + primary value + unit on the left, an optional caption on the right, an optional trend row (auto-composed from `trend` + `trendValue` as a `TrendIndicator`), optional supporting text, and an optional `children` body (a chart, Separator, insight line, …). No Card wrapper, no size or status axes — nest inside `ChartWidget` or a `Card` when card chrome is needed. It owns visual hierarchy and layout only; it never computes or formats the value or decides whether a change is good or bad. Design-pending v1.
|
|
52
|
+
- [PieChart](./llms/pie-chart.md): A typed pie/donut-chart composition over the shared `Chart` primitives. Takes `data` + `config` + a `dataKey` (slice value) and `nameKey` (slice label) and renders a themed recharts `PieChart` inside a `ChartContainer`, with tooltip and legend chrome. One variant axis: `shape` (filled pie / hollow-centre donut). Ported from the apps/demo `PieChartPlayground`.
|
|
53
|
+
- [RadarChart](./llms/radar-chart.md): A typed radar-chart composition over the shared `Chart` primitives (the first polar chart type). Plots a set of series `dataKeys` over one shared angular axis (`angleKey`) inside a `ChartContainer`, with a polar grid, tooltip, and legend. One variant axis: `gridType` (the web drawn as straight-edged `polygon` rings or smooth `circle` rings). Ported from the apps/demo `RadarChartPlayground`.
|
|
54
|
+
- [RadialBarChart](./llms/radial-bar-chart.md): A typed radial-bar-chart composition over the shared `Chart` primitives (a polar/radial type). Plots each data row as a concentric arc sized by `dataKey` and colored per `nameKey` — or, with `dataKeys`, one arc per metric — inside a `ChartContainer` with an optional background track, tooltip, and legend. No variant axes: the sweep (start/end angle), radii and centre are plain props. `valueDomain` scales the arcs against a known range, which is what turns a single value into a readable gauge; `segments` draws such a gauge's ring as notched pieces and `centerLabel` puts the reading in the hole. Ported from the apps/demo `RadialChartPlayground`.
|
|
55
|
+
- [SankeyChart](./llms/sankey-chart.md): A typed Sankey flow-diagram composition over the shared `Chart` primitives. Renders a graph of `nodes` + `links` where each link's width is proportional to its flow value, inside a `ChartContainer`, with token-themed node bars and link ribbons plus a tooltip. No axes or grid, and no variant axes; an optional count/% legend (`showLegend`) renders below the chart, and geometry (`nodePadding` / `nodeWidth` / `linkCurvature`) is plain props. Themed through custom node/link renderers (recharts' defaults paint one flat grey and have no token hooks). Built on recharts' `Sankey` primitive (no apps/demo playground existed).
|
|
56
|
+
- [ScatterChart](./llms/scatter-chart.md): A typed scatter-chart composition over the shared `Chart` primitives. Plots each `series[]` entry's points on numeric `xKey` / `yKey` axes inside a `ChartContainer`, with tooltip and legend chrome. Optionally maps a `zKey` to point size (a bubble chart). Scatter has no variant axes — its expressiveness comes from the data mapping, not a visual mode. Ported from the apps/demo `ScatterChartPlayground`.
|
|
57
|
+
- [Table](./llms/table.md): Displays rows and columns of data. A set of composable parts (header, body, footer, row, column header, cell, caption) with sortable column headers, a selected row state, and wrappable cells, plus two TanStack-independent companions — a pagination bar (TablePagination) and a show/hide-columns menu (TableViewOptions) — and two headless hooks (useSortState, useTableUrlState). Ported from the legacy shadcn-uikit `Table` and informed by the pre-release Table design; themed by the `--ui-table-*` token tier. The TanStack-backed data grid (`DataTable`) composes these primitives.
|
|
58
|
+
- [Tag](./llms/tag.md): A compact label that represents, categorizes, or highlights a piece of information — a status, attribute, or keyword. Six status variants across two sizes, with an optional leading icon.
|
|
59
|
+
- [Timeline](./llms/timeline.md): A presentational, chronological tree of events — an activity feed, audit log, or status history. `Timeline` + `Timeline.Item` render a semantic ordered list in which each row pairs an Avatar marker with a Card carrying the title, an optional tag, the timestamp, and a description; rows join their parent through an elbow and their next sibling through a vertical connector. Nesting is flat and explicit — a row declares its own `level` (1-3) — and the root reads those levels to place the connectors and, under `variant="tree"`, to give every row with descendants a disclosure control. It owns structure, connector geometry and branch collapsing only: it never sorts, groups, fetches, or interprets events, holds no tree model of its own, and ships no domain event types or icons. Not a temporal chart.
|
|
60
|
+
- [Timer](./llms/timer.md): An elapsed-time readout paired with a hairline-separated cluster of icon-only actions, in a single bordered 32px box. Displays a caller-formatted value; it does not tick.
|
|
61
|
+
- [Treemap](./llms/treemap.md): A typed treemap composition over the shared `Chart` primitives. Tiles a flat set of leaves into nested rectangles sized by `dataKey` and colored per `nameKey`, inside a `ChartContainer`, with one- or two-line on-cell labels, a tooltip and an opt-in legend. No axes or grid — and no variant axes; `aspectRatio` is a plain prop. Themed through a custom cell renderer (recharts' default has no token hooks). Ported from the apps/demo `TreemapChartPlayground`.
|
|
62
|
+
- [TrendIndicator](./llms/trend-indicator.md): A small presentational trend/delta indicator — a direction glyph, an already-formatted change value, and an optional comparison label. It separates `direction` (what happened mathematically) from `sentiment` (whether that is good or bad), so the kit never assumes up = good. Inline or compact badge, two sizes. Design-pending v1 (no Figma node yet).
|
|
63
|
+
- [WidgetPlaceholder](./llms/widget-placeholder.md): An empty-state placeholder for a dashboard widget — a bordered card with a header (icon + title), a centered illustration / message / action, and an optional footer. Ported from the legacy shadcn-uikit `WidgetPlaceholder`; composable parts, optionally interactive.
|
|
64
|
+
|
|
65
|
+
## Feedback
|
|
66
|
+
|
|
67
|
+
- [Alert](./llms/alert.md): An inline status banner: a neutral surface carrying its severity through a status-colored border and a status line down the leading edge, with a fixed status icon per severity, composable title / description / action parts, and an optional dismiss control.
|
|
68
|
+
- [Loading](./llms/loading.md): A composite loading indicator — a spinning ring plus an optional label — for four placement contexts: inline (flush in text flow), two card-like chips for a primary/secondary app surface, and a higher-contrast chip for busy/photo surfaces. Distinct from `Spinner` (the bare ring primitive it reuses for its icon): `Spinner` has no label or container and is unaffected by this addition.
|
|
69
|
+
- [Progress](./llms/progress.md): A horizontal bar showing the completion of a known-length task, or an indeterminate sliding bar when the length is unknown. Ported from the legacy shadcn-uikit `Progress`; wraps the Base UI Progress primitive.
|
|
70
|
+
- [ProgressCircle](./llms/progress-circle.md): A circular (radial) progress indicator — an SVG ring whose arc fills with the value and whose color tracks the level (danger / critical / warning / success), with an optional numeric or icon center. Built from the Cyber-Compliance "Compliance %" design; the sibling of the linear Progress. Design reconciliation against the Figma component master is pending.
|
|
71
|
+
- [Skeleton](./llms/skeleton.md): A pulsing placeholder box for loading states. Shape and size come from the caller's className. Ported from the legacy shadcn-uikit `skeleton`.
|
|
72
|
+
- [Spinner](./llms/spinner.md): An indeterminate loading indicator — a spinning ring in four sizes. Ported from the legacy shadcn-uikit `Spinner`; a CSS spinner (no primitive), colored by the shared brand token via currentColor. As of 0.58.0, deliberately NOT exported from `@acronis-platform/ui-react`'s public entry point — it is an internal primitive consumed by `Loading` (icon) and `Toast` (a small inline icon). Apps building a standalone loading state should use `Loading` instead.
|
|
73
|
+
- [Toast](./llms/toast.md): A transient notification in a corner stack: a neutral card carrying its severity through a status-colored border and a status line down the leading edge, with a fixed status icon per severity, an optional description, and optional action buttons. Triggered imperatively via the `toast(...)` API and rendered by a single `<Toaster>` region.
|
|
74
|
+
|
|
75
|
+
## Forms
|
|
76
|
+
|
|
77
|
+
- [Calendar](./llms/calendar.md): A day-grid built on react-day-picker: single / range / multiple date selection across one or more months side by side, with prev/next navigation at the outer edges of the month row. Design-pending v1 ported from ui-legacy — themed off the shared semantic tokens (no `--ui-calendar-*` tier yet).
|
|
78
|
+
- [CalendarPanel](./llms/calendar-panel.md): The Figma "Calendar" panel: a bordered, elevated day-picker panel built on react-day-picker and themed by the dedicated `--ui-calendar-*` token tier. A single `variant` prop selects one of the three selection modes, and each one changes the panel's structure — `single` is one month column with no footer, `multiple` adds a Cancel/Apply footer, and `range` shows two month columns side by side (divided by a vertical rule) sharing one footer. Months are navigated through two `InputSelect` dropdowns in each month's header; there are no prev/next chevrons. `variant` is a plain string union, not a `cva` axis.
|
|
79
|
+
- [Checkbox](./llms/checkbox.md): A control that lets users select or deselect an option. Supports checked, unchecked, and indeterminate states; used individually for a binary choice or in groups where any number of options may be selected.
|
|
80
|
+
- [Combobox](./llms/combobox.md): A searchable select built on Base UI's Combobox primitive — a typeable input that filters a list of items in a dropdown. Reuses the InputSelect token tier so it matches the non-searchable select. The legacy shadcn-uikit `combobox` was only a hardcoded Popover + cmdk demo; this is a real, reusable component.
|
|
81
|
+
- [DateRangePicker](./llms/date-range-picker.md): A range date field: an `InputDatePicker` trigger opens a popover with a dual-month range `CalendarPanel`, whose own Cancel/Apply footer commits or reverts the draft. Edits stay in a draft until Apply commits them (Cancel or dismissing reverts).
|
|
82
|
+
- [Field](./llms/field.md): A form-field wrapper that ties a control to its label, description, and error, built on Base UI's Field primitive so those associations (and the validity state) are wired automatically. Ships structural parts (fieldset, legend, group, content, separator) for composing and grouping fields. Ported from the legacy shadcn-uikit `field`.
|
|
83
|
+
- [Form](./llms/form.md): A native form element with consolidated validation, built on Base UI's Form. It collects values by each Field's name, runs the Fields' validation on submit (or per validationMode), surfaces server errors keyed by field name, and calls onFormSubmit with the values when every field is valid. Ported from the legacy shadcn-uikit `form` (which wrapped react-hook-form); this version drops that dependency and composes the ui-react Field directly.
|
|
84
|
+
- [InputDatePicker](./llms/input-date-picker.md): The date-field trigger: a button box that displays a formatted date (or a start–end range when `pickerType="dateRange"`) and a trailing calendar icon, with an optional label (and required marker) and an optional description or error message. Opens a consumer-owned calendar. Themed by the `--ui-input-date-picker-*` token tier.
|
|
85
|
+
- [InputOTP](./llms/input-otp.md): A bare row of single-character boxes for entering a one-time code. No label/description — like `Input`, field furniture is a future `Field` wrapper. Typing a digit advances focus to the next slot; Backspace on an empty slot clears and moves back; pasting a full code distributes it across the slots.
|
|
86
|
+
- [InputPassword](./llms/input-password.md): A single-line password field: an optional label (with an optional required marker), the value box with a built-in show/hide toggle, and an optional description or error message. Its own `--ui-input-password-*` token tier covers the box down to fill/border (unlike `InputText`, it doesn't build on the bare `Input` primitive).
|
|
87
|
+
- [InputSearch](./llms/input-search.md): A full search field: an optional label (with an optional required marker) above the search box. Builds on the bare `Search` box (leading magnifier, input, and clear button) and the `--ui-input-search-*` token tier.
|
|
88
|
+
- [InputSelect](./llms/input-select.md): The next-gen select field: an optional label (with a required marker), a trigger box showing the value / placeholder and a chevron, an optional description or error message, and a floating dropdown with an in-dropdown search, sections (groups), single or multiple selectable items, and loading / empty / error status. Composes Base UI `Select` and the `--ui-input-select-*` token tier.
|
|
89
|
+
- [InputText](./llms/input-text.md): A full single-line text field: an optional label (with an optional required marker), the text input box, an optional clear button, and an optional description or error message. Builds on the bare `Input` primitive and the `--ui-input-text-*` token tier.
|
|
90
|
+
- [InputTextArea](./llms/input-text-area.md): A full multiline text field: an optional label (with an optional required marker), a `<textarea>` box that grows with vertical resize, and an optional description or error message. For entering and editing longer free-text (notes, comments, descriptions). Themed by the `--ui-input-text-area-*` token tier.
|
|
91
|
+
- [NumberField](./llms/number-field.md): A numeric input with decrement / increment steppers, min/max/step, and scrub support. Built on Base UI's NumberField; the field box reuses the InputText token tier. Ported from the legacy shadcn-uikit `number-field`.
|
|
92
|
+
- [RadioGroup](./llms/radio.md): A group of mutually exclusive options where exactly one can be selected. Selecting an option deselects the previously selected one. Composed from a RadioGroup container and Radio items.
|
|
93
|
+
- [Select](./llms/select.md): A form control that displays the current selection and reveals a list of predefined options when activated. Composed from parts (trigger, value, content, item); supports single or multiple selection. An alias of the next-gen `InputSelect` family, themed with the `--ui-input-select-*` token tier.
|
|
94
|
+
- [Slider](./llms/slider.md): A slider for choosing a number (or a range, with two thumbs) within a min/max by dragging. Built on Base UI's Slider. Ported from the legacy shadcn-uikit `slider`.
|
|
95
|
+
- [Switch](./llms/switch.md): A binary on/off toggle. Wraps the Base UI Switch primitive; the change takes effect immediately (no separate submit).
|
|
96
|
+
- [ToggleGroup](./llms/toggle-group.md): A set of pressable toggle buttons (single or multiple selection) — plus a standalone Toggle. Built on Base UI's Toggle / ToggleGroup. Ported from the legacy shadcn-uikit `toggle-group`.
|
|
97
|
+
|
|
98
|
+
## Layout
|
|
99
|
+
|
|
100
|
+
- [Accordion](./llms/accordion.md): A vertical set of disclosure sections — each with a header trigger and a height-animating panel; single or multiple open at once. Built on Base UI's Accordion. Ported from the legacy shadcn-uikit `accordion`.
|
|
101
|
+
- [AccordionContainer](./llms/accordion-container.md): The shared disclosure primitive behind Card's and Section's `isCollapsable` variant. Built directly on Base UI's Collapsible — owns open state, the trigger button, chevron rotation, and panel animation — while imposing no visual styling beyond what the disclosure mechanic itself requires — the two exceptions are its trigger's chevron glyph color (the same neutral treatment Accordion's chevron uses) and, when `collapsible` is true, Root defaulting to `display: contents` so it stays transparent to the consumer's layout. Every other visual decision (header layout, spacing, background, borders) stays owned by the component composing it.
|
|
102
|
+
- [AppShellChat](./llms/app-shell-chat.md): A 3-section, horizontally resizable application scaffold: a sidebar rail (SidebarPrimary, optionally SidebarSecondary) beside a Content page column and a Chat panel. Content and Chat resize against each other by dragging Chat's start border; the sidebars resize Content only (Chat keeps its explicit pixel width). Chat is resize-only: dragging down to its floor width shows an icon-only rail, and dragging up can take it to full width (Content shrinks to 0) since the resize ceiling is measured from the actual available row space. The Chat slot is optional, so the same scaffold also serves an ordinary two-column console screen.
|
|
103
|
+
- [Card](./llms/card.md): A surface that groups related content and actions. A set of composable parts (header, content, footer) on a bordered, rounded container. The header carries the interactive surface: an optional drag handle, toggle switch, avatar, rename button, extras, end-aligned actions, and an optional collapse trigger. Collapsibility is composed by wrapping the header and content/footer in `AccordionContainer`.
|
|
104
|
+
- [CardSection](./llms/card-section.md): A band of content stacked inside a `Card`'s body, below `CardHeader`. Six variants pick the body shape — an arbitrary slot, a wrapping tag row, a title/description list, a flush table with row actions, or a nested `Card` on the primary or secondary surface. An optional 14px mini-header (distinct from `CardHeader`) carries a title, inline extras, and end-aligned actions; an optional bottom divider separates one section from the next.
|
|
105
|
+
- [CarouselDialog](./llms/carousel-dialog.md): The control row inside a `DialogFooterCarousel`: a `Back` button (hidden on the first slide), a dot slide indicator, and a `Next`/call-to-action button. Pure controls — no Embla import; the slide count/index/callbacks are threaded down from `DialogWelcome`, which owns the carousel engine. Deliberately NOT exported from `@acronis-platform/ui-react`'s public entry point — it is an internal primitive consumed only by `DialogFooterCarousel`. Apps building a welcome/onboarding carousel dialog should use `DialogWelcome` instead.
|
|
106
|
+
- [DialogFooterCarousel](./llms/dialog-footer-carousel.md): A bottom action bar for a multi-step (carousel) dialog: a `Back` button (hidden on the first slide), a dot slide indicator, and a `Next`/ call-to-action button. The `variant` (start / middle / end) tracks the active slide's position — see `DialogWelcome`, which owns the actual Embla carousel engine and drives this component's props.
|
|
107
|
+
- [DialogFooterDefault](./llms/dialog-footer-default.md): A bottom action bar (panel/dialog/sheet footer) — end-aligned actions plus an optional start slot: a truncated description, or a link. The Figma `variant` (default / withDescription / withLink) is structural, following from which slot is passed, not a separate prop.
|
|
108
|
+
- [FilterSearch](./llms/filter-search.md): A composable toolbar for data tables: arranges a search field, optional filters button, optional tenant/scope switcher, and trailing action buttons in a single horizontal row. Pure layout — no dedicated token tier; child components (Search, ButtonMenu, Select) bring their own tokens. `FilterSearchFilters` (the filter popover: trigger + form + Reset/Cancel/ Apply) is still a design-pending addition — no Figma node yet, unlike the FilterSearch node itself (see `figma:` below, which covers only the root toolbar layout). `FilterSearchAppliedFilters` (the removable-chip row + top-level "Reset filters") is the data-driven wrapper over `FilterChips`, which owns that row's design — see the FilterChips spec.
|
|
109
|
+
- [Grid](./llms/grid.md): A responsive CSS-grid layout primitive — lay children into a column count that steps down at smaller breakpoints, with a configurable gap. Ported 1:1 from the legacy shadcn-uikit `grid`.
|
|
110
|
+
- [PageContent](./llms/page-content.md): The page content region — the padded gutter for a page's body. A <div> meant to nest inside AppShellChatContentBody (so it doesn't duplicate the main landmark). Ported from the legacy shadcn-uikit `page-content`.
|
|
111
|
+
- [PageHeader](./llms/page-header.md): The page header region — a title row (title left, an optional edit icon-button, a tags slot, an actions slot) and an optional description row (text + an optional edit icon-button), capped at 512px. Sits at the top of a page's content; a breadcrumb is a separate sibling above it, not one of its parts. Mapped to the ui-react Figma "PageHeader" master component (node 2905-7678).
|
|
112
|
+
- [Resizable](./llms/resizable.md): A group of panels separated by draggable handles that let the user resize adjacent regions along one axis. Composable parts (panel group, panel, handle); the handle is a thin divider with an optional grab-bar grip and resizes its neighbouring panels on drag or arrow keys.
|
|
113
|
+
- [ScrollArea](./llms/scroll-area.md): A scrollable region with a custom overlay scrollbar built on the Base UI Scroll Area primitive. The bar floats over the content and reserves no layout space, so full-bleed content is never cropped by a scrollbar gutter, on every OS and browser. The bar is revealed on hover/scroll and hidden at rest. Ported from the legacy shadcn-uikit `ScrollArea`.
|
|
114
|
+
- [Section](./llms/section.md): A titled band that groups cards — or a table — on a page. Four content layouts pick the body shape: one full-width column, a 70/30 split, a three-column card grid, or a flush table that bleeds to the page edges. The header carries a title, optional description, an optional toggle switch, inline extras, and end-aligned actions; an optional bottom divider separates one band from the next. Collapsing is a composition with `AccordionContainer`, the same as `Card`.
|
|
115
|
+
- [Separator](./llms/separator.md): A thin rule that visually and semantically divides content. Built on the Base UI Separator primitive (sets the `separator` role + aria-orientation). Ported from the legacy shadcn-uikit `Separator`; uses the shared divider token.
|
|
116
|
+
- [Stack](./llms/stack.md): A flexbox layout primitive — lay children out in a row or column with configurable gap, alignment, justification, and wrapping. Ported 1:1 from the legacy shadcn-uikit `stack`.
|
|
117
|
+
- [Toolbar](./llms/toolbar.md): A horizontal action row — list actions, an optional overflow control (e.g. a ButtonMenu), and an optional trailing area (a status text, or a selection counter + action) — typically shown above/below a list or table when rows are selected or bulk actions are available. Pure layout — no dedicated token tier; every action is an existing Button/ButtonMenu instance that brings its own tokens. Distinct from FilterSearch/DataTableToolbar (search + filter toolbars): Toolbar is a bulk-action/selection bar, not a filter bar.
|
|
118
|
+
- [Wizard](./llms/wizard.md): The full-page wizard page template — a sticky header band (breadcrumb, title row with the flow's Cancel/Back/Next actions, an optional subtitle, an optional stepper) above a content column capped at 1024px. Layout and slots only: it owns no step index, no navigation, and no button wiring — which actions show on which step is the consuming UI block's decision, the same boundary PageHeader draws around its own actions slot. Mapped to the ui-react Figma "RegionMain" frame (node 10511-61418).
|
|
119
|
+
|
|
120
|
+
## Navigation
|
|
121
|
+
|
|
122
|
+
- [Breadcrumb](./llms/breadcrumb.md): Displays a hierarchical navigation path showing the user's current location. A set of composable parts (list, item, link, current page, separator, ellipsis) — the last item is a non-link current page; chevron separators sit between items.
|
|
123
|
+
- [Link](./llms/link.md): An inline text link (semibold) that underlines on hover, with an optional trailing external-link icon. Navigates to an href or composes a router link. Themed by the `--ui-link-*` token tier.
|
|
124
|
+
- [Pagination](./llms/pagination.md): Navigation for paged content — previous / next controls, numbered page links with a current-page marker, and an ellipsis for skipped ranges. Markup-only (no Base UI primitive). Ported from the legacy shadcn-uikit `pagination`.
|
|
125
|
+
- [SidebarPrimary](./llms/sidebar-primary.md): The app-level navigation rail. A set of composable parts (header, content, footer, sections, menu, menu items, extras) that reflows between an expanded (256px) and a collapsed (48px icon rail) state. Menu items carry a `selected` variant for the current route; trailing extras add a shortcut, external-link, or tag affordance. The product logo is consumer-slotted into the header.
|
|
126
|
+
- [SidebarSecondary](./llms/sidebar-secondary.md): The contextual second-level navigation panel that sits beside the primary rail. A set of composable parts (header, content, sections with optional labels, menu, fixed and expandable menu items, level-2 sub-items, extras) that reflows between an expanded (256px) panel and a collapsed (48px) rail. In collapsed mode the section list is replaced by a vertical breadcrumb (parent → separator → current page). Expandable rows disclose a level-2 child list via Base UI Collapsible.
|
|
127
|
+
- [Stepper](./llms/stepper.md): The root of a step sequence. It renders the sequence two ways and lets CSS pick one: on wide viewports a start-aligned, wrapping row of `StepperItem` children; on narrow ones a two-line text summary — "Step 3 of 5: <current step>" and "Next: <next step>" — with no items at all. The switch is a real viewport media query (Tailwind's `lg:`, `min-width: 1024px`), not a JS measurement, so both subtrees are always in the DOM and only one is ever displayed. It owns that layout switch and the summary copy only: the steps, their order, which one is current, and all navigation belong to the application.
|
|
128
|
+
- [StepperItem](./llms/stepper-item.md): One step in a stepper — a consumer-composed avatar marker followed by the step name. `variant` is the step's structural role in the sequence (`current`, `completed`, `future`) and drives the container background, border, and label color; `state` is the interaction look and only changes anything on a completed step. The component owns the container and the label only: the marker is supplied and styled entirely by the caller, and the row layout, the step sequence, its ordering, and navigation belong to `Stepper` and the application.
|
|
129
|
+
- [Tabs](./llms/tabs.md): Switches between related panels of content within the same context. A bordered segmented-control tab group (list, trigger, content) built on the Base UI Tabs primitive. Ported from the legacy shadcn-uikit `Tabs`; themed by the shared semantic tokens (no `--ui-tabs-*` tier yet).
|
|
130
|
+
|
|
131
|
+
## Overlay
|
|
132
|
+
|
|
133
|
+
- [DialogWelcome](./llms/dialog-welcome.md): An onboarding dialog with two layouts: `carousel` (a multi-slide feature tour driven by a real Embla carousel engine, with a `DialogFooterCarousel` footer) and `single` (one image/title/description body with a primary action and a `Close` link). Built from scratch — does not reuse any existing carousel implementation in this repo.
|
|
134
|
+
- [Tooltip](./llms/tooltip.md): A contextual hint that appears on hover or focus of its trigger and disappears when the interaction ends. Used for supplementary information — not for critical content or actions.
|
|
135
|
+
|
|
136
|
+
## Overlays
|
|
137
|
+
|
|
138
|
+
- [Dialog](./llms/dialog.md): A higher-level "recipe" dialog built on top of the DialogRoot primitive parts. A single `variant` prop selects one of seven canned use-cases (default, rename, save changes, reset password, discard changes, accept, read-only) — each with its own title, body copy and footer buttons — plus a legacy `wide` escape hatch (no Figma preset, free-form footer via the `footer` prop) kept for backward compatibility with pre-Figma call sites. `children` overrides the body slot and `hasLoading` shows a `Loading` overlay. Colors, typography, and container/header/footer geometry resolve to the `--ui-dialog-*`/`--ui-footer-*` token tier (see tokens.yaml). In Figma the matching component set is named "DialogDefault"; the code-facing name is `Dialog`.
|
|
139
|
+
- [DialogRoot](./llms/dialog-root.md): A modal overlay that interrupts the user to show focused content or request a decision. A set of composable parts (trigger, overlay, content, header, title, close, body, description, footer) built on the Base UI Dialog primitive. Initial version ported from the legacy shadcn-uikit `Dialog`; design reconciliation against Figma is pending. Internal-only as of the Dialog (recipe) merge — not exported from the package root. `Dialog` (sourceDir: dialog, see the `dialog` spec) is the sole public entry point; it composes these parts internally.
|
|
140
|
+
- [DropdownMenu](./llms/dropdown-menu.md): A menu of actions anchored to a trigger (typically a `ButtonMenu`), opened on demand. Composable parts — trigger, content, group (section), item, shortcut, submenu — built on the Base UI Menu primitive. Themed by the `--ui-button-menu-dropdown-*` token tier from @acronis-platform/tokens-pd.
|
|
141
|
+
- [Popover](./llms/popover.md): A floating panel anchored to a trigger, shown on demand for secondary content or quick actions. Built on the Base UI Popover primitive (positioning, focus management, outside-press / Esc dismissal). Ported from the legacy shadcn-uikit `Popover`; container chrome themed by the `--ui-popover-*` tier, with optional `PopoverBody`/`PopoverFooter` parts for the body-rhythm and default action-row recipe shown in Figma.
|
|
142
|
+
- [Sheet](./llms/sheet.md): A modal side panel anchored to a screen edge — for showing or acting on detailed information without leaving the page. Composable parts (trigger, overlay, content, header, title, close, body, description, footer) on the Base UI Dialog primitive, with a slide transition. Was `Details` in the Vue kit (re-exported under `Details*` aliases). Initial version ported from the legacy shadcn-uikit `Sheet`; design reconciliation against Figma (Cyber-Compliance node 3442-31542) is pending.
|