prime-ui-kit 0.16.0 → 0.17.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 (315) hide show
  1. package/README.md +14 -18
  2. package/dist/chunks/{chunk-4PSQ64S4.js → chunk-7WWZYGRC.js} +3697 -3738
  3. package/dist/chunks/{chunk-6TPHKCUJ.js → chunk-A4WE3UNC.js} +27340 -26893
  4. package/dist/chunks/{chunk-A7OQWH6R.js → chunk-PRP4B6OG.js} +1 -1
  5. package/dist/chunks/{chunk-HDBQICPW.js → chunk-SVFWPLNW.js} +49 -20
  6. package/dist/color-picker.d.ts +1 -1
  7. package/dist/color-picker.js +3 -3
  8. package/dist/components/breadcrumb/Breadcrumb.d.ts +1 -1
  9. package/dist/components/chart-frame/ChartFrame.d.ts +1 -1
  10. package/dist/components/chat/ChatRows.d.ts +5 -1
  11. package/dist/components/color-picker/ColorPicker.d.ts +18 -1
  12. package/dist/components/data-table/DataTable.d.ts +1 -1
  13. package/dist/components/index.d.ts +0 -4
  14. package/dist/components/pagination/Pagination.d.ts +5 -1
  15. package/dist/components/popover/Popover.d.ts +1 -1
  16. package/dist/components/slider/Slider.d.ts +1 -1
  17. package/dist/components/smart-filter/SmartFilter.d.ts +4 -5
  18. package/dist/icon-set.js +2 -2
  19. package/dist/index.css +1 -1
  20. package/dist/index.js +5 -9
  21. package/dist/internal/barPlan.d.ts +44 -0
  22. package/dist/internal/overlay/FloatingPanel.d.ts +1 -1
  23. package/dist/internal/overlay/focus.d.ts +3 -2
  24. package/dist/internal/parts.d.ts +1 -1
  25. package/dist/internal/slot.d.ts +0 -30
  26. package/dist/layout/app-shell/AppShell.d.ts +19 -38
  27. package/dist/layout/index.d.ts +3 -3
  28. package/dist/layout/page/Page.d.ts +263 -0
  29. package/dist/layout/sidebar/Sidebar.d.ts +1 -1
  30. package/dist/skill/SKILL.md +10 -10
  31. package/dist/skill/anti-slop.md +101 -5
  32. package/dist/skill/api-contract.md +1 -1
  33. package/dist/skill/cheatsheet.md +27 -22
  34. package/dist/skill/checklist.md +7 -3
  35. package/dist/skill/choosing.md +9 -8
  36. package/dist/skill/components.md +3 -5
  37. package/dist/skill/composition.md +177 -152
  38. package/dist/skill/foundations.md +9 -9
  39. package/dist/skill/layouts.md +39 -98
  40. package/dist/skill/reference/components/avatar/COMPONENT.md +2 -2
  41. package/dist/skill/reference/components/avatar/examples/team-group.tsx +1 -1
  42. package/dist/skill/reference/components/banner/COMPONENT.md +4 -4
  43. package/dist/skill/reference/components/banner/examples/examples.module.css +6 -1
  44. package/dist/skill/reference/components/banner/examples/page-strip.tsx +24 -22
  45. package/dist/skill/reference/components/breadcrumb/COMPONENT.md +9 -8
  46. package/dist/skill/reference/components/button/COMPONENT.md +1 -0
  47. package/dist/skill/reference/components/button/examples/hold-to-confirm.tsx +1 -1
  48. package/dist/skill/reference/components/button/examples/on-colored-host.tsx +8 -8
  49. package/dist/skill/reference/components/card/COMPONENT.md +7 -7
  50. package/dist/skill/reference/components/card/examples/screen.module.css +1 -1
  51. package/dist/skill/reference/components/card/examples/screen.tsx +184 -198
  52. package/dist/skill/reference/components/chart-frame/COMPONENT.md +1 -1
  53. package/dist/skill/reference/components/chart-frame/examples/fill-height.tsx +9 -9
  54. package/dist/skill/reference/components/chat/COMPONENT.md +4 -4
  55. package/dist/skill/reference/components/chat/examples/screen.module.css +1 -1
  56. package/dist/skill/reference/components/chat/examples/screen.tsx +110 -117
  57. package/dist/skill/reference/components/chat-list/COMPONENT.md +2 -2
  58. package/dist/skill/reference/components/chat-list/examples/controlled.tsx +2 -2
  59. package/dist/skill/reference/components/chat-list/examples/examples.module.css +8 -0
  60. package/dist/skill/reference/components/checkbox/examples/examples.module.css +3 -2
  61. package/dist/skill/reference/components/code-block/COMPONENT.md +1 -1
  62. package/dist/skill/reference/components/code-block/examples/color-scheme.tsx +2 -4
  63. package/dist/skill/reference/components/code-block/examples/examples.module.css +0 -11
  64. package/dist/skill/reference/components/color-picker/COMPONENT.md +18 -7
  65. package/dist/skill/reference/components/color-picker/examples/examples.module.css +2 -5
  66. package/dist/skill/reference/components/color-picker/examples/overview.tsx +5 -10
  67. package/dist/skill/reference/components/color-picker/examples/sizes.tsx +4 -8
  68. package/dist/skill/reference/components/crossfade/COMPONENT.md +2 -2
  69. package/dist/skill/reference/components/crossfade/examples/screen.tsx +107 -112
  70. package/dist/skill/reference/components/data-table/COMPONENT.md +5 -5
  71. package/dist/skill/reference/components/data-table/examples/examples.module.css +9 -0
  72. package/dist/skill/reference/components/data-table/examples/screen.tsx +42 -52
  73. package/dist/skill/reference/components/data-table/examples/server.tsx +6 -2
  74. package/dist/skill/reference/components/datepicker/examples/examples.module.css +6 -0
  75. package/dist/skill/reference/components/datepicker/examples/inline-panel.tsx +3 -1
  76. package/dist/skill/reference/components/description-list/COMPONENT.md +1 -1
  77. package/dist/skill/reference/components/description-list/examples/screen.tsx +120 -127
  78. package/dist/skill/reference/components/digit-input/examples/grouped.tsx +4 -4
  79. package/dist/skill/reference/components/digit-input/examples/validation.tsx +1 -1
  80. package/dist/skill/reference/components/divider/COMPONENT.md +2 -2
  81. package/dist/skill/reference/components/divider/examples/examples.module.css +4 -1
  82. package/dist/skill/reference/components/divider/examples/vertical.tsx +22 -9
  83. package/dist/skill/reference/components/dnd/examples/examples.module.css +3 -1
  84. package/dist/skill/reference/components/drawer/COMPONENT.md +1 -1
  85. package/dist/skill/reference/components/drawer/examples/placement.tsx +26 -31
  86. package/dist/skill/reference/components/drawer/examples/screen.tsx +137 -160
  87. package/dist/skill/reference/components/dropdown/COMPONENT.md +1 -1
  88. package/dist/skill/reference/components/example-frame/COMPONENT.md +3 -3
  89. package/dist/skill/reference/components/field-list/examples/screen.module.css +1 -1
  90. package/dist/skill/reference/components/field-list/examples/screen.tsx +19 -19
  91. package/dist/skill/reference/components/fieldset/COMPONENT.md +1 -1
  92. package/dist/skill/reference/components/fieldset/examples/states.tsx +1 -1
  93. package/dist/skill/reference/components/file-upload/COMPONENT.md +1 -1
  94. package/dist/skill/reference/components/file-upload/examples/screen.module.css +2 -2
  95. package/dist/skill/reference/components/file-upload/examples/screen.tsx +65 -81
  96. package/dist/skill/reference/components/gallery/COMPONENT.md +1 -0
  97. package/dist/skill/reference/components/gantt/COMPONENT.md +1 -1
  98. package/dist/skill/reference/components/gantt/examples/screen.module.css +1 -1
  99. package/dist/skill/reference/components/gantt/examples/screen.tsx +55 -73
  100. package/dist/skill/reference/components/hint/examples/examples.module.css +10 -1
  101. package/dist/skill/reference/components/hint/examples/overview.tsx +1 -1
  102. package/dist/skill/reference/components/kanban/COMPONENT.md +1 -1
  103. package/dist/skill/reference/components/kanban/examples/screen.module.css +1 -1
  104. package/dist/skill/reference/components/kanban/examples/screen.tsx +50 -65
  105. package/dist/skill/reference/components/kbd/COMPONENT.md +1 -1
  106. package/dist/skill/reference/components/label/examples/examples.module.css +12 -1
  107. package/dist/skill/reference/components/label/examples/overview.tsx +1 -1
  108. package/dist/skill/reference/components/list/COMPONENT.md +3 -3
  109. package/dist/skill/reference/components/media-viewer/examples/controlled.tsx +16 -16
  110. package/dist/skill/reference/components/media-viewer/examples/examples.module.css +1 -3
  111. package/dist/skill/reference/components/pagination/COMPONENT.md +11 -3
  112. package/dist/skill/reference/components/pagination/examples/controlled.tsx +2 -1
  113. package/dist/skill/reference/components/popover/COMPONENT.md +3 -2
  114. package/dist/skill/reference/components/popover/examples/width.tsx +13 -1
  115. package/dist/skill/reference/components/slider/COMPONENT.md +3 -3
  116. package/dist/skill/reference/components/slider/examples/states.tsx +14 -10
  117. package/dist/skill/reference/components/smart-filter/COMPONENT.md +13 -13
  118. package/dist/skill/reference/components/smart-filter/examples/examples.module.css +3 -0
  119. package/dist/skill/reference/components/smart-filter/examples/many-values.tsx +12 -8
  120. package/dist/skill/reference/components/smart-filter/examples/sizes.tsx +7 -3
  121. package/dist/skill/reference/components/sparkline/COMPONENT.md +1 -0
  122. package/dist/skill/reference/components/sparkline/examples/curve.tsx +16 -11
  123. package/dist/skill/reference/components/sparkline/examples/states.tsx +14 -10
  124. package/dist/skill/reference/components/switch/COMPONENT.md +1 -1
  125. package/dist/skill/reference/components/tabs/COMPONENT.md +1 -1
  126. package/dist/skill/reference/components/typography/COMPONENT.md +2 -2
  127. package/dist/skill/reference/foundation.md +15 -11
  128. package/dist/skill/reference/layout/app-shell/COMPONENT.md +25 -38
  129. package/dist/skill/reference/layout/app-shell/examples/footer.tsx +10 -10
  130. package/dist/skill/reference/layout/app-shell/examples/overview.tsx +20 -22
  131. package/dist/skill/reference/layout/app-shell/examples/screen.module.css +2 -2
  132. package/dist/skill/reference/layout/app-shell/examples/screen.tsx +25 -30
  133. package/dist/skill/reference/layout/app-shell/examples/template.tsx +13 -17
  134. package/dist/skill/reference/layout/bottom-nav/COMPONENT.md +3 -3
  135. package/dist/skill/reference/layout/bottom-nav/examples/floating-action.tsx +10 -19
  136. package/dist/skill/reference/layout/bottom-nav/examples/floating.tsx +10 -19
  137. package/dist/skill/reference/layout/bottom-nav/examples/in-app-shell.tsx +11 -19
  138. package/dist/skill/reference/layout/page/COMPONENT.md +353 -0
  139. package/dist/skill/reference/layout/page/examples/actions-collapse.tsx +45 -0
  140. package/dist/skill/reference/layout/page/examples/collapse.tsx +68 -0
  141. package/dist/skill/reference/{components/page-content → layout/page}/examples/examples.module.css +33 -4
  142. package/{src/components/page-content → dist/skill/reference/layout/page}/examples/grid.tsx +15 -15
  143. package/dist/skill/reference/{components/page-content → layout/page}/examples/list-detail.tsx +14 -14
  144. package/dist/skill/reference/layout/page/examples/narrow.tsx +75 -0
  145. package/dist/skill/reference/layout/page/examples/overview.tsx +57 -0
  146. package/dist/skill/reference/{components/page-content → layout/page}/examples/screen.module.css +1 -1
  147. package/{src/components/page-content → dist/skill/reference/layout/page}/examples/screen.tsx +29 -19
  148. package/dist/skill/reference/{components/page-content → layout/page}/examples/sections.tsx +17 -24
  149. package/dist/skill/reference/layout/page/examples/structure.tsx +41 -0
  150. package/dist/skill/reference/{components/page-toolbar/examples/narrow.tsx → layout/page/examples/tools.tsx} +38 -35
  151. package/dist/skill/reference/layout/page/examples/top-bar.tsx +85 -0
  152. package/dist/skill/reference/{components/page-content → layout/page}/examples/variants.tsx +7 -7
  153. package/dist/skill/reference/layout/sidebar/COMPONENT.md +5 -4
  154. package/dist/skill/reference/layout/sidebar/examples/dismiss.tsx +10 -7
  155. package/dist/skill/reference/layout/sidebar/examples/narrow.tsx +11 -8
  156. package/dist/skill/responsive.md +88 -74
  157. package/dist/tokens/layers.d.ts +2 -0
  158. package/dist/tokens/primitives.d.ts +12 -2
  159. package/dist/tokens/semantic.d.ts +7 -0
  160. package/dist/tokens/themes/dark.d.ts +7 -2
  161. package/package.json +2 -2
  162. package/src/components/avatar/COMPONENT.md +2 -2
  163. package/src/components/avatar/examples/team-group.tsx +1 -1
  164. package/src/components/banner/COMPONENT.md +4 -4
  165. package/src/components/banner/examples/examples.module.css +6 -1
  166. package/src/components/banner/examples/page-strip.tsx +24 -22
  167. package/src/components/breadcrumb/COMPONENT.md +9 -8
  168. package/src/components/button/COMPONENT.md +1 -0
  169. package/src/components/button/examples/hold-to-confirm.tsx +1 -1
  170. package/src/components/button/examples/on-colored-host.tsx +8 -8
  171. package/src/components/card/COMPONENT.md +7 -7
  172. package/src/components/card/examples/screen.module.css +1 -1
  173. package/src/components/card/examples/screen.tsx +184 -198
  174. package/src/components/chart-frame/COMPONENT.md +1 -1
  175. package/src/components/chart-frame/examples/fill-height.tsx +9 -9
  176. package/src/components/chat/COMPONENT.md +4 -4
  177. package/src/components/chat/examples/screen.module.css +1 -1
  178. package/src/components/chat/examples/screen.tsx +110 -117
  179. package/src/components/chat-list/COMPONENT.md +2 -2
  180. package/src/components/chat-list/examples/controlled.tsx +2 -2
  181. package/src/components/chat-list/examples/examples.module.css +8 -0
  182. package/src/components/checkbox/examples/examples.module.css +3 -2
  183. package/src/components/code-block/COMPONENT.md +1 -1
  184. package/src/components/code-block/examples/color-scheme.tsx +2 -4
  185. package/src/components/code-block/examples/examples.module.css +0 -11
  186. package/src/components/color-picker/COMPONENT.md +18 -7
  187. package/src/components/color-picker/examples/examples.module.css +2 -5
  188. package/src/components/color-picker/examples/overview.tsx +5 -10
  189. package/src/components/color-picker/examples/sizes.tsx +4 -8
  190. package/src/components/crossfade/COMPONENT.md +2 -2
  191. package/src/components/crossfade/examples/screen.tsx +107 -112
  192. package/src/components/data-table/COMPONENT.md +5 -5
  193. package/src/components/data-table/examples/examples.module.css +9 -0
  194. package/src/components/data-table/examples/screen.tsx +42 -52
  195. package/src/components/data-table/examples/server.tsx +6 -2
  196. package/src/components/datepicker/examples/examples.module.css +6 -0
  197. package/src/components/datepicker/examples/inline-panel.tsx +3 -1
  198. package/src/components/description-list/COMPONENT.md +1 -1
  199. package/src/components/description-list/examples/screen.tsx +120 -127
  200. package/src/components/digit-input/examples/grouped.tsx +4 -4
  201. package/src/components/digit-input/examples/validation.tsx +1 -1
  202. package/src/components/divider/COMPONENT.md +2 -2
  203. package/src/components/divider/examples/examples.module.css +4 -1
  204. package/src/components/divider/examples/vertical.tsx +22 -9
  205. package/src/components/dnd/examples/examples.module.css +3 -1
  206. package/src/components/drawer/COMPONENT.md +1 -1
  207. package/src/components/drawer/examples/placement.tsx +26 -31
  208. package/src/components/drawer/examples/screen.tsx +137 -160
  209. package/src/components/dropdown/COMPONENT.md +1 -1
  210. package/src/components/example-frame/COMPONENT.md +3 -3
  211. package/src/components/field-list/examples/screen.module.css +1 -1
  212. package/src/components/field-list/examples/screen.tsx +19 -19
  213. package/src/components/fieldset/COMPONENT.md +1 -1
  214. package/src/components/fieldset/examples/states.tsx +1 -1
  215. package/src/components/file-upload/COMPONENT.md +1 -1
  216. package/src/components/file-upload/examples/screen.module.css +2 -2
  217. package/src/components/file-upload/examples/screen.tsx +65 -81
  218. package/src/components/gallery/COMPONENT.md +1 -0
  219. package/src/components/gantt/COMPONENT.md +1 -1
  220. package/src/components/gantt/examples/screen.module.css +1 -1
  221. package/src/components/gantt/examples/screen.tsx +55 -73
  222. package/src/components/hint/examples/examples.module.css +10 -1
  223. package/src/components/hint/examples/overview.tsx +1 -1
  224. package/src/components/kanban/COMPONENT.md +1 -1
  225. package/src/components/kanban/examples/screen.module.css +1 -1
  226. package/src/components/kanban/examples/screen.tsx +50 -65
  227. package/src/components/kbd/COMPONENT.md +1 -1
  228. package/src/components/label/examples/examples.module.css +12 -1
  229. package/src/components/label/examples/overview.tsx +1 -1
  230. package/src/components/list/COMPONENT.md +3 -3
  231. package/src/components/media-viewer/examples/controlled.tsx +16 -16
  232. package/src/components/media-viewer/examples/examples.module.css +1 -3
  233. package/src/components/pagination/COMPONENT.md +11 -3
  234. package/src/components/pagination/examples/controlled.tsx +2 -1
  235. package/src/components/popover/COMPONENT.md +3 -2
  236. package/src/components/popover/examples/width.tsx +13 -1
  237. package/src/components/slider/COMPONENT.md +3 -3
  238. package/src/components/slider/examples/states.tsx +14 -10
  239. package/src/components/smart-filter/COMPONENT.md +13 -13
  240. package/src/components/smart-filter/examples/examples.module.css +3 -0
  241. package/src/components/smart-filter/examples/many-values.tsx +12 -8
  242. package/src/components/smart-filter/examples/sizes.tsx +7 -3
  243. package/src/components/sparkline/COMPONENT.md +1 -0
  244. package/src/components/sparkline/examples/curve.tsx +16 -11
  245. package/src/components/sparkline/examples/states.tsx +14 -10
  246. package/src/components/switch/COMPONENT.md +1 -1
  247. package/src/components/tabs/COMPONENT.md +1 -1
  248. package/src/components/typography/COMPONENT.md +2 -2
  249. package/src/layout/app-shell/COMPONENT.md +25 -38
  250. package/src/layout/app-shell/examples/footer.tsx +10 -10
  251. package/src/layout/app-shell/examples/overview.tsx +20 -22
  252. package/src/layout/app-shell/examples/screen.module.css +2 -2
  253. package/src/layout/app-shell/examples/screen.tsx +25 -30
  254. package/src/layout/app-shell/examples/template.tsx +13 -17
  255. package/src/layout/bottom-nav/COMPONENT.md +3 -3
  256. package/src/layout/bottom-nav/examples/floating-action.tsx +10 -19
  257. package/src/layout/bottom-nav/examples/floating.tsx +10 -19
  258. package/src/layout/bottom-nav/examples/in-app-shell.tsx +11 -19
  259. package/src/layout/page/COMPONENT.md +353 -0
  260. package/src/layout/page/examples/actions-collapse.tsx +45 -0
  261. package/src/layout/page/examples/collapse.tsx +68 -0
  262. package/src/{components/page-content → layout/page}/examples/examples.module.css +33 -4
  263. package/{dist/skill/reference/components/page-content → src/layout/page}/examples/grid.tsx +15 -15
  264. package/src/{components/page-content → layout/page}/examples/list-detail.tsx +14 -14
  265. package/src/layout/page/examples/narrow.tsx +75 -0
  266. package/src/layout/page/examples/overview.tsx +57 -0
  267. package/src/{components/page-content → layout/page}/examples/screen.module.css +1 -1
  268. package/{dist/skill/reference/components/page-content → src/layout/page}/examples/screen.tsx +29 -19
  269. package/src/{components/page-content → layout/page}/examples/sections.tsx +17 -24
  270. package/src/layout/page/examples/structure.tsx +41 -0
  271. package/src/{components/page-toolbar/examples/narrow.tsx → layout/page/examples/tools.tsx} +38 -35
  272. package/src/layout/page/examples/top-bar.tsx +85 -0
  273. package/src/{components/page-content → layout/page}/examples/variants.tsx +7 -7
  274. package/src/layout/sidebar/COMPONENT.md +5 -4
  275. package/src/layout/sidebar/examples/dismiss.tsx +10 -7
  276. package/src/layout/sidebar/examples/narrow.tsx +11 -8
  277. package/src/styles/theme-dark.css +12 -10
  278. package/src/styles/theme-light.css +3 -0
  279. package/src/styles/tokens.css +3 -1
  280. package/dist/components/page-content/PageContent.d.ts +0 -192
  281. package/dist/components/page-toolbar/PageToolbar.d.ts +0 -55
  282. package/dist/layout/app-header/AppHeader.d.ts +0 -118
  283. package/dist/skill/reference/components/page-content/COMPONENT.md +0 -264
  284. package/dist/skill/reference/components/page-content/examples/narrow.tsx +0 -25
  285. package/dist/skill/reference/components/page-content/examples/overview.tsx +0 -41
  286. package/dist/skill/reference/components/page-toolbar/COMPONENT.md +0 -147
  287. package/dist/skill/reference/components/page-toolbar/examples/examples.module.css +0 -16
  288. package/dist/skill/reference/components/page-toolbar/examples/overview.tsx +0 -113
  289. package/dist/skill/reference/components/page-toolbar/examples/save-changes.tsx +0 -43
  290. package/dist/skill/reference/components/page-toolbar/examples/without-search.tsx +0 -60
  291. package/dist/skill/reference/layout/app-header/COMPONENT.md +0 -187
  292. package/dist/skill/reference/layout/app-header/examples/breadcrumbs.tsx +0 -37
  293. package/dist/skill/reference/layout/app-header/examples/examples.module.css +0 -28
  294. package/dist/skill/reference/layout/app-header/examples/in-app-shell.tsx +0 -67
  295. package/dist/skill/reference/layout/app-header/examples/narrow.tsx +0 -66
  296. package/dist/skill/reference/layout/app-header/examples/overview.tsx +0 -34
  297. package/dist/skill/reference/layout/app-header/examples/page-title.tsx +0 -78
  298. package/dist/skill/reference/layout/app-shell/examples/contained.tsx +0 -30
  299. package/src/components/page-content/COMPONENT.md +0 -264
  300. package/src/components/page-content/examples/narrow.tsx +0 -25
  301. package/src/components/page-content/examples/overview.tsx +0 -41
  302. package/src/components/page-toolbar/COMPONENT.md +0 -147
  303. package/src/components/page-toolbar/examples/examples.module.css +0 -16
  304. package/src/components/page-toolbar/examples/overview.tsx +0 -113
  305. package/src/components/page-toolbar/examples/save-changes.tsx +0 -43
  306. package/src/components/page-toolbar/examples/without-search.tsx +0 -60
  307. package/src/layout/app-header/COMPONENT.md +0 -187
  308. package/src/layout/app-header/examples/breadcrumbs.tsx +0 -37
  309. package/src/layout/app-header/examples/examples.module.css +0 -28
  310. package/src/layout/app-header/examples/in-app-shell.tsx +0 -67
  311. package/src/layout/app-header/examples/narrow.tsx +0 -66
  312. package/src/layout/app-header/examples/overview.tsx +0 -34
  313. package/src/layout/app-header/examples/page-title.tsx +0 -78
  314. package/src/layout/app-shell/examples/contained.tsx +0 -30
  315. package/dist/chunks/{chunk-U3Q2I3MY.js → chunk-2ODXLPW3.js} +2 -2
@@ -1,6 +1,5 @@
1
- /** A media library of a catalog object as a work screen: the title, the object and a PageToolbar with sections, search, order and upload in the app header; uploads in FileUpload tiles through a queue; a grid of Thumbnails that open MediaViewer out of the tile or are picked for bulk download and delete; a Skeleton first load and a filtered empty state in a Crossfade — `trigger`, `layout`. */
1
+ /** A media library of a catalog object as a work screen: the title, the object and a toolbar with sections, search, order and upload in its top bar; uploads in FileUpload tiles through a queue; a grid of Thumbnails that open MediaViewer out of the tile or are picked for bulk download and delete; a Skeleton first load and a filtered empty state in a Crossfade — `trigger`, `layout`. */
2
2
  import {
3
- AppHeader,
4
3
  Button,
5
4
  ConfirmDialog,
6
5
  Crossfade,
@@ -12,8 +11,7 @@ import {
12
11
  Icon,
13
12
  MediaViewer,
14
13
  type MediaViewerItem,
15
- PageContent,
16
- PageToolbar,
14
+ Page,
17
15
  SegmentedControl,
18
16
  Select,
19
17
  Skeleton,
@@ -365,76 +363,62 @@ export default function FileUploadScreenExample() {
365
363
  const totalSize = visible.reduce((sum, media) => sum + media.size, 0);
366
364
 
367
365
  return (
368
- <>
369
- {/* A work screen: in an app this header fills the shell's `header` slot and carries the page —
370
- the only h1, the object it belongs to and the page's tools; main has no PageContent.Header. */}
371
- <AppHeader.Root>
372
- <AppHeader.Start>
373
- <AppHeader.Title>
374
- Медиатека
375
- <AppHeader.Description>БЦ «Северная башня», Невский пр., 112</AppHeader.Description>
376
- </AppHeader.Title>
377
- </AppHeader.Start>
378
- <AppHeader.Tools>
379
- <SmartFilter.Root
380
- fields={[]}
381
- search={search}
382
- onSearchChange={setSearch}
383
- labels={{ searchPlaceholder: "Поиск по названию" }}
384
- >
385
- <PageToolbar.Root aria-label="Медиатека">
386
- <PageToolbar.Tools>
387
- <SmartFilter.Toolbar />
388
- </PageToolbar.Tools>
389
- <PageToolbar.Sections>
390
- <SegmentedControl.Root
391
- fullWidth
392
- value={section}
393
- onValueChange={(value) => setSection(value as Section)}
394
- aria-label="Раздел"
395
- >
396
- {SECTIONS.map((item) => (
397
- <SegmentedControl.Item key={item.value} value={item.value}>
398
- {item.label}
399
- {loading ? null : (
400
- <SegmentedControl.Count>{count(item.value)}</SegmentedControl.Count>
401
- )}
402
- </SegmentedControl.Item>
403
- ))}
404
- </SegmentedControl.Root>
405
- </PageToolbar.Sections>
406
- <PageToolbar.View>
407
- <Select.Root value={order} onValueChange={(value) => setOrder(value as Order)}>
408
- <Select.Trigger aria-label="Порядок">
409
- <Select.TriggerIcon>
410
- <Icon name="sort.descending" />
411
- </Select.TriggerIcon>
412
- <Select.Value />
413
- </Select.Trigger>
414
- <Select.Content>
415
- {ORDERS.map((item) => (
416
- <Select.Item key={item.value} value={item.value}>
417
- {item.label}
418
- </Select.Item>
419
- ))}
420
- </Select.Content>
421
- </Select.Root>
422
- </PageToolbar.View>
423
- <PageToolbar.Actions>
424
- <Button.Root onClick={() => picker.current?.open()}>
425
- <Button.Icon>
426
- <Icon name="action.upload" />
427
- </Button.Icon>
428
- Загрузить
429
- </Button.Root>
430
- </PageToolbar.Actions>
431
- </PageToolbar.Root>
432
- </SmartFilter.Root>
433
- </AppHeader.Tools>
434
- </AppHeader.Root>
435
-
436
- <PageContent.Root>
437
- <PageContent.Body>
366
+ <SmartFilter.Root
367
+ fields={[]}
368
+ search={search}
369
+ onSearchChange={setSearch}
370
+ labels={{ searchPlaceholder: "Поиск по названию" }}
371
+ >
372
+ <Page.Root>
373
+ {/* A work screen titles itself in its top bar: the only h1, the object it belongs to, the
374
+ page's tools — sections, search, order — and the upload. */}
375
+ <Page.TopBar>
376
+ <Page.Heading>
377
+ <Page.Title>Медиатека</Page.Title>
378
+ <Page.Description>БЦ «Северная башня», Невский пр., 112</Page.Description>
379
+ </Page.Heading>
380
+ <Page.Tools aria-label="Медиатека">
381
+ <SegmentedControl.Root
382
+ value={section}
383
+ onValueChange={(value) => setSection(value as Section)}
384
+ aria-label="Раздел"
385
+ >
386
+ {SECTIONS.map((item) => (
387
+ <SegmentedControl.Item key={item.value} value={item.value}>
388
+ {item.label}
389
+ {loading ? null : (
390
+ <SegmentedControl.Count>{count(item.value)}</SegmentedControl.Count>
391
+ )}
392
+ </SegmentedControl.Item>
393
+ ))}
394
+ </SegmentedControl.Root>
395
+ <SmartFilter.Toolbar />
396
+ <Select.Root value={order} onValueChange={(value) => setOrder(value as Order)}>
397
+ <Select.Trigger aria-label="Порядок">
398
+ <Select.TriggerIcon>
399
+ <Icon name="sort.descending" />
400
+ </Select.TriggerIcon>
401
+ <Select.Value />
402
+ </Select.Trigger>
403
+ <Select.Content>
404
+ {ORDERS.map((item) => (
405
+ <Select.Item key={item.value} value={item.value}>
406
+ {item.label}
407
+ </Select.Item>
408
+ ))}
409
+ </Select.Content>
410
+ </Select.Root>
411
+ </Page.Tools>
412
+ <Page.Actions>
413
+ <Button.Root onClick={() => picker.current?.open()}>
414
+ <Button.Icon>
415
+ <Icon name="action.upload" />
416
+ </Button.Icon>
417
+ Загрузить
418
+ </Button.Root>
419
+ </Page.Actions>
420
+ </Page.TopBar>
421
+ <Page.Body>
438
422
  {/* Uploads in flight: the add tile is also the drop zone; a done file moves into the grid. */}
439
423
  <FileUpload.Root
440
424
  label="Новые файлы"
@@ -447,7 +431,7 @@ export default function FileUploadScreenExample() {
447
431
  picker={picker}
448
432
  />
449
433
 
450
- <PageContent.Section
434
+ <Page.Section
451
435
  label="Файлы"
452
436
  description={
453
437
  <span aria-live="polite">
@@ -459,7 +443,7 @@ export default function FileUploadScreenExample() {
459
443
  </span>
460
444
  }
461
445
  >
462
- <PageContent.Actions>
446
+ <Page.Actions>
463
447
  <Crossfade state={selecting ? "select" : "browse"}>
464
448
  {selecting ? (
465
449
  <div className={styles.bar}>
@@ -509,7 +493,7 @@ export default function FileUploadScreenExample() {
509
493
  </div>
510
494
  )}
511
495
  </Crossfade>
512
- </PageContent.Actions>
496
+ </Page.Actions>
513
497
 
514
498
  <Crossfade state={state} aria-busy={loading}>
515
499
  {loading ? (
@@ -621,7 +605,7 @@ export default function FileUploadScreenExample() {
621
605
  </EmptyPage.Root>
622
606
  ) : null}
623
607
  </Crossfade>
624
- </PageContent.Section>
608
+ </Page.Section>
625
609
 
626
610
  <MediaViewer
627
611
  items={viewerItems}
@@ -641,8 +625,8 @@ export default function FileUploadScreenExample() {
641
625
  </Button.Root>
642
626
  )}
643
627
  />
644
- </PageContent.Body>
645
- </PageContent.Root>
646
- </>
628
+ </Page.Body>
629
+ </Page.Root>
630
+ </SmartFilter.Root>
647
631
  );
648
632
  }
@@ -97,6 +97,7 @@ Decided by the items, not a prop: the number of items and their ratios.
97
97
  - Tiles are `--prime-gallery-gap` (2px) apart; the gaps are the gallery's own background, transparent by default (a host may paint it: a message paints the incoming surface).
98
98
  - The outer corners are rounded (`--prime-radius-l`). A host that shapes and clips it itself (a message) passes `maxSize`: the gallery takes that length as its cap instead of its host's width and draws no radius of its own.
99
99
  - At any width the album keeps its layout: tiles scale with the gallery, never rearrange.
100
+ - A video tile shorter than 6.5rem (a small tile of a phone album) has no room for the centred play mark under the length pill: it shows the length alone, so the two marks never collide.
100
101
 
101
102
  ## Accessibility
102
103
 
@@ -224,7 +224,7 @@ A `tone` wins over `color`. Say the status in the label too, never only by color
224
224
  | [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`. |
225
225
  | [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`. |
226
226
  | [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`. |
227
- | [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`, `onItemOpen`. |
227
+ | [screen.tsx](examples/screen.tsx) | A team schedule as a work screen: the title with the people shown and a toolbar with search, filters, team sections and the primary action in its top bar over a full-height Gantt; moves saved or refused, new work drawn and named in a Modal, details in a Drawer — `scrollHeight`, `onBarChange`, `onBarCreate`, `onItemOpen`. |
228
228
 
229
229
  ## Mistakes
230
230
  - 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.
@@ -1,5 +1,5 @@
1
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
2
+ panel (`AppShell.Root fillViewport` + `Page.Root fill`) and the chart takes the free
3
3
  height. */
4
4
 
5
5
  /* On a short screen the chart keeps room for a few rows; the page scrolls instead. */
@@ -1,6 +1,5 @@
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`, `onItemOpen`. */
1
+ /** A team schedule as a work screen: the title with the people shown and a toolbar with search, filters, team sections and the primary action in its top bar over a full-height Gantt; moves saved or refused, new work drawn and named in a Modal, details in a Drawer — `scrollHeight`, `onBarChange`, `onBarCreate`, `onItemOpen`. */
2
2
  import {
3
- AppHeader,
4
3
  Avatar,
5
4
  Badge,
6
5
  Button,
@@ -17,8 +16,7 @@ import {
17
16
  Input,
18
17
  Modal,
19
18
  matchesSmartFilter,
20
- PageContent,
21
- PageToolbar,
19
+ Page,
22
20
  ProgressBar,
23
21
  SegmentedControl,
24
22
  Select,
@@ -441,73 +439,57 @@ export default function GanttScreenExample() {
441
439
  const detail = selected?.bar;
442
440
 
443
441
  return (
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>
442
+ <SmartFilter.Root
443
+ fields={FIELDS}
444
+ value={filter}
445
+ onValueChange={setFilter}
446
+ search={search}
447
+ onSearchChange={setSearch}
448
+ >
449
+ <Page.Root fill>
450
+ {/* A work screen titles itself in its top bar: the only h1, the teams, the search and the
451
+ filters, the one primary action. */}
452
+ <Page.TopBar>
453
+ <Page.Heading>
454
+ <Page.Title>Загрузка команды</Page.Title>
455
+ <Page.Description>
452
456
  {loading ? "Загружаем график…" : `Сотрудников: ${rows.length} из ${people.length}`}
453
- </AppHeader.Description>
454
- </AppHeader.Title>
455
- </AppHeader.Start>
456
- <AppHeader.Tools>
457
- <SmartFilter.Root
458
- fields={FIELDS}
459
- value={filter}
460
- onValueChange={setFilter}
461
- search={search}
462
- onSearchChange={setSearch}
463
- >
464
- <PageToolbar.Root aria-label="Загрузка команды">
465
- <PageToolbar.Tools>
466
- <SmartFilter.Toolbar />
467
- </PageToolbar.Tools>
468
- <PageToolbar.Sections>
469
- <SegmentedControl.Root
470
- fullWidth
471
- value={team}
472
- onValueChange={setTeam}
473
- aria-label="Команда"
474
- >
475
- <SegmentedControl.Item value="all">
476
- Все<SegmentedControl.Count>{people.length}</SegmentedControl.Count>
477
- </SegmentedControl.Item>
478
- {TEAMS.map((item) => (
479
- <SegmentedControl.Item key={item.value} value={item.value}>
480
- {item.label}
481
- <SegmentedControl.Count>
482
- {people.filter((person) => person.team === item.value).length}
483
- </SegmentedControl.Count>
484
- </SegmentedControl.Item>
485
- ))}
486
- </SegmentedControl.Root>
487
- </PageToolbar.Sections>
488
- <PageToolbar.Actions>
489
- <Button.Root
490
- onClick={() => {
491
- setErrors({});
492
- setDraft({ personId: null, dates: null });
493
- }}
494
- >
495
- <Button.Icon>
496
- <Icon name="action.add" />
497
- </Button.Icon>
498
- Назначить
499
- </Button.Root>
500
- </PageToolbar.Actions>
501
- <PageToolbar.Chips>
502
- <SmartFilter.Chips />
503
- </PageToolbar.Chips>
504
- </PageToolbar.Root>
505
- </SmartFilter.Root>
506
- </AppHeader.Tools>
507
- </AppHeader.Root>
508
-
509
- <PageContent.Root fill>
510
- <PageContent.Body>
457
+ </Page.Description>
458
+ </Page.Heading>
459
+ <Page.Tools aria-label="Загрузка команды">
460
+ <SegmentedControl.Root value={team} onValueChange={setTeam} aria-label="Команда">
461
+ <SegmentedControl.Item value="all">
462
+ Все<SegmentedControl.Count>{people.length}</SegmentedControl.Count>
463
+ </SegmentedControl.Item>
464
+ {TEAMS.map((item) => (
465
+ <SegmentedControl.Item key={item.value} value={item.value}>
466
+ {item.label}
467
+ <SegmentedControl.Count>
468
+ {people.filter((person) => person.team === item.value).length}
469
+ </SegmentedControl.Count>
470
+ </SegmentedControl.Item>
471
+ ))}
472
+ </SegmentedControl.Root>
473
+ <SmartFilter.Toolbar />
474
+ </Page.Tools>
475
+ <Page.Actions>
476
+ <Button.Root
477
+ onClick={() => {
478
+ setErrors({});
479
+ setDraft({ personId: null, dates: null });
480
+ }}
481
+ >
482
+ <Button.Icon>
483
+ <Icon name="action.add" />
484
+ </Button.Icon>
485
+ Назначить
486
+ </Button.Root>
487
+ </Page.Actions>
488
+ <Page.Chips>
489
+ <SmartFilter.Chips />
490
+ </Page.Chips>
491
+ </Page.TopBar>
492
+ <Page.Body>
511
493
  <Gantt<Person, Assignment>
512
494
  aria-label="Загрузка команды внедрения"
513
495
  className={styles.chart}
@@ -719,8 +701,8 @@ export default function GanttScreenExample() {
719
701
  </Drawer.Footer>
720
702
  </Drawer.Content>
721
703
  </Drawer.Root>
722
- </PageContent.Body>
723
- </PageContent.Root>
724
- </>
704
+ </Page.Body>
705
+ </Page.Root>
706
+ </SmartFilter.Root>
725
707
  );
726
708
  }
@@ -1,12 +1,21 @@
1
1
  /* Layout of the Hint scenarios: semantic tokens only. */
2
2
 
3
- /* overview.tsx, hint-or-error.tsx: control → support row at the m-tier hint gap. */
3
+ /* hint-or-error.tsx: control → support row at the m-tier hint gap. */
4
4
  .field {
5
5
  display: grid;
6
6
  justify-items: start;
7
7
  gap: var(--prime-control-m-hint-gap);
8
8
  }
9
9
 
10
+ /* overview.tsx: the same pair in a 320 px column — an embedded calendar measures its container
11
+ for its month, so the column gives it one. */
12
+ .calendarField {
13
+ display: grid;
14
+ justify-items: start;
15
+ gap: var(--prime-control-m-hint-gap);
16
+ width: min(100%, calc(var(--prime-space-20) * 4));
17
+ }
18
+
10
19
  .actions {
11
20
  display: flex;
12
21
  flex-wrap: wrap;
@@ -8,7 +8,7 @@ export default function HintOverviewExample() {
8
8
  const hintId = React.useId();
9
9
 
10
10
  return (
11
- <div className={styles.field}>
11
+ <div className={styles.calendarField}>
12
12
  <Datepicker.Panel
13
13
  mode="single"
14
14
  role="group"
@@ -234,7 +234,7 @@ A card's own `onKeyDown` runs before the board's: `preventDefault()` in it keeps
234
234
  | [states.tsx](examples/states.tsx) | Loading draws skeleton cards in the card geometry; an empty column keeps its drop area and a closed order stays in place while the rest move; a read-only board drags nothing — `loading`, `disabled`. |
235
235
  | [controlled.tsx](examples/controlled.tsx) | The placement lives in the parent: every move arrives with its source, target and position to save, and a button resets the board — `value`, `onValueChange`. |
236
236
  | [narrow.tsx](examples/narrow.tsx) | On a phone-width screen a column takes 85% of the board and snaps into place, so the next one peeks; the strip scrolls inside the board, never the page — `Kanban.Root`, `columns`. |
237
- | [screen.tsx](examples/screen.tsx) | A sales pipeline as a work screen: the title with the open deals and their sum, search, filter, the board / list switch and the one primary action in the app header, a full-height Kanban of deals by stage with totals, moves saved on the server that can be refused, and the deal in a Drawer — `value`, `onValueChange`, `renderColumnMeta`, `onItemOpen`. |
237
+ | [screen.tsx](examples/screen.tsx) | A sales pipeline as a work screen: the title with the open deals and their sum, search, filter, the board / list switch and the one primary action in its top bar, a full-height Kanban of deals by stage with totals, moves saved on the server that can be refused, and the deal in a Drawer — `value`, `onValueChange`, `renderColumnMeta`, `onItemOpen`. |
238
238
 
239
239
  ## Mistakes
240
240
  - Returning something other than `Kanban.Item` from `renderItem` → the card does not drag and Alt + arrows do nothing.
@@ -1,5 +1,5 @@
1
1
  /* Kanban board: 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 board or the list takes
2
+ panel (`AppShell.Root fillViewport` + `Page.Root fill`) and the board or the list takes
3
3
  the free height; every column scrolls inside the board, never the page. */
4
4
 
5
5
  /* Company cell: the name over the deal id (the column's `minWidth` keeps it on its lines). */
@@ -1,6 +1,5 @@
1
- /** A sales pipeline as a work screen: the title with the open deals and their sum, search, filter, the board / list switch and the one primary action in the app header, a full-height Kanban of deals by stage with totals, moves saved on the server that can be refused, and the deal in a Drawer — `value`, `onValueChange`, `renderColumnMeta`, `onItemOpen`. */
1
+ /** A sales pipeline as a work screen: the title with the open deals and their sum, search, filter, the board / list switch and the one primary action in its top bar, a full-height Kanban of deals by stage with totals, moves saved on the server that can be refused, and the deal in a Drawer — `value`, `onValueChange`, `renderColumnMeta`, `onItemOpen`. */
2
2
  import {
3
- AppHeader,
4
3
  Avatar,
5
4
  Badge,
6
5
  Button,
@@ -16,8 +15,7 @@ import {
16
15
  type KanbanColumn,
17
16
  type KanbanValue,
18
17
  matchesSmartFilter,
19
- PageContent,
20
- PageToolbar,
18
+ Page,
21
19
  type PaletteColor,
22
20
  SegmentedControl,
23
21
  SmartFilter,
@@ -359,64 +357,51 @@ export default function KanbanScreenExample() {
359
357
  const nextStage = STAGES[STAGES.findIndex((stage) => stage.id === dealStage) + 1];
360
358
 
361
359
  return (
362
- <>
363
- {/* A work screen: in an app this header fills the shell's `header` slot and carries the page —
364
- the only h1 and the page's tools; main has no PageContent.Header. */}
365
- <AppHeader.Root>
366
- <AppHeader.Start>
367
- <AppHeader.Title>
368
- Сделки
369
- <AppHeader.Description>
370
- {loading ? "Загружаем воронку…" : pipeline}
371
- </AppHeader.Description>
372
- </AppHeader.Title>
373
- </AppHeader.Start>
374
- <AppHeader.Tools>
375
- <SmartFilter.Root
376
- fields={FIELDS}
377
- value={filter}
378
- onValueChange={setFilter}
379
- search={search}
380
- onSearchChange={setSearch}
381
- >
382
- <PageToolbar.Root aria-label="Сделки">
383
- <PageToolbar.Tools>
384
- <SmartFilter.Toolbar />
385
- </PageToolbar.Tools>
386
- <PageToolbar.View>
387
- <SegmentedControl.Root value={view} onValueChange={setView} aria-label="Вид">
388
- <SegmentedControl.Item value="board">
389
- <SegmentedControl.Icon>
390
- <Icon name="view.columns" />
391
- </SegmentedControl.Icon>
392
- Доска
393
- </SegmentedControl.Item>
394
- <SegmentedControl.Item value="list">
395
- <SegmentedControl.Icon>
396
- <Icon name="format.list" />
397
- </SegmentedControl.Icon>
398
- Список
399
- </SegmentedControl.Item>
400
- </SegmentedControl.Root>
401
- </PageToolbar.View>
402
- <PageToolbar.Actions>
403
- <Button.Root>
404
- <Button.Icon>
405
- <Icon name="action.add" />
406
- </Button.Icon>
407
- Новая сделка
408
- </Button.Root>
409
- </PageToolbar.Actions>
410
- <PageToolbar.Chips>
411
- <SmartFilter.Chips />
412
- </PageToolbar.Chips>
413
- </PageToolbar.Root>
414
- </SmartFilter.Root>
415
- </AppHeader.Tools>
416
- </AppHeader.Root>
417
-
418
- <PageContent.Root fill>
419
- <PageContent.Body>
360
+ <SmartFilter.Root
361
+ fields={FIELDS}
362
+ value={filter}
363
+ onValueChange={setFilter}
364
+ search={search}
365
+ onSearchChange={setSearch}
366
+ >
367
+ <Page.Root fill>
368
+ {/* A work screen titles itself in its top bar: the only h1, the search and the filters, the
369
+ view, the one primary action. */}
370
+ <Page.TopBar>
371
+ <Page.Heading>
372
+ <Page.Title>Сделки</Page.Title>
373
+ <Page.Description>{loading ? "Загружаем воронку…" : pipeline}</Page.Description>
374
+ </Page.Heading>
375
+ <Page.Tools aria-label="Сделки">
376
+ <SmartFilter.Toolbar />
377
+ <SegmentedControl.Root value={view} onValueChange={setView} aria-label="Вид">
378
+ <SegmentedControl.Item value="board">
379
+ <SegmentedControl.Icon>
380
+ <Icon name="view.columns" />
381
+ </SegmentedControl.Icon>
382
+ Доска
383
+ </SegmentedControl.Item>
384
+ <SegmentedControl.Item value="list">
385
+ <SegmentedControl.Icon>
386
+ <Icon name="format.list" />
387
+ </SegmentedControl.Icon>
388
+ Список
389
+ </SegmentedControl.Item>
390
+ </SegmentedControl.Root>
391
+ </Page.Tools>
392
+ <Page.Actions>
393
+ <Button.Root>
394
+ <Button.Icon>
395
+ <Icon name="action.add" />
396
+ </Button.Icon>
397
+ Новая сделка
398
+ </Button.Root>
399
+ </Page.Actions>
400
+ <Page.Chips>
401
+ <SmartFilter.Chips />
402
+ </Page.Chips>
403
+ </Page.TopBar>
404
+ <Page.Body>
420
405
  <Crossfade state={view} fill>
421
406
  {view === "board" ? (
422
407
  // `plain` (the default): the board is the page's main region, so the stages are no
@@ -567,8 +552,8 @@ export default function KanbanScreenExample() {
567
552
  </Drawer.Footer>
568
553
  </Drawer.Content>
569
554
  </Drawer.Root>
570
- </PageContent.Body>
571
- </PageContent.Root>
572
- </>
555
+ </Page.Body>
556
+ </Page.Root>
557
+ </SmartFilter.Root>
573
558
  );
574
559
  }
@@ -39,7 +39,7 @@ Kbd <kbd>; one key, its badge tier, children (text, Icon or both)
39
39
  | `…rest` | `Omit<HTMLAttributes<HTMLElement>, "size">` | — | `className`, `title`, `aria-label` and the other `<kbd>` attributes. |
40
40
 
41
41
  ## Variants
42
- Kbd has one look: monospace text in `text-secondary` on a translucent `fill-subtle-active` wash, no border, weight 500. No `variant`, `tone` or `color`.
42
+ Kbd has one look: monospace text (`--prime-font-family-key`: the mono faces, with ⇧ ⌥ ⌃ ⌘ from the system face so they match the letters) in `text-secondary` on a translucent `fill-subtle-active` wash, no border, weight 500. No `variant`, `tone` or `color`.
43
43
 
44
44
  ### size
45
45
  | Value | Looks like | Use when | Default |
@@ -1,8 +1,19 @@
1
1
  /* Layout of the Label scenarios: semantic tokens only. */
2
2
 
3
- /* overview.tsx, structure.tsx: a label above what it names, at the m-tier label gap. */
3
+ /* structure.tsx: a label above what it names, at the m-tier label gap, in a 320 px field column —
4
+ the fields stack centred in the stage and share one start edge, as labels of one form do. */
4
5
  .field {
5
6
  display: grid;
6
7
  justify-items: start;
7
8
  gap: var(--prime-control-m-label-gap);
9
+ width: min(100%, calc(var(--prime-space-20) * 4));
10
+ }
11
+
12
+ /* overview.tsx: the same pair in a 320 px column — an embedded calendar measures its container
13
+ for its month, so the column gives it one. */
14
+ .calendarField {
15
+ display: grid;
16
+ justify-items: start;
17
+ gap: var(--prime-control-m-label-gap);
18
+ width: min(100%, calc(var(--prime-space-20) * 4));
8
19
  }
@@ -8,7 +8,7 @@ export default function LabelOverviewExample() {
8
8
  const labelId = React.useId();
9
9
 
10
10
  return (
11
- <div className={styles.field}>
11
+ <div className={styles.calendarField}>
12
12
  <Label.Root id={labelId}>Дата отгрузки</Label.Root>
13
13
  <Datepicker.Panel mode="single" role="group" aria-labelledby={labelId} />
14
14
  </div>