prime-ui-kit 0.6.0 → 0.7.1

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 (311) hide show
  1. package/dist/components/accordion/examples/02-settings-panels.d.ts.map +1 -1
  2. package/dist/components/accordion/examples/04-api-docs-sections.d.ts.map +1 -1
  3. package/dist/components/accordion/examples/05-knowledge-base-categories.d.ts.map +1 -1
  4. package/dist/components/avatar/examples/app-header-nav.d.ts.map +1 -1
  5. package/dist/components/avatar/examples/src-from-state.d.ts.map +1 -1
  6. package/dist/components/banner/examples/cookie-consent-row.d.ts.map +1 -1
  7. package/dist/components/banner/examples/feature-promo.d.ts.map +1 -1
  8. package/dist/components/checkbox/examples/bulk-select-rows.d.ts.map +1 -1
  9. package/dist/components/checkbox/examples/empty-label-form.d.ts.map +1 -1
  10. package/dist/components/checkbox/examples/feature-flags-list.d.ts.map +1 -1
  11. package/dist/components/checkbox/examples/settings-panel.d.ts.map +1 -1
  12. package/dist/components/color-picker/ColorPicker.d.ts.map +1 -1
  13. package/dist/components/color-picker/ColorPickerRac.d.ts.map +1 -1
  14. package/dist/components/color-picker/examples/controlled-form-field.d.ts.map +1 -1
  15. package/dist/components/color-picker/examples/theme-accent.d.ts.map +1 -1
  16. package/dist/components/command-menu/examples/composition-tags-footer.d.ts.map +1 -1
  17. package/dist/components/command-menu/examples/variants-density-items.d.ts.map +1 -1
  18. package/dist/components/datepicker/examples/full-width-form.d.ts.map +1 -1
  19. package/dist/components/digit-input/examples/error-state.d.ts.map +1 -1
  20. package/dist/components/digit-input/examples/resend-and-clear.d.ts.map +1 -1
  21. package/dist/components/divider/examples/section-breaks.d.ts.map +1 -1
  22. package/dist/components/dropdown/Dropdown.d.ts +0 -14
  23. package/dist/components/dropdown/Dropdown.d.ts.map +1 -1
  24. package/dist/components/dropdown/examples/account-menu.d.ts.map +1 -1
  25. package/dist/components/dropdown/examples/actions-menu.d.ts.map +1 -1
  26. package/dist/components/dropdown/examples/full-width.d.ts.map +1 -1
  27. package/dist/components/empty-page/EmptyPage.d.ts +63 -0
  28. package/dist/components/empty-page/EmptyPage.d.ts.map +1 -0
  29. package/dist/components/empty-page/examples/canonical.d.ts +3 -0
  30. package/dist/components/empty-page/examples/canonical.d.ts.map +1 -0
  31. package/dist/components/empty-page/examples/sizes.d.ts +3 -0
  32. package/dist/components/empty-page/examples/sizes.d.ts.map +1 -0
  33. package/dist/components/empty-page/examples/table-region.d.ts +6 -0
  34. package/dist/components/empty-page/examples/table-region.d.ts.map +1 -0
  35. package/dist/components/hint/examples/a11y-describedby.d.ts.map +1 -1
  36. package/dist/components/hint/examples/error-hint.d.ts.map +1 -1
  37. package/dist/components/hint/examples/field-help.d.ts.map +1 -1
  38. package/dist/components/hint/examples/field-states.d.ts.map +1 -1
  39. package/dist/components/hint/examples/inline-tip-form.d.ts.map +1 -1
  40. package/dist/components/hint/examples/success-confirmation.d.ts.map +1 -1
  41. package/dist/components/hint/examples/variants.d.ts.map +1 -1
  42. package/dist/components/index.css +254 -106
  43. package/dist/components/index.css.map +4 -4
  44. package/dist/components/index.d.ts +3 -1
  45. package/dist/components/index.d.ts.map +1 -1
  46. package/dist/components/index.js +373 -337
  47. package/dist/components/index.js.map +4 -4
  48. package/dist/components/input/examples/login-email.d.ts.map +1 -1
  49. package/dist/components/input/examples/search.d.ts.map +1 -1
  50. package/dist/components/link-button/examples/disabled.d.ts.map +1 -1
  51. package/dist/components/link-button/examples/external.d.ts.map +1 -1
  52. package/dist/components/link-button/examples/inline-text-link.d.ts.map +1 -1
  53. package/dist/components/link-button/examples/navigation-cluster.d.ts.map +1 -1
  54. package/dist/components/modal/examples/pattern-controlled.d.ts.map +1 -1
  55. package/dist/components/modal/examples/pattern-portal-and-scroll.d.ts.map +1 -1
  56. package/dist/components/modal/examples/scenario-multi-field-form.d.ts.map +1 -1
  57. package/dist/components/notification/examples/action-toast.d.ts.map +1 -1
  58. package/dist/components/notification/examples/error-success.d.ts.map +1 -1
  59. package/dist/components/popover/Popover.d.ts +3 -3
  60. package/dist/components/popover/Popover.d.ts.map +1 -1
  61. package/dist/components/popover/examples/composition.d.ts +1 -1
  62. package/dist/components/popover/examples/date-trigger.d.ts.map +1 -1
  63. package/dist/components/popover/examples/features.d.ts.map +1 -1
  64. package/dist/components/popover/examples/form-in-popover.d.ts.map +1 -1
  65. package/dist/components/popover/examples/full-width.d.ts.map +1 -1
  66. package/dist/components/popover/examples/placement.d.ts.map +1 -1
  67. package/dist/components/popover/examples/rich-content.d.ts.map +1 -1
  68. package/dist/components/popover/examples/sizes.d.ts +1 -1
  69. package/dist/components/progress-bar/examples/step-progress.d.ts.map +1 -1
  70. package/dist/components/progress-circle/examples/dashboard-ring.d.ts.map +1 -1
  71. package/dist/components/progress-circle/examples/states.d.ts.map +1 -1
  72. package/dist/components/radio/examples/plan-picker.d.ts.map +1 -1
  73. package/dist/components/segmented-control/examples/pricing-toggle.d.ts.map +1 -1
  74. package/dist/components/segmented-control/examples/view-mode.d.ts.map +1 -1
  75. package/dist/components/select/examples/01-country.d.ts.map +1 -1
  76. package/dist/components/select/examples/02-controlled.d.ts.map +1 -1
  77. package/dist/components/select/examples/03-groups.d.ts.map +1 -1
  78. package/dist/components/select/examples/04-full-width-form.d.ts.map +1 -1
  79. package/dist/components/switch/examples/composition.d.ts.map +1 -1
  80. package/dist/components/switch/examples/scenario-feature-flag.d.ts.map +1 -1
  81. package/dist/components/tabs/examples/01-settings-vertical-rail.d.ts.map +1 -1
  82. package/dist/components/tag/examples/controlled.d.ts.map +1 -1
  83. package/dist/components/textarea/examples/01-support-ticket.d.ts.map +1 -1
  84. package/dist/components/textarea/examples/02-comment.d.ts.map +1 -1
  85. package/dist/components/textarea/examples/controlled.d.ts.map +1 -1
  86. package/dist/components/textarea/examples/features.d.ts.map +1 -1
  87. package/dist/components/tooltip/examples/composition.d.ts.map +1 -1
  88. package/dist/index.css +254 -106
  89. package/dist/index.css.map +4 -4
  90. package/dist/index.js +375 -338
  91. package/dist/index.js.map +4 -4
  92. package/dist/internal/states.d.ts +2 -0
  93. package/dist/internal/states.d.ts.map +1 -1
  94. package/package.json +1 -1
  95. package/src/components/accordion/COMPONENT.md +1 -1
  96. package/src/components/accordion/examples/01-faq-marketing.tsx +1 -1
  97. package/src/components/accordion/examples/02-settings-panels.tsx +1 -6
  98. package/src/components/accordion/examples/03-checkout-order-summary.tsx +1 -1
  99. package/src/components/accordion/examples/04-api-docs-sections.tsx +0 -1
  100. package/src/components/accordion/examples/05-knowledge-base-categories.tsx +1 -7
  101. package/src/components/avatar/COMPONENT.md +2 -2
  102. package/src/components/avatar/examples/app-header-nav.tsx +5 -13
  103. package/src/components/avatar/examples/comment-thread.tsx +1 -1
  104. package/src/components/avatar/examples/src-from-state.tsx +0 -1
  105. package/src/components/badge/examples/admin-tags.tsx +6 -6
  106. package/src/components/badge/examples/ecommerce-inventory.tsx +5 -5
  107. package/src/components/badge/examples/inbox-labels.tsx +5 -5
  108. package/src/components/badge/examples/status-presence.tsx +4 -4
  109. package/src/components/banner/examples/controlled-visibility.tsx +1 -1
  110. package/src/components/banner/examples/cookie-consent-row.tsx +0 -1
  111. package/src/components/banner/examples/feature-promo.tsx +0 -1
  112. package/src/components/button/examples/canonical-composition.tsx +4 -4
  113. package/src/components/button/examples/destructive-confirm.tsx +3 -3
  114. package/src/components/button/examples/form-submit-row.tsx +2 -2
  115. package/src/components/button/examples/full-width-stack.tsx +2 -2
  116. package/src/components/button/examples/icon-composition.tsx +6 -6
  117. package/src/components/button/examples/toolbar.tsx +4 -4
  118. package/src/components/button-group/COMPONENT.md +1 -1
  119. package/src/components/button-group/examples/editor-toolbar.tsx +1 -1
  120. package/src/components/button-group/examples/form-footer.tsx +1 -1
  121. package/src/components/button-group/examples/full-width.tsx +1 -1
  122. package/src/components/button-group/examples/view-switcher.tsx +1 -1
  123. package/src/components/button-group/examples/wizard-actions.tsx +1 -1
  124. package/src/components/checkbox/examples/bulk-select-rows.tsx +0 -2
  125. package/src/components/checkbox/examples/empty-label-form.tsx +1 -2
  126. package/src/components/checkbox/examples/feature-flags-list.tsx +0 -1
  127. package/src/components/checkbox/examples/settings-panel.tsx +1 -4
  128. package/src/components/color-picker/COMPONENT.md +2 -2
  129. package/src/components/color-picker/examples/brand-kit.tsx +3 -3
  130. package/src/components/color-picker/examples/controlled-form-field.tsx +4 -6
  131. package/src/components/color-picker/examples/field-eyedropper.tsx +2 -2
  132. package/src/components/color-picker/examples/format-variants.tsx +2 -2
  133. package/src/components/color-picker/examples/full-width.tsx +2 -2
  134. package/src/components/color-picker/examples/minimal-popover.tsx +2 -2
  135. package/src/components/color-picker/examples/panel-placement.tsx +4 -4
  136. package/src/components/color-picker/examples/product-variant-swatch.tsx +2 -2
  137. package/src/components/color-picker/examples/readout-trigger.tsx +2 -2
  138. package/src/components/color-picker/examples/states.tsx +4 -4
  139. package/src/components/color-picker/examples/theme-accent.tsx +2 -7
  140. package/src/components/command-menu/examples/app-palette.tsx +1 -1
  141. package/src/components/command-menu/examples/composition-tags-footer.tsx +2 -7
  142. package/src/components/command-menu/examples/controlled-open-search.tsx +1 -1
  143. package/src/components/command-menu/examples/disabled-items.tsx +1 -1
  144. package/src/components/command-menu/examples/file-search.tsx +1 -1
  145. package/src/components/command-menu/examples/full-width-panel.tsx +1 -1
  146. package/src/components/command-menu/examples/item-icon-as.tsx +1 -1
  147. package/src/components/command-menu/examples/quick-actions.tsx +1 -1
  148. package/src/components/command-menu/examples/variants-density-items.tsx +2 -4
  149. package/src/components/data-table/COMPONENT.md +2 -0
  150. package/src/components/datepicker/examples/birthdate.tsx +2 -2
  151. package/src/components/datepicker/examples/booking.tsx +2 -2
  152. package/src/components/datepicker/examples/full-width-form.tsx +3 -10
  153. package/src/components/datepicker/examples/range-report.tsx +2 -2
  154. package/src/components/digit-input/examples/composition.tsx +3 -3
  155. package/src/components/digit-input/examples/error-state.tsx +3 -5
  156. package/src/components/digit-input/examples/otp-login.tsx +3 -3
  157. package/src/components/digit-input/examples/resend-and-clear.tsx +3 -9
  158. package/src/components/digit-input/examples/verification-step.tsx +4 -4
  159. package/src/components/divider/examples/card-splits.tsx +2 -2
  160. package/src/components/divider/examples/inset-stack.tsx +1 -1
  161. package/src/components/divider/examples/line-spacing-column.tsx +3 -3
  162. package/src/components/divider/examples/section-breaks.tsx +2 -6
  163. package/src/components/drawer/COMPONENT.md +1 -1
  164. package/src/components/drawer/examples/cart-preview.tsx +4 -4
  165. package/src/components/drawer/examples/explicit-panel.tsx +3 -3
  166. package/src/components/drawer/examples/filters-panel.tsx +7 -7
  167. package/src/components/drawer/examples/mobile-nav-sheet.tsx +3 -3
  168. package/src/components/drawer/examples/settings-side.tsx +6 -6
  169. package/src/components/dropdown/COMPONENT.md +5 -18
  170. package/src/components/dropdown/examples/account-menu.tsx +31 -33
  171. package/src/components/dropdown/examples/actions-menu.tsx +0 -1
  172. package/src/components/dropdown/examples/composition.tsx +1 -1
  173. package/src/components/dropdown/examples/controlled.tsx +1 -1
  174. package/src/components/dropdown/examples/dropdown-examples.module.css +0 -4
  175. package/src/components/dropdown/examples/full-width.tsx +0 -1
  176. package/src/components/dropdown/examples/select-like-list.tsx +1 -1
  177. package/src/components/dropdown/examples/states.tsx +1 -1
  178. package/src/components/dropdown/examples/variants.tsx +1 -1
  179. package/src/components/empty-page/COMPONENT.md +143 -0
  180. package/src/components/empty-page/examples/canonical.tsx +22 -0
  181. package/src/components/empty-page/examples/examples-demos.module.css +25 -0
  182. package/src/components/empty-page/examples/sizes.tsx +23 -0
  183. package/src/components/empty-page/examples/table-region.tsx +35 -0
  184. package/src/components/file-upload/examples/full-width.tsx +1 -1
  185. package/src/components/hint/examples/a11y-describedby.tsx +2 -4
  186. package/src/components/hint/examples/controlled-variant.tsx +1 -1
  187. package/src/components/hint/examples/error-hint.tsx +3 -5
  188. package/src/components/hint/examples/field-help.tsx +3 -5
  189. package/src/components/hint/examples/field-states.tsx +9 -19
  190. package/src/components/hint/examples/inline-tip-form.tsx +6 -10
  191. package/src/components/hint/examples/success-confirmation.tsx +3 -5
  192. package/src/components/hint/examples/variants.tsx +3 -9
  193. package/src/components/hint/examples/with-icon.tsx +1 -1
  194. package/src/components/input/examples/affix-url-and-amount.tsx +2 -2
  195. package/src/components/input/examples/checkout-full-width.tsx +2 -2
  196. package/src/components/input/examples/login-email.tsx +1 -5
  197. package/src/components/input/examples/password-with-hint.tsx +1 -1
  198. package/src/components/input/examples/search.tsx +0 -1
  199. package/src/components/kbd/examples/composition-chord-icon.tsx +1 -1
  200. package/src/components/kbd/examples/toolbar-hints.tsx +2 -2
  201. package/src/components/label/examples/with-icon.tsx +1 -1
  202. package/src/components/link-button/COMPONENT.md +1 -1
  203. package/src/components/link-button/examples/composition.tsx +3 -3
  204. package/src/components/link-button/examples/disabled.tsx +2 -4
  205. package/src/components/link-button/examples/external.tsx +1 -6
  206. package/src/components/link-button/examples/inline-text-link.tsx +2 -4
  207. package/src/components/link-button/examples/navigation-cluster.tsx +4 -12
  208. package/src/components/modal/COMPONENT.md +4 -4
  209. package/src/components/modal/examples/canonical-maximal.tsx +4 -4
  210. package/src/components/modal/examples/pattern-close-behavior.tsx +3 -3
  211. package/src/components/modal/examples/pattern-controlled.tsx +3 -5
  212. package/src/components/modal/examples/pattern-full-width-footer.tsx +3 -3
  213. package/src/components/modal/examples/pattern-portal-and-scroll.tsx +3 -5
  214. package/src/components/modal/examples/scenario-confirm-delete.tsx +3 -3
  215. package/src/components/modal/examples/scenario-edit-entity.tsx +4 -4
  216. package/src/components/modal/examples/scenario-legal-consent.tsx +2 -2
  217. package/src/components/modal/examples/scenario-multi-field-form.tsx +7 -13
  218. package/src/components/notification/examples/action-toast.tsx +0 -2
  219. package/src/components/notification/examples/error-success.tsx +0 -2
  220. package/src/components/page-content/COMPONENT.md +1 -0
  221. package/src/components/popover/COMPONENT.md +1 -1
  222. package/src/components/popover/examples/as-child.tsx +1 -1
  223. package/src/components/popover/examples/canonical-panel.tsx +2 -2
  224. package/src/components/popover/examples/composition.tsx +7 -7
  225. package/src/components/popover/examples/controlled.tsx +4 -4
  226. package/src/components/popover/examples/date-trigger.tsx +3 -10
  227. package/src/components/popover/examples/features.tsx +6 -13
  228. package/src/components/popover/examples/form-in-popover.tsx +5 -13
  229. package/src/components/popover/examples/full-width.tsx +2 -9
  230. package/src/components/popover/examples/inset-variants.tsx +6 -6
  231. package/src/components/popover/examples/placement.tsx +2 -7
  232. package/src/components/popover/examples/rich-content.tsx +6 -8
  233. package/src/components/popover/examples/sizes.tsx +5 -5
  234. package/src/components/popover/examples/states.tsx +4 -4
  235. package/src/components/progress-bar/examples/indeterminate-busy-state.tsx +1 -1
  236. package/src/components/progress-bar/examples/step-progress.tsx +0 -1
  237. package/src/components/progress-bar/examples/upload-progress.tsx +1 -1
  238. package/src/components/progress-bar/examples/wizard-composition.tsx +1 -1
  239. package/src/components/progress-circle/examples/a11y-label.tsx +1 -1
  240. package/src/components/progress-circle/examples/composition.tsx +2 -2
  241. package/src/components/progress-circle/examples/dashboard-ring.tsx +1 -6
  242. package/src/components/progress-circle/examples/max-scale.tsx +3 -3
  243. package/src/components/progress-circle/examples/states.tsx +5 -13
  244. package/src/components/radio/examples/notification-channel.tsx +3 -3
  245. package/src/components/radio/examples/plan-picker.tsx +0 -3
  246. package/src/components/radio/examples/settings-group.tsx +4 -4
  247. package/src/components/radio/examples/shipping-method.tsx +3 -3
  248. package/src/components/segmented-control/examples/canonical-composition.tsx +7 -7
  249. package/src/components/segmented-control/examples/composition.tsx +7 -7
  250. package/src/components/segmented-control/examples/features.tsx +3 -3
  251. package/src/components/segmented-control/examples/full-width.tsx +1 -1
  252. package/src/components/segmented-control/examples/pricing-toggle.tsx +0 -1
  253. package/src/components/segmented-control/examples/states.tsx +3 -3
  254. package/src/components/segmented-control/examples/view-mode.tsx +0 -1
  255. package/src/components/segmented-progress-bar/examples/size-ladder.tsx +1 -1
  256. package/src/components/select/COMPONENT.md +3 -3
  257. package/src/components/select/examples/01-country.tsx +2 -4
  258. package/src/components/select/examples/02-controlled.tsx +2 -4
  259. package/src/components/select/examples/03-groups.tsx +2 -4
  260. package/src/components/select/examples/04-full-width-form.tsx +4 -8
  261. package/src/components/select/examples/pattern-composition.tsx +1 -1
  262. package/src/components/select/examples/pattern-controlled.tsx +1 -1
  263. package/src/components/select/examples/pattern-features.tsx +1 -1
  264. package/src/components/select/examples/pattern-full-width.tsx +1 -1
  265. package/src/components/select/examples/pattern-native.tsx +1 -1
  266. package/src/components/select/examples/pattern-states.tsx +4 -4
  267. package/src/components/slider/COMPONENT.md +1 -1
  268. package/src/components/stepper/COMPONENT.md +1 -1
  269. package/src/components/stepper/examples/01-checkout-horizontal.tsx +1 -1
  270. package/src/components/stepper/examples/02-onboarding-vertical.tsx +1 -1
  271. package/src/components/stepper/examples/03-vertical-primitive-rail.tsx +1 -1
  272. package/src/components/stepper/examples/04-checkout-step-error.tsx +1 -1
  273. package/src/components/stepper/examples/05-horizontal-primitive.tsx +1 -1
  274. package/src/components/switch/COMPONENT.md +1 -1
  275. package/src/components/switch/examples/canonical-maximal.tsx +1 -1
  276. package/src/components/switch/examples/composition.tsx +1 -2
  277. package/src/components/switch/examples/controlled.tsx +1 -1
  278. package/src/components/switch/examples/full-width.tsx +1 -1
  279. package/src/components/switch/examples/scenario-billing-annual.tsx +1 -1
  280. package/src/components/switch/examples/scenario-feature-flag.tsx +1 -6
  281. package/src/components/switch/examples/scenario-settings-toggle.tsx +3 -3
  282. package/src/components/switch/examples/states.tsx +6 -6
  283. package/src/components/switch/examples/variants.tsx +2 -2
  284. package/src/components/tabs/COMPONENT.md +1 -1
  285. package/src/components/tabs/examples/01-settings-vertical-rail.tsx +1 -6
  286. package/src/components/tag/COMPONENT.md +1 -1
  287. package/src/components/tag/examples/01-filter-chips.tsx +1 -1
  288. package/src/components/tag/examples/02-removable-selected-values.tsx +1 -1
  289. package/src/components/tag/examples/03-status-metadata.tsx +3 -3
  290. package/src/components/tag/examples/controlled.tsx +1 -6
  291. package/src/components/tag/examples/removable.tsx +1 -1
  292. package/src/components/textarea/examples/01-support-ticket.tsx +0 -1
  293. package/src/components/textarea/examples/02-comment.tsx +1 -2
  294. package/src/components/textarea/examples/composition.tsx +2 -2
  295. package/src/components/textarea/examples/controlled.tsx +0 -1
  296. package/src/components/textarea/examples/features.tsx +3 -12
  297. package/src/components/textarea/examples/full-width.tsx +1 -1
  298. package/src/components/textarea/examples/states.tsx +4 -4
  299. package/src/components/textarea/examples/variants.tsx +2 -2
  300. package/src/components/tooltip/COMPONENT.md +0 -1
  301. package/src/components/tooltip/examples/canonical-icon-hint.tsx +1 -1
  302. package/src/components/tooltip/examples/composition.tsx +3 -9
  303. package/src/components/tooltip/examples/controlled.tsx +2 -2
  304. package/src/components/tooltip/examples/delay.tsx +1 -1
  305. package/src/components/tooltip/examples/long-content.tsx +2 -2
  306. package/src/components/tooltip/examples/side.tsx +4 -4
  307. package/src/components/tooltip/examples/states.tsx +2 -2
  308. package/src/components/tooltip/examples/surfaces.tsx +2 -2
  309. package/dist/components/dropdown/examples/inset.d.ts +0 -3
  310. package/dist/components/dropdown/examples/inset.d.ts.map +0 -1
  311. package/src/components/dropdown/examples/inset.tsx +0 -51
@@ -15,13 +15,13 @@ export default function DrawerExampleCartPreview() {
15
15
  return (
16
16
  <Drawer.Root>
17
17
  <Drawer.Trigger>
18
- <Button.Root type="button" size="m" variant="neutral" mode="stroke">
18
+ <Button.Root type="button" variant="neutral" mode="stroke">
19
19
  Cart (3)
20
20
  </Button.Root>
21
21
  </Drawer.Trigger>
22
22
  <Drawer.Portal>
23
23
  <Drawer.Overlay />
24
- <Drawer.Content side="right" size="m" aria-labelledby="drawer-cart-title">
24
+ <Drawer.Content side="right" aria-labelledby="drawer-cart-title">
25
25
  <Drawer.Header>
26
26
  <Drawer.Title id="drawer-cart-title">Your cart</Drawer.Title>
27
27
  </Drawer.Header>
@@ -38,12 +38,12 @@ export default function DrawerExampleCartPreview() {
38
38
  </Drawer.Body>
39
39
  <Drawer.Footer className={styles.footerActions}>
40
40
  <Drawer.Close>
41
- <Button.Root type="button" size="m" variant="neutral" mode="stroke">
41
+ <Button.Root type="button" variant="neutral" mode="stroke">
42
42
  View cart
43
43
  </Button.Root>
44
44
  </Drawer.Close>
45
45
  <Drawer.Close>
46
- <Button.Root type="button" size="m" variant="primary">
46
+ <Button.Root type="button" variant="primary">
47
47
  Checkout
48
48
  </Button.Root>
49
49
  </Drawer.Close>
@@ -10,13 +10,13 @@ export default function DrawerExampleExplicitPanel() {
10
10
  return (
11
11
  <Drawer.Root>
12
12
  <Drawer.Trigger>
13
- <Button.Root type="button" size="m" variant="neutral" mode="stroke">
13
+ <Button.Root type="button" variant="neutral" mode="stroke">
14
14
  Open explicit panel
15
15
  </Button.Root>
16
16
  </Drawer.Trigger>
17
17
  <Drawer.Portal>
18
18
  <Drawer.Overlay />
19
- <Drawer.Panel side="right" size="m" aria-labelledby="drawer-explicit-title">
19
+ <Drawer.Panel side="right" aria-labelledby="drawer-explicit-title">
20
20
  <Drawer.Header>
21
21
  <Drawer.Title id="drawer-explicit-title">Details</Drawer.Title>
22
22
  </Drawer.Header>
@@ -28,7 +28,7 @@ export default function DrawerExampleExplicitPanel() {
28
28
  </Drawer.Content>
29
29
  <Drawer.Footer>
30
30
  <Drawer.Close>
31
- <Button.Root type="button" size="m" variant="neutral" mode="stroke">
31
+ <Button.Root type="button" variant="neutral" mode="stroke">
32
32
  Close
33
33
  </Button.Root>
34
34
  </Drawer.Close>
@@ -11,37 +11,37 @@ export default function DrawerExampleFiltersPanel() {
11
11
  return (
12
12
  <Drawer.Root>
13
13
  <Drawer.Trigger>
14
- <Button.Root type="button" size="m" variant="neutral" mode="stroke">
14
+ <Button.Root type="button" variant="neutral" mode="stroke">
15
15
  Filters
16
16
  </Button.Root>
17
17
  </Drawer.Trigger>
18
18
  <Drawer.Portal>
19
19
  <Drawer.Overlay />
20
- <Drawer.Content side="left" size="m" aria-labelledby="drawer-filters-title">
20
+ <Drawer.Content side="left" aria-labelledby="drawer-filters-title">
21
21
  <Drawer.Header>
22
22
  <Drawer.Title id="drawer-filters-title">Filters</Drawer.Title>
23
23
  </Drawer.Header>
24
24
  <Drawer.Body>
25
25
  <div className={styles.filterStack}>
26
- <Checkbox.Root size="m" defaultChecked>
26
+ <Checkbox.Root defaultChecked>
27
27
  <Checkbox.Label>In stock only</Checkbox.Label>
28
28
  </Checkbox.Root>
29
- <Checkbox.Root size="m">
29
+ <Checkbox.Root>
30
30
  <Checkbox.Label>On sale</Checkbox.Label>
31
31
  </Checkbox.Root>
32
- <Checkbox.Root size="m">
32
+ <Checkbox.Root>
33
33
  <Checkbox.Label>Ships today</Checkbox.Label>
34
34
  </Checkbox.Root>
35
35
  </div>
36
36
  </Drawer.Body>
37
37
  <Drawer.Footer className={styles.footerActions}>
38
38
  <Drawer.Close>
39
- <Button.Root type="button" size="m" variant="neutral" mode="stroke">
39
+ <Button.Root type="button" variant="neutral" mode="stroke">
40
40
  Reset
41
41
  </Button.Root>
42
42
  </Drawer.Close>
43
43
  <Drawer.Close>
44
- <Button.Root type="button" size="m" variant="primary">
44
+ <Button.Root type="button" variant="primary">
45
45
  Apply
46
46
  </Button.Root>
47
47
  </Drawer.Close>
@@ -12,13 +12,13 @@ export default function DrawerExampleMobileNavSheet() {
12
12
  return (
13
13
  <Drawer.Root>
14
14
  <Drawer.Trigger>
15
- <Button.Root type="button" size="m" variant="neutral" mode="stroke">
15
+ <Button.Root type="button" variant="neutral" mode="stroke">
16
16
  Menu
17
17
  </Button.Root>
18
18
  </Drawer.Trigger>
19
19
  <Drawer.Portal>
20
20
  <Drawer.Overlay />
21
- <Drawer.Content side="bottom" size="m" aria-labelledby="drawer-nav-title">
21
+ <Drawer.Content side="bottom" aria-labelledby="drawer-nav-title">
22
22
  <Drawer.Header>
23
23
  <Drawer.Title id="drawer-nav-title">Navigate</Drawer.Title>
24
24
  </Drawer.Header>
@@ -26,7 +26,7 @@ export default function DrawerExampleMobileNavSheet() {
26
26
  <nav className={styles.nav} aria-label="Primary">
27
27
  {items.map((label) => (
28
28
  <Drawer.Close key={label}>
29
- <Button.Root type="button" size="m" variant="neutral" mode="ghost" fullWidth>
29
+ <Button.Root type="button" variant="neutral" mode="ghost" fullWidth>
30
30
  {label}
31
31
  </Button.Root>
32
32
  </Drawer.Close>
@@ -11,24 +11,24 @@ export default function DrawerExampleSettingsSide() {
11
11
  return (
12
12
  <Drawer.Root>
13
13
  <Drawer.Trigger>
14
- <Button.Root type="button" size="m" variant="neutral" mode="stroke">
14
+ <Button.Root type="button" variant="neutral" mode="stroke">
15
15
  Workspace settings
16
16
  </Button.Root>
17
17
  </Drawer.Trigger>
18
18
  <Drawer.Portal>
19
19
  <Drawer.Overlay />
20
- <Drawer.Content side="right" size="m" aria-labelledby="drawer-settings-title">
20
+ <Drawer.Content side="right" aria-labelledby="drawer-settings-title">
21
21
  <Drawer.Header>
22
22
  <Drawer.Title id="drawer-settings-title">Workspace</Drawer.Title>
23
23
  </Drawer.Header>
24
24
  <Drawer.Body>
25
25
  <div className={styles.settingsStack}>
26
- <Input.Root label="Workspace name" size="m">
26
+ <Input.Root label="Workspace name">
27
27
  <Input.Wrapper>
28
28
  <Input.Field defaultValue="Acme Design" />
29
29
  </Input.Wrapper>
30
30
  </Input.Root>
31
- <Input.Root label="Default timezone" size="m" hint="Used for scheduled reports.">
31
+ <Input.Root label="Default timezone" hint="Used for scheduled reports.">
32
32
  <Input.Wrapper>
33
33
  <Input.Field defaultValue="Europe/Berlin" />
34
34
  </Input.Wrapper>
@@ -37,12 +37,12 @@ export default function DrawerExampleSettingsSide() {
37
37
  </Drawer.Body>
38
38
  <Drawer.Footer className={styles.footerActions}>
39
39
  <Drawer.Close>
40
- <Button.Root type="button" size="m" variant="neutral" mode="stroke">
40
+ <Button.Root type="button" variant="neutral" mode="stroke">
41
41
  Cancel
42
42
  </Button.Root>
43
43
  </Drawer.Close>
44
44
  <Drawer.Close>
45
- <Button.Root type="button" size="m" variant="primary">
45
+ <Button.Root type="button" variant="primary">
46
46
  Save changes
47
47
  </Button.Root>
48
48
  </Drawer.Close>
@@ -6,7 +6,7 @@
6
6
 
7
7
  **What:** `Dropdown` is a **portaled action menu** (`role="menu"`): one trigger toggles a floating list of **`menuitem`** rows. **`Dropdown.Trigger`** clones **exactly one** child element and merges **`aria-expanded`**, **`aria-haspopup="menu"`**, **`aria-controls`**, **`id`**, ref, and toggle **`onClick`**. **`Dropdown.Content`** renders **only when open**, applies focus trap, Escape/outside close, and arrow-key roving focus among items.
8
8
 
9
- **Parts:** `Root` → `Trigger` + `Content`. Inside `Content`: optional `Inset`, `Block`, `Header` (+ `HeaderRow`, `HeaderLeading`, `HeaderMain`, `HeaderTitle`, `HeaderDescription`, `HeaderTrailing`), `Group` + `GroupLabel`, `Separator`, `Item` (+ `ItemIcon`).
9
+ **Parts:** `Root` → `Trigger` + `Content`. Inside `Content`: `Block`, `Header` (+ `HeaderRow`, `HeaderLeading`, `HeaderMain`, `HeaderTitle`, `HeaderDescription`, `HeaderTrailing`), `Group` + `GroupLabel`, `Separator`, `Item` (+ `ItemIcon`).
10
10
 
11
11
  **State:** Uncontrolled: **`defaultOpen`** on `Root`. Controlled: **`open`** + **`onOpenChange`**. **`Item.onSelect`** runs on activation, then the menu closes unless **`disabled`**.
12
12
 
@@ -26,7 +26,6 @@
26
26
  | [`playground/snippets/dropdown/composition.tsx`](../../../playground/snippets/dropdown/composition.tsx) | **`Block`**, header slots, **`GroupLabel`**, **`ItemIcon`**, nested trailing **Button** |
27
27
  | [`playground/snippets/dropdown/full-width.tsx`](../../../playground/snippets/dropdown/full-width.tsx) | **`sameMinWidthAsTrigger`** with narrow trigger |
28
28
  | [`playground/snippets/dropdown/as-child.tsx`](../../../playground/snippets/dropdown/as-child.tsx) | **`Trigger`** merges props into a single child (e.g. link) |
29
- | [`playground/snippets/dropdown/inset.tsx`](../../../playground/snippets/dropdown/inset.tsx) | **`Inset`** **`padding`** / **`gap`** variants |
30
29
 
31
30
  **Package `examples/`** (same folder as this file; `@/` imports in-repo, **`prime-ui-kit`** for consumers):
32
31
 
@@ -40,9 +39,8 @@
40
39
  | [`examples/composition.tsx`](examples/composition.tsx) | `composition.tsx` | Same as playground composition |
41
40
  | [`examples/full-width.tsx`](examples/full-width.tsx) | `full-width.tsx` | Same as playground full-width |
42
41
  | [`examples/as-child.tsx`](examples/as-child.tsx) | `as-child.tsx` | Same as playground as-child |
43
- | [`examples/inset.tsx`](examples/inset.tsx) | `inset.tsx` | Same as playground inset |
44
42
  | [`examples/actions-menu.tsx`](examples/actions-menu.tsx) | — | Icon-only trigger, row icons, separator, **`destructive`** |
45
- | [`examples/account-menu.tsx`](examples/account-menu.tsx) | — | Header + avatar, **`Inset`**, **`sameMinWidthAsTrigger`**, sign out |
43
+ | [`examples/account-menu.tsx`](examples/account-menu.tsx) | — | Header + avatar, **`sameMinWidthAsTrigger`**, sign out |
46
44
  | [`examples/select-like-list.tsx`](examples/select-like-list.tsx) | — | Trigger shows choice; still **`role="menu"`** (not **Select**) |
47
45
 
48
46
  Shared layout tokens for some examples: [`examples/dropdown-examples.module.css`](examples/dropdown-examples.module.css) (mirrors [`playground/snippets/dropdown/dropdown-snippets.module.css`](../../../playground/snippets/dropdown/dropdown-snippets.module.css)).
@@ -56,7 +54,7 @@ export function Example() {
56
54
  return (
57
55
  <Dropdown.Root>
58
56
  <Dropdown.Trigger>
59
- <Button.Root type="button" variant="neutral" mode="stroke" size="m">
57
+ <Button.Root type="button" variant="neutral" mode="stroke">
60
58
  Actions
61
59
  </Button.Root>
62
60
  </Dropdown.Trigger>
@@ -89,8 +87,7 @@ A composite **action menu**: the trigger toggles a portaled panel with commands,
89
87
 
90
88
  - **`Dropdown.Root`** wraps everything and owns open state (controlled or uncontrolled).
91
89
  - **`Dropdown.Trigger`** must wrap **exactly one** React element; refs, `id`, `aria-*`, and toggle `onClick` are merged into that child.
92
- - **`Dropdown.Content`** renders **only when open** (portal + `role="menu"`). Put **`Dropdown.Inset`** or direct **`Dropdown.Block`** / **`Dropdown.Group`** / **`Dropdown.Item`** children inside it.
93
- - **`Dropdown.Inset`** optional wrapper: padding and vertical gap between **direct** children.
90
+ - **`Dropdown.Content`** renders **only when open** (portal + `role="menu"`). Put **`Dropdown.Block`** / **`Dropdown.Group`** / **`Dropdown.Item`** children inside it.
94
91
  - **`Dropdown.Block`** — generic section; **`Dropdown.Header`** and **`HeaderRow`**, **`HeaderLeading`**, **`HeaderMain`**, **`HeaderTitle`**, **`HeaderDescription`**, **`HeaderTrailing`** compose a header area inside the panel.
95
92
  - **`Dropdown.Item`** — actionable row (`role="menuitem"`); may include **`Dropdown.ItemIcon`** before text.
96
93
  - **`Dropdown.Group`** + **`Dropdown.GroupLabel`** label a set of items; **`Dropdown.Separator`** is an `hr` between blocks.
@@ -135,17 +132,7 @@ A composite **action menu**: the trigger toggles a portaled panel with commands,
135
132
  | sameMinWidthAsTrigger | `boolean` | `false` | No | Panel minimum width is not less than the trigger width. |
136
133
  | size | `"s" \| "m" \| "l" \| "xl"` | `"m"` | No | Tier for panel metrics, rows, group labels, and default icon size. |
137
134
  | className | `string` | — | No | Extra class on the portaled menu container. |
138
- | children | `React.ReactNode` | — | Yes | Menu body: inset, blocks, groups, items, etc. |
139
-
140
- #### Dropdown.Inset
141
-
142
- | Prop | Type | Default | Required | Description |
143
- |------|------|---------|----------|-------------|
144
- | padding | `"none" \| "x1" \| "x2" \| "x3"` | `"x2"` | No | Inner padding from the content edge. |
145
- | gap | `"none" \| "x2" \| "x3" \| "x4"` | `"x3"` | No | Vertical gap between direct children. |
146
- | className | `string` | — | No | Extra class. |
147
- | children | `React.ReactNode` | — | Yes | Nested blocks and items. |
148
- | …rest | `React.HTMLAttributes<HTMLDivElement>` | — | No | Other `div` attributes. |
135
+ | children | `React.ReactNode` | — | Yes | Menu body: blocks, groups, items, etc. |
149
136
 
150
137
  #### Dropdown.Block
151
138
 
@@ -8,44 +8,42 @@ export default function DropdownAccountMenuExample() {
8
8
  return (
9
9
  <Dropdown.Root>
10
10
  <Dropdown.Trigger>
11
- <Button.Root type="button" variant="neutral" mode="stroke" size="m">
11
+ <Button.Root type="button" variant="neutral" mode="stroke">
12
12
  Аккаунт
13
13
  </Button.Root>
14
14
  </Dropdown.Trigger>
15
15
  <Dropdown.Content align="end" sameMinWidthAsTrigger>
16
- <Dropdown.Inset>
17
- <Dropdown.Block>
18
- <Dropdown.Header>
19
- <Dropdown.HeaderRow>
20
- <Dropdown.HeaderLeading>
21
- <Avatar.Root size="l">
22
- <Avatar.Fallback>ИП</Avatar.Fallback>
23
- </Avatar.Root>
24
- </Dropdown.HeaderLeading>
25
- <Dropdown.HeaderMain>
26
- <Dropdown.HeaderTitle>Иван Петров</Dropdown.HeaderTitle>
27
- <Dropdown.HeaderDescription truncate>
28
- ivan.petrov@example.com
29
- </Dropdown.HeaderDescription>
30
- </Dropdown.HeaderMain>
31
- </Dropdown.HeaderRow>
32
- <Dropdown.Separator />
33
- </Dropdown.Header>
34
- <Dropdown.Item>
35
- <Dropdown.ItemIcon as={UserRound} strokeWidth={2} />
36
- Профиль
37
- </Dropdown.Item>
38
- <Dropdown.Item>
39
- <Dropdown.ItemIcon as={Settings} strokeWidth={2} />
40
- Настройки
41
- </Dropdown.Item>
42
- </Dropdown.Block>
43
- <Dropdown.Separator />
44
- <Dropdown.Item destructive>
45
- <Dropdown.ItemIcon as={LogOut} strokeWidth={2} />
46
- Выйти
16
+ <Dropdown.Block>
17
+ <Dropdown.Header>
18
+ <Dropdown.HeaderRow>
19
+ <Dropdown.HeaderLeading>
20
+ <Avatar.Root size="l">
21
+ <Avatar.Fallback>ИП</Avatar.Fallback>
22
+ </Avatar.Root>
23
+ </Dropdown.HeaderLeading>
24
+ <Dropdown.HeaderMain>
25
+ <Dropdown.HeaderTitle>Иван Петров</Dropdown.HeaderTitle>
26
+ <Dropdown.HeaderDescription truncate>
27
+ ivan.petrov@example.com
28
+ </Dropdown.HeaderDescription>
29
+ </Dropdown.HeaderMain>
30
+ </Dropdown.HeaderRow>
31
+ <Dropdown.Separator />
32
+ </Dropdown.Header>
33
+ <Dropdown.Item>
34
+ <Dropdown.ItemIcon as={UserRound} strokeWidth={2} />
35
+ Профиль
47
36
  </Dropdown.Item>
48
- </Dropdown.Inset>
37
+ <Dropdown.Item>
38
+ <Dropdown.ItemIcon as={Settings} strokeWidth={2} />
39
+ Настройки
40
+ </Dropdown.Item>
41
+ </Dropdown.Block>
42
+ <Dropdown.Separator />
43
+ <Dropdown.Item destructive>
44
+ <Dropdown.ItemIcon as={LogOut} strokeWidth={2} />
45
+ Выйти
46
+ </Dropdown.Item>
49
47
  </Dropdown.Content>
50
48
  </Dropdown.Root>
51
49
  );
@@ -11,7 +11,6 @@ export default function DropdownActionsMenuExample() {
11
11
  type="button"
12
12
  variant="neutral"
13
13
  mode="stroke"
14
- size="m"
15
14
  aria-label="Действия с документом"
16
15
  >
17
16
 
@@ -9,7 +9,7 @@ export default function DropdownCompositionExample() {
9
9
  return (
10
10
  <Dropdown.Root>
11
11
  <Dropdown.Trigger>
12
- <Button.Root type="button" size="m" variant="neutral" mode="stroke">
12
+ <Button.Root type="button" variant="neutral" mode="stroke">
13
13
  Меню пользователя
14
14
  </Button.Root>
15
15
  </Dropdown.Trigger>
@@ -13,7 +13,7 @@ export default function DropdownControlledExample() {
13
13
  <div className={styles.controlledRow}>
14
14
  <Dropdown.Root open={open} onOpenChange={setOpen}>
15
15
  <Dropdown.Trigger>
16
- <Button.Root type="button" size="m" variant="neutral" mode="stroke">
16
+ <Button.Root type="button" variant="neutral" mode="stroke">
17
17
  Шаг 2 из 4
18
18
  </Button.Root>
19
19
  </Dropdown.Trigger>
@@ -27,7 +27,3 @@
27
27
  var(--prime-sys-spacing-xs)
28
28
  );
29
29
  }
30
-
31
- .insetNoteTight {
32
- padding-inline: var(--prime-sys-spacing-x2);
33
- }
@@ -10,7 +10,6 @@ export default function DropdownFullWidthExample() {
10
10
  <Dropdown.Trigger>
11
11
  <Button.Root
12
12
  type="button"
13
- size="m"
14
13
  variant="neutral"
15
14
  mode="stroke"
16
15
  aria-label="Действия со строкой"
@@ -15,7 +15,7 @@ export default function DropdownSelectLikeListExample() {
15
15
  return (
16
16
  <Dropdown.Root>
17
17
  <Dropdown.Trigger>
18
- <Button.Root type="button" variant="neutral" mode="stroke" size="m">
18
+ <Button.Root type="button" variant="neutral" mode="stroke">
19
19
  Пространство: {workspace}
20
20
  </Button.Root>
21
21
  </Dropdown.Trigger>
@@ -6,7 +6,7 @@ export default function DropdownStatesExample() {
6
6
  return (
7
7
  <Dropdown.Root>
8
8
  <Dropdown.Trigger>
9
- <Button.Root type="button" size="m" variant="neutral" mode="stroke">
9
+ <Button.Root type="button" variant="neutral" mode="stroke">
10
10
  Доступ к отчёту
11
11
  </Button.Root>
12
12
  </Dropdown.Trigger>
@@ -6,7 +6,7 @@ export default function DropdownVariantsExample() {
6
6
  return (
7
7
  <Dropdown.Root>
8
8
  <Dropdown.Trigger>
9
- <Button.Root type="button" size="m" variant="neutral" mode="lighter">
9
+ <Button.Root type="button" variant="neutral" mode="lighter">
10
10
  Документ
11
11
  </Button.Root>
12
12
  </Dropdown.Trigger>
@@ -0,0 +1,143 @@
1
+ # EmptyPage
2
+
3
+ ## About
4
+
5
+ Центрированный блок **пустого состояния**: **`EmptyPage.Icon`** (область под глиф), **`EmptyPage.Title`** (**`<h2>`**), **`EmptyPage.Description`**, **`EmptyPage.Actions`** (ряд кнопок). Ось **`size`** (`s`–`xl`) задаёт иконку, кегль и отступы и пробрасывается в **`ControlSizeProvider`** для дочерних **`Button`**.
6
+
7
+ - **Используйте** на странице списка, в теле таблицы, в карточке или в **`ScrollContainer`**, когда данных нет и нужен явный призыв к действию.
8
+ - **`layout="fill"`** — блок растягивается по высоте **flex**-родителя с заданной **`min-height`** (типично «область таблицы»); **`default`** — компактный блок по содержимому.
9
+ - **Не** подменяйте **`Title`** на **`PageContent.Title`** (**`<h1>`**): пустое состояние — регион страницы, заголовок вью остаётся один на маршруте.
10
+
11
+ ## Composition
12
+
13
+ - **`EmptyPage.Root`** — колонка по центру, **`text-align: center`**; **`size`**, **`layout`** через `data-*`.
14
+ - **`EmptyPage.Icon`** — подложка под глиф в духе иконки шапки [**`Modal.Panel`**](../modal/COMPONENT.md) (`headerIcon`): скругление **`--prime-sys-size-control-*-radius`**, фон **`--prime-sys-color-status-error-background`**, цвет глифа **`--prime-sys-color-status-error-foreground`** (не «сырой» красный). Внутрь — **`lucide-react`** или **`Icon`** с **`aria-hidden`**.
15
+ - **`EmptyPage.Title`** — **`h2`**; связывайте с **`aria-labelledby`** на корне.
16
+ - **`EmptyPage.Description`** — **`p`**, вторичный цвет контента.
17
+ - **`EmptyPage.Actions`** — **`flex`**-ряд с **`gap`** по размеру; внутри — **`Button`**, **`ButtonGroup`**, **`LinkButton`**.
18
+
19
+ ### Canonical example
20
+
21
+ ```tsx
22
+ import { Search } from "lucide-react";
23
+ import { Button, EmptyPage } from "prime-ui-kit";
24
+
25
+ export function EmptySearchResults() {
26
+ return (
27
+ <EmptyPage.Root aria-labelledby="empty-heading">
28
+ <EmptyPage.Icon aria-hidden>
29
+ <Search strokeWidth={2} aria-hidden />
30
+ </EmptyPage.Icon>
31
+ <EmptyPage.Title id="empty-heading">Ничего не найдено</EmptyPage.Title>
32
+ <EmptyPage.Description>
33
+ Измените фильтры или сбросьте поиск — тогда мы снова покажем результаты.
34
+ </EmptyPage.Description>
35
+ <EmptyPage.Actions>
36
+ <Button.Root type="button" variant="primary">
37
+ Сбросить фильтры
38
+ </Button.Root>
39
+ </EmptyPage.Actions>
40
+ </EmptyPage.Root>
41
+ );
42
+ }
43
+ ```
44
+
45
+ ### Пустое состояние в области таблицы
46
+
47
+ Родитель с **`min-height`** (и обычно рамкой области данных) + **`layout="fill"`** — контент визуально по центру «подложки».
48
+
49
+ ```tsx
50
+ import { PackagePlus } from "lucide-react";
51
+ import { Button, EmptyPage } from "prime-ui-kit";
52
+
53
+ export function OrdersTableEmpty() {
54
+ return (
55
+ <div className="ordersTableBodyRegion">
56
+ <EmptyPage.Root layout="fill" aria-labelledby="empty-table-heading">
57
+ <EmptyPage.Icon aria-hidden>
58
+ <PackagePlus strokeWidth={2} aria-hidden />
59
+ </EmptyPage.Icon>
60
+ <EmptyPage.Title id="empty-table-heading">Пока нет позиций</EmptyPage.Title>
61
+ <EmptyPage.Description>Добавьте первую строку или импортируйте каталог.</EmptyPage.Description>
62
+ <EmptyPage.Actions>
63
+ <Button.Root type="button" variant="primary">
64
+ Добавить позицию
65
+ </Button.Root>
66
+ </EmptyPage.Actions>
67
+ </EmptyPage.Root>
68
+ </div>
69
+ );
70
+ }
71
+ ```
72
+
73
+ ### Связь с DataTable
74
+
75
+ У **`DataTable`** пустой набор строк может отображаться через **`emptyText`** (строка в таблице). Для **богатого** пустого состояния с кнопкой и иконкой не подставляйте разметку внутрь **`emptyText`**: рендерите **`EmptyPage`** **вместо** таблицы или **в** ячейке-обёртке с **`layout="fill"`**, когда **`rows.length === 0`** и не **`loading`**.
76
+
77
+ ### Playground
78
+
79
+ Живые примеры: **`playground/sections/EmptyPageSection.tsx`**.
80
+
81
+ ## Extended examples
82
+
83
+ | Playground (сниппет) | Runnable (`examples/*.tsx`) |
84
+ |----------------------|------------------------------|
85
+ | [`canonical.tsx`](../../../playground/snippets/empty-page/canonical.tsx) | [`examples/canonical.tsx`](./examples/canonical.tsx) |
86
+ | [`sizes.tsx`](../../../playground/snippets/empty-page/sizes.tsx) | [`examples/sizes.tsx`](./examples/sizes.tsx) |
87
+ | [`table-region.tsx`](../../../playground/snippets/empty-page/table-region.tsx) | [`examples/table-region.tsx`](./examples/table-region.tsx) |
88
+
89
+ ## Rules
90
+
91
+ - Заголовок вью — один **`h1`** ([`PageContent.Title`](../page-content/COMPONENT.md)); в **`EmptyPage`** используйте **`Title`** (**`h2`**).
92
+ - Иконка декоративная — **`aria-hidden`** на обёртке или SVG.
93
+ - Размеры кнопок в **`Actions`** наследуются от **`ControlSizeProvider`** на **`Root`**; при необходимости оберните действия в отдельный **`ControlSizeProvider`**.
94
+
95
+ ## API
96
+
97
+ ### EmptyPage.Root
98
+
99
+ | Prop | Type | Default | Required | Description |
100
+ |------|------|---------|----------|-------------|
101
+ | size | `s` \| `m` \| `l` \| `xl` | `m` | No | Шкала иконки, текста, отступов; `ControlSizeProvider` для потомков. |
102
+ | layout | `default` \| `fill` | `default` | No | `fill` — растянуть по высоте flex-родителя (пустое тело таблицы / панели). |
103
+ | className | `string` | — | No | Дополнительный класс корня. |
104
+ | children | `React.ReactNode` | — | No | Icon, Title, Description, Actions. |
105
+ | …rest | `React.HTMLAttributes<HTMLDivElement>` | — | No | В т.ч. `ref` (`forwardRef`), `aria-*`. |
106
+
107
+ ### EmptyPage.Icon
108
+
109
+ | Prop | Type | Default | Required | Description |
110
+ |------|------|---------|----------|-------------|
111
+ | className | `string` | — | No | Класс подложки под иконку. |
112
+ | children | `React.ReactNode` | — | No | Глиф (например из `lucide-react`). |
113
+ | …rest | `React.HTMLAttributes<HTMLDivElement>` | — | No | Атрибуты обёртки. |
114
+
115
+ ### EmptyPage.Title
116
+
117
+ | Prop | Type | Default | Required | Description |
118
+ |------|------|---------|----------|-------------|
119
+ | className | `string` | — | No | Класс на **`h2`**. |
120
+ | children | `React.ReactNode` | — | No | Заголовок блока. |
121
+ | …rest | `React.HTMLAttributes<HTMLHeadingElement>` | — | No | В т.ч. `ref` (`forwardRef`), `id` для `aria-labelledby`. |
122
+
123
+ ### EmptyPage.Description
124
+
125
+ | Prop | Type | Default | Required | Description |
126
+ |------|------|---------|----------|-------------|
127
+ | className | `string` | — | No | Класс на **`p`**. |
128
+ | children | `React.ReactNode` | — | No | Пояснение. |
129
+ | …rest | `React.HTMLAttributes<HTMLParagraphElement>` | — | No | В т.ч. `ref` (`forwardRef`). |
130
+
131
+ ### EmptyPage.Actions
132
+
133
+ | Prop | Type | Default | Required | Description |
134
+ |------|------|---------|----------|-------------|
135
+ | className | `string` | — | No | Класс на flex-контейнере действий. |
136
+ | children | `React.ReactNode` | — | No | Кнопки и т.п. |
137
+ | …rest | `React.HTMLAttributes<HTMLDivElement>` | — | No | Атрибуты **`div`**. |
138
+
139
+ ## Related
140
+
141
+ - [PageContent](../page-content/COMPONENT.md) — шапка маршрута (**`h1`**).
142
+ - [DataTable](../data-table/COMPONENT.md) — **`emptyText`** vs отдельный **`EmptyPage`**.
143
+ - [Button](../button/COMPONENT.md) — действия в **`Actions`**.
@@ -0,0 +1,22 @@
1
+ import { Search } from "lucide-react";
2
+ import { Button, EmptyPage } from "prime-ui-kit";
3
+
4
+ /** Полный блок: иконка, заголовок, описание, кнопка. */
5
+ export function EmptyPageCanonical() {
6
+ return (
7
+ <EmptyPage.Root aria-labelledby="empty-heading">
8
+ <EmptyPage.Icon aria-hidden>
9
+ <Search strokeWidth={2} aria-hidden />
10
+ </EmptyPage.Icon>
11
+ <EmptyPage.Title id="empty-heading">Ничего не найдено</EmptyPage.Title>
12
+ <EmptyPage.Description>
13
+ Измените фильтры или сбросьте поиск — тогда мы снова покажем результаты.
14
+ </EmptyPage.Description>
15
+ <EmptyPage.Actions>
16
+ <Button.Root type="button" variant="primary">
17
+ Сбросить фильтры
18
+ </Button.Root>
19
+ </EmptyPage.Actions>
20
+ </EmptyPage.Root>
21
+ );
22
+ }
@@ -0,0 +1,25 @@
1
+ /* Раскладка для runnable-примеров EmptyPage (зеркало playground/snippets/empty-page/*.module.css). */
2
+
3
+ .stack {
4
+ display: flex;
5
+ flex-direction: column;
6
+ gap: var(--prime-sys-spacing-2xl);
7
+ width: 100%;
8
+ }
9
+
10
+ .tableRegion {
11
+ box-sizing: border-box;
12
+ display: flex;
13
+ flex-direction: column;
14
+ min-height: var(--prime-sys-unit-18rem);
15
+ max-width: 100%;
16
+ border: var(--prime-sys-unit-1px) solid var(--prime-sys-color-border-subtle);
17
+ border-radius: var(--prime-sys-shape-radius-l);
18
+ background: var(--prime-sys-color-surface-default);
19
+ }
20
+
21
+ .lead {
22
+ margin: 0 0 var(--prime-sys-spacing-m);
23
+ font-size: var(--prime-sys-size-control-s-supportText);
24
+ color: var(--prime-sys-color-content-secondary);
25
+ }
@@ -0,0 +1,23 @@
1
+ import { Inbox } from "lucide-react";
2
+ import { EmptyPage, type EmptyPageSize } from "prime-ui-kit";
3
+
4
+ import styles from "./examples-demos.module.css";
5
+
6
+ const sizes = ["s", "m", "l", "xl"] as const satisfies readonly EmptyPageSize[];
7
+
8
+ /** Лестница размеров `s`–`xl`: иконка, кегль и отступы согласованы. */
9
+ export function EmptyPageSizes() {
10
+ return (
11
+ <div className={styles.stack}>
12
+ {sizes.map((size) => (
13
+ <EmptyPage.Root key={size} size={size} aria-labelledby={`empty-size-${size}`}>
14
+ <EmptyPage.Icon aria-hidden>
15
+ <Inbox strokeWidth={2} aria-hidden />
16
+ </EmptyPage.Icon>
17
+ <EmptyPage.Title id={`empty-size-${size}`}>Размер {size}</EmptyPage.Title>
18
+ <EmptyPage.Description>Одинаковая структура, разная шкала.</EmptyPage.Description>
19
+ </EmptyPage.Root>
20
+ ))}
21
+ </div>
22
+ );
23
+ }