banhaten 0.5.0 → 0.6.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 (290) hide show
  1. package/CHANGELOG.md +177 -139
  2. package/CONTRIBUTING.md +46 -46
  3. package/README.md +192 -192
  4. package/SECURITY.md +15 -15
  5. package/banhaten.config.example.json +11 -11
  6. package/docs/design-spacing.md +13 -13
  7. package/docs/design-system/README.md +22 -22
  8. package/docs/design-system/adoption-quality-remediation.md +87 -87
  9. package/docs/design-system/agent-usage.md +13 -13
  10. package/docs/design-system/appearance-presets.md +189 -189
  11. package/docs/design-system/appearances/default.md +94 -94
  12. package/docs/design-system/appearances/rounded.md +95 -95
  13. package/docs/design-system/appearances/sharp.md +95 -95
  14. package/docs/design-system/component-docs-pattern.md +81 -81
  15. package/docs/design-system/component-implementation-ownership-audit.md +245 -245
  16. package/docs/design-system/component-quality-audit-2026-08-20.md +225 -225
  17. package/docs/design-system/component-showcase-consistency-report.md +219 -219
  18. package/docs/design-system/component-token-consistency-audit.md +173 -173
  19. package/docs/design-system/components/README.md +91 -90
  20. package/docs/design-system/components/accordion.md +52 -52
  21. package/docs/design-system/components/activity-feed.md +93 -93
  22. package/docs/design-system/components/activity-heatmap.md +56 -56
  23. package/docs/design-system/components/alert-dialog.md +71 -71
  24. package/docs/design-system/components/alert.md +103 -97
  25. package/docs/design-system/components/app-header.md +97 -0
  26. package/docs/design-system/components/aspect-ratio.md +45 -45
  27. package/docs/design-system/components/attribute.md +101 -89
  28. package/docs/design-system/components/autocomplete.md +75 -75
  29. package/docs/design-system/components/avatar.md +53 -53
  30. package/docs/design-system/components/badge.md +55 -55
  31. package/docs/design-system/components/banner.md +86 -86
  32. package/docs/design-system/components/breadcrumbs.md +181 -177
  33. package/docs/design-system/components/button-group.md +97 -97
  34. package/docs/design-system/components/button.md +80 -80
  35. package/docs/design-system/components/card.md +102 -88
  36. package/docs/design-system/components/carousel.md +46 -46
  37. package/docs/design-system/components/catalog-components.md +46 -46
  38. package/docs/design-system/components/checkbox.md +53 -53
  39. package/docs/design-system/components/collapsible.md +63 -63
  40. package/docs/design-system/components/command.md +61 -61
  41. package/docs/design-system/components/context-menu.md +45 -45
  42. package/docs/design-system/components/date-picker.md +80 -80
  43. package/docs/design-system/components/divider.md +102 -102
  44. package/docs/design-system/components/empty-state.md +56 -56
  45. package/docs/design-system/components/field.md +70 -70
  46. package/docs/design-system/components/file-upload.md +186 -186
  47. package/docs/design-system/components/hover-card.md +47 -47
  48. package/docs/design-system/components/icons.md +48 -48
  49. package/docs/design-system/components/input-group.md +57 -57
  50. package/docs/design-system/components/input-otp.md +56 -56
  51. package/docs/design-system/components/input.md +111 -109
  52. package/docs/design-system/components/item.md +58 -58
  53. package/docs/design-system/components/kbd.md +49 -49
  54. package/docs/design-system/components/label.md +49 -49
  55. package/docs/design-system/components/menu.md +94 -73
  56. package/docs/design-system/components/menubar.md +46 -46
  57. package/docs/design-system/components/modal.md +104 -104
  58. package/docs/design-system/components/native-select.md +53 -53
  59. package/docs/design-system/components/navigation-menu.md +49 -49
  60. package/docs/design-system/components/onboarding-step-list-item.md +81 -81
  61. package/docs/design-system/components/page-header.md +127 -93
  62. package/docs/design-system/components/pagination.md +56 -56
  63. package/docs/design-system/components/popover.md +59 -59
  64. package/docs/design-system/components/progress-slider.md +49 -49
  65. package/docs/design-system/components/progress.md +76 -76
  66. package/docs/design-system/components/radio-card.md +50 -50
  67. package/docs/design-system/components/radio-group.md +56 -56
  68. package/docs/design-system/components/resizable.md +43 -43
  69. package/docs/design-system/components/scroll-area.md +50 -50
  70. package/docs/design-system/components/segmented-control.md +54 -54
  71. package/docs/design-system/components/select.md +68 -64
  72. package/docs/design-system/components/sheet.md +66 -66
  73. package/docs/design-system/components/sidebar.md +167 -111
  74. package/docs/design-system/components/skeleton.md +74 -74
  75. package/docs/design-system/components/slideout.md +64 -64
  76. package/docs/design-system/components/slider.md +62 -62
  77. package/docs/design-system/components/social-button.md +49 -49
  78. package/docs/design-system/components/spinner.md +62 -62
  79. package/docs/design-system/components/steps.md +65 -65
  80. package/docs/design-system/components/table.md +499 -422
  81. package/docs/design-system/components/tabs.md +74 -59
  82. package/docs/design-system/components/tag.md +79 -79
  83. package/docs/design-system/components/textarea.md +49 -49
  84. package/docs/design-system/components/timeline.md +82 -82
  85. package/docs/design-system/components/toast.md +57 -57
  86. package/docs/design-system/components/toggle.md +80 -80
  87. package/docs/design-system/components/toolbar.md +89 -89
  88. package/docs/design-system/components/tooltip.md +92 -92
  89. package/docs/design-system/components/typography.md +18 -18
  90. package/docs/design-system/density-and-elevation.md +65 -65
  91. package/docs/design-system/design-system-test-missing-items.md +368 -368
  92. package/docs/design-system/direction-and-localization.md +23 -23
  93. package/docs/design-system/form-recipes.md +73 -73
  94. package/docs/design-system/gap-promotion-policy.md +21 -21
  95. package/docs/design-system/icons.md +74 -74
  96. package/docs/design-system/installation.md +70 -70
  97. package/docs/design-system/launch-comparison-shadcn.md +98 -98
  98. package/docs/design-system/registry-and-cli.md +64 -64
  99. package/docs/design-system/release-policy.md +30 -30
  100. package/docs/design-system/roadmap.md +14 -14
  101. package/docs/design-system/support-matrix.md +23 -23
  102. package/docs/design-system/tabs.md +54 -54
  103. package/docs/design-system/template-gap-audit.md +32 -32
  104. package/docs/design-system/templates.md +59 -59
  105. package/docs/design-system/token-governance.md +72 -72
  106. package/package.json +98 -98
  107. package/registry/component-contract.json +40 -40
  108. package/registry/components/accordion.tsx +155 -155
  109. package/registry/components/alert-dialog.tsx +297 -297
  110. package/registry/components/alert.tsx +309 -293
  111. package/registry/components/app-header.tsx +151 -0
  112. package/registry/components/aspect-ratio.tsx +30 -30
  113. package/registry/components/attribute.tsx +489 -454
  114. package/registry/components/autocomplete.tsx +598 -598
  115. package/registry/components/avatar.tsx +385 -385
  116. package/registry/components/badge.tsx +630 -629
  117. package/registry/components/button-group.tsx +565 -565
  118. package/registry/components/button.tsx +128 -127
  119. package/registry/components/card.tsx +651 -638
  120. package/registry/components/carousel.tsx +296 -296
  121. package/registry/components/chart.tsx +203 -203
  122. package/registry/components/checkbox.tsx +247 -247
  123. package/registry/components/collapsible.tsx +109 -109
  124. package/registry/components/command.tsx +208 -208
  125. package/registry/components/context-menu.tsx +236 -236
  126. package/registry/components/date-picker.tsx +1289 -1289
  127. package/registry/components/expanded/ActivityFeed.tsx +227 -227
  128. package/registry/components/expanded/ActivityHeatmap.tsx +64 -64
  129. package/registry/components/expanded/Banner.tsx +179 -179
  130. package/registry/components/expanded/Breadcrumbs.tsx +135 -131
  131. package/registry/components/expanded/CatalogComponentsShowcase.tsx +205 -205
  132. package/registry/components/expanded/CatalogDivider.tsx +49 -49
  133. package/registry/components/expanded/EmptyState.tsx +155 -155
  134. package/registry/components/expanded/FileUpload.tsx +543 -543
  135. package/registry/components/expanded/OnboardingStepListItem.tsx +60 -60
  136. package/registry/components/expanded/PageHeader.tsx +209 -179
  137. package/registry/components/expanded/Slideout.tsx +108 -108
  138. package/registry/components/expanded/Steps.tsx +402 -402
  139. package/registry/components/expanded/Table.tsx +1109 -1092
  140. package/registry/components/expanded/Timeline.tsx +203 -203
  141. package/registry/components/expanded/activityFeed.css +248 -248
  142. package/registry/components/expanded/activityHeatmap.css +66 -66
  143. package/registry/components/expanded/banner.css +260 -260
  144. package/registry/components/expanded/breadcrumbs.css +157 -140
  145. package/registry/components/expanded/catalogComponentsShowcase.css +87 -87
  146. package/registry/components/expanded/divider.css +75 -75
  147. package/registry/components/expanded/emptyState.css +111 -111
  148. package/registry/components/expanded/fileUpload.css +457 -457
  149. package/registry/components/expanded/onboardingStepListItem.css +135 -135
  150. package/registry/components/expanded/pageHeader.css +284 -248
  151. package/registry/components/expanded/slideout.css +276 -276
  152. package/registry/components/expanded/steps.css +356 -356
  153. package/registry/components/expanded/table.css +655 -606
  154. package/registry/components/expanded/timeline.css +286 -286
  155. package/registry/components/field.tsx +283 -283
  156. package/registry/components/hover-card.tsx +48 -48
  157. package/registry/components/input-content.ts +107 -107
  158. package/registry/components/input-group.tsx +130 -130
  159. package/registry/components/input-otp.tsx +584 -584
  160. package/registry/components/input.tsx +992 -990
  161. package/registry/components/item.tsx +189 -189
  162. package/registry/components/kbd.tsx +246 -246
  163. package/registry/components/label.tsx +78 -78
  164. package/registry/components/menu.tsx +1091 -978
  165. package/registry/components/menubar.tsx +226 -226
  166. package/registry/components/modal.tsx +872 -872
  167. package/registry/components/native-select.tsx +205 -205
  168. package/registry/components/navigation-menu.tsx +171 -171
  169. package/registry/components/pagination.css +36 -36
  170. package/registry/components/pagination.tsx +560 -560
  171. package/registry/components/popover.tsx +338 -338
  172. package/registry/components/progress-slider.tsx +216 -216
  173. package/registry/components/radio-card.tsx +676 -676
  174. package/registry/components/radio-group.tsx +570 -570
  175. package/registry/components/resizable.tsx +108 -108
  176. package/registry/components/scroll-area.tsx +91 -91
  177. package/registry/components/segmented-control.tsx +87 -87
  178. package/registry/components/select-content.tsx +218 -218
  179. package/registry/components/select.tsx +937 -937
  180. package/registry/components/sheet.tsx +305 -305
  181. package/registry/components/sidebar.tsx +1535 -1433
  182. package/registry/components/skeleton.css +54 -54
  183. package/registry/components/skeleton.tsx +482 -482
  184. package/registry/components/slider.tsx +380 -380
  185. package/registry/components/social-button.tsx +387 -387
  186. package/registry/components/spinner.tsx +78 -78
  187. package/registry/components/table-elements.tsx +287 -128
  188. package/registry/components/tabs.css +246 -222
  189. package/registry/components/tabs.tsx +245 -241
  190. package/registry/components/tag.tsx +423 -423
  191. package/registry/components/textarea.tsx +610 -610
  192. package/registry/components/toast.tsx +136 -136
  193. package/registry/components/toggle.tsx +256 -256
  194. package/registry/components/toolbar.tsx +539 -539
  195. package/registry/components/tooltip.tsx +433 -433
  196. package/registry/examples/alert-demo.tsx +34 -34
  197. package/registry/examples/alert-dialog-demo.tsx +42 -42
  198. package/registry/examples/app-header-demo.tsx +40 -0
  199. package/registry/examples/aspect-ratio-demo.tsx +11 -11
  200. package/registry/examples/attribute-demo.tsx +65 -65
  201. package/registry/examples/autocomplete-demo.tsx +109 -109
  202. package/registry/examples/avatar-demo.tsx +132 -132
  203. package/registry/examples/badge-demo.tsx +69 -69
  204. package/registry/examples/button-demo.tsx +86 -86
  205. package/registry/examples/button-group-demo.tsx +63 -63
  206. package/registry/examples/card-demo.tsx +86 -86
  207. package/registry/examples/carousel-demo.tsx +43 -43
  208. package/registry/examples/chart-demo.tsx +18 -18
  209. package/registry/examples/checkbox-demo.tsx +62 -62
  210. package/registry/examples/collapsible-demo.tsx +16 -16
  211. package/registry/examples/collection-filter-bar-demo.tsx +135 -135
  212. package/registry/examples/command-demo.tsx +42 -42
  213. package/registry/examples/command-palette-demo.tsx +235 -235
  214. package/registry/examples/context-menu-demo.tsx +29 -29
  215. package/registry/examples/control-density-contract-demo.tsx +65 -65
  216. package/registry/examples/date-picker-demo.tsx +127 -127
  217. package/registry/examples/divider-demo.tsx +17 -17
  218. package/registry/examples/expanded/activity-heatmap-demo.tsx +29 -29
  219. package/registry/examples/expanded/banner-demo.tsx +48 -48
  220. package/registry/examples/expanded/breadcrumbs-demo.tsx +59 -59
  221. package/registry/examples/expanded/empty-state-demo.tsx +39 -39
  222. package/registry/examples/expanded/file-upload-demo.tsx +60 -60
  223. package/registry/examples/expanded/onboarding-step-demo.tsx +11 -11
  224. package/registry/examples/expanded/slideout-demo.tsx +15 -15
  225. package/registry/examples/expanded/steps-demo.tsx +29 -29
  226. package/registry/examples/expanded/tabs-demo.tsx +13 -13
  227. package/registry/examples/expanded/timeline-demo.tsx +18 -18
  228. package/registry/examples/field-demo.tsx +51 -51
  229. package/registry/examples/hover-card-demo.tsx +23 -23
  230. package/registry/examples/input-actions-demo.tsx +36 -36
  231. package/registry/examples/input-demo.tsx +87 -87
  232. package/registry/examples/input-group-demo.tsx +16 -16
  233. package/registry/examples/input-otp-demo.tsx +72 -72
  234. package/registry/examples/item-demo.tsx +46 -46
  235. package/registry/examples/kbd-demo.tsx +12 -12
  236. package/registry/examples/label-demo.tsx +20 -20
  237. package/registry/examples/menu-demo.tsx +122 -122
  238. package/registry/examples/menubar-demo.tsx +34 -34
  239. package/registry/examples/modal-demo.tsx +74 -74
  240. package/registry/examples/native-select-demo.tsx +16 -16
  241. package/registry/examples/navigation-menu-demo.tsx +29 -29
  242. package/registry/examples/pagination-demo.tsx +20 -20
  243. package/registry/examples/popover-demo.tsx +547 -547
  244. package/registry/examples/progress-demo.tsx +37 -37
  245. package/registry/examples/progress-slider-demo.tsx +29 -29
  246. package/registry/examples/radio-card-demo.tsx +51 -51
  247. package/registry/examples/radio-group-demo.tsx +62 -62
  248. package/registry/examples/resizable-demo.tsx +22 -22
  249. package/registry/examples/results-toolbar-demo.tsx +44 -44
  250. package/registry/examples/scroll-area-demo.tsx +15 -15
  251. package/registry/examples/segmented-control-demo.tsx +39 -39
  252. package/registry/examples/select-demo.tsx +87 -87
  253. package/registry/examples/sheet-demo.tsx +47 -47
  254. package/registry/examples/sidebar-demo.tsx +101 -101
  255. package/registry/examples/slider-demo.tsx +31 -31
  256. package/registry/examples/social-button-demo.tsx +61 -61
  257. package/registry/examples/spinner-demo.tsx +59 -59
  258. package/registry/examples/tabs-demo.tsx +13 -13
  259. package/registry/examples/tag-demo.tsx +29 -29
  260. package/registry/examples/textarea-demo.tsx +79 -79
  261. package/registry/examples/toast-demo.tsx +35 -35
  262. package/registry/examples/toggle-demo.tsx +59 -59
  263. package/registry/examples/tooltip-demo.tsx +115 -115
  264. package/registry/guidance/USAGE.md +27 -27
  265. package/registry/hooks/use-direction.ts +207 -207
  266. package/registry/index.json +387 -17
  267. package/registry/styles/globals.css +46 -0
  268. package/registry.json +24 -2
  269. package/schema/config.schema.json +51 -51
  270. package/schema/registry.schema.json +194 -194
  271. package/schema/tokens.schema.json +167 -167
  272. package/src/cli/command-line.js +194 -194
  273. package/src/cli/config-editors.js +9 -9
  274. package/src/cli/doctor.js +399 -399
  275. package/src/cli/file-transaction.js +302 -302
  276. package/src/cli/global-css.js +153 -153
  277. package/src/cli/index.js +1002 -1002
  278. package/src/cli/install-plan.js +592 -592
  279. package/src/cli/install-receipt.js +171 -171
  280. package/src/cli/jsonc.js +203 -203
  281. package/src/cli/package-install-state.js +254 -254
  282. package/src/cli/package-manager.js +238 -238
  283. package/src/cli/package-plan.js +185 -185
  284. package/src/cli/package-version.js +97 -97
  285. package/src/cli/registry-query.js +207 -207
  286. package/src/cli/reporting.js +55 -55
  287. package/src/cli/schema-validation.js +19 -19
  288. package/src/cli/source-scanner.js +686 -686
  289. package/src/cli/vite-config.js +478 -478
  290. package/tokens/banhaten.tokens.json +184 -0
@@ -456,6 +456,7 @@
456
456
  "--bh-border-focus-danger",
457
457
  "--bh-border-strong",
458
458
  "--bh-border-subtle",
459
+ "--bh-border-width-default",
459
460
  "--bh-content-accent-amber-default",
460
461
  "--bh-content-accent-amber-strong",
461
462
  "--bh-content-accent-blue-default",
@@ -632,6 +633,13 @@
632
633
  "dependencies": {
633
634
  "class-variance-authority": "^0.7.1"
634
635
  },
636
+ "props": {
637
+ "AttributeList.density": {
638
+ "type": "\"compact\" | \"default\" | \"comfortable\"",
639
+ "default": "default",
640
+ "description": "compact and default set the row padding (8px, 16px). comfortable is the app-shell detail row: no row padding, rows 16px apart, a 14/20 label in a 176px column and 16px before the value."
641
+ }
642
+ },
635
643
  "parts": [
636
644
  "AttributeCard",
637
645
  "AttributeHeader",
@@ -686,6 +694,7 @@
686
694
  "examples/attribute-demo.tsx"
687
695
  ],
688
696
  "tokens": [
697
+ "--bh-attribute-comfortable-label-width",
689
698
  "--bh-attribute-header-icon-size",
690
699
  "--bh-attribute-header-icon-size-lg",
691
700
  "--bh-attribute-label-width",
@@ -704,6 +713,7 @@
704
713
  "--bh-space-5xl-24",
705
714
  "--bh-space-6xl-32",
706
715
  "--bh-space-md-8",
716
+ "--bh-space-none",
707
717
  "--bh-space-sm-6",
708
718
  "--bh-space-xl-12",
709
719
  "--bh-space-xs-4",
@@ -715,6 +725,10 @@
715
725
  "--bh-text-body-md-regular-font-weight",
716
726
  "--bh-text-body-md-regular-letter-spacing",
717
727
  "--bh-text-body-md-regular-line-height",
728
+ "--bh-text-body-sm-regular-font-size",
729
+ "--bh-text-body-sm-regular-font-weight",
730
+ "--bh-text-body-sm-regular-letter-spacing",
731
+ "--bh-text-body-sm-regular-line-height",
718
732
  "--bh-text-heading-sm-medium-font-size",
719
733
  "--bh-text-heading-sm-medium-font-weight",
720
734
  "--bh-text-heading-sm-medium-letter-spacing",
@@ -911,6 +925,25 @@
911
925
  "registryDependencies": [
912
926
  "button"
913
927
  ],
928
+ "sizes": [
929
+ "default",
930
+ "comfortable"
931
+ ],
932
+ "defaults": {
933
+ "sizes": "default"
934
+ },
935
+ "props": {
936
+ "Card.size": {
937
+ "type": "\"default\" | \"comfortable\"",
938
+ "default": "default",
939
+ "description": "comfortable is the panel inside an app shell: the same surface and 1px inset edge with a 12px radius instead of the library card's 16px."
940
+ },
941
+ "CardSurface.size": {
942
+ "type": "\"default\" | \"comfortable\"",
943
+ "default": "default",
944
+ "description": "The same sizes as Card, for compositions that bring their own layout."
945
+ }
946
+ },
914
947
  "parts": [
915
948
  "Card",
916
949
  "CardSurface",
@@ -972,6 +1005,7 @@
972
1005
  "--bh-card-actions-max-width",
973
1006
  "--bh-card-bg",
974
1007
  "--bh-card-border",
1008
+ "--bh-card-comfortable-radius",
975
1009
  "--bh-card-content-padding",
976
1010
  "--bh-card-desktop-content-padding",
977
1011
  "--bh-card-desktop-full-height",
@@ -1676,7 +1710,8 @@
1676
1710
  "dependencies": {
1677
1711
  "@radix-ui/react-dropdown-menu": "^2.1.17",
1678
1712
  "@radix-ui/react-slot": "^1.2.3",
1679
- "class-variance-authority": "^0.7.1"
1713
+ "class-variance-authority": "^0.7.1",
1714
+ "lucide-react": "^1.17.0"
1680
1715
  },
1681
1716
  "parts": [
1682
1717
  "Menu",
@@ -1700,6 +1735,8 @@
1700
1735
  "MenuItemBadge",
1701
1736
  "MenuItemSwitch",
1702
1737
  "MenuItemAction",
1738
+ "MenuRadioGroup",
1739
+ "MenuRadioItem",
1703
1740
  "MenuProgress",
1704
1741
  "MenuSeparator",
1705
1742
  "MenuLabel",
@@ -1727,6 +1764,8 @@
1727
1764
  "MenuPortal",
1728
1765
  "MenuPreview",
1729
1766
  "MenuProgress",
1767
+ "MenuRadioGroup",
1768
+ "MenuRadioItem",
1730
1769
  "MenuRoot",
1731
1770
  "MenuSeparator",
1732
1771
  "MenuSub",
@@ -1746,6 +1785,16 @@
1746
1785
  "type": "(event: Event) => void",
1747
1786
  "default": null,
1748
1787
  "description": "MenuItem selection handler. Uses Radix's native selection Event, not React's DOM text-selection event; call event.preventDefault() to keep toggle or multi-select menus open."
1788
+ },
1789
+ "onValueChange": {
1790
+ "type": "(value: string) => void",
1791
+ "default": null,
1792
+ "description": "MenuRadioGroup only. Receives the value of the MenuRadioItem that was chosen."
1793
+ },
1794
+ "value": {
1795
+ "type": "string",
1796
+ "default": null,
1797
+ "description": "MenuRadioGroup: the chosen value. MenuRadioItem: the value the item stands for; the item matching its group's value is checked, with role menuitemradio, aria-checked and a trailing check."
1749
1798
  }
1750
1799
  },
1751
1800
  "widths": [
@@ -1764,7 +1813,8 @@
1764
1813
  ],
1765
1814
  "states": [
1766
1815
  "default",
1767
- "disabled"
1816
+ "disabled",
1817
+ "checked"
1768
1818
  ],
1769
1819
  "rtl": {
1770
1820
  "inheritsDirection": true,
@@ -1792,6 +1842,7 @@
1792
1842
  "--bh-content-muted",
1793
1843
  "--bh-content-subtle",
1794
1844
  "--bh-control-default",
1845
+ "--bh-icon-stroke-200",
1795
1846
  "--bh-icon-stroke-300",
1796
1847
  "--bh-interactive-indicator-default",
1797
1848
  "--bh-interactive-outlined-default",
@@ -3808,6 +3859,7 @@
3808
3859
  "--bh-input-comfortable-height",
3809
3860
  "--bh-input-comfortable-padding-x",
3810
3861
  "--bh-input-content-gap",
3862
+ "--bh-input-content-padding-x",
3811
3863
  "--bh-input-helper-gap",
3812
3864
  "--bh-input-icon-size",
3813
3865
  "--bh-input-icon-slot-size",
@@ -3816,7 +3868,6 @@
3816
3868
  "--bh-input-inline-tags-gap",
3817
3869
  "--bh-input-label-gap",
3818
3870
  "--bh-input-lg-height",
3819
- "--bh-input-lg-padding-x",
3820
3871
  "--bh-input-md-height",
3821
3872
  "--bh-input-md-padding-x",
3822
3873
  "--bh-input-radius",
@@ -3826,6 +3877,7 @@
3826
3877
  "--bh-input-stepper-width",
3827
3878
  "--bh-input-tag-height",
3828
3879
  "--bh-input-tag-padding-x",
3880
+ "--bh-input-value-inset",
3829
3881
  "--bh-input-width",
3830
3882
  "--bh-interactive-input-default",
3831
3883
  "--bh-interactive-input-disabled",
@@ -4966,6 +5018,36 @@
4966
5018
  "default": false,
4967
5019
  "description": "Sets the initial rail state when SidebarProvider owns collapse state internally."
4968
5020
  },
5021
+ "size": {
5022
+ "type": "\"default\" | \"comfortable\"",
5023
+ "default": "default",
5024
+ "description": "Set on SidebarProvider. comfortable uses 40px rows 8px apart with body-md labels, 16px shell padding, a 24px section gap, a heading-md brand, and 20px group labels; the collapsed rail is unchanged."
5025
+ },
5026
+ "subtitle": {
5027
+ "type": "React.ReactNode",
5028
+ "default": "undefined",
5029
+ "description": "Adds a body-sm content-subtle line under the SidebarHeaderBrand name and switches the brand to a stacked layout."
5030
+ },
5031
+ "logo": {
5032
+ "type": "React.ReactNode | false",
5033
+ "default": "Sparkles glyph",
5034
+ "description": "Replaces the SidebarHeaderBrand mark; false renders a text-only brand with no logo slot."
5035
+ },
5036
+ "divider": {
5037
+ "type": "boolean",
5038
+ "default": true,
5039
+ "description": "Draws the SidebarFooter top rule; false removes it for inset footer cards."
5040
+ },
5041
+ "avatar": {
5042
+ "type": "React.ReactNode | false",
5043
+ "default": "person glyph",
5044
+ "description": "Replaces the SidebarFooterUser avatar; false hides the slot while expanded. The collapsed rail always shows a glyph."
5045
+ },
5046
+ "trailingIcon": {
5047
+ "type": "React.ReactNode | false",
5048
+ "default": "part-specific",
5049
+ "description": "Trailing glyph on menu rows and the footer user; false hides the footer user's chevron."
5050
+ },
4969
5051
  "showIdentityPreview": {
4970
5052
  "type": "boolean",
4971
5053
  "default": true,
@@ -4977,9 +5059,9 @@
4977
5059
  "description": "Places Sidebar on the logical start or end edge and selects the matching logical border."
4978
5060
  },
4979
5061
  "variant": {
4980
- "type": "SidebarMenuButtonVariant | SidebarWorkspaceVariant | \"default\" | \"supporting-text\"",
5062
+ "type": "SidebarMenuButtonVariant | SidebarWorkspaceVariant | \"default\" | \"supporting-text\" | \"card\"",
4981
5063
  "default": "part-specific",
4982
- "description": "Selects default/avatar/nested menu rows, action/card workspace headers, or default/supporting-text footers on the part that owns it."
5064
+ "description": "Selects default/avatar/nested menu rows, action/card workspace headers, or default/supporting-text/card footers on the part that owns it. The card footer is an inset bg-subtle block with a body-md name and body-sm role and no avatar or chevron unless passed."
4983
5065
  },
4984
5066
  "active": {
4985
5067
  "type": "boolean",
@@ -5042,20 +5124,25 @@
5042
5124
  "workspace actions",
5043
5125
  "workspace card",
5044
5126
  "default footer",
5045
- "supporting-text footer"
5127
+ "supporting-text footer",
5128
+ "card footer",
5129
+ "comfortable size"
5046
5130
  ],
5047
5131
  "features": [
5048
5132
  "280px expanded and 48px collapsed shells",
5133
+ "comfortable size with 40px rows, 8px row gap, and body-md labels",
5049
5134
  "controlled collapse",
5050
5135
  "uncontrolled collapse",
5051
5136
  "brand header with search and collapse actions",
5137
+ "text-only brand with a stacked subtitle",
5052
5138
  "workspace action and card headers",
5053
5139
  "visible collapsed-header expand action",
5054
5140
  "default, avatar, Level 2, and Level 2 line menu rows",
5055
5141
  "supporting text, count badge, and trailing action slots",
5056
- "group labels with disclosure and icon actions",
5142
+ "group labels with disclosure, icon actions, and a tokenized label color",
5057
5143
  "four-level tree navigation",
5058
- "supporting-text and bordered user footers",
5144
+ "supporting-text, bordered, and inset card user footers",
5145
+ "divider-free footer",
5059
5146
  "collapsed footer identity preview on hover and keyboard focus",
5060
5147
  "tokenized staged expand and collapse motion",
5061
5148
  "reduced-motion fallback",
@@ -5093,7 +5180,15 @@
5093
5180
  "--bh-sidebar-bg-collapsed",
5094
5181
  "--bh-sidebar-border",
5095
5182
  "--bh-sidebar-brand-height",
5183
+ "--bh-sidebar-comfortable-brand-padding",
5184
+ "--bh-sidebar-comfortable-group-label-height",
5185
+ "--bh-sidebar-comfortable-item-gap",
5186
+ "--bh-sidebar-comfortable-item-height",
5187
+ "--bh-sidebar-comfortable-label-padding",
5188
+ "--bh-sidebar-comfortable-padding",
5189
+ "--bh-sidebar-comfortable-section-gap",
5096
5190
  "--bh-sidebar-compact-control-size",
5191
+ "--bh-sidebar-group-label-content",
5097
5192
  "--bh-sidebar-header-action-size",
5098
5193
  "--bh-sidebar-icon-size",
5099
5194
  "--bh-sidebar-icon-size-collapsed",
@@ -5115,6 +5210,8 @@
5115
5210
  "--bh-sidebar-rail-width",
5116
5211
  "--bh-sidebar-tree-indent-step",
5117
5212
  "--bh-sidebar-tree-item-height",
5213
+ "--bh-sidebar-user-card-bg",
5214
+ "--bh-sidebar-user-card-bg-hover",
5118
5215
  "--bh-sidebar-user-preview-gap",
5119
5216
  "--bh-sidebar-user-preview-height",
5120
5217
  "--bh-sidebar-user-preview-width",
@@ -5131,6 +5228,7 @@
5131
5228
  "--bh-space-8xl-48",
5132
5229
  "--bh-space-lg-10",
5133
5230
  "--bh-space-md-8",
5231
+ "--bh-space-none",
5134
5232
  "--bh-space-sm-6",
5135
5233
  "--bh-space-xl-12",
5136
5234
  "--bh-space-xs-4",
@@ -5144,6 +5242,13 @@
5144
5242
  "--bh-text-body-3xs-semibold-font-weight",
5145
5243
  "--bh-text-body-3xs-semibold-letter-spacing",
5146
5244
  "--bh-text-body-3xs-semibold-line-height",
5245
+ "--bh-text-body-md-medium-font-size",
5246
+ "--bh-text-body-md-medium-font-weight",
5247
+ "--bh-text-body-md-medium-letter-spacing",
5248
+ "--bh-text-body-md-medium-line-height",
5249
+ "--bh-text-body-md-regular-font-size",
5250
+ "--bh-text-body-md-regular-letter-spacing",
5251
+ "--bh-text-body-md-regular-line-height",
5147
5252
  "--bh-text-body-sm-medium-font-size",
5148
5253
  "--bh-text-body-sm-medium-font-weight",
5149
5254
  "--bh-text-body-sm-medium-letter-spacing",
@@ -5161,6 +5266,10 @@
5161
5266
  "--bh-text-body-xs-regular-letter-spacing",
5162
5267
  "--bh-text-body-xs-regular-line-height",
5163
5268
  "--bh-text-body-xs-semibold-font-weight",
5269
+ "--bh-text-heading-md-semibold-font-size",
5270
+ "--bh-text-heading-md-semibold-font-weight",
5271
+ "--bh-text-heading-md-semibold-letter-spacing",
5272
+ "--bh-text-heading-md-semibold-line-height",
5164
5273
  "--bh-z-overlay",
5165
5274
  "--elevation-button-focus",
5166
5275
  "--elevation-component-default"
@@ -5181,6 +5290,126 @@
5181
5290
  "examples/sidebar-demo.tsx"
5182
5291
  ]
5183
5292
  },
5293
+ "app-header": {
5294
+ "description": "Workspace bar above page content with a flexible location region, a search landmark, and flush icon or text actions that keep their design footprint while exposing 40px pointer targets.",
5295
+ "dependencies": {
5296
+ "@radix-ui/react-slot": "^1.2.3"
5297
+ },
5298
+ "registryDependencies": [],
5299
+ "parts": [
5300
+ "AppHeader",
5301
+ "AppHeaderStart",
5302
+ "AppHeaderEnd",
5303
+ "AppHeaderSearch",
5304
+ "AppHeaderAction"
5305
+ ],
5306
+ "supportedExports": [
5307
+ {
5308
+ "source": "components/app-header.tsx",
5309
+ "values": [
5310
+ "AppHeader",
5311
+ "AppHeaderAction",
5312
+ "AppHeaderEnd",
5313
+ "AppHeaderSearch",
5314
+ "AppHeaderStart"
5315
+ ]
5316
+ }
5317
+ ],
5318
+ "props": {
5319
+ "AppHeaderAction.icon": {
5320
+ "type": "ReactNode",
5321
+ "default": null,
5322
+ "description": "Icon content. Without children the action is icon-only and needs aria-label; the icon occupies 24px and the pointer target is 40px."
5323
+ },
5324
+ "AppHeaderAction.size": {
5325
+ "type": "\"sm\" | \"md\"",
5326
+ "default": "md",
5327
+ "description": "md uses body-md medium default content. sm uses body-sm medium subtle content and reserves 32px at the end edge, so a short label such as a language code can change without moving earlier controls."
5328
+ },
5329
+ "AppHeaderAction.asChild": {
5330
+ "type": "boolean",
5331
+ "default": false,
5332
+ "description": "Renders the action styles on the child element, such as a link."
5333
+ },
5334
+ "AppHeaderSearch.role": {
5335
+ "type": "string",
5336
+ "default": "search",
5337
+ "description": "Search landmark role on the wrapping form. Nest an Input with an accessible name; the header sets its width to the 320px search token."
5338
+ }
5339
+ },
5340
+ "defaults": {
5341
+ "sizes": "md"
5342
+ },
5343
+ "sizes": [
5344
+ "md",
5345
+ "sm"
5346
+ ],
5347
+ "features": [
5348
+ "72px bar with 24px inline padding, a 24px item gap, and a subtle bottom border",
5349
+ "flexible start region for Breadcrumbs or a location label in body-sm medium subtle content",
5350
+ "Breadcrumbs inside the header render their current item in the location color",
5351
+ "search landmark that sizes a nested Input to 320px",
5352
+ "flush icon actions with a 24px footprint and a 40px target",
5353
+ "flush text actions in md and sm sizes",
5354
+ "logical layout that mirrors in RTL"
5355
+ ],
5356
+ "recommendedFor": [
5357
+ "The bar above page content in a sidebar workspace, holding the location trail, workspace search, notifications, help, or language",
5358
+ "Product shells that need workspace tools aligned to the page content edge"
5359
+ ],
5360
+ "avoidWhen": [
5361
+ "Page titles, descriptions, and page actions; use Page Header inside the page",
5362
+ "Marketing or public site navigation with menus; use Navigation Menu",
5363
+ "Toolbars that act on a selection or a document; use Toolbar"
5364
+ ],
5365
+ "rtl": {
5366
+ "inheritsDirection": true,
5367
+ "layout": "Start and End regions, the inline padding, and the reserved width of small text actions use logical properties and mirror with inherited direction.",
5368
+ "semantics": "The root is a header element. AppHeaderSearch is a search landmark. Icon-only actions require aria-label."
5369
+ },
5370
+ "files": [
5371
+ {
5372
+ "source": "components/app-header.tsx",
5373
+ "target": "{{ui}}/app-header.tsx"
5374
+ }
5375
+ ],
5376
+ "examples": [
5377
+ "examples/app-header-demo.tsx"
5378
+ ],
5379
+ "tokens": [
5380
+ "--bh-app-header-action-bg-hover",
5381
+ "--bh-app-header-action-content",
5382
+ "--bh-app-header-action-hit-inset",
5383
+ "--bh-app-header-action-radius",
5384
+ "--bh-app-header-action-sm-content",
5385
+ "--bh-app-header-action-sm-min-width",
5386
+ "--bh-app-header-bg",
5387
+ "--bh-app-header-border",
5388
+ "--bh-app-header-gap",
5389
+ "--bh-app-header-height",
5390
+ "--bh-app-header-icon-size",
5391
+ "--bh-app-header-location-content",
5392
+ "--bh-app-header-padding-x",
5393
+ "--bh-app-header-search-width",
5394
+ "--bh-app-header-start-gap",
5395
+ "--bh-app-header-start-min-width",
5396
+ "--bh-border-width-default",
5397
+ "--bh-breadcrumbs-current-content",
5398
+ "--bh-content-default",
5399
+ "--bh-content-disabled",
5400
+ "--bh-input-width",
5401
+ "--bh-space-xs-4",
5402
+ "--bh-text-body-md-medium-font-size",
5403
+ "--bh-text-body-md-medium-font-weight",
5404
+ "--bh-text-body-md-medium-letter-spacing",
5405
+ "--bh-text-body-md-medium-line-height",
5406
+ "--bh-text-body-sm-medium-font-size",
5407
+ "--bh-text-body-sm-medium-font-weight",
5408
+ "--bh-text-body-sm-medium-letter-spacing",
5409
+ "--bh-text-body-sm-medium-line-height",
5410
+ "--elevation-button-focus"
5411
+ ]
5412
+ },
5184
5413
  "navigation-menu": {
5185
5414
  "description": "Radix NavigationMenu-backed top navigation with trigger, content, link, viewport, and indicator parts.",
5186
5415
  "dependencies": {
@@ -6559,6 +6788,23 @@
6559
6788
  "registryDependencies": [
6560
6789
  "button"
6561
6790
  ],
6791
+ "props": {
6792
+ "Alert.descriptionColor": {
6793
+ "type": "\"status\" | \"default\"",
6794
+ "default": "status",
6795
+ "description": "status sets the description in the status colour, as in the library; default sets it in content/default, as the ATS360 frames do."
6796
+ },
6797
+ "Alert.icon": {
6798
+ "type": "ReactNode",
6799
+ "default": null,
6800
+ "description": "Replaces the status icon in its 20px slot."
6801
+ },
6802
+ "Alert.isExpandable": {
6803
+ "type": "boolean",
6804
+ "default": false,
6805
+ "description": "Uses the expanded layout when the alert has a description or a visible action; otherwise it stays compact."
6806
+ }
6807
+ },
6562
6808
  "parts": [
6563
6809
  "Alert"
6564
6810
  ],
@@ -6866,7 +7112,7 @@
6866
7112
  ]
6867
7113
  },
6868
7114
  "breadcrumbs": {
6869
- "description": "Expanded breadcrumbs navigation with default, raised, icon, overflow, separator, and RTL variants.",
7115
+ "description": "Expanded breadcrumbs navigation with default, raised, icon, overflow, separator, small, and RTL variants.",
6870
7116
  "status": "expanded",
6871
7117
  "variants": [
6872
7118
  "default",
@@ -6883,6 +7129,10 @@
6883
7129
  "slash",
6884
7130
  "chevron"
6885
7131
  ],
7132
+ "sizes": [
7133
+ "md",
7134
+ "sm"
7135
+ ],
6886
7136
  "rtl": {
6887
7137
  "inheritsDirection": true,
6888
7138
  "layout": "The ordered trail follows inherited inline direction, and chevron separators mirror through :dir(rtl).",
@@ -6922,6 +7172,7 @@
6922
7172
  "--bh-bg-raised",
6923
7173
  "--bh-border-focus",
6924
7174
  "--bh-border-subtle",
7175
+ "--bh-breadcrumbs-current-content",
6925
7176
  "--bh-content-default",
6926
7177
  "--bh-content-subtle",
6927
7178
  "--bh-focus-ring-width",
@@ -6945,7 +7196,11 @@
6945
7196
  "--bh-text-base-letter-spacing",
6946
7197
  "--bh-text-body-2xs-regular-line-height",
6947
7198
  "--bh-text-body-md-font-size",
6948
- "--bh-text-body-md-line-height"
7199
+ "--bh-text-body-md-line-height",
7200
+ "--bh-text-body-sm-medium-font-size",
7201
+ "--bh-text-body-sm-medium-font-weight",
7202
+ "--bh-text-body-sm-medium-letter-spacing",
7203
+ "--bh-text-body-sm-medium-line-height"
6949
7204
  ]
6950
7205
  },
6951
7206
  "file-upload": {
@@ -7101,8 +7356,44 @@
7101
7356
  "status": "expanded",
7102
7357
  "sizes": [
7103
7358
  "sm",
7104
- "lg"
7359
+ "lg",
7360
+ "comfortable"
7105
7361
  ],
7362
+ "defaults": {
7363
+ "sizes": "sm"
7364
+ },
7365
+ "props": {
7366
+ "Table.size": {
7367
+ "type": "\"sm\" | \"lg\" | \"comfortable\"",
7368
+ "default": "sm",
7369
+ "description": "sm and lg are 48px and 56px rows; sm uses body-sm text and lg uses body-md, as in the Table item 1.2 sm and lg cells. comfortable follows Table item 1.2: 44px headers in body-sm medium on the table-header fill, 64px rows with 8px cells and body-md text, no row rules, and a 12px radius."
7370
+ },
7371
+ "TableItem.caption": {
7372
+ "type": "string",
7373
+ "default": null,
7374
+ "description": "Second line under the label on text, avatarText, brandLogoText, payment and image items (Table item 1.2 hasCaption): body-2xs in content/subtle with no gap. Use it in lg or comfortable rows; the two lines fill 40px of a 56px row. Search matches captions; sorting uses the label."
7375
+ },
7376
+ "TableRoot.size": {
7377
+ "type": "\"comfortable\"",
7378
+ "default": null,
7379
+ "description": "Applies the comfortable spec to TableHead and TableCell. Without a size the owned elements stay unstyled."
7380
+ },
7381
+ "TableContainer": {
7382
+ "type": "div",
7383
+ "default": null,
7384
+ "description": "Frame for the owned elements: 12px radius, default background, and a 1px subtle border drawn inside the edge. The table scrolls horizontally inside it."
7385
+ },
7386
+ "TableCellText": {
7387
+ "type": "span",
7388
+ "default": null,
7389
+ "description": "Text content for an owned TableCell: children are the label, caption adds the second line, leading adds an icon or avatar 6px before the text, and tone (default | subtle) and weight (regular | medium) set the label. The label keeps the cell text size; use TableCellLink when it opens a record."
7390
+ },
7391
+ "TableCellLink": {
7392
+ "type": "button",
7393
+ "default": null,
7394
+ "description": "A cell label that opens a record: it keeps the cell text style and colour, sits flush with the cell padding, underlines on hover and focus, and shows the focus ring 2px outside the text. Renders a button, or its child (such as an anchor) with asChild. Use it as the TableCellText label instead of a padded Button."
7395
+ }
7396
+ },
7106
7397
  "states": [
7107
7398
  "default",
7108
7399
  "selected",
@@ -7118,16 +7409,22 @@
7118
7409
  "features": [
7119
7410
  "measured DataTable pagination captions",
7120
7411
  "explicit DataTable pagination message catalogs",
7121
- "safe row-key cell fallback"
7412
+ "safe row-key cell fallback",
7413
+ "comfortable size with 44px headers, 64px rows, 8px cells, body-md text, and no row rules",
7414
+ "TableContainer frame with a 12px radius and an inside border",
7415
+ "comfortable size on the owned table elements through TableRoot size",
7416
+ "line + subline cells: an optional caption under text, avatarText, brandLogoText, payment and image items, and TableCellText for the owned elements",
7417
+ "TableCellLink for flush record links in owned cells"
7122
7418
  ],
7123
7419
  "rtl": {
7124
7420
  "inheritsDirection": true,
7125
7421
  "layout": "Headers, cells, search/filter tools, selection, pagination, and actions inherit direction and use logical alignment.",
7126
- "textDirection": "Each avatarText name and caption uses dir=\"auto\" to resolve its own content direction, so ellipsis preserves the identifying start without changing the mirrored avatar layout.",
7422
+ "textDirection": "Each label and caption in a line + subline cell (avatarText, captioned items and TableCellText) uses dir=\"auto\" to resolve its own content direction, so ellipsis preserves the identifying start without changing the mirrored cell layout.",
7127
7423
  "semantics": "Sortable headers are owned Buttons, selection uses Checkbox, progress cells are named, and row actions expose accessible labels.",
7128
7424
  "narrowContainers": "The toolbar wraps and the table owns local horizontal scrolling instead of overlapping controls or overflowing the page."
7129
7425
  },
7130
7426
  "dependencies": {
7427
+ "@radix-ui/react-slot": "^1.2.3",
7131
7428
  "lucide-react": "^1.17.0"
7132
7429
  },
7133
7430
  "registryDependencies": [
@@ -7146,12 +7443,15 @@
7146
7443
  "Table",
7147
7444
  "DataTable",
7148
7445
  "DataTableSurface",
7446
+ "TableContainer",
7149
7447
  "TableRoot",
7150
7448
  "TableHeader",
7151
7449
  "TableBody",
7152
7450
  "TableRowElement",
7153
7451
  "TableHead",
7154
- "TableCell"
7452
+ "TableCell",
7453
+ "TableCellText",
7454
+ "TableCellLink"
7155
7455
  ],
7156
7456
  "supportedExports": [
7157
7457
  {
@@ -7167,6 +7467,9 @@
7167
7467
  "DataTableSurface",
7168
7468
  "TableBody",
7169
7469
  "TableCell",
7470
+ "TableCellLink",
7471
+ "TableCellText",
7472
+ "TableContainer",
7170
7473
  "TableHead",
7171
7474
  "TableHeader",
7172
7475
  "TableRoot",
@@ -7216,6 +7519,7 @@
7216
7519
  "--bh-border-default",
7217
7520
  "--bh-border-focus",
7218
7521
  "--bh-border-subtle",
7522
+ "--bh-border-width-default",
7219
7523
  "--bh-content-accent-amber-strong",
7220
7524
  "--bh-content-accent-fuchsia-strong",
7221
7525
  "--bh-content-brand-default",
@@ -7231,6 +7535,8 @@
7231
7535
  "--bh-easing-standard",
7232
7536
  "--bh-focus-ring-width",
7233
7537
  "--bh-font-family",
7538
+ "--bh-font-weight-medium",
7539
+ "--bh-font-weight-regular",
7234
7540
  "--bh-font-weight-semibold",
7235
7541
  "--bh-icon-size-default",
7236
7542
  "--bh-icon-slot-size-default",
@@ -7256,25 +7562,48 @@
7256
7562
  "--bh-space-7xl-40",
7257
7563
  "--bh-space-8xl-48",
7258
7564
  "--bh-space-md-8",
7565
+ "--bh-space-none",
7259
7566
  "--bh-space-sm-6",
7260
7567
  "--bh-space-xl-12",
7261
7568
  "--bh-space-xs-4",
7262
7569
  "--bh-space-xxs-2",
7263
7570
  "--bh-space-xxxs-1",
7571
+ "--bh-table-caption-content",
7572
+ "--bh-table-cell-text-gap",
7573
+ "--bh-table-comfortable-cell-content",
7574
+ "--bh-table-comfortable-cell-padding-x",
7575
+ "--bh-table-comfortable-header-bg",
7576
+ "--bh-table-comfortable-header-content",
7577
+ "--bh-table-comfortable-header-height",
7578
+ "--bh-table-comfortable-min-width",
7579
+ "--bh-table-comfortable-radius",
7580
+ "--bh-table-comfortable-row-height",
7581
+ "--bh-table-container-bg",
7582
+ "--bh-table-container-border",
7583
+ "--bh-table-container-radius",
7264
7584
  "--bh-table-min-width",
7265
7585
  "--bh-table-selection-column-min-width",
7266
7586
  "--bh-text-base-letter-spacing",
7267
7587
  "--bh-text-body-2xs-regular-font-size",
7588
+ "--bh-text-body-2xs-regular-font-weight",
7589
+ "--bh-text-body-2xs-regular-letter-spacing",
7268
7590
  "--bh-text-body-2xs-regular-line-height",
7269
7591
  "--bh-text-body-3xs-regular-font-size",
7270
7592
  "--bh-text-body-3xs-regular-line-height",
7271
7593
  "--bh-text-body-lg-semibold-font-size",
7272
7594
  "--bh-text-body-lg-semibold-font-weight",
7273
7595
  "--bh-text-body-lg-semibold-line-height",
7596
+ "--bh-text-body-md-regular-font-size",
7597
+ "--bh-text-body-md-regular-font-weight",
7598
+ "--bh-text-body-md-regular-letter-spacing",
7599
+ "--bh-text-body-md-regular-line-height",
7274
7600
  "--bh-text-body-md-semibold-font-size",
7275
7601
  "--bh-text-body-md-semibold-font-weight",
7276
7602
  "--bh-text-body-md-semibold-line-height",
7603
+ "--bh-text-body-sm-medium-font-size",
7277
7604
  "--bh-text-body-sm-medium-font-weight",
7605
+ "--bh-text-body-sm-medium-letter-spacing",
7606
+ "--bh-text-body-sm-medium-line-height",
7278
7607
  "--bh-text-body-sm-regular-font-size",
7279
7608
  "--bh-text-body-sm-regular-font-weight",
7280
7609
  "--bh-text-body-sm-regular-line-height",
@@ -7436,6 +7765,40 @@
7436
7765
  "page-header": {
7437
7766
  "description": "Expanded page header composition with breadcrumbs, metadata, description copy, action groups, responsive layout, and content-safe scrollable local tabs.",
7438
7767
  "status": "expanded",
7768
+ "sizes": [
7769
+ "default",
7770
+ "comfortable"
7771
+ ],
7772
+ "defaults": {
7773
+ "sizes": "default"
7774
+ },
7775
+ "props": {
7776
+ "PageHeader.size": {
7777
+ "type": "\"default\" | \"comfortable\"",
7778
+ "default": "default",
7779
+ "description": "comfortable is the page heading inside an app shell whose header carries the breadcrumbs: no block padding, 8px between title and description, 24px between copy and actions, 12px between actions, 40px action Buttons with a 160px minimum width (176px for primary), and no icon or tabs unless passed."
7780
+ },
7781
+ "PageHeader.actions": {
7782
+ "type": "PageHeaderAction[] | ReactNode | false",
7783
+ "default": "[]",
7784
+ "description": "Action data renders secondary Buttons at the header density; pass your own nodes for primary actions or other controls."
7785
+ },
7786
+ "PageHeader.description": {
7787
+ "type": "ReactNode",
7788
+ "default": null,
7789
+ "description": "Inline description content under the title, in body-md and content/subtle."
7790
+ },
7791
+ "PageHeader.children": {
7792
+ "type": "ReactNode",
7793
+ "default": null,
7794
+ "description": "Supporting content under the description, such as status badges, in a wrapping row with 8px gaps."
7795
+ },
7796
+ "PageHeader.title": {
7797
+ "type": "ReactNode",
7798
+ "default": null,
7799
+ "description": "Heading content in heading-md semibold (24/28); inline content such as a record name and its type is allowed."
7800
+ }
7801
+ },
7439
7802
  "states": [
7440
7803
  "default",
7441
7804
  "without-icon",
@@ -7453,7 +7816,9 @@
7453
7816
  "Breadcrumb-owned icon-slot visibility",
7454
7817
  "Button-owned default-density secondary action styling",
7455
7818
  "content-safe horizontal tab overflow",
7456
- "full-width tab opt-out"
7819
+ "full-width tab opt-out",
7820
+ "comfortable size for app-shell page headings",
7821
+ "custom action nodes and rich descriptions"
7457
7822
  ],
7458
7823
  "rtl": {
7459
7824
  "inheritsDirection": true,
@@ -7502,6 +7867,8 @@
7502
7867
  "--bh-focus-ring-width",
7503
7868
  "--bh-font-family",
7504
7869
  "--bh-icon-stroke-190",
7870
+ "--bh-page-header-comfortable-action-min-width",
7871
+ "--bh-page-header-comfortable-primary-action-min-width",
7505
7872
  "--bh-space-2xl-14",
7506
7873
  "--bh-space-3xl-16",
7507
7874
  "--bh-space-4xl-20",
@@ -7509,6 +7876,7 @@
7509
7876
  "--bh-space-7xl-40",
7510
7877
  "--bh-space-lg-10",
7511
7878
  "--bh-space-md-8",
7879
+ "--bh-space-xl-12",
7512
7880
  "--bh-space-xs-4",
7513
7881
  "--bh-space-xxs-2",
7514
7882
  "--bh-text-body-2xs-regular-font-size",
@@ -7772,7 +8140,8 @@
7772
8140
  "sizes": [
7773
8141
  "md",
7774
8142
  "sm",
7775
- "xs"
8143
+ "xs",
8144
+ "comfortable"
7776
8145
  ],
7777
8146
  "features": [
7778
8147
  "Radix keyboard behavior",
@@ -7781,7 +8150,8 @@
7781
8150
  "optional panels",
7782
8151
  "content-hug tabs",
7783
8152
  "content-safe full-width tabs",
7784
- "horizontal overflow without label overlap"
8153
+ "horizontal overflow without label overlap",
8154
+ "comfortable view-navigation size: 48px underline tabs 8px apart, inset indicator, no divider"
7785
8155
  ],
7786
8156
  "rtl": {
7787
8157
  "inheritsDirection": true,