prime-ui-kit 0.15.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 (1190) hide show
  1. package/README.md +79 -74
  2. package/dist/chunks/{chunk-Q3BFRQHZ.js → chunk-2ODXLPW3.js} +169 -10
  3. package/dist/chunks/{chunk-XJAVS6FH.js → chunk-7WWZYGRC.js} +5482 -4179
  4. package/dist/chunks/{chunk-THFZIHKU.js → chunk-A4WE3UNC.js} +28219 -27605
  5. package/dist/chunks/{chunk-6TI4DSM5.js → chunk-PRP4B6OG.js} +1 -1
  6. package/dist/chunks/{chunk-2IKH55MI.js → chunk-SVFWPLNW.js} +215 -154
  7. package/dist/color-picker.d.ts +1 -1
  8. package/dist/color-picker.js +3 -3
  9. package/dist/components/accordion/Accordion.d.ts +52 -5
  10. package/dist/components/avatar/Avatar.d.ts +31 -8
  11. package/dist/components/badge/Badge.d.ts +93 -25
  12. package/dist/components/banner/Banner.d.ts +17 -10
  13. package/dist/components/breadcrumb/Breadcrumb.d.ts +18 -5
  14. package/dist/components/button/Button.d.ts +102 -43
  15. package/dist/components/button-group/ButtonGroup.d.ts +32 -8
  16. package/dist/components/card/Card.d.ts +15 -9
  17. package/dist/components/chart-frame/ChartFrame.d.ts +58 -51
  18. package/dist/components/chat/Chat.d.ts +77 -38
  19. package/dist/components/chat/ChatPinned.d.ts +20 -8
  20. package/dist/components/chat/ChatRows.d.ts +8 -1
  21. package/dist/components/chat/MessageList.d.ts +14 -19
  22. package/dist/components/chat/chatContext.d.ts +3 -3
  23. package/dist/components/chat/messageFlow.d.ts +1 -1
  24. package/dist/components/chat-list/ChatList.d.ts +88 -34
  25. package/dist/components/checkbox/Checkbox.d.ts +61 -12
  26. package/dist/components/code-block/CodeBlock.d.ts +11 -5
  27. package/dist/components/color-field/ColorField.d.ts +54 -14
  28. package/dist/components/color-picker/ColorPicker.d.ts +81 -30
  29. package/dist/components/color-picker/ColorPresets.d.ts +68 -13
  30. package/dist/components/color-swatches/ColorSwatches.d.ts +90 -18
  31. package/dist/components/command-menu/CommandMenu.d.ts +86 -27
  32. package/dist/components/composer/Composer.d.ts +82 -41
  33. package/dist/components/composer/useRecorder.d.ts +0 -2
  34. package/dist/components/confirm-dialog/ConfirmDialog.d.ts +40 -16
  35. package/dist/components/crossfade/Crossfade.d.ts +5 -8
  36. package/dist/components/data-table/ColumnsMenu.d.ts +6 -2
  37. package/dist/components/data-table/DataTable.d.ts +157 -58
  38. package/dist/components/data-table/Footer.d.ts +2 -4
  39. package/dist/components/data-table/Row.d.ts +1 -1
  40. package/dist/components/data-table/StateRows.d.ts +2 -2
  41. package/dist/components/data-table/reorder.d.ts +10 -10
  42. package/dist/components/data-table/types.d.ts +5 -0
  43. package/dist/components/data-table/useInfiniteRows.d.ts +3 -3
  44. package/dist/components/datepicker/Datepicker.d.ts +61 -12
  45. package/dist/components/datepicker/DatepickerPanel.d.ts +76 -16
  46. package/dist/components/datepicker/panelLayout.d.ts +6 -11
  47. package/dist/components/description-list/DescriptionList.d.ts +40 -11
  48. package/dist/components/digit-input/DigitInput.d.ts +50 -19
  49. package/dist/components/divider/Divider.d.ts +15 -5
  50. package/dist/components/dnd/Dnd.d.ts +152 -41
  51. package/dist/components/dnd/geometry.d.ts +0 -8
  52. package/dist/components/dnd/labels.d.ts +1 -1
  53. package/dist/components/dnd/useDropTarget.d.ts +0 -2
  54. package/dist/components/dnd/useSortableList.d.ts +6 -1
  55. package/dist/components/drawer/Drawer.d.ts +39 -18
  56. package/dist/components/dropdown/Dropdown.d.ts +90 -19
  57. package/dist/components/empty-page/EmptyPage.d.ts +14 -15
  58. package/dist/components/example-frame/ExampleFrame.d.ts +38 -8
  59. package/dist/components/field-list/FieldList.d.ts +57 -19
  60. package/dist/components/fieldset/Fieldset.d.ts +12 -7
  61. package/dist/components/file-upload/FileUpload.d.ts +119 -42
  62. package/dist/components/gallery/Gallery.d.ts +44 -16
  63. package/dist/components/gallery/layout.d.ts +4 -1
  64. package/dist/components/gantt/Gantt.d.ts +69 -34
  65. package/dist/components/gantt/GanttRow.d.ts +2 -2
  66. package/dist/components/hint/Hint.d.ts +10 -4
  67. package/dist/components/index.d.ts +18 -21
  68. package/dist/components/input/Input.d.ts +78 -25
  69. package/dist/components/kanban/Kanban.d.ts +64 -36
  70. package/dist/components/kbd/Kbd.d.ts +3 -1
  71. package/dist/components/label/Label.d.ts +33 -4
  72. package/dist/components/link-button/LinkButton.d.ts +40 -10
  73. package/dist/components/list/List.d.ts +48 -26
  74. package/dist/components/login-form/LoginForm.d.ts +66 -7
  75. package/dist/components/media-viewer/MediaViewer.d.ts +46 -18
  76. package/dist/components/media-viewer/physics.d.ts +0 -2
  77. package/dist/components/media-viewer/viewerEngine.d.ts +0 -1
  78. package/dist/components/message/Message.d.ts +27 -16
  79. package/dist/components/message/MessageCards.d.ts +49 -10
  80. package/dist/components/message/MessageFile.d.ts +19 -5
  81. package/dist/components/message/MessageParts.d.ts +44 -18
  82. package/dist/components/message/MessageReactionBar.d.ts +3 -1
  83. package/dist/components/message/MessageTyping.d.ts +10 -6
  84. package/dist/components/message/bubbleMorph.d.ts +2 -0
  85. package/dist/components/modal/Modal.d.ts +6 -6
  86. package/dist/components/native-select/NativeSelect.d.ts +22 -7
  87. package/dist/components/notification/Notification.d.ts +35 -11
  88. package/dist/components/notification/NotificationStore.d.ts +12 -3
  89. package/dist/components/pagination/Pagination.d.ts +29 -6
  90. package/dist/components/popover/Popover.d.ts +54 -31
  91. package/dist/components/progress-bar/ProgressBar.d.ts +37 -12
  92. package/dist/components/progress-circle/ProgressCircle.d.ts +32 -13
  93. package/dist/components/radio/Radio.d.ts +58 -15
  94. package/dist/components/scroll-container/ScrollContainer.d.ts +28 -14
  95. package/dist/components/scroll-container/useScrollEdges.d.ts +1 -24
  96. package/dist/components/segmented-control/SegmentedControl.d.ts +73 -15
  97. package/dist/components/select/Select.d.ts +104 -30
  98. package/dist/components/select/SelectItem.d.ts +35 -8
  99. package/dist/components/select/selectContext.d.ts +7 -19
  100. package/dist/components/sheet/Sheet.d.ts +32 -15
  101. package/dist/components/skeleton/Skeleton.d.ts +9 -3
  102. package/dist/components/slider/Slider.d.ts +55 -15
  103. package/dist/components/smart-filter/SmartFilter.d.ts +39 -13
  104. package/dist/components/sparkline/Sparkline.d.ts +42 -19
  105. package/dist/components/spinner/Spinner.d.ts +11 -5
  106. package/dist/components/stepper/Stepper.d.ts +41 -19
  107. package/dist/components/switch/Switch.d.ts +37 -12
  108. package/dist/components/tabs/Tabs.d.ts +61 -18
  109. package/dist/components/tag-select/TagSelect.d.ts +74 -20
  110. package/dist/components/textarea/Textarea.d.ts +52 -25
  111. package/dist/components/thumbnail/Thumbnail.d.ts +50 -20
  112. package/dist/components/timeline/Timeline.d.ts +85 -66
  113. package/dist/components/tooltip/Tooltip.d.ts +47 -17
  114. package/dist/components/typography/Typography.d.ts +32 -6
  115. package/dist/components/video-note/VideoNote.d.ts +7 -1
  116. package/dist/{internal → components/visually-hidden}/VisuallyHidden.d.ts +5 -5
  117. package/dist/components/voice-player/VoicePlayer.d.ts +16 -3
  118. package/dist/hooks/breakpoints.d.ts +10 -0
  119. package/dist/hooks/floatingPosition.d.ts +42 -0
  120. package/dist/hooks/useDraft.d.ts +12 -0
  121. package/dist/hooks/useEdgeOverflow.d.ts +5 -3
  122. package/dist/hooks/useElementSize.d.ts +31 -0
  123. package/dist/hooks/useEnterConfirm.d.ts +2 -1
  124. package/dist/hooks/useImageStatus.d.ts +12 -5
  125. package/dist/hooks/useLoadMore.d.ts +28 -0
  126. package/dist/hooks/useMediaQuery.d.ts +1 -3
  127. package/dist/hooks/useMergedRefs.d.ts +10 -4
  128. package/dist/hooks/useModalLayer.d.ts +13 -7
  129. package/dist/hooks/usePosition.d.ts +4 -42
  130. package/dist/hooks/usePresence.d.ts +4 -7
  131. package/dist/hooks/useScrollRegion.d.ts +28 -0
  132. package/dist/hooks/useStableValue.d.ts +6 -0
  133. package/dist/hooks/useSwipeDismiss.d.ts +38 -17
  134. package/dist/hooks/useVirtualRows.d.ts +9 -3
  135. package/dist/icon-set.js +2 -2
  136. package/dist/icons/Icon.d.ts +1 -1
  137. package/dist/icons/glyph.d.ts +9 -2
  138. package/dist/index.css +1 -1
  139. package/dist/index.js +15 -9
  140. package/dist/internal/AnchorRectContext.d.ts +2 -1
  141. package/dist/internal/ChartTooltip.d.ts +1 -1
  142. package/dist/internal/CheckMark.d.ts +2 -2
  143. package/dist/internal/ChoiceField.d.ts +29 -10
  144. package/dist/internal/ControlSizeContext.d.ts +16 -0
  145. package/dist/internal/Disclosure.d.ts +38 -9
  146. package/dist/internal/FieldAction.d.ts +20 -12
  147. package/dist/internal/FieldCommit.d.ts +8 -11
  148. package/dist/internal/FieldFrame.d.ts +100 -21
  149. package/dist/internal/MenuGroup.d.ts +3 -1
  150. package/dist/internal/MorphText.d.ts +2 -1
  151. package/dist/internal/ProgressLegend.d.ts +3 -2
  152. package/dist/internal/RegionSwap.d.ts +41 -0
  153. package/dist/internal/RollingNumber.d.ts +10 -1
  154. package/dist/internal/RowAction.d.ts +26 -0
  155. package/dist/internal/SwitcherScroller.d.ts +11 -0
  156. package/dist/internal/attachmentTile.d.ts +1 -1
  157. package/dist/internal/audio.d.ts +13 -0
  158. package/dist/internal/barPlan.d.ts +44 -0
  159. package/dist/{components/badge/tier.d.ts → internal/chipTier.d.ts} +7 -5
  160. package/dist/internal/context.d.ts +10 -1
  161. package/dist/internal/controlValue.d.ts +7 -0
  162. package/dist/internal/edgeAutoScroll.d.ts +43 -25
  163. package/dist/internal/fieldCell.d.ts +4 -3
  164. package/dist/internal/fieldClasses.d.ts +15 -2
  165. package/dist/internal/fileSize.d.ts +5 -1
  166. package/dist/internal/formatClock.d.ts +2 -0
  167. package/dist/internal/formatNumber.d.ts +6 -0
  168. package/dist/internal/glyphSwap.d.ts +5 -9
  169. package/dist/internal/hasContent.d.ts +6 -0
  170. package/dist/internal/highlightTsx.d.ts +12 -0
  171. package/dist/internal/iconBox.d.ts +6 -0
  172. package/dist/internal/iconLayout.d.ts +2 -1
  173. package/dist/internal/imageSlot.d.ts +6 -1
  174. package/dist/internal/interactiveElement.d.ts +41 -0
  175. package/dist/internal/labels.d.ts +6 -0
  176. package/dist/internal/leaveInPlace.d.ts +6 -5
  177. package/dist/internal/listPresence.d.ts +32 -0
  178. package/dist/internal/listbox.d.ts +71 -31
  179. package/dist/internal/longPress.d.ts +42 -0
  180. package/dist/internal/mediaDisk.d.ts +7 -4
  181. package/dist/internal/mediaPlayer.d.ts +91 -27
  182. package/dist/internal/mediaSession.d.ts +0 -6
  183. package/dist/internal/messageList.d.ts +4 -3
  184. package/dist/internal/motionTiming.d.ts +34 -0
  185. package/dist/internal/namedRole.d.ts +13 -0
  186. package/dist/internal/nodeText.d.ts +6 -0
  187. package/dist/{components/modal → internal/overlay}/DialogGuard.d.ts +3 -5
  188. package/dist/{components/modal → internal/overlay}/DialogParts.d.ts +86 -89
  189. package/dist/internal/overlay/FloatingPanel.d.ts +27 -5
  190. package/dist/internal/overlay/ModalDialog.d.ts +59 -0
  191. package/dist/internal/overlay/focus.d.ts +31 -6
  192. package/dist/internal/overlay/layerStack.d.ts +8 -5
  193. package/dist/internal/overlay/useAnchorName.d.ts +14 -0
  194. package/dist/internal/overlay/useContainScroll.d.ts +7 -0
  195. package/dist/internal/overlay/useFloatingLayer.d.ts +43 -14
  196. package/dist/internal/overlay/useOpenState.d.ts +22 -0
  197. package/dist/internal/partPresence.d.ts +31 -0
  198. package/dist/internal/parts.d.ts +39 -0
  199. package/dist/internal/progressSegments.d.ts +52 -12
  200. package/dist/internal/richText.d.ts +6 -34
  201. package/dist/internal/ring.d.ts +18 -8
  202. package/dist/internal/rovingFocus.d.ts +10 -5
  203. package/dist/{components/data-table/rowEvents.d.ts → internal/rowLink.d.ts} +0 -5
  204. package/dist/internal/scrollAncestors.d.ts +14 -0
  205. package/dist/internal/selectionIndicator.d.ts +27 -0
  206. package/dist/internal/slot.d.ts +23 -5
  207. package/dist/internal/states.d.ts +61 -0
  208. package/dist/internal/sticky.d.ts +5 -1
  209. package/dist/internal/swallowNextClick.d.ts +9 -0
  210. package/dist/internal/swatch.d.ts +59 -15
  211. package/dist/internal/textFormatting.d.ts +2 -1
  212. package/dist/internal/textFormattingToolbar.d.ts +3 -2
  213. package/dist/internal/tokenDefaults.d.ts +21 -0
  214. package/dist/internal/touchTarget.d.ts +5 -0
  215. package/dist/internal/transcript.d.ts +19 -18
  216. package/dist/internal/transfer.d.ts +22 -8
  217. package/dist/internal/transferDisk.d.ts +2 -3
  218. package/dist/internal/useFlipList.d.ts +44 -0
  219. package/dist/internal/useNearView.d.ts +4 -3
  220. package/dist/internal/usePendingChanges.d.ts +23 -0
  221. package/dist/internal/useRangeSelection.d.ts +2 -1
  222. package/dist/layout/app-shell/AppShell.d.ts +63 -18
  223. package/dist/layout/bottom-nav/BottomNav.d.ts +58 -22
  224. package/dist/layout/index.d.ts +4 -4
  225. package/dist/layout/page/Page.d.ts +263 -0
  226. package/dist/layout/sidebar/Sidebar.d.ts +232 -101
  227. package/dist/skill/SKILL.md +16 -16
  228. package/dist/skill/anti-slop.md +204 -27
  229. package/dist/skill/api-contract.md +115 -35
  230. package/dist/skill/cheatsheet.md +60 -55
  231. package/dist/skill/checklist.md +61 -89
  232. package/dist/skill/choosing.md +26 -27
  233. package/dist/skill/components.md +50 -50
  234. package/dist/skill/composition.md +220 -185
  235. package/dist/skill/foundations.md +39 -32
  236. package/dist/skill/layouts.md +82 -143
  237. package/dist/skill/motion.md +26 -31
  238. package/dist/skill/reference/components/accordion/COMPONENT.md +16 -9
  239. package/dist/skill/reference/components/accordion/examples/overview.tsx +2 -2
  240. package/dist/skill/reference/components/accordion/examples/sizes.tsx +6 -8
  241. package/dist/skill/reference/components/accordion/examples/states.tsx +27 -24
  242. package/dist/skill/reference/components/accordion/examples/variants.tsx +6 -8
  243. package/dist/skill/reference/components/accordion/examples/with-icon.tsx +22 -19
  244. package/dist/skill/reference/components/avatar/COMPONENT.md +24 -17
  245. package/dist/skill/reference/components/avatar/examples/examples.module.css +1 -4
  246. package/dist/skill/reference/components/avatar/examples/overview.tsx +3 -3
  247. package/dist/skill/reference/components/avatar/examples/presence.tsx +4 -4
  248. package/dist/skill/reference/components/avatar/examples/src-from-state.tsx +3 -3
  249. package/dist/skill/reference/components/avatar/examples/states.tsx +4 -4
  250. package/dist/skill/reference/components/avatar/examples/team-group.tsx +3 -3
  251. package/dist/skill/reference/components/badge/COMPONENT.md +66 -34
  252. package/dist/skill/reference/components/badge/examples/controlled.tsx +32 -0
  253. package/dist/skill/reference/components/badge/examples/examples.module.css +2 -2
  254. package/dist/skill/reference/components/badge/examples/filter-values.tsx +4 -6
  255. package/dist/skill/reference/components/badge/examples/in-controls.tsx +1 -1
  256. package/dist/skill/reference/components/badge/examples/overview.tsx +6 -5
  257. package/dist/skill/reference/components/badge/examples/square.tsx +21 -0
  258. package/dist/skill/reference/components/badge/examples/states.tsx +4 -4
  259. package/dist/skill/reference/components/badge/examples/with-icon.tsx +10 -1
  260. package/dist/skill/reference/components/banner/COMPONENT.md +13 -9
  261. package/dist/skill/reference/components/banner/examples/dismissible.tsx +3 -19
  262. package/dist/skill/reference/components/banner/examples/examples.module.css +6 -1
  263. package/dist/skill/reference/components/banner/examples/overview.tsx +1 -1
  264. package/dist/skill/reference/components/banner/examples/page-strip.tsx +24 -22
  265. package/dist/skill/reference/components/breadcrumb/COMPONENT.md +23 -16
  266. package/dist/skill/reference/components/breadcrumb/examples/examples.module.css +1 -1
  267. package/dist/skill/reference/components/breadcrumb/examples/overflow.tsx +1 -1
  268. package/dist/skill/reference/components/breadcrumb/examples/sizes.tsx +6 -8
  269. package/dist/skill/reference/components/breadcrumb/examples/with-icon.tsx +15 -8
  270. package/dist/skill/reference/components/button/COMPONENT.md +67 -30
  271. package/dist/skill/reference/components/button/examples/align.tsx +25 -0
  272. package/dist/skill/reference/components/button/examples/controlled.tsx +21 -0
  273. package/dist/skill/reference/components/button/examples/density.tsx +45 -0
  274. package/dist/skill/reference/components/button/examples/examples.module.css +14 -25
  275. package/dist/skill/reference/components/button/examples/hold-to-confirm.tsx +1 -1
  276. package/dist/skill/reference/components/button/examples/label-morph.tsx +1 -1
  277. package/dist/skill/reference/components/button/examples/on-colored-host.tsx +19 -19
  278. package/dist/skill/reference/components/button/examples/over-media.tsx +7 -1
  279. package/dist/skill/reference/components/button/examples/toggle.tsx +2 -10
  280. package/dist/skill/reference/components/button-group/COMPONENT.md +21 -15
  281. package/dist/skill/reference/components/button-group/examples/controlled.tsx +1 -1
  282. package/dist/skill/reference/components/card/COMPONENT.md +21 -10
  283. package/dist/skill/reference/components/card/examples/content-templates.tsx +8 -2
  284. package/dist/skill/reference/components/card/examples/examples.module.css +4 -16
  285. package/dist/skill/reference/components/card/examples/overview.tsx +11 -11
  286. package/dist/skill/reference/components/card/examples/screen.module.css +1 -1
  287. package/dist/skill/reference/components/card/examples/screen.tsx +185 -198
  288. package/dist/skill/reference/components/card/examples/variants.tsx +74 -47
  289. package/dist/skill/reference/components/chart-frame/COMPONENT.md +24 -28
  290. package/dist/skill/reference/components/chart-frame/examples/controlled.tsx +9 -7
  291. package/dist/skill/reference/components/chart-frame/examples/fill-height.tsx +13 -15
  292. package/dist/skill/reference/components/chart-frame/examples/narrow.tsx +24 -5
  293. package/dist/skill/reference/components/chart-frame/examples/overview.tsx +5 -2
  294. package/dist/skill/reference/components/chart-frame/examples/states.tsx +72 -64
  295. package/dist/skill/reference/components/chart-frame/examples/tooltip.tsx +27 -26
  296. package/dist/skill/reference/components/chat/COMPONENT.md +39 -26
  297. package/dist/skill/reference/components/chat/examples/group-chat.tsx +2 -2
  298. package/dist/skill/reference/components/chat/examples/overview.tsx +119 -130
  299. package/dist/skill/reference/components/chat/examples/reactions.tsx +18 -23
  300. package/dist/skill/reference/components/chat/examples/screen.module.css +1 -1
  301. package/dist/skill/reference/components/chat/examples/screen.tsx +212 -242
  302. package/dist/skill/reference/components/chat/examples/states.tsx +23 -22
  303. package/dist/skill/reference/components/chat-list/COMPONENT.md +11 -6
  304. package/dist/skill/reference/components/chat-list/examples/controlled.tsx +2 -2
  305. package/dist/skill/reference/components/chat-list/examples/examples.module.css +8 -8
  306. package/dist/skill/reference/components/chat-list/examples/live.tsx +29 -22
  307. package/dist/skill/reference/components/chat-list/examples/sizes.tsx +6 -8
  308. package/dist/skill/reference/components/chat-list/examples/states.tsx +42 -38
  309. package/dist/skill/reference/components/checkbox/COMPONENT.md +27 -14
  310. package/dist/skill/reference/components/checkbox/examples/controlled.tsx +18 -16
  311. package/dist/skill/reference/components/checkbox/examples/examples.module.css +15 -56
  312. package/dist/skill/reference/components/checkbox/examples/in-form.tsx +16 -16
  313. package/dist/skill/reference/components/checkbox/examples/indicator.tsx +19 -64
  314. package/dist/skill/reference/components/checkbox/examples/overview.tsx +1 -1
  315. package/dist/skill/reference/components/checkbox/examples/states.tsx +1 -1
  316. package/dist/skill/reference/components/checkbox/examples/without-label.tsx +1 -1
  317. package/dist/skill/reference/components/code-block/COMPONENT.md +16 -12
  318. package/dist/skill/reference/components/code-block/examples/color-scheme.tsx +2 -4
  319. package/dist/skill/reference/components/code-block/examples/examples.module.css +1 -9
  320. package/dist/skill/reference/components/code-block/examples/narrow.tsx +1 -1
  321. package/dist/skill/reference/components/color-field/COMPONENT.md +15 -9
  322. package/dist/skill/reference/components/color-field/examples/examples.module.css +4 -5
  323. package/dist/skill/reference/components/color-field/examples/in-form.tsx +15 -13
  324. package/dist/skill/reference/components/color-field/examples/sizes.tsx +5 -1
  325. package/dist/skill/reference/components/color-field/examples/states.tsx +15 -3
  326. package/dist/skill/reference/components/color-picker/COMPONENT.md +69 -22
  327. package/dist/skill/reference/components/color-picker/examples/controlled.tsx +16 -5
  328. package/dist/skill/reference/components/color-picker/examples/examples.module.css +8 -12
  329. package/dist/skill/reference/components/color-picker/examples/in-form.tsx +24 -22
  330. package/dist/skill/reference/components/color-picker/examples/overview.tsx +6 -11
  331. package/dist/skill/reference/components/color-picker/examples/panel.tsx +1 -1
  332. package/dist/skill/reference/components/color-picker/examples/sizes.tsx +10 -16
  333. package/dist/skill/reference/components/color-picker/examples/states.tsx +28 -23
  334. package/dist/skill/reference/components/color-swatches/COMPONENT.md +22 -8
  335. package/dist/skill/reference/components/color-swatches/examples/examples.module.css +3 -4
  336. package/dist/skill/reference/components/color-swatches/examples/in-form.tsx +19 -17
  337. package/dist/skill/reference/components/color-swatches/examples/palette.tsx +24 -0
  338. package/dist/skill/reference/components/color-swatches/examples/wrapping.tsx +17 -2
  339. package/dist/skill/reference/components/command-menu/COMPONENT.md +60 -20
  340. package/dist/skill/reference/components/command-menu/examples/sizes.tsx +20 -15
  341. package/dist/skill/reference/components/command-menu/examples/states.tsx +46 -24
  342. package/dist/skill/reference/components/composer/COMPONENT.md +42 -24
  343. package/dist/skill/reference/components/composer/examples/examples.module.css +0 -9
  344. package/dist/skill/reference/components/composer/examples/narrow.tsx +1 -1
  345. package/dist/skill/reference/components/composer/examples/reply-edit.tsx +3 -3
  346. package/dist/skill/reference/components/composer/examples/sizes.tsx +3 -5
  347. package/dist/skill/reference/components/composer/examples/states.tsx +4 -6
  348. package/dist/skill/reference/components/confirm-dialog/COMPONENT.md +26 -13
  349. package/dist/skill/reference/components/confirm-dialog/examples/dismiss.tsx +27 -0
  350. package/dist/skill/reference/components/confirm-dialog/examples/failure.tsx +9 -16
  351. package/dist/skill/reference/components/crossfade/COMPONENT.md +13 -7
  352. package/dist/skill/reference/components/crossfade/examples/examples.module.css +1 -40
  353. package/dist/skill/reference/components/crossfade/examples/fill.tsx +16 -19
  354. package/dist/skill/reference/components/crossfade/examples/overview.tsx +14 -16
  355. package/dist/skill/reference/components/crossfade/examples/record-switch.tsx +6 -11
  356. package/dist/skill/reference/components/crossfade/examples/screen.module.css +1 -24
  357. package/dist/skill/reference/components/crossfade/examples/screen.tsx +108 -124
  358. package/dist/skill/reference/components/data-table/COMPONENT.md +36 -26
  359. package/dist/skill/reference/components/data-table/examples/controlled.tsx +14 -2
  360. package/dist/skill/reference/components/data-table/examples/examples.module.css +10 -9
  361. package/dist/skill/reference/components/data-table/examples/narrow.tsx +5 -1
  362. package/dist/skill/reference/components/data-table/examples/row-link.tsx +2 -1
  363. package/dist/skill/reference/components/data-table/examples/screen.module.css +2 -2
  364. package/dist/skill/reference/components/data-table/examples/screen.tsx +53 -62
  365. package/dist/skill/reference/components/data-table/examples/server.tsx +6 -2
  366. package/dist/skill/reference/components/data-table/examples/sizes.tsx +17 -17
  367. package/dist/skill/reference/components/data-table/examples/states.tsx +37 -29
  368. package/dist/skill/reference/components/datepicker/COMPONENT.md +53 -22
  369. package/dist/skill/reference/components/datepicker/examples/dismiss.tsx +15 -0
  370. package/dist/skill/reference/components/datepicker/examples/examples.module.css +9 -2
  371. package/dist/skill/reference/components/datepicker/examples/in-form.tsx +33 -25
  372. package/dist/skill/reference/components/datepicker/examples/inline-panel.tsx +3 -1
  373. package/dist/skill/reference/components/datepicker/examples/sizes.tsx +2 -2
  374. package/dist/skill/reference/components/datepicker/examples/states.tsx +2 -2
  375. package/dist/skill/reference/components/datepicker/examples/validation.tsx +3 -3
  376. package/dist/skill/reference/components/description-list/COMPONENT.md +24 -9
  377. package/dist/skill/reference/components/description-list/examples/examples.module.css +4 -24
  378. package/dist/skill/reference/components/description-list/examples/narrow.tsx +1 -1
  379. package/dist/skill/reference/components/description-list/examples/screen.module.css +0 -18
  380. package/dist/skill/reference/components/description-list/examples/screen.tsx +119 -134
  381. package/dist/skill/reference/components/description-list/examples/sizes.tsx +2 -4
  382. package/dist/skill/reference/components/description-list/examples/structure.tsx +6 -7
  383. package/dist/skill/reference/components/description-list/examples/totals.tsx +40 -0
  384. package/dist/skill/reference/components/digit-input/COMPONENT.md +12 -6
  385. package/dist/skill/reference/components/digit-input/examples/examples.module.css +2 -2
  386. package/dist/skill/reference/components/digit-input/examples/grouped.tsx +4 -4
  387. package/dist/skill/reference/components/digit-input/examples/in-form.tsx +1 -1
  388. package/dist/skill/reference/components/digit-input/examples/sizes.tsx +5 -3
  389. package/dist/skill/reference/components/digit-input/examples/states.tsx +14 -6
  390. package/dist/skill/reference/components/digit-input/examples/validation.tsx +1 -1
  391. package/dist/skill/reference/components/divider/COMPONENT.md +28 -14
  392. package/dist/skill/reference/components/divider/examples/align.tsx +2 -4
  393. package/dist/skill/reference/components/divider/examples/examples.module.css +16 -17
  394. package/dist/skill/reference/components/divider/examples/or-separator.tsx +3 -5
  395. package/dist/skill/reference/components/divider/examples/overview.tsx +18 -16
  396. package/dist/skill/reference/components/divider/examples/vertical.tsx +25 -8
  397. package/dist/skill/reference/components/divider/examples/with-icon.tsx +1 -1
  398. package/dist/skill/reference/components/dnd/COMPONENT.md +52 -34
  399. package/dist/skill/reference/components/dnd/examples/drop-zones.tsx +1 -1
  400. package/dist/skill/reference/components/dnd/examples/examples.module.css +7 -7
  401. package/dist/skill/reference/components/dnd/examples/states.tsx +41 -35
  402. package/dist/skill/reference/components/drawer/COMPONENT.md +38 -15
  403. package/dist/skill/reference/components/drawer/examples/guard.tsx +1 -3
  404. package/dist/skill/reference/components/drawer/examples/header-actions.tsx +1 -1
  405. package/dist/skill/reference/components/drawer/examples/in-form.tsx +31 -31
  406. package/dist/skill/reference/components/drawer/examples/placement.tsx +1 -1
  407. package/dist/skill/reference/components/drawer/examples/screen.tsx +137 -160
  408. package/dist/skill/reference/components/drawer/examples/sizes.tsx +32 -27
  409. package/dist/skill/reference/components/dropdown/COMPONENT.md +59 -24
  410. package/dist/skill/reference/components/dropdown/examples/context-menu.tsx +75 -0
  411. package/dist/skill/reference/components/dropdown/examples/examples.module.css +1 -1
  412. package/dist/skill/reference/components/dropdown/examples/sizes.tsx +39 -34
  413. package/dist/skill/reference/components/dropdown/examples/states.tsx +37 -29
  414. package/dist/skill/reference/components/empty-page/COMPONENT.md +20 -9
  415. package/dist/skill/reference/components/empty-page/examples/compact.tsx +28 -18
  416. package/dist/skill/reference/components/empty-page/examples/examples.module.css +0 -43
  417. package/dist/skill/reference/components/empty-page/examples/narrow.tsx +3 -3
  418. package/dist/skill/reference/components/empty-page/examples/region-error.tsx +6 -11
  419. package/dist/skill/reference/components/empty-page/examples/sizes.tsx +13 -13
  420. package/dist/skill/reference/components/empty-page/examples/variants.tsx +34 -30
  421. package/dist/skill/reference/components/example-frame/COMPONENT.md +23 -11
  422. package/dist/skill/reference/components/example-frame/examples/controlled.tsx +3 -3
  423. package/dist/skill/reference/components/field-list/COMPONENT.md +14 -8
  424. package/dist/skill/reference/components/field-list/examples/screen.module.css +1 -1
  425. package/dist/skill/reference/components/field-list/examples/screen.tsx +19 -19
  426. package/dist/skill/reference/components/field-list/examples/sizes.tsx +32 -26
  427. package/dist/skill/reference/components/field-list/examples/states.tsx +37 -31
  428. package/dist/skill/reference/components/fieldset/COMPONENT.md +11 -6
  429. package/dist/skill/reference/components/fieldset/examples/examples.module.css +1 -1
  430. package/dist/skill/reference/components/fieldset/examples/states.tsx +1 -1
  431. package/dist/skill/reference/components/file-upload/COMPONENT.md +68 -30
  432. package/dist/skill/reference/components/file-upload/examples/avatar-upload.tsx +5 -5
  433. package/dist/skill/reference/components/file-upload/examples/custom-body.tsx +12 -7
  434. package/dist/skill/reference/components/file-upload/examples/examples.module.css +4 -4
  435. package/dist/skill/reference/components/file-upload/examples/narrow.tsx +1 -1
  436. package/dist/skill/reference/components/file-upload/examples/row-parts.tsx +4 -4
  437. package/dist/skill/reference/components/file-upload/examples/screen.module.css +4 -4
  438. package/dist/skill/reference/components/file-upload/examples/screen.tsx +70 -84
  439. package/dist/skill/reference/components/file-upload/examples/sizes.tsx +1 -3
  440. package/dist/skill/reference/components/file-upload/examples/states.tsx +1 -3
  441. package/dist/skill/reference/components/file-upload/examples/variants.tsx +13 -7
  442. package/dist/skill/reference/components/gallery/COMPONENT.md +17 -7
  443. package/dist/skill/reference/components/gallery/examples/album-sizes.tsx +52 -0
  444. package/dist/skill/reference/components/gallery/examples/controlled.tsx +40 -0
  445. package/dist/skill/reference/components/gallery/examples/examples.module.css +1 -1
  446. package/dist/skill/reference/components/gallery/examples/overview.tsx +15 -43
  447. package/dist/skill/reference/components/gallery/examples/transfer.tsx +22 -13
  448. package/dist/skill/reference/components/gantt/COMPONENT.md +21 -15
  449. package/dist/skill/reference/components/gantt/examples/examples.module.css +0 -16
  450. package/dist/skill/reference/components/gantt/examples/occupancy.tsx +2 -2
  451. package/dist/skill/reference/components/gantt/examples/screen.module.css +1 -1
  452. package/dist/skill/reference/components/gantt/examples/screen.tsx +56 -74
  453. package/dist/skill/reference/components/gantt/examples/sizes.tsx +16 -16
  454. package/dist/skill/reference/components/gantt/examples/states.tsx +34 -30
  455. package/dist/skill/reference/components/gantt/examples/variants.tsx +27 -25
  456. package/dist/skill/reference/components/hint/COMPONENT.md +24 -14
  457. package/dist/skill/reference/components/hint/examples/examples.module.css +10 -1
  458. package/dist/skill/reference/components/hint/examples/hint-or-error.tsx +2 -2
  459. package/dist/skill/reference/components/hint/examples/overview.tsx +10 -11
  460. package/dist/skill/reference/components/hint/examples/sizes.tsx +1 -1
  461. package/dist/skill/reference/components/input/COMPONENT.md +10 -6
  462. package/dist/skill/reference/components/input/examples/affixes.tsx +2 -2
  463. package/dist/skill/reference/components/input/examples/examples.module.css +1 -1
  464. package/dist/skill/reference/components/input/examples/sizes.tsx +9 -5
  465. package/dist/skill/reference/components/input/examples/states.tsx +39 -23
  466. package/dist/skill/reference/components/input/examples/with-icon.tsx +24 -16
  467. package/dist/skill/reference/components/kanban/COMPONENT.md +30 -24
  468. package/dist/skill/reference/components/kanban/examples/columns.tsx +14 -19
  469. package/dist/skill/reference/components/kanban/examples/item-link.tsx +2 -2
  470. package/dist/skill/reference/components/kanban/examples/limits.tsx +1 -1
  471. package/dist/skill/reference/components/kanban/examples/narrow.tsx +1 -1
  472. package/dist/skill/reference/components/kanban/examples/screen.module.css +2 -4
  473. package/dist/skill/reference/components/kanban/examples/screen.tsx +55 -68
  474. package/dist/skill/reference/components/kanban/examples/states.tsx +37 -58
  475. package/dist/skill/reference/components/kanban/examples/variants.tsx +0 -3
  476. package/dist/skill/reference/components/kbd/COMPONENT.md +11 -7
  477. package/dist/skill/reference/components/kbd/examples/examples.module.css +1 -20
  478. package/dist/skill/reference/components/kbd/examples/in-controls.tsx +2 -2
  479. package/dist/skill/reference/components/kbd/examples/shortcut-list.tsx +14 -26
  480. package/dist/skill/reference/components/label/COMPONENT.md +26 -11
  481. package/dist/skill/reference/components/label/examples/examples.module.css +12 -9
  482. package/dist/skill/reference/components/label/examples/overview.tsx +6 -10
  483. package/dist/skill/reference/components/label/examples/structure.tsx +2 -2
  484. package/dist/skill/reference/components/link-button/COMPONENT.md +33 -20
  485. package/dist/skill/reference/components/link-button/examples/as-child.tsx +1 -1
  486. package/dist/skill/reference/components/link-button/examples/external-link.tsx +1 -1
  487. package/dist/skill/reference/components/link-button/examples/overview.tsx +4 -2
  488. package/dist/skill/reference/components/link-button/examples/variants.tsx +2 -2
  489. package/dist/skill/reference/components/list/COMPONENT.md +24 -16
  490. package/dist/skill/reference/components/list/examples/examples.module.css +0 -8
  491. package/dist/skill/reference/components/list/examples/overflow.tsx +1 -1
  492. package/dist/skill/reference/components/list/examples/overview.tsx +31 -30
  493. package/dist/skill/reference/components/list/examples/sizes.tsx +23 -23
  494. package/dist/skill/reference/components/list/examples/states.tsx +38 -21
  495. package/dist/skill/reference/components/list/examples/with-icon.tsx +16 -14
  496. package/dist/skill/reference/components/login-form/COMPONENT.md +69 -16
  497. package/dist/skill/reference/components/login-form/examples/narrow.tsx +1 -1
  498. package/dist/skill/reference/components/login-form/examples/register.tsx +1 -1
  499. package/dist/skill/reference/components/media-viewer/COMPONENT.md +12 -8
  500. package/dist/skill/reference/components/media-viewer/examples/controlled.tsx +16 -16
  501. package/dist/skill/reference/components/media-viewer/examples/examples.module.css +3 -5
  502. package/dist/skill/reference/components/media-viewer/examples/video.tsx +1 -1
  503. package/dist/skill/reference/components/message/COMPONENT.md +102 -46
  504. package/dist/skill/reference/components/message/examples/typing.tsx +5 -5
  505. package/dist/skill/reference/components/modal/COMPONENT.md +71 -37
  506. package/dist/skill/reference/components/modal/examples/dismiss.tsx +35 -27
  507. package/dist/skill/reference/components/modal/examples/enter-key.tsx +22 -25
  508. package/dist/skill/reference/components/modal/examples/examples.module.css +0 -7
  509. package/dist/skill/reference/components/modal/examples/guard.tsx +2 -4
  510. package/dist/skill/reference/components/modal/examples/in-form.tsx +28 -28
  511. package/dist/skill/reference/components/modal/examples/long-content.tsx +6 -4
  512. package/dist/skill/reference/components/modal/examples/sizes.tsx +36 -31
  513. package/dist/skill/reference/components/modal/examples/structure.tsx +1 -1
  514. package/dist/skill/reference/components/native-select/COMPONENT.md +7 -3
  515. package/dist/skill/reference/components/native-select/examples/examples.module.css +3 -3
  516. package/dist/skill/reference/components/native-select/examples/in-form.tsx +28 -29
  517. package/dist/skill/reference/components/native-select/examples/sizes.tsx +2 -2
  518. package/dist/skill/reference/components/native-select/examples/states.tsx +2 -2
  519. package/dist/skill/reference/components/notification/COMPONENT.md +36 -31
  520. package/dist/skill/reference/components/notification/examples/examples.module.css +1 -2
  521. package/dist/skill/reference/components/notification/examples/in-form.tsx +28 -20
  522. package/dist/skill/reference/components/notification/examples/sizes.tsx +16 -12
  523. package/dist/skill/reference/components/notification/examples/undo.tsx +7 -15
  524. package/dist/skill/reference/components/pagination/COMPONENT.md +29 -18
  525. package/dist/skill/reference/components/pagination/examples/controlled.tsx +2 -1
  526. package/dist/skill/reference/components/pagination/examples/narrow.tsx +5 -5
  527. package/dist/skill/reference/components/popover/COMPONENT.md +44 -20
  528. package/dist/skill/reference/components/popover/examples/controlled-open.tsx +6 -4
  529. package/dist/skill/reference/components/popover/examples/dismiss.tsx +37 -28
  530. package/dist/skill/reference/components/popover/examples/examples.module.css +2 -2
  531. package/dist/skill/reference/components/popover/examples/sizes.tsx +32 -27
  532. package/dist/skill/reference/components/popover/examples/width.tsx +57 -0
  533. package/dist/skill/reference/components/progress-bar/COMPONENT.md +21 -29
  534. package/dist/skill/reference/components/progress-bar/examples/examples.module.css +1 -1
  535. package/dist/skill/reference/components/progress-circle/COMPONENT.md +21 -29
  536. package/dist/skill/reference/components/progress-circle/examples/examples.module.css +1 -1
  537. package/dist/skill/reference/components/progress-circle/examples/on-color.tsx +16 -0
  538. package/dist/skill/reference/components/progress-circle/examples/variants.tsx +1 -0
  539. package/dist/skill/reference/components/radio/COMPONENT.md +13 -4
  540. package/dist/skill/reference/components/radio/examples/examples.module.css +1 -1
  541. package/dist/skill/reference/components/scroll-container/COMPONENT.md +18 -12
  542. package/dist/skill/reference/components/scroll-container/examples/auto-scroll.tsx +8 -4
  543. package/dist/skill/reference/components/scroll-container/examples/edges.tsx +4 -4
  544. package/dist/skill/reference/components/scroll-container/examples/examples.module.css +7 -51
  545. package/dist/skill/reference/components/scroll-container/examples/load-more.tsx +4 -4
  546. package/dist/skill/reference/components/scroll-container/examples/lock.tsx +4 -4
  547. package/dist/skill/reference/components/scroll-container/examples/log.tsx +97 -0
  548. package/dist/skill/reference/components/scroll-container/examples/overscroll.tsx +4 -4
  549. package/dist/skill/reference/components/scroll-container/examples/overview.tsx +5 -5
  550. package/dist/skill/reference/components/scroll-container/examples/scrollbar.tsx +4 -4
  551. package/dist/skill/reference/components/scroll-container/examples/snap.tsx +2 -2
  552. package/dist/skill/reference/components/scroll-container/examples/variants.tsx +1 -0
  553. package/dist/skill/reference/components/segmented-control/COMPONENT.md +24 -12
  554. package/dist/skill/reference/components/segmented-control/examples/controlled.tsx +2 -4
  555. package/dist/skill/reference/components/segmented-control/examples/examples.module.css +0 -8
  556. package/dist/skill/reference/components/segmented-control/examples/scroll.tsx +1 -1
  557. package/dist/skill/reference/components/select/COMPONENT.md +33 -9
  558. package/dist/skill/reference/components/select/examples/dismiss.tsx +26 -0
  559. package/dist/skill/reference/components/select/examples/examples.module.css +1 -1
  560. package/dist/skill/reference/components/select/examples/server-search.tsx +6 -2
  561. package/dist/skill/reference/components/select/examples/sizes.tsx +2 -2
  562. package/dist/skill/reference/components/select/examples/states.tsx +2 -2
  563. package/dist/skill/reference/components/select/examples/with-icon.tsx +20 -18
  564. package/dist/skill/reference/components/sheet/COMPONENT.md +44 -21
  565. package/dist/skill/reference/components/sheet/examples/header-actions.tsx +23 -4
  566. package/dist/skill/reference/components/sheet/examples/overview.tsx +25 -10
  567. package/dist/skill/reference/components/skeleton/COMPONENT.md +8 -4
  568. package/dist/skill/reference/components/skeleton/examples/examples.module.css +1 -13
  569. package/dist/skill/reference/components/skeleton/examples/with-crossfade.tsx +7 -7
  570. package/dist/skill/reference/components/slider/COMPONENT.md +13 -8
  571. package/dist/skill/reference/components/slider/examples/examples.module.css +6 -7
  572. package/dist/skill/reference/components/slider/examples/hint-and-error.tsx +3 -5
  573. package/dist/skill/reference/components/slider/examples/in-form.tsx +21 -19
  574. package/dist/skill/reference/components/slider/examples/states.tsx +14 -10
  575. package/dist/skill/reference/components/smart-filter/COMPONENT.md +42 -22
  576. package/dist/skill/reference/components/smart-filter/examples/examples.module.css +3 -21
  577. package/dist/skill/reference/components/smart-filter/examples/many-values.tsx +12 -8
  578. package/dist/skill/reference/components/smart-filter/examples/ranges.tsx +2 -1
  579. package/dist/skill/reference/components/smart-filter/examples/sizes.tsx +9 -7
  580. package/dist/skill/reference/components/sparkline/COMPONENT.md +8 -3
  581. package/dist/skill/reference/components/sparkline/examples/curve.tsx +16 -11
  582. package/dist/skill/reference/components/sparkline/examples/examples.module.css +1 -1
  583. package/dist/skill/reference/components/sparkline/examples/signed-bars.tsx +2 -2
  584. package/dist/skill/reference/components/sparkline/examples/states.tsx +14 -10
  585. package/dist/skill/reference/components/spinner/COMPONENT.md +15 -9
  586. package/dist/skill/reference/components/spinner/examples/examples.module.css +2 -14
  587. package/dist/skill/reference/components/spinner/examples/overview.tsx +1 -1
  588. package/dist/skill/reference/components/stepper/COMPONENT.md +50 -41
  589. package/dist/skill/reference/components/stepper/examples/examples.module.css +1 -6
  590. package/dist/skill/reference/components/stepper/examples/narrow.tsx +1 -1
  591. package/dist/skill/reference/components/stepper/examples/sizes.tsx +6 -8
  592. package/dist/skill/reference/components/stepper/examples/states.tsx +44 -43
  593. package/dist/skill/reference/components/stepper/examples/with-icon.tsx +19 -17
  594. package/dist/skill/reference/components/switch/COMPONENT.md +22 -9
  595. package/dist/skill/reference/components/switch/examples/examples.module.css +2 -2
  596. package/dist/skill/reference/components/switch/examples/states.tsx +3 -3
  597. package/dist/skill/reference/components/tabs/COMPONENT.md +21 -16
  598. package/dist/skill/reference/components/tabs/examples/in-drawer.tsx +1 -1
  599. package/dist/skill/reference/components/tabs/examples/sizes.tsx +5 -10
  600. package/dist/skill/reference/components/tabs/examples/variants.tsx +19 -23
  601. package/dist/skill/reference/components/tag-select/COMPONENT.md +19 -6
  602. package/dist/skill/reference/components/tag-select/examples/creatable.tsx +2 -2
  603. package/dist/skill/reference/components/tag-select/examples/dismiss.tsx +23 -0
  604. package/dist/skill/reference/components/tag-select/examples/examples.module.css +3 -3
  605. package/dist/skill/reference/components/tag-select/examples/in-form.tsx +31 -32
  606. package/dist/skill/reference/components/tag-select/examples/sizes.tsx +2 -2
  607. package/dist/skill/reference/components/tag-select/examples/states.tsx +2 -2
  608. package/dist/skill/reference/components/textarea/COMPONENT.md +10 -6
  609. package/dist/skill/reference/components/textarea/examples/examples.module.css +3 -10
  610. package/dist/skill/reference/components/textarea/examples/in-form.tsx +3 -3
  611. package/dist/skill/reference/components/textarea/examples/sizes.tsx +10 -7
  612. package/dist/skill/reference/components/textarea/examples/states.tsx +29 -13
  613. package/dist/skill/reference/components/textarea/examples/validation.tsx +45 -36
  614. package/dist/skill/reference/components/thumbnail/COMPONENT.md +17 -13
  615. package/dist/skill/reference/components/thumbnail/examples/examples.module.css +1 -1
  616. package/dist/skill/reference/components/thumbnail/examples/states.tsx +1 -1
  617. package/dist/skill/reference/components/thumbnail/examples/variants.tsx +12 -1
  618. package/dist/skill/reference/components/timeline/COMPONENT.md +51 -35
  619. package/dist/skill/reference/components/timeline/examples/links.tsx +14 -14
  620. package/dist/skill/reference/components/timeline/examples/narrow.tsx +6 -6
  621. package/dist/skill/reference/components/timeline/examples/overview.tsx +6 -6
  622. package/dist/skill/reference/components/timeline/examples/sizes.tsx +28 -23
  623. package/dist/skill/reference/components/timeline/examples/structure.tsx +30 -30
  624. package/dist/skill/reference/components/timeline/examples/variants.tsx +40 -28
  625. package/dist/skill/reference/components/tooltip/COMPONENT.md +10 -6
  626. package/dist/skill/reference/components/tooltip/examples/examples.module.css +1 -5
  627. package/dist/skill/reference/components/tooltip/examples/non-interactive-trigger.tsx +1 -1
  628. package/dist/skill/reference/components/tooltip/examples/sizes.tsx +17 -10
  629. package/dist/skill/reference/components/typography/COMPONENT.md +18 -3
  630. package/dist/skill/reference/components/typography/examples/examples.module.css +3 -6
  631. package/dist/skill/reference/components/typography/examples/numeric.tsx +16 -0
  632. package/dist/skill/reference/components/video-note/COMPONENT.md +11 -7
  633. package/dist/skill/reference/components/visually-hidden/COMPONENT.md +8 -4
  634. package/dist/skill/reference/components/visually-hidden/examples/assertive.tsx +1 -1
  635. package/dist/skill/reference/components/visually-hidden/examples/overview.tsx +17 -7
  636. package/dist/skill/reference/components/voice-player/COMPONENT.md +15 -7
  637. package/dist/skill/reference/foundation.md +568 -0
  638. package/dist/skill/reference/layout/app-shell/COMPONENT.md +53 -36
  639. package/dist/skill/reference/layout/app-shell/examples/examples.module.css +2 -22
  640. package/dist/skill/reference/layout/app-shell/examples/footer.tsx +10 -10
  641. package/dist/skill/reference/layout/app-shell/examples/overview.tsx +21 -25
  642. package/dist/skill/reference/layout/app-shell/examples/screen.module.css +2 -2
  643. package/dist/skill/reference/layout/app-shell/examples/screen.tsx +48 -47
  644. package/dist/skill/reference/layout/app-shell/examples/template.tsx +13 -17
  645. package/dist/skill/reference/layout/bottom-nav/COMPONENT.md +30 -20
  646. package/dist/skill/reference/layout/bottom-nav/examples/examples.module.css +2 -7
  647. package/dist/skill/reference/layout/bottom-nav/examples/floating-action.tsx +10 -19
  648. package/dist/skill/reference/layout/bottom-nav/examples/floating.tsx +10 -19
  649. package/dist/skill/reference/layout/bottom-nav/examples/in-app-shell.tsx +11 -19
  650. package/dist/skill/reference/layout/bottom-nav/examples/router.tsx +6 -5
  651. package/dist/skill/reference/layout/page/COMPONENT.md +353 -0
  652. package/dist/skill/reference/layout/page/examples/actions-collapse.tsx +45 -0
  653. package/dist/skill/reference/layout/page/examples/collapse.tsx +68 -0
  654. package/dist/skill/reference/{components/page-content → layout/page}/examples/examples.module.css +32 -16
  655. package/{src/components/page-content → dist/skill/reference/layout/page}/examples/grid.tsx +18 -16
  656. package/dist/skill/reference/layout/page/examples/list-detail.tsx +112 -0
  657. package/dist/skill/reference/layout/page/examples/narrow.tsx +75 -0
  658. package/dist/skill/reference/layout/page/examples/overview.tsx +57 -0
  659. package/{src/components/page-content → dist/skill/reference/layout/page}/examples/screen.module.css +1 -1
  660. package/{src/components/page-content → dist/skill/reference/layout/page}/examples/screen.tsx +29 -19
  661. package/{src/components/page-content → dist/skill/reference/layout/page}/examples/sections.tsx +17 -24
  662. package/dist/skill/reference/layout/page/examples/structure.tsx +41 -0
  663. package/dist/skill/reference/{components/page-toolbar/examples/narrow.tsx → layout/page/examples/tools.tsx} +38 -35
  664. package/dist/skill/reference/layout/page/examples/top-bar.tsx +85 -0
  665. package/dist/skill/reference/{components/page-content → layout/page}/examples/variants.tsx +13 -13
  666. package/dist/skill/reference/layout/sidebar/COMPONENT.md +51 -40
  667. package/dist/skill/reference/layout/sidebar/examples/account.tsx +1 -3
  668. package/dist/skill/reference/layout/sidebar/examples/brand-header.tsx +1 -3
  669. package/dist/skill/reference/layout/sidebar/examples/collapsible-groups.tsx +1 -3
  670. package/dist/skill/reference/layout/sidebar/examples/controlled-open.tsx +1 -3
  671. package/dist/skill/reference/layout/sidebar/examples/controlled.tsx +1 -3
  672. package/dist/skill/reference/layout/sidebar/examples/custom-part.tsx +1 -3
  673. package/dist/skill/reference/layout/sidebar/examples/dismiss.tsx +50 -0
  674. package/dist/skill/reference/layout/sidebar/examples/examples.module.css +7 -32
  675. package/dist/skill/reference/layout/sidebar/examples/narrow.tsx +47 -42
  676. package/dist/skill/reference/layout/sidebar/examples/nested-items.tsx +1 -3
  677. package/dist/skill/reference/layout/sidebar/examples/overview.tsx +1 -3
  678. package/dist/skill/reference/layout/sidebar/examples/persist.tsx +1 -3
  679. package/dist/skill/reference/layout/sidebar/examples/router.tsx +12 -13
  680. package/dist/skill/reference/layout/sidebar/examples/sizes.tsx +6 -6
  681. package/dist/skill/responsive.md +116 -105
  682. package/dist/skill/ux.md +21 -9
  683. package/dist/theme/applyTheme.d.ts +7 -6
  684. package/dist/tokens/hues.d.ts +8 -0
  685. package/dist/tokens/layers.d.ts +5 -16
  686. package/dist/tokens/offGrid.d.ts +7 -0
  687. package/dist/tokens/primitives.d.ts +34 -9
  688. package/dist/tokens/semantic.d.ts +208 -51
  689. package/dist/tokens/themes/dark.d.ts +39 -33
  690. package/package.json +5 -3
  691. package/src/components/accordion/COMPONENT.md +16 -9
  692. package/src/components/accordion/examples/overview.tsx +2 -2
  693. package/src/components/accordion/examples/sizes.tsx +6 -8
  694. package/src/components/accordion/examples/states.tsx +27 -24
  695. package/src/components/accordion/examples/variants.tsx +6 -8
  696. package/src/components/accordion/examples/with-icon.tsx +22 -19
  697. package/src/components/avatar/COMPONENT.md +24 -17
  698. package/src/components/avatar/examples/examples.module.css +1 -4
  699. package/src/components/avatar/examples/overview.tsx +3 -3
  700. package/src/components/avatar/examples/presence.tsx +4 -4
  701. package/src/components/avatar/examples/src-from-state.tsx +3 -3
  702. package/src/components/avatar/examples/states.tsx +4 -4
  703. package/src/components/avatar/examples/team-group.tsx +3 -3
  704. package/src/components/badge/COMPONENT.md +66 -34
  705. package/src/components/badge/examples/controlled.tsx +32 -0
  706. package/src/components/badge/examples/examples.module.css +2 -2
  707. package/src/components/badge/examples/filter-values.tsx +4 -6
  708. package/src/components/badge/examples/in-controls.tsx +1 -1
  709. package/src/components/badge/examples/overview.tsx +6 -5
  710. package/src/components/badge/examples/square.tsx +21 -0
  711. package/src/components/badge/examples/states.tsx +4 -4
  712. package/src/components/badge/examples/with-icon.tsx +10 -1
  713. package/src/components/banner/COMPONENT.md +13 -9
  714. package/src/components/banner/examples/dismissible.tsx +3 -19
  715. package/src/components/banner/examples/examples.module.css +6 -1
  716. package/src/components/banner/examples/overview.tsx +1 -1
  717. package/src/components/banner/examples/page-strip.tsx +24 -22
  718. package/src/components/breadcrumb/COMPONENT.md +23 -16
  719. package/src/components/breadcrumb/examples/examples.module.css +1 -1
  720. package/src/components/breadcrumb/examples/overflow.tsx +1 -1
  721. package/src/components/breadcrumb/examples/sizes.tsx +6 -8
  722. package/src/components/breadcrumb/examples/with-icon.tsx +15 -8
  723. package/src/components/button/COMPONENT.md +67 -30
  724. package/src/components/button/examples/align.tsx +25 -0
  725. package/src/components/button/examples/controlled.tsx +21 -0
  726. package/src/components/button/examples/density.tsx +45 -0
  727. package/src/components/button/examples/examples.module.css +14 -25
  728. package/src/components/button/examples/hold-to-confirm.tsx +1 -1
  729. package/src/components/button/examples/label-morph.tsx +1 -1
  730. package/src/components/button/examples/on-colored-host.tsx +19 -19
  731. package/src/components/button/examples/over-media.tsx +7 -1
  732. package/src/components/button/examples/toggle.tsx +2 -10
  733. package/src/components/button-group/COMPONENT.md +21 -15
  734. package/src/components/button-group/examples/controlled.tsx +1 -1
  735. package/src/components/card/COMPONENT.md +21 -10
  736. package/src/components/card/examples/content-templates.tsx +8 -2
  737. package/src/components/card/examples/examples.module.css +4 -16
  738. package/src/components/card/examples/overview.tsx +11 -11
  739. package/src/components/card/examples/screen.module.css +1 -1
  740. package/src/components/card/examples/screen.tsx +185 -198
  741. package/src/components/card/examples/variants.tsx +74 -47
  742. package/src/components/chart-frame/COMPONENT.md +24 -28
  743. package/src/components/chart-frame/examples/controlled.tsx +9 -7
  744. package/src/components/chart-frame/examples/fill-height.tsx +13 -15
  745. package/src/components/chart-frame/examples/narrow.tsx +24 -5
  746. package/src/components/chart-frame/examples/overview.tsx +5 -2
  747. package/src/components/chart-frame/examples/states.tsx +72 -64
  748. package/src/components/chart-frame/examples/tooltip.tsx +27 -26
  749. package/src/components/chat/COMPONENT.md +39 -26
  750. package/src/components/chat/examples/group-chat.tsx +2 -2
  751. package/src/components/chat/examples/overview.tsx +119 -130
  752. package/src/components/chat/examples/reactions.tsx +18 -23
  753. package/src/components/chat/examples/screen.module.css +1 -1
  754. package/src/components/chat/examples/screen.tsx +212 -242
  755. package/src/components/chat/examples/states.tsx +23 -22
  756. package/src/components/chat-list/COMPONENT.md +11 -6
  757. package/src/components/chat-list/examples/controlled.tsx +2 -2
  758. package/src/components/chat-list/examples/examples.module.css +8 -8
  759. package/src/components/chat-list/examples/live.tsx +29 -22
  760. package/src/components/chat-list/examples/sizes.tsx +6 -8
  761. package/src/components/chat-list/examples/states.tsx +42 -38
  762. package/src/components/checkbox/COMPONENT.md +27 -14
  763. package/src/components/checkbox/examples/controlled.tsx +18 -16
  764. package/src/components/checkbox/examples/examples.module.css +15 -56
  765. package/src/components/checkbox/examples/in-form.tsx +16 -16
  766. package/src/components/checkbox/examples/indicator.tsx +19 -64
  767. package/src/components/checkbox/examples/overview.tsx +1 -1
  768. package/src/components/checkbox/examples/states.tsx +1 -1
  769. package/src/components/checkbox/examples/without-label.tsx +1 -1
  770. package/src/components/code-block/COMPONENT.md +16 -12
  771. package/src/components/code-block/examples/color-scheme.tsx +2 -4
  772. package/src/components/code-block/examples/examples.module.css +1 -9
  773. package/src/components/code-block/examples/narrow.tsx +1 -1
  774. package/src/components/color-field/COMPONENT.md +15 -9
  775. package/src/components/color-field/examples/examples.module.css +4 -5
  776. package/src/components/color-field/examples/in-form.tsx +15 -13
  777. package/src/components/color-field/examples/sizes.tsx +5 -1
  778. package/src/components/color-field/examples/states.tsx +15 -3
  779. package/src/components/color-picker/COMPONENT.md +69 -22
  780. package/src/components/color-picker/examples/controlled.tsx +16 -5
  781. package/src/components/color-picker/examples/examples.module.css +8 -12
  782. package/src/components/color-picker/examples/in-form.tsx +24 -22
  783. package/src/components/color-picker/examples/overview.tsx +6 -11
  784. package/src/components/color-picker/examples/panel.tsx +1 -1
  785. package/src/components/color-picker/examples/sizes.tsx +10 -16
  786. package/src/components/color-picker/examples/states.tsx +28 -23
  787. package/src/components/color-swatches/COMPONENT.md +22 -8
  788. package/src/components/color-swatches/examples/examples.module.css +3 -4
  789. package/src/components/color-swatches/examples/in-form.tsx +19 -17
  790. package/src/components/color-swatches/examples/palette.tsx +24 -0
  791. package/src/components/color-swatches/examples/wrapping.tsx +17 -2
  792. package/src/components/command-menu/COMPONENT.md +60 -20
  793. package/src/components/command-menu/examples/sizes.tsx +20 -15
  794. package/src/components/command-menu/examples/states.tsx +46 -24
  795. package/src/components/composer/COMPONENT.md +42 -24
  796. package/src/components/composer/examples/examples.module.css +0 -9
  797. package/src/components/composer/examples/narrow.tsx +1 -1
  798. package/src/components/composer/examples/reply-edit.tsx +3 -3
  799. package/src/components/composer/examples/sizes.tsx +3 -5
  800. package/src/components/composer/examples/states.tsx +4 -6
  801. package/src/components/confirm-dialog/COMPONENT.md +26 -13
  802. package/src/components/confirm-dialog/examples/dismiss.tsx +27 -0
  803. package/src/components/confirm-dialog/examples/failure.tsx +9 -16
  804. package/src/components/crossfade/COMPONENT.md +13 -7
  805. package/src/components/crossfade/examples/examples.module.css +1 -40
  806. package/src/components/crossfade/examples/fill.tsx +16 -19
  807. package/src/components/crossfade/examples/overview.tsx +14 -16
  808. package/src/components/crossfade/examples/record-switch.tsx +6 -11
  809. package/src/components/crossfade/examples/screen.module.css +1 -24
  810. package/src/components/crossfade/examples/screen.tsx +108 -124
  811. package/src/components/data-table/COMPONENT.md +36 -26
  812. package/src/components/data-table/examples/controlled.tsx +14 -2
  813. package/src/components/data-table/examples/examples.module.css +10 -9
  814. package/src/components/data-table/examples/narrow.tsx +5 -1
  815. package/src/components/data-table/examples/row-link.tsx +2 -1
  816. package/src/components/data-table/examples/screen.module.css +2 -2
  817. package/src/components/data-table/examples/screen.tsx +53 -62
  818. package/src/components/data-table/examples/server.tsx +6 -2
  819. package/src/components/data-table/examples/sizes.tsx +17 -17
  820. package/src/components/data-table/examples/states.tsx +37 -29
  821. package/src/components/datepicker/COMPONENT.md +53 -22
  822. package/src/components/datepicker/examples/dismiss.tsx +15 -0
  823. package/src/components/datepicker/examples/examples.module.css +9 -2
  824. package/src/components/datepicker/examples/in-form.tsx +33 -25
  825. package/src/components/datepicker/examples/inline-panel.tsx +3 -1
  826. package/src/components/datepicker/examples/sizes.tsx +2 -2
  827. package/src/components/datepicker/examples/states.tsx +2 -2
  828. package/src/components/datepicker/examples/validation.tsx +3 -3
  829. package/src/components/description-list/COMPONENT.md +24 -9
  830. package/src/components/description-list/examples/examples.module.css +4 -24
  831. package/src/components/description-list/examples/narrow.tsx +1 -1
  832. package/src/components/description-list/examples/screen.module.css +0 -18
  833. package/src/components/description-list/examples/screen.tsx +119 -134
  834. package/src/components/description-list/examples/sizes.tsx +2 -4
  835. package/src/components/description-list/examples/structure.tsx +6 -7
  836. package/src/components/description-list/examples/totals.tsx +40 -0
  837. package/src/components/digit-input/COMPONENT.md +12 -6
  838. package/src/components/digit-input/examples/examples.module.css +2 -2
  839. package/src/components/digit-input/examples/grouped.tsx +4 -4
  840. package/src/components/digit-input/examples/in-form.tsx +1 -1
  841. package/src/components/digit-input/examples/sizes.tsx +5 -3
  842. package/src/components/digit-input/examples/states.tsx +14 -6
  843. package/src/components/digit-input/examples/validation.tsx +1 -1
  844. package/src/components/divider/COMPONENT.md +28 -14
  845. package/src/components/divider/examples/align.tsx +2 -4
  846. package/src/components/divider/examples/examples.module.css +16 -17
  847. package/src/components/divider/examples/or-separator.tsx +3 -5
  848. package/src/components/divider/examples/overview.tsx +18 -16
  849. package/src/components/divider/examples/vertical.tsx +25 -8
  850. package/src/components/divider/examples/with-icon.tsx +1 -1
  851. package/src/components/dnd/COMPONENT.md +52 -34
  852. package/src/components/dnd/examples/drop-zones.tsx +1 -1
  853. package/src/components/dnd/examples/examples.module.css +7 -7
  854. package/src/components/dnd/examples/states.tsx +41 -35
  855. package/src/components/drawer/COMPONENT.md +38 -15
  856. package/src/components/drawer/examples/guard.tsx +1 -3
  857. package/src/components/drawer/examples/header-actions.tsx +1 -1
  858. package/src/components/drawer/examples/in-form.tsx +31 -31
  859. package/src/components/drawer/examples/placement.tsx +1 -1
  860. package/src/components/drawer/examples/screen.tsx +137 -160
  861. package/src/components/drawer/examples/sizes.tsx +32 -27
  862. package/src/components/dropdown/COMPONENT.md +59 -24
  863. package/src/components/dropdown/examples/context-menu.tsx +75 -0
  864. package/src/components/dropdown/examples/examples.module.css +1 -1
  865. package/src/components/dropdown/examples/sizes.tsx +39 -34
  866. package/src/components/dropdown/examples/states.tsx +37 -29
  867. package/src/components/empty-page/COMPONENT.md +20 -9
  868. package/src/components/empty-page/examples/compact.tsx +28 -18
  869. package/src/components/empty-page/examples/examples.module.css +0 -43
  870. package/src/components/empty-page/examples/narrow.tsx +3 -3
  871. package/src/components/empty-page/examples/region-error.tsx +6 -11
  872. package/src/components/empty-page/examples/sizes.tsx +13 -13
  873. package/src/components/empty-page/examples/variants.tsx +34 -30
  874. package/src/components/example-frame/COMPONENT.md +23 -11
  875. package/src/components/example-frame/examples/controlled.tsx +3 -3
  876. package/src/components/field-list/COMPONENT.md +14 -8
  877. package/src/components/field-list/examples/screen.module.css +1 -1
  878. package/src/components/field-list/examples/screen.tsx +19 -19
  879. package/src/components/field-list/examples/sizes.tsx +32 -26
  880. package/src/components/field-list/examples/states.tsx +37 -31
  881. package/src/components/fieldset/COMPONENT.md +11 -6
  882. package/src/components/fieldset/examples/examples.module.css +1 -1
  883. package/src/components/fieldset/examples/states.tsx +1 -1
  884. package/src/components/file-upload/COMPONENT.md +68 -30
  885. package/src/components/file-upload/examples/avatar-upload.tsx +5 -5
  886. package/src/components/file-upload/examples/custom-body.tsx +12 -7
  887. package/src/components/file-upload/examples/examples.module.css +4 -4
  888. package/src/components/file-upload/examples/narrow.tsx +1 -1
  889. package/src/components/file-upload/examples/row-parts.tsx +4 -4
  890. package/src/components/file-upload/examples/screen.module.css +4 -4
  891. package/src/components/file-upload/examples/screen.tsx +70 -84
  892. package/src/components/file-upload/examples/sizes.tsx +1 -3
  893. package/src/components/file-upload/examples/states.tsx +1 -3
  894. package/src/components/file-upload/examples/variants.tsx +13 -7
  895. package/src/components/gallery/COMPONENT.md +17 -7
  896. package/src/components/gallery/examples/album-sizes.tsx +52 -0
  897. package/src/components/gallery/examples/controlled.tsx +40 -0
  898. package/src/components/gallery/examples/examples.module.css +1 -1
  899. package/src/components/gallery/examples/overview.tsx +15 -43
  900. package/src/components/gallery/examples/transfer.tsx +22 -13
  901. package/src/components/gantt/COMPONENT.md +21 -15
  902. package/src/components/gantt/examples/examples.module.css +0 -16
  903. package/src/components/gantt/examples/occupancy.tsx +2 -2
  904. package/src/components/gantt/examples/screen.module.css +1 -1
  905. package/src/components/gantt/examples/screen.tsx +56 -74
  906. package/src/components/gantt/examples/sizes.tsx +16 -16
  907. package/src/components/gantt/examples/states.tsx +34 -30
  908. package/src/components/gantt/examples/variants.tsx +27 -25
  909. package/src/components/hint/COMPONENT.md +24 -14
  910. package/src/components/hint/examples/examples.module.css +10 -1
  911. package/src/components/hint/examples/hint-or-error.tsx +2 -2
  912. package/src/components/hint/examples/overview.tsx +10 -11
  913. package/src/components/hint/examples/sizes.tsx +1 -1
  914. package/src/components/input/COMPONENT.md +10 -6
  915. package/src/components/input/examples/affixes.tsx +2 -2
  916. package/src/components/input/examples/examples.module.css +1 -1
  917. package/src/components/input/examples/sizes.tsx +9 -5
  918. package/src/components/input/examples/states.tsx +39 -23
  919. package/src/components/input/examples/with-icon.tsx +24 -16
  920. package/src/components/kanban/COMPONENT.md +30 -24
  921. package/src/components/kanban/examples/columns.tsx +14 -19
  922. package/src/components/kanban/examples/item-link.tsx +2 -2
  923. package/src/components/kanban/examples/limits.tsx +1 -1
  924. package/src/components/kanban/examples/narrow.tsx +1 -1
  925. package/src/components/kanban/examples/screen.module.css +2 -4
  926. package/src/components/kanban/examples/screen.tsx +55 -68
  927. package/src/components/kanban/examples/states.tsx +37 -58
  928. package/src/components/kanban/examples/variants.tsx +0 -3
  929. package/src/components/kbd/COMPONENT.md +11 -7
  930. package/src/components/kbd/examples/examples.module.css +1 -20
  931. package/src/components/kbd/examples/in-controls.tsx +2 -2
  932. package/src/components/kbd/examples/shortcut-list.tsx +14 -26
  933. package/src/components/label/COMPONENT.md +26 -11
  934. package/src/components/label/examples/examples.module.css +12 -9
  935. package/src/components/label/examples/overview.tsx +6 -10
  936. package/src/components/label/examples/structure.tsx +2 -2
  937. package/src/components/link-button/COMPONENT.md +33 -20
  938. package/src/components/link-button/examples/as-child.tsx +1 -1
  939. package/src/components/link-button/examples/external-link.tsx +1 -1
  940. package/src/components/link-button/examples/overview.tsx +4 -2
  941. package/src/components/link-button/examples/variants.tsx +2 -2
  942. package/src/components/list/COMPONENT.md +24 -16
  943. package/src/components/list/examples/examples.module.css +0 -8
  944. package/src/components/list/examples/overflow.tsx +1 -1
  945. package/src/components/list/examples/overview.tsx +31 -30
  946. package/src/components/list/examples/sizes.tsx +23 -23
  947. package/src/components/list/examples/states.tsx +38 -21
  948. package/src/components/list/examples/with-icon.tsx +16 -14
  949. package/src/components/login-form/COMPONENT.md +69 -16
  950. package/src/components/login-form/examples/narrow.tsx +1 -1
  951. package/src/components/login-form/examples/register.tsx +1 -1
  952. package/src/components/media-viewer/COMPONENT.md +12 -8
  953. package/src/components/media-viewer/examples/controlled.tsx +16 -16
  954. package/src/components/media-viewer/examples/examples.module.css +3 -5
  955. package/src/components/media-viewer/examples/video.tsx +1 -1
  956. package/src/components/message/COMPONENT.md +102 -46
  957. package/src/components/message/examples/typing.tsx +5 -5
  958. package/src/components/modal/COMPONENT.md +71 -37
  959. package/src/components/modal/examples/dismiss.tsx +35 -27
  960. package/src/components/modal/examples/enter-key.tsx +22 -25
  961. package/src/components/modal/examples/examples.module.css +0 -7
  962. package/src/components/modal/examples/guard.tsx +2 -4
  963. package/src/components/modal/examples/in-form.tsx +28 -28
  964. package/src/components/modal/examples/long-content.tsx +6 -4
  965. package/src/components/modal/examples/sizes.tsx +36 -31
  966. package/src/components/modal/examples/structure.tsx +1 -1
  967. package/src/components/native-select/COMPONENT.md +7 -3
  968. package/src/components/native-select/examples/examples.module.css +3 -3
  969. package/src/components/native-select/examples/in-form.tsx +28 -29
  970. package/src/components/native-select/examples/sizes.tsx +2 -2
  971. package/src/components/native-select/examples/states.tsx +2 -2
  972. package/src/components/notification/COMPONENT.md +36 -31
  973. package/src/components/notification/examples/examples.module.css +1 -2
  974. package/src/components/notification/examples/in-form.tsx +28 -20
  975. package/src/components/notification/examples/sizes.tsx +16 -12
  976. package/src/components/notification/examples/undo.tsx +7 -15
  977. package/src/components/pagination/COMPONENT.md +29 -18
  978. package/src/components/pagination/examples/controlled.tsx +2 -1
  979. package/src/components/pagination/examples/narrow.tsx +5 -5
  980. package/src/components/popover/COMPONENT.md +44 -20
  981. package/src/components/popover/examples/controlled-open.tsx +6 -4
  982. package/src/components/popover/examples/dismiss.tsx +37 -28
  983. package/src/components/popover/examples/examples.module.css +2 -2
  984. package/src/components/popover/examples/sizes.tsx +32 -27
  985. package/src/components/popover/examples/width.tsx +57 -0
  986. package/src/components/progress-bar/COMPONENT.md +21 -29
  987. package/src/components/progress-bar/examples/examples.module.css +1 -1
  988. package/src/components/progress-circle/COMPONENT.md +21 -29
  989. package/src/components/progress-circle/examples/examples.module.css +1 -1
  990. package/src/components/progress-circle/examples/on-color.tsx +16 -0
  991. package/src/components/progress-circle/examples/variants.tsx +1 -0
  992. package/src/components/radio/COMPONENT.md +13 -4
  993. package/src/components/radio/examples/examples.module.css +1 -1
  994. package/src/components/scroll-container/COMPONENT.md +18 -12
  995. package/src/components/scroll-container/examples/auto-scroll.tsx +8 -4
  996. package/src/components/scroll-container/examples/edges.tsx +4 -4
  997. package/src/components/scroll-container/examples/examples.module.css +7 -51
  998. package/src/components/scroll-container/examples/load-more.tsx +4 -4
  999. package/src/components/scroll-container/examples/lock.tsx +4 -4
  1000. package/src/components/scroll-container/examples/log.tsx +97 -0
  1001. package/src/components/scroll-container/examples/overscroll.tsx +4 -4
  1002. package/src/components/scroll-container/examples/overview.tsx +5 -5
  1003. package/src/components/scroll-container/examples/scrollbar.tsx +4 -4
  1004. package/src/components/scroll-container/examples/snap.tsx +2 -2
  1005. package/src/components/scroll-container/examples/variants.tsx +1 -0
  1006. package/src/components/segmented-control/COMPONENT.md +24 -12
  1007. package/src/components/segmented-control/examples/controlled.tsx +2 -4
  1008. package/src/components/segmented-control/examples/examples.module.css +0 -8
  1009. package/src/components/segmented-control/examples/scroll.tsx +1 -1
  1010. package/src/components/select/COMPONENT.md +33 -9
  1011. package/src/components/select/examples/dismiss.tsx +26 -0
  1012. package/src/components/select/examples/examples.module.css +1 -1
  1013. package/src/components/select/examples/server-search.tsx +6 -2
  1014. package/src/components/select/examples/sizes.tsx +2 -2
  1015. package/src/components/select/examples/states.tsx +2 -2
  1016. package/src/components/select/examples/with-icon.tsx +20 -18
  1017. package/src/components/sheet/COMPONENT.md +44 -21
  1018. package/src/components/sheet/examples/header-actions.tsx +23 -4
  1019. package/src/components/sheet/examples/overview.tsx +25 -10
  1020. package/src/components/skeleton/COMPONENT.md +8 -4
  1021. package/src/components/skeleton/examples/examples.module.css +1 -13
  1022. package/src/components/skeleton/examples/with-crossfade.tsx +7 -7
  1023. package/src/components/slider/COMPONENT.md +13 -8
  1024. package/src/components/slider/examples/examples.module.css +6 -7
  1025. package/src/components/slider/examples/hint-and-error.tsx +3 -5
  1026. package/src/components/slider/examples/in-form.tsx +21 -19
  1027. package/src/components/slider/examples/states.tsx +14 -10
  1028. package/src/components/smart-filter/COMPONENT.md +42 -22
  1029. package/src/components/smart-filter/examples/examples.module.css +3 -21
  1030. package/src/components/smart-filter/examples/many-values.tsx +12 -8
  1031. package/src/components/smart-filter/examples/ranges.tsx +2 -1
  1032. package/src/components/smart-filter/examples/sizes.tsx +9 -7
  1033. package/src/components/sparkline/COMPONENT.md +8 -3
  1034. package/src/components/sparkline/examples/curve.tsx +16 -11
  1035. package/src/components/sparkline/examples/examples.module.css +1 -1
  1036. package/src/components/sparkline/examples/signed-bars.tsx +2 -2
  1037. package/src/components/sparkline/examples/states.tsx +14 -10
  1038. package/src/components/spinner/COMPONENT.md +15 -9
  1039. package/src/components/spinner/examples/examples.module.css +2 -14
  1040. package/src/components/spinner/examples/overview.tsx +1 -1
  1041. package/src/components/stepper/COMPONENT.md +50 -41
  1042. package/src/components/stepper/examples/examples.module.css +1 -6
  1043. package/src/components/stepper/examples/narrow.tsx +1 -1
  1044. package/src/components/stepper/examples/sizes.tsx +6 -8
  1045. package/src/components/stepper/examples/states.tsx +44 -43
  1046. package/src/components/stepper/examples/with-icon.tsx +19 -17
  1047. package/src/components/switch/COMPONENT.md +22 -9
  1048. package/src/components/switch/examples/examples.module.css +2 -2
  1049. package/src/components/switch/examples/states.tsx +3 -3
  1050. package/src/components/tabs/COMPONENT.md +21 -16
  1051. package/src/components/tabs/examples/in-drawer.tsx +1 -1
  1052. package/src/components/tabs/examples/sizes.tsx +5 -10
  1053. package/src/components/tabs/examples/variants.tsx +19 -23
  1054. package/src/components/tag-select/COMPONENT.md +19 -6
  1055. package/src/components/tag-select/examples/creatable.tsx +2 -2
  1056. package/src/components/tag-select/examples/dismiss.tsx +23 -0
  1057. package/src/components/tag-select/examples/examples.module.css +3 -3
  1058. package/src/components/tag-select/examples/in-form.tsx +31 -32
  1059. package/src/components/tag-select/examples/sizes.tsx +2 -2
  1060. package/src/components/tag-select/examples/states.tsx +2 -2
  1061. package/src/components/textarea/COMPONENT.md +10 -6
  1062. package/src/components/textarea/examples/examples.module.css +3 -10
  1063. package/src/components/textarea/examples/in-form.tsx +3 -3
  1064. package/src/components/textarea/examples/sizes.tsx +10 -7
  1065. package/src/components/textarea/examples/states.tsx +29 -13
  1066. package/src/components/textarea/examples/validation.tsx +45 -36
  1067. package/src/components/thumbnail/COMPONENT.md +17 -13
  1068. package/src/components/thumbnail/examples/examples.module.css +1 -1
  1069. package/src/components/thumbnail/examples/states.tsx +1 -1
  1070. package/src/components/thumbnail/examples/variants.tsx +12 -1
  1071. package/src/components/timeline/COMPONENT.md +51 -35
  1072. package/src/components/timeline/examples/links.tsx +14 -14
  1073. package/src/components/timeline/examples/narrow.tsx +6 -6
  1074. package/src/components/timeline/examples/overview.tsx +6 -6
  1075. package/src/components/timeline/examples/sizes.tsx +28 -23
  1076. package/src/components/timeline/examples/structure.tsx +30 -30
  1077. package/src/components/timeline/examples/variants.tsx +40 -28
  1078. package/src/components/tooltip/COMPONENT.md +10 -6
  1079. package/src/components/tooltip/examples/examples.module.css +1 -5
  1080. package/src/components/tooltip/examples/non-interactive-trigger.tsx +1 -1
  1081. package/src/components/tooltip/examples/sizes.tsx +17 -10
  1082. package/src/components/typography/COMPONENT.md +18 -3
  1083. package/src/components/typography/examples/examples.module.css +3 -6
  1084. package/src/components/typography/examples/numeric.tsx +16 -0
  1085. package/src/components/video-note/COMPONENT.md +11 -7
  1086. package/src/components/visually-hidden/COMPONENT.md +8 -4
  1087. package/src/components/visually-hidden/examples/assertive.tsx +1 -1
  1088. package/src/components/visually-hidden/examples/overview.tsx +17 -7
  1089. package/src/components/voice-player/COMPONENT.md +15 -7
  1090. package/src/layout/app-shell/COMPONENT.md +53 -36
  1091. package/src/layout/app-shell/examples/examples.module.css +2 -22
  1092. package/src/layout/app-shell/examples/footer.tsx +10 -10
  1093. package/src/layout/app-shell/examples/overview.tsx +21 -25
  1094. package/src/layout/app-shell/examples/screen.module.css +2 -2
  1095. package/src/layout/app-shell/examples/screen.tsx +48 -47
  1096. package/src/layout/app-shell/examples/template.tsx +13 -17
  1097. package/src/layout/bottom-nav/COMPONENT.md +30 -20
  1098. package/src/layout/bottom-nav/examples/examples.module.css +2 -7
  1099. package/src/layout/bottom-nav/examples/floating-action.tsx +10 -19
  1100. package/src/layout/bottom-nav/examples/floating.tsx +10 -19
  1101. package/src/layout/bottom-nav/examples/in-app-shell.tsx +11 -19
  1102. package/src/layout/bottom-nav/examples/router.tsx +6 -5
  1103. package/src/layout/page/COMPONENT.md +353 -0
  1104. package/src/layout/page/examples/actions-collapse.tsx +45 -0
  1105. package/src/layout/page/examples/collapse.tsx +68 -0
  1106. package/src/{components/page-content → layout/page}/examples/examples.module.css +32 -16
  1107. package/{dist/skill/reference/components/page-content → src/layout/page}/examples/grid.tsx +18 -16
  1108. package/src/layout/page/examples/list-detail.tsx +112 -0
  1109. package/src/layout/page/examples/narrow.tsx +75 -0
  1110. package/src/layout/page/examples/overview.tsx +57 -0
  1111. package/{dist/skill/reference/components/page-content → src/layout/page}/examples/screen.module.css +1 -1
  1112. package/{dist/skill/reference/components/page-content → src/layout/page}/examples/screen.tsx +29 -19
  1113. package/{dist/skill/reference/components/page-content → src/layout/page}/examples/sections.tsx +17 -24
  1114. package/src/layout/page/examples/structure.tsx +41 -0
  1115. package/src/{components/page-toolbar/examples/narrow.tsx → layout/page/examples/tools.tsx} +38 -35
  1116. package/src/layout/page/examples/top-bar.tsx +85 -0
  1117. package/src/{components/page-content → layout/page}/examples/variants.tsx +13 -13
  1118. package/src/layout/sidebar/COMPONENT.md +51 -40
  1119. package/src/layout/sidebar/examples/account.tsx +1 -3
  1120. package/src/layout/sidebar/examples/brand-header.tsx +1 -3
  1121. package/src/layout/sidebar/examples/collapsible-groups.tsx +1 -3
  1122. package/src/layout/sidebar/examples/controlled-open.tsx +1 -3
  1123. package/src/layout/sidebar/examples/controlled.tsx +1 -3
  1124. package/src/layout/sidebar/examples/custom-part.tsx +1 -3
  1125. package/src/layout/sidebar/examples/dismiss.tsx +50 -0
  1126. package/src/layout/sidebar/examples/examples.module.css +7 -32
  1127. package/src/layout/sidebar/examples/narrow.tsx +47 -42
  1128. package/src/layout/sidebar/examples/nested-items.tsx +1 -3
  1129. package/src/layout/sidebar/examples/overview.tsx +1 -3
  1130. package/src/layout/sidebar/examples/persist.tsx +1 -3
  1131. package/src/layout/sidebar/examples/router.tsx +12 -13
  1132. package/src/layout/sidebar/examples/sizes.tsx +6 -6
  1133. package/src/styles/controls.css +2 -2
  1134. package/src/styles/fonts.css +22 -0
  1135. package/src/styles/globals.css +89 -12
  1136. package/src/styles/theme-dark.css +25 -24
  1137. package/src/styles/theme-light.css +70 -23
  1138. package/src/styles/tokens.css +17 -5
  1139. package/dist/components/dnd/useFlipList.d.ts +0 -17
  1140. package/dist/components/gantt/useEdgeAutoScroll.d.ts +0 -12
  1141. package/dist/components/modal/ModalDialog.d.ts +0 -46
  1142. package/dist/components/page-content/PageContent.d.ts +0 -173
  1143. package/dist/components/page-toolbar/PageToolbar.d.ts +0 -54
  1144. package/dist/hooks/useStateSwap.d.ts +0 -8
  1145. package/dist/internal/highlightTsxHtml.d.ts +0 -2
  1146. package/dist/internal/layoutPxFromPrimitives.d.ts +0 -6
  1147. package/dist/internal/mergeRefs.d.ts +0 -6
  1148. package/dist/layout/app-header/AppHeader.d.ts +0 -109
  1149. package/dist/skill/reference/components/drawer/examples/examples.module.css +0 -8
  1150. package/dist/skill/reference/components/page-content/COMPONENT.md +0 -272
  1151. package/dist/skill/reference/components/page-content/examples/list-detail.tsx +0 -106
  1152. package/dist/skill/reference/components/page-content/examples/narrow.tsx +0 -25
  1153. package/dist/skill/reference/components/page-content/examples/overview.tsx +0 -41
  1154. package/dist/skill/reference/components/page-toolbar/COMPONENT.md +0 -143
  1155. package/dist/skill/reference/components/page-toolbar/examples/examples.module.css +0 -16
  1156. package/dist/skill/reference/components/page-toolbar/examples/overview.tsx +0 -113
  1157. package/dist/skill/reference/components/page-toolbar/examples/save-changes.tsx +0 -40
  1158. package/dist/skill/reference/components/page-toolbar/examples/without-search.tsx +0 -60
  1159. package/dist/skill/reference/components/popover/examples/match-trigger-width.tsx +0 -23
  1160. package/dist/skill/reference/components/scroll-container/examples/chat.tsx +0 -101
  1161. package/dist/skill/reference/components/spinner/examples/loading-region.tsx +0 -22
  1162. package/dist/skill/reference/layout/app-header/COMPONENT.md +0 -186
  1163. package/dist/skill/reference/layout/app-header/examples/breadcrumbs.tsx +0 -37
  1164. package/dist/skill/reference/layout/app-header/examples/examples.module.css +0 -47
  1165. package/dist/skill/reference/layout/app-header/examples/in-app-shell.tsx +0 -69
  1166. package/dist/skill/reference/layout/app-header/examples/narrow.tsx +0 -28
  1167. package/dist/skill/reference/layout/app-header/examples/overview.tsx +0 -34
  1168. package/dist/skill/reference/layout/app-header/examples/page-title.tsx +0 -78
  1169. package/dist/skill/reference/layout/app-shell/examples/contained.tsx +0 -30
  1170. package/src/components/drawer/examples/examples.module.css +0 -8
  1171. package/src/components/page-content/COMPONENT.md +0 -272
  1172. package/src/components/page-content/examples/list-detail.tsx +0 -106
  1173. package/src/components/page-content/examples/narrow.tsx +0 -25
  1174. package/src/components/page-content/examples/overview.tsx +0 -41
  1175. package/src/components/page-toolbar/COMPONENT.md +0 -143
  1176. package/src/components/page-toolbar/examples/examples.module.css +0 -16
  1177. package/src/components/page-toolbar/examples/overview.tsx +0 -113
  1178. package/src/components/page-toolbar/examples/save-changes.tsx +0 -40
  1179. package/src/components/page-toolbar/examples/without-search.tsx +0 -60
  1180. package/src/components/popover/examples/match-trigger-width.tsx +0 -23
  1181. package/src/components/scroll-container/examples/chat.tsx +0 -101
  1182. package/src/components/spinner/examples/loading-region.tsx +0 -22
  1183. package/src/layout/app-header/COMPONENT.md +0 -186
  1184. package/src/layout/app-header/examples/breadcrumbs.tsx +0 -37
  1185. package/src/layout/app-header/examples/examples.module.css +0 -47
  1186. package/src/layout/app-header/examples/in-app-shell.tsx +0 -69
  1187. package/src/layout/app-header/examples/narrow.tsx +0 -28
  1188. package/src/layout/app-header/examples/overview.tsx +0 -34
  1189. package/src/layout/app-header/examples/page-title.tsx +0 -78
  1190. package/src/layout/app-shell/examples/contained.tsx +0 -30
@@ -13,140 +13,166 @@ playground page. What each screen teaches is in [Screen rules](#screen-rules) at
13
13
 
14
14
  | Screen | Main component | File | Shows |
15
15
  |---|---|---|---|
16
- | [List page](#list-page) | data-table | [screen.tsx](reference/components/data-table/examples/screen.tsx) | the title, a line of figures, SmartFilter search and filters, export and one primary action in the AppHeader; statuses, row menu, pages, filtered empty state |
17
- | [Detail page](#detail-page) | description-list | [screen.tsx](reference/components/description-list/examples/screen.tsx) | a nested record: Breadcrumb, the title with status and due date and the record's actions by weight in the AppHeader; main column + side column of Cards, Timeline |
18
- | [Settings page](#settings-page) | page-content | [screen.tsx](reference/components/page-content/examples/screen.tsx) | heading column + panel per section, form with its own save, Switches that apply at once, danger zone with a confirm |
19
- | [Form in a Drawer](#form-in-a-drawer) | drawer | [screen.tsx](reference/components/drawer/examples/screen.tsx) | the title, counts, search and the Drawer trigger in the AppHeader; Drawer form: groups, errors on submit, focus on the first invalid field, loading, toast |
20
- | [Record editor](#record-editor) | field-list | [screen.tsx](reference/components/field-list/examples/screen.tsx) | a document page (a long form): the title, a line of description and «Сохранить тариф» in `PageContent.Header`; a plan card edited in aside sections: name and description, specs in a `FieldList` (icon-only `Select` and `ColorPresets` in compact columns, pinned rows, reorder), the price and its changes by month in one list with the base row pinned, a setup fee in three currencies in one row under one heading, save with «Сохранено» on the button |
21
- | [Dashboard](#dashboard) | card | [screen.tsx](reference/components/card/examples/screen.tsx) | title + a line of data in `AppHeader`, period switch and report in its `PageToolbar`; KPI row that cross-fades to the new period, a Sparkline revenue trend, invoiced vs paid in a ChartFrame, panels with progress and a split, short table + link to the list |
22
- | [Screen states](#screen-states) | crossfade | [screen.tsx](reference/components/crossfade/examples/screen.tsx) | title + the statement date in `AppHeader`, page error in a Banner with retry, region loading with a Skeleton, Crossfade between states, table error in place, first-run EmptyPage |
23
- | [Messenger](#messenger) | chat | [screen.tsx](reference/components/chat/examples/screen.tsx) | title + the unread count in `AppHeader`; a full-height PageContent.Split of a `ChatList` with its search (live last message, ticks, unread counts, «печатает…») and a `Chat`: `Chat.Header` with the back button, avatar, title, the status that turns into «печатает…» (`typing`) and the search button, `Chat.Search`, `Chat.Messages` from `items` + a stable `renderMessage` (dates, runs and the unread band from the data, history loaded above with `hasOlder` / `onLoadOlder`, a first load in skeletons), text, a photo, a file and sent voice, reply and edit from the menu through `Composer.Context value` (`replyTo` / `editOf`), the jump to the quoted message (`Message.Reply target`), optimistic sends whose messages rise from the composer while the client's answer slides in, «печатает…» both ways (`onActivityChange` → `Chat.Root typing`), unread counts from `onNewMessage` and `onRead`, the Composer with attachments in `Chat.Footer` |
24
- | [Sales pipeline board](#sales-pipeline-board) | kanban | [screen.tsx](reference/components/kanban/examples/screen.tsx) | AppHeader titles the page (`h1` + a Description with the open deals and their sum) and carries a PageToolbar with SmartFilter search, a board / list SegmentedControl and the one primary action; Crossfade between a `plain` Kanban (stages without wells, deal cards on the page) and a DataTable of the same deals, column totals in `renderColumnMeta`, moves saved through an `onValueChange` promise that the server can refuse, the deal in a Drawer with a DescriptionList and stage actions, skeleton first load |
25
- | [App frame](#app-frame) | app-shell | [screen.tsx](reference/layout/app-shell/examples/screen.tsx) | Sidebar rail on a wide screen, floating BottomNav in `AppShell.Footer` on a phone («Ещё» opens the Sidebar panel), AppHeader with the menu button and the page title (`h1`) with a line of data, counts on items, a home page that cross-fades between sections |
26
- | [Media library](#media-library) | file-upload | [screen.tsx](reference/components/file-upload/examples/screen.tsx) | AppHeader titles the page (`h1` + a Description with the object) and carries a PageToolbar with sections and counts, search (`SmartFilter` with `fields={[]}`), order and «Загрузить»; uploads through `useUploadQueue` in `FileUpload` tiles (`trigger="tile"`, `layout="grid"`) with progress, a failure and retry, a done file moving into the library; a grid of `Thumbnail` / `Thumbnail.Video` tiles that open `MediaViewer` out of the tile (`getOrigin`, `thumbnails`, `renderActions`) or, in selection mode, are picked (`checked`) for bulk download and a `ConfirmDialog` delete; a Skeleton first load and a filtered `EmptyPage` in a `Crossfade` |
27
- | [Resource schedule](#resource-schedule) | gantt | [screen.tsx](reference/components/gantt/examples/screen.tsx) | AppHeader titles the page (`h1` + a Description with the people shown) and carries a `PageToolbar` with search, role / client filters, team sections and «Назначить» over a full-height `Gantt` (`scrollHeight="fill"`); people with avatars, client hues, lanes for overlaps, locked absences and milestones; moves saved through an async `onBarChange` or refused and glided back, new work drawn with `onBarCreate` and named in a Modal (cancel fades the ghost), `onSelect` details in a Drawer with a `DescriptionList` and a confirmed removal, `loading` and filtered `empty` |
16
+ | [List page](#list-page) | data-table | [screen.tsx](reference/components/data-table/examples/screen.tsx) | the title, a line of figures, SmartFilter search and filters, export and one primary action in the page's top bar; statuses, row menu, pages, filtered empty state |
17
+ | [Detail page](#detail-page) | description-list | [screen.tsx](reference/components/description-list/examples/screen.tsx) | a nested record: the path ending in the title, status and due date and the record's actions by weight in the top bar; main column + side column of Cards, Timeline |
18
+ | [Settings page](#settings-page) | page | [screen.tsx](reference/layout/page/examples/screen.tsx) | the path in a collapsing top bar, the large title in the flow, heading column + panel per section, form with its own save, Switches that apply at once, danger zone with a confirm |
19
+ | [Form in a Drawer](#form-in-a-drawer) | drawer | [screen.tsx](reference/components/drawer/examples/screen.tsx) | the title, counts, search and the Drawer trigger in the top bar; Drawer form: groups, errors on submit, focus on the first invalid field, loading, toast |
20
+ | [Record editor](#record-editor) | field-list | [screen.tsx](reference/components/field-list/examples/screen.tsx) | a document page (a long form): the title and a line of description in `Page.Heading`, «Сохранить тариф» in `Page.Actions`, both in a `Page.Header` in the flow; a plan card edited in aside sections: name and description, specs in a `FieldList` (icon-only `Select` and `ColorPresets` in compact columns, pinned rows, reorder), the price and its changes by month in one list with the base row pinned, a setup fee in three currencies in one row under one heading, save with «Сохранено» on the button |
21
+ | [Dashboard](#dashboard) | card | [screen.tsx](reference/components/card/examples/screen.tsx) | the large title + a line of data in the flow, period switch and report in a collapsing `Page.TopBar`; KPI row that cross-fades to the new period, a Sparkline revenue trend, invoiced vs paid in a ChartFrame, panels with progress and a split, short table + link to the list |
22
+ | [Screen states](#screen-states) | crossfade | [screen.tsx](reference/components/crossfade/examples/screen.tsx) | title + the statement date in `Page.TopBar`, page error in a Banner with retry, region loading with a Skeleton, Crossfade between states, table error in place, first-run EmptyPage |
23
+ | [Messenger](#messenger) | chat | [screen.tsx](reference/components/chat/examples/screen.tsx) | title + the unread count in `Page.TopBar`; a full-height Page.Split of a `ChatList` with its search (live last message, ticks, unread counts, «печатает…») and a `Chat`: `Chat.Header` with the back button, avatar, title, the status that turns into «печатает…» (`typing`) and the search button, `Chat.Search`, `Chat.Messages` from `items` + `renderMessage` (dates, runs and the unread band from the data, history loaded above with `hasOlder` / `onLoadOlder`, a first load in skeletons), text, a photo, a file and sent voice, reply and edit from the menu through `Composer.Context messageId` (`replyTo` / `editOf`), the jump to the quoted message (`Message.Reply target`), optimistic sends whose messages rise from the composer while the client's answer slides in, «печатает…» both ways (`onActivityChange` → `Chat.Root typing`), unread counts from `onNewMessage` and `onRead`, the Composer with attachments in `Chat.Footer` |
24
+ | [Sales pipeline board](#sales-pipeline-board) | kanban | [screen.tsx](reference/components/kanban/examples/screen.tsx) | `Page.TopBar` titles the page (`h1` + a Description with the open deals and their sum) with SmartFilter search and a board / list SegmentedControl in `Page.Tools` and the one primary action in `Page.Actions`; Crossfade between a `plain` Kanban (stages without wells, deal cards on the page) and a DataTable of the same deals, column totals in `renderColumnMeta`, moves saved through an `onValueChange` promise that the server can refuse, the deal in a Drawer with a DescriptionList and stage actions, skeleton first load |
25
+ | [App frame](#app-frame) | app-shell | [screen.tsx](reference/layout/app-shell/examples/screen.tsx) | Sidebar rail on a wide screen, floating BottomNav in `AppShell.Footer` on a phone («Ещё» opens the Sidebar panel), a `Page.TopBar` with the menu button and the page title (`h1`) with a line of data, counts on items, a home page that cross-fades between sections |
26
+ | [Media library](#media-library) | file-upload | [screen.tsx](reference/components/file-upload/examples/screen.tsx) | `Page.TopBar` titles the page (`h1` + a Description with the object) with sections and counts, search (`SmartFilter` with `fields={[]}`) and order in `Page.Tools` and «Загрузить» in `Page.Actions`; uploads through `useUploadQueue` in `FileUpload` tiles (`trigger="tile"`, `layout="grid"`) with progress, a failure and retry, a done file moving into the library; a grid of `Thumbnail` / `Thumbnail.Video` tiles that open `MediaViewer` out of the tile (`getOrigin`, `thumbnails`, `renderActions`) or, in selection mode, are picked (`checked`) for bulk download and a `ConfirmDialog` delete; a Skeleton first load and a filtered `EmptyPage` in a `Crossfade` |
27
+ | [Resource schedule](#resource-schedule) | gantt | [screen.tsx](reference/components/gantt/examples/screen.tsx) | `Page.TopBar` titles the page (`h1` + a Description with the people shown) with search, role / client filters and team sections in `Page.Tools` and «Назначить» in `Page.Actions` over a full-height `Gantt` (`scrollHeight="fill"`); people with avatars, client hues, lanes for overlaps, locked absences and milestones; moves saved through an async `onBarChange` or refused and glided back, new work drawn with `onBarCreate` and named in a Modal (cancel fades the ghost), `onItemOpen` details in a Drawer with a `DescriptionList` and a confirmed removal, `loading` and filtered `empty` |
28
28
 
29
29
  Pick the closest one, rename the domain, keep the skeleton. Change structure only when the task needs
30
30
  it, and then by the rules below.
31
31
 
32
32
  ## 1. Page skeleton
33
33
 
34
- **One title per page, and it lives in the page's header.** Every app page titles itself in the
35
- app header: `AppHeader.Title` is the page's only `<h1>`, an `AppHeader.Description` under it
36
- is one line that carries data («Среда, 14 октября · 3 задачи», «Отправлен · оплатить до 14 октября»),
37
- and a nested record puts the path up (`Breadcrumb` + `AppHeader.Separator`) before it. The header row
38
- belongs to the page: it holds only what the current page needs — its title, its own buttons in
39
- `AppHeader.Actions`, and its tools as a `PageToolbar.Root` in `AppHeader.Tools` (the page's own
40
- search and filters, sections, the view, the primary action). Main has no `PageContent.Header`.
41
-
42
- **A document page** — settings, a long form, an article or help text — is the one exception: its big
43
- title is `PageContent.Header` in main (`PageContent.Title` is the `<h1>`, one sentence of
44
- `PageContent.Description`, the page's save action in `PageContent.Actions`), and the header carries
45
- no title. Never two titles; never no `<h1>`.
34
+ **The app is navigation and the page.** `AppShell` holds the Sidebar and `AppShell.Main`; there is no
35
+ app-wide header and no global search. Everything at the top belongs to the page: one `Page.Root` with
36
+ its `Page.TopBar` (sticky) and its `Page.Body`, plus a `Page.Header` in the flow on a document page.
37
+
38
+ **One title per page.** `Page.Title` is the page's only `<h1>`, a `Page.Description` with it is one
39
+ line that carries data («Среда, 14 октября · 3 задачи», «Отправлен · оплатить до 14 октября»), and a
40
+ nested record puts the path up (a `Breadcrumb.Root` before the title) — all three inside
41
+ `Page.Heading`, the title group. Where the heading stands follows the kind of page; its size follows
42
+ the place:
43
+
44
+ - **Work screens** — a list, a board, a chat, a schedule, a record: `Page.Heading` stands in
45
+ `Page.TopBar` beside the page's tools and buttons ([the top bar](#the-top-bar)); there is no header
46
+ in the flow.
47
+ - **Document pages** — settings, a long form, an article or help text: `Page.Header` in the flow
48
+ holds `Page.Heading` (the large title with one sentence of `Page.Description`) and the page's save
49
+ action in `Page.Actions`; optionally a `Page.TopBar collapse` with only the path in its
50
+ `Page.Heading`, which repeats the title once it scrolls away.
51
+ - **Overviews** — dashboards: a `Page.TopBar collapse` with the page's tools (the period) in
52
+ `Page.Tools` and its buttons (a report) in `Page.Actions`, and the titled `Page.Header` in the flow.
53
+
54
+ Never two titles; never no `<h1>`. A bar whose page shows no title still holds a `Page.Title` — inside
55
+ `VisuallyHidden` — unless a flow `Page.Header` has one.
46
56
 
47
57
  ```
48
58
  AppShell.Root once per app (layouts.md#app-frame-once-per-app)
49
59
  ├─ AppShell.Nav → Sidebar navigation rail, one layer above the page
50
- ├─ AppHeader.Root the page's header: only what this page needs
51
- │ ├─ AppHeader.Start
52
- │ │ ├─ AppHeader.MenuButton opens the Sidebar below 768px
53
- │ │ ├─ Breadcrumb + Separator only on a nested record: the path up
54
- │ │ └─ AppHeader.Title the one h1 + AppHeader.Description: a line of data
55
- │ ├─ AppHeader.Actions the page's own buttons (export, a more menu)
56
- │ └─ AppHeader.Tools second row → PageToolbar.Root: search and filter, sections,
57
- │ view, the primary action; Chips under them
58
60
  └─ AppShell.Main gutters + top air (24, 32 from 1024px); the page renders here
59
- └─ PageContent.Page | Root the page you deliver
60
- └─ PageContent.Body blocks 24 apart, starting at main's top air
61
- ├─ PageContent.Grid every tile of the screen, 16 on both axes
62
- │ └─ PageContent.Cell span (of 12), rows; the tile fills it
63
- └─ PageContent.Section a new topic: h2 label (+ Actions), 40 from its neighbours
64
-
65
- Document page: the header without a title, and in main
66
- └─ PageContent.Root maxWidth="wide" | "readable"
67
- ├─ PageContent.Header the one h1, a sentence of description, the page's save action; 24 above the body
68
- └─ PageContent.Body
61
+ └─ SmartFilter.Root a filtered page only: the filter's state, no DOM, around the page
62
+ └─ Page.Root the page you deliver
63
+ ├─ Page.TopBar sticky; led by the menu button while the Sidebar is off-canvas
64
+ │ ├─ Page.Heading the path › the title on one line, the line of data under it
65
+ │ │ ├─ Breadcrumb.Root only on a nested record: the levels above this page
66
+ │ │ ├─ Page.Title the one h1, the path's last level
67
+ │ │ └─ Page.Description a line of data
68
+ │ ├─ Page.Tools sections, search and filter, view — kit controls in reading order
69
+ │ ├─ Page.Actions every button of the page, each with an icon; the primary last
70
+ │ └─ Page.Chips SmartFilter.Chips: a line under everything, gone while empty
71
+ └─ Page.Body blocks 24 apart, starting at main's top air
72
+ ├─ Page.Grid every tile of the screen, 16 on both axes
73
+ │ └─ Page.Cell span (of 12), rows; the tile fills it
74
+ └─ Page.Section a new topic: h2 label (+ Page.Actions), 40 from its neighbours
75
+
76
+ Document page or overview: the title in the flow
77
+ └─ Page.Root maxWidth="wide" | "readable"
78
+ ├─ Page.TopBar collapse the path (an overview: its tools and buttons); repeats the title once it scrolls away
79
+ ├─ Page.Header Page.Heading (the one h1, a sentence of description) + Page.Actions; 24 above the body
80
+ └─ Page.Body
69
81
  ```
70
82
 
71
- - A screen component renders its page: its `AppHeader.Root` (through the shell's `header`) and its
72
- body. Styles, `applyTheme`, `NotificationProvider` and `AppShell` live at the app root.
73
- - `PageContent.Page` for app pages (full panel width); `PageContent.Root maxWidth="wide"` for
74
- settings, `maxWidth="readable"` for one narrow column of text or fields.
75
- - No outer padding, no margins: `AppShell.Main` has the gutters and the top air under the header,
76
- `PageContent` has block → block 24, section → section 40, tile → tile 16 (and header → body 24 on
77
- a document page). Your CSS lays out only the inside of a block.
83
+ - A screen renders its page: one `Page.Root` with its top bar and its body. Styles, `applyTheme`,
84
+ `NotificationProvider` and `AppShell` live at the app root.
85
+ - `Page.Root` for app pages (full panel width); `Page.Root maxWidth="wide"` for settings,
86
+ `maxWidth="readable"` for one narrow column of text or fields.
87
+ - No outer padding, no margins: `AppShell.Main` hands the page its gutters and top air, `Page` has
88
+ block → block 24, section → section 40, tile → tile 16 (and header → body 24). Your CSS lays out
89
+ only the inside of a block.
90
+
91
+ ### The top bar
92
+
93
+ `Page.TopBar` holds up to four groups and nothing else. Write them in reading order; the DOM and Tab
94
+ order is Heading, Tools, Actions, Chips whatever the JSX order.
95
+
96
+ - **`Page.Heading`** — the path ends in the title: `Breadcrumb.Root` with the levels above this page,
97
+ then `Page.Title` with its name, on one line (the heading draws the chevron between them), and
98
+ `Page.Description` under the whole line. The title is never a row of its own under the path, and
99
+ the path never repeats the title as its last item.
100
+ - **`Page.Tools`** — the page's own tools as kit controls, in the order a person reads them: sections
101
+ (a `SegmentedControl` with counts), search and filter (`SmartFilter.Toolbar`), the view or the
102
+ period. Named with `aria-label`; no buttons and no wrappers inside.
103
+ - **`Page.Actions`** — the one place for the page's buttons: secondary ones (`soft` + `neutral`)
104
+ first, the primary (`solid`) last. Every Button carries a `Button.Icon` beside its label: the bar
105
+ shows it as the icon alone when the line runs short.
106
+ - **`Page.Chips`** — `SmartFilter.Chips`: the active filters.
107
+ - `SmartFilter.Root` draws nothing and its toolbar and chips stand in two groups, so it wraps
108
+ `Page.Root` (or whatever holds both) — never a group of the bar.
109
+ - The bar gives the title its natural size and decides the rest by width:
110
+ [the page's top bar](responsive.md#the-pages-top-bar--pagetopbar). The classic mistakes, bad →
111
+ good: [anti-slop.md](anti-slop.md#7b-a-top-bar-out-of-its-groups).
78
112
 
79
113
  ```tsx
80
114
  import {
81
- AppHeader,
115
+ Breadcrumb,
82
116
  Button,
83
- Dropdown,
84
117
  Icon,
85
- PageToolbar,
118
+ Page,
119
+ SegmentedControl,
86
120
  SmartFilter,
87
121
  type SmartFilterField,
88
122
  type SmartFilterValue,
89
123
  } from "prime-ui-kit";
124
+ import type { ReactNode } from "react";
90
125
 
91
- type OrdersHeaderProps = {
126
+ type DealsPageProps = {
92
127
  fields: SmartFilterField[];
93
128
  filter: SmartFilterValue;
94
129
  onFilterChange: (value: SmartFilterValue) => void;
95
- search: string;
96
- onSearchChange: (search: string) => void;
130
+ view: string;
131
+ onViewChange: (view: string) => void;
132
+ children: ReactNode;
97
133
  };
98
134
 
99
- export function OrdersHeader({ fields, filter, onFilterChange, search, onSearchChange }: OrdersHeaderProps) {
135
+ export function DealsPage({ fields, filter, onFilterChange, view, onViewChange, children }: DealsPageProps) {
100
136
  return (
101
- <AppHeader.Root>
102
- <AppHeader.Start>
103
- <AppHeader.Title>
104
- Заказы
105
- <AppHeader.Description>128 в работе · 6 ждут оплаты</AppHeader.Description>
106
- </AppHeader.Title>
107
- </AppHeader.Start>
108
- <AppHeader.Actions>
109
- <Dropdown.Root>
110
- <Dropdown.Trigger>
111
- <Button.Root variant="soft" tone="neutral" aria-label="Другие действия">
137
+ <SmartFilter.Root fields={fields} value={filter} onValueChange={onFilterChange}>
138
+ <Page.Root>
139
+ <Page.TopBar>
140
+ <Page.Heading>
141
+ <Breadcrumb.Root>
142
+ <Breadcrumb.Item href="/clients">Клиенты</Breadcrumb.Item>
143
+ <Breadcrumb.Item href="/clients/north">ООО «Север»</Breadcrumb.Item>
144
+ </Breadcrumb.Root>
145
+ <Page.Title>Сделки</Page.Title>
146
+ <Page.Description>7 в работе · 6,5 млн ₽</Page.Description>
147
+ </Page.Heading>
148
+ <Page.Tools aria-label="Сделки">
149
+ <SmartFilter.Toolbar />
150
+ <SegmentedControl.Root value={view} onValueChange={onViewChange} aria-label="Вид">
151
+ <SegmentedControl.Item value="board">Доска</SegmentedControl.Item>
152
+ <SegmentedControl.Item value="list">Список</SegmentedControl.Item>
153
+ </SegmentedControl.Root>
154
+ </Page.Tools>
155
+ <Page.Actions>
156
+ <Button.Root variant="soft" tone="neutral">
157
+ <Button.Icon>
158
+ <Icon name="action.download" />
159
+ </Button.Icon>
160
+ Экспорт
161
+ </Button.Root>
162
+ <Button.Root>
112
163
  <Button.Icon>
113
- <Icon name="action.more" />
164
+ <Icon name="action.add" />
114
165
  </Button.Icon>
166
+ Новая сделка
115
167
  </Button.Root>
116
- </Dropdown.Trigger>
117
- <Dropdown.Content>
118
- <Dropdown.Item>Настроить колонки</Dropdown.Item>
119
- <Dropdown.Item>Импорт из CSV</Dropdown.Item>
120
- </Dropdown.Content>
121
- </Dropdown.Root>
122
- </AppHeader.Actions>
123
- <AppHeader.Tools>
124
- <SmartFilter.Root
125
- fields={fields}
126
- value={filter}
127
- onValueChange={onFilterChange}
128
- search={search}
129
- onSearchChange={onSearchChange}
130
- >
131
- <PageToolbar.Root aria-label="Заказы">
132
- <PageToolbar.Tools>
133
- <SmartFilter.Toolbar />
134
- </PageToolbar.Tools>
135
- <PageToolbar.Actions>
136
- <Button.Root>
137
- <Button.Icon>
138
- <Icon name="action.add" />
139
- </Button.Icon>
140
- Создать заказ
141
- </Button.Root>
142
- </PageToolbar.Actions>
143
- <PageToolbar.Chips>
144
- <SmartFilter.Chips />
145
- </PageToolbar.Chips>
146
- </PageToolbar.Root>
147
- </SmartFilter.Root>
148
- </AppHeader.Tools>
149
- </AppHeader.Root>
168
+ </Page.Actions>
169
+ <Page.Chips>
170
+ <SmartFilter.Chips />
171
+ </Page.Chips>
172
+ </Page.TopBar>
173
+ <Page.Body>{children}</Page.Body>
174
+ </Page.Root>
175
+ </SmartFilter.Root>
150
176
  );
151
177
  }
152
178
  ```
@@ -160,20 +186,20 @@ Every gap is a `--prime-space-N` token (N × 4px) set as `gap` on the parent. Cl
160
186
  | label → field, field → hint | 4–8 | built into fields — never add |
161
187
  | buttons, chips, filters in a row | 8 | `--prime-space-2` |
162
188
  | text lines of one item (name over meta) | 0–4 | `--prime-space-1` |
163
- | heading → its content (group, section) | 16 | `--prime-space-4` (`PageContent.Section` does it) |
164
- | tile → tile, both axes (KPI, charts, panels) | 16 | `PageContent.Grid` |
189
+ | heading → its content (group, section) | 16 | `--prime-space-4` (`Page.Section` does it) |
190
+ | tile → tile, both axes (KPI, charts, panels) | 16 | `Page.Grid` |
165
191
  | field → field, switch → switch | 20 | `--prime-space-5` |
166
192
  | main column → side column | 24 | `--prime-space-6` |
167
- | app header → the page's first block | 12 + 24, 12 + 32 from 1024px | the header's bottom air + `AppShell.Main` top air |
168
- | page header → body (a document page) | 24 | `PageContent.Header` |
169
- | block → block on a page | 24 | `PageContent.Body` |
193
+ | top bar → the page's first block | 12 + 24, 12 + 32 from 1024px | the bar's bottom air + the page's top air from `AppShell.Main` |
194
+ | flow header → body (a document page) | 24 | `Page.Header` |
195
+ | block → block on a page | 24 | `Page.Body` |
170
196
  | group → group in a form | 32 | `--prime-space-8` |
171
- | section → section (a new topic with an `h2`) | 40 | `PageContent.Section` |
197
+ | section → section (a new topic with an `h2`) | 40 | `Page.Section` |
172
198
 
173
199
  A screen with one gap everywhere reads as a list of unrelated things. Use at least three levels: inside
174
200
  an item, between items, between blocks. The tiles of one screen are one board: put them all in one
175
- `PageContent.Grid` (one gap on both axes), never a grid per row — and keep the large air for a new topic
176
- with its own heading (`PageContent.Section`).
201
+ `Page.Grid` (one gap on both axes), never a grid per row — and keep the large air for a new topic
202
+ with its own heading (`Page.Section`).
177
203
 
178
204
  ## 3. Hierarchy — air first, then type
179
205
 
@@ -181,8 +207,8 @@ Hierarchy comes from space and a handful of type roles, not from size jumps, col
181
207
 
182
208
  | Text | Use |
183
209
  |---|---|
184
- | page title | `AppHeader.Title` (the only `h1`); on a document page `PageContent.Title` (`heading-m`) instead |
185
- | section heading without a card | `PageContent.Section label` (an `h2` in `title-m`) |
210
+ | page title | `Page.Title` (the only `h1`): `title-m` in the top bar, `heading-m` in the flow |
211
+ | section heading without a card | `Page.Section label` (an `h2` in `title-m`) |
186
212
  | card / panel title | `Card.Title as="h2"` (under the page title) |
187
213
  | heading of a group of fields | `Fieldset label` (`title-s` in the `<legend>`) |
188
214
  | other group heading inside a card | `Typography as="h3" variant="title-s"` |
@@ -200,12 +226,14 @@ Hierarchy comes from space and a handful of type roles, not from size jumps, col
200
226
  ## 4. Surfaces
201
227
 
202
228
  - Inside the app the content panel is the page (layer 0 of the surface ladder); a `Card` on it is
203
- layer 1, and fields take the fill of the layer they sit on. The kit sets this by context — never set backgrounds.
229
+ layer 1, and fields take the fill of the layer they sit on. The kit sets this by context — never
230
+ set backgrounds ([the one exception](foundations.md#your-own-bounded-block)).
204
231
  - **Card when** the block stands alone and has its own title: a KPI tile, a settings panel, facts in a
205
232
  side column, a chart. **No card when** the block is the only thing in its region: a section heading
206
233
  and the content are enough.
207
- - `DataTable` is already a filled block — never inside a Card. No card in a card. No borders around
208
- blocks; `Divider` only inside a block (list rows, a form and its footer).
234
+ - `DataTable` is already a filled block — never inside a Card; a card in a card only as
235
+ [the next layer, sparingly](foundations.md#card-in-a-card). No borders around blocks; `Divider`
236
+ only inside a block (list rows, a form and its footer).
209
237
  - Floating layers (menus, popovers, dialogs) come only from kit overlays.
210
238
 
211
239
  ## 5. Density and size
@@ -214,8 +242,8 @@ Hierarchy comes from space and a handful of type roles, not from size jumps, col
214
242
  a dense back-office table may be `s` with its toolbar; a sign-in card may be `l`.
215
243
  - One row = one size: everything in a toolbar or an actions row lines up.
216
244
  - A control nested in another component's row is one tier down: buttons and menus in table cells `s`,
217
- a segmented switch in a card header `s`. Kit hosts (Popover, Banner, LoginForm, the DataTable toolbar)
218
- size their `Button.Root` / `Input.Root` children themselves.
245
+ a segmented switch in a card header `s`. A sized kit host ([the host tier](api-contract.md#size-and-the-host-tier))
246
+ sizes the kit controls inside it itself.
219
247
 
220
248
  ## 6. Actions
221
249
 
@@ -224,7 +252,7 @@ Hierarchy comes from space and a handful of type roles, not from size jumps, col
224
252
  `neutral` in Modal / Drawer footers. Rare actions: a `Dropdown` behind an `action.more` icon button —
225
253
  `soft` + `neutral` in a header row (it has a shape beside the other buttons), `ghost` size `s` in a
226
254
  table cell.
227
- - Placement: the page's primary action in `PageToolbar.Actions` in `AppHeader.Tools`, its other buttons in `AppHeader.Actions` (a document page: `PageContent.Actions`); card actions in `Card.Footer`; dialog actions in
255
+ - Placement: every button of the page in one `Page.Actions` — of `Page.TopBar` on a work screen, of the flow `Page.Header` on a document page — the primary last; card actions in `Card.Footer`; dialog actions in
228
256
  `Modal.Footer` / `Drawer.Footer`; row actions in the last column; bulk actions in the table toolbar.
229
257
  - An empty state's action replaces the header's primary, it does not duplicate it.
230
258
  - Destructive: `tone="danger"`; a standalone trigger is `outline`, in a menu it is the last item, the
@@ -242,7 +270,8 @@ Hierarchy comes from space and a handful of type roles, not from size jumps, col
242
270
  - One value in several units is one row of fields under one heading, each unit in its field's
243
271
  `Input.InlineAffix`; a base value with overrides is one `FieldList` with the base pinned first.
244
272
  The shape of the data decides the layout: [ux.md](ux.md#2-the-shape-of-the-data-decides-the-layout).
245
- - Fields 20 apart; related short fields side by side in an `auto-fit` grid with `align-items: start`
273
+ - Fields 20 apart; related short fields side by side in an
274
+ [intrinsic grid](responsive.md#intrinsic-grids) with `align-items: start`
246
275
  (`reserveSupportRow` on Input / Textarea keeps neighbours aligned); groups 32 apart, each a
247
276
  `Fieldset label` (its `title-s` heading 16 above the fields, no frame); no dividers between groups.
248
277
  - Form column width: one column up to ~65ch; never stretch a form across a wide panel.
@@ -254,16 +283,23 @@ Hierarchy comes from space and a handful of type roles, not from size jumps, col
254
283
  navigates) → a `Notification`; a failure → a `Notification` or the field's `error`.
255
284
  - A footer button outside the form submits it with `form={formId}`.
256
285
  - Choice controls: Checkbox when the value is submitted later, Switch when it applies at once (no Save
257
- in that section), `Radio.Group label` for one of 2–5 visible options.
286
+ in that section), `Radio.Group label` for one of a few visible options
287
+ ([choosing.md](choosing.md#2-inside-a-category)).
258
288
 
259
289
  ## 8. Tables and lists
260
290
 
261
- - A list page is `DataTable` with the filters in its `toolbar` — `SmartFilter.Toolbar` and
262
- `SmartFilter.Chips` inside `SmartFilter.Root` (or one SegmentedControl / Select for a single field).
263
- - Where the filters go: tools of one table live in its `toolbar`; when the page itself carries
264
- sections with counts, a view switch (board / list, grid / list) or filters that drive more than one
265
- table — a board, a schedule, a media grid — the page gets `PageToolbar` and the table keeps only its
266
- own tools (`DataTable.ColumnsMenu`).
291
+ ### Where the filters go
292
+
293
+ - The page's search and filters are the page's: `SmartFilter.Root` around `Page.Root`,
294
+ `SmartFilter.Toolbar` in the bar's `Page.Tools`, `SmartFilter.Chips` in its `Page.Chips`
295
+ ([the list page](#list-page)).
296
+ A search alone is the same SmartFilter with `fields={[]}`.
297
+ - The DataTable `toolbar` keeps the table's own tools: `DataTable.ColumnsMenu`, a bulk bar of the
298
+ selected rows. Search and filters go there only when the table is not the page's main region (a
299
+ table in a section of a record, in a Drawer).
300
+
301
+ ### Tables
302
+
267
303
  - Paging is built in: `paging="pages"` (default, Pagination and the «Показано 1–6 из 10» range in the
268
304
  footer), `paging="infinite"` for feeds, `paging="none"` for short lists on dashboards and details.
269
305
  - When the server holds more than you load (a CRM list, a register): `source="server"` — `rows` is the
@@ -271,11 +307,11 @@ Hierarchy comes from space and a handful of type roles, not from size jumps, col
271
307
  request, a new search or filter sets `page` to 1, and the old rows stay with `loading` until the
272
308
  answer comes ([server.tsx](reference/components/data-table/examples/server.tsx)).
273
309
  - Columns: `numeric` for amounts, counts and dates (end-aligned, tabular; `headerAlign="end"` to line the
274
- head up); statuses as `Badge` from one status → color map; an avatar + two-line cell for people and
310
+ head up); statuses as `Badge` from one status → tone map; an avatar + two-line cell for people and
275
311
  companies; row menu last.
276
312
  - States in place: `loading` (+ `loadingRows`) while there are no rows, `empty` for nothing found
277
- (string → compact EmptyPage, or your own `EmptyPage size="s"` with «Сбросить фильтры»), `error` for a
278
- failed load. The head and toolbar stay.
313
+ (string → compact EmptyPage, or your own `EmptyPage size="s"` with «Сбросить фильтры»), `loadError`
314
+ for a failed load. The head and toolbar stay.
279
315
  - Phones: the table scrolls inside itself, `stickyFirstColumn` keeps the key column; never let the page
280
316
  scroll sideways. Short lists of objects can be `Card variant="list"` instead of a table.
281
317
 
@@ -285,9 +321,9 @@ Hierarchy comes from space and a handful of type roles, not from size jumps, col
285
321
  |---|---|
286
322
  | the result of an action (sent, created, failed to save; saved when the form goes away) | `Notification` via `notify()` |
287
323
  | a form saved and still on screen | the submit button's text: «Сохранено» |
288
- | a state of the page or a section that persists (sync failed, trial ends, read-only) | `Banner` as the first block of `PageContent.Body` (or inside the Card it concerns) |
324
+ | a state of the page or a section that persists (sync failed, trial ends, read-only) | `Banner` as the first block of `Page.Body` (or inside the Card it concerns) |
289
325
  | a problem with one field | the field's `error` |
290
- | a region failed to load | the region shows it in place: DataTable `error`, `EmptyPage` with `EmptyPage.Icon tone="danger"` and «Повторить» |
326
+ | a region failed to load | the region shows it in place: DataTable `loadError`, or `EmptyPage tone="danger"` with `EmptyPage.RetryButton` |
291
327
  | a region is loading | DataTable `loading`; otherwise a `Skeleton` in the geometry of the content + `aria-busy` on the region; `Spinner` only when there is no shape to hold |
292
328
  | a region changes state (loading → data → empty → error, another record) | its content in `Crossfade state={status}` — always, so the change flows instead of flipping |
293
329
  | nothing here yet (first run) | `EmptyPage` with one action (`tone="accent"` icon for a call to start) |
@@ -312,20 +348,17 @@ mirror the data's rows and gaps with `Skeleton`, so the swap moves nothing on th
312
348
  | a name for an icon button | `Tooltip` |
313
349
  | search across commands and pages (⌘K) | `CommandMenu` |
314
350
 
315
- Every overlay takes `closeOnOutsideClick` / `closeOnEscape`. A destructive confirm is `ConfirmDialog`, which
316
- turns them off itself; a form in a Modal or Drawer holds closing with `Modal.Guard` / `Drawer.Guard`
317
- (`busy` while a request runs, `dirty` for unsaved changes).
351
+ Every overlay closes on Escape and on a press outside unless you turn it off
352
+ ([the Dismiss row](api-contract.md#shared-vocabulary-exported-types)); a form in a Modal or Drawer holds
353
+ closing with `Modal.Guard` / `Drawer.Guard` (`busy` while a request runs, `dirty` for unsaved
354
+ changes) instead.
318
355
 
319
356
  ## 11. Narrow screens
320
357
 
321
- - Layouts are intrinsic: `repeat(auto-fit, minmax(min(100%, …), 1fr))` grids and flex-wrap with a large
322
- `flex-grow` on the main column — no breakpoints needed, and they work in any container. Media queries
323
- only for app-frame decisions (the phone menu header) at 640 · 768 · 1024 · 1280.
324
- - From 320px: the page's tools wrap under the header title and the primary action takes its own row when the search would be squeezed (built in), side columns drop below the main one,
358
+ - Layouts are [intrinsic](responsive.md#intrinsic-grids) — no breakpoints needed, and they work in
359
+ any container; a media query only in [the breakpoints' scope](responsive.md#breakpoints).
360
+ - From 320px: the page's tools take a line under the page title ([the page's top bar](responsive.md#the-pages-top-bar--pagetopbar)), side columns drop below the main one,
325
361
  pairs of fields stack, tables scroll inside themselves, dialogs stack their footers (built in).
326
- - A page with search and filter, sections, a view switch and the primary action gets `PageToolbar`:
327
- search and filter first with the active filters under the top row, one row when wide, stacked rows
328
- 12 apart when narrow; the primary action at the top row's end, on its own row on a phone.
329
362
  - Rearrange, never hide: every function of the desktop screen is on the phone — in another place or a
330
363
  menu. App sections on phones: `BottomNav` in `AppShell.Footer`; a short task from the bottom
331
364
  edge: `Sheet`.
@@ -362,8 +395,9 @@ Rules for your own component:
362
395
  - Follows API v1 ([api-contract.md](api-contract.md)): `size` (default `m`), `tone`/`color`, `X.Root` +
363
396
  `X.Part` when it has parts (a single export when it has none), `hint` / `error` props, `labels` for
364
397
  system strings, `data-*` for state.
365
- - Styled with a CSS Module on `--prime-*` tokens. Bounded block: a `Card`, or a plain tile on
366
- `--prime-color-layer-nested` + `--prime-card-radius`. Never override kit internals or reach into their class names.
398
+ - Styled with a CSS Module on `--prime-*` tokens. Bounded block:
399
+ [a `Card`, or the plain tile](foundations.md#your-own-bounded-block). Never override kit internals
400
+ or reach into their class names.
367
401
  - **Threshold:** a pattern used twice becomes a component. Two things that look the same are one
368
402
  component with a variant, never two components or two hand-written copies.
369
403
 
@@ -396,7 +430,7 @@ export function RevenuePanel() {
396
430
  ```
397
431
 
398
432
  For a plain KPI row use `Card.Root variant="stat-trend"` (Label · Value · Delta), each in a
399
- `PageContent.Cell span={3}` of the page's `PageContent.Grid` — see [the dashboard screen](reference/components/card/examples/screen.tsx). When the trend over days matters, put a
433
+ `Page.Cell span={3}` of the page's `Page.Grid` — see [the dashboard screen](reference/components/card/examples/screen.tsx). When the trend over days matters, put a
400
434
  `Sparkline` in the `Card.Body` instead: it brings the value, the change and a line to scrub.
401
435
 
402
436
  ## Screen rules
@@ -407,9 +441,9 @@ What each screen in [the index](#screens) demonstrates — keep these when you s
407
441
 
408
442
  [data-table/examples/screen.tsx](reference/components/data-table/examples/screen.tsx)
409
443
 
410
- - The page lives in the `AppHeader`: `AppHeader.Title` is the only heading, its `AppHeader.Description` is one line of figures («10 счетов · просрочено 2 на …»), not a sentence about the page; main has no `PageContent.Header`.
411
- - The tools are `AppHeader.Tools` → `SmartFilter.Root` around a `PageToolbar.Root`: `SmartFilter.Toolbar` in `PageToolbar.Tools`, `SmartFilter.Chips` in `PageToolbar.Chips`, export (an icon-only `soft` + `neutral` button) and the one primary action (`solid`, last) in `PageToolbar.Actions`. The table itself has no `toolbar`.
412
- - A status is a `Badge` with one color per meaning across the product (`STATUS` is one map); the text carries the meaning, the color repeats it.
444
+ - A work screen titles itself in its `Page.TopBar`: `Page.Title` is the only heading, its `Page.Description` is one line of figures («10 счетов · просрочено 2 на …»), not a sentence about the page; there is no second header in the flow.
445
+ - `SmartFilter.Root` wraps the page: `SmartFilter.Toolbar` in `Page.Tools`, `SmartFilter.Chips` in `Page.Chips`; export (`soft` + `neutral`, an icon beside its label) and the one primary action (`solid`, last) in `Page.Actions`. The table itself has no `toolbar`.
446
+ - A status is a `Badge` with one `tone` per meaning across the product (`STATUS` is one map); the text carries the meaning, the tone repeats it.
413
447
  - Numbers and dates are `numeric` columns with `headerAlign="end"` (tabular figures, values and heading on the end edge). On a phone the table scrolls inside itself and `stickyFirstColumn` keeps the number in place — the page never scrolls sideways.
414
448
  - Row actions are a `Dropdown` behind an `action.more` icon of size `s`: controls in cells are one tier below the table. Delete is `tone="danger"` at the end of the menu.
415
449
  - Empty after a filter is the table's `empty` with `EmptyPage size="s"` and a «Сбросить фильтры» action; the header and the filters stay in place.
@@ -418,19 +452,20 @@ What each screen in [the index](#screens) demonstrates — keep these when you s
418
452
 
419
453
  [description-list/examples/screen.tsx](reference/components/description-list/examples/screen.tsx)
420
454
 
421
- - A nested record titles itself in the `AppHeader`: `AppHeader.Start` holds the path up (`Breadcrumb` with the list, «Счета»), an `AppHeader.Separator` and `AppHeader.Title` with the record's name; main has no `PageContent.Header`. Top-level pages have no breadcrumb.
422
- - The status is words next to the fact that matters now, in `AppHeader.Description` («Отправлен · оплатить до 14 октября»), not a separate plate.
423
- - The record's actions are the header's tools row: `AppHeader.Tools` → `PageToolbar.Root` → `PageToolbar.Actions`, by weight: one primary (`solid`, last), the secondary `soft` + `tone="neutral"`, rare and destructive ones in a `Dropdown` behind an `action.more` icon (also `soft`, so the button has a shape beside its neighbours); voiding is `tone="danger"` at the bottom of the menu.
455
+ - A nested record titles itself in its `Page.TopBar`: `Page.Heading` holds the path up (`Breadcrumb.Root` with the list, «Счета») ending in `Page.Title` with the record's name on the same line; there is no second header in the flow. Top-level pages have no breadcrumb.
456
+ - The status is words next to the fact that matters now, in `Page.Description` («Отправлен · оплатить до 14 октября»), not a separate plate.
457
+ - The record's actions are the bar's `Page.Actions`, by weight: one primary (`solid`, last), the secondary `soft` + `tone="neutral"`, each with an icon beside its label. Rare and destructive ones live in a `Dropdown` behind an `action.more` icon (also `soft`, so the button has a shape beside its neighbours); voiding is `tone="danger"` at the bottom of the menu.
424
458
  - Columns are a CSS module on flex-wrap without breakpoints: the main one grows, the side one holds ~18rem and drops below when the main one runs out of room.
425
- - A section without a frame is `PageContent.Section label`: an h2 heading 16 px above the table; `Card variant="panel"` only for standalone blocks of the side column. A table is already a filled block — never put it in a card.
459
+ - A section without a frame is `Page.Section label`: an h2 heading 16 px above the table; `Card variant="panel"` only for standalone blocks of the side column. A table is already a filled block — never put it in a card.
426
460
  - «Label → value» pairs about the client are `DescriptionList.Root orientation="vertical"` with `DescriptionList.Item label`; amounts are tabular figures, the total is larger (`title-m`) and ends where the «Сумма» column ends (the table cell inset).
427
- - History is a `Timeline`: events top-down from the latest, dates in `Timeline.Meta`; a row highlights on hover.
461
+ - History is a `Timeline`: events top-down from the latest, dates in `Timeline.ItemMeta`; a row highlights on hover.
428
462
 
429
463
  ### Settings page
430
464
 
431
- [page-content/examples/screen.tsx](reference/components/page-content/examples/screen.tsx)
465
+ [page/examples/screen.tsx](reference/layout/page/examples/screen.tsx)
432
466
 
433
- - A section is `PageContent.Section layout="aside"`: a heading column (`label` + a line of `description`) and a `Card variant="panel"` panel; sections are 40 px apart; on a narrow screen the column moves above the panel by itself (flex-wrap, no breakpoints).
467
+ - A document page: `Page.Root maxWidth="wide"`, the large `Page.Title` with a sentence of `Page.Description` in the `Page.Heading` of a `Page.Header` in the flow, and a `Page.TopBar collapse` whose `Page.Heading` holds only the path and repeats the title once it scrolls away.
468
+ - A section is `Page.Section layout="aside"`: a heading column (`label` + a line of `description`) and a `Card variant="panel"` panel; sections are 40 px apart; on a narrow screen the column moves above the panel by itself (flex-wrap, no breakpoints).
434
469
  - The form wraps the whole `Card.Root` in `<form noValidate>`; the buttons are in `Card.Footer`: «Отменить изменения» `ghost` + `neutral`, then the primary «Сохранить». While the request runs — `loading` on the button, and one `Fieldset disabled` turns the fields off; the form stays on screen, so success is the button text «Сохранено» for two seconds, without a notification.
435
470
  - Fields are 20 px apart; two short related fields side by side while there is width, with `align-items: start` and `reserveSupportRow`, so an error does not shift the neighbour.
436
471
  - An error comes through the field's `error` after submit, not while typing; a format hint goes in `hint`.
@@ -441,8 +476,8 @@ What each screen in [the index](#screens) demonstrates — keep these when you s
441
476
 
442
477
  [drawer/examples/screen.tsx](reference/components/drawer/examples/screen.tsx)
443
478
 
444
- - The page lives in the `AppHeader`: `AppHeader.Title` with the counts in `AppHeader.Description`, the search (`SmartFilter` with `fields={[]}`) in `PageToolbar.Tools`; main has no `PageContent.Header`.
445
- - The opening button is the page's primary action in `PageToolbar.Actions`; `Drawer.Trigger` wraps it as a slot.
479
+ - A work screen titles itself in its `Page.TopBar`: `Page.Title` with the counts in `Page.Description`, the search (`SmartFilter` with `fields={[]}`) in `Page.Tools`; there is no second header in the flow.
480
+ - The opening button is the page's primary action in `Page.Actions`; `Drawer.Trigger` wraps it as a slot.
446
481
  - The form is tied to the footer button through `form={formId}`: `Drawer.Footer` is outside the `<form>`, and submitting still works, by Enter too.
447
482
  - Groups are a `Fieldset` without a frame with a `title-s` heading 16 px above the fields; 32 px of air between groups, no dividers. `Fieldset disabled` turns all the fields off while the request runs.
448
483
  - Validation on submit: errors in each field's `error`, focus on the first invalid field; mark the minority: required fields are the majority, so `optional` stands only on the optional ones.
@@ -454,36 +489,36 @@ What each screen in [the index](#screens) demonstrates — keep these when you s
454
489
 
455
490
  [field-list/examples/screen.tsx](reference/components/field-list/examples/screen.tsx)
456
491
 
457
- - A record editor is a document page — a long form read top to bottom in aside sections, like Settings — so its title stays in content: `PageContent.Header` with the title, one line of description and the primary action; the app header only says where you are and holds no second title.
492
+ - A record editor is a document page — a long form read top to bottom in aside sections, like Settings — so its title stands in the flow: `Page.Header` with the title and one line of description in `Page.Heading` and the primary action in `Page.Actions`; no second title anywhere.
458
493
  - The shape of the data decides the layout: records a person adds and removes are a `FieldList`, one row per record; the column headings stand once above the rows, and the fields in the cells take them as their labels.
459
494
  - No label in every row and no numbered one («Преимущество 1»): a one-column list has no headings at all — its section names it ([reorder.tsx](reference/components/field-list/examples/reorder.tsx)).
460
495
  - Small attributes of a record go in compact columns of its row: the icon is a `Select` with only `Select.TriggerIcon`, the color `ColorPresets`; the first specs are pinned (`getLocked`) — the lock says so itself, without explanatory text.
461
496
  - The base price and its changes are one list: the base row is pinned first and shows when it applies, the changes are rows with a month and a price; the ruble sign is in the field (`Input.InlineAffix`), not in every heading.
462
497
  - One value in three currencies is three fields in one row under one group heading, each with its own name for screen readers and the currency inside the field.
463
- - The lists live in the page state, the name and description fields in the `<form>` of the first section; the primary «Сохранить тариф» in the header is tied to it through `form={formId}` and saves everything. While the request runs the fields and the lists are off (`Fieldset disabled`, `disabled`), afterwards «Сохранено» on the button.
498
+ - The lists live in the page state, the name and description fields in the `<form>` of the first section; the primary «Сохранить тариф» in `Page.Actions` is tied to it through `form={formId}` and saves everything. While the request runs the fields and the lists are off (`Fieldset disabled`, `disabled`), afterwards «Сохранено» on the button.
464
499
 
465
500
  ### Dashboard
466
501
 
467
502
  [card/examples/screen.tsx](reference/components/card/examples/screen.tsx)
468
503
 
469
- - The header carries the page: `AppHeader.Title` «Обзор» with an `AppHeader.Description` line of data (what and as of when), the page's tools in `AppHeader.Tools` as a `PageToolbar.Root`; main has no `PageContent.Header`, its body starts with the tiles.
470
- - The period is a `SegmentedControl` in `PageToolbar.View`, the report a `soft` + `neutral` button in `PageToolbar.Actions`: the period changes the values on this same screen. Tabs (`Tabs`) are for different content, not for a period.
471
- - Every tile of the screen is one `PageContent.Grid`: KPI `Card variant="stat-trend"` in `PageContent.Cell span={3}`, 16 px on both axes; `Card.Delta` with a `tone` by the meaning of the change: overdue growing is `danger`, its decline `success`.
504
+ - An overview: the large `Page.Title` «Обзор» with a `Page.Description` line of data (what and as of when) in a `Page.Header` in the flow; a `Page.TopBar collapse` above it keeps the page's tools and buttons in reach and repeats the title once it scrolls away; the body starts with the tiles.
505
+ - The period is a `SegmentedControl` in the bar's `Page.Tools` and the report a `soft` + `neutral` button with an icon in its `Page.Actions`: the period changes the values on this same screen. Tabs (`Tabs`) are for different content, not for a period.
506
+ - Every tile of the screen is one `Page.Grid`: KPI `Card variant="stat-trend"` in `Page.Cell span={3}`, 16 px on both axes; `Card.Delta` with a `tone` by the meaning of the change: overdue growing is `danger`, its decline `success`.
472
507
  - Another period — other values: each KPI tile is wrapped in `Crossfade state={period}` and flows instead of blinking.
473
508
  - A trend over days is a `Sparkline` in a `Card` in a full-width cell: the last value, the change and a line you can scrub with a finger; a new series appears by itself.
474
- - A chart with axes and several series is a `ChartFrame` in `PageContent.Cell span={8} rows={2}` beside two panels; `ChartFrame.Plot height="fill"` takes their height. A sized plot area (`renderPlot`), a legend that turns series off and a table for screen readers; series colors come from `series`, never your own.
509
+ - A chart with axes and several series is a `ChartFrame` in `Page.Cell span={8} rows={2}` beside two panels; `ChartFrame.Plot height="fill"` takes their height. A sized plot area (`renderPlot`), a legend that turns series off and a table for screen readers; series colors come from `series`, never your own.
475
510
  - Panels are `Card variant="panel"` with `Card.Title as="h2"` in `Card.Header` and quiet context on the right after the title (`caption` + `muted`).
476
511
  - Progress of one value is a `ProgressBar` with `label` and `showValue`; parts of a whole are `ProgressBar segments` with `legend` and `formatValue`: statuses are colored by `tone`, categories by `color`.
477
- - Tiles of one screen are 16 px apart (`PageContent.Grid`), page blocks 24 px (`PageContent.Body`), a new topic with a heading 40 px (`PageContent.Section`): proximity shows what is related.
478
- - A short list is a `DataTable paging="none"` in `PageContent.Section label` without a card; «Все счета» is a `LinkButton` in the section's `PageContent.Actions`: it is a way somewhere, not an action.
512
+ - Tiles of one screen are 16 px apart (`Page.Grid`), page blocks 24 px (`Page.Body`), a new topic with a heading 40 px (`Page.Section`): proximity shows what is related.
513
+ - A short list is a `DataTable paging="none"` in `Page.Section label` without a card; «Все счета» is a `LinkButton` in the section's `Page.Actions`: it is a way somewhere, not an action.
479
514
 
480
515
  ### Screen states
481
516
 
482
517
  [crossfade/examples/screen.tsx](reference/components/crossfade/examples/screen.tsx)
483
518
 
484
- - The header carries the page: `AppHeader.Title` with an `AppHeader.Description` line of data — the accounts and the date of the statement the screen stands on; main has no `PageContent.Header`.
485
- - An error that concerns the whole page is a `Banner tone="danger"` as the first block of `PageContent.Body` with a «Повторить» action; the action's result is a `Notification`.
486
- - A region's error is in the region's place: `error` on the `DataTable` (the table head stays), not a pop-up.
519
+ - The top bar carries the page: `Page.Title` with a `Page.Description` line of data — the accounts and the date of the statement the screen stands on; there is no second header in the flow.
520
+ - An error that concerns the whole page is a `Banner tone="danger"` as the first block of `Page.Body` with a «Повторить» action; the action's result is a `Notification`.
521
+ - A region's error is in the region's place: `loadError` on the `DataTable` (the table head stays), not a pop-up.
487
522
  - Table loading is `loading` + `loadingRows` (a skeleton of rows); card loading is a `Skeleton` in the shape of its rows and `aria-busy` on the card, and the block's height does not change. The state change is smooth: the card's region is in `Crossfade state={status}`, the table body changes by itself.
488
523
  - Stale data beats emptiness: the balances are shown as of the previous date, and that is said on the right in `Card.Header`.
489
524
  - Empty on the first run is `EmptyPage size="s"` inside the panel: an icon with `tone="accent"`, what it is and why, one action. An empty filter result is the table's `empty`.
@@ -493,15 +528,15 @@ What each screen in [the index](#screens) demonstrates — keep these when you s
493
528
 
494
529
  [chat/examples/screen.tsx](reference/components/chat/examples/screen.tsx)
495
530
 
496
- - A work screen: the title «Поддержка» is `AppHeader.Title` with the unread count in `AppHeader.Description`; main has no `PageContent.Header`.
497
- - Layout: `PageContent.Split` in a `fill` page: the dialog list `ChatList` (last message, ticks, unread, «печатает…») and the conversation beside it; on a narrow panel one pane at a time with `PageContent.BackButton` in `Chat.Header`.
531
+ - A work screen: the title «Поддержка» is `Page.Title` in `Page.TopBar` with the unread count in `Page.Description`.
532
+ - Layout: `Page.Split` (`Page.List`, `Page.Detail`) in a `fill` page: the dialog list `ChatList` (last message, ticks, unread, «печатает…») and the conversation beside it; on a narrow panel one pane at a time with `Page.BackButton` in `Chat.Header`.
498
533
  - Search over the dialogs is the field of `ChatList` itself: `search` and `onSearchChange`; you filter the list (by name and last message), and the list shows the match in rows, the number found and an empty result itself. Never put a field of your own above the list.
499
534
  - The conversation is `Chat.Root` in the pane's card: the header, `Chat.Search`, `Chat.Messages` and `Chat.Footer` with the Composer. Never assemble your own header, `ScrollContainer` and feed — the chat links search, jumps, selection and «печатает…» itself.
500
- - Messages are data: `items` with `getKey`, `getAuthor`, `getDate` (service events through `isService`), the first unread is `unread`; the feed computes dates, runs, tails and the avatar place. `renderMessage` in `useCallback`: only the changed message re-renders.
535
+ - Messages are data: `items` with `getKey`, `getAuthor`, `getDate` (service events through `isService`), the first unread is `unread`; the feed computes dates, runs, tails and the avatar place. `renderMessage` may be inline: only a message whose item or place changed renders again, so whatever a row shows lives in its item, and a reply's original comes from `entry.find(key)`.
501
536
  - History is `hasOlder` and `onLoadOlder` with a promise: while it runs, a bubble-shaped `Skeleton` placeholder stands on top, and the view does not jump.
502
537
  - Each kind of message is its own part of `Message`: text with markup, photos and albums, a file, a `VoicePlayer`; the screen renders the kinds its domain has. The others (`VideoNote`, a location, a contact, a link preview, reactions, a forwarded header) are shown on the Message, VoicePlayer and VideoNote pages; pinned messages and selection on the Chat page.
503
538
  - Sending is a `Composer` with `onSend` without waiting: the message is in the feed at once with a clock under a stable id, then one tick, then two. Your own message rises from the input, the client's answer slides in from the side — the feed animates new messages itself; history and status changes are not animated.
504
- - Reply and edit from `Message.Menu` open `Composer.Context` with `value`: `onSend` gets `replyTo` / `editOf`, the plate closes itself after sending; ↑ in an empty field is `onEditLast`. A quote in a bubble is `Message.Reply target`: a scroll to the original with a flash.
539
+ - Reply and edit from `Message.Menu` open `Composer.Context` with `messageId`: `onSend` gets `replyTo` / `editOf`, the plate closes itself after sending; ↑ in an empty field is `onEditLast`. A quote in a bubble is `Message.Reply target`: a scroll to the original with a flash.
505
540
  - «Печатает…»: your own signal is `Composer onActivityChange` into the socket, the other side's is `Chat.Root typing`: the line in the header and the bubble at the end of the feed together.
506
541
  - Unread: `onNewMessage` adds an incoming message to the dialog's count, `onRead` subtracts what the reader really saw. Scrolled up — the round «to the latest» button counts the new ones itself.
507
542
  - Search in the conversation is `Chat.SearchButton` and `Chat.Search`; pinned messages, when the domain has them, are `Chat.Pinned` between them and the feed.
@@ -510,34 +545,34 @@ What each screen in [the index](#screens) demonstrates — keep these when you s
510
545
 
511
546
  [kanban/examples/screen.tsx](reference/components/kanban/examples/screen.tsx)
512
547
 
513
- - The page titles itself in the app header: `AppHeader.Title` with an `AppHeader.Description` that carries data («7 сделок в работе · 6 461 750 ₽», counted over the filtered deals); main has no `PageContent.Header`.
514
- - Search, filters, the view switch and the one primary action «Новая сделка» are one `PageToolbar` inside `SmartFilter.Root`, in `AppHeader.Tools`.
548
+ - The page titles itself in its top bar: `Page.Title` with a `Page.Description` that carries data («7 сделок в работе · 6 461 750 ₽», counted over the filtered deals).
549
+ - Search, filters and the view switch are the bar's `Page.Tools`, the one primary action «Новая сделка» its `Page.Actions`, the active filters its `Page.Chips`; `SmartFilter.Root` wraps the page.
515
550
  - The board and the list are the same data: `Kanban` and `DataTable` replace each other through `Crossfade`, the filter is `matchesSmartFilter`.
516
551
  - The board is the main area of the page, so its `variant` is the default, `plain`: stages without wells, headers and deal cards stand right on the page — one level of nesting, no frames of your own around the columns.
517
552
  - The placement of deals is `value` as `{ [stage]: id[] }`; `onValueChange` returns the request's promise and applies `value` only after the answer; a server refusal returns the card to its place.
518
553
  - Stage totals are in `renderColumnMeta` («2 сделки · 3 575 000 ₽»), the stage color is the column's `color`.
519
- - A deal opens through `onItemClick` of `Kanban.Root` (click, Enter, Space; never after a drag) in a `Drawer` with a `DescriptionList`; no `onClick` / `onKeyDown` of your own on the card; a deal with its own page — `getItemHref`. The stage change is available in the panel too — dragging is not the only way; `Drawer.Guard busy` holds the panel while saving.
554
+ - A deal opens through `onItemOpen` of `Kanban.Root` (click, Enter, Space; never after a drag) in a `Drawer` with a `DescriptionList`; no `onClick` / `onKeyDown` of your own on the card; a deal with its own page — `getItemHref`. The stage change is available in the panel too — dragging is not the only way; `Drawer.Guard busy` holds the panel while saving.
520
555
  - The first load is `loading` on `Kanban` and `DataTable`: skeletons in the geometry of cards and rows.
521
556
 
522
557
  ### App frame
523
558
 
524
559
  [app-shell/examples/screen.tsx](reference/layout/app-shell/examples/screen.tsx)
525
560
 
526
- - The frame is `AppShell.Template` (or `AppShell.Root`): `nav` is `Sidebar.Root`, `header` is `AppHeader.Root`, `footer` is `BottomNav.Root`; the page is the children. `scrollResetKey` is the current section (in a router, the pathname), so a new page opens at the top.
527
- - The kit decides the switch itself: below 768 px the `Sidebar` goes off the edge, `AppHeader.MenuButton` appears and `AppShell.Footer` shows the `BottomNav`; while the rail is on screen the footer is hidden. No media queries or `position: fixed` of your own.
528
- - `BottomNav` holds 2–6 main sections, one word each; the rest lives in the `Sidebar`, and «Ещё» opens it as a panel (`aria-expanded`). `floating` is a glass capsule; `AppShell.Main` leaves room under it itself.
529
- - Every page titles itself in the header: `AppHeader.Title` with the section's name and an `AppHeader.Description` that carries data («Среда, 14 октября · открытых задач: 3»); main has no `PageContent.Header`, its body starts with the page's blocks.
561
+ - The frame is `AppShell.Template` (or `AppShell.Root`): `nav` is `Sidebar.Root`, `footer` is `BottomNav.Root`; the page is the children, and everything at the top belongs to it. There is no app-wide header. `scrollResetKey` is the current section (in a router, the pathname), so a new page opens at the top.
562
+ - The kit decides the switch itself: below 768 px the `Sidebar` goes off the edge, the page's `Page.TopBar` draws its menu button and `AppShell.Footer` shows the `BottomNav`; while the rail is on screen the footer is hidden. No media queries, menu state or `position: fixed` of your own.
563
+ - `BottomNav` holds 2–6 main sections, one word each; the rest lives in the `Sidebar`, and «Ещё» opens it as a panel through `useAppShellNav()` (`aria-expanded`, `aria-controls`, `setOpen`). `floating` is a glass capsule; `AppShell.Main` leaves room under it itself.
564
+ - Every page titles itself in its `Page.TopBar`: `Page.Title` with the section's name and a `Page.Description` that carries data («Среда, 14 октября · открытых задач: 3»); its body starts with the page's blocks.
530
565
  - Counts: `Sidebar.ItemCount` (a plain number for information, `color="red"` when it needs action) and `BottomNav.ItemCount` only for what needs attention; the number is the same in both navigations.
531
- - Choosing a section in either navigation goes through one handler that also closes the Sidebar panel.
566
+ - Choosing a section in either navigation goes through one handler; an activated Sidebar item closes the off-canvas panel by itself.
532
567
  - A section change is a `Crossfade` by `state`: the page changes smoothly instead of jumping. Menu items in an app with a router are `asChild` + `NavLink`.
533
568
 
534
569
  ### Media library
535
570
 
536
571
  [file-upload/examples/screen.tsx](reference/components/file-upload/examples/screen.tsx)
537
572
 
538
- - A work screen titles itself in the app header: `AppHeader.Title` «Медиатека» with an `AppHeader.Description` naming the object; main has no `PageContent.Header`.
539
- - Sections, search, order and «Загрузить» are one `PageToolbar` panel in `AppHeader.Tools`: search is a `SmartFilter.Toolbar` with `fields={[]}`, sections a `SegmentedControl` with `SegmentedControl.Count`.
540
- - Uploads are `useUploadQueue` + `FileUpload.Root trigger="tile" layout="grid"`: progress, «В очереди», the failure reason and retry are built in, the add tile is also the drop zone; «Загрузить» opens the same `inputRef`.
573
+ - A work screen titles itself in its top bar: `Page.Title` «Медиатека» with a `Page.Description` naming the object.
574
+ - Sections, search and order are the bar's `Page.Tools`, «Загрузить» its `Page.Actions`: search is a `SmartFilter.Toolbar` with `fields={[]}`, sections a `SegmentedControl` with `SegmentedControl.Count`.
575
+ - Uploads are `useUploadQueue` + `FileUpload.Root trigger="tile" layout="grid"`: progress, «В очереди», the failure reason and retry are built in, the add tile is also the drop zone; «Загрузить» opens the same picker (`picker.current?.open()`).
541
576
  - A finished file leaves the queue for the library: its address is `item.result` of the server's answer, not the queue's `preview`.
542
577
  - The library grid is a CSS grid of `Thumbnail` with `fullWidth` and one `ratio`; a video is `Thumbnail.Video`, which draws the duration and the play mark itself. `Gallery` does not fit here: it is an album of up to 10.
543
578
  - A tile either opens or selects: when browsing it is `Thumbnail.Root asChild` with a button, when selecting — `checked` / `onCheckedChange`; «Выбрать» turns the mode on.
@@ -549,12 +584,12 @@ What each screen in [the index](#screens) demonstrates — keep these when you s
549
584
 
550
585
  [gantt/examples/screen.tsx](reference/components/gantt/examples/screen.tsx)
551
586
 
552
- - The page titles itself in the app header: `AppHeader.Title` with an `AppHeader.Description` that carries data («Сотрудников: 9 из 9»); main has no `PageContent.Header`.
587
+ - The page titles itself in its top bar: `Page.Title` with a `Page.Description` that carries data («Сотрудников: 9 из 9»).
553
588
  - A `fill` page: `Gantt scrollHeight="fill"` takes the free height — the header and the first column stick inside the chart, the page never scrolls sideways.
554
- - The panel is a `PageToolbar` inside `SmartFilter.Root`, in `AppHeader.Tools`: search and the role and client filter first, teams a `SegmentedControl` with counts in `PageToolbar.Sections`, the primary action «Назначить» in `PageToolbar.Actions`, the active filters `SmartFilter.Chips` right under the search. Zoom and «Сегодня» are built into `Gantt` — never add your own.
589
+ - `SmartFilter.Root` wraps the page: search with the role and client filter and teams (a `SegmentedControl` with counts) in `Page.Tools`, the primary action «Назначить» in `Page.Actions`, the active filters `SmartFilter.Chips` in `Page.Chips`. Zoom and «Сегодня» are built into `Gantt` — never add your own.
555
590
  - A row is a person: `renderRowAvatar` with an `Avatar`, `renderRow` with the name and role; on a narrow chart the column keeps only the avatar. Overlapping works lay themselves out in lanes, an absence is a `readOnly` bar, a milestone has `start` equal to `end`.
556
591
  - `onBarChange` returns a promise and changes the data only after the service answers: while it runs the bar is busy; a refusal (work on an absence) is `notify` and `throw`, and the bar returns to its previous dates by itself.
557
592
  - `onBarCreate`: a range drawn on an empty place holds a busy draft while a `Modal` with `Modal.Guard busy` asks for the name and the client; saving adds the bar and resolves the promise, cancel rejects it — the draft dissolves. Work over an absence is refused at once.
558
593
  - The legend of client hues is a row of `Badge.Root color` with `Badge.Dot` in the chart's `toolbar`; `renderBarTooltip` names the client in the tooltip under the dates, so the client reads not only by color.
559
- - `onSelect` opens a `Drawer` with a `DescriptionList` (the person, the client `Badge`, the period and duration, `ProgressBar`); removing a task is a `ConfirmDialog` with an async `onConfirm`.
594
+ - `onItemOpen` opens a `Drawer` with a `DescriptionList` (the person, the client `Badge`, the period and duration, `ProgressBar`); removing a task is a `ConfirmDialog` with an async `onConfirm`.
560
595
  - States are on the chart itself: `loading` draws `Skeleton` placeholder rows in its geometry, `empty` an `EmptyPage size="s"` with «Сбросить фильтры»; the panel stays in place.