prime-ui-kit 0.13.1 → 0.15.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 (609) hide show
  1. package/README.md +20 -20
  2. package/dist/chunks/{chunk-XNOJEX55.js → chunk-2IKH55MI.js} +1 -1
  3. package/dist/chunks/{chunk-JV2KB5JZ.js → chunk-THFZIHKU.js} +3761 -3041
  4. package/dist/chunks/{chunk-PK2GC77E.js → chunk-XJAVS6FH.js} +213 -188
  5. package/dist/color-picker.js +2 -2
  6. package/dist/components/banner/Banner.d.ts +5 -2
  7. package/dist/components/chart-frame/ChartFrame.d.ts +19 -6
  8. package/dist/components/chat/Chat.d.ts +2 -2
  9. package/dist/components/chat/ChatPinned.d.ts +2 -2
  10. package/dist/components/chat/MessageList.d.ts +1 -1
  11. package/dist/components/chat/chatContext.d.ts +1 -1
  12. package/dist/components/dnd/Dnd.d.ts +1 -1
  13. package/dist/components/field-list/FieldList.d.ts +90 -0
  14. package/dist/components/index.d.ts +3 -1
  15. package/dist/components/input/Input.d.ts +2 -2
  16. package/dist/components/kanban/Kanban.d.ts +6 -3
  17. package/dist/components/login-form/LoginForm.d.ts +5 -1
  18. package/dist/components/page-content/PageContent.d.ts +55 -4
  19. package/dist/components/sparkline/Sparkline.d.ts +64 -15
  20. package/dist/components/sparkline/geometry.d.ts +26 -0
  21. package/dist/components/tooltip/Tooltip.d.ts +5 -2
  22. package/dist/hooks/usePosition.d.ts +15 -4
  23. package/dist/index.css +1 -1
  24. package/dist/index.js +4 -2
  25. package/dist/internal/ChartTooltip.d.ts +26 -0
  26. package/dist/internal/FieldAction.d.ts +6 -7
  27. package/dist/internal/fieldCell.d.ts +21 -0
  28. package/dist/internal/messageList.d.ts +2 -2
  29. package/dist/internal/palette.d.ts +7 -0
  30. package/dist/internal/swatch.d.ts +6 -2
  31. package/dist/layout/app-header/AppHeader.d.ts +9 -28
  32. package/dist/layout/index.d.ts +1 -1
  33. package/dist/skill/SKILL.md +32 -20
  34. package/dist/skill/anti-slop.md +77 -4
  35. package/dist/skill/api-contract.md +2 -2
  36. package/dist/skill/cheatsheet.md +33 -7
  37. package/dist/skill/checklist.md +28 -6
  38. package/dist/skill/choosing.md +17 -14
  39. package/dist/skill/components.md +9 -15
  40. package/dist/skill/composition.md +301 -61
  41. package/dist/skill/foundations.md +9 -7
  42. package/dist/skill/layouts.md +70 -37
  43. package/dist/skill/reference/components/avatar/COMPONENT.md +4 -4
  44. package/dist/skill/reference/components/avatar/examples/presence.tsx +1 -1
  45. package/dist/skill/reference/components/avatar/examples/states.tsx +5 -5
  46. package/dist/skill/reference/components/badge/examples/applied-filters.tsx +13 -19
  47. package/dist/skill/reference/components/badge/examples/examples.module.css +1 -8
  48. package/dist/skill/reference/components/badge/examples/server-tags.tsx +2 -6
  49. package/dist/skill/reference/components/banner/COMPONENT.md +6 -6
  50. package/dist/skill/reference/components/banner/examples/dismissible.tsx +22 -11
  51. package/dist/skill/reference/components/banner/examples/examples.module.css +4 -8
  52. package/dist/skill/reference/components/banner/examples/narrow.tsx +1 -1
  53. package/dist/skill/reference/components/banner/examples/page-strip.tsx +16 -22
  54. package/dist/skill/reference/components/breadcrumb/COMPONENT.md +5 -4
  55. package/dist/skill/reference/components/breadcrumb/examples/ellipsis.tsx +2 -2
  56. package/dist/skill/reference/components/breadcrumb/examples/overflow.tsx +1 -1
  57. package/dist/skill/reference/components/button-group/COMPONENT.md +2 -2
  58. package/dist/skill/reference/components/button-group/examples/in-form.tsx +22 -2
  59. package/dist/skill/reference/components/button-group/examples/states.tsx +10 -1
  60. package/dist/skill/reference/components/card/COMPONENT.md +7 -5
  61. package/dist/skill/reference/components/card/examples/examples.module.css +0 -28
  62. package/dist/skill/reference/components/card/examples/kpi-media.tsx +13 -11
  63. package/dist/skill/reference/components/card/examples/narrow.tsx +1 -1
  64. package/dist/skill/reference/components/card/examples/panel-chart.tsx +45 -22
  65. package/dist/skill/reference/components/card/examples/screen.module.css +14 -0
  66. package/dist/skill/reference/components/card/examples/screen.tsx +362 -0
  67. package/dist/skill/reference/components/card/examples/variants.tsx +15 -1
  68. package/dist/skill/reference/components/chart-frame/COMPONENT.md +12 -8
  69. package/dist/skill/reference/components/chart-frame/examples/fill-height.tsx +119 -0
  70. package/dist/skill/reference/components/chart-frame/examples/states.tsx +3 -1
  71. package/dist/skill/reference/components/chart-frame/examples/tooltip.tsx +20 -24
  72. package/dist/skill/reference/components/chat/COMPONENT.md +6 -4
  73. package/dist/skill/reference/components/chat/examples/group-chat.tsx +15 -2
  74. package/dist/skill/reference/components/chat/examples/reactions.tsx +121 -0
  75. package/dist/skill/reference/components/chat/examples/screen.module.css +9 -0
  76. package/dist/skill/{patterns/chat.tsx → reference/components/chat/examples/screen.tsx} +187 -350
  77. package/dist/skill/reference/components/chat/examples/search.tsx +1 -1
  78. package/dist/skill/reference/components/chat-list/COMPONENT.md +2 -1
  79. package/dist/skill/reference/components/chat-list/examples/links.tsx +72 -0
  80. package/dist/skill/reference/components/checkbox/COMPONENT.md +1 -1
  81. package/dist/skill/reference/components/checkbox/examples/examples.module.css +5 -1
  82. package/dist/skill/reference/components/checkbox/examples/indicator.tsx +37 -9
  83. package/dist/skill/reference/components/checkbox/examples/states.tsx +6 -1
  84. package/dist/skill/reference/components/color-field/COMPONENT.md +1 -1
  85. package/dist/skill/reference/components/color-picker/COMPONENT.md +6 -5
  86. package/dist/skill/reference/components/color-picker/examples/controlled-open.tsx +37 -0
  87. package/dist/skill/reference/components/color-picker/examples/presets.tsx +2 -2
  88. package/dist/skill/reference/components/color-picker/examples/states.tsx +23 -14
  89. package/dist/skill/reference/components/color-swatches/COMPONENT.md +1 -0
  90. package/dist/skill/reference/components/composer/COMPONENT.md +2 -1
  91. package/dist/skill/reference/components/composer/examples/attach-menu.tsx +78 -0
  92. package/dist/skill/reference/components/composer/examples/attachments.tsx +2 -2
  93. package/dist/skill/reference/components/crossfade/COMPONENT.md +1 -0
  94. package/dist/skill/{patterns/screen-states.module.css → reference/components/crossfade/examples/screen.module.css} +3 -17
  95. package/dist/skill/reference/components/crossfade/examples/screen.tsx +197 -0
  96. package/dist/skill/reference/components/data-table/COMPONENT.md +3 -2
  97. package/dist/skill/reference/components/data-table/examples/detail-panel.tsx +36 -37
  98. package/dist/skill/reference/components/data-table/examples/examples.module.css +0 -12
  99. package/dist/skill/reference/components/data-table/examples/numeric.tsx +36 -4
  100. package/dist/skill/reference/components/data-table/examples/overview.tsx +1 -0
  101. package/dist/skill/reference/components/data-table/examples/row-open.tsx +7 -36
  102. package/dist/skill/{patterns/list-page.module.css → reference/components/data-table/examples/screen.module.css} +1 -7
  103. package/dist/skill/{patterns/list-page.tsx → reference/components/data-table/examples/screen.tsx} +84 -64
  104. package/dist/skill/reference/components/datepicker/COMPONENT.md +6 -4
  105. package/dist/skill/reference/components/datepicker/examples/examples.module.css +2 -6
  106. package/dist/skill/reference/components/datepicker/examples/in-form.tsx +47 -55
  107. package/dist/skill/reference/components/datepicker/examples/locale.tsx +35 -0
  108. package/dist/skill/reference/components/datepicker/examples/range-presets.tsx +11 -2
  109. package/dist/skill/reference/components/datepicker/examples/states.tsx +9 -1
  110. package/dist/skill/reference/components/description-list/COMPONENT.md +1 -0
  111. package/dist/skill/{patterns/detail-page.module.css → reference/components/description-list/examples/screen.module.css} +2 -12
  112. package/dist/skill/reference/components/description-list/examples/screen.tsx +214 -0
  113. package/dist/skill/reference/components/description-list/examples/structure.tsx +1 -1
  114. package/dist/skill/reference/components/digit-input/COMPONENT.md +3 -1
  115. package/dist/skill/reference/components/digit-input/examples/states.tsx +3 -1
  116. package/dist/skill/reference/components/digit-input/examples/without-focus-ring.tsx +13 -0
  117. package/dist/skill/reference/components/divider/examples/with-icon.tsx +2 -2
  118. package/dist/skill/reference/components/dnd/COMPONENT.md +7 -5
  119. package/dist/skill/reference/components/dnd/examples/drop-zones.tsx +82 -49
  120. package/dist/skill/reference/components/dnd/examples/examples.module.css +50 -0
  121. package/dist/skill/reference/components/dnd/examples/states.tsx +54 -0
  122. package/dist/skill/reference/components/dnd/examples/table.tsx +113 -0
  123. package/dist/skill/reference/components/drawer/COMPONENT.md +1 -0
  124. package/dist/skill/reference/components/drawer/examples/dismiss.tsx +5 -3
  125. package/dist/skill/reference/components/drawer/examples/examples.module.css +0 -13
  126. package/dist/skill/reference/components/drawer/examples/header-actions.tsx +5 -9
  127. package/dist/skill/reference/components/drawer/examples/overview.tsx +6 -18
  128. package/dist/skill/reference/components/drawer/examples/screen.tsx +298 -0
  129. package/dist/skill/reference/components/dropdown/examples/examples.module.css +1 -5
  130. package/dist/skill/reference/components/empty-page/COMPONENT.md +1 -1
  131. package/dist/skill/reference/components/empty-page/examples/region-error.tsx +8 -2
  132. package/dist/skill/reference/components/example-frame/COMPONENT.md +3 -2
  133. package/dist/skill/reference/components/example-frame/examples/initial-view.tsx +44 -0
  134. package/dist/skill/reference/components/field-list/COMPONENT.md +165 -0
  135. package/dist/skill/reference/components/field-list/examples/base-row.tsx +76 -0
  136. package/dist/skill/reference/components/field-list/examples/controlled.tsx +72 -0
  137. package/dist/skill/reference/components/field-list/examples/errors.tsx +88 -0
  138. package/dist/skill/reference/components/field-list/examples/examples.module.css +34 -0
  139. package/dist/skill/reference/components/field-list/examples/limits.tsx +55 -0
  140. package/dist/skill/reference/components/field-list/examples/locked.tsx +139 -0
  141. package/dist/skill/reference/components/field-list/examples/narrow.tsx +68 -0
  142. package/dist/skill/reference/components/field-list/examples/overview.tsx +66 -0
  143. package/dist/skill/reference/components/field-list/examples/reorder.tsx +42 -0
  144. package/dist/skill/reference/components/field-list/examples/screen.module.css +18 -0
  145. package/dist/skill/reference/components/field-list/examples/screen.tsx +316 -0
  146. package/dist/skill/reference/components/field-list/examples/sizes.tsx +42 -0
  147. package/dist/skill/reference/components/field-list/examples/states.tsx +51 -0
  148. package/dist/skill/reference/components/file-upload/COMPONENT.md +7 -6
  149. package/dist/skill/reference/components/file-upload/examples/custom-body.tsx +2 -1
  150. package/dist/skill/reference/components/file-upload/examples/examples.module.css +1 -7
  151. package/dist/skill/reference/components/file-upload/examples/file-cards.tsx +10 -1
  152. package/dist/skill/reference/components/file-upload/examples/gallery.tsx +2 -2
  153. package/dist/skill/reference/components/file-upload/examples/in-form.tsx +4 -9
  154. package/dist/skill/reference/components/file-upload/examples/overview.tsx +5 -1
  155. package/dist/skill/reference/components/file-upload/examples/row-parts.tsx +24 -1
  156. package/dist/skill/{patterns/media-library.module.css → reference/components/file-upload/examples/screen.module.css} +2 -23
  157. package/dist/skill/reference/components/file-upload/examples/screen.tsx +646 -0
  158. package/dist/skill/reference/components/file-upload/examples/states.tsx +6 -2
  159. package/dist/skill/reference/components/file-upload/examples/validation.tsx +11 -2
  160. package/dist/skill/reference/components/file-upload/examples/variants.tsx +3 -20
  161. package/dist/skill/reference/components/gantt/COMPONENT.md +2 -1
  162. package/dist/skill/reference/components/gantt/examples/screen.module.css +14 -0
  163. package/dist/skill/{patterns/schedule.tsx → reference/components/gantt/examples/screen.tsx} +174 -170
  164. package/dist/skill/reference/components/gantt/examples/states.tsx +6 -2
  165. package/dist/skill/reference/components/input/COMPONENT.md +2 -2
  166. package/dist/skill/reference/components/input/examples/examples.module.css +2 -13
  167. package/dist/skill/reference/components/input/examples/in-form.tsx +1 -9
  168. package/dist/skill/reference/components/input/examples/password-strength.tsx +34 -8
  169. package/dist/skill/reference/components/input/examples/states.tsx +6 -1
  170. package/dist/skill/reference/components/kanban/COMPONENT.md +16 -11
  171. package/dist/skill/reference/components/kanban/examples/columns.tsx +8 -5
  172. package/dist/skill/reference/components/kanban/examples/limits.tsx +2 -1
  173. package/dist/skill/reference/components/kanban/examples/screen.module.css +17 -0
  174. package/dist/skill/{patterns/kanban-board.tsx → reference/components/kanban/examples/screen.tsx} +132 -172
  175. package/dist/skill/reference/components/kanban/examples/states.tsx +17 -6
  176. package/dist/skill/reference/components/kanban/examples/variants.tsx +16 -8
  177. package/dist/skill/reference/components/list/COMPONENT.md +1 -1
  178. package/dist/skill/reference/components/login-form/COMPONENT.md +6 -5
  179. package/dist/skill/reference/components/login-form/examples/examples.module.css +2 -21
  180. package/dist/skill/reference/components/login-form/examples/forgot-password.tsx +28 -32
  181. package/dist/skill/reference/components/login-form/examples/narrow.tsx +1 -1
  182. package/dist/skill/reference/components/login-form/examples/overview.tsx +45 -47
  183. package/dist/skill/reference/components/login-form/examples/register.tsx +64 -68
  184. package/dist/skill/reference/components/login-form/examples/reset-password.tsx +50 -47
  185. package/dist/skill/reference/components/login-form/examples/sizes.tsx +4 -6
  186. package/dist/skill/reference/components/login-form/examples/states.tsx +53 -57
  187. package/dist/skill/reference/components/login-form/examples/structure.tsx +18 -22
  188. package/dist/skill/reference/components/login-form/examples/verification-code.tsx +41 -45
  189. package/dist/skill/reference/components/media-viewer/COMPONENT.md +3 -3
  190. package/dist/skill/reference/components/media-viewer/examples/dismiss.tsx +5 -1
  191. package/dist/skill/reference/components/message/COMPONENT.md +6 -5
  192. package/dist/skill/reference/components/message/examples/file.tsx +5 -1
  193. package/dist/skill/reference/components/message/examples/media-open.tsx +48 -0
  194. package/dist/skill/reference/components/message/examples/status.tsx +21 -3
  195. package/dist/skill/reference/components/message/examples/text-formatting.tsx +7 -1
  196. package/dist/skill/reference/components/modal/COMPONENT.md +2 -1
  197. package/dist/skill/reference/components/modal/examples/custom-container.tsx +20 -20
  198. package/dist/skill/reference/components/modal/examples/dismiss.tsx +5 -3
  199. package/dist/skill/reference/components/modal/examples/enter-key.tsx +116 -0
  200. package/dist/skill/reference/components/modal/examples/examples.module.css +7 -13
  201. package/dist/skill/reference/components/modal/examples/structure.tsx +5 -2
  202. package/dist/skill/reference/components/native-select/COMPONENT.md +1 -1
  203. package/dist/skill/reference/components/native-select/examples/states.tsx +5 -1
  204. package/dist/skill/reference/components/notification/COMPONENT.md +2 -1
  205. package/dist/skill/reference/components/notification/examples/dismiss.tsx +2 -2
  206. package/dist/skill/reference/components/page-content/COMPONENT.md +71 -14
  207. package/dist/skill/reference/components/page-content/examples/grid.tsx +107 -0
  208. package/dist/skill/reference/components/page-content/examples/list-detail.tsx +0 -3
  209. package/dist/skill/reference/components/page-content/examples/overview.tsx +2 -2
  210. package/dist/skill/{patterns/settings-page.module.css → reference/components/page-content/examples/screen.module.css} +1 -21
  211. package/dist/skill/{patterns/settings-page.tsx → reference/components/page-content/examples/screen.tsx} +61 -82
  212. package/dist/skill/reference/components/page-content/examples/sections.tsx +81 -0
  213. package/dist/skill/reference/components/page-content/examples/variants.tsx +4 -11
  214. package/dist/skill/reference/components/page-toolbar/COMPONENT.md +18 -16
  215. package/dist/skill/reference/components/page-toolbar/examples/narrow.tsx +6 -3
  216. package/dist/skill/reference/components/pagination/examples/controlled.tsx +29 -29
  217. package/dist/skill/reference/components/pagination/examples/examples.module.css +0 -2
  218. package/dist/skill/reference/components/progress-bar/COMPONENT.md +1 -1
  219. package/dist/skill/reference/components/progress-bar/examples/segments.tsx +2 -2
  220. package/dist/skill/reference/components/progress-circle/COMPONENT.md +1 -1
  221. package/dist/skill/reference/components/progress-circle/examples/segments.tsx +8 -3
  222. package/dist/skill/reference/components/radio/COMPONENT.md +1 -0
  223. package/dist/skill/reference/components/radio/examples/examples.module.css +14 -0
  224. package/dist/skill/reference/components/radio/examples/in-form.tsx +45 -0
  225. package/dist/skill/reference/components/scroll-container/COMPONENT.md +1 -0
  226. package/dist/skill/reference/components/scroll-container/examples/auto-scroll.tsx +3 -3
  227. package/dist/skill/reference/components/scroll-container/examples/chat.tsx +3 -3
  228. package/dist/skill/reference/components/scroll-container/examples/edges.tsx +6 -3
  229. package/dist/skill/reference/components/scroll-container/examples/examples.module.css +4 -17
  230. package/dist/skill/reference/components/scroll-container/examples/load-more.tsx +51 -0
  231. package/dist/skill/reference/components/scroll-container/examples/lock.tsx +3 -5
  232. package/dist/skill/reference/components/scroll-container/examples/overscroll.tsx +3 -3
  233. package/dist/skill/reference/components/scroll-container/examples/overview.tsx +3 -3
  234. package/dist/skill/reference/components/scroll-container/examples/scrollbar.tsx +13 -7
  235. package/dist/skill/reference/components/scroll-container/examples/variants.tsx +13 -7
  236. package/dist/skill/reference/components/segmented-control/COMPONENT.md +3 -2
  237. package/dist/skill/reference/components/segmented-control/examples/in-form.tsx +5 -1
  238. package/dist/skill/reference/components/segmented-control/examples/states.tsx +10 -1
  239. package/dist/skill/reference/components/select/COMPONENT.md +5 -3
  240. package/dist/skill/reference/components/select/examples/examples.module.css +2 -7
  241. package/dist/skill/reference/components/select/examples/icon-only.tsx +38 -0
  242. package/dist/skill/reference/components/select/examples/states.tsx +13 -1
  243. package/dist/skill/reference/components/sheet/COMPONENT.md +2 -0
  244. package/dist/skill/reference/components/sheet/examples/guard.tsx +72 -0
  245. package/dist/skill/reference/components/sheet/examples/header-actions.tsx +56 -0
  246. package/dist/skill/reference/components/slider/COMPONENT.md +2 -1
  247. package/dist/skill/reference/components/slider/examples/examples.module.css +8 -0
  248. package/dist/skill/reference/components/slider/examples/in-form.tsx +47 -0
  249. package/dist/skill/reference/components/slider/examples/states.tsx +4 -1
  250. package/dist/skill/reference/components/smart-filter/COMPONENT.md +1 -1
  251. package/dist/skill/reference/components/smart-filter/examples/controlled.tsx +3 -3
  252. package/dist/skill/reference/components/smart-filter/examples/ranges.tsx +44 -10
  253. package/dist/skill/reference/components/sparkline/COMPONENT.md +83 -30
  254. package/dist/skill/reference/components/sparkline/examples/compact.tsx +1 -1
  255. package/dist/skill/reference/components/sparkline/examples/curve.tsx +28 -0
  256. package/dist/skill/reference/components/sparkline/examples/gaps.tsx +33 -0
  257. package/dist/skill/reference/components/sparkline/examples/overview.tsx +11 -2
  258. package/dist/skill/reference/components/sparkline/examples/period.tsx +7 -2
  259. package/dist/skill/reference/components/sparkline/examples/reference.tsx +38 -0
  260. package/dist/skill/reference/components/sparkline/examples/variants.tsx +2 -2
  261. package/dist/skill/reference/components/tabs/COMPONENT.md +1 -1
  262. package/dist/skill/reference/components/tabs/examples/examples.module.css +0 -6
  263. package/dist/skill/reference/components/tabs/examples/in-drawer.tsx +11 -13
  264. package/dist/skill/reference/components/tabs/examples/sizes.tsx +1 -1
  265. package/dist/skill/reference/components/tag-select/COMPONENT.md +1 -1
  266. package/dist/skill/reference/components/tag-select/examples/states.tsx +8 -1
  267. package/dist/skill/reference/components/textarea/COMPONENT.md +1 -1
  268. package/dist/skill/reference/components/textarea/examples/examples.module.css +0 -6
  269. package/dist/skill/reference/components/textarea/examples/in-form.tsx +1 -9
  270. package/dist/skill/reference/components/textarea/examples/states.tsx +2 -1
  271. package/dist/skill/reference/components/thumbnail/COMPONENT.md +2 -1
  272. package/dist/skill/reference/components/thumbnail/examples/examples.module.css +1 -1
  273. package/dist/skill/reference/components/thumbnail/examples/fit.tsx +24 -0
  274. package/dist/skill/reference/components/thumbnail/examples/video.tsx +20 -1
  275. package/dist/skill/reference/components/timeline/COMPONENT.md +1 -1
  276. package/dist/skill/reference/components/timeline/examples/examples.module.css +0 -8
  277. package/dist/skill/reference/components/timeline/examples/links.tsx +55 -14
  278. package/dist/skill/reference/components/timeline/examples/narrow.tsx +2 -2
  279. package/dist/skill/reference/components/timeline/examples/sizes.tsx +3 -3
  280. package/dist/skill/reference/components/timeline/examples/variants.tsx +4 -4
  281. package/dist/skill/reference/components/tooltip/COMPONENT.md +7 -5
  282. package/dist/skill/reference/components/tooltip/examples/placement.tsx +2 -1
  283. package/dist/skill/reference/components/tooltip/examples/toolbar.tsx +2 -2
  284. package/dist/skill/reference/components/typography/examples/weights.tsx +3 -0
  285. package/dist/skill/reference/components/video-note/COMPONENT.md +3 -3
  286. package/dist/skill/reference/components/video-note/examples/controlled.tsx +19 -2
  287. package/dist/skill/reference/components/video-note/examples/in-message.tsx +5 -2
  288. package/dist/skill/reference/components/visually-hidden/COMPONENT.md +2 -1
  289. package/dist/skill/reference/components/visually-hidden/examples/assertive.tsx +39 -0
  290. package/dist/skill/reference/components/voice-player/COMPONENT.md +3 -3
  291. package/dist/skill/reference/components/voice-player/examples/call-recording.tsx +19 -9
  292. package/dist/skill/reference/components/voice-player/examples/controlled.tsx +20 -3
  293. package/dist/skill/reference/layout/app-header/COMPONENT.md +46 -63
  294. package/dist/skill/reference/layout/app-header/examples/breadcrumbs.tsx +10 -9
  295. package/dist/skill/reference/layout/app-header/examples/examples.module.css +1 -1
  296. package/dist/skill/reference/layout/app-header/examples/in-app-shell.tsx +2 -3
  297. package/dist/skill/reference/layout/app-header/examples/narrow.tsx +4 -5
  298. package/dist/skill/reference/layout/app-header/examples/overview.tsx +8 -10
  299. package/dist/skill/reference/layout/app-header/examples/page-title.tsx +3 -10
  300. package/dist/skill/reference/layout/app-shell/COMPONENT.md +5 -4
  301. package/dist/skill/reference/layout/app-shell/examples/footer.tsx +2 -2
  302. package/dist/skill/reference/layout/app-shell/examples/overview.tsx +17 -32
  303. package/dist/skill/{patterns/app-shell.module.css → reference/layout/app-shell/examples/screen.module.css} +1 -8
  304. package/dist/skill/reference/layout/app-shell/examples/screen.tsx +262 -0
  305. package/dist/skill/reference/layout/app-shell/examples/template.tsx +31 -11
  306. package/dist/skill/reference/layout/bottom-nav/examples/floating-action.tsx +2 -2
  307. package/dist/skill/reference/layout/bottom-nav/examples/floating.tsx +2 -2
  308. package/dist/skill/reference/layout/bottom-nav/examples/in-app-shell.tsx +2 -2
  309. package/dist/skill/reference/layout/sidebar/COMPONENT.md +7 -4
  310. package/dist/skill/reference/layout/sidebar/examples/account.tsx +2 -2
  311. package/dist/skill/reference/layout/sidebar/examples/collapsible-groups.tsx +12 -4
  312. package/dist/skill/reference/layout/sidebar/examples/custom-part.tsx +53 -0
  313. package/dist/skill/reference/layout/sidebar/examples/examples.module.css +5 -0
  314. package/dist/skill/reference/layout/sidebar/examples/narrow.tsx +53 -0
  315. package/dist/skill/reference/layout/sidebar/examples/persist.tsx +57 -0
  316. package/dist/skill/reference/layout/sidebar/examples/router.tsx +14 -2
  317. package/dist/skill/reference/layout/sidebar/examples/structure.tsx +7 -2
  318. package/dist/skill/responsive.md +7 -5
  319. package/dist/skill/ux.md +145 -0
  320. package/dist/tokens/semantic.d.ts +2 -0
  321. package/package.json +1 -1
  322. package/src/components/avatar/COMPONENT.md +4 -4
  323. package/src/components/avatar/examples/presence.tsx +1 -1
  324. package/src/components/avatar/examples/states.tsx +5 -5
  325. package/src/components/badge/examples/applied-filters.tsx +13 -19
  326. package/src/components/badge/examples/examples.module.css +1 -8
  327. package/src/components/badge/examples/server-tags.tsx +2 -6
  328. package/src/components/banner/COMPONENT.md +6 -6
  329. package/src/components/banner/examples/dismissible.tsx +22 -11
  330. package/src/components/banner/examples/examples.module.css +4 -8
  331. package/src/components/banner/examples/narrow.tsx +1 -1
  332. package/src/components/banner/examples/page-strip.tsx +16 -22
  333. package/src/components/breadcrumb/COMPONENT.md +5 -4
  334. package/src/components/breadcrumb/examples/ellipsis.tsx +2 -2
  335. package/src/components/breadcrumb/examples/overflow.tsx +1 -1
  336. package/src/components/button-group/COMPONENT.md +2 -2
  337. package/src/components/button-group/examples/in-form.tsx +22 -2
  338. package/src/components/button-group/examples/states.tsx +10 -1
  339. package/src/components/card/COMPONENT.md +7 -5
  340. package/src/components/card/examples/examples.module.css +0 -28
  341. package/src/components/card/examples/kpi-media.tsx +13 -11
  342. package/src/components/card/examples/narrow.tsx +1 -1
  343. package/src/components/card/examples/panel-chart.tsx +45 -22
  344. package/src/components/card/examples/screen.module.css +14 -0
  345. package/src/components/card/examples/screen.tsx +362 -0
  346. package/src/components/card/examples/variants.tsx +15 -1
  347. package/src/components/chart-frame/COMPONENT.md +12 -8
  348. package/src/components/chart-frame/examples/fill-height.tsx +119 -0
  349. package/src/components/chart-frame/examples/states.tsx +3 -1
  350. package/src/components/chart-frame/examples/tooltip.tsx +20 -24
  351. package/src/components/chat/COMPONENT.md +6 -4
  352. package/src/components/chat/examples/group-chat.tsx +15 -2
  353. package/src/components/chat/examples/reactions.tsx +121 -0
  354. package/src/components/chat/examples/screen.module.css +9 -0
  355. package/src/components/chat/examples/screen.tsx +718 -0
  356. package/src/components/chat/examples/search.tsx +1 -1
  357. package/src/components/chat-list/COMPONENT.md +2 -1
  358. package/src/components/chat-list/examples/links.tsx +72 -0
  359. package/src/components/checkbox/COMPONENT.md +1 -1
  360. package/src/components/checkbox/examples/examples.module.css +5 -1
  361. package/src/components/checkbox/examples/indicator.tsx +37 -9
  362. package/src/components/checkbox/examples/states.tsx +6 -1
  363. package/src/components/color-field/COMPONENT.md +1 -1
  364. package/src/components/color-picker/COMPONENT.md +6 -5
  365. package/src/components/color-picker/examples/controlled-open.tsx +37 -0
  366. package/src/components/color-picker/examples/presets.tsx +2 -2
  367. package/src/components/color-picker/examples/states.tsx +23 -14
  368. package/src/components/color-swatches/COMPONENT.md +1 -0
  369. package/src/components/composer/COMPONENT.md +2 -1
  370. package/src/components/composer/examples/attach-menu.tsx +78 -0
  371. package/src/components/composer/examples/attachments.tsx +2 -2
  372. package/src/components/crossfade/COMPONENT.md +1 -0
  373. package/src/components/crossfade/examples/screen.module.css +40 -0
  374. package/src/components/crossfade/examples/screen.tsx +197 -0
  375. package/src/components/data-table/COMPONENT.md +3 -2
  376. package/src/components/data-table/examples/detail-panel.tsx +36 -37
  377. package/src/components/data-table/examples/examples.module.css +0 -12
  378. package/src/components/data-table/examples/numeric.tsx +36 -4
  379. package/src/components/data-table/examples/overview.tsx +1 -0
  380. package/src/components/data-table/examples/row-open.tsx +7 -36
  381. package/src/components/data-table/examples/screen.module.css +13 -0
  382. package/src/components/data-table/examples/screen.tsx +354 -0
  383. package/src/components/datepicker/COMPONENT.md +6 -4
  384. package/src/components/datepicker/examples/examples.module.css +2 -6
  385. package/src/components/datepicker/examples/in-form.tsx +47 -55
  386. package/src/components/datepicker/examples/locale.tsx +35 -0
  387. package/src/components/datepicker/examples/range-presets.tsx +11 -2
  388. package/src/components/datepicker/examples/states.tsx +9 -1
  389. package/src/components/description-list/COMPONENT.md +1 -0
  390. package/src/components/description-list/examples/screen.module.css +64 -0
  391. package/src/components/description-list/examples/screen.tsx +214 -0
  392. package/src/components/description-list/examples/structure.tsx +1 -1
  393. package/src/components/digit-input/COMPONENT.md +3 -1
  394. package/src/components/digit-input/examples/states.tsx +3 -1
  395. package/src/components/digit-input/examples/without-focus-ring.tsx +13 -0
  396. package/src/components/divider/examples/with-icon.tsx +2 -2
  397. package/src/components/dnd/COMPONENT.md +7 -5
  398. package/src/components/dnd/examples/drop-zones.tsx +82 -49
  399. package/src/components/dnd/examples/examples.module.css +50 -0
  400. package/src/components/dnd/examples/states.tsx +54 -0
  401. package/src/components/dnd/examples/table.tsx +113 -0
  402. package/src/components/drawer/COMPONENT.md +1 -0
  403. package/src/components/drawer/examples/dismiss.tsx +5 -3
  404. package/src/components/drawer/examples/examples.module.css +0 -13
  405. package/src/components/drawer/examples/header-actions.tsx +5 -9
  406. package/src/components/drawer/examples/overview.tsx +6 -18
  407. package/src/components/drawer/examples/screen.module.css +14 -0
  408. package/src/components/drawer/examples/screen.tsx +298 -0
  409. package/src/components/dropdown/examples/examples.module.css +1 -5
  410. package/src/components/empty-page/COMPONENT.md +1 -1
  411. package/src/components/empty-page/examples/region-error.tsx +8 -2
  412. package/src/components/example-frame/COMPONENT.md +3 -2
  413. package/src/components/example-frame/examples/initial-view.tsx +44 -0
  414. package/src/components/field-list/COMPONENT.md +165 -0
  415. package/src/components/field-list/examples/base-row.tsx +76 -0
  416. package/src/components/field-list/examples/controlled.tsx +72 -0
  417. package/src/components/field-list/examples/errors.tsx +88 -0
  418. package/src/components/field-list/examples/examples.module.css +34 -0
  419. package/src/components/field-list/examples/limits.tsx +55 -0
  420. package/src/components/field-list/examples/locked.tsx +139 -0
  421. package/src/components/field-list/examples/narrow.tsx +68 -0
  422. package/src/components/field-list/examples/overview.tsx +66 -0
  423. package/src/components/field-list/examples/reorder.tsx +42 -0
  424. package/src/components/field-list/examples/screen.module.css +18 -0
  425. package/src/components/field-list/examples/screen.tsx +316 -0
  426. package/src/components/field-list/examples/sizes.tsx +42 -0
  427. package/src/components/field-list/examples/states.tsx +51 -0
  428. package/src/components/file-upload/COMPONENT.md +7 -6
  429. package/src/components/file-upload/examples/custom-body.tsx +2 -1
  430. package/src/components/file-upload/examples/examples.module.css +1 -7
  431. package/src/components/file-upload/examples/file-cards.tsx +10 -1
  432. package/src/components/file-upload/examples/gallery.tsx +2 -2
  433. package/src/components/file-upload/examples/in-form.tsx +4 -9
  434. package/src/components/file-upload/examples/overview.tsx +5 -1
  435. package/src/components/file-upload/examples/row-parts.tsx +24 -1
  436. package/src/components/file-upload/examples/screen.module.css +45 -0
  437. package/src/components/file-upload/examples/screen.tsx +646 -0
  438. package/src/components/file-upload/examples/states.tsx +6 -2
  439. package/src/components/file-upload/examples/validation.tsx +11 -2
  440. package/src/components/file-upload/examples/variants.tsx +3 -20
  441. package/src/components/gantt/COMPONENT.md +2 -1
  442. package/src/components/gantt/examples/screen.module.css +14 -0
  443. package/src/components/gantt/examples/screen.tsx +726 -0
  444. package/src/components/gantt/examples/states.tsx +6 -2
  445. package/src/components/input/COMPONENT.md +2 -2
  446. package/src/components/input/examples/examples.module.css +2 -13
  447. package/src/components/input/examples/in-form.tsx +1 -9
  448. package/src/components/input/examples/password-strength.tsx +34 -8
  449. package/src/components/input/examples/states.tsx +6 -1
  450. package/src/components/kanban/COMPONENT.md +16 -11
  451. package/src/components/kanban/examples/columns.tsx +8 -5
  452. package/src/components/kanban/examples/limits.tsx +2 -1
  453. package/src/components/kanban/examples/screen.module.css +17 -0
  454. package/src/components/kanban/examples/screen.tsx +572 -0
  455. package/src/components/kanban/examples/states.tsx +17 -6
  456. package/src/components/kanban/examples/variants.tsx +16 -8
  457. package/src/components/list/COMPONENT.md +1 -1
  458. package/src/components/login-form/COMPONENT.md +6 -5
  459. package/src/components/login-form/examples/examples.module.css +2 -21
  460. package/src/components/login-form/examples/forgot-password.tsx +28 -32
  461. package/src/components/login-form/examples/narrow.tsx +1 -1
  462. package/src/components/login-form/examples/overview.tsx +45 -47
  463. package/src/components/login-form/examples/register.tsx +64 -68
  464. package/src/components/login-form/examples/reset-password.tsx +50 -47
  465. package/src/components/login-form/examples/sizes.tsx +4 -6
  466. package/src/components/login-form/examples/states.tsx +53 -57
  467. package/src/components/login-form/examples/structure.tsx +18 -22
  468. package/src/components/login-form/examples/verification-code.tsx +41 -45
  469. package/src/components/media-viewer/COMPONENT.md +3 -3
  470. package/src/components/media-viewer/examples/dismiss.tsx +5 -1
  471. package/src/components/message/COMPONENT.md +6 -5
  472. package/src/components/message/examples/file.tsx +5 -1
  473. package/src/components/message/examples/media-open.tsx +48 -0
  474. package/src/components/message/examples/status.tsx +21 -3
  475. package/src/components/message/examples/text-formatting.tsx +7 -1
  476. package/src/components/modal/COMPONENT.md +2 -1
  477. package/src/components/modal/examples/custom-container.tsx +20 -20
  478. package/src/components/modal/examples/dismiss.tsx +5 -3
  479. package/src/components/modal/examples/enter-key.tsx +116 -0
  480. package/src/components/modal/examples/examples.module.css +7 -13
  481. package/src/components/modal/examples/structure.tsx +5 -2
  482. package/src/components/native-select/COMPONENT.md +1 -1
  483. package/src/components/native-select/examples/states.tsx +5 -1
  484. package/src/components/notification/COMPONENT.md +2 -1
  485. package/src/components/notification/examples/dismiss.tsx +2 -2
  486. package/src/components/page-content/COMPONENT.md +71 -14
  487. package/src/components/page-content/examples/grid.tsx +107 -0
  488. package/src/components/page-content/examples/list-detail.tsx +0 -3
  489. package/src/components/page-content/examples/overview.tsx +2 -2
  490. package/src/components/page-content/examples/screen.module.css +27 -0
  491. package/src/components/page-content/examples/screen.tsx +196 -0
  492. package/src/components/page-content/examples/sections.tsx +81 -0
  493. package/src/components/page-content/examples/variants.tsx +4 -11
  494. package/src/components/page-toolbar/COMPONENT.md +18 -16
  495. package/src/components/page-toolbar/examples/narrow.tsx +6 -3
  496. package/src/components/pagination/examples/controlled.tsx +29 -29
  497. package/src/components/pagination/examples/examples.module.css +0 -2
  498. package/src/components/progress-bar/COMPONENT.md +1 -1
  499. package/src/components/progress-bar/examples/segments.tsx +2 -2
  500. package/src/components/progress-circle/COMPONENT.md +1 -1
  501. package/src/components/progress-circle/examples/segments.tsx +8 -3
  502. package/src/components/radio/COMPONENT.md +1 -0
  503. package/src/components/radio/examples/examples.module.css +14 -0
  504. package/src/components/radio/examples/in-form.tsx +45 -0
  505. package/src/components/scroll-container/COMPONENT.md +1 -0
  506. package/src/components/scroll-container/examples/auto-scroll.tsx +3 -3
  507. package/src/components/scroll-container/examples/chat.tsx +3 -3
  508. package/src/components/scroll-container/examples/edges.tsx +6 -3
  509. package/src/components/scroll-container/examples/examples.module.css +4 -17
  510. package/src/components/scroll-container/examples/load-more.tsx +51 -0
  511. package/src/components/scroll-container/examples/lock.tsx +3 -5
  512. package/src/components/scroll-container/examples/overscroll.tsx +3 -3
  513. package/src/components/scroll-container/examples/overview.tsx +3 -3
  514. package/src/components/scroll-container/examples/scrollbar.tsx +13 -7
  515. package/src/components/scroll-container/examples/variants.tsx +13 -7
  516. package/src/components/segmented-control/COMPONENT.md +3 -2
  517. package/src/components/segmented-control/examples/in-form.tsx +5 -1
  518. package/src/components/segmented-control/examples/states.tsx +10 -1
  519. package/src/components/select/COMPONENT.md +5 -3
  520. package/src/components/select/examples/examples.module.css +2 -7
  521. package/src/components/select/examples/icon-only.tsx +38 -0
  522. package/src/components/select/examples/states.tsx +13 -1
  523. package/src/components/sheet/COMPONENT.md +2 -0
  524. package/src/components/sheet/examples/guard.tsx +72 -0
  525. package/src/components/sheet/examples/header-actions.tsx +56 -0
  526. package/src/components/slider/COMPONENT.md +2 -1
  527. package/src/components/slider/examples/examples.module.css +8 -0
  528. package/src/components/slider/examples/in-form.tsx +47 -0
  529. package/src/components/slider/examples/states.tsx +4 -1
  530. package/src/components/smart-filter/COMPONENT.md +1 -1
  531. package/src/components/smart-filter/examples/controlled.tsx +3 -3
  532. package/src/components/smart-filter/examples/ranges.tsx +44 -10
  533. package/src/components/sparkline/COMPONENT.md +83 -30
  534. package/src/components/sparkline/examples/compact.tsx +1 -1
  535. package/src/components/sparkline/examples/curve.tsx +28 -0
  536. package/src/components/sparkline/examples/gaps.tsx +33 -0
  537. package/src/components/sparkline/examples/overview.tsx +11 -2
  538. package/src/components/sparkline/examples/period.tsx +7 -2
  539. package/src/components/sparkline/examples/reference.tsx +38 -0
  540. package/src/components/sparkline/examples/variants.tsx +2 -2
  541. package/src/components/tabs/COMPONENT.md +1 -1
  542. package/src/components/tabs/examples/examples.module.css +0 -6
  543. package/src/components/tabs/examples/in-drawer.tsx +11 -13
  544. package/src/components/tabs/examples/sizes.tsx +1 -1
  545. package/src/components/tag-select/COMPONENT.md +1 -1
  546. package/src/components/tag-select/examples/states.tsx +8 -1
  547. package/src/components/textarea/COMPONENT.md +1 -1
  548. package/src/components/textarea/examples/examples.module.css +0 -6
  549. package/src/components/textarea/examples/in-form.tsx +1 -9
  550. package/src/components/textarea/examples/states.tsx +2 -1
  551. package/src/components/thumbnail/COMPONENT.md +2 -1
  552. package/src/components/thumbnail/examples/examples.module.css +1 -1
  553. package/src/components/thumbnail/examples/fit.tsx +24 -0
  554. package/src/components/thumbnail/examples/video.tsx +20 -1
  555. package/src/components/timeline/COMPONENT.md +1 -1
  556. package/src/components/timeline/examples/examples.module.css +0 -8
  557. package/src/components/timeline/examples/links.tsx +55 -14
  558. package/src/components/timeline/examples/narrow.tsx +2 -2
  559. package/src/components/timeline/examples/sizes.tsx +3 -3
  560. package/src/components/timeline/examples/variants.tsx +4 -4
  561. package/src/components/tooltip/COMPONENT.md +7 -5
  562. package/src/components/tooltip/examples/placement.tsx +2 -1
  563. package/src/components/tooltip/examples/toolbar.tsx +2 -2
  564. package/src/components/typography/examples/weights.tsx +3 -0
  565. package/src/components/video-note/COMPONENT.md +3 -3
  566. package/src/components/video-note/examples/controlled.tsx +19 -2
  567. package/src/components/video-note/examples/in-message.tsx +5 -2
  568. package/src/components/visually-hidden/COMPONENT.md +2 -1
  569. package/src/components/visually-hidden/examples/assertive.tsx +39 -0
  570. package/src/components/voice-player/COMPONENT.md +3 -3
  571. package/src/components/voice-player/examples/call-recording.tsx +19 -9
  572. package/src/components/voice-player/examples/controlled.tsx +20 -3
  573. package/src/layout/app-header/COMPONENT.md +46 -63
  574. package/src/layout/app-header/examples/breadcrumbs.tsx +10 -9
  575. package/src/layout/app-header/examples/examples.module.css +1 -1
  576. package/src/layout/app-header/examples/in-app-shell.tsx +2 -3
  577. package/src/layout/app-header/examples/narrow.tsx +4 -5
  578. package/src/layout/app-header/examples/overview.tsx +8 -10
  579. package/src/layout/app-header/examples/page-title.tsx +3 -10
  580. package/src/layout/app-shell/COMPONENT.md +5 -4
  581. package/src/layout/app-shell/examples/footer.tsx +2 -2
  582. package/src/layout/app-shell/examples/overview.tsx +17 -32
  583. package/src/layout/app-shell/examples/screen.module.css +11 -0
  584. package/src/layout/app-shell/examples/screen.tsx +262 -0
  585. package/src/layout/app-shell/examples/template.tsx +31 -11
  586. package/src/layout/bottom-nav/examples/floating-action.tsx +2 -2
  587. package/src/layout/bottom-nav/examples/floating.tsx +2 -2
  588. package/src/layout/bottom-nav/examples/in-app-shell.tsx +2 -2
  589. package/src/layout/sidebar/COMPONENT.md +7 -4
  590. package/src/layout/sidebar/examples/account.tsx +2 -2
  591. package/src/layout/sidebar/examples/collapsible-groups.tsx +12 -4
  592. package/src/layout/sidebar/examples/custom-part.tsx +53 -0
  593. package/src/layout/sidebar/examples/examples.module.css +5 -0
  594. package/src/layout/sidebar/examples/narrow.tsx +53 -0
  595. package/src/layout/sidebar/examples/persist.tsx +57 -0
  596. package/src/layout/sidebar/examples/router.tsx +14 -2
  597. package/src/layout/sidebar/examples/structure.tsx +7 -2
  598. package/src/styles/theme-light.css +1 -0
  599. package/dist/skill/patterns/app-shell.tsx +0 -301
  600. package/dist/skill/patterns/chat.module.css +0 -8
  601. package/dist/skill/patterns/dashboard.module.css +0 -44
  602. package/dist/skill/patterns/dashboard.tsx +0 -326
  603. package/dist/skill/patterns/detail-page.tsx +0 -209
  604. package/dist/skill/patterns/form-drawer.tsx +0 -240
  605. package/dist/skill/patterns/kanban-board.module.css +0 -28
  606. package/dist/skill/patterns/media-library.tsx +0 -638
  607. package/dist/skill/patterns/schedule.module.css +0 -22
  608. package/dist/skill/patterns/screen-states.tsx +0 -186
  609. /package/dist/skill/{patterns/form-drawer.module.css → reference/components/drawer/examples/screen.module.css} +0 -0
@@ -0,0 +1,54 @@
1
+ /** A contract's approval route: a step already signed stays where it is while the rest reorder around it, and once the route is approved the whole list holds still — `Dnd.SortableItem`, `Dnd.Sortable`, `disabled`. */
2
+ import { Badge, Dnd, moveBefore, Switch, Typography } from "prime-ui-kit";
3
+ import * as React from "react";
4
+
5
+ import styles from "./examples.module.css";
6
+
7
+ type Step = { id: string; title: string; person: string; signed?: boolean };
8
+
9
+ const ROUTE: Step[] = [
10
+ { id: "lawyer", title: "Юрист", person: "Ольга Белова", signed: true },
11
+ { id: "finance", title: "Финансовый отдел", person: "Илья Петров" },
12
+ { id: "security", title: "Служба безопасности", person: "Марат Хасанов" },
13
+ { id: "director", title: "Директор", person: "Анна Климова" },
14
+ ];
15
+
16
+ export default function DndStatesExample() {
17
+ const [steps, setSteps] = React.useState(ROUTE);
18
+ const [approved, setApproved] = React.useState(false);
19
+
20
+ return (
21
+ <div className={styles.stage}>
22
+ <Switch.Root checked={approved} onCheckedChange={setApproved}>
23
+ <Switch.Label>Маршрут утверждён</Switch.Label>
24
+ </Switch.Root>
25
+ <Dnd.Root>
26
+ <Dnd.Sortable
27
+ as="ol"
28
+ aria-label="Маршрут согласования"
29
+ className={styles.list}
30
+ disabled={approved}
31
+ items={steps}
32
+ getId={(step) => step.id}
33
+ getLabel={(step) => step.title}
34
+ onReorder={(id, beforeId) =>
35
+ setSteps((current) => moveBefore(current, id, beforeId, (step) => step.id))
36
+ }
37
+ renderItem={(step) => (
38
+ <Dnd.SortableItem id={step.id} disabled={step.signed} className={styles.row}>
39
+ <span className={styles.rowText}>
40
+ <Typography as="span" variant="body-m">
41
+ {step.title}
42
+ </Typography>
43
+ <Typography as="span" variant="caption" tone="muted">
44
+ {step.person}
45
+ </Typography>
46
+ </span>
47
+ {step.signed ? <Badge.Root color="green">Подписано</Badge.Root> : null}
48
+ </Dnd.SortableItem>
49
+ )}
50
+ />
51
+ </Dnd.Root>
52
+ </div>
53
+ );
54
+ }
@@ -0,0 +1,113 @@
1
+ /** A project estimate as a table: each stage is its own body of rows under a heading row that never moves, a row is carried by its grip within a stage or into another, and the rows stay table rows — `as`, `header`, `kind`, `handle`. */
2
+ import { Dnd, moveBefore, Typography, VisuallyHidden } from "prime-ui-kit";
3
+ import * as React from "react";
4
+
5
+ import styles from "./examples.module.css";
6
+
7
+ type Line = { id: string; title: string; hours: number };
8
+ type Stage = { id: string; title: string; lines: Line[] };
9
+
10
+ const ESTIMATE: Stage[] = [
11
+ {
12
+ id: "analysis",
13
+ title: "Обследование",
14
+ lines: [
15
+ { id: "interviews", title: "Интервью с отделом продаж", hours: 12 },
16
+ { id: "processes", title: "Описание процессов", hours: 20 },
17
+ ],
18
+ },
19
+ {
20
+ id: "setup",
21
+ title: "Настройка",
22
+ lines: [
23
+ { id: "roles", title: "Роли и права доступа", hours: 8 },
24
+ { id: "import", title: "Перенос клиентской базы", hours: 16 },
25
+ { id: "training", title: "Обучение менеджеров", hours: 6 },
26
+ ],
27
+ },
28
+ ];
29
+
30
+ /** Moves line `id` in front of `beforeId` (`null` — last) in stage `to`, from whichever stage holds it. */
31
+ const moveLine = (stages: Stage[], id: string, beforeId: string | null, to: string) => {
32
+ const line = stages.flatMap((stage) => stage.lines).find((item) => item.id === id);
33
+ if (!line) return stages;
34
+ return stages.map((stage) => {
35
+ const rest = stage.lines.filter((item) => item.id !== id);
36
+ if (stage.id !== to) return { ...stage, lines: rest };
37
+ return { ...stage, lines: moveBefore([...rest, line], id, beforeId, (item) => item.id) };
38
+ });
39
+ };
40
+
41
+ export default function DndTableExample() {
42
+ const [stages, setStages] = React.useState(ESTIMATE);
43
+
44
+ return (
45
+ <Dnd.Root>
46
+ <table className={styles.table}>
47
+ <caption className={styles.caption}>
48
+ <Typography as="span" variant="title-s">
49
+ Смета внедрения CRM
50
+ </Typography>
51
+ </caption>
52
+ <thead>
53
+ <tr>
54
+ <th scope="col" className={styles.grip}>
55
+ <VisuallyHidden>Порядок</VisuallyHidden>
56
+ </th>
57
+ <th scope="col" className={styles.cell}>
58
+ <Typography as="span" variant="caption" tone="muted">
59
+ Работа
60
+ </Typography>
61
+ </th>
62
+ <th scope="col" className={styles.numeric}>
63
+ <Typography as="span" variant="caption" tone="muted">
64
+ Часы
65
+ </Typography>
66
+ </th>
67
+ </tr>
68
+ </thead>
69
+ {stages.map((stage) => (
70
+ <Dnd.Sortable
71
+ key={stage.id}
72
+ as="tbody"
73
+ kind="estimate-line"
74
+ handle
75
+ aria-label={stage.title}
76
+ items={stage.lines}
77
+ getId={(line) => line.id}
78
+ getLabel={(line) => line.title}
79
+ onReorder={(id, beforeId) =>
80
+ setStages((current) => moveLine(current, id, beforeId, stage.id))
81
+ }
82
+ header={
83
+ <tr>
84
+ <th scope="colgroup" colSpan={3} className={styles.groupCell}>
85
+ <Typography as="span" variant="body-m">
86
+ {stage.title}
87
+ </Typography>
88
+ </th>
89
+ </tr>
90
+ }
91
+ renderItem={(line) => (
92
+ <Dnd.SortableItem id={line.id}>
93
+ <td className={styles.grip}>
94
+ <Dnd.Handle />
95
+ </td>
96
+ <td className={styles.cell}>
97
+ <Typography as="span" variant="body-m">
98
+ {line.title}
99
+ </Typography>
100
+ </td>
101
+ <td className={styles.numeric}>
102
+ <Typography as="span" variant="body-m">
103
+ {line.hours}
104
+ </Typography>
105
+ </td>
106
+ </Dnd.SortableItem>
107
+ )}
108
+ />
109
+ ))}
110
+ </table>
111
+ </Dnd.Root>
112
+ );
113
+ }
@@ -212,6 +212,7 @@ Motion: the scrim fades, the panel slides from its side over `slow` and leaves o
212
212
  | [dismiss.tsx](examples/dismiss.tsx) | An import closes only from its buttons, and not at all while it runs — `closeOnOutsideClick`, `closeOnEscape`. |
213
213
  | [controlled-open.tsx](examples/controlled-open.tsx) | The parent owns the state and opens the drawer from a link, without a trigger — `open`, `onOpenChange`. |
214
214
  | [in-form.tsx](examples/in-form.tsx) | A settings form in the panel: the footer button submits the form and an empty name shakes the field and keeps it open until it is filled — `Drawer.Body`, `Drawer.Footer`, `error`. |
215
+ | [screen.tsx](examples/screen.tsx) | A create form in a Drawer opened from the primary action in the app header: grouped fields, errors on submit with focus on the first invalid field, a loading submit, a toast and the new row in the list — `Drawer.Trigger`, `Drawer.Guard`. |
215
216
 
216
217
  ## Mistakes
217
218
  - A drawer without `Drawer.Footer` → add one: «Закрыть» for details, «Отмена» + the submit button for a form. The header × alone is not the end of the panel.
@@ -19,7 +19,7 @@ export default function DrawerDismissExample() {
19
19
  open={open}
20
20
  onOpenChange={setOpen}
21
21
  closeOnOutsideClick={false}
22
- closeOnEscape={!importing}
22
+ closeOnEscape={false}
23
23
  >
24
24
  <Drawer.Trigger>
25
25
  <Button.Root variant="soft" tone="neutral">
@@ -27,7 +27,9 @@ export default function DrawerDismissExample() {
27
27
  </Button.Root>
28
28
  </Drawer.Trigger>
29
29
  <Drawer.Content size="s">
30
- <Drawer.Header showClose={!importing}>
30
+ {/* While the import runs, the guard keeps «Отмена» in place, disabled. */}
31
+ <Drawer.Guard busy={importing} />
32
+ <Drawer.Header showClose={false}>
31
33
  <Drawer.Title>Импорт товаров</Drawer.Title>
32
34
  <Drawer.Description>catalog-october.xlsx · 1 240 строк</Drawer.Description>
33
35
  </Drawer.Header>
@@ -41,7 +43,7 @@ export default function DrawerDismissExample() {
41
43
  </Drawer.Body>
42
44
  <Drawer.Footer>
43
45
  <Drawer.Close>
44
- <Button.Root variant="outline" tone="neutral" disabled={importing}>
46
+ <Button.Root variant="outline" tone="neutral">
45
47
  Отмена
46
48
  </Button.Root>
47
49
  </Drawer.Close>
@@ -6,16 +6,3 @@
6
6
  flex-direction: column;
7
7
  gap: var(--prime-space-5);
8
8
  }
9
-
10
- /* overview.tsx: a term / value grid. */
11
- .details {
12
- display: grid;
13
- grid-template-columns: auto 1fr;
14
- gap: var(--prime-space-2) var(--prime-space-4);
15
- margin: 0;
16
- }
17
-
18
- .details dd {
19
- margin: 0;
20
- font-variant-numeric: tabular-nums;
21
- }
@@ -1,7 +1,5 @@
1
1
  /** A record card: its status and a ⋯ menu sit in the header before the close button, one tier smaller — `Drawer.Actions`. */
2
- import { Badge, Button, Drawer, Dropdown, Icon } from "prime-ui-kit";
3
-
4
- import styles from "./examples.module.css";
2
+ import { Badge, Button, DescriptionList, Drawer, Dropdown, Icon } from "prime-ui-kit";
5
3
 
6
4
  const DEAL = {
7
5
  title: "Сделка №1042",
@@ -42,12 +40,10 @@ export default function DrawerHeaderActionsExample() {
42
40
  </Drawer.Actions>
43
41
  </Drawer.Header>
44
42
  <Drawer.Body>
45
- <dl className={styles.details}>
46
- <dt>Сумма</dt>
47
- <dd>{DEAL.amount}</dd>
48
- <dt>Ответственный</dt>
49
- <dd>{DEAL.owner}</dd>
50
- </dl>
43
+ <DescriptionList.Root>
44
+ <DescriptionList.Item label="Сумма">{DEAL.amount}</DescriptionList.Item>
45
+ <DescriptionList.Item label="Ответственный">{DEAL.owner}</DescriptionList.Item>
46
+ </DescriptionList.Root>
51
47
  </Drawer.Body>
52
48
  <Drawer.Footer>
53
49
  <Drawer.Close>
@@ -1,8 +1,5 @@
1
1
  /** Order details next to the list: the three zones of every drawer — a header with a close button, a read-only body and a footer with Close and the main action — `Drawer.Trigger`, `Drawer.Body`, `Drawer.Footer`. */
2
- import { Button, Drawer, Typography } from "prime-ui-kit";
3
- import * as React from "react";
4
-
5
- import styles from "./examples.module.css";
2
+ import { Button, DescriptionList, Drawer } from "prime-ui-kit";
6
3
 
7
4
  const DETAILS = [
8
5
  { term: "Клиент", value: "Анна Смирнова" },
@@ -25,22 +22,13 @@ export default function DrawerOverviewExample() {
25
22
  <Drawer.Description>Оформлен 3 октября</Drawer.Description>
26
23
  </Drawer.Header>
27
24
  <Drawer.Body>
28
- <dl className={styles.details}>
25
+ <DescriptionList.Root>
29
26
  {DETAILS.map(({ term, value }) => (
30
- <React.Fragment key={term}>
31
- <dt>
32
- <Typography as="span" variant="body-m" tone="muted">
33
- {term}
34
- </Typography>
35
- </dt>
36
- <dd>
37
- <Typography as="span" variant="body-m">
38
- {value}
39
- </Typography>
40
- </dd>
41
- </React.Fragment>
27
+ <DescriptionList.Item key={term} label={term}>
28
+ {value}
29
+ </DescriptionList.Item>
42
30
  ))}
43
- </dl>
31
+ </DescriptionList.Root>
44
32
  </Drawer.Body>
45
33
  <Drawer.Footer>
46
34
  <Drawer.Close>
@@ -0,0 +1,14 @@
1
+ /* Form in a Drawer: group → group 32; a Fieldset sets heading → fields 16 and field → field 20. */
2
+
3
+ .form {
4
+ display: grid;
5
+ gap: var(--prime-space-8);
6
+ }
7
+
8
+ /* Two short fields side by side when the panel is wide enough; tops aligned. */
9
+ .pair {
10
+ display: grid;
11
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, calc(var(--prime-space-16) * 3)), 1fr));
12
+ align-items: start;
13
+ gap: var(--prime-space-5);
14
+ }
@@ -0,0 +1,298 @@
1
+ /** A create form in a Drawer opened from the primary action in the app header: grouped fields, errors on submit with focus on the first invalid field, a loading submit, a toast and the new row in the list — `Drawer.Trigger`, `Drawer.Guard`. */
2
+ import {
3
+ AppHeader,
4
+ Badge,
5
+ Button,
6
+ Checkbox,
7
+ DataTable,
8
+ type DataTableColumn,
9
+ Drawer,
10
+ Fieldset,
11
+ Icon,
12
+ Input,
13
+ PageContent,
14
+ PageToolbar,
15
+ Radio,
16
+ Select,
17
+ SmartFilter,
18
+ Textarea,
19
+ useNotifications,
20
+ } from "prime-ui-kit";
21
+ import * as React from "react";
22
+
23
+ import styles from "./screen.module.css";
24
+
25
+ type Client = { id: string; name: string; kind: "company" | "person"; manager: string };
26
+ type Errors = Partial<Record<"name" | "inn" | "email", string>>;
27
+
28
+ const MANAGERS = ["Анна Климова", "Илья Петров", "Марат Хасанов"];
29
+
30
+ const CLIENTS: Client[] = [
31
+ { id: "c1", name: "ООО «Северный ветер»", kind: "company", manager: "Анна Климова" },
32
+ { id: "c2", name: "АО «Техностиль»", kind: "company", manager: "Илья Петров" },
33
+ { id: "c3", name: "ИП Соколова М. А.", kind: "person", manager: "Анна Климова" },
34
+ ];
35
+
36
+ const COLUMNS: DataTableColumn<Client>[] = [
37
+ { id: "name", header: "Клиент", accessor: "name" },
38
+ {
39
+ id: "kind",
40
+ header: "Тип",
41
+ cell: (row) =>
42
+ row.kind === "company" ? (
43
+ <Badge.Root color="blue">Компания</Badge.Root>
44
+ ) : (
45
+ <Badge.Root color="purple">ИП</Badge.Root>
46
+ ),
47
+ },
48
+ { id: "manager", header: "Менеджер", accessor: "manager" },
49
+ ];
50
+
51
+ const CLIENT_WORDS = ["клиент", "клиента", "клиентов"] as const;
52
+ const COMPANY_WORDS = ["компания", "компании", "компаний"] as const;
53
+
54
+ /** «1 клиент», «3 клиента», «5 клиентов». */
55
+ const plural = (count: number, [one, few, many]: readonly [string, string, string]) => {
56
+ const tens = count % 100;
57
+ const ones = count % 10;
58
+ if (tens >= 11 && tens <= 14) return `${count} ${many}`;
59
+ if (ones === 1) return `${count} ${one}`;
60
+ if (ones >= 2 && ones <= 4) return `${count} ${few}`;
61
+ return `${count} ${many}`;
62
+ };
63
+
64
+ function validate(data: FormData): Errors {
65
+ const errors: Errors = {};
66
+ const name = String(data.get("name") ?? "").trim();
67
+ const inn = String(data.get("inn") ?? "").replace(/\s/g, "");
68
+ const email = String(data.get("email") ?? "").trim();
69
+ if (!name) errors.name = "Введите название клиента";
70
+ if (!/^\d{10}(\d{2})?$/.test(inn)) errors.inn = "ИНН — 10 цифр для компании или 12 для ИП";
71
+ if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email))
72
+ errors.email = "Введите почту в формате name@company.ru";
73
+ return errors;
74
+ }
75
+
76
+ export default function DrawerScreenExample() {
77
+ const { notify } = useNotifications();
78
+ const formId = React.useId();
79
+ const [clients, setClients] = React.useState(CLIENTS);
80
+ const [open, setOpen] = React.useState(false);
81
+ const [errors, setErrors] = React.useState<Errors>({});
82
+ const [saving, setSaving] = React.useState(false);
83
+ const [dirty, setDirty] = React.useState(false);
84
+ const [manager, setManager] = React.useState(MANAGERS[0]);
85
+ const [search, setSearch] = React.useState("");
86
+
87
+ // Drawer.Guard holds every way out while saving and asks before an edited form is discarded.
88
+ const changeOpen = (next: boolean) => {
89
+ setOpen(next);
90
+ if (!next) {
91
+ setErrors({});
92
+ setDirty(false);
93
+ }
94
+ };
95
+
96
+ const submit = (event: React.FormEvent<HTMLFormElement>) => {
97
+ event.preventDefault();
98
+ const form = event.currentTarget;
99
+ const data = new FormData(form);
100
+ const found = validate(data);
101
+ setErrors(found);
102
+ const firstInvalid = (["name", "inn", "email"] as const).find((key) => found[key]);
103
+ if (firstInvalid) {
104
+ form.querySelector<HTMLInputElement>(`[name="${firstInvalid}"]`)?.focus();
105
+ return;
106
+ }
107
+ setSaving(true);
108
+ window.setTimeout(() => {
109
+ const name = String(data.get("name")).trim();
110
+ setClients((list) => [
111
+ {
112
+ id: `c${list.length + 1}`,
113
+ name,
114
+ kind: data.get("kind") === "person" ? "person" : "company",
115
+ manager,
116
+ },
117
+ ...list,
118
+ ]);
119
+ setSaving(false);
120
+ setDirty(false);
121
+ setOpen(false);
122
+ notify({ tone: "success", title: "Клиент добавлен", description: name });
123
+ }, 900);
124
+ };
125
+
126
+ const query = search.trim().toLowerCase();
127
+ const shown = clients.filter((client) => client.name.toLowerCase().includes(query));
128
+ const people = clients.filter((client) => client.kind === "person").length;
129
+
130
+ return (
131
+ <>
132
+ {/* The page lives in the app header: the only h1, the counts under it, search and the one
133
+ primary action — the Drawer trigger — in the tools row; main has no PageContent.Header. */}
134
+ <AppHeader.Root>
135
+ <AppHeader.Start>
136
+ <AppHeader.Title>
137
+ Клиенты
138
+ <AppHeader.Description>
139
+ {plural(clients.length, CLIENT_WORDS)} ·{" "}
140
+ {plural(clients.length - people, COMPANY_WORDS)} и {people} ИП
141
+ </AppHeader.Description>
142
+ </AppHeader.Title>
143
+ </AppHeader.Start>
144
+ <AppHeader.Tools>
145
+ <SmartFilter.Root fields={[]} search={search} onSearchChange={setSearch}>
146
+ <PageToolbar.Root aria-label="Клиенты">
147
+ <PageToolbar.Tools>
148
+ <SmartFilter.Toolbar />
149
+ </PageToolbar.Tools>
150
+ <PageToolbar.Actions>
151
+ <Drawer.Root open={open} onOpenChange={changeOpen}>
152
+ <Drawer.Trigger>
153
+ <Button.Root>
154
+ <Button.Icon>
155
+ <Icon name="action.add" />
156
+ </Button.Icon>
157
+ Новый клиент
158
+ </Button.Root>
159
+ </Drawer.Trigger>
160
+ <Drawer.Content>
161
+ <Drawer.Header>
162
+ <Drawer.Title>Новый клиент</Drawer.Title>
163
+ <Drawer.Description>
164
+ Появится в списке и в выборе клиента при выставлении счёта.
165
+ </Drawer.Description>
166
+ </Drawer.Header>
167
+ <Drawer.Body>
168
+ <Drawer.Guard busy={saving} dirty={dirty} />
169
+ <form
170
+ id={formId}
171
+ className={styles.form}
172
+ noValidate
173
+ onSubmit={submit}
174
+ onChange={() => setDirty(true)}
175
+ >
176
+ <Fieldset label="Реквизиты" disabled={saving}>
177
+ <Radio.Group
178
+ name="kind"
179
+ label="Тип клиента"
180
+ defaultValue="company"
181
+ orientation="horizontal"
182
+ >
183
+ <Radio.Root value="company">
184
+ <Radio.Label>Компания</Radio.Label>
185
+ </Radio.Root>
186
+ <Radio.Root value="person">
187
+ <Radio.Label>ИП</Radio.Label>
188
+ </Radio.Root>
189
+ </Radio.Group>
190
+ <Input.Root label="Название" error={errors.name}>
191
+ <Input.Wrapper>
192
+ <Input.Field
193
+ name="name"
194
+ placeholder="ООО «Ромашка»"
195
+ autoComplete="organization"
196
+ />
197
+ </Input.Wrapper>
198
+ </Input.Root>
199
+ <div className={styles.pair}>
200
+ <Input.Root label="ИНН" error={errors.inn} reserveSupportRow>
201
+ <Input.Wrapper>
202
+ <Input.Field
203
+ name="inn"
204
+ inputMode="numeric"
205
+ placeholder="7704512908"
206
+ />
207
+ </Input.Wrapper>
208
+ </Input.Root>
209
+ <Input.Root label="КПП" optional reserveSupportRow>
210
+ <Input.Wrapper>
211
+ <Input.Field
212
+ name="kpp"
213
+ inputMode="numeric"
214
+ placeholder="770401001"
215
+ />
216
+ </Input.Wrapper>
217
+ </Input.Root>
218
+ </div>
219
+ </Fieldset>
220
+ <Fieldset label="Контакты" disabled={saving}>
221
+ <Input.Root
222
+ label="Почта для счетов"
223
+ error={errors.email}
224
+ hint="На неё уйдут счета и акты"
225
+ >
226
+ <Input.Wrapper>
227
+ <Input.Icon side="start">
228
+ <Icon name="field.email" />
229
+ </Input.Icon>
230
+ <Input.Field
231
+ name="email"
232
+ type="email"
233
+ placeholder="billing@company.ru"
234
+ />
235
+ </Input.Wrapper>
236
+ </Input.Root>
237
+ <Select.Root
238
+ label="Менеджер"
239
+ value={manager}
240
+ onValueChange={(next) => {
241
+ setManager(next);
242
+ setDirty(true);
243
+ }}
244
+ >
245
+ <Select.Trigger>
246
+ <Select.Value />
247
+ </Select.Trigger>
248
+ <Select.Content>
249
+ {MANAGERS.map((name) => (
250
+ <Select.Item key={name} value={name}>
251
+ {name}
252
+ </Select.Item>
253
+ ))}
254
+ </Select.Content>
255
+ </Select.Root>
256
+ <Textarea.Root name="note" label="Комментарий" optional rows={2} />
257
+ <Checkbox.Root
258
+ name="invite"
259
+ defaultChecked
260
+ hint="Клиент увидит свои счета и акты онлайн"
261
+ >
262
+ <Checkbox.Label>Пригласить в личный кабинет</Checkbox.Label>
263
+ </Checkbox.Root>
264
+ </Fieldset>
265
+ </form>
266
+ </Drawer.Body>
267
+ <Drawer.Footer>
268
+ <Drawer.Close>
269
+ <Button.Root variant="outline" tone="neutral">
270
+ Отмена
271
+ </Button.Root>
272
+ </Drawer.Close>
273
+ <Button.Root type="submit" form={formId} loading={saving}>
274
+ Добавить клиента
275
+ </Button.Root>
276
+ </Drawer.Footer>
277
+ </Drawer.Content>
278
+ </Drawer.Root>
279
+ </PageToolbar.Actions>
280
+ </PageToolbar.Root>
281
+ </SmartFilter.Root>
282
+ </AppHeader.Tools>
283
+ </AppHeader.Root>
284
+
285
+ <PageContent.Root>
286
+ <PageContent.Body>
287
+ <DataTable
288
+ columns={COLUMNS}
289
+ rows={shown}
290
+ getRowKey={(row) => row.id}
291
+ paging="none"
292
+ empty="Клиентов не найдено"
293
+ />
294
+ </PageContent.Body>
295
+ </PageContent.Root>
296
+ </>
297
+ );
298
+ }
@@ -8,15 +8,11 @@
8
8
  max-width: calc(var(--prime-space-24) * 3);
9
9
  }
10
10
 
11
- /* overview.tsx: a list row — the record on the left, its actions button at the end. */
11
+ /* overview.tsx: the record on the left, its actions button at the end. */
12
12
  .row {
13
13
  display: flex;
14
14
  align-items: center;
15
15
  justify-content: space-between;
16
16
  gap: var(--prime-space-4);
17
17
  width: min(100%, calc(var(--prime-space-24) * 4));
18
- padding-block: var(--prime-space-1);
19
- padding-inline: var(--prime-space-4) var(--prime-space-1);
20
- border-radius: var(--prime-radius-l);
21
- background: var(--prime-color-layer-nested);
22
18
  }
@@ -148,7 +148,7 @@ EmptyPage.Root centered column; size, layout, tone (role="alert" w
148
148
  | [variants.tsx](examples/variants.tsx) | The tone tells why the area is empty: no data yet, a first run, or a failed load with a retry — `tone`, `EmptyPage.RetryButton`. |
149
149
  | [sizes.tsx](examples/sizes.tsx) | Every tier changes the icon tile, the title and the padding; buttons in Actions take the same size — `size`. |
150
150
  | [data-region.tsx](examples/data-region.tsx) | An empty data region: the empty state stretches over the rest of a card with a header — `layout`. |
151
- | [region-error.tsx](examples/region-error.tsx) | A data region that failed to load: the error state takes the region, the retry shows its loading until the data cross-fades in — `tone`, `layout`, `EmptyPage.RetryButton`, `onRetry`. |
151
+ | [region-error.tsx](examples/region-error.tsx) | A data region that failed to load: the error state takes the region, the retry shows its loading until the data cross-fades in; its text comes from labels — `tone`, `layout`, `EmptyPage.RetryButton`, `onRetry`, `labels`. |
152
152
  | [compact.tsx](examples/compact.tsx) | The quiet empty state of a search panel: no entrance motion, smaller text, a paragraph title, one action — `layout`, `as`. |
153
153
  | [narrow.tsx](examples/narrow.tsx) | In a 320 px side panel the text wraps under the tile and the actions wrap to a second line. |
154
154
 
@@ -1,4 +1,4 @@
1
- /** A data region that failed to load: the error state takes the region, the retry shows its loading until the data cross-fades in — `tone`, `layout`, `EmptyPage.RetryButton`, `onRetry`. */
1
+ /** A data region that failed to load: the error state takes the region, the retry shows its loading until the data cross-fades in; its text comes from labels — `tone`, `layout`, `EmptyPage.RetryButton`, `onRetry`, `labels`. */
2
2
  import { Button, Card, Crossfade, EmptyPage, Icon, Skeleton, Typography } from "prime-ui-kit";
3
3
  import * as React from "react";
4
4
 
@@ -53,7 +53,13 @@ export default function EmptyPageRegionErrorExample() {
53
53
  {state === "loading" ? (
54
54
  <Skeleton lines={3} />
55
55
  ) : state === "error" ? (
56
- <EmptyPage.Root layout="fill" size="s" tone="danger" aria-labelledby="invoices-error">
56
+ <EmptyPage.Root
57
+ layout="fill"
58
+ size="s"
59
+ tone="danger"
60
+ labels={{ retry: "Загрузить снова" }}
61
+ aria-labelledby="invoices-error"
62
+ >
57
63
  <EmptyPage.Icon>
58
64
  <Icon name="status.offline" />
59
65
  </EmptyPage.Icon>