banhaten 0.2.0 → 0.3.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 (101) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/README.md +1 -1
  3. package/docs/design-system/component-implementation-ownership-audit.md +244 -0
  4. package/docs/design-system/component-quality-audit-2026-08-20.md +223 -0
  5. package/docs/design-system/component-showcase-consistency-report.md +2 -0
  6. package/docs/design-system/components/README.md +1 -0
  7. package/docs/design-system/components/activity-feed.md +2 -0
  8. package/docs/design-system/components/activity-heatmap.md +73 -0
  9. package/docs/design-system/components/alert-dialog.md +1 -1
  10. package/docs/design-system/components/alert.md +2 -2
  11. package/docs/design-system/components/avatar.md +1 -1
  12. package/docs/design-system/components/badge.md +1 -1
  13. package/docs/design-system/components/banner.md +5 -1
  14. package/docs/design-system/components/breadcrumbs.md +3 -0
  15. package/docs/design-system/components/button-group.md +1 -0
  16. package/docs/design-system/components/button.md +1 -1
  17. package/docs/design-system/components/card.md +11 -3
  18. package/docs/design-system/components/catalog-components.md +3 -0
  19. package/docs/design-system/components/date-picker.md +1 -1
  20. package/docs/design-system/components/file-upload.md +4 -0
  21. package/docs/design-system/components/modal.md +1 -1
  22. package/docs/design-system/components/navigation-menu.md +1 -1
  23. package/docs/design-system/components/onboarding-step-list-item.md +1 -0
  24. package/docs/design-system/components/page-header.md +3 -1
  25. package/docs/design-system/components/pagination.md +1 -0
  26. package/docs/design-system/components/resizable.md +1 -1
  27. package/docs/design-system/components/scroll-area.md +7 -3
  28. package/docs/design-system/components/sidebar.md +3 -1
  29. package/docs/design-system/components/slideout.md +4 -1
  30. package/docs/design-system/components/steps.md +7 -2
  31. package/docs/design-system/components/table.md +25 -7
  32. package/docs/design-system/components/tag.md +1 -1
  33. package/docs/design-system/components/timeline.md +4 -1
  34. package/docs/design-system/components/toggle.md +1 -1
  35. package/docs/design-system/components/toolbar.md +1 -1
  36. package/docs/design-system/components/tooltip.md +1 -1
  37. package/docs/design-system/density-and-elevation.md +18 -1
  38. package/docs/design-system/gap-promotion-report.md +1 -67
  39. package/docs/design-system/launch-comparison-shadcn.md +10 -10
  40. package/package.json +3 -2
  41. package/registry/components/alert-dialog.tsx +1 -1
  42. package/registry/components/alert.tsx +15 -11
  43. package/registry/components/avatar.tsx +7 -3
  44. package/registry/components/badge.tsx +17 -17
  45. package/registry/components/button-group.tsx +3 -1
  46. package/registry/components/button.tsx +2 -2
  47. package/registry/components/card.tsx +19 -3
  48. package/registry/components/carousel.tsx +14 -0
  49. package/registry/components/command.tsx +37 -3
  50. package/registry/components/date-picker.tsx +67 -31
  51. package/registry/components/expanded/ActivityFeed.tsx +3 -7
  52. package/registry/components/expanded/ActivityHeatmap.tsx +64 -0
  53. package/registry/components/expanded/Banner.tsx +0 -1
  54. package/registry/components/expanded/Breadcrumbs.tsx +3 -0
  55. package/registry/components/expanded/CatalogComponentsShowcase.tsx +3 -4
  56. package/registry/components/expanded/CatalogDivider.tsx +3 -2
  57. package/registry/components/expanded/FileUpload.tsx +7 -5
  58. package/registry/components/expanded/OnboardingStepListItem.tsx +0 -2
  59. package/registry/components/expanded/PageHeader.tsx +35 -44
  60. package/registry/components/expanded/Slideout.tsx +18 -13
  61. package/registry/components/expanded/Steps.tsx +147 -9
  62. package/registry/components/expanded/Table.tsx +50 -18
  63. package/registry/components/expanded/Timeline.tsx +11 -24
  64. package/registry/components/expanded/activityFeed.css +8 -8
  65. package/registry/components/expanded/activityHeatmap.css +66 -0
  66. package/registry/components/expanded/banner.css +21 -11
  67. package/registry/components/expanded/breadcrumbs.css +1 -1
  68. package/registry/components/expanded/fileUpload.css +1 -1
  69. package/registry/components/expanded/onboardingStepListItem.css +2 -2
  70. package/registry/components/expanded/pageHeader.css +14 -11
  71. package/registry/components/expanded/slideout.css +3 -7
  72. package/registry/components/expanded/steps.css +75 -12
  73. package/registry/components/expanded/table.css +58 -67
  74. package/registry/components/expanded/timeline.css +17 -16
  75. package/registry/components/field.tsx +61 -8
  76. package/registry/components/menu.tsx +56 -6
  77. package/registry/components/modal.tsx +1 -1
  78. package/registry/components/navigation-menu.tsx +1 -1
  79. package/registry/components/pagination.css +36 -0
  80. package/registry/components/pagination.tsx +8 -6
  81. package/registry/components/progress-slider.tsx +1 -1
  82. package/registry/components/resizable.tsx +36 -2
  83. package/registry/components/scroll-area.tsx +30 -6
  84. package/registry/components/select.tsx +34 -11
  85. package/registry/components/sidebar.tsx +11 -5
  86. package/registry/components/social-button.tsx +12 -5
  87. package/registry/components/table-elements.tsx +128 -0
  88. package/registry/components/tabs.tsx +5 -10
  89. package/registry/components/tag.tsx +1 -1
  90. package/registry/components/toggle.tsx +2 -2
  91. package/registry/components/toolbar.tsx +5 -5
  92. package/registry/components/tooltip.tsx +1 -1
  93. package/registry/examples/avatar-demo.tsx +7 -4
  94. package/registry/examples/expanded/activity-heatmap-demo.tsx +29 -0
  95. package/registry/examples/expanded/breadcrumbs-demo.tsx +3 -3
  96. package/registry/examples/pagination-demo.tsx +5 -5
  97. package/registry/examples/sidebar-demo.tsx +4 -2
  98. package/registry/index.json +392 -33
  99. package/registry/styles/globals.css +68 -42
  100. package/registry.json +40 -3
  101. package/tokens/banhaten.tokens.json +165 -55
@@ -308,8 +308,8 @@
308
308
  "--bh-bg-neutral-subtle",
309
309
  "--bh-bg-success-default",
310
310
  "--bh-border-width-default",
311
+ "--bh-content-default",
311
312
  "--bh-content-on-brand",
312
- "--bh-content-subtle",
313
313
  "--bh-font-weight-semibold",
314
314
  "--bh-icon-stroke-210",
315
315
  "--bh-icon-stroke-240",
@@ -397,7 +397,7 @@
397
397
  "--bh-badge-outline-border-width",
398
398
  "--bh-bg-accent-amber-default",
399
399
  "--bh-bg-accent-amber-subtle",
400
- "--bh-bg-accent-blue-default",
400
+ "--bh-bg-accent-blue-bold",
401
401
  "--bh-bg-accent-blue-subtle",
402
402
  "--bh-bg-accent-fuchsia-default",
403
403
  "--bh-bg-accent-fuchsia-subtle",
@@ -409,11 +409,11 @@
409
409
  "--bh-bg-accent-purple-subtle",
410
410
  "--bh-bg-accent-red-default",
411
411
  "--bh-bg-accent-red-subtle",
412
- "--bh-bg-accent-rose-default",
412
+ "--bh-bg-accent-rose-bold",
413
413
  "--bh-bg-accent-rose-subtle",
414
414
  "--bh-bg-accent-sky-base",
415
415
  "--bh-bg-accent-sky-subtle",
416
- "--bh-bg-neutral-default",
416
+ "--bh-bg-neutral-bold",
417
417
  "--bh-bg-neutral-subtle",
418
418
  "--bh-border-accent-amber-strong",
419
419
  "--bh-border-accent-amber-subtle",
@@ -461,7 +461,7 @@
461
461
  "--bh-content-muted",
462
462
  "--bh-content-on-color",
463
463
  "--bh-content-on-light",
464
- "--bh-content-subtle",
464
+ "--bh-content-on-neutral",
465
465
  "--bh-interactive-ghost-default",
466
466
  "--bh-opacity-35",
467
467
  "--bh-radius-full",
@@ -553,7 +553,7 @@
553
553
  "--bh-bg-always-white",
554
554
  "--bh-bg-brand-subtle",
555
555
  "--bh-bg-danger-default",
556
- "--bh-bg-neutral-default",
556
+ "--bh-bg-neutral-bold",
557
557
  "--bh-bg-neutral-subtle",
558
558
  "--bh-border-brand-strong",
559
559
  "--bh-border-default",
@@ -564,7 +564,7 @@
564
564
  "--bh-content-default",
565
565
  "--bh-content-disabled",
566
566
  "--bh-content-muted",
567
- "--bh-content-on-color",
567
+ "--bh-content-on-neutral",
568
568
  "--bh-control-default",
569
569
  "--bh-control-md",
570
570
  "--bh-icon-stroke-200",
@@ -788,12 +788,6 @@
788
788
  ],
789
789
  "tokens": [
790
790
  "--bh-bg-always-white",
791
- "--bh-bg-success-bold",
792
- "--bh-bg-success-default",
793
- "--bh-bg-success-strong",
794
- "--bh-bg-warning-bold",
795
- "--bh-bg-warning-default",
796
- "--bh-bg-warning-strong",
797
791
  "--bh-border-brand-strong",
798
792
  "--bh-border-danger-strong",
799
793
  "--bh-border-default",
@@ -826,6 +820,8 @@
826
820
  "--bh-content-on-brand",
827
821
  "--bh-content-on-color",
828
822
  "--bh-content-on-light",
823
+ "--bh-content-on-success",
824
+ "--bh-content-on-warning",
829
825
  "--bh-control-default",
830
826
  "--bh-interactive-brand-default",
831
827
  "--bh-interactive-brand-disabled",
@@ -855,6 +851,12 @@
855
851
  "--bh-interactive-soft-disabled",
856
852
  "--bh-interactive-soft-hover",
857
853
  "--bh-interactive-soft-pressed",
854
+ "--bh-interactive-success-default",
855
+ "--bh-interactive-success-hover",
856
+ "--bh-interactive-success-pressed",
857
+ "--bh-interactive-warning-default",
858
+ "--bh-interactive-warning-hover",
859
+ "--bh-interactive-warning-pressed",
858
860
  "--bh-opacity-30",
859
861
  "--bh-space-none",
860
862
  "--bh-text-button-font-size",
@@ -880,6 +882,7 @@
880
882
  ],
881
883
  "parts": [
882
884
  "Card",
885
+ "CardSurface",
883
886
  "CardMedia",
884
887
  "CardFooter",
885
888
  "CardActions"
@@ -892,6 +895,7 @@
892
895
  "CardActions",
893
896
  "CardFooter",
894
897
  "CardMedia",
898
+ "CardSurface",
895
899
  "cardVariants"
896
900
  ]
897
901
  }
@@ -1200,6 +1204,10 @@
1200
1204
  "Connected action group",
1201
1205
  "Text formatting toggle group"
1202
1206
  ],
1207
+ "features": [
1208
+ "contained horizontal scrolling for narrow containers",
1209
+ "connected dividers remain intact while scrolling"
1210
+ ],
1203
1211
  "rtl": {
1204
1212
  "inheritsDirection": true,
1205
1213
  "itemSizing": "LTR and RTL default items keep their fixed Figma matrix widths. Icon-only groups keep the same square dimensions.",
@@ -1429,7 +1437,7 @@
1429
1437
  "--bh-toggle-icon-size-md",
1430
1438
  "--bh-toggle-icon-size-sm",
1431
1439
  "--bh-toggle-offset",
1432
- "--shadow-component-default",
1440
+ "--shadow-md",
1433
1441
  "--shadow-social-button-focus-ring"
1434
1442
  ]
1435
1443
  },
@@ -2042,7 +2050,7 @@
2042
2050
  "--bh-z-overlay",
2043
2051
  "--bh-z-raised",
2044
2052
  "--shadow-button-focus",
2045
- "--shadow-component-default"
2053
+ "--shadow-lg"
2046
2054
  ]
2047
2055
  },
2048
2056
  "popover": {
@@ -2360,7 +2368,7 @@
2360
2368
  "--bh-text-heading-sm-semibold-line-height",
2361
2369
  "--bh-z-overlay",
2362
2370
  "--shadow-button-focus",
2363
- "--shadow-component-default",
2371
+ "--shadow-lg",
2364
2372
  "--shadow-modal"
2365
2373
  ]
2366
2374
  },
@@ -2480,7 +2488,7 @@
2480
2488
  "--bh-text-heading-sm-semibold-letter-spacing",
2481
2489
  "--bh-text-heading-sm-semibold-line-height",
2482
2490
  "--bh-z-overlay",
2483
- "--shadow-component-default",
2491
+ "--shadow-lg",
2484
2492
  "--shadow-modal"
2485
2493
  ]
2486
2494
  },
@@ -2934,6 +2942,10 @@
2934
2942
  "spacing": "Uses logical flex direction, gap, and text direction so English and Arabic captions align naturally."
2935
2943
  },
2936
2944
  "files": [
2945
+ {
2946
+ "source": "components/pagination.css",
2947
+ "target": "{{ui}}/pagination.css"
2948
+ },
2937
2949
  {
2938
2950
  "source": "components/pagination.tsx",
2939
2951
  "target": "{{ui}}/pagination.tsx"
@@ -2942,6 +2954,11 @@
2942
2954
  "examples": [
2943
2955
  "examples/pagination-demo.tsx"
2944
2956
  ],
2957
+ "features": [
2958
+ "container-aware compact numeric pages",
2959
+ "contained horizontal control scrolling",
2960
+ "wrapping captions and summaries"
2961
+ ],
2945
2962
  "tokens": [
2946
2963
  "--bh-border-brand-strong",
2947
2964
  "--bh-content-disabled",
@@ -3166,6 +3183,7 @@
3166
3183
  "--bh-select-icon-slot-size",
3167
3184
  "--bh-select-trigger-padding-x",
3168
3185
  "--bh-select-width",
3186
+ "--bh-space-19xl-384",
3169
3187
  "--bh-space-3xl-16",
3170
3188
  "--bh-space-5xl-24",
3171
3189
  "--bh-space-md-8",
@@ -4591,6 +4609,7 @@
4591
4609
  }
4592
4610
  ],
4593
4611
  "features": [
4612
+ "standalone static surface",
4594
4613
  "controlled collapse",
4595
4614
  "uncontrolled collapse",
4596
4615
  "group labels",
@@ -4702,6 +4721,8 @@
4702
4721
  ],
4703
4722
  "tokens": [
4704
4723
  "--bh-bg-raised",
4724
+ "--bh-border-subtle",
4725
+ "--bh-border-width-default",
4705
4726
  "--bh-content-default",
4706
4727
  "--bh-content-disabled",
4707
4728
  "--bh-interactive-ghost-hover",
@@ -4749,7 +4770,10 @@
4749
4770
  "features": [
4750
4771
  "vertical scrollbar",
4751
4772
  "horizontal scrollbar",
4752
- "viewport clipping"
4773
+ "two-axis scrollbar composition",
4774
+ "viewport clipping",
4775
+ "keyboard-focusable viewport",
4776
+ "viewportProps escape hatch"
4753
4777
  ],
4754
4778
  "rtl": {
4755
4779
  "inheritsDirection": true,
@@ -4768,7 +4792,8 @@
4768
4792
  "--bh-border-default",
4769
4793
  "--bh-radius-full",
4770
4794
  "--bh-space-lg-10",
4771
- "--bh-space-xxs-2"
4795
+ "--bh-space-xxs-2",
4796
+ "--shadow-component-focus-ring"
4772
4797
  ]
4773
4798
  },
4774
4799
  "resizable": {
@@ -4821,7 +4846,8 @@
4821
4846
  "--bh-space-5xl-24",
4822
4847
  "--bh-space-6xl-32",
4823
4848
  "--bh-z-raised",
4824
- "--shadow-button-focus"
4849
+ "--shadow-button-focus",
4850
+ "--shadow-component-focus-ring"
4825
4851
  ]
4826
4852
  },
4827
4853
  "autocomplete": {
@@ -5031,12 +5057,13 @@
5031
5057
  "examples/date-picker-demo.tsx"
5032
5058
  ],
5033
5059
  "tokens": [
5034
- "--bh-bg-brand-default",
5060
+ "--bh-bg-brand-bold",
5035
5061
  "--bh-bg-brand-subtle",
5036
5062
  "--bh-bg-default",
5037
5063
  "--bh-bg-default-hover",
5038
5064
  "--bh-bg-raised",
5039
5065
  "--bh-border-disabled",
5066
+ "--bh-border-focus",
5040
5067
  "--bh-border-input",
5041
5068
  "--bh-border-subtle",
5042
5069
  "--bh-border-width-default",
@@ -5047,7 +5074,7 @@
5047
5074
  "--bh-content-default",
5048
5075
  "--bh-content-disabled",
5049
5076
  "--bh-content-muted",
5050
- "--bh-content-on-color",
5077
+ "--bh-content-on-brand",
5051
5078
  "--bh-content-subtle",
5052
5079
  "--bh-control-default",
5053
5080
  "--bh-date-day-cell-height",
@@ -5726,6 +5753,11 @@
5726
5753
  "steady",
5727
5754
  "dynamic"
5728
5755
  ],
5756
+ "rtl": {
5757
+ "inheritsDirection": true,
5758
+ "motion": "Circular loading motion is direction-neutral; no icon or track mirroring is required.",
5759
+ "semantics": "The indicator keeps the same accessible loading label in either direction; localize that label at the call site."
5760
+ },
5729
5761
  "features": [
5730
5762
  "steady arc rotation",
5731
5763
  "dynamic arc length",
@@ -5842,6 +5874,21 @@
5842
5874
  "activity-feed": {
5843
5875
  "description": "Expanded activity feed composition with avatar indicators, status dots, captions, action buttons, slot rows, timestamps, links, and RTL copy.",
5844
5876
  "status": "expanded",
5877
+ "variants": [
5878
+ "caption",
5879
+ "slot"
5880
+ ],
5881
+ "states": [
5882
+ "default",
5883
+ "with-status",
5884
+ "with-link",
5885
+ "with-actions"
5886
+ ],
5887
+ "rtl": {
5888
+ "inheritsDirection": true,
5889
+ "layout": "The feed and each item inherit direction; marker, copy, timestamps, links, and owned Button actions mirror through logical CSS.",
5890
+ "textDirection": "Labels, captions, support text, and timestamps preserve their supplied content while the row aligns to the inherited direction."
5891
+ },
5845
5892
  "registryDependencies": [
5846
5893
  "button"
5847
5894
  ],
@@ -5919,12 +5966,85 @@
5919
5966
  "--shadow-component-default"
5920
5967
  ]
5921
5968
  },
5969
+ "activity-heatmap": {
5970
+ "description": "Token-only calendar activity heatmap with seven-day columns, five semantic intensity levels, responsive horizontal overflow, cell labels, and RTL support.",
5971
+ "status": "expanded",
5972
+ "dependencies": {},
5973
+ "parts": [
5974
+ "ActivityHeatmap"
5975
+ ],
5976
+ "supportedExports": [
5977
+ {
5978
+ "source": "components/expanded/ActivityHeatmap.tsx",
5979
+ "values": [
5980
+ "ActivityHeatmap"
5981
+ ]
5982
+ }
5983
+ ],
5984
+ "files": [
5985
+ {
5986
+ "source": "components/expanded/activityHeatmap.css",
5987
+ "target": "{{ui}}/expanded/activityHeatmap.css"
5988
+ },
5989
+ {
5990
+ "source": "components/expanded/ActivityHeatmap.tsx",
5991
+ "target": "{{ui}}/expanded/ActivityHeatmap.tsx"
5992
+ }
5993
+ ],
5994
+ "examples": [
5995
+ "examples/expanded/activity-heatmap-demo.tsx"
5996
+ ],
5997
+ "props": {
5998
+ "ariaLabel": {
5999
+ "type": "string",
6000
+ "default": "Activity heatmap",
6001
+ "description": "Accessible summary for the full visualized period."
6002
+ },
6003
+ "dir": {
6004
+ "type": "ltr | rtl",
6005
+ "default": "inherited",
6006
+ "description": "Places the first activity column at the logical start edge."
6007
+ },
6008
+ "items": {
6009
+ "type": "readonly ActivityHeatmapItem[]",
6010
+ "default": "[]",
6011
+ "description": "Column-major cells grouped into seven-day weeks, each with a level from zero through four."
6012
+ }
6013
+ },
6014
+ "states": [
6015
+ "level-0",
6016
+ "level-1",
6017
+ "level-2",
6018
+ "level-3",
6019
+ "level-4"
6020
+ ],
6021
+ "rtl": {
6022
+ "inheritsDirection": true,
6023
+ "layout": "Grid auto-placement follows logical inline direction while preserving the supplied item order."
6024
+ },
6025
+ "tokens": [
6026
+ "--bh-bg-accent-purple-default",
6027
+ "--bh-bg-accent-purple-soft",
6028
+ "--bh-bg-accent-purple-subtle",
6029
+ "--bh-bg-neutral-medium",
6030
+ "--bh-content-accent-purple-strong",
6031
+ "--bh-content-default",
6032
+ "--bh-font-family",
6033
+ "--bh-radius-sm-4",
6034
+ "--bh-space-3xl-16",
6035
+ "--bh-space-xs-4",
6036
+ "--shadow-component-focus-ring"
6037
+ ]
6038
+ },
5922
6039
  "alert": {
5923
6040
  "description": "Contextual feedback primitive with danger, success, warning, info, neutral, compact, expandable, action, close, and RTL variants.",
5924
6041
  "dependencies": {
5925
6042
  "class-variance-authority": "^0.7.1",
5926
6043
  "lucide-react": "^1.17.0"
5927
6044
  },
6045
+ "registryDependencies": [
6046
+ "button"
6047
+ ],
5928
6048
  "parts": [
5929
6049
  "Alert"
5930
6050
  ],
@@ -5996,7 +6116,6 @@
5996
6116
  "--bh-font-weight-medium",
5997
6117
  "--bh-font-weight-regular",
5998
6118
  "--bh-icon-stroke-225",
5999
- "--bh-opacity-80",
6000
6119
  "--bh-radius-full",
6001
6120
  "--bh-space-3xl-16",
6002
6121
  "--bh-space-md-8",
@@ -6013,13 +6132,36 @@
6013
6132
  "--bh-text-body-md-underline-line-height",
6014
6133
  "--bh-text-body-sm-regular-font-size",
6015
6134
  "--bh-text-body-sm-regular-letter-spacing",
6016
- "--bh-text-body-sm-regular-line-height",
6017
- "--shadow-button-focus"
6135
+ "--bh-text-body-sm-regular-line-height"
6018
6136
  ]
6019
6137
  },
6020
6138
  "banner": {
6021
6139
  "description": "Expanded banner system with slim, inline action, single action, input, floating, full-width, brand, grey, brand-light, and RTL variants.",
6022
6140
  "status": "expanded",
6141
+ "variants": [
6142
+ "brand",
6143
+ "grey",
6144
+ "brand-light"
6145
+ ],
6146
+ "sizes": [
6147
+ "floating",
6148
+ "full-width"
6149
+ ],
6150
+ "states": [
6151
+ "title",
6152
+ "title-description"
6153
+ ],
6154
+ "modes": [
6155
+ "slim",
6156
+ "single-action-inline",
6157
+ "single-action",
6158
+ "input"
6159
+ ],
6160
+ "rtl": {
6161
+ "inheritsDirection": true,
6162
+ "layout": "Message, action, input, and close clusters use logical layout and :dir(rtl), including when direction comes from an ancestor.",
6163
+ "composition": "Actions and dismiss controls compose Button; the input mode composes Input."
6164
+ },
6023
6165
  "dependencies": {
6024
6166
  "lucide-react": "^1.17.0"
6025
6167
  },
@@ -6052,13 +6194,13 @@
6052
6194
  "examples/expanded/banner-demo.tsx"
6053
6195
  ],
6054
6196
  "tokens": [
6055
- "--bh-bg-brand-default",
6197
+ "--bh-bg-brand-bold",
6056
6198
  "--bh-bg-brand-soft",
6057
6199
  "--bh-bg-muted",
6058
6200
  "--bh-border-subtle",
6059
6201
  "--bh-content-default",
6060
- "--bh-content-inverse",
6061
6202
  "--bh-content-link",
6203
+ "--bh-content-on-brand",
6062
6204
  "--bh-content-subtle",
6063
6205
  "--bh-font-family",
6064
6206
  "--bh-font-weight-regular",
@@ -6067,6 +6209,8 @@
6067
6209
  "--bh-icon-stroke-225",
6068
6210
  "--bh-input-width",
6069
6211
  "--bh-radius-xl-10",
6212
+ "--bh-space-17xl-288",
6213
+ "--bh-space-19xl-384",
6070
6214
  "--bh-space-3xl-16",
6071
6215
  "--bh-space-4xl-20",
6072
6216
  "--bh-space-8xl-48",
@@ -6086,12 +6230,31 @@
6086
6230
  "--bh-text-body-md-medium-font-weight",
6087
6231
  "--bh-text-body-md-medium-letter-spacing",
6088
6232
  "--bh-text-body-md-medium-line-height",
6089
- "--shadow-component-default"
6233
+ "--shadow-md"
6090
6234
  ]
6091
6235
  },
6092
6236
  "catalog-components": {
6093
6237
  "description": "Expanded catalog showcase with breadcrumbs, catalog-only content dividers, tag previews, file upload states, and table previews.",
6094
6238
  "status": "expanded",
6239
+ "variants": [
6240
+ "solid-divider",
6241
+ "dotted-divider"
6242
+ ],
6243
+ "states": [
6244
+ "label",
6245
+ "action",
6246
+ "disabled-action"
6247
+ ],
6248
+ "modes": [
6249
+ "showcase",
6250
+ "divider",
6251
+ "content-divider"
6252
+ ],
6253
+ "rtl": {
6254
+ "inheritsDirection": true,
6255
+ "composition": "The showcase composes the owned Breadcrumbs, Button, Tag, File Upload, and Table components and includes explicit RTL surfaces.",
6256
+ "spacing": "Catalog dividers use logical flex order and gaps, so labels and actions remain centered in either direction."
6257
+ },
6095
6258
  "dependencies": {
6096
6259
  "lucide-react": "^1.17.0"
6097
6260
  },
@@ -6189,6 +6352,26 @@
6189
6352
  "breadcrumbs": {
6190
6353
  "description": "Expanded breadcrumbs navigation with default, raised, icon, overflow, separator, and RTL variants.",
6191
6354
  "status": "expanded",
6355
+ "variants": [
6356
+ "default",
6357
+ "raised"
6358
+ ],
6359
+ "states": [
6360
+ "link",
6361
+ "current",
6362
+ "overflow"
6363
+ ],
6364
+ "modes": [
6365
+ "text",
6366
+ "icon-only",
6367
+ "slash",
6368
+ "chevron"
6369
+ ],
6370
+ "rtl": {
6371
+ "inheritsDirection": true,
6372
+ "layout": "The ordered trail follows inherited inline direction, and chevron separators mirror through :dir(rtl).",
6373
+ "semantics": "The root is a named navigation landmark and the final or explicitly current item exposes aria-current=\"page\"."
6374
+ },
6192
6375
  "dependencies": {
6193
6376
  "lucide-react": "^1.17.0"
6194
6377
  },
@@ -6250,6 +6433,32 @@
6250
6433
  "file-upload": {
6251
6434
  "description": "Expanded file upload composition with drag-and-drop zones, file rows, upload states, disabled behavior, and RTL direction.",
6252
6435
  "status": "expanded",
6436
+ "variants": [
6437
+ "default",
6438
+ "button"
6439
+ ],
6440
+ "sizes": [
6441
+ "lg",
6442
+ "sm"
6443
+ ],
6444
+ "states": [
6445
+ "default",
6446
+ "hover",
6447
+ "disabled",
6448
+ "uploaded",
6449
+ "uploading",
6450
+ "uploading-progress",
6451
+ "error"
6452
+ ],
6453
+ "modes": [
6454
+ "single",
6455
+ "multiple"
6456
+ ],
6457
+ "rtl": {
6458
+ "inheritsDirection": true,
6459
+ "layout": "Dropzone copy, file metadata, progress, and owned Button actions mirror from inherited direction using logical spacing.",
6460
+ "semantics": "The native file input remains the owned component's intrinsic control; status graphics are decorative in rows and named only when standalone."
6461
+ },
6253
6462
  "dependencies": {
6254
6463
  "lucide-react": "^1.17.0"
6255
6464
  },
@@ -6371,6 +6580,28 @@
6371
6580
  "table": {
6372
6581
  "description": "Expanded table and data table composition with selection, stateful sortable headers, search, filters, bulk actions, pagination, empty/loading/error states, status badges, progress cells, actions, row states, and RTL mirroring.",
6373
6582
  "status": "expanded",
6583
+ "sizes": [
6584
+ "sm",
6585
+ "lg"
6586
+ ],
6587
+ "states": [
6588
+ "default",
6589
+ "selected",
6590
+ "disabled",
6591
+ "loading",
6592
+ "empty",
6593
+ "error"
6594
+ ],
6595
+ "modes": [
6596
+ "table",
6597
+ "data-table"
6598
+ ],
6599
+ "rtl": {
6600
+ "inheritsDirection": true,
6601
+ "layout": "Headers, cells, search/filter tools, selection, pagination, and actions inherit direction and use logical alignment.",
6602
+ "semantics": "Sortable headers are owned Buttons, selection uses Checkbox, progress cells are named, and row actions expose accessible labels.",
6603
+ "narrowContainers": "The toolbar wraps and the table owns local horizontal scrolling instead of overlapping controls or overflowing the page."
6604
+ },
6374
6605
  "dependencies": {
6375
6606
  "lucide-react": "^1.17.0"
6376
6607
  },
@@ -6388,7 +6619,14 @@
6388
6619
  ],
6389
6620
  "parts": [
6390
6621
  "Table",
6391
- "DataTable"
6622
+ "DataTable",
6623
+ "DataTableSurface",
6624
+ "TableRoot",
6625
+ "TableHeader",
6626
+ "TableBody",
6627
+ "TableRowElement",
6628
+ "TableHead",
6629
+ "TableCell"
6392
6630
  ],
6393
6631
  "supportedExports": [
6394
6632
  {
@@ -6397,6 +6635,18 @@
6397
6635
  "DataTable",
6398
6636
  "Table"
6399
6637
  ]
6638
+ },
6639
+ {
6640
+ "source": "components/table-elements.tsx",
6641
+ "values": [
6642
+ "DataTableSurface",
6643
+ "TableBody",
6644
+ "TableCell",
6645
+ "TableHead",
6646
+ "TableHeader",
6647
+ "TableRoot",
6648
+ "TableRowElement"
6649
+ ]
6400
6650
  }
6401
6651
  ],
6402
6652
  "files": [
@@ -6407,12 +6657,20 @@
6407
6657
  {
6408
6658
  "source": "components/expanded/Table.tsx",
6409
6659
  "target": "{{ui}}/expanded/Table.tsx"
6660
+ },
6661
+ {
6662
+ "source": "components/table-elements.tsx",
6663
+ "target": "{{ui}}/table-elements.tsx"
6410
6664
  }
6411
6665
  ],
6412
6666
  "examples": [
6413
6667
  "examples/expanded/table-demo.tsx"
6414
6668
  ],
6415
6669
  "tokens": [
6670
+ "--bh-avatar-fallback-font-size-md",
6671
+ "--bh-avatar-fallback-font-size-xs",
6672
+ "--bh-avatar-size-md",
6673
+ "--bh-avatar-size-xs",
6416
6674
  "--bh-bg-accent-amber-subtle",
6417
6675
  "--bh-bg-accent-fuchsia-subtle",
6418
6676
  "--bh-bg-accent-golden-default",
@@ -6448,10 +6706,10 @@
6448
6706
  "--bh-easing-standard",
6449
6707
  "--bh-focus-ring-width",
6450
6708
  "--bh-font-family",
6451
- "--bh-font-weight-bold",
6452
6709
  "--bh-font-weight-semibold",
6453
6710
  "--bh-icon-stroke-190",
6454
6711
  "--bh-icon-stroke-225",
6712
+ "--bh-input-width",
6455
6713
  "--bh-interactive-ghost-hover",
6456
6714
  "--bh-opacity-0",
6457
6715
  "--bh-opacity-100",
@@ -6489,10 +6747,12 @@
6489
6747
  "--bh-text-body-md-semibold-font-size",
6490
6748
  "--bh-text-body-md-semibold-font-weight",
6491
6749
  "--bh-text-body-md-semibold-line-height",
6750
+ "--bh-text-body-sm-medium-font-weight",
6492
6751
  "--bh-text-body-sm-regular-font-size",
6493
6752
  "--bh-text-body-sm-regular-font-weight",
6494
6753
  "--bh-text-body-sm-regular-line-height",
6495
- "--bh-text-body-xs-regular-font-size"
6754
+ "--bh-text-body-xs-regular-font-size",
6755
+ "--shadow-component-focus-ring"
6496
6756
  ]
6497
6757
  },
6498
6758
  "empty-state": {
@@ -6580,6 +6840,16 @@
6580
6840
  "onboarding-step": {
6581
6841
  "description": "Expanded onboarding step list item with finished, active, and inactive progress states for compact setup flows in LTR and RTL.",
6582
6842
  "status": "expanded",
6843
+ "states": [
6844
+ "finished",
6845
+ "active",
6846
+ "inactive"
6847
+ ],
6848
+ "rtl": {
6849
+ "inheritsDirection": true,
6850
+ "layout": "Marker lines and label alignment follow inherited direction through logical CSS and :dir(rtl).",
6851
+ "semantics": "Decorative progress geometry is hidden from assistive technology while the visible label remains readable."
6852
+ },
6583
6853
  "dependencies": {
6584
6854
  "lucide-react": "^1.17.0"
6585
6855
  },
@@ -6638,10 +6908,30 @@
6638
6908
  "page-header": {
6639
6909
  "description": "Expanded page header composition with breadcrumbs, metadata, description copy, action groups, responsive layout, and optional local tabs.",
6640
6910
  "status": "expanded",
6911
+ "states": [
6912
+ "default",
6913
+ "without-icon",
6914
+ "without-actions",
6915
+ "without-tabs"
6916
+ ],
6917
+ "modes": [
6918
+ "breadcrumbs",
6919
+ "metadata",
6920
+ "description",
6921
+ "actions",
6922
+ "tabs"
6923
+ ],
6924
+ "rtl": {
6925
+ "inheritsDirection": true,
6926
+ "layout": "Heading, metadata, owned Breadcrumbs, Button actions, and Tabs mirror through inherited direction and logical spacing.",
6927
+ "semantics": "Every tab trigger owns a matching panel, and breadcrumb navigation receives a stable accessible label."
6928
+ },
6641
6929
  "dependencies": {
6642
6930
  "lucide-react": "^1.17.0"
6643
6931
  },
6644
6932
  "registryDependencies": [
6933
+ "breadcrumbs",
6934
+ "button",
6645
6935
  "tabs"
6646
6936
  ],
6647
6937
  "parts": [
@@ -6710,8 +7000,32 @@
6710
7000
  ]
6711
7001
  },
6712
7002
  "slideout": {
6713
- "description": "Expanded slideout panel with desktop and mobile breakpoints, header and footer actions, slotted content, and RTL coverage.",
7003
+ "description": "Expanded presentational slideout panel with desktop and mobile breakpoints, header and footer actions, slotted content, and RTL coverage. Use Sheet or Modal when overlay behavior is required.",
6714
7004
  "status": "expanded",
7005
+ "sizes": [
7006
+ "small",
7007
+ "medium",
7008
+ "large"
7009
+ ],
7010
+ "states": [
7011
+ "header-action",
7012
+ "footer-actions",
7013
+ "without-footer",
7014
+ "primary-only"
7015
+ ],
7016
+ "modes": [
7017
+ "desktop",
7018
+ "mobile"
7019
+ ],
7020
+ "rtl": {
7021
+ "inheritsDirection": true,
7022
+ "layout": "Header, body, and footer use logical spacing and :dir(rtl), including when direction is inherited from an ancestor.",
7023
+ "semantics": "Slideout is a presentational region named by its title, not a modal dialog. Compose Sheet or Modal for focus trapping, Escape dismissal, portals, and focus return.",
7024
+ "composition": "Header and footer actions use the owned Button component."
7025
+ },
7026
+ "registryDependencies": [
7027
+ "button"
7028
+ ],
6715
7029
  "dependencies": {
6716
7030
  "lucide-react": "^1.17.0"
6717
7031
  },
@@ -6800,6 +7114,30 @@
6800
7114
  "steps": {
6801
7115
  "description": "Expanded steps composition with horizontal and vertical progress indicators, icon markers, number markers, item alignment, and RTL layouts.",
6802
7116
  "status": "expanded",
7117
+ "variants": [
7118
+ "icon",
7119
+ "number"
7120
+ ],
7121
+ "states": [
7122
+ "complete",
7123
+ "active",
7124
+ "todo"
7125
+ ],
7126
+ "modes": [
7127
+ "steps",
7128
+ "progress-steps",
7129
+ "horizontal-item",
7130
+ "vertical-item"
7131
+ ],
7132
+ "orientations": [
7133
+ "horizontal",
7134
+ "vertical"
7135
+ ],
7136
+ "rtl": {
7137
+ "inheritsDirection": true,
7138
+ "layout": "Markers, connectors, labels, support copy, and actions follow inherited direction through :dir(rtl) and logical spacing.",
7139
+ "composition": "Step actions compose Button, and ordered progress structures preserve their semantic list order."
7140
+ },
6803
7141
  "dependencies": {
6804
7142
  "lucide-react": "^1.17.0"
6805
7143
  },
@@ -6808,6 +7146,7 @@
6808
7146
  ],
6809
7147
  "parts": [
6810
7148
  "HorizontalStepItem",
7149
+ "ProgressSteps",
6811
7150
  "Steps",
6812
7151
  "VerticalStepItem"
6813
7152
  ],
@@ -6816,6 +7155,7 @@
6816
7155
  "source": "components/expanded/Steps.tsx",
6817
7156
  "values": [
6818
7157
  "HorizontalStepItem",
7158
+ "ProgressSteps",
6819
7159
  "Steps",
6820
7160
  "VerticalStepItem"
6821
7161
  ]
@@ -6967,6 +7307,24 @@
6967
7307
  "timeline": {
6968
7308
  "description": "Expanded timeline composition with vertical and horizontal orientations, dates, captions, active states, finished states, item variants, and RTL layouts.",
6969
7309
  "status": "expanded",
7310
+ "variants": [
7311
+ "default",
7312
+ "icon"
7313
+ ],
7314
+ "states": [
7315
+ "finished",
7316
+ "active",
7317
+ "inactive"
7318
+ ],
7319
+ "orientations": [
7320
+ "vertical",
7321
+ "horizontal"
7322
+ ],
7323
+ "rtl": {
7324
+ "inheritsDirection": true,
7325
+ "layout": "Marker, connector, date, title, and caption ordering follows inherited direction through :dir(rtl) and logical padding.",
7326
+ "keyboard": "Horizontal timelines are focusable and own local inline scrolling in narrow containers."
7327
+ },
6970
7328
  "dependencies": {
6971
7329
  "lucide-react": "^1.17.0"
6972
7330
  },
@@ -7030,7 +7388,8 @@
7030
7388
  "--bh-text-body-sm-regular-line-height",
7031
7389
  "--bh-timeline-grid-width",
7032
7390
  "--bh-timeline-narrow-width",
7033
- "--bh-timeline-sidebar-width"
7391
+ "--bh-timeline-sidebar-width",
7392
+ "--shadow-component-focus-ring"
7034
7393
  ]
7035
7394
  }
7036
7395
  }