@acronis-platform/ui-react 2.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.
Files changed (243) hide show
  1. package/dist/components/ui/accordion-container/accordion-container.js +144 -0
  2. package/dist/components/ui/accordion-container/accordion-container.js.map +1 -0
  3. package/dist/components/ui/app-shell-chat/app-shell-chat.js.map +1 -1
  4. package/dist/components/ui/area-chart/area-chart.js +141 -139
  5. package/dist/components/ui/area-chart/area-chart.js.map +1 -1
  6. package/dist/components/ui/avatar/avatar.js +33 -22
  7. package/dist/components/ui/avatar/avatar.js.map +1 -1
  8. package/dist/components/ui/bar-chart/bar-chart.js +295 -293
  9. package/dist/components/ui/bar-chart/bar-chart.js.map +1 -1
  10. package/dist/components/ui/card/card.js +150 -74
  11. package/dist/components/ui/card/card.js.map +1 -1
  12. package/dist/components/ui/card-section/card-section.js +111 -0
  13. package/dist/components/ui/card-section/card-section.js.map +1 -0
  14. package/dist/components/ui/category-bar/category-bar.js +109 -93
  15. package/dist/components/ui/category-bar/category-bar.js.map +1 -1
  16. package/dist/components/ui/chart/chart-palette.js +113 -0
  17. package/dist/components/ui/chart/chart-palette.js.map +1 -0
  18. package/dist/components/ui/chart/chart.js +176 -129
  19. package/dist/components/ui/chart/chart.js.map +1 -1
  20. package/dist/components/ui/chart-state/chart-state-illustrations.js +310 -0
  21. package/dist/components/ui/chart-state/chart-state-illustrations.js.map +1 -0
  22. package/dist/components/ui/chart-state/chart-state.js +48 -34
  23. package/dist/components/ui/chart-state/chart-state.js.map +1 -1
  24. package/dist/components/ui/chart-widget/chart-widget.js +87 -0
  25. package/dist/components/ui/chart-widget/chart-widget.js.map +1 -0
  26. package/dist/components/ui/composed-chart/composed-chart.js +117 -115
  27. package/dist/components/ui/composed-chart/composed-chart.js.map +1 -1
  28. package/dist/components/ui/confidence-cone/confidence-cone.js +166 -158
  29. package/dist/components/ui/confidence-cone/confidence-cone.js.map +1 -1
  30. package/dist/components/ui/data-table/data-table.js +4 -2
  31. package/dist/components/ui/data-table/data-table.js.map +1 -1
  32. package/dist/components/ui/empty-overlay/empty-overlay.js +49 -0
  33. package/dist/components/ui/empty-overlay/empty-overlay.js.map +1 -0
  34. package/dist/components/ui/funnel-chart/funnel-chart.js +162 -161
  35. package/dist/components/ui/funnel-chart/funnel-chart.js.map +1 -1
  36. package/dist/components/ui/histogram/histogram.js +94 -92
  37. package/dist/components/ui/histogram/histogram.js.map +1 -1
  38. package/dist/components/ui/input/input.js.map +1 -1
  39. package/dist/components/ui/label/label.js +2 -9
  40. package/dist/components/ui/label/label.js.map +1 -1
  41. package/dist/components/ui/line-chart/line-chart.js +143 -141
  42. package/dist/components/ui/line-chart/line-chart.js.map +1 -1
  43. package/dist/components/ui/metric/metric.js +74 -185
  44. package/dist/components/ui/metric/metric.js.map +1 -1
  45. package/dist/components/ui/page-content/page-content.js.map +1 -1
  46. package/dist/components/ui/pie-chart/pie-chart.js +201 -195
  47. package/dist/components/ui/pie-chart/pie-chart.js.map +1 -1
  48. package/dist/components/ui/radar-chart/radar-chart.js +133 -131
  49. package/dist/components/ui/radar-chart/radar-chart.js.map +1 -1
  50. package/dist/components/ui/radial-bar-chart/radial-bar-chart.js +297 -265
  51. package/dist/components/ui/radial-bar-chart/radial-bar-chart.js.map +1 -1
  52. package/dist/components/ui/sankey-chart/sankey-chart.js +123 -101
  53. package/dist/components/ui/sankey-chart/sankey-chart.js.map +1 -1
  54. package/dist/components/ui/scatter-chart/scatter-chart.js +76 -74
  55. package/dist/components/ui/scatter-chart/scatter-chart.js.map +1 -1
  56. package/dist/components/ui/section/section.js +157 -31
  57. package/dist/components/ui/section/section.js.map +1 -1
  58. package/dist/components/ui/stepper/stepper.js +24 -24
  59. package/dist/components/ui/stepper/stepper.js.map +1 -1
  60. package/dist/components/ui/stepper-item/stepper-item.js +43 -24
  61. package/dist/components/ui/stepper-item/stepper-item.js.map +1 -1
  62. package/dist/components/ui/table/table.js +27 -27
  63. package/dist/components/ui/table/table.js.map +1 -1
  64. package/dist/components/ui/treemap/treemap.js +133 -124
  65. package/dist/components/ui/treemap/treemap.js.map +1 -1
  66. package/dist/components/ui/trend-indicator/trend-indicator.js +34 -69
  67. package/dist/components/ui/trend-indicator/trend-indicator.js.map +1 -1
  68. package/dist/components/ui/wizard/wizard.js +59 -0
  69. package/dist/components/ui/wizard/wizard.js.map +1 -0
  70. package/dist/hooks/use-wizard.js +75 -0
  71. package/dist/hooks/use-wizard.js.map +1 -0
  72. package/dist/index.js +540 -525
  73. package/dist/index.js.map +1 -1
  74. package/dist/llms/accordion-container.md +181 -0
  75. package/dist/llms/accordion.md +124 -0
  76. package/dist/llms/alert.md +225 -0
  77. package/dist/llms/app-shell-chat.md +415 -0
  78. package/dist/llms/area-chart.md +355 -0
  79. package/dist/llms/avatar.md +208 -0
  80. package/dist/llms/bar-chart.md +406 -0
  81. package/dist/llms/breadcrumb.md +326 -0
  82. package/dist/llms/button-group.md +298 -0
  83. package/dist/llms/button-icon-input.md +142 -0
  84. package/dist/llms/button-icon-menu.md +209 -0
  85. package/dist/llms/button-icon.md +128 -0
  86. package/dist/llms/button-menu.md +172 -0
  87. package/dist/llms/button.md +185 -0
  88. package/dist/llms/calendar-panel.md +733 -0
  89. package/dist/llms/calendar.md +188 -0
  90. package/dist/llms/card-filter.md +214 -0
  91. package/dist/llms/card-section.md +293 -0
  92. package/dist/llms/card.md +447 -0
  93. package/dist/llms/carousel-dialog.md +156 -0
  94. package/dist/llms/category-bar.md +193 -0
  95. package/dist/llms/chart-state.md +190 -0
  96. package/dist/llms/chart-widget.md +209 -0
  97. package/dist/llms/chart.md +182 -0
  98. package/dist/llms/checkbox.md +257 -0
  99. package/dist/llms/chip.md +195 -0
  100. package/dist/llms/combobox.md +164 -0
  101. package/dist/llms/composed-chart.md +508 -0
  102. package/dist/llms/confidence-cone.md +277 -0
  103. package/dist/llms/data-table.md +474 -0
  104. package/dist/llms/date-range-picker.md +272 -0
  105. package/dist/llms/description-list.md +131 -0
  106. package/dist/llms/dialog-footer-carousel.md +147 -0
  107. package/dist/llms/dialog-footer-default.md +142 -0
  108. package/dist/llms/dialog-root.md +246 -0
  109. package/dist/llms/dialog-welcome.md +223 -0
  110. package/dist/llms/dialog.md +403 -0
  111. package/dist/llms/dropdown-menu.md +193 -0
  112. package/dist/llms/empty-overlay.md +146 -0
  113. package/dist/llms/empty.md +156 -0
  114. package/dist/llms/field.md +185 -0
  115. package/dist/llms/filter-cards.md +157 -0
  116. package/dist/llms/filter-chips.md +323 -0
  117. package/dist/llms/filter-search.md +512 -0
  118. package/dist/llms/form.md +154 -0
  119. package/dist/llms/funnel-chart.md +333 -0
  120. package/dist/llms/grid.md +80 -0
  121. package/dist/llms/histogram.md +190 -0
  122. package/dist/llms/input-date-picker.md +203 -0
  123. package/dist/llms/input-otp.md +173 -0
  124. package/dist/llms/input-password.md +197 -0
  125. package/dist/llms/input-search.md +170 -0
  126. package/dist/llms/input-select.md +278 -0
  127. package/dist/llms/input-text-area.md +271 -0
  128. package/dist/llms/input-text.md +192 -0
  129. package/dist/llms/line-chart.md +369 -0
  130. package/dist/llms/link.md +209 -0
  131. package/dist/llms/loading.md +130 -0
  132. package/dist/llms/meter.md +177 -0
  133. package/dist/llms/metric.md +204 -0
  134. package/dist/llms/number-field.md +122 -0
  135. package/dist/llms/page-content.md +69 -0
  136. package/dist/llms/page-header.md +182 -0
  137. package/dist/llms/pagination.md +133 -0
  138. package/dist/llms/pie-chart.md +307 -0
  139. package/dist/llms/popover.md +252 -0
  140. package/dist/llms/progress-circle.md +126 -0
  141. package/dist/llms/progress.md +111 -0
  142. package/dist/llms/radar-chart.md +316 -0
  143. package/dist/llms/radial-bar-chart.md +319 -0
  144. package/dist/llms/radio.md +255 -0
  145. package/dist/llms/resizable.md +195 -0
  146. package/dist/llms/sankey-chart.md +208 -0
  147. package/dist/llms/scatter-chart.md +239 -0
  148. package/dist/llms/scroll-area.md +183 -0
  149. package/dist/llms/section.md +401 -0
  150. package/dist/llms/select.md +210 -0
  151. package/dist/llms/separator.md +87 -0
  152. package/dist/llms/sheet.md +202 -0
  153. package/dist/llms/sidebar-primary.md +360 -0
  154. package/dist/llms/sidebar-secondary.md +417 -0
  155. package/dist/llms/skeleton.md +81 -0
  156. package/dist/llms/slider.md +97 -0
  157. package/dist/llms/spinner.md +100 -0
  158. package/dist/llms/stack.md +80 -0
  159. package/dist/llms/stepper-item.md +309 -0
  160. package/dist/llms/stepper.md +251 -0
  161. package/dist/llms/switch.md +140 -0
  162. package/dist/llms/table.md +436 -0
  163. package/dist/llms/tabs.md +197 -0
  164. package/dist/llms/tag.md +139 -0
  165. package/dist/llms/timeline.md +361 -0
  166. package/dist/llms/timer.md +259 -0
  167. package/dist/llms/toast.md +241 -0
  168. package/dist/llms/toggle-group.md +121 -0
  169. package/dist/llms/toolbar.md +453 -0
  170. package/dist/llms/tooltip.md +164 -0
  171. package/dist/llms/treemap.md +254 -0
  172. package/dist/llms/trend-indicator.md +132 -0
  173. package/dist/llms/widget-placeholder.md +169 -0
  174. package/dist/llms/wizard.md +412 -0
  175. package/dist/llms.txt +142 -0
  176. package/dist/react.js +540 -525
  177. package/dist/react.js.map +1 -1
  178. package/dist/src/components/ui/accordion-container/accordion-container.d.ts +44 -0
  179. package/dist/src/components/ui/accordion-container/index.d.ts +1 -0
  180. package/dist/src/components/ui/area-chart/area-chart.d.ts +9 -4
  181. package/dist/src/components/ui/avatar/avatar.d.ts +27 -8
  182. package/dist/src/components/ui/bar-chart/bar-chart.d.ts +9 -4
  183. package/dist/src/components/ui/button/button.d.ts +1 -1
  184. package/dist/src/components/ui/card/card.d.ts +69 -8
  185. package/dist/src/components/ui/card/index.d.ts +1 -1
  186. package/dist/src/components/ui/card-section/card-section.d.ts +50 -0
  187. package/dist/src/components/ui/card-section/index.d.ts +1 -0
  188. package/dist/src/components/ui/category-bar/category-bar.d.ts +10 -4
  189. package/dist/src/components/ui/chart/__stories__/palette-control.d.ts +48 -0
  190. package/dist/src/components/ui/chart/__tests__/chart-palette.test.d.ts +1 -0
  191. package/dist/src/components/ui/chart/chart-palette.d.ts +128 -0
  192. package/dist/src/components/ui/chart/chart.d.ts +66 -15
  193. package/dist/src/components/ui/chart/index.d.ts +4 -2
  194. package/dist/src/components/ui/chart-state/chart-state-illustrations.d.ts +6 -0
  195. package/dist/src/components/ui/chart-state/chart-state.d.ts +13 -2
  196. package/dist/src/components/ui/chart-state/index.d.ts +1 -0
  197. package/dist/src/components/ui/chart-widget/chart-widget.d.ts +64 -0
  198. package/dist/src/components/ui/chart-widget/index.d.ts +1 -0
  199. package/dist/src/components/ui/composed-chart/composed-chart.d.ts +12 -7
  200. package/dist/src/components/ui/confidence-cone/confidence-cone.d.ts +10 -5
  201. package/dist/src/components/ui/dialog/dialog.d.ts +1 -1
  202. package/dist/src/components/ui/empty-overlay/empty-overlay.d.ts +20 -0
  203. package/dist/src/components/ui/empty-overlay/index.d.ts +2 -0
  204. package/dist/src/components/ui/funnel-chart/funnel-chart.d.ts +11 -5
  205. package/dist/src/components/ui/grid/grid.d.ts +1 -1
  206. package/dist/src/components/ui/histogram/histogram.d.ts +10 -4
  207. package/dist/src/components/ui/label/index.d.ts +1 -1
  208. package/dist/src/components/ui/label/label.d.ts +1 -5
  209. package/dist/src/components/ui/line-chart/line-chart.d.ts +9 -4
  210. package/dist/src/components/ui/metric/metric.d.ts +13 -14
  211. package/dist/src/components/ui/pie-chart/pie-chart.d.ts +17 -8
  212. package/dist/src/components/ui/radar-chart/radar-chart.d.ts +10 -5
  213. package/dist/src/components/ui/radial-bar-chart/radial-bar-chart.d.ts +17 -6
  214. package/dist/src/components/ui/sankey-chart/sankey-chart.d.ts +10 -5
  215. package/dist/src/components/ui/scatter-chart/scatter-chart.d.ts +10 -5
  216. package/dist/src/components/ui/section/index.d.ts +1 -1
  217. package/dist/src/components/ui/section/section.d.ts +75 -6
  218. package/dist/src/components/ui/sheet/sheet.d.ts +1 -1
  219. package/dist/src/components/ui/stack/stack.d.ts +1 -1
  220. package/dist/src/components/ui/stepper-item/stepper-item.d.ts +6 -5
  221. package/dist/src/components/ui/tag/tag.d.ts +1 -1
  222. package/dist/src/components/ui/treemap/treemap.d.ts +11 -5
  223. package/dist/src/components/ui/trend-indicator/trend-indicator.d.ts +3 -7
  224. package/dist/src/components/ui/wizard/index.d.ts +1 -0
  225. package/dist/src/components/ui/wizard/wizard.d.ts +6 -0
  226. package/dist/src/hooks/index.d.ts +1 -0
  227. package/dist/src/hooks/use-wizard.d.ts +80 -0
  228. package/dist/src/index.d.ts +5 -3
  229. package/dist/ui-react.css +1 -1
  230. package/package.json +12 -6
  231. package/dist/components/ui/app-shell/app-shell.js +0 -75
  232. package/dist/components/ui/app-shell/app-shell.js.map +0 -1
  233. package/dist/components/ui/auth-layout/auth-layout.js +0 -56
  234. package/dist/components/ui/auth-layout/auth-layout.js.map +0 -1
  235. package/dist/components/ui/collapsible/collapsible.js +0 -22
  236. package/dist/components/ui/collapsible/collapsible.js.map +0 -1
  237. package/dist/src/components/ui/app-shell/app-shell.d.ts +0 -8
  238. package/dist/src/components/ui/app-shell/index.d.ts +0 -1
  239. package/dist/src/components/ui/auth-layout/auth-layout.d.ts +0 -6
  240. package/dist/src/components/ui/auth-layout/index.d.ts +0 -1
  241. package/dist/src/components/ui/collapsible/collapsible.d.ts +0 -5
  242. package/dist/src/components/ui/collapsible/index.d.ts +0 -1
  243. 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.