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,139 @@
1
+ /** Specs of a plan on one line each: an icon picker and a color swatch take compact columns, the first three specs are pinned with a lock and the rest reorder below them — `getLocked`, `width`, `reorderable`. */
2
+ import {
3
+ ColorPresets,
4
+ FieldList,
5
+ type FieldListColumn,
6
+ Icon,
7
+ type IconName,
8
+ Input,
9
+ Select,
10
+ } from "prime-ui-kit";
11
+ import * as React from "react";
12
+
13
+ type Spec = {
14
+ id: string;
15
+ icon: IconName;
16
+ name: string;
17
+ value: string;
18
+ color: string;
19
+ pinned?: boolean;
20
+ };
21
+
22
+ const COLUMNS: FieldListColumn[] = [
23
+ { label: "Иконка", width: "compact" },
24
+ { label: "Параметр" },
25
+ { label: "Значение" },
26
+ { label: "Цвет", width: "compact" },
27
+ ];
28
+
29
+ const ICONS: { name: IconName; label: string }[] = [
30
+ { name: "object.users", label: "Пользователи" },
31
+ { name: "object.storage", label: "Хранилище" },
32
+ { name: "object.headset", label: "Поддержка" },
33
+ { name: "object.chart", label: "Отчёты" },
34
+ { name: "object.key", label: "Доступ" },
35
+ { name: "object.globe", label: "Интеграции" },
36
+ ];
37
+
38
+ const SPECS: Spec[] = [
39
+ {
40
+ id: "seats",
41
+ icon: "object.users",
42
+ name: "Сотрудники",
43
+ value: "до 50",
44
+ color: "#5068f5",
45
+ pinned: true,
46
+ },
47
+ {
48
+ id: "storage",
49
+ icon: "object.storage",
50
+ name: "Хранилище",
51
+ value: "200 ГБ",
52
+ color: "#22c55e",
53
+ pinned: true,
54
+ },
55
+ {
56
+ id: "support",
57
+ icon: "object.headset",
58
+ name: "Поддержка",
59
+ value: "8/5",
60
+ color: "#f97316",
61
+ pinned: true,
62
+ },
63
+ { id: "reports", icon: "object.chart", name: "Отчёты", value: "12 шаблонов", color: "#a855f7" },
64
+ { id: "sso", icon: "object.key", name: "Вход через SSO", value: "SAML, OIDC", color: "#14b8a6" },
65
+ ];
66
+
67
+ export default function FieldListLockedExample() {
68
+ const [specs, setSpecs] = React.useState(SPECS);
69
+
70
+ return (
71
+ <FieldList
72
+ label="Характеристики тарифа"
73
+ columns={COLUMNS}
74
+ reorderable
75
+ value={specs}
76
+ onValueChange={setSpecs}
77
+ getId={(spec) => spec.id}
78
+ getLabel={(spec) => spec.name}
79
+ getLocked={(spec) => spec.pinned ?? false}
80
+ createItem={(): Spec => ({
81
+ id: crypto.randomUUID(),
82
+ icon: "object.globe",
83
+ name: "",
84
+ value: "",
85
+ color: "#14b8a6",
86
+ })}
87
+ addLabel="Добавить характеристику"
88
+ renderItem={(spec, row) => (
89
+ <>
90
+ <Select.Root
91
+ value={spec.icon}
92
+ onValueChange={(icon) => row.update({ icon: icon as IconName })}
93
+ >
94
+ <Select.Trigger>
95
+ <Select.TriggerIcon>
96
+ <Icon name={spec.icon} />
97
+ </Select.TriggerIcon>
98
+ </Select.Trigger>
99
+ <Select.Content>
100
+ {ICONS.map((icon) => (
101
+ <Select.Item key={icon.name} value={icon.name}>
102
+ <Select.ItemIcon>
103
+ <Icon name={icon.name} />
104
+ </Select.ItemIcon>
105
+ {icon.label}
106
+ </Select.Item>
107
+ ))}
108
+ </Select.Content>
109
+ </Select.Root>
110
+ <Input.Root>
111
+ <Input.Wrapper>
112
+ <Input.Field
113
+ value={spec.name}
114
+ onChange={(event) => row.update({ name: event.target.value })}
115
+ />
116
+ </Input.Wrapper>
117
+ </Input.Root>
118
+ <Input.Root>
119
+ <Input.Wrapper>
120
+ <Input.Field
121
+ value={spec.value}
122
+ onChange={(event) => row.update({ value: event.target.value })}
123
+ />
124
+ </Input.Wrapper>
125
+ </Input.Root>
126
+ <ColorPresets.Root
127
+ value={spec.color}
128
+ onValueChange={(color) => row.update({ color: color ?? spec.color })}
129
+ >
130
+ <ColorPresets.Trigger>
131
+ <ColorPresets.SwatchButton />
132
+ </ColorPresets.Trigger>
133
+ <ColorPresets.Content />
134
+ </ColorPresets.Root>
135
+ </>
136
+ )}
137
+ />
138
+ );
139
+ }
@@ -0,0 +1,68 @@
1
+ /** The invoice lines in a 320 px column: the headings give way, each row stacks its fields with their own labels and rows stand a group apart — `columns`. */
2
+ import { FieldList, type FieldListColumn, Input } from "prime-ui-kit";
3
+ import * as React from "react";
4
+
5
+ import styles from "./examples.module.css";
6
+
7
+ type Line = { id: string; service: string; quantity: string; price: string };
8
+
9
+ const COLUMNS: FieldListColumn[] = [
10
+ { label: "Услуга" },
11
+ { label: "Кол-во", width: "s" },
12
+ { label: "Цена", width: "m" },
13
+ ];
14
+
15
+ const LINES: Line[] = [
16
+ { id: "setup", service: "Внедрение CRM", quantity: "1", price: "180 000" },
17
+ { id: "training", service: "Обучение менеджеров", quantity: "3", price: "15 000" },
18
+ ];
19
+
20
+ export default function FieldListNarrowExample() {
21
+ const [lines, setLines] = React.useState(LINES);
22
+
23
+ return (
24
+ <div className={styles.narrow}>
25
+ <FieldList
26
+ label="Позиции счёта"
27
+ columns={COLUMNS}
28
+ value={lines}
29
+ onValueChange={setLines}
30
+ getId={(line) => line.id}
31
+ getLabel={(line) => line.service}
32
+ createItem={() => ({ id: crypto.randomUUID(), service: "", quantity: "1", price: "" })}
33
+ addLabel="Добавить позицию"
34
+ renderItem={(line, row) => (
35
+ <>
36
+ <Input.Root>
37
+ <Input.Wrapper>
38
+ <Input.Field
39
+ value={line.service}
40
+ onChange={(event) => row.update({ service: event.target.value })}
41
+ />
42
+ </Input.Wrapper>
43
+ </Input.Root>
44
+ <Input.Root>
45
+ <Input.Wrapper>
46
+ <Input.Field
47
+ value={line.quantity}
48
+ inputMode="numeric"
49
+ onChange={(event) => row.update({ quantity: event.target.value })}
50
+ />
51
+ </Input.Wrapper>
52
+ </Input.Root>
53
+ <Input.Root>
54
+ <Input.Wrapper>
55
+ <Input.Field
56
+ value={line.price}
57
+ inputMode="decimal"
58
+ onChange={(event) => row.update({ price: event.target.value })}
59
+ />
60
+ <Input.InlineAffix side="end">₽</Input.InlineAffix>
61
+ </Input.Wrapper>
62
+ </Input.Root>
63
+ </>
64
+ )}
65
+ />
66
+ </div>
67
+ );
68
+ }
@@ -0,0 +1,66 @@
1
+ /** Lines of an invoice: the column headings stand once above the rows, each row has a remove button and the add button sits under them — `columns`, `renderItem`, `createItem`, `addLabel`. */
2
+ import { FieldList, type FieldListColumn, Input } from "prime-ui-kit";
3
+ import * as React from "react";
4
+
5
+ type Line = { id: string; service: string; quantity: string; price: string };
6
+
7
+ const COLUMNS: FieldListColumn[] = [
8
+ { label: "Услуга" },
9
+ { label: "Кол-во", width: "s" },
10
+ { label: "Цена", width: "m" },
11
+ ];
12
+
13
+ const LINES: Line[] = [
14
+ { id: "setup", service: "Внедрение CRM", quantity: "1", price: "180 000" },
15
+ { id: "training", service: "Обучение менеджеров", quantity: "3", price: "15 000" },
16
+ ];
17
+
18
+ export default function FieldListOverviewExample() {
19
+ const [lines, setLines] = React.useState(LINES);
20
+
21
+ return (
22
+ <FieldList
23
+ label="Позиции счёта"
24
+ columns={COLUMNS}
25
+ value={lines}
26
+ onValueChange={setLines}
27
+ getId={(line) => line.id}
28
+ getLabel={(line) => line.service}
29
+ createItem={() => ({ id: crypto.randomUUID(), service: "", quantity: "1", price: "" })}
30
+ addLabel="Добавить позицию"
31
+ renderItem={(line, row) => (
32
+ <>
33
+ <Input.Root>
34
+ <Input.Wrapper>
35
+ <Input.Field
36
+ value={line.service}
37
+ placeholder="Поддержка, 1 месяц"
38
+ onChange={(event) => row.update({ service: event.target.value })}
39
+ />
40
+ </Input.Wrapper>
41
+ </Input.Root>
42
+ <Input.Root>
43
+ <Input.Wrapper>
44
+ <Input.Field
45
+ value={line.quantity}
46
+ inputMode="numeric"
47
+ onChange={(event) => row.update({ quantity: event.target.value })}
48
+ />
49
+ </Input.Wrapper>
50
+ </Input.Root>
51
+ <Input.Root>
52
+ <Input.Wrapper>
53
+ <Input.Field
54
+ value={line.price}
55
+ inputMode="decimal"
56
+ placeholder="0"
57
+ onChange={(event) => row.update({ price: event.target.value })}
58
+ />
59
+ <Input.InlineAffix side="end">₽</Input.InlineAffix>
60
+ </Input.Wrapper>
61
+ </Input.Root>
62
+ </>
63
+ )}
64
+ />
65
+ );
66
+ }
@@ -0,0 +1,42 @@
1
+ /** Selling points of a plan in the order of the pricing page: a one-column list has no headings and no numbers, a point moves by its handle or Alt+arrows — `reorderable`, `getLabel`. */
2
+ import { FieldList, type FieldListColumn, Input } from "prime-ui-kit";
3
+ import * as React from "react";
4
+
5
+ type Point = { id: string; text: string };
6
+
7
+ const COLUMNS: FieldListColumn[] = [{ label: "Преимущество" }];
8
+
9
+ const POINTS: Point[] = [
10
+ { id: "users", text: "До 50 сотрудников в одном пространстве" },
11
+ { id: "storage", text: "200 ГБ для документов и вложений" },
12
+ { id: "support", text: "Поддержка в рабочие часы, ответ за 2 часа" },
13
+ { id: "api", text: "Доступ к API и вебхукам" },
14
+ ];
15
+
16
+ export default function FieldListReorderExample() {
17
+ const [points, setPoints] = React.useState(POINTS);
18
+
19
+ return (
20
+ <FieldList
21
+ label="Преимущества тарифа"
22
+ columns={COLUMNS}
23
+ reorderable
24
+ value={points}
25
+ onValueChange={setPoints}
26
+ getId={(point) => point.id}
27
+ getLabel={(point) => point.text}
28
+ createItem={() => ({ id: crypto.randomUUID(), text: "" })}
29
+ addLabel="Добавить преимущество"
30
+ renderItem={(point, row) => (
31
+ <Input.Root>
32
+ <Input.Wrapper>
33
+ <Input.Field
34
+ value={point.text}
35
+ onChange={(event) => row.update({ text: event.target.value })}
36
+ />
37
+ </Input.Wrapper>
38
+ </Input.Root>
39
+ )}
40
+ />
41
+ );
42
+ }
@@ -0,0 +1,18 @@
1
+ /* Record editor: the sections are PageContent.Section layout="aside"; here only the panels' insides. */
2
+
3
+ /* Two groups in one panel, a group apart. */
4
+ .groups {
5
+ display: grid;
6
+ gap: var(--prime-space-8);
7
+ }
8
+
9
+ /* One value in three currencies: one row while there is room, the unit inside each field. */
10
+ .currencies {
11
+ display: grid;
12
+ grid-template-columns: repeat(
13
+ auto-fit,
14
+ minmax(min(100%, calc(var(--prime-space-24) + var(--prime-space-8))), 1fr)
15
+ );
16
+ align-items: start;
17
+ gap: var(--prime-space-3);
18
+ }
@@ -0,0 +1,316 @@
1
+ /** A record editor as a document page, a long form whose title, description and save stand in the content header: a plan's name, its specs and prices in one form; repeating records as FieldList rows with the headings once, a base price pinned above its changes, one value in three currencies in one row — `getLocked`, `compact`. */
2
+ import {
3
+ Button,
4
+ Card,
5
+ ColorPresets,
6
+ FieldList,
7
+ type FieldListColumn,
8
+ Fieldset,
9
+ Icon,
10
+ type IconName,
11
+ Input,
12
+ PageContent,
13
+ Select,
14
+ Textarea,
15
+ } from "prime-ui-kit";
16
+ import * as React from "react";
17
+
18
+ import styles from "./screen.module.css";
19
+
20
+ type Spec = {
21
+ id: string;
22
+ icon: IconName;
23
+ name: string;
24
+ value: string;
25
+ color: string;
26
+ pinned?: boolean;
27
+ };
28
+ type Period = { id: string; from: string; price: string; base?: boolean };
29
+
30
+ const SPEC_COLUMNS: FieldListColumn[] = [
31
+ { label: "Иконка", width: "compact" },
32
+ { label: "Параметр" },
33
+ { label: "Значение" },
34
+ { label: "Цвет", width: "compact" },
35
+ ];
36
+
37
+ const SPEC_ICONS: { name: IconName; label: string }[] = [
38
+ { name: "object.users", label: "Сотрудники" },
39
+ { name: "object.storage", label: "Хранилище" },
40
+ { name: "object.headset", label: "Поддержка" },
41
+ { name: "object.chart", label: "Отчёты" },
42
+ { name: "object.key", label: "Доступ" },
43
+ { name: "object.globe", label: "Интеграции" },
44
+ ];
45
+
46
+ const SPECS: Spec[] = [
47
+ {
48
+ id: "seats",
49
+ icon: "object.users",
50
+ name: "Сотрудники",
51
+ value: "до 50",
52
+ color: "#5068f5",
53
+ pinned: true,
54
+ },
55
+ {
56
+ id: "storage",
57
+ icon: "object.storage",
58
+ name: "Хранилище",
59
+ value: "200 ГБ",
60
+ color: "#22c55e",
61
+ pinned: true,
62
+ },
63
+ {
64
+ id: "support",
65
+ icon: "object.headset",
66
+ name: "Поддержка",
67
+ value: "8/5, ответ за 2 часа",
68
+ color: "#f97316",
69
+ pinned: true,
70
+ },
71
+ { id: "reports", icon: "object.chart", name: "Отчёты", value: "12 шаблонов", color: "#a855f7" },
72
+ { id: "sso", icon: "object.key", name: "Вход через SSO", value: "SAML, OIDC", color: "#14b8a6" },
73
+ ];
74
+
75
+ const PRICE_COLUMNS: FieldListColumn[] = [{ label: "Действует" }, { label: "Цена", width: "m" }];
76
+
77
+ const MONTHS = [
78
+ { value: "01", label: "С 1 января" },
79
+ { value: "04", label: "С 1 апреля" },
80
+ { value: "07", label: "С 1 июля" },
81
+ { value: "10", label: "С 1 октября" },
82
+ ];
83
+
84
+ const PERIODS: Period[] = [
85
+ { id: "base", from: "", price: "4 900", base: true },
86
+ { id: "autumn", from: "10", price: "5 400" },
87
+ ];
88
+
89
+ const SETUP_FEE = [
90
+ { currency: "₽", name: "setupRub", label: "Подключение в рублях", value: "15 000" },
91
+ { currency: "$", name: "setupUsd", label: "Подключение в долларах", value: "170" },
92
+ { currency: "€", name: "setupEur", label: "Подключение в евро", value: "" },
93
+ ];
94
+
95
+ const SAVE_MS = 900;
96
+ const SAVED_MS = 2000;
97
+
98
+ export default function FieldListScreenExample() {
99
+ const formId = React.useId();
100
+ const [specs, setSpecs] = React.useState(SPECS);
101
+ const [periods, setPeriods] = React.useState(PERIODS);
102
+ const [nameError, setNameError] = React.useState<string>();
103
+ const [saving, setSaving] = React.useState(false);
104
+ const [saved, setSaved] = React.useState(false);
105
+
106
+ const save = (event: React.FormEvent<HTMLFormElement>) => {
107
+ event.preventDefault();
108
+ const name = String(new FormData(event.currentTarget).get("name") ?? "").trim();
109
+ if (name === "") {
110
+ setNameError("Назовите тариф: так его увидят клиенты");
111
+ event.currentTarget.querySelector<HTMLInputElement>("[name='name']")?.focus();
112
+ return;
113
+ }
114
+ setNameError(undefined);
115
+ setSaving(true);
116
+ window.setTimeout(() => {
117
+ setSaving(false);
118
+ setSaved(true);
119
+ window.setTimeout(() => setSaved(false), SAVED_MS);
120
+ }, SAVE_MS);
121
+ };
122
+
123
+ return (
124
+ <PageContent.Root maxWidth="wide" aria-labelledby="plan-title">
125
+ <PageContent.Header>
126
+ <PageContent.Title id="plan-title">Тариф «Команда»</PageContent.Title>
127
+ <PageContent.Description>
128
+ Так тариф выглядит на странице цен и в счетах.
129
+ </PageContent.Description>
130
+ <PageContent.Actions>
131
+ <Button.Root type="submit" form={formId} loading={saving}>
132
+ {saved ? "Сохранено" : "Сохранить тариф"}
133
+ </Button.Root>
134
+ </PageContent.Actions>
135
+ </PageContent.Header>
136
+ <PageContent.Body>
137
+ <PageContent.Section layout="aside" label="Основное">
138
+ <form id={formId} noValidate onSubmit={save}>
139
+ <Card.Root variant="panel">
140
+ <Card.Body>
141
+ <Fieldset disabled={saving} aria-label="Основное">
142
+ <Input.Root label="Название" error={nameError}>
143
+ <Input.Wrapper>
144
+ <Input.Field name="name" defaultValue="Команда" />
145
+ </Input.Wrapper>
146
+ </Input.Root>
147
+ <Textarea.Root
148
+ name="summary"
149
+ label="Описание"
150
+ optional
151
+ rows={2}
152
+ defaultValue="Для отделов до 50 человек: задачи, документы и отчёты в одном месте."
153
+ />
154
+ </Fieldset>
155
+ </Card.Body>
156
+ </Card.Root>
157
+ </form>
158
+ </PageContent.Section>
159
+
160
+ <PageContent.Section layout="aside" label="Характеристики">
161
+ <Card.Root variant="panel">
162
+ <Card.Body>
163
+ <FieldList
164
+ aria-label="Характеристики"
165
+ disabled={saving}
166
+ columns={SPEC_COLUMNS}
167
+ reorderable
168
+ value={specs}
169
+ onValueChange={setSpecs}
170
+ getId={(spec) => spec.id}
171
+ getLabel={(spec) => spec.name}
172
+ getLocked={(spec) => spec.pinned ?? false}
173
+ createItem={(): Spec => ({
174
+ id: crypto.randomUUID(),
175
+ icon: "object.globe",
176
+ name: "",
177
+ value: "",
178
+ color: "#14b8a6",
179
+ })}
180
+ addLabel="Добавить характеристику"
181
+ renderItem={(spec, row) => (
182
+ <>
183
+ <Select.Root
184
+ value={spec.icon}
185
+ onValueChange={(icon) => row.update({ icon: icon as IconName })}
186
+ >
187
+ <Select.Trigger>
188
+ <Select.TriggerIcon>
189
+ <Icon name={spec.icon} />
190
+ </Select.TriggerIcon>
191
+ </Select.Trigger>
192
+ <Select.Content>
193
+ {SPEC_ICONS.map((icon) => (
194
+ <Select.Item key={icon.name} value={icon.name}>
195
+ <Select.ItemIcon>
196
+ <Icon name={icon.name} />
197
+ </Select.ItemIcon>
198
+ {icon.label}
199
+ </Select.Item>
200
+ ))}
201
+ </Select.Content>
202
+ </Select.Root>
203
+ <Input.Root>
204
+ <Input.Wrapper>
205
+ <Input.Field
206
+ value={spec.name}
207
+ onChange={(event) => row.update({ name: event.target.value })}
208
+ />
209
+ </Input.Wrapper>
210
+ </Input.Root>
211
+ <Input.Root>
212
+ <Input.Wrapper>
213
+ <Input.Field
214
+ value={spec.value}
215
+ onChange={(event) => row.update({ value: event.target.value })}
216
+ />
217
+ </Input.Wrapper>
218
+ </Input.Root>
219
+ <ColorPresets.Root
220
+ value={spec.color}
221
+ onValueChange={(color) => row.update({ color: color ?? spec.color })}
222
+ >
223
+ <ColorPresets.Trigger>
224
+ <ColorPresets.SwatchButton />
225
+ </ColorPresets.Trigger>
226
+ <ColorPresets.Content />
227
+ </ColorPresets.Root>
228
+ </>
229
+ )}
230
+ />
231
+ </Card.Body>
232
+ </Card.Root>
233
+ </PageContent.Section>
234
+
235
+ <PageContent.Section layout="aside" label="Стоимость">
236
+ <Card.Root variant="panel">
237
+ <Card.Body className={styles.groups}>
238
+ <Fieldset label="За месяц" disabled={saving}>
239
+ <FieldList
240
+ columns={PRICE_COLUMNS}
241
+ value={periods}
242
+ onValueChange={setPeriods}
243
+ getId={(period) => period.id}
244
+ getLocked={(period) => period.base ?? false}
245
+ createItem={() => ({ id: crypto.randomUUID(), from: "", price: "" })}
246
+ addLabel="Добавить изменение цены"
247
+ renderItem={(period, row) => (
248
+ <>
249
+ {period.base ? (
250
+ <Input.Root>
251
+ <Input.Wrapper>
252
+ <Input.Field value="Всегда, если нет изменений" readOnly />
253
+ </Input.Wrapper>
254
+ </Input.Root>
255
+ ) : (
256
+ <Select.Root
257
+ value={period.from}
258
+ onValueChange={(from) => row.update({ from })}
259
+ placeholder="Выберите месяц"
260
+ >
261
+ <Select.Trigger>
262
+ <Select.Value />
263
+ </Select.Trigger>
264
+ <Select.Content>
265
+ {MONTHS.map((month) => (
266
+ <Select.Item key={month.value} value={month.value}>
267
+ {month.label}
268
+ </Select.Item>
269
+ ))}
270
+ </Select.Content>
271
+ </Select.Root>
272
+ )}
273
+ <Input.Root>
274
+ <Input.Wrapper>
275
+ <Input.Field
276
+ value={period.price}
277
+ inputMode="decimal"
278
+ placeholder="0"
279
+ onChange={(event) => row.update({ price: event.target.value })}
280
+ />
281
+ <Input.InlineAffix side="end">₽</Input.InlineAffix>
282
+ </Input.Wrapper>
283
+ </Input.Root>
284
+ </>
285
+ )}
286
+ />
287
+ </Fieldset>
288
+ <Fieldset
289
+ label="Подключение"
290
+ description="Разовый платёж; пустая валюта не выставляется."
291
+ disabled={saving}
292
+ >
293
+ <div className={styles.currencies}>
294
+ {SETUP_FEE.map((fee) => (
295
+ <Input.Root key={fee.name}>
296
+ <Input.Wrapper>
297
+ <Input.Field
298
+ name={fee.name}
299
+ aria-label={fee.label}
300
+ inputMode="decimal"
301
+ placeholder="0"
302
+ defaultValue={fee.value}
303
+ />
304
+ <Input.InlineAffix side="end">{fee.currency}</Input.InlineAffix>
305
+ </Input.Wrapper>
306
+ </Input.Root>
307
+ ))}
308
+ </div>
309
+ </Fieldset>
310
+ </Card.Body>
311
+ </Card.Root>
312
+ </PageContent.Section>
313
+ </PageContent.Body>
314
+ </PageContent.Root>
315
+ );
316
+ }