@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,69 @@
1
+ # PageContent
2
+
3
+ > 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`.
4
+
5
+ **Status:** draft · **Category:** layout · **Since:** v0.52.0
6
+
7
+ ## Import
8
+
9
+ ```tsx
10
+ import { PageContent } from '@acronis-platform/ui-react'
11
+ ```
12
+
13
+ ## Quick example
14
+
15
+ ```tsx
16
+ <AppShellChatContentBody><PageContent>{children}</PageContent></AppShellChatContentBody>
17
+ ```
18
+
19
+ The page content region — the padded gutter for a page's body. A `<div>` meant to
20
+ nest inside `AppShellChatContentBody` (so it doesn't duplicate the `main` landmark).
21
+
22
+ > Design-pending v1, ported from the legacy shadcn-uikit `page-content`.
23
+
24
+ ## When to use
25
+
26
+ - Wrapping a page's body inside `AppShellChatContentBody` to get the standard page padding.
27
+
28
+ ## When not to use
29
+
30
+ - As the scroll container / main landmark — that's `AppShellChatContentBody`.
31
+
32
+ ## Parts
33
+
34
+ `PageContent` is a single component.
35
+
36
+ ## Example
37
+
38
+ ```tsx
39
+ import {
40
+ AppShellChatContentBody,
41
+ PageContent,
42
+ PageHeader,
43
+ } from '@acronis-platform/ui-react';
44
+
45
+ <AppShellChatContentBody>
46
+ <PageContent>
47
+ <PageHeader>…</PageHeader>
48
+ {children}
49
+ </PageContent>
50
+ </AppShellChatContentBody>;
51
+ ```
52
+
53
+ ## Behavior
54
+
55
+ ```gherkin
56
+ Scenario: Padded body region
57
+ Given a PageContent inside AppShellChatContentBody
58
+ Then the page body renders with the standard page padding and fills the area
59
+ ```
60
+
61
+ ## Accessibility
62
+
63
+ PageContent is a `<div>`, not a landmark — it nests inside `AppShellChatContentBody` (the
64
+ `main` landmark) so a page has exactly one `main`. If you use PageContent without
65
+ App Shell, wrap it in your own `<main>`.
66
+
67
+ ## Contrast
68
+
69
+ No color of its own; content carries its own colors.
@@ -0,0 +1,182 @@
1
+ # PageHeader
2
+
3
+ > 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).
4
+
5
+ **Status:** ready · **Category:** layout · **Since:** v0.52.0
6
+
7
+ ## Import
8
+
9
+ ```tsx
10
+ import { PageHeader, PageHeaderRow, PageHeaderTitle, PageHeaderTags, PageHeaderActions, PageHeaderDescriptionRow, PageHeaderDescription } from '@acronis-platform/ui-react'
11
+ ```
12
+
13
+ ## Quick example
14
+
15
+ ```tsx
16
+ <PageHeader>
17
+ <PageHeaderRow>
18
+ <PageHeaderTitle>Reports</PageHeaderTitle>
19
+ <PageHeaderTags><Tag variant="info">Customer</Tag></PageHeaderTags>
20
+ <PageHeaderActions><Button>New</Button></PageHeaderActions>
21
+ </PageHeaderRow>
22
+ <PageHeaderDescriptionRow>
23
+ <PageHeaderDescription>All scheduled reports.</PageHeaderDescription>
24
+ </PageHeaderDescriptionRow>
25
+ </PageHeader>
26
+ ```
27
+
28
+ The page header region — a title row (title left, an optional edit icon-button,
29
+ a tags slot, an actions slot) and an optional description row, capped at
30
+ 512px. Mapped to the ui-react Figma "PageHeader" master component (node
31
+ `2905-7678`).
32
+
33
+ ## When to use
34
+
35
+ - The top of a page's content area, under the App Shell header.
36
+
37
+ ## When not to use
38
+
39
+ - The app-wide top bar — that's `AppShellChatContentHeader` (global search +
40
+ account).
41
+ - A breadcrumb trail — that's a separate `Breadcrumb` rendered as a sibling
42
+ above PageHeader, not one of its parts.
43
+
44
+ ## Parts
45
+
46
+ | Export | Element | Purpose |
47
+ | -------------------------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- |
48
+ | `PageHeader` | `div` | The banner region. |
49
+ | `PageHeaderRow` | `div` | Title row: title, optional edit button, tags, actions. |
50
+ | `PageHeaderTitle` | `h1` | The page title. |
51
+ | `PageHeaderTags` | `div` | Optional tags slot (e.g. `Tag` chips). Collapses to the first tag + a "+#" tag (hover tooltip lists the hidden labels) when the full set doesn't fit. |
52
+ | `PageHeaderActions` | `div` | Trailing action buttons. Secondary-variant buttons collapse under a "More" `ButtonIcon` dropdown when the full set doesn't fit; primary buttons never collapse. |
53
+ | `PageHeaderDescriptionRow` | `div` | Optional description row (max 512px). |
54
+ | `PageHeaderDescription` | `p` | Muted supporting text. |
55
+
56
+ ## Example
57
+
58
+ ```tsx
59
+ <PageHeader>
60
+ <PageHeaderRow>
61
+ <PageHeaderTitle>Reports</PageHeaderTitle>
62
+ <PageHeaderTags>
63
+ <Tag variant="info">Customer</Tag>
64
+ </PageHeaderTags>
65
+ <PageHeaderActions>
66
+ <Button>New report</Button>
67
+ </PageHeaderActions>
68
+ </PageHeaderRow>
69
+ <PageHeaderDescriptionRow>
70
+ <PageHeaderDescription>All scheduled reports.</PageHeaderDescription>
71
+ </PageHeaderDescriptionRow>
72
+ </PageHeader>
73
+ ```
74
+
75
+ ### Editable title/description (full-page wizards)
76
+
77
+ ```tsx
78
+ <PageHeaderRow>
79
+ <PageHeaderTitle>Untitled dashboard</PageHeaderTitle>
80
+ <ButtonIcon variant="secondary" aria-label="Edit title">
81
+ <PencilIcon size={16} />
82
+ </ButtonIcon>
83
+ </PageHeaderRow>
84
+ ```
85
+
86
+ ### With a breadcrumb
87
+
88
+ ```tsx
89
+ <div className="flex flex-col gap-2">
90
+ <Breadcrumb>{/* ... */}</Breadcrumb>
91
+ <PageHeader>{/* ... */}</PageHeader>
92
+ </div>
93
+ ```
94
+
95
+ ## Behavior
96
+
97
+ ```gherkin
98
+ Scenario: Title + actions
99
+ Given a PageHeader with a PageHeaderRow of a title and actions
100
+ Then the title sits at the left and the actions at the right edge
101
+ ```
102
+
103
+ ```gherkin
104
+ Scenario: Tags share the row with actions
105
+ Given a PageHeaderRow with a title, a PageHeaderTags slot, and a PageHeaderActions slot
106
+ Then tags sit next to the title and actions stay flush right, even when tags are empty
107
+ ```
108
+
109
+ ```gherkin
110
+ Scenario: Description under the title
111
+ Given a PageHeaderDescriptionRow below the title row
112
+ Then the muted description renders capped at 512px width
113
+ ```
114
+
115
+ ```gherkin
116
+ Scenario: Editable title or description
117
+ Given a page that lets the user rename its title or description inline (e.g. a
118
+ full-page wizard like Create Dashboard)
119
+ Then render a ButtonIcon with the pencil icon as a sibling next to the title or
120
+ the description — PageHeader has no dedicated part for it, since it's the same
121
+ atom either row
122
+ ```
123
+
124
+ ```gherkin
125
+ Scenario: Breadcrumb above PageHeader
126
+ Given a page that also shows a breadcrumb trail
127
+ Then render a Breadcrumb as a separate sibling above PageHeader, not nested inside it
128
+ ```
129
+
130
+ ```gherkin
131
+ Scenario: Tags overflow
132
+ Given a PageHeaderTags slot with more than one tag
133
+ And the full set of tags doesn't fit the width available to the slot
134
+ Then show only the first tag and fold the rest under a single "+#" tag
135
+ And hovering or focusing the "+#" tag shows a tooltip listing the hidden tags' labels
136
+ ```
137
+
138
+ ```gherkin
139
+ Scenario: Tags fit
140
+ Given a PageHeaderTags slot
141
+ When the full set of tags fits the width available to the slot
142
+ Then render every tag directly, with no overflow tag
143
+ ```
144
+
145
+ ```gherkin
146
+ Scenario: Actions overflow
147
+ Given a PageHeaderActions slot with at least one secondary-variant Button action
148
+ And the full set of actions doesn't fit the width available to the slot
149
+ Then fold every secondary-variant Button action under a single "More" ButtonIcon that opens a dropdown menu of them, in their original order
150
+ And leave every primary-variant action visible — it is never folded into the menu
151
+ And leave any non-Button action (e.g. a ButtonMenu trigger) visible and unfolded, even with variant="secondary" — folding only covers a plain button with a single click action
152
+ ```
153
+
154
+ ```gherkin
155
+ Scenario: Actions fit
156
+ Given a PageHeaderActions slot
157
+ When the full set of actions fits the width available to the slot
158
+ Then render every action directly, with no "More" ButtonIcon
159
+ ```
160
+
161
+ ## Accessibility
162
+
163
+ - The region is a `banner` landmark and the title is an `<h1>` — one page title per
164
+ page; ensure it fits the document outline.
165
+ - If a breadcrumb is composed above PageHeader, it's a separate `Breadcrumb` with
166
+ its own `<nav aria-label="breadcrumb">` — not a PageHeader part, so it carries
167
+ its own accessibility contract (see the Breadcrumb spec).
168
+ - Don't rely on placement alone for actions — give icon-only action buttons labels.
169
+ - The edit affordance next to the title or description is a plain `ButtonIcon`;
170
+ give it a descriptive `aria-label` (e.g. "Edit title", "Edit description") since
171
+ the pencil icon alone has no accessible name.
172
+ - The tags overflow indicator is a `Tag` wrapped in a `Tooltip` — its hidden-label
173
+ list opens on hover _and_ keyboard focus (Tooltip's Base UI primitive handles
174
+ both), so the hidden tags' labels aren't hover-only information.
175
+ - The actions overflow control is a `ButtonIcon` with `aria-label="More actions"`,
176
+ opening a `DropdownMenu` (Base UI `Menu`) of the hidden secondary actions — full
177
+ keyboard nav (arrow keys, typeahead, Esc) comes from the primitive.
178
+
179
+ ## Contrast
180
+
181
+ Title uses `--ui-text-on-surface-primary`; description uses
182
+ `--ui-text-on-surface-secondary`. Both meet contrast in light and dark.
@@ -0,0 +1,133 @@
1
+ # Pagination
2
+
3
+ > 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`.
4
+
5
+ **Status:** draft · **Category:** navigation · **Since:** v0.51.0
6
+
7
+ ## Import
8
+
9
+ ```tsx
10
+ import { Pagination, PaginationContent, PaginationItem, PaginationLink, PaginationPrevious, PaginationNext, PaginationEllipsis } from '@acronis-platform/ui-react'
11
+ ```
12
+
13
+ ## Quick example
14
+
15
+ ```tsx
16
+ <Pagination>
17
+ <PaginationContent>
18
+ <PaginationItem><PaginationPrevious href="#" /></PaginationItem>
19
+ <PaginationItem><PaginationLink href="#" isActive>1</PaginationLink></PaginationItem>
20
+ <PaginationItem><PaginationNext href="#" /></PaginationItem>
21
+ </PaginationContent>
22
+ </Pagination>
23
+ ```
24
+
25
+ Navigation for paged content — previous / next controls, numbered page links with
26
+ a current-page marker, and an ellipsis for skipped ranges. Markup-only; you wire
27
+ the navigation and decide the active page.
28
+
29
+ > Design-pending v1, ported from the legacy shadcn-uikit `pagination`.
30
+
31
+ ## When to use
32
+
33
+ - Splitting a long list/table across pages with direct page access.
34
+
35
+ ## When not to use
36
+
37
+ - Inside a `DataTable` — use its built-in `DataTablePagination`.
38
+ - Continuous loading — use infinite scroll / a "Load more" button.
39
+
40
+ ## Parts
41
+
42
+ | Export | Purpose |
43
+ | -------------------- | ------------------------------------------------ |
44
+ | `Pagination` | The `<nav>` landmark. |
45
+ | `PaginationContent` | The `<ul>` row of items. |
46
+ | `PaginationItem` | An `<li>` wrapper. |
47
+ | `PaginationLink` | A page link (`isActive` marks the current page). |
48
+ | `PaginationPrevious` | Previous-page control (chevron). |
49
+ | `PaginationNext` | Next-page control (chevron). |
50
+ | `PaginationEllipsis` | A skipped-range indicator. |
51
+
52
+ ## Example
53
+
54
+ ```tsx
55
+ import {
56
+ Pagination,
57
+ PaginationContent,
58
+ PaginationItem,
59
+ PaginationLink,
60
+ PaginationPrevious,
61
+ PaginationNext,
62
+ PaginationEllipsis,
63
+ } from '@acronis-platform/ui-react';
64
+
65
+ <Pagination>
66
+ <PaginationContent>
67
+ <PaginationItem>
68
+ <PaginationPrevious href="#" />
69
+ </PaginationItem>
70
+ <PaginationItem>
71
+ <PaginationLink href="#">1</PaginationLink>
72
+ </PaginationItem>
73
+ <PaginationItem>
74
+ <PaginationLink href="#" isActive>
75
+ 2
76
+ </PaginationLink>
77
+ </PaginationItem>
78
+ <PaginationItem>
79
+ <PaginationEllipsis />
80
+ </PaginationItem>
81
+ <PaginationItem>
82
+ <PaginationNext href="#" />
83
+ </PaginationItem>
84
+ </PaginationContent>
85
+ </Pagination>;
86
+ ```
87
+
88
+ ## Props
89
+
90
+ | Prop | Type | Default | Required | Description |
91
+ |------|------|---------|----------|-------------|
92
+ | `isActive` | `boolean` | `false` | no | On PaginationLink — marks the current page (sets aria-current="page" and the selected treatment). |
93
+
94
+ ## Behavior
95
+
96
+ Pagination is presentational — it renders the controls; the caller wires
97
+ navigation (`href` or `onClick`) and decides which page is active.
98
+
99
+ ```gherkin
100
+ Scenario: Mark the current page
101
+ Given a PaginationLink with isActive
102
+ Then it shows aria-current="page" and the selected treatment
103
+ ```
104
+
105
+ ```gherkin
106
+ Scenario: Previous / next
107
+ Given PaginationPrevious / PaginationNext
108
+ Then they render labelled chevron controls the caller wires to navigate
109
+ ```
110
+
111
+ ```gherkin
112
+ Scenario: Skipped range
113
+ Given a gap between page ranges
114
+ Then a PaginationEllipsis stands in for the skipped pages
115
+ ```
116
+
117
+ ## Accessibility
118
+
119
+ - The root is a `<nav>` landmark labelled "pagination"; the items are a real
120
+ `<ul>` / `<li>` list of links.
121
+ - The current page link carries `aria-current="page"`; previous / next links have
122
+ explicit labels ("Go to previous page" / "Go to next page").
123
+ - The ellipsis is `aria-hidden` with an `sr-only` "More pages" so it isn't read as
124
+ an interactive control.
125
+ - Render the page controls as real links (`href`) or buttons so they're keyboard
126
+ operable; don't rely on color alone for the current page (the `aria-current`
127
+ state conveys it).
128
+
129
+ ## Contrast
130
+
131
+ Page links use the foreground over the page surface; the active page uses
132
+ `--ui-background-surface-active` and hover uses `--ui-background-surface-hover` —
133
+ both meet contrast in light and dark. The focus ring uses `--ui-focus-primary`.