prime-ui-kit 0.14.0 → 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 (490) hide show
  1. package/README.md +13 -14
  2. package/dist/chunks/{chunk-P6ZO37JM.js → chunk-2IKH55MI.js} +1 -1
  3. package/dist/chunks/{chunk-SYEX7OVT.js → chunk-THFZIHKU.js} +276 -263
  4. package/dist/chunks/{chunk-WXKRUVSE.js → chunk-XJAVS6FH.js} +49 -48
  5. package/dist/color-picker.js +2 -2
  6. package/dist/components/dnd/Dnd.d.ts +1 -1
  7. package/dist/components/login-form/LoginForm.d.ts +5 -1
  8. package/dist/index.css +1 -1
  9. package/dist/index.js +2 -2
  10. package/dist/internal/swatch.d.ts +6 -2
  11. package/dist/layout/app-header/AppHeader.d.ts +9 -28
  12. package/dist/layout/index.d.ts +1 -1
  13. package/dist/skill/SKILL.md +9 -7
  14. package/dist/skill/api-contract.md +2 -2
  15. package/dist/skill/cheatsheet.md +9 -2
  16. package/dist/skill/checklist.md +9 -5
  17. package/dist/skill/choosing.md +7 -9
  18. package/dist/skill/components.md +5 -12
  19. package/dist/skill/composition.md +281 -54
  20. package/dist/skill/foundations.md +1 -1
  21. package/dist/skill/layouts.md +70 -37
  22. package/dist/skill/reference/components/avatar/examples/states.tsx +4 -4
  23. package/dist/skill/reference/components/badge/examples/applied-filters.tsx +13 -19
  24. package/dist/skill/reference/components/badge/examples/examples.module.css +1 -8
  25. package/dist/skill/reference/components/badge/examples/server-tags.tsx +2 -6
  26. package/dist/skill/reference/components/banner/examples/examples.module.css +1 -5
  27. package/dist/skill/reference/components/banner/examples/page-strip.tsx +16 -22
  28. package/dist/skill/reference/components/breadcrumb/COMPONENT.md +4 -3
  29. package/dist/skill/reference/components/breadcrumb/examples/ellipsis.tsx +2 -2
  30. package/dist/skill/reference/components/button-group/COMPONENT.md +2 -2
  31. package/dist/skill/reference/components/button-group/examples/in-form.tsx +22 -2
  32. package/dist/skill/reference/components/button-group/examples/states.tsx +10 -1
  33. package/dist/skill/reference/components/card/COMPONENT.md +2 -1
  34. package/dist/skill/reference/components/card/examples/screen.tsx +362 -0
  35. package/dist/skill/reference/components/card/examples/variants.tsx +15 -1
  36. package/dist/skill/reference/components/chart-frame/COMPONENT.md +2 -1
  37. package/dist/skill/reference/components/chart-frame/examples/fill-height.tsx +119 -0
  38. package/dist/skill/reference/components/chart-frame/examples/states.tsx +3 -1
  39. package/dist/skill/reference/components/chat/COMPONENT.md +3 -1
  40. package/dist/skill/reference/components/chat/examples/group-chat.tsx +15 -2
  41. package/dist/skill/reference/components/chat/examples/reactions.tsx +121 -0
  42. package/dist/skill/reference/components/chat/examples/screen.module.css +9 -0
  43. package/dist/skill/{patterns/chat.tsx → reference/components/chat/examples/screen.tsx} +170 -351
  44. package/dist/skill/reference/components/chat-list/COMPONENT.md +1 -0
  45. package/dist/skill/reference/components/chat-list/examples/links.tsx +72 -0
  46. package/dist/skill/reference/components/checkbox/COMPONENT.md +1 -1
  47. package/dist/skill/reference/components/checkbox/examples/examples.module.css +5 -1
  48. package/dist/skill/reference/components/checkbox/examples/indicator.tsx +13 -7
  49. package/dist/skill/reference/components/checkbox/examples/states.tsx +6 -1
  50. package/dist/skill/reference/components/color-field/COMPONENT.md +1 -1
  51. package/dist/skill/reference/components/color-picker/COMPONENT.md +4 -3
  52. package/dist/skill/reference/components/color-picker/examples/controlled-open.tsx +37 -0
  53. package/dist/skill/reference/components/color-picker/examples/presets.tsx +2 -2
  54. package/dist/skill/reference/components/color-picker/examples/states.tsx +23 -14
  55. package/dist/skill/reference/components/composer/COMPONENT.md +2 -1
  56. package/dist/skill/reference/components/composer/examples/attach-menu.tsx +78 -0
  57. package/dist/skill/reference/components/composer/examples/attachments.tsx +2 -2
  58. package/dist/skill/reference/components/crossfade/COMPONENT.md +1 -0
  59. package/dist/skill/reference/components/crossfade/examples/screen.tsx +197 -0
  60. package/dist/skill/reference/components/data-table/COMPONENT.md +3 -2
  61. package/dist/skill/reference/components/data-table/examples/detail-panel.tsx +36 -37
  62. package/dist/skill/reference/components/data-table/examples/examples.module.css +0 -12
  63. package/dist/skill/reference/components/data-table/examples/numeric.tsx +36 -4
  64. package/dist/skill/reference/components/data-table/examples/overview.tsx +1 -0
  65. package/dist/skill/reference/components/data-table/examples/row-open.tsx +7 -36
  66. package/dist/skill/{patterns/list-page.module.css → reference/components/data-table/examples/screen.module.css} +1 -7
  67. package/dist/skill/{patterns/list-page.tsx → reference/components/data-table/examples/screen.tsx} +84 -64
  68. package/dist/skill/reference/components/datepicker/COMPONENT.md +5 -4
  69. package/dist/skill/reference/components/datepicker/examples/examples.module.css +2 -6
  70. package/dist/skill/reference/components/datepicker/examples/in-form.tsx +47 -55
  71. package/dist/skill/reference/components/datepicker/examples/locale.tsx +35 -0
  72. package/dist/skill/reference/components/datepicker/examples/range-presets.tsx +11 -2
  73. package/dist/skill/reference/components/datepicker/examples/states.tsx +9 -1
  74. package/dist/skill/reference/components/description-list/COMPONENT.md +1 -0
  75. package/dist/skill/{patterns/detail-page.module.css → reference/components/description-list/examples/screen.module.css} +2 -9
  76. package/dist/skill/reference/components/description-list/examples/screen.tsx +214 -0
  77. package/dist/skill/reference/components/description-list/examples/structure.tsx +1 -1
  78. package/dist/skill/reference/components/digit-input/COMPONENT.md +3 -1
  79. package/dist/skill/reference/components/digit-input/examples/states.tsx +3 -1
  80. package/dist/skill/reference/components/digit-input/examples/without-focus-ring.tsx +13 -0
  81. package/dist/skill/reference/components/divider/examples/with-icon.tsx +2 -2
  82. package/dist/skill/reference/components/dnd/COMPONENT.md +4 -2
  83. package/dist/skill/reference/components/dnd/examples/drop-zones.tsx +82 -49
  84. package/dist/skill/reference/components/dnd/examples/examples.module.css +50 -0
  85. package/dist/skill/reference/components/dnd/examples/states.tsx +54 -0
  86. package/dist/skill/reference/components/dnd/examples/table.tsx +113 -0
  87. package/dist/skill/reference/components/drawer/COMPONENT.md +1 -0
  88. package/dist/skill/reference/components/drawer/examples/dismiss.tsx +5 -3
  89. package/dist/skill/reference/components/drawer/examples/examples.module.css +0 -13
  90. package/dist/skill/reference/components/drawer/examples/header-actions.tsx +5 -9
  91. package/dist/skill/reference/components/drawer/examples/overview.tsx +6 -18
  92. package/dist/skill/reference/components/drawer/examples/screen.tsx +298 -0
  93. package/dist/skill/reference/components/dropdown/examples/examples.module.css +1 -5
  94. package/dist/skill/reference/components/empty-page/COMPONENT.md +1 -1
  95. package/dist/skill/reference/components/empty-page/examples/region-error.tsx +8 -2
  96. package/dist/skill/reference/components/example-frame/COMPONENT.md +3 -2
  97. package/dist/skill/reference/components/example-frame/examples/initial-view.tsx +44 -0
  98. package/dist/skill/reference/components/field-list/COMPONENT.md +2 -1
  99. package/dist/skill/reference/components/field-list/examples/errors.tsx +5 -2
  100. package/dist/skill/{patterns/record-editor.tsx → reference/components/field-list/examples/screen.tsx} +3 -43
  101. package/dist/skill/reference/components/file-upload/COMPONENT.md +7 -6
  102. package/dist/skill/reference/components/file-upload/examples/custom-body.tsx +2 -1
  103. package/dist/skill/reference/components/file-upload/examples/examples.module.css +1 -7
  104. package/dist/skill/reference/components/file-upload/examples/file-cards.tsx +10 -1
  105. package/dist/skill/reference/components/file-upload/examples/gallery.tsx +2 -2
  106. package/dist/skill/reference/components/file-upload/examples/in-form.tsx +4 -9
  107. package/dist/skill/reference/components/file-upload/examples/overview.tsx +5 -1
  108. package/dist/skill/reference/components/file-upload/examples/row-parts.tsx +24 -1
  109. package/dist/skill/{patterns/media-library.module.css → reference/components/file-upload/examples/screen.module.css} +2 -1
  110. package/dist/skill/reference/components/file-upload/examples/screen.tsx +646 -0
  111. package/dist/skill/reference/components/file-upload/examples/states.tsx +6 -2
  112. package/dist/skill/reference/components/file-upload/examples/validation.tsx +11 -2
  113. package/dist/skill/reference/components/file-upload/examples/variants.tsx +3 -20
  114. package/dist/skill/reference/components/gantt/COMPONENT.md +2 -1
  115. package/dist/skill/reference/components/gantt/examples/screen.module.css +14 -0
  116. package/dist/skill/{patterns/schedule.tsx → reference/components/gantt/examples/screen.tsx} +174 -170
  117. package/dist/skill/reference/components/gantt/examples/states.tsx +6 -2
  118. package/dist/skill/reference/components/input/COMPONENT.md +2 -2
  119. package/dist/skill/reference/components/input/examples/examples.module.css +0 -6
  120. package/dist/skill/reference/components/input/examples/in-form.tsx +1 -9
  121. package/dist/skill/reference/components/input/examples/password-strength.tsx +34 -8
  122. package/dist/skill/reference/components/input/examples/states.tsx +6 -1
  123. package/dist/skill/reference/components/kanban/COMPONENT.md +3 -2
  124. package/dist/skill/reference/components/kanban/examples/columns.tsx +8 -5
  125. package/dist/skill/reference/components/kanban/examples/screen.module.css +17 -0
  126. package/dist/skill/{patterns/kanban-board.tsx → reference/components/kanban/examples/screen.tsx} +130 -172
  127. package/dist/skill/reference/components/kanban/examples/states.tsx +17 -6
  128. package/dist/skill/reference/components/login-form/COMPONENT.md +6 -5
  129. package/dist/skill/reference/components/login-form/examples/examples.module.css +2 -21
  130. package/dist/skill/reference/components/login-form/examples/forgot-password.tsx +28 -32
  131. package/dist/skill/reference/components/login-form/examples/narrow.tsx +1 -1
  132. package/dist/skill/reference/components/login-form/examples/overview.tsx +45 -47
  133. package/dist/skill/reference/components/login-form/examples/register.tsx +64 -68
  134. package/dist/skill/reference/components/login-form/examples/reset-password.tsx +50 -47
  135. package/dist/skill/reference/components/login-form/examples/sizes.tsx +4 -6
  136. package/dist/skill/reference/components/login-form/examples/states.tsx +53 -57
  137. package/dist/skill/reference/components/login-form/examples/structure.tsx +18 -22
  138. package/dist/skill/reference/components/login-form/examples/verification-code.tsx +41 -45
  139. package/dist/skill/reference/components/media-viewer/COMPONENT.md +1 -1
  140. package/dist/skill/reference/components/media-viewer/examples/dismiss.tsx +5 -1
  141. package/dist/skill/reference/components/message/COMPONENT.md +4 -3
  142. package/dist/skill/reference/components/message/examples/file.tsx +5 -1
  143. package/dist/skill/reference/components/message/examples/media-open.tsx +48 -0
  144. package/dist/skill/reference/components/message/examples/status.tsx +21 -3
  145. package/dist/skill/reference/components/message/examples/text-formatting.tsx +7 -1
  146. package/dist/skill/reference/components/modal/COMPONENT.md +2 -1
  147. package/dist/skill/reference/components/modal/examples/custom-container.tsx +20 -20
  148. package/dist/skill/reference/components/modal/examples/dismiss.tsx +5 -3
  149. package/dist/skill/reference/components/modal/examples/enter-key.tsx +116 -0
  150. package/dist/skill/reference/components/modal/examples/examples.module.css +7 -13
  151. package/dist/skill/reference/components/modal/examples/structure.tsx +5 -2
  152. package/dist/skill/reference/components/native-select/COMPONENT.md +1 -1
  153. package/dist/skill/reference/components/native-select/examples/states.tsx +5 -1
  154. package/dist/skill/reference/components/notification/COMPONENT.md +1 -1
  155. package/dist/skill/reference/components/notification/examples/dismiss.tsx +2 -2
  156. package/dist/skill/reference/components/page-content/COMPONENT.md +1 -0
  157. package/dist/skill/reference/components/page-content/examples/list-detail.tsx +0 -3
  158. package/dist/skill/{patterns/settings-page.tsx → reference/components/page-content/examples/screen.tsx} +3 -3
  159. package/dist/skill/reference/components/page-content/examples/variants.tsx +4 -11
  160. package/dist/skill/reference/components/page-toolbar/COMPONENT.md +17 -15
  161. package/dist/skill/reference/components/page-toolbar/examples/narrow.tsx +6 -3
  162. package/dist/skill/reference/components/pagination/examples/controlled.tsx +29 -29
  163. package/dist/skill/reference/components/pagination/examples/examples.module.css +0 -2
  164. package/dist/skill/reference/components/progress-bar/COMPONENT.md +1 -1
  165. package/dist/skill/reference/components/progress-bar/examples/segments.tsx +2 -2
  166. package/dist/skill/reference/components/progress-circle/COMPONENT.md +1 -1
  167. package/dist/skill/reference/components/progress-circle/examples/segments.tsx +8 -3
  168. package/dist/skill/reference/components/radio/COMPONENT.md +1 -0
  169. package/dist/skill/reference/components/radio/examples/examples.module.css +14 -0
  170. package/dist/skill/reference/components/radio/examples/in-form.tsx +45 -0
  171. package/dist/skill/reference/components/scroll-container/COMPONENT.md +1 -0
  172. package/dist/skill/reference/components/scroll-container/examples/auto-scroll.tsx +3 -3
  173. package/dist/skill/reference/components/scroll-container/examples/chat.tsx +3 -3
  174. package/dist/skill/reference/components/scroll-container/examples/edges.tsx +6 -3
  175. package/dist/skill/reference/components/scroll-container/examples/examples.module.css +4 -17
  176. package/dist/skill/reference/components/scroll-container/examples/load-more.tsx +51 -0
  177. package/dist/skill/reference/components/scroll-container/examples/lock.tsx +3 -5
  178. package/dist/skill/reference/components/scroll-container/examples/overscroll.tsx +3 -3
  179. package/dist/skill/reference/components/scroll-container/examples/overview.tsx +3 -3
  180. package/dist/skill/reference/components/scroll-container/examples/scrollbar.tsx +13 -7
  181. package/dist/skill/reference/components/scroll-container/examples/variants.tsx +13 -7
  182. package/dist/skill/reference/components/segmented-control/COMPONENT.md +2 -2
  183. package/dist/skill/reference/components/segmented-control/examples/in-form.tsx +5 -1
  184. package/dist/skill/reference/components/segmented-control/examples/states.tsx +10 -1
  185. package/dist/skill/reference/components/select/COMPONENT.md +1 -1
  186. package/dist/skill/reference/components/select/examples/examples.module.css +2 -7
  187. package/dist/skill/reference/components/select/examples/states.tsx +13 -1
  188. package/dist/skill/reference/components/sheet/COMPONENT.md +2 -0
  189. package/dist/skill/reference/components/sheet/examples/guard.tsx +72 -0
  190. package/dist/skill/reference/components/sheet/examples/header-actions.tsx +56 -0
  191. package/dist/skill/reference/components/slider/COMPONENT.md +2 -1
  192. package/dist/skill/reference/components/slider/examples/examples.module.css +8 -0
  193. package/dist/skill/reference/components/slider/examples/in-form.tsx +47 -0
  194. package/dist/skill/reference/components/slider/examples/states.tsx +4 -1
  195. package/dist/skill/reference/components/smart-filter/COMPONENT.md +1 -1
  196. package/dist/skill/reference/components/smart-filter/examples/controlled.tsx +3 -3
  197. package/dist/skill/reference/components/smart-filter/examples/ranges.tsx +44 -10
  198. package/dist/skill/reference/components/sparkline/COMPONENT.md +1 -1
  199. package/dist/skill/reference/components/sparkline/examples/reference.tsx +2 -1
  200. package/dist/skill/reference/components/tabs/COMPONENT.md +1 -1
  201. package/dist/skill/reference/components/tabs/examples/sizes.tsx +1 -1
  202. package/dist/skill/reference/components/tag-select/COMPONENT.md +1 -1
  203. package/dist/skill/reference/components/tag-select/examples/states.tsx +8 -1
  204. package/dist/skill/reference/components/textarea/COMPONENT.md +1 -1
  205. package/dist/skill/reference/components/textarea/examples/examples.module.css +0 -6
  206. package/dist/skill/reference/components/textarea/examples/in-form.tsx +1 -9
  207. package/dist/skill/reference/components/textarea/examples/states.tsx +2 -1
  208. package/dist/skill/reference/components/thumbnail/COMPONENT.md +2 -1
  209. package/dist/skill/reference/components/thumbnail/examples/examples.module.css +1 -1
  210. package/dist/skill/reference/components/thumbnail/examples/fit.tsx +24 -0
  211. package/dist/skill/reference/components/thumbnail/examples/video.tsx +20 -1
  212. package/dist/skill/reference/components/timeline/COMPONENT.md +1 -1
  213. package/dist/skill/reference/components/timeline/examples/links.tsx +55 -14
  214. package/dist/skill/reference/components/tooltip/COMPONENT.md +1 -1
  215. package/dist/skill/reference/components/tooltip/examples/toolbar.tsx +2 -2
  216. package/dist/skill/reference/components/typography/examples/weights.tsx +3 -0
  217. package/dist/skill/reference/components/video-note/COMPONENT.md +2 -2
  218. package/dist/skill/reference/components/video-note/examples/controlled.tsx +19 -2
  219. package/dist/skill/reference/components/video-note/examples/in-message.tsx +5 -2
  220. package/dist/skill/reference/components/visually-hidden/COMPONENT.md +2 -1
  221. package/dist/skill/reference/components/visually-hidden/examples/assertive.tsx +39 -0
  222. package/dist/skill/reference/components/voice-player/COMPONENT.md +2 -2
  223. package/dist/skill/reference/components/voice-player/examples/call-recording.tsx +19 -9
  224. package/dist/skill/reference/components/voice-player/examples/controlled.tsx +20 -3
  225. package/dist/skill/reference/layout/app-header/COMPONENT.md +46 -63
  226. package/dist/skill/reference/layout/app-header/examples/breadcrumbs.tsx +10 -9
  227. package/dist/skill/reference/layout/app-header/examples/examples.module.css +1 -1
  228. package/dist/skill/reference/layout/app-header/examples/in-app-shell.tsx +0 -1
  229. package/dist/skill/reference/layout/app-header/examples/narrow.tsx +4 -5
  230. package/dist/skill/reference/layout/app-header/examples/overview.tsx +8 -10
  231. package/dist/skill/reference/layout/app-header/examples/page-title.tsx +3 -10
  232. package/dist/skill/reference/layout/app-shell/COMPONENT.md +4 -3
  233. package/dist/skill/reference/layout/app-shell/examples/overview.tsx +15 -30
  234. package/dist/skill/reference/layout/app-shell/examples/screen.tsx +262 -0
  235. package/dist/skill/reference/layout/app-shell/examples/template.tsx +29 -9
  236. package/dist/skill/reference/layout/sidebar/COMPONENT.md +7 -4
  237. package/dist/skill/reference/layout/sidebar/examples/account.tsx +2 -2
  238. package/dist/skill/reference/layout/sidebar/examples/collapsible-groups.tsx +12 -4
  239. package/dist/skill/reference/layout/sidebar/examples/custom-part.tsx +53 -0
  240. package/dist/skill/reference/layout/sidebar/examples/examples.module.css +5 -0
  241. package/dist/skill/reference/layout/sidebar/examples/narrow.tsx +53 -0
  242. package/dist/skill/reference/layout/sidebar/examples/persist.tsx +57 -0
  243. package/dist/skill/reference/layout/sidebar/examples/router.tsx +14 -2
  244. package/dist/skill/reference/layout/sidebar/examples/structure.tsx +7 -2
  245. package/dist/skill/responsive.md +2 -2
  246. package/package.json +1 -1
  247. package/src/components/avatar/examples/states.tsx +4 -4
  248. package/src/components/badge/examples/applied-filters.tsx +13 -19
  249. package/src/components/badge/examples/examples.module.css +1 -8
  250. package/src/components/badge/examples/server-tags.tsx +2 -6
  251. package/src/components/banner/examples/examples.module.css +1 -5
  252. package/src/components/banner/examples/page-strip.tsx +16 -22
  253. package/src/components/breadcrumb/COMPONENT.md +4 -3
  254. package/src/components/breadcrumb/examples/ellipsis.tsx +2 -2
  255. package/src/components/button-group/COMPONENT.md +2 -2
  256. package/src/components/button-group/examples/in-form.tsx +22 -2
  257. package/src/components/button-group/examples/states.tsx +10 -1
  258. package/src/components/card/COMPONENT.md +2 -1
  259. package/src/components/card/examples/screen.module.css +14 -0
  260. package/src/components/card/examples/screen.tsx +362 -0
  261. package/src/components/card/examples/variants.tsx +15 -1
  262. package/src/components/chart-frame/COMPONENT.md +2 -1
  263. package/src/components/chart-frame/examples/fill-height.tsx +119 -0
  264. package/src/components/chart-frame/examples/states.tsx +3 -1
  265. package/src/components/chat/COMPONENT.md +3 -1
  266. package/src/components/chat/examples/group-chat.tsx +15 -2
  267. package/src/components/chat/examples/reactions.tsx +121 -0
  268. package/src/components/chat/examples/screen.module.css +9 -0
  269. package/src/components/chat/examples/screen.tsx +718 -0
  270. package/src/components/chat-list/COMPONENT.md +1 -0
  271. package/src/components/chat-list/examples/links.tsx +72 -0
  272. package/src/components/checkbox/COMPONENT.md +1 -1
  273. package/src/components/checkbox/examples/examples.module.css +5 -1
  274. package/src/components/checkbox/examples/indicator.tsx +13 -7
  275. package/src/components/checkbox/examples/states.tsx +6 -1
  276. package/src/components/color-field/COMPONENT.md +1 -1
  277. package/src/components/color-picker/COMPONENT.md +4 -3
  278. package/src/components/color-picker/examples/controlled-open.tsx +37 -0
  279. package/src/components/color-picker/examples/presets.tsx +2 -2
  280. package/src/components/color-picker/examples/states.tsx +23 -14
  281. package/src/components/composer/COMPONENT.md +2 -1
  282. package/src/components/composer/examples/attach-menu.tsx +78 -0
  283. package/src/components/composer/examples/attachments.tsx +2 -2
  284. package/src/components/crossfade/COMPONENT.md +1 -0
  285. package/src/components/crossfade/examples/screen.module.css +40 -0
  286. package/src/components/crossfade/examples/screen.tsx +197 -0
  287. package/src/components/data-table/COMPONENT.md +3 -2
  288. package/src/components/data-table/examples/detail-panel.tsx +36 -37
  289. package/src/components/data-table/examples/examples.module.css +0 -12
  290. package/src/components/data-table/examples/numeric.tsx +36 -4
  291. package/src/components/data-table/examples/overview.tsx +1 -0
  292. package/src/components/data-table/examples/row-open.tsx +7 -36
  293. package/src/components/data-table/examples/screen.module.css +13 -0
  294. package/src/components/data-table/examples/screen.tsx +354 -0
  295. package/src/components/datepicker/COMPONENT.md +5 -4
  296. package/src/components/datepicker/examples/examples.module.css +2 -6
  297. package/src/components/datepicker/examples/in-form.tsx +47 -55
  298. package/src/components/datepicker/examples/locale.tsx +35 -0
  299. package/src/components/datepicker/examples/range-presets.tsx +11 -2
  300. package/src/components/datepicker/examples/states.tsx +9 -1
  301. package/src/components/description-list/COMPONENT.md +1 -0
  302. package/src/components/description-list/examples/screen.module.css +64 -0
  303. package/src/components/description-list/examples/screen.tsx +214 -0
  304. package/src/components/description-list/examples/structure.tsx +1 -1
  305. package/src/components/digit-input/COMPONENT.md +3 -1
  306. package/src/components/digit-input/examples/states.tsx +3 -1
  307. package/src/components/digit-input/examples/without-focus-ring.tsx +13 -0
  308. package/src/components/divider/examples/with-icon.tsx +2 -2
  309. package/src/components/dnd/COMPONENT.md +4 -2
  310. package/src/components/dnd/examples/drop-zones.tsx +82 -49
  311. package/src/components/dnd/examples/examples.module.css +50 -0
  312. package/src/components/dnd/examples/states.tsx +54 -0
  313. package/src/components/dnd/examples/table.tsx +113 -0
  314. package/src/components/drawer/COMPONENT.md +1 -0
  315. package/src/components/drawer/examples/dismiss.tsx +5 -3
  316. package/src/components/drawer/examples/examples.module.css +0 -13
  317. package/src/components/drawer/examples/header-actions.tsx +5 -9
  318. package/src/components/drawer/examples/overview.tsx +6 -18
  319. package/src/components/drawer/examples/screen.module.css +14 -0
  320. package/src/components/drawer/examples/screen.tsx +298 -0
  321. package/src/components/dropdown/examples/examples.module.css +1 -5
  322. package/src/components/empty-page/COMPONENT.md +1 -1
  323. package/src/components/empty-page/examples/region-error.tsx +8 -2
  324. package/src/components/example-frame/COMPONENT.md +3 -2
  325. package/src/components/example-frame/examples/initial-view.tsx +44 -0
  326. package/src/components/field-list/COMPONENT.md +2 -1
  327. package/src/components/field-list/examples/errors.tsx +5 -2
  328. package/src/components/field-list/examples/screen.module.css +18 -0
  329. package/src/components/field-list/examples/screen.tsx +316 -0
  330. package/src/components/file-upload/COMPONENT.md +7 -6
  331. package/src/components/file-upload/examples/custom-body.tsx +2 -1
  332. package/src/components/file-upload/examples/examples.module.css +1 -7
  333. package/src/components/file-upload/examples/file-cards.tsx +10 -1
  334. package/src/components/file-upload/examples/gallery.tsx +2 -2
  335. package/src/components/file-upload/examples/in-form.tsx +4 -9
  336. package/src/components/file-upload/examples/overview.tsx +5 -1
  337. package/src/components/file-upload/examples/row-parts.tsx +24 -1
  338. package/src/components/file-upload/examples/screen.module.css +45 -0
  339. package/src/components/file-upload/examples/screen.tsx +646 -0
  340. package/src/components/file-upload/examples/states.tsx +6 -2
  341. package/src/components/file-upload/examples/validation.tsx +11 -2
  342. package/src/components/file-upload/examples/variants.tsx +3 -20
  343. package/src/components/gantt/COMPONENT.md +2 -1
  344. package/src/components/gantt/examples/screen.module.css +14 -0
  345. package/src/components/gantt/examples/screen.tsx +726 -0
  346. package/src/components/gantt/examples/states.tsx +6 -2
  347. package/src/components/input/COMPONENT.md +2 -2
  348. package/src/components/input/examples/examples.module.css +0 -6
  349. package/src/components/input/examples/in-form.tsx +1 -9
  350. package/src/components/input/examples/password-strength.tsx +34 -8
  351. package/src/components/input/examples/states.tsx +6 -1
  352. package/src/components/kanban/COMPONENT.md +3 -2
  353. package/src/components/kanban/examples/columns.tsx +8 -5
  354. package/src/components/kanban/examples/screen.module.css +17 -0
  355. package/src/components/kanban/examples/screen.tsx +572 -0
  356. package/src/components/kanban/examples/states.tsx +17 -6
  357. package/src/components/login-form/COMPONENT.md +6 -5
  358. package/src/components/login-form/examples/examples.module.css +2 -21
  359. package/src/components/login-form/examples/forgot-password.tsx +28 -32
  360. package/src/components/login-form/examples/narrow.tsx +1 -1
  361. package/src/components/login-form/examples/overview.tsx +45 -47
  362. package/src/components/login-form/examples/register.tsx +64 -68
  363. package/src/components/login-form/examples/reset-password.tsx +50 -47
  364. package/src/components/login-form/examples/sizes.tsx +4 -6
  365. package/src/components/login-form/examples/states.tsx +53 -57
  366. package/src/components/login-form/examples/structure.tsx +18 -22
  367. package/src/components/login-form/examples/verification-code.tsx +41 -45
  368. package/src/components/media-viewer/COMPONENT.md +1 -1
  369. package/src/components/media-viewer/examples/dismiss.tsx +5 -1
  370. package/src/components/message/COMPONENT.md +4 -3
  371. package/src/components/message/examples/file.tsx +5 -1
  372. package/src/components/message/examples/media-open.tsx +48 -0
  373. package/src/components/message/examples/status.tsx +21 -3
  374. package/src/components/message/examples/text-formatting.tsx +7 -1
  375. package/src/components/modal/COMPONENT.md +2 -1
  376. package/src/components/modal/examples/custom-container.tsx +20 -20
  377. package/src/components/modal/examples/dismiss.tsx +5 -3
  378. package/src/components/modal/examples/enter-key.tsx +116 -0
  379. package/src/components/modal/examples/examples.module.css +7 -13
  380. package/src/components/modal/examples/structure.tsx +5 -2
  381. package/src/components/native-select/COMPONENT.md +1 -1
  382. package/src/components/native-select/examples/states.tsx +5 -1
  383. package/src/components/notification/COMPONENT.md +1 -1
  384. package/src/components/notification/examples/dismiss.tsx +2 -2
  385. package/src/components/page-content/COMPONENT.md +1 -0
  386. package/src/components/page-content/examples/list-detail.tsx +0 -3
  387. package/src/components/page-content/examples/screen.module.css +27 -0
  388. package/src/components/page-content/examples/screen.tsx +196 -0
  389. package/src/components/page-content/examples/variants.tsx +4 -11
  390. package/src/components/page-toolbar/COMPONENT.md +17 -15
  391. package/src/components/page-toolbar/examples/narrow.tsx +6 -3
  392. package/src/components/pagination/examples/controlled.tsx +29 -29
  393. package/src/components/pagination/examples/examples.module.css +0 -2
  394. package/src/components/progress-bar/COMPONENT.md +1 -1
  395. package/src/components/progress-bar/examples/segments.tsx +2 -2
  396. package/src/components/progress-circle/COMPONENT.md +1 -1
  397. package/src/components/progress-circle/examples/segments.tsx +8 -3
  398. package/src/components/radio/COMPONENT.md +1 -0
  399. package/src/components/radio/examples/examples.module.css +14 -0
  400. package/src/components/radio/examples/in-form.tsx +45 -0
  401. package/src/components/scroll-container/COMPONENT.md +1 -0
  402. package/src/components/scroll-container/examples/auto-scroll.tsx +3 -3
  403. package/src/components/scroll-container/examples/chat.tsx +3 -3
  404. package/src/components/scroll-container/examples/edges.tsx +6 -3
  405. package/src/components/scroll-container/examples/examples.module.css +4 -17
  406. package/src/components/scroll-container/examples/load-more.tsx +51 -0
  407. package/src/components/scroll-container/examples/lock.tsx +3 -5
  408. package/src/components/scroll-container/examples/overscroll.tsx +3 -3
  409. package/src/components/scroll-container/examples/overview.tsx +3 -3
  410. package/src/components/scroll-container/examples/scrollbar.tsx +13 -7
  411. package/src/components/scroll-container/examples/variants.tsx +13 -7
  412. package/src/components/segmented-control/COMPONENT.md +2 -2
  413. package/src/components/segmented-control/examples/in-form.tsx +5 -1
  414. package/src/components/segmented-control/examples/states.tsx +10 -1
  415. package/src/components/select/COMPONENT.md +1 -1
  416. package/src/components/select/examples/examples.module.css +2 -7
  417. package/src/components/select/examples/states.tsx +13 -1
  418. package/src/components/sheet/COMPONENT.md +2 -0
  419. package/src/components/sheet/examples/guard.tsx +72 -0
  420. package/src/components/sheet/examples/header-actions.tsx +56 -0
  421. package/src/components/slider/COMPONENT.md +2 -1
  422. package/src/components/slider/examples/examples.module.css +8 -0
  423. package/src/components/slider/examples/in-form.tsx +47 -0
  424. package/src/components/slider/examples/states.tsx +4 -1
  425. package/src/components/smart-filter/COMPONENT.md +1 -1
  426. package/src/components/smart-filter/examples/controlled.tsx +3 -3
  427. package/src/components/smart-filter/examples/ranges.tsx +44 -10
  428. package/src/components/sparkline/COMPONENT.md +1 -1
  429. package/src/components/sparkline/examples/reference.tsx +2 -1
  430. package/src/components/tabs/COMPONENT.md +1 -1
  431. package/src/components/tabs/examples/sizes.tsx +1 -1
  432. package/src/components/tag-select/COMPONENT.md +1 -1
  433. package/src/components/tag-select/examples/states.tsx +8 -1
  434. package/src/components/textarea/COMPONENT.md +1 -1
  435. package/src/components/textarea/examples/examples.module.css +0 -6
  436. package/src/components/textarea/examples/in-form.tsx +1 -9
  437. package/src/components/textarea/examples/states.tsx +2 -1
  438. package/src/components/thumbnail/COMPONENT.md +2 -1
  439. package/src/components/thumbnail/examples/examples.module.css +1 -1
  440. package/src/components/thumbnail/examples/fit.tsx +24 -0
  441. package/src/components/thumbnail/examples/video.tsx +20 -1
  442. package/src/components/timeline/COMPONENT.md +1 -1
  443. package/src/components/timeline/examples/links.tsx +55 -14
  444. package/src/components/tooltip/COMPONENT.md +1 -1
  445. package/src/components/tooltip/examples/toolbar.tsx +2 -2
  446. package/src/components/typography/examples/weights.tsx +3 -0
  447. package/src/components/video-note/COMPONENT.md +2 -2
  448. package/src/components/video-note/examples/controlled.tsx +19 -2
  449. package/src/components/video-note/examples/in-message.tsx +5 -2
  450. package/src/components/visually-hidden/COMPONENT.md +2 -1
  451. package/src/components/visually-hidden/examples/assertive.tsx +39 -0
  452. package/src/components/voice-player/COMPONENT.md +2 -2
  453. package/src/components/voice-player/examples/call-recording.tsx +19 -9
  454. package/src/components/voice-player/examples/controlled.tsx +20 -3
  455. package/src/layout/app-header/COMPONENT.md +46 -63
  456. package/src/layout/app-header/examples/breadcrumbs.tsx +10 -9
  457. package/src/layout/app-header/examples/examples.module.css +1 -1
  458. package/src/layout/app-header/examples/in-app-shell.tsx +0 -1
  459. package/src/layout/app-header/examples/narrow.tsx +4 -5
  460. package/src/layout/app-header/examples/overview.tsx +8 -10
  461. package/src/layout/app-header/examples/page-title.tsx +3 -10
  462. package/src/layout/app-shell/COMPONENT.md +4 -3
  463. package/src/layout/app-shell/examples/overview.tsx +15 -30
  464. package/src/layout/app-shell/examples/screen.module.css +11 -0
  465. package/src/layout/app-shell/examples/screen.tsx +262 -0
  466. package/src/layout/app-shell/examples/template.tsx +29 -9
  467. package/src/layout/sidebar/COMPONENT.md +7 -4
  468. package/src/layout/sidebar/examples/account.tsx +2 -2
  469. package/src/layout/sidebar/examples/collapsible-groups.tsx +12 -4
  470. package/src/layout/sidebar/examples/custom-part.tsx +53 -0
  471. package/src/layout/sidebar/examples/examples.module.css +5 -0
  472. package/src/layout/sidebar/examples/narrow.tsx +53 -0
  473. package/src/layout/sidebar/examples/persist.tsx +57 -0
  474. package/src/layout/sidebar/examples/router.tsx +14 -2
  475. package/src/layout/sidebar/examples/structure.tsx +7 -2
  476. package/dist/skill/patterns/app-shell.tsx +0 -303
  477. package/dist/skill/patterns/chat.module.css +0 -8
  478. package/dist/skill/patterns/dashboard.tsx +0 -340
  479. package/dist/skill/patterns/detail-page.tsx +0 -206
  480. package/dist/skill/patterns/form-drawer.tsx +0 -240
  481. package/dist/skill/patterns/kanban-board.module.css +0 -28
  482. package/dist/skill/patterns/media-library.tsx +0 -637
  483. package/dist/skill/patterns/schedule.module.css +0 -22
  484. package/dist/skill/patterns/screen-states.tsx +0 -187
  485. /package/dist/skill/{patterns/dashboard.module.css → reference/components/card/examples/screen.module.css} +0 -0
  486. /package/dist/skill/{patterns/screen-states.module.css → reference/components/crossfade/examples/screen.module.css} +0 -0
  487. /package/dist/skill/{patterns/form-drawer.module.css → reference/components/drawer/examples/screen.module.css} +0 -0
  488. /package/dist/skill/{patterns/record-editor.module.css → reference/components/field-list/examples/screen.module.css} +0 -0
  489. /package/dist/skill/{patterns/settings-page.module.css → reference/components/page-content/examples/screen.module.css} +0 -0
  490. /package/dist/skill/{patterns/app-shell.module.css → reference/layout/app-shell/examples/screen.module.css} +0 -0
@@ -6,6 +6,9 @@ import styles from "./examples.module.css";
6
6
 
7
7
  const MAX_SIZE = 20 * 1024 * 1024;
8
8
 
9
+ /** The zone names the formats the check takes. */
10
+ const ZONE_LABELS = { description: "PDF до 20 МБ" };
11
+
9
12
  /** A picked file as a file of the set. */
10
13
  const toFile = (file: File): FileUploadFile => ({
11
14
  id: `${file.name}-${file.size}-${file.lastModified}`,
@@ -30,13 +33,19 @@ export default function FileUploadValidationExample() {
30
33
  <FileUpload.Root
31
34
  label="Скан договора"
32
35
  required
33
- hint="PDF до 20 МБ, все страницы"
36
+ hint="Все страницы, с подписями обеих сторон"
37
+ labels={ZONE_LABELS}
34
38
  error={scanError(scan)}
35
39
  value={scan}
36
40
  onValueChange={setScan}
37
41
  onFilesChange={(files) => setScan(files.map(toFile))}
38
42
  />
39
- <FileUpload.Root label="Доверенность" optional hint="Если подписывает не директор" />
43
+ <FileUpload.Root
44
+ label="Доверенность"
45
+ optional
46
+ hint="Если подписывает не директор"
47
+ labels={ZONE_LABELS}
48
+ />
40
49
  </div>
41
50
  );
42
51
  }
@@ -1,32 +1,15 @@
1
- /** How files are added: the dashed drop zone, the zone with only its fill for cards and modals, the compact picker button and the add tile after the files — `variant`, `trigger`. */
2
- import { FileUpload, type FileUploadFile } from "prime-ui-kit";
1
+ /** How files are added: the dashed drop zone, the zone with only its fill for cards and modals, the compact picker button and the add tile that starts an empty set of tiles — `variant`, `trigger`. */
2
+ import { FileUpload } from "prime-ui-kit";
3
3
 
4
4
  import styles from "./examples.module.css";
5
5
 
6
- const PHOTOS: readonly FileUploadFile[] = [
7
- {
8
- id: "dock",
9
- name: "Рампа.jpg",
10
- type: "image/jpeg",
11
- size: 412_000,
12
- src: "https://picsum.photos/seed/variants-dock/320/320",
13
- },
14
- {
15
- id: "racks",
16
- name: "Стеллажи.jpg",
17
- type: "image/jpeg",
18
- size: 388_000,
19
- src: "https://picsum.photos/seed/variants-racks/320/320",
20
- },
21
- ];
22
-
23
6
  export default function FileUploadVariantsExample() {
24
7
  return (
25
8
  <div className={styles.column}>
26
9
  <FileUpload.Root label="dashed" variant="dashed" />
27
10
  <FileUpload.Root label="solid" variant="solid" />
28
11
  <FileUpload.Root label="button" trigger="button" />
29
- <FileUpload.Root label="tile" trigger="tile" layout="grid" defaultValue={PHOTOS} />
12
+ <FileUpload.Root label="tile" trigger="tile" layout="grid" multiple />
30
13
  </div>
31
14
  );
32
15
  }
@@ -215,9 +215,10 @@ A `tone` wins over `color`. Say the status in the label too, never only by color
215
215
  | [occupancy.tsx](examples/occupancy.tsx) | Team occupancy by day: people with avatars, projects that overlap into lanes, locked vacations, a saved move held busy and a conflicting one gliding back, new work drawn on a free day — `renderRowAvatar`, `renderRow`, `onBarChange`, `onBarCreate`, `onSelect`, `readOnly`. |
216
216
  | [large.tsx](examples/large.tsx) | Two thousand people over two years stay fast: only the rows and days in view are rendered, keyboard focus reaches any row, and new bars are drawn on empty space — `rows`, `range`, `scrollHeight`, `onBarCreate`. |
217
217
  | [row-link.tsx](examples/row-link.tsx) | A team by client: each row header is a link to the person's profile that a plain click opens in place, each tooltip adds the client and the planned hours under the dates, and a legend of client hues stands in the toolbar — `getRowHref`, `onRowClick`, `renderBarTooltip`. |
218
- | [states.tsx](examples/states.tsx) | Skeleton rows in the chart's geometry while it loads, an empty period and a plan you may only look at — `loading`, `empty`, `readOnly`. |
218
+ | [states.tsx](examples/states.tsx) | Skeleton rows in the chart's geometry while it loads, an empty period and a report you may only look at, its today line on the report day — `loading`, `empty`, `readOnly`, `today`. |
219
219
  | [controlled.tsx](examples/controlled.tsx) | The zoom owned by the page: presets in the toolbar and the built-in switch change one state — `scale`, `onScaleChange`. |
220
220
  | [narrow.tsx](examples/narrow.tsx) | At 360 px the first column keeps only the avatars, the toolbar moves to its own row and the axis scrolls under the pinned column — `renderRowAvatar`. |
221
+ | [screen.tsx](examples/screen.tsx) | A team schedule as a work screen: the title with the people shown and a PageToolbar with search, filters, team sections and the primary action in the app header over a full-height Gantt; moves saved or refused, new work drawn and named in a Modal, details in a Drawer — `scrollHeight`, `onBarChange`, `onBarCreate`, `onSelect`. |
221
222
 
222
223
  ## Mistakes
223
224
  - Updating the rows before the request succeeds (optimistic) → the chart cannot glide back on reject; update them when `onBarChange` resolves, or before you resolve it.
@@ -0,0 +1,14 @@
1
+ /* Schedule: a work screen — the header carries the title and the tools, the page fills the app
2
+ panel (`AppShell.Root fillViewport` + `PageContent.Root fill`) and the chart takes the free
3
+ height. */
4
+
5
+ /* On a short screen the chart keeps room for a few rows; the page scrolls instead. */
6
+ .chart {
7
+ min-height: calc(var(--prime-space-24) * 3);
8
+ }
9
+
10
+ /* First column: the name over the role. */
11
+ .person {
12
+ display: grid;
13
+ min-width: 0;
14
+ }
@@ -1,5 +1,6 @@
1
- /** A team schedule: PageToolbar with search, filters and team sections over a full-height Gantt; moves saved or refused, new work drawn and named in a Modal, details in a Drawer. */
1
+ /** A team schedule as a work screen: the title with the people shown and a PageToolbar with search, filters, team sections and the primary action in the app header over a full-height Gantt; moves saved or refused, new work drawn and named in a Modal, details in a Drawer — `scrollHeight`, `onBarChange`, `onBarCreate`, `onSelect`. */
2
2
  import {
3
+ AppHeader,
3
4
  Avatar,
4
5
  Badge,
5
6
  Button,
@@ -29,7 +30,7 @@ import {
29
30
  } from "prime-ui-kit";
30
31
  import * as React from "react";
31
32
 
32
- import styles from "./schedule.module.css";
33
+ import styles from "./screen.module.css";
33
34
 
34
35
  type Hue = NonNullable<GanttBar["color"]>;
35
36
  type TeamId = "rollout" | "analytics" | "support";
@@ -275,7 +276,7 @@ const wait = (ms: number) => new Promise((resolve) => window.setTimeout(resolve,
275
276
  /** `yyyy-MM-dd` from the Datepicker's hidden input → a local calendar day. */
276
277
  const parseDay = (value: FormDataEntryValue) => new Date(`${value}T00:00`);
277
278
 
278
- export default function SchedulePattern() {
279
+ export default function GanttScreenExample() {
279
280
  const { notify } = useNotifications();
280
281
  const formId = React.useId();
281
282
  const [people, setPeople] = React.useState(PEOPLE);
@@ -440,15 +441,19 @@ export default function SchedulePattern() {
440
441
  const detail = selected?.bar;
441
442
 
442
443
  return (
443
- <PageContent.Root fill>
444
- <PageContent.Header>
445
- <PageContent.Title>Загрузка команды</PageContent.Title>
446
- <PageContent.Description>
447
- Кто из команды внедрения чем занят у клиентов: проекты, отпуска и вехи запусков.
448
- </PageContent.Description>
449
- </PageContent.Header>
450
- <PageContent.Body>
451
- <div className={styles.board}>
444
+ <>
445
+ {/* A work screen: in an app this header fills the shell's `header` slot and carries the page —
446
+ the only h1 and the page's tools; main has no PageContent.Header. */}
447
+ <AppHeader.Root>
448
+ <AppHeader.Start>
449
+ <AppHeader.Title>
450
+ Загрузка команды
451
+ <AppHeader.Description>
452
+ {loading ? "Загружаем график…" : `Сотрудников: ${rows.length} из ${people.length}`}
453
+ </AppHeader.Description>
454
+ </AppHeader.Title>
455
+ </AppHeader.Start>
456
+ <AppHeader.Tools>
452
457
  <SmartFilter.Root
453
458
  fields={FIELDS}
454
459
  value={filter}
@@ -456,7 +461,7 @@ export default function SchedulePattern() {
456
461
  search={search}
457
462
  onSearchChange={setSearch}
458
463
  >
459
- <PageToolbar.Root aria-label="График команды">
464
+ <PageToolbar.Root aria-label="Загрузка команды">
460
465
  <PageToolbar.Tools>
461
466
  <SmartFilter.Toolbar />
462
467
  </PageToolbar.Tools>
@@ -498,7 +503,11 @@ export default function SchedulePattern() {
498
503
  </PageToolbar.Chips>
499
504
  </PageToolbar.Root>
500
505
  </SmartFilter.Root>
506
+ </AppHeader.Tools>
507
+ </AppHeader.Root>
501
508
 
509
+ <PageContent.Root fill>
510
+ <PageContent.Body>
502
511
  <Gantt<Person, Assignment>
503
512
  aria-label="Загрузка команды внедрения"
504
513
  className={styles.chart}
@@ -533,11 +542,6 @@ export default function SchedulePattern() {
533
542
  renderBarTooltip={(bar) => (bar.client ? CLIENTS[bar.client].name : KIND[bar.kind])}
534
543
  toolbar={
535
544
  <>
536
- <Typography as="span" variant="body-s" tone="muted">
537
- {loading
538
- ? "Загружаем график…"
539
- : `Сотрудников: ${rows.length} из ${people.length}`}
540
- </Typography>
541
545
  {/* The legend of client hues: the bar's hue repeats its client, the tooltip names it. */}
542
546
  {(Object.keys(CLIENTS) as ClientId[]).map((client) => (
543
547
  <Badge.Root key={client} color={CLIENTS[client].color}>
@@ -564,159 +568,159 @@ export default function SchedulePattern() {
564
568
  </EmptyPage.Root>
565
569
  }
566
570
  />
567
- </div>
568
-
569
- <Modal.Root open={draft !== null} onOpenChange={closeDraft}>
570
- <Modal.Content size="s">
571
- <Modal.Header>
572
- <Modal.Title>Новая задача</Modal.Title>
573
- <Modal.Description>
574
- {draftPerson && draft?.dates
575
- ? `${draftPerson.name} · ${formatPeriod(draft.dates)}`
576
- : "Сотрудник увидит задачу в своём графике."}
577
- </Modal.Description>
578
- </Modal.Header>
579
- <Modal.Body>
580
- <Modal.Guard busy={saving} />
581
- <form id={formId} noValidate onSubmit={submit}>
582
- <Fieldset aria-label="Задача" disabled={saving}>
583
- <Input.Root id={`${formId}-title`} label="Задача" required error={errors.title}>
584
- <Input.Wrapper>
585
- <Input.Field name="title" placeholder="Обучение пользователей" autoFocus />
586
- </Input.Wrapper>
587
- </Input.Root>
588
- <Select.Root
589
- name="client"
590
- label="Клиент"
591
- required
592
- placeholder="Выберите клиента"
593
- error={errors.client}
594
- id={`${formId}-client`}
595
- >
596
- <Select.Trigger>
597
- <Select.Value />
598
- </Select.Trigger>
599
- <Select.Content>
600
- {(Object.keys(CLIENTS) as ClientId[]).map((value) => (
601
- <Select.Item key={value} value={value}>
602
- {CLIENTS[value].name}
603
- </Select.Item>
604
- ))}
605
- </Select.Content>
606
- </Select.Root>
607
- {draft?.personId ? null : (
608
- <>
609
- <Select.Root
610
- name="person"
611
- label="Сотрудник"
612
- required
613
- placeholder="Выберите сотрудника"
614
- error={errors.person}
615
- id={`${formId}-person`}
616
- >
617
- <Select.Trigger>
618
- <Select.Value />
619
- </Select.Trigger>
620
- <Select.Content searchable>
621
- {people.map((person) => (
622
- <Select.Item key={person.id} value={person.id} keywords={person.role}>
623
- {person.name}
624
- </Select.Item>
625
- ))}
626
- </Select.Content>
627
- </Select.Root>
628
- <Datepicker.Root
629
- mode="range"
630
- name="period"
631
- label="Период"
632
- required
633
- fullWidth
634
- placeholder="Начало и конец работ"
635
- error={errors.period}
636
- id={`${formId}-period`}
637
- />
638
- </>
639
- )}
640
- </Fieldset>
641
- </form>
642
- </Modal.Body>
643
- <Modal.Footer>
644
- <Modal.Close>
645
- <Button.Root variant="outline" tone="neutral">
646
- Отмена
647
- </Button.Root>
648
- </Modal.Close>
649
- <Button.Root type="submit" form={formId} loading={saving}>
650
- Назначить
651
- </Button.Root>
652
- </Modal.Footer>
653
- </Modal.Content>
654
- </Modal.Root>
655
-
656
- <Drawer.Root open={detailOpen} onOpenChange={setDetailOpen}>
657
- <Drawer.Content size="s">
658
- <Drawer.Header>
659
- <Drawer.Title>{detail?.label}</Drawer.Title>
660
- <Drawer.Description>{detail ? KIND[detail.kind] : null}</Drawer.Description>
661
- </Drawer.Header>
662
- <Drawer.Body>
663
- {selected && detail ? (
664
- <DescriptionList.Root orientation="vertical">
665
- <DescriptionList.Item label="Сотрудник">
666
- {selected.person.name} · {selected.person.role}
667
- </DescriptionList.Item>
668
- <DescriptionList.Item label="Клиент">
669
- {detail.client ? (
670
- <Badge.Root color={CLIENTS[detail.client].color}>
671
- {CLIENTS[detail.client].name}
672
- </Badge.Root>
673
- ) : (
674
- "Без клиента"
571
+
572
+ <Modal.Root open={draft !== null} onOpenChange={closeDraft}>
573
+ <Modal.Content size="s">
574
+ <Modal.Header>
575
+ <Modal.Title>Новая задача</Modal.Title>
576
+ <Modal.Description>
577
+ {draftPerson && draft?.dates
578
+ ? `${draftPerson.name} · ${formatPeriod(draft.dates)}`
579
+ : "Сотрудник увидит задачу в своём графике."}
580
+ </Modal.Description>
581
+ </Modal.Header>
582
+ <Modal.Body>
583
+ <Modal.Guard busy={saving} />
584
+ <form id={formId} noValidate onSubmit={submit}>
585
+ <Fieldset aria-label="Задача" disabled={saving}>
586
+ <Input.Root id={`${formId}-title`} label="Задача" required error={errors.title}>
587
+ <Input.Wrapper>
588
+ <Input.Field name="title" placeholder="Обучение пользователей" autoFocus />
589
+ </Input.Wrapper>
590
+ </Input.Root>
591
+ <Select.Root
592
+ name="client"
593
+ label="Клиент"
594
+ required
595
+ placeholder="Выберите клиента"
596
+ error={errors.client}
597
+ id={`${formId}-client`}
598
+ >
599
+ <Select.Trigger>
600
+ <Select.Value />
601
+ </Select.Trigger>
602
+ <Select.Content>
603
+ {(Object.keys(CLIENTS) as ClientId[]).map((value) => (
604
+ <Select.Item key={value} value={value}>
605
+ {CLIENTS[value].name}
606
+ </Select.Item>
607
+ ))}
608
+ </Select.Content>
609
+ </Select.Root>
610
+ {draft?.personId ? null : (
611
+ <>
612
+ <Select.Root
613
+ name="person"
614
+ label="Сотрудник"
615
+ required
616
+ placeholder="Выберите сотрудника"
617
+ error={errors.person}
618
+ id={`${formId}-person`}
619
+ >
620
+ <Select.Trigger>
621
+ <Select.Value />
622
+ </Select.Trigger>
623
+ <Select.Content searchable>
624
+ {people.map((person) => (
625
+ <Select.Item key={person.id} value={person.id} keywords={person.role}>
626
+ {person.name}
627
+ </Select.Item>
628
+ ))}
629
+ </Select.Content>
630
+ </Select.Root>
631
+ <Datepicker.Root
632
+ mode="range"
633
+ name="period"
634
+ label="Период"
635
+ required
636
+ fullWidth
637
+ placeholder="Начало и конец работ"
638
+ error={errors.period}
639
+ id={`${formId}-period`}
640
+ />
641
+ </>
675
642
  )}
676
- </DescriptionList.Item>
677
- <DescriptionList.Item label={detail.kind === "milestone" ? "Дата" : "Период"}>
678
- {formatPeriod(detail)}
679
- {detail.kind === "milestone" ? null : ` · ${lengthInDays(detail)} дн.`}
680
- </DescriptionList.Item>
681
- {detail.progress === undefined ? null : (
682
- <DescriptionList.Item label="Выполнено">
683
- <ProgressBar
684
- value={Math.round(detail.progress * 100)}
685
- showValue
686
- aria-label="Выполнено"
687
- />
688
- </DescriptionList.Item>
689
- )}
690
- </DescriptionList.Root>
691
- ) : null}
692
- </Drawer.Body>
693
- <Drawer.Footer>
694
- <Drawer.Close>
695
- <Button.Root variant="outline" tone="neutral">
696
- Закрыть
643
+ </Fieldset>
644
+ </form>
645
+ </Modal.Body>
646
+ <Modal.Footer>
647
+ <Modal.Close>
648
+ <Button.Root variant="outline" tone="neutral">
649
+ Отмена
650
+ </Button.Root>
651
+ </Modal.Close>
652
+ <Button.Root type="submit" form={formId} loading={saving}>
653
+ Назначить
697
654
  </Button.Root>
698
- </Drawer.Close>
699
- {detail && !detail.readOnly ? (
700
- <ConfirmDialog.Root
701
- title={`Снять задачу «${detail.label}»?`}
702
- description={`${selected?.person.name} освободится на эти дни. Задачу можно будет назначить заново.`}
703
- confirmLabel="Снять задачу"
704
- onConfirm={removeSelected}
705
- >
706
- <ConfirmDialog.Trigger>
707
- <Button.Root variant="soft" tone="danger">
708
- <Button.Icon>
709
- <Icon name="action.delete" />
710
- </Button.Icon>
711
- Снять задачу
712
- </Button.Root>
713
- </ConfirmDialog.Trigger>
714
- </ConfirmDialog.Root>
715
- ) : null}
716
- </Drawer.Footer>
717
- </Drawer.Content>
718
- </Drawer.Root>
719
- </PageContent.Body>
720
- </PageContent.Root>
655
+ </Modal.Footer>
656
+ </Modal.Content>
657
+ </Modal.Root>
658
+
659
+ <Drawer.Root open={detailOpen} onOpenChange={setDetailOpen}>
660
+ <Drawer.Content size="s">
661
+ <Drawer.Header>
662
+ <Drawer.Title>{detail?.label}</Drawer.Title>
663
+ <Drawer.Description>{detail ? KIND[detail.kind] : null}</Drawer.Description>
664
+ </Drawer.Header>
665
+ <Drawer.Body>
666
+ {selected && detail ? (
667
+ <DescriptionList.Root orientation="vertical">
668
+ <DescriptionList.Item label="Сотрудник">
669
+ {selected.person.name} · {selected.person.role}
670
+ </DescriptionList.Item>
671
+ <DescriptionList.Item label="Клиент">
672
+ {detail.client ? (
673
+ <Badge.Root color={CLIENTS[detail.client].color}>
674
+ {CLIENTS[detail.client].name}
675
+ </Badge.Root>
676
+ ) : (
677
+ "Без клиента"
678
+ )}
679
+ </DescriptionList.Item>
680
+ <DescriptionList.Item label={detail.kind === "milestone" ? "Дата" : "Период"}>
681
+ {formatPeriod(detail)}
682
+ {detail.kind === "milestone" ? null : ` · ${lengthInDays(detail)} дн.`}
683
+ </DescriptionList.Item>
684
+ {detail.progress === undefined ? null : (
685
+ <DescriptionList.Item label="Выполнено">
686
+ <ProgressBar
687
+ value={Math.round(detail.progress * 100)}
688
+ showValue
689
+ aria-label="Выполнено"
690
+ />
691
+ </DescriptionList.Item>
692
+ )}
693
+ </DescriptionList.Root>
694
+ ) : null}
695
+ </Drawer.Body>
696
+ <Drawer.Footer>
697
+ <Drawer.Close>
698
+ <Button.Root variant="outline" tone="neutral">
699
+ Закрыть
700
+ </Button.Root>
701
+ </Drawer.Close>
702
+ {detail && !detail.readOnly ? (
703
+ <ConfirmDialog.Root
704
+ title={`Снять задачу «${detail.label}»?`}
705
+ description={`${selected?.person.name} освободится на эти дни. Задачу можно будет назначить заново.`}
706
+ confirmLabel="Снять задачу"
707
+ onConfirm={removeSelected}
708
+ >
709
+ <ConfirmDialog.Trigger>
710
+ <Button.Root variant="soft" tone="danger">
711
+ <Button.Icon>
712
+ <Icon name="action.delete" />
713
+ </Button.Icon>
714
+ Снять задачу
715
+ </Button.Root>
716
+ </ConfirmDialog.Trigger>
717
+ </ConfirmDialog.Root>
718
+ ) : null}
719
+ </Drawer.Footer>
720
+ </Drawer.Content>
721
+ </Drawer.Root>
722
+ </PageContent.Body>
723
+ </PageContent.Root>
724
+ </>
721
725
  );
722
726
  }
@@ -1,4 +1,4 @@
1
- /** Skeleton rows in the chart's geometry while it loads, an empty period and a plan you may only look at — `loading`, `empty`, `readOnly`. */
1
+ /** Skeleton rows in the chart's geometry while it loads, an empty period and a report you may only look at, its today line on the report day — `loading`, `empty`, `readOnly`, `today`. */
2
2
  import { addDays, startOfToday, startOfWeek } from "date-fns";
3
3
  import { Gantt, type GanttBar, Typography } from "prime-ui-kit";
4
4
 
@@ -24,6 +24,9 @@ const FLEET: Vehicle[] = [
24
24
 
25
25
  const NO_VEHICLES: Vehicle[] = [];
26
26
 
27
+ /** The day the dispatch report was made: its today line stands there, not on the real today. */
28
+ const REPORT_DAY = at(2);
29
+
27
30
  const chartProps = {
28
31
  defaultScale: "day",
29
32
  getRowKey: (vehicle: Vehicle) => vehicle.id,
@@ -56,11 +59,12 @@ export default function GanttStatesExample() {
56
59
  aria-label="Рейсы машин, только просмотр"
57
60
  rows={FLEET}
58
61
  readOnly
62
+ today={REPORT_DAY}
59
63
  onBarChange={() => undefined}
60
64
  {...chartProps}
61
65
  />
62
66
  <Typography as="span" variant="caption" tone="muted">
63
- readOnly
67
+ readOnly · today
64
68
  </Typography>
65
69
  </div>
66
70
  </div>
@@ -269,12 +269,12 @@ Controlled: `value` + `onChange` (or `onValueChange`) on `Input.Field`. Uncontro
269
269
  |---|---|
270
270
  | [overview.tsx](examples/overview.tsx) | A labelled field with a hint under it — `label`, `hint`. |
271
271
  | [sizes.tsx](examples/sizes.tsx) | Every size tier; the label and the hint follow the field tier — `size`. |
272
- | [states.tsx](examples/states.tsx) | A default field next to a disabled and a read-only one — `disabled`, `readOnly`. |
272
+ | [states.tsx](examples/states.tsx) | A default field next to a disabled, a read-only and an invalid one with no message — `disabled`, `readOnly`, `invalid`. |
273
273
  | [validation.tsx](examples/validation.tsx) | Live validation: an error shakes the field as it arrives, drops in and leaves as soon as the value is fixed; required and optional markers, a hint and a support row that does not shift — `required`, `optional`, `hint`, `error`, `reserveSupportRow`. |
274
274
  | [with-icon.tsx](examples/with-icon.tsx) | A decorative icon at either end of the value — `Input.Icon`, `side`. |
275
275
  | [affixes.tsx](examples/affixes.tsx) | A fixed prefix and suffix flush with the edges and a unit next to the value — `Input.Affix`, `Input.InlineAffix`. |
276
276
  | [without-focus-ring.tsx](examples/without-focus-ring.tsx) | A single search field where the caret and the lighter fill show focus — `focusRing`. |
277
- | [password-strength.tsx](examples/password-strength.tsx) | A new password with a show toggle and a meter that fills step by step and names the level beside the hint — `Input.RevealButton`, `strength`. |
277
+ | [password-strength.tsx](examples/password-strength.tsx) | A new password with a show toggle and a meter that fills step by step and names the level beside the hint, and a service password measured by the company's own rule — `Input.RevealButton`, `strength`, `getStrength`. |
278
278
  | [edge-actions.tsx](examples/edge-actions.tsx) | Actions at the field's end: a mail link with a tooltip beside copying the value, and a profile link on a read-only field — `Input.Action`, `Input.CopyButton`. |
279
279
  | [inline-edit.tsx](examples/inline-edit.tsx) | Record card fields that save on blur and Enter, revert on Escape and show the server's refusal — `onCommit`, `error`. |
280
280
  | [controlled.tsx](examples/controlled.tsx) | The parent owns the value: a clear button and a character counter follow it — `value`, `onValueChange`, `Input.ClearButton`, `Input.Counter`. |
@@ -8,12 +8,6 @@
8
8
  width: min(100%, var(--prime-modal-width-m));
9
9
  }
10
10
 
11
- .formHeader {
12
- display: flex;
13
- flex-direction: column;
14
- gap: var(--prime-space-1);
15
- }
16
-
17
11
  .formFields {
18
12
  display: grid;
19
13
  /* Two columns while each keeps 12rem, one column in a narrower form — from its own width. */
@@ -1,5 +1,5 @@
1
1
  /** Company details form: required fields checked on submit, each error leaves as its field is fixed and a saved form turns the button green; neighbours keep their bottoms aligned — `required`, `error`, `reserveSupportRow`. */
2
- import { Button, Input, Typography } from "prime-ui-kit";
2
+ import { Button, Input } from "prime-ui-kit";
3
3
  import * as React from "react";
4
4
 
5
5
  import styles from "./examples.module.css";
@@ -32,14 +32,6 @@ export default function InputInFormExample() {
32
32
 
33
33
  return (
34
34
  <form className={styles.form} noValidate onSubmit={submit}>
35
- <div className={styles.formHeader}>
36
- <Typography as="h3" variant="title-m">
37
- Реквизиты компании
38
- </Typography>
39
- <Typography as="p" variant="body-s" tone="secondary">
40
- Используются в счетах и закрывающих документах.
41
- </Typography>
42
- </div>
43
35
  <div className={styles.formFields}>
44
36
  <div className={styles.formWide}>
45
37
  <Input.Root label="Название организации" required error={errors.name}>
@@ -1,13 +1,39 @@
1
- /** A new password with a show toggle and a meter that fills step by step and names the level beside the hint — `Input.RevealButton`, `strength`. */
2
- import { Input } from "prime-ui-kit";
1
+ /** A new password with a show toggle and a meter that fills step by step and names the level beside the hint, and a service password measured by the company's own rule — `Input.RevealButton`, `strength`, `getStrength`. */
2
+ import { Input, type PasswordStrength } from "prime-ui-kit";
3
+
4
+ /** The company rule for service accounts: only the length counts, 16 characters and more is hard. */
5
+ function serviceStrength(value: string): PasswordStrength {
6
+ if (value.length === 0) return 0;
7
+ if (value.length < 8) return 1;
8
+ if (value.length < 12) return 2;
9
+ if (value.length < 16) return 3;
10
+ return 4;
11
+ }
3
12
 
4
13
  export default function InputPasswordStrengthExample() {
5
14
  return (
6
- <Input.Root label="Новый пароль" hint="Не короче 8 символов" strength>
7
- <Input.Wrapper>
8
- <Input.Field type="password" autoComplete="new-password" defaultValue="Graphite2026" />
9
- <Input.RevealButton />
10
- </Input.Wrapper>
11
- </Input.Root>
15
+ <>
16
+ <Input.Root label="Новый пароль" hint="Не короче 8 символов" strength>
17
+ <Input.Wrapper>
18
+ <Input.Field type="password" autoComplete="new-password" defaultValue="Graphite2026" />
19
+ <Input.RevealButton />
20
+ </Input.Wrapper>
21
+ </Input.Root>
22
+ <Input.Root
23
+ label="Пароль сервисного аккаунта"
24
+ hint="По правилам компании — от 16 символов"
25
+ strength
26
+ getStrength={serviceStrength}
27
+ >
28
+ <Input.Wrapper>
29
+ <Input.Field
30
+ type="password"
31
+ autoComplete="new-password"
32
+ defaultValue="export-1c-nightly"
33
+ />
34
+ <Input.RevealButton />
35
+ </Input.Wrapper>
36
+ </Input.Root>
37
+ </>
12
38
  );
13
39
  }