banhaten 0.4.0 → 0.5.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 (348) hide show
  1. package/CHANGELOG.md +139 -100
  2. package/CONTRIBUTING.md +46 -44
  3. package/README.md +192 -190
  4. package/SECURITY.md +15 -15
  5. package/banhaten.config.example.json +11 -11
  6. package/docs/design-spacing.md +13 -0
  7. package/docs/design-system/README.md +22 -20
  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 +90 -76
  20. package/docs/design-system/components/accordion.md +53 -53
  21. package/docs/design-system/components/activity-feed.md +94 -94
  22. package/docs/design-system/components/activity-heatmap.md +57 -57
  23. package/docs/design-system/components/agent-input.md +85 -0
  24. package/docs/design-system/components/alert-dialog.md +72 -72
  25. package/docs/design-system/components/alert.md +97 -97
  26. package/docs/design-system/components/approval-card.md +134 -0
  27. package/docs/design-system/components/aspect-ratio.md +45 -45
  28. package/docs/design-system/components/attribute.md +88 -88
  29. package/docs/design-system/components/autocomplete.md +75 -75
  30. package/docs/design-system/components/avatar.md +54 -54
  31. package/docs/design-system/components/badge.md +54 -54
  32. package/docs/design-system/components/banner.md +87 -87
  33. package/docs/design-system/components/breadcrumbs.md +176 -175
  34. package/docs/design-system/components/button-group.md +98 -98
  35. package/docs/design-system/components/button.md +83 -80
  36. package/docs/design-system/components/card.md +88 -88
  37. package/docs/design-system/components/carousel.md +46 -46
  38. package/docs/design-system/components/catalog-components.md +47 -47
  39. package/docs/design-system/components/chart.md +95 -24
  40. package/docs/design-system/components/checkbox.md +54 -54
  41. package/docs/design-system/components/collapsible.md +67 -53
  42. package/docs/design-system/components/command.md +62 -62
  43. package/docs/design-system/components/context-menu.md +46 -46
  44. package/docs/design-system/components/date-picker.md +81 -81
  45. package/docs/design-system/components/divider.md +102 -102
  46. package/docs/design-system/components/empty-state.md +56 -56
  47. package/docs/design-system/components/field.md +70 -70
  48. package/docs/design-system/components/file-upload.md +187 -187
  49. package/docs/design-system/components/hover-card.md +48 -48
  50. package/docs/design-system/components/icons.md +48 -48
  51. package/docs/design-system/components/inline-citations.md +93 -0
  52. package/docs/design-system/components/input-group.md +58 -58
  53. package/docs/design-system/components/input-otp.md +56 -56
  54. package/docs/design-system/components/input.md +114 -60
  55. package/docs/design-system/components/item.md +59 -59
  56. package/docs/design-system/components/kbd.md +51 -49
  57. package/docs/design-system/components/label.md +49 -49
  58. package/docs/design-system/components/menu.md +71 -61
  59. package/docs/design-system/components/menubar.md +47 -47
  60. package/docs/design-system/components/modal.md +105 -105
  61. package/docs/design-system/components/native-select.md +54 -54
  62. package/docs/design-system/components/navigation-menu.md +50 -50
  63. package/docs/design-system/components/onboarding-step-list-item.md +82 -82
  64. package/docs/design-system/components/page-header.md +93 -86
  65. package/docs/design-system/components/pagination.md +57 -57
  66. package/docs/design-system/components/popover.md +60 -60
  67. package/docs/design-system/components/progress-slider.md +50 -50
  68. package/docs/design-system/components/progress.md +76 -76
  69. package/docs/design-system/components/radio-card.md +51 -51
  70. package/docs/design-system/components/radio-group.md +57 -57
  71. package/docs/design-system/components/resizable.md +44 -44
  72. package/docs/design-system/components/rolling-count.md +61 -0
  73. package/docs/design-system/components/scroll-area.md +51 -51
  74. package/docs/design-system/components/segmented-control.md +54 -54
  75. package/docs/design-system/components/select.md +68 -62
  76. package/docs/design-system/components/sheet.md +67 -67
  77. package/docs/design-system/components/shimmer-text.md +67 -0
  78. package/docs/design-system/components/sidebar.md +110 -99
  79. package/docs/design-system/components/skeleton.md +75 -75
  80. package/docs/design-system/components/slideout.md +65 -65
  81. package/docs/design-system/components/slider.md +63 -63
  82. package/docs/design-system/components/social-button.md +50 -50
  83. package/docs/design-system/components/spinner.md +62 -62
  84. package/docs/design-system/components/steps.md +65 -65
  85. package/docs/design-system/components/streaming-text.md +82 -0
  86. package/docs/design-system/components/table.md +419 -414
  87. package/docs/design-system/components/tabs.md +59 -55
  88. package/docs/design-system/components/tag.md +80 -80
  89. package/docs/design-system/components/task-list.md +95 -0
  90. package/docs/design-system/components/textarea.md +50 -50
  91. package/docs/design-system/components/thinking-reasoning.md +72 -0
  92. package/docs/design-system/components/thinking-state.md +67 -0
  93. package/docs/design-system/components/timeline.md +83 -83
  94. package/docs/design-system/components/toast.md +58 -58
  95. package/docs/design-system/components/toggle.md +81 -81
  96. package/docs/design-system/components/toolbar.md +92 -87
  97. package/docs/design-system/components/tooltip.md +94 -92
  98. package/docs/design-system/components/typography.md +18 -18
  99. package/docs/design-system/density-and-elevation.md +65 -65
  100. package/docs/design-system/design-system-test-missing-items.md +368 -368
  101. package/docs/design-system/direction-and-localization.md +23 -23
  102. package/docs/design-system/form-recipes.md +73 -73
  103. package/docs/design-system/gap-promotion-policy.md +21 -21
  104. package/docs/design-system/icons.md +74 -74
  105. package/docs/design-system/installation.md +70 -68
  106. package/docs/design-system/launch-comparison-shadcn.md +98 -98
  107. package/docs/design-system/registry-and-cli.md +64 -64
  108. package/docs/design-system/release-policy.md +30 -30
  109. package/docs/design-system/roadmap.md +14 -14
  110. package/docs/design-system/support-matrix.md +23 -23
  111. package/docs/design-system/tabs.md +54 -53
  112. package/docs/design-system/template-gap-audit.md +32 -0
  113. package/docs/design-system/templates.md +59 -0
  114. package/docs/design-system/token-governance.md +72 -59
  115. package/package.json +98 -98
  116. package/registry/component-contract.json +40 -40
  117. package/registry/components/accordion.tsx +155 -155
  118. package/registry/components/agent-input-parts.tsx +552 -0
  119. package/registry/components/agent-input-state.ts +156 -0
  120. package/registry/components/agent-input.css +307 -0
  121. package/registry/components/agent-input.tsx +382 -0
  122. package/registry/components/alert-dialog.tsx +297 -297
  123. package/registry/components/alert.tsx +293 -293
  124. package/registry/components/approval-card.css +409 -0
  125. package/registry/components/approval-card.tsx +401 -0
  126. package/registry/components/approval-frame.tsx +108 -0
  127. package/registry/components/approval-questions.tsx +559 -0
  128. package/registry/components/aspect-ratio.tsx +30 -30
  129. package/registry/components/attribute.tsx +454 -454
  130. package/registry/components/autocomplete.tsx +598 -651
  131. package/registry/components/avatar.tsx +385 -385
  132. package/registry/components/badge.tsx +629 -629
  133. package/registry/components/button-group.tsx +565 -565
  134. package/registry/components/button.tsx +127 -123
  135. package/registry/components/card.tsx +638 -638
  136. package/registry/components/carousel.tsx +296 -296
  137. package/registry/components/chart-block-data.ts +177 -0
  138. package/registry/components/chart-block.css +171 -0
  139. package/registry/components/chart-block.tsx +260 -0
  140. package/registry/components/chart-interactions.ts +123 -0
  141. package/registry/components/chart-options.cartesian.ts +162 -0
  142. package/registry/components/chart-options.paint.ts +99 -0
  143. package/registry/components/chart-options.parts.ts +72 -0
  144. package/registry/components/chart-options.radial.ts +109 -0
  145. package/registry/components/chart-options.ts +44 -0
  146. package/registry/components/chart-options.types.ts +67 -0
  147. package/registry/components/chart.tsx +203 -203
  148. package/registry/components/checkbox.tsx +247 -247
  149. package/registry/components/collapsible.tsx +109 -69
  150. package/registry/components/command.tsx +208 -208
  151. package/registry/components/context-menu.tsx +236 -236
  152. package/registry/components/data-chart.tsx +40 -0
  153. package/registry/components/date-picker.tsx +1289 -1289
  154. package/registry/components/echart-theme.ts +246 -0
  155. package/registry/components/echart.css +49 -0
  156. package/registry/components/echart.tsx +178 -0
  157. package/registry/components/expanded/ActivityFeed.tsx +227 -227
  158. package/registry/components/expanded/ActivityHeatmap.tsx +64 -64
  159. package/registry/components/expanded/Banner.tsx +179 -179
  160. package/registry/components/expanded/Breadcrumbs.tsx +131 -131
  161. package/registry/components/expanded/CatalogComponentsShowcase.tsx +205 -205
  162. package/registry/components/expanded/CatalogDivider.tsx +49 -49
  163. package/registry/components/expanded/EmptyState.tsx +155 -155
  164. package/registry/components/expanded/FileUpload.tsx +543 -543
  165. package/registry/components/expanded/OnboardingStepListItem.tsx +60 -60
  166. package/registry/components/expanded/PageHeader.tsx +179 -166
  167. package/registry/components/expanded/Slideout.tsx +108 -108
  168. package/registry/components/expanded/Steps.tsx +402 -402
  169. package/registry/components/expanded/Table.tsx +1092 -1071
  170. package/registry/components/expanded/Timeline.tsx +203 -203
  171. package/registry/components/expanded/activityFeed.css +248 -248
  172. package/registry/components/expanded/activityHeatmap.css +66 -66
  173. package/registry/components/expanded/banner.css +260 -260
  174. package/registry/components/expanded/breadcrumbs.css +140 -140
  175. package/registry/components/expanded/catalogComponentsShowcase.css +87 -87
  176. package/registry/components/expanded/divider.css +75 -75
  177. package/registry/components/expanded/emptyState.css +111 -111
  178. package/registry/components/expanded/fileUpload.css +457 -457
  179. package/registry/components/expanded/onboardingStepListItem.css +135 -135
  180. package/registry/components/expanded/pageHeader.css +248 -290
  181. package/registry/components/expanded/slideout.css +276 -276
  182. package/registry/components/expanded/steps.css +356 -356
  183. package/registry/components/expanded/table.css +606 -606
  184. package/registry/components/expanded/timeline.css +286 -286
  185. package/registry/components/field.tsx +283 -283
  186. package/registry/components/hover-card.tsx +48 -48
  187. package/registry/components/inline-citations.css +126 -0
  188. package/registry/components/inline-citations.tsx +292 -0
  189. package/registry/components/input-content.ts +107 -107
  190. package/registry/components/input-group.tsx +130 -130
  191. package/registry/components/input-otp.tsx +584 -584
  192. package/registry/components/input.tsx +990 -979
  193. package/registry/components/item.tsx +189 -189
  194. package/registry/components/kbd.tsx +246 -245
  195. package/registry/components/label.tsx +78 -78
  196. package/registry/components/menu.tsx +978 -986
  197. package/registry/components/menubar.tsx +226 -226
  198. package/registry/components/modal.tsx +872 -872
  199. package/registry/components/native-select.tsx +205 -205
  200. package/registry/components/navigation-menu.tsx +171 -171
  201. package/registry/components/pagination.css +36 -36
  202. package/registry/components/pagination.tsx +560 -560
  203. package/registry/components/popover.tsx +338 -338
  204. package/registry/components/progress-slider.tsx +216 -216
  205. package/registry/components/radio-card.tsx +676 -676
  206. package/registry/components/radio-group.tsx +570 -570
  207. package/registry/components/resizable.tsx +108 -108
  208. package/registry/components/rolling-count.css +37 -0
  209. package/registry/components/rolling-count.tsx +110 -0
  210. package/registry/components/scroll-area.tsx +91 -91
  211. package/registry/components/segmented-control.tsx +87 -87
  212. package/registry/components/select-content.tsx +218 -218
  213. package/registry/components/select.tsx +937 -932
  214. package/registry/components/sheet.tsx +305 -305
  215. package/registry/components/shimmer-text.css +69 -0
  216. package/registry/components/shimmer-text.tsx +43 -0
  217. package/registry/components/sidebar.tsx +1433 -1230
  218. package/registry/components/skeleton.css +54 -54
  219. package/registry/components/skeleton.tsx +482 -482
  220. package/registry/components/slider.tsx +380 -380
  221. package/registry/components/social-button.tsx +387 -387
  222. package/registry/components/spinner.tsx +78 -78
  223. package/registry/components/streaming-text.css +45 -0
  224. package/registry/components/streaming-text.tsx +165 -0
  225. package/registry/components/table-elements.tsx +128 -128
  226. package/registry/components/tabs.css +222 -218
  227. package/registry/components/tabs.tsx +241 -241
  228. package/registry/components/tag.tsx +423 -423
  229. package/registry/components/task-list.css +328 -0
  230. package/registry/components/task-list.tsx +429 -0
  231. package/registry/components/textarea.tsx +610 -610
  232. package/registry/components/thinking-reasoning.css +178 -0
  233. package/registry/components/thinking-reasoning.tsx +253 -0
  234. package/registry/components/thinking-state.css +8 -0
  235. package/registry/components/thinking-state.tsx +46 -0
  236. package/registry/components/toast.tsx +136 -136
  237. package/registry/components/toggle.tsx +256 -256
  238. package/registry/components/toolbar.tsx +539 -539
  239. package/registry/components/tooltip.tsx +433 -431
  240. package/registry/examples/agent-input-demo.tsx +90 -0
  241. package/registry/examples/alert-demo.tsx +34 -34
  242. package/registry/examples/alert-dialog-demo.tsx +42 -42
  243. package/registry/examples/approval-card-demo.tsx +83 -0
  244. package/registry/examples/aspect-ratio-demo.tsx +11 -11
  245. package/registry/examples/attribute-demo.tsx +65 -65
  246. package/registry/examples/autocomplete-demo.tsx +109 -109
  247. package/registry/examples/avatar-demo.tsx +132 -132
  248. package/registry/examples/badge-demo.tsx +69 -69
  249. package/registry/examples/button-demo.tsx +86 -83
  250. package/registry/examples/button-group-demo.tsx +63 -63
  251. package/registry/examples/card-demo.tsx +86 -86
  252. package/registry/examples/carousel-demo.tsx +43 -43
  253. package/registry/examples/chart-block-demo.tsx +5 -0
  254. package/registry/examples/chart-demo.tsx +18 -33
  255. package/registry/examples/checkbox-demo.tsx +62 -62
  256. package/registry/examples/collapsible-demo.tsx +16 -16
  257. package/registry/examples/collection-filter-bar-demo.tsx +135 -135
  258. package/registry/examples/command-demo.tsx +42 -42
  259. package/registry/examples/command-palette-demo.tsx +235 -235
  260. package/registry/examples/context-menu-demo.tsx +29 -29
  261. package/registry/examples/control-density-contract-demo.tsx +65 -61
  262. package/registry/examples/date-picker-demo.tsx +127 -127
  263. package/registry/examples/divider-demo.tsx +17 -17
  264. package/registry/examples/expanded/activity-heatmap-demo.tsx +29 -29
  265. package/registry/examples/expanded/banner-demo.tsx +48 -48
  266. package/registry/examples/expanded/breadcrumbs-demo.tsx +59 -59
  267. package/registry/examples/expanded/empty-state-demo.tsx +39 -39
  268. package/registry/examples/expanded/file-upload-demo.tsx +60 -60
  269. package/registry/examples/expanded/onboarding-step-demo.tsx +11 -11
  270. package/registry/examples/expanded/slideout-demo.tsx +15 -15
  271. package/registry/examples/expanded/steps-demo.tsx +29 -29
  272. package/registry/examples/expanded/tabs-demo.tsx +13 -13
  273. package/registry/examples/expanded/timeline-demo.tsx +18 -18
  274. package/registry/examples/field-demo.tsx +51 -51
  275. package/registry/examples/hover-card-demo.tsx +23 -23
  276. package/registry/examples/inline-citations-demo.tsx +31 -0
  277. package/registry/examples/input-actions-demo.tsx +36 -0
  278. package/registry/examples/input-demo.tsx +87 -87
  279. package/registry/examples/input-group-demo.tsx +16 -16
  280. package/registry/examples/input-otp-demo.tsx +72 -72
  281. package/registry/examples/item-demo.tsx +46 -46
  282. package/registry/examples/kbd-demo.tsx +12 -12
  283. package/registry/examples/label-demo.tsx +20 -20
  284. package/registry/examples/menu-demo.tsx +122 -122
  285. package/registry/examples/menubar-demo.tsx +34 -34
  286. package/registry/examples/modal-demo.tsx +74 -74
  287. package/registry/examples/native-select-demo.tsx +16 -16
  288. package/registry/examples/navigation-menu-demo.tsx +29 -29
  289. package/registry/examples/pagination-demo.tsx +20 -20
  290. package/registry/examples/popover-demo.tsx +547 -546
  291. package/registry/examples/progress-demo.tsx +37 -37
  292. package/registry/examples/progress-slider-demo.tsx +29 -29
  293. package/registry/examples/radio-card-demo.tsx +51 -51
  294. package/registry/examples/radio-group-demo.tsx +62 -62
  295. package/registry/examples/resizable-demo.tsx +22 -22
  296. package/registry/examples/results-toolbar-demo.tsx +44 -44
  297. package/registry/examples/rolling-count-demo.tsx +39 -0
  298. package/registry/examples/scroll-area-demo.tsx +15 -15
  299. package/registry/examples/segmented-control-demo.tsx +39 -39
  300. package/registry/examples/select-demo.tsx +87 -87
  301. package/registry/examples/sheet-demo.tsx +47 -47
  302. package/registry/examples/shimmer-text-demo.tsx +20 -0
  303. package/registry/examples/sidebar-demo.tsx +101 -101
  304. package/registry/examples/slider-demo.tsx +31 -31
  305. package/registry/examples/social-button-demo.tsx +61 -61
  306. package/registry/examples/spinner-demo.tsx +59 -59
  307. package/registry/examples/streaming-text-demo.tsx +28 -0
  308. package/registry/examples/tabs-demo.tsx +13 -13
  309. package/registry/examples/tag-demo.tsx +29 -29
  310. package/registry/examples/task-list-demo.tsx +74 -0
  311. package/registry/examples/textarea-demo.tsx +79 -79
  312. package/registry/examples/thinking-reasoning-demo.tsx +74 -0
  313. package/registry/examples/thinking-state-demo.tsx +13 -0
  314. package/registry/examples/toast-demo.tsx +35 -35
  315. package/registry/examples/toggle-demo.tsx +59 -59
  316. package/registry/examples/tooltip-demo.tsx +115 -115
  317. package/registry/guidance/USAGE.md +27 -27
  318. package/registry/guidance/charts.LICENSE.txt +24 -0
  319. package/registry/hooks/use-controllable-state.ts +33 -0
  320. package/registry/hooks/use-direction.ts +207 -207
  321. package/registry/hooks/use-listbox-navigation.ts +73 -0
  322. package/registry/hooks/use-motion-end.ts +55 -0
  323. package/registry/hooks/use-reduced-motion.ts +28 -0
  324. package/registry/index.json +1403 -155
  325. package/registry/styles/globals.css +946 -1088
  326. package/registry.json +361 -8
  327. package/schema/config.schema.json +51 -51
  328. package/schema/registry.schema.json +194 -190
  329. package/schema/tokens.schema.json +167 -163
  330. package/src/cli/command-line.js +194 -194
  331. package/src/cli/config-editors.js +9 -9
  332. package/src/cli/doctor.js +399 -399
  333. package/src/cli/file-transaction.js +302 -295
  334. package/src/cli/global-css.js +153 -153
  335. package/src/cli/index.js +1002 -1009
  336. package/src/cli/install-plan.js +592 -592
  337. package/src/cli/install-receipt.js +171 -171
  338. package/src/cli/jsonc.js +203 -203
  339. package/src/cli/package-install-state.js +254 -254
  340. package/src/cli/package-manager.js +238 -238
  341. package/src/cli/package-plan.js +185 -185
  342. package/src/cli/package-version.js +97 -97
  343. package/src/cli/registry-query.js +207 -207
  344. package/src/cli/reporting.js +55 -55
  345. package/src/cli/schema-validation.js +19 -19
  346. package/src/cli/source-scanner.js +686 -686
  347. package/src/cli/vite-config.js +478 -478
  348. package/tokens/banhaten.tokens.json +306 -192
@@ -1,245 +1,245 @@
1
- # Component Implementation and Ownership Audit
2
-
3
- Audit date: 2026-08-20
4
-
5
- Remediation status: complete for the requested 96 component-ownership gaps
6
-
7
- ## Executive status
8
-
9
- The requested component-gap remediation is complete.
10
-
11
- - **96 of 96 requested issues are closed.**
12
- - All **94 background component-kind gaps** were replaced with Banhaten-owned components or compositions and removed from scenario metadata.
13
- - The two untracked ownership violations were fixed:
14
- - Activity Heatmap period controls now use Segmented Control in the live page, copyable example, and customer-activity background.
15
- - Scroll Area alternatives now use the Banhaten Scroll Area API and no longer import Radix directly.
16
- - All **38 of 38 audited backgrounds** now pass the enforced component-only consumer rule.
17
- - Those backgrounds contain **zero native button, input, select, textarea, or table roots**.
18
- - Playground consumer source contains **zero direct imports from the restricted UI-vendor set**.
19
- - A new AST-based ownership gate prevents those regressions from returning.
20
-
21
- This is a pass for the requested component-ownership scope. The subsequent full component-quality audit also closed the five expanded-component primitive-reuse notes, so there are no known visible-control ownership exceptions in the component catalog. It is not a claim that every reference background is visually complete: **100 non-component fidelity gaps remain** and are tracked separately.
22
-
23
- ## Before and after
24
-
25
- | Measure | Before | Current | Status |
26
- | --- | ---: | ---: | --- |
27
- | Requested ownership issues | 96 | 0 open | Pass |
28
- | Background component-kind gaps | 94 | 0 | Pass |
29
- | Missing-component gaps | 47 | 0 | Pass |
30
- | Component approximations | 47 | 0 | Pass |
31
- | Strict component-only backgrounds | 2 of 38 | 38 of 38 | Pass |
32
- | Native control/table roots in audited backgrounds | 27 | 0 | Pass |
33
- | Activity Heatmap raw period-control usages | 3 surfaces | 0 | Pass |
34
- | Scroll Area direct Radix consumer imports | 1 page | 0 | Pass |
35
- | Automated ownership boundary | Absent | Enforced in playground test and root check | Pass |
36
- | Non-component visual gaps | 100 | 100 | Outside this remediation |
37
-
38
- The remaining visual-gap inventory is:
39
-
40
- | Gap kind | Count |
41
- | --- | ---: |
42
- | Layout/composition fidelity | 47 |
43
- | Icon assets | 20 |
44
- | Image assets | 20 |
45
- | Tokens | 13 |
46
- | **Total** | **100** |
47
-
48
- ## What changed
49
-
50
- ### Ownership violations
51
-
52
- - [ActivityHeatmapPage.tsx](../../playground/src/pages/new-components/ActivityHeatmapPage.tsx) now composes SegmentedControl and SegmentedControlItem in both published code and the live example.
53
- - [customer-activity-dashboard/index.tsx](../../playground/src/app/backgrounds/customer-activity-dashboard/index.tsx) uses the same owned segmented-control contract.
54
- - [ScrollAreaPage.tsx](../../playground/src/pages/ScrollAreaPage.tsx) no longer imports or assembles Radix primitives.
55
- - [scroll-area.tsx](../../registry/components/scroll-area.tsx) now exposes vertical, horizontal, and combined orientation behavior through the Banhaten API.
56
-
57
- ### Reusable APIs promoted to close repeated gaps
58
-
59
- - [table-elements.tsx](../../registry/components/table-elements.tsx) adds Banhaten-owned semantic table and data-surface elements.
60
- - [card.tsx](../../registry/components/card.tsx) adds CardSurface for product-specific card composition without redrawing a card shell.
61
- - [sidebar.tsx](../../registry/components/sidebar.tsx) supports standalone owned sidebar surfaces while preserving provider-aware behavior for interactive sidebar parts.
62
- - [Steps.tsx](../../registry/components/expanded/Steps.tsx) adds ProgressSteps with bar and marker variants.
63
- - [Timeline.tsx](../../registry/components/expanded/Timeline.tsx) accepts richer label/caption content and local styling hooks needed by migrated flows.
64
-
65
- ### Background migrations
66
-
67
- The 38 reference backgrounds were audited and migrated as a complete set. The repeated replacements include:
68
-
69
- - Native buttons to Button, Button Group, Segmented Control, or the relevant owned action component.
70
- - Handcrafted switches to Toggle.
71
- - Native inputs/selects/textareas to the matching Banhaten form owner.
72
- - Native data tables and ARIA table shells to TableRoot or DataTableSurface compositions.
73
- - Handcrafted cards to CardSurface.
74
- - Root application sidebars to Sidebar.
75
- - Custom progress bars, numbered setup flows, and status tracks to ProgressSteps, Steps, or Timeline.
76
- - Product chips and variables to Tag, Badge, and Avatar composition.
77
-
78
- Component-gap metadata and component-gap DOM markers were removed only after the corresponding implementations migrated and passed type, unit, build, and browser checks.
79
-
80
- ## Enforced ownership boundary
81
-
82
- The ownership rule is layer-aware:
83
-
84
- 1. **Registry foundation layer:** Native HTML and declared behavior libraries may be used inside the Banhaten component that owns and publishes that behavior.
85
- 2. **Expanded registry layer:** Higher-level components should compose Banhaten primitives whenever an equivalent owner exists.
86
- 3. **Consumer layer:** Backgrounds, examples, and copyable documentation must use Banhaten components for interactive controls. Passive semantic/layout HTML remains allowed.
87
- 4. **Public integration exceptions:** Recharts remains an intentional extension surface of Chart. No such exception exists for direct Radix, cmdk, Embla, react-resizable-panels, or Sonner imports in playground consumers.
88
- 5. **Test fixtures:** Native elements may be used when a test specifically needs a fixture and does not publish that fixture as product guidance.
89
-
90
- [component-ownership.test.mjs](../../playground/src/test/component-ownership.test.mjs) now enforces:
91
-
92
- - No direct playground consumer imports from Radix, cmdk, Embla, react-resizable-panels, or Sonner.
93
- - No native button, input, select, textarea, or table roots in any background implementation.
94
- - No component-kind background gap metadata.
95
- - No raw controls or direct restricted-vendor imports in the copyable Activity Heatmap and Scroll Area pages.
96
-
97
- The gate runs first in the playground test pipeline and is also available from the repository root as components:ownership:check.
98
-
99
- ## Component-by-component status
100
-
101
- All 68 catalog components remain owned, buildable, installable, documented, token-validated, and runtime-export validated. The status below focuses on implementation ownership after remediation.
102
-
103
- | Component | Status | Ownership note |
104
- | --- | --- | --- |
105
- | Accordion | Pass | Owned declared Radix wrapper. |
106
- | Aspect Ratio | Pass | Owned declared Radix wrapper. |
107
- | Avatar | Pass | Owned declared Radix wrapper. |
108
- | Badge | Pass | Owned Slot/CVA primitive. |
109
- | Tag | Pass | Canonical owned tag/chip owner. |
110
- | Attribute | Pass | Owned structural key/value composition. |
111
- | Button | Pass | Canonical action owner. |
112
- | Card | Pass | Owned card family; CardSurface now covers custom card shells. |
113
- | Chart | Pass — integration | Banhaten owns container, tooltip, legend, and tokens; Recharts children are the documented public extension. |
114
- | Carousel | Pass — integration | Owned declared Embla behavior with Banhaten controls. |
115
- | Button Group | Pass | Canonical connected action/toggle owner. |
116
- | Segmented Control | Pass | Owned mutually exclusive control composed from Button Group. |
117
- | Toggle | Pass | Owned declared switch behavior. |
118
- | Menu | Pass | Owned declared Radix menu implementation. |
119
- | Menubar | Pass | Owned declared Radix menubar implementation. |
120
- | Command | Pass — integration | Owned cmdk-backed command surface. |
121
- | Context Menu | Pass | Owned declared Radix context-menu implementation. |
122
- | Tooltip | Pass | Owned declared Radix tooltip implementation. |
123
- | Popover | Pass | Owned declared Radix popover implementation. |
124
- | Hover Card | Pass | Owned declared Radix hover-card implementation. |
125
- | Modal | Pass | Owned declared dialog behavior and action composition. |
126
- | Alert Dialog | Pass | Owned declared alert-dialog behavior with Banhaten actions. |
127
- | Checkbox | Pass | Owned checkbox and checkbox-card behavior. |
128
- | Collapsible | Pass | Owned declared collapsible implementation. |
129
- | Radio Group | Pass | Canonical owned radio-group owner. |
130
- | Radio Card | Pass | Canonical owned radio-card owner. |
131
- | Divider | Pass | Owned structural separator. |
132
- | Pagination | Pass | Canonical pagination owner. |
133
- | Toolbar | Pass | Owned search, action, filter, and select-trigger family. |
134
- | Social Button | Pass | Owned provider-action primitive. |
135
- | Input | Pass | Canonical input owner. |
136
- | Input Group | Pass | Owned grouped input and inline-action surface. |
137
- | Label | Pass | Owned declared label implementation. |
138
- | Kbd | Pass | Owned keyboard-hint primitive. |
139
- | Item | Pass | Owned Slot-based row composition. |
140
- | Field | Pass | Owned field composition using Label. |
141
- | Input OTP | Pass | Owned OTP slot and form behavior. |
142
- | Select | Pass | Owned declared select and rich menu-item surfaces. |
143
- | Native Select | Pass | Canonical native-select owner. |
144
- | Sheet | Pass | Owned edge-panel dialog behavior. |
145
- | Sidebar | Pass | Canonical provider-aware and standalone sidebar owner. |
146
- | Navigation Menu | Pass | Owned declared navigation-menu implementation. |
147
- | Scroll Area | Pass | Owned orientation API; direct consumer Radix usage removed. |
148
- | Resizable | Pass — integration | Owned react-resizable-panels wrapper. |
149
- | Autocomplete | Pass | Composes Input, Popover, Select, and Tag. |
150
- | Date Picker | Pass | Owned calendar behavior composed with Banhaten primitives. |
151
- | Slider | Pass | Owned declared slider implementation. |
152
- | Progress | Pass | Owned read-only progress primitive. |
153
- | Progress Slider | Pass | Owned declared interactive progress control. |
154
- | Textarea | Pass | Canonical textarea owner. |
155
- | Skeleton | Pass | Owned loading-placeholder family. |
156
- | Spinner | Pass | Owned loading indicator. |
157
- | Toast | Pass — integration | Owned Sonner-backed feedback API and token layer. |
158
- | Activity Feed | Pass | Owned activity composition using Banhaten actions. |
159
- | Activity Heatmap | Pass | Owned heatmap; period controls now use Segmented Control everywhere published. |
160
- | Alert | Pass | Canonical alert owner. |
161
- | Banner | Pass | Composes Banhaten Button and Input. |
162
- | Catalog Components | Pass | Publishable owned composition; catalog divider actions use Button and the bundle has a dedicated docs page. |
163
- | Breadcrumbs | Pass | Canonical breadcrumb navigation owner. |
164
- | File Upload | Pass | Hidden native file input is the valid owned platform hook; all visible browse/retry actions use Button. |
165
- | Table | Pass | Semantic table surface closes consumer gaps; visible actions use Button and selection/meter semantics are owned. |
166
- | Empty State | Pass | Uses Banhaten actions, including link composition. |
167
- | Onboarding Step | Pass | Owned presentational step row. |
168
- | Page Header | Pass | Composes Breadcrumbs, Tabs, and Button with explicit heading-level and landmark contracts. |
169
- | Slideout | Pass | Explicitly documented as a named presentational region and composes Button actions; it no longer claims incomplete dialog behavior. |
170
- | Steps | Pass | Owns standard, horizontal, vertical, and ProgressSteps compositions. |
171
- | Tabs | Pass | Owned declared tabs implementation. |
172
- | Timeline | Pass | Owned timeline composition with richer content hooks. |
173
-
174
- Component summary:
175
-
176
- - **68 of 68** catalog entries pass build, publication, docs, tokens, and isolated-install validation.
177
- - **68 of 68** have no open primitive-reuse or visible-control ownership note in this audit.
178
- - The only native interactive element in the expanded layer is File Upload's hidden `input[type=file]`, which is the owning platform behavior rather than a visible consumer bypass.
179
-
180
- ## Remaining work outside the 96 gaps
181
-
182
- ### Visual fidelity backlog
183
-
184
- The remaining 100 gaps are non-component concerns. The current promotion report identifies four recurring candidate families:
185
-
186
- - Workspace shell/layout composition.
187
- - Icon assets.
188
- - Elevation treatment.
189
- - Avatar/image assets.
190
-
191
- See [gap-promotion-report.md](./gap-promotion-report.md) for the generated detail.
192
-
193
- ### Component-quality closure
194
-
195
- The former internal primitive-reuse notes are closed: Catalog Divider, File Upload, Table, Page Header, Slideout, and Alert use owned visible actions, while Page Header also composes Breadcrumbs. Slideout is deliberately a named presentational region rather than an incomplete dialog; modal interaction remains owned by Sheet and Modal.
196
-
197
- The full route audit now covers all component pages with strict Axe, inherited RTL, 324px document containment, and deterministic Chromium base-card screenshots. Contrast is also clean at 910 of 910 scenarios.
198
-
199
- ### Structural hotspots
200
-
201
- The largest implementation units remain Date Picker, expanded Table, Input, Menu, Select, and Modal. They pass current checks, but splitting helpers/state from public component modules would reduce future change risk.
202
-
203
- ### Test depth
204
-
205
- Every component route has uniform Axe, inherited-RTL, 324px containment, documentation, and visual-baseline coverage. Deep interaction-specific keyboard and focus assertions remain intentionally component-specific because their behavior contracts differ.
206
-
207
- ## Verification results
208
-
209
- | Gate | Result | Evidence |
210
- | --- | --- | --- |
211
- | Component ownership | Pass | 38 backgrounds; zero component gaps; zero native controls; zero restricted direct consumer UI-vendor imports. |
212
- | Background metadata | Pass | 38 scenarios and 100 remaining non-component gaps are internally consistent. |
213
- | Gap promotion report | Pass | Current with 4 candidates across 38 backgrounds. |
214
- | TypeScript | Pass | Playground typecheck completed with no errors. |
215
- | Unit/component tests | Pass | 8 Vitest files and 205 tests. |
216
- | Documentation coverage | Pass | 68 registry-backed pages; zero pending rollout pages and zero aliases. |
217
- | Production build | Pass | Vite transformed 3,350 modules and bundle budget passed. |
218
- | Browser suite | Pass | 389 Playwright tests passed across Chromium, Firefox, and WebKit; 4 engine-deduplicated checks skipped by design. |
219
- | Registry validation | Pass | 68 catalogs and 113 mirrors; all 68 packed component installs compiled and exported correctly. |
220
- | Token ownership | Pass | 91 owned token sources; 161 component/example files; metadata current for all 68 components. |
221
- | Package artifact | Pass | 300 packed files; 96-file registry closure; 72 examples; CLI smoke for all 68 installs. |
222
- | Documentation contracts | Pass | Markdown checks passed for all 68 components. |
223
- | Accessibility/RTL/containment | Pass | 69 of 69 component UI routes pass strict Axe and inherited-RTL containment at 324px. |
224
- | Contrast | Pass | 910 of 910 canonical scenarios pass. |
225
- | Visual regression | Pass | 69 of 69 canonical Chromium base-card baselines reproduce cleanly. |
226
- | Patch hygiene | Pass | Git diff whitespace/error check is clean. |
227
-
228
- Registry and package checks used an isolated npm cache under /tmp because the user-level npm cache contains root-owned entries. The user cache was not changed.
229
-
230
- ## Final verdict
231
-
232
- **Pass for the requested 96 component-ownership gaps.**
233
-
234
- The audited backgrounds and the two named copyable-documentation violations now use Banhaten-owned components, and the invariant is protected by an automated gate. The remaining 100 tracked gaps are visual/layout/token/asset work, not missing or approximated components.
235
-
236
- The component catalog is also clean under the broader implementation-quality audit. The remaining 100 tracked gaps are background visual/layout/token/asset fidelity work, not missing, approximated, or bypassed components. This distinction keeps the ownership result reliable without treating the separate background-fidelity backlog as component debt.
237
-
238
- ## Audit scope
239
-
240
- - Repository: /Users/ahmadgalal/Downloads/Work/Banhaten-design-system
241
- - Canonical surface: 68 registry catalog entries.
242
- - Consumer remediation surface: all 38 background implementations and scenario descriptors, plus the Activity Heatmap and Scroll Area copyable pages.
243
- - Generated artifacts validated: registry indexes, runtime mirrors, token metadata, component docs contracts, background catalog, and gap-promotion report.
244
- - Verification environments: TypeScript, Vitest, Vite production build, isolated packed installs, and Playwright on Chromium, Firefox, and WebKit.
245
- - Existing unrelated dirty-tree changes were preserved.
1
+ # Component Implementation and Ownership Audit
2
+
3
+ Audit date: 2026-08-20
4
+
5
+ Remediation status: complete for the requested 96 component-ownership gaps
6
+
7
+ ## Executive status
8
+
9
+ The requested component-gap remediation is complete.
10
+
11
+ - **96 of 96 requested issues are closed.**
12
+ - All **94 background component-kind gaps** were replaced with Banhaten-owned components or compositions and removed from scenario metadata.
13
+ - The two untracked ownership violations were fixed:
14
+ - Activity Heatmap period controls now use Segmented Control in the live page, copyable example, and customer-activity background.
15
+ - Scroll Area alternatives now use the Banhaten Scroll Area API and no longer import Radix directly.
16
+ - All **38 of 38 audited backgrounds** now pass the enforced component-only consumer rule.
17
+ - Those backgrounds contain **zero native button, input, select, textarea, or table roots**.
18
+ - Playground consumer source contains **zero direct imports from the restricted UI-vendor set**.
19
+ - A new AST-based ownership gate prevents those regressions from returning.
20
+
21
+ This is a pass for the requested component-ownership scope. The subsequent full component-quality audit also closed the five expanded-component primitive-reuse notes, so there are no known visible-control ownership exceptions in the component catalog. It is not a claim that every reference background is visually complete: **100 non-component fidelity gaps remain** and are tracked separately.
22
+
23
+ ## Before and after
24
+
25
+ | Measure | Before | Current | Status |
26
+ | --- | ---: | ---: | --- |
27
+ | Requested ownership issues | 96 | 0 open | Pass |
28
+ | Background component-kind gaps | 94 | 0 | Pass |
29
+ | Missing-component gaps | 47 | 0 | Pass |
30
+ | Component approximations | 47 | 0 | Pass |
31
+ | Strict component-only backgrounds | 2 of 38 | 38 of 38 | Pass |
32
+ | Native control/table roots in audited backgrounds | 27 | 0 | Pass |
33
+ | Activity Heatmap raw period-control usages | 3 surfaces | 0 | Pass |
34
+ | Scroll Area direct Radix consumer imports | 1 page | 0 | Pass |
35
+ | Automated ownership boundary | Absent | Enforced in playground test and root check | Pass |
36
+ | Non-component visual gaps | 100 | 100 | Outside this remediation |
37
+
38
+ The remaining visual-gap inventory is:
39
+
40
+ | Gap kind | Count |
41
+ | --- | ---: |
42
+ | Layout/composition fidelity | 47 |
43
+ | Icon assets | 20 |
44
+ | Image assets | 20 |
45
+ | Tokens | 13 |
46
+ | **Total** | **100** |
47
+
48
+ ## What changed
49
+
50
+ ### Ownership violations
51
+
52
+ - [ActivityHeatmapPage.tsx](../../playground/src/pages/new-components/ActivityHeatmapPage.tsx) now composes SegmentedControl and SegmentedControlItem in both published code and the live example.
53
+ - [customer-activity-dashboard/index.tsx](../../playground/src/app/backgrounds/customer-activity-dashboard/index.tsx) uses the same owned segmented-control contract.
54
+ - [ScrollAreaPage.tsx](../../playground/src/pages/ScrollAreaPage.tsx) no longer imports or assembles Radix primitives.
55
+ - [scroll-area.tsx](../../registry/components/scroll-area.tsx) now exposes vertical, horizontal, and combined orientation behavior through the Banhaten API.
56
+
57
+ ### Reusable APIs promoted to close repeated gaps
58
+
59
+ - [table-elements.tsx](../../registry/components/table-elements.tsx) adds Banhaten-owned semantic table and data-surface elements.
60
+ - [card.tsx](../../registry/components/card.tsx) adds CardSurface for product-specific card composition without redrawing a card shell.
61
+ - [sidebar.tsx](../../registry/components/sidebar.tsx) supports standalone owned sidebar surfaces while preserving provider-aware behavior for interactive sidebar parts.
62
+ - [Steps.tsx](../../registry/components/expanded/Steps.tsx) adds ProgressSteps with bar and marker variants.
63
+ - [Timeline.tsx](../../registry/components/expanded/Timeline.tsx) accepts richer label/caption content and local styling hooks needed by migrated flows.
64
+
65
+ ### Background migrations
66
+
67
+ The 38 reference backgrounds were audited and migrated as a complete set. The repeated replacements include:
68
+
69
+ - Native buttons to Button, Button Group, Segmented Control, or the relevant owned action component.
70
+ - Handcrafted switches to Toggle.
71
+ - Native inputs/selects/textareas to the matching Banhaten form owner.
72
+ - Native data tables and ARIA table shells to TableRoot or DataTableSurface compositions.
73
+ - Handcrafted cards to CardSurface.
74
+ - Root application sidebars to Sidebar.
75
+ - Custom progress bars, numbered setup flows, and status tracks to ProgressSteps, Steps, or Timeline.
76
+ - Product chips and variables to Tag, Badge, and Avatar composition.
77
+
78
+ Component-gap metadata and component-gap DOM markers were removed only after the corresponding implementations migrated and passed type, unit, build, and browser checks.
79
+
80
+ ## Enforced ownership boundary
81
+
82
+ The ownership rule is layer-aware:
83
+
84
+ 1. **Registry foundation layer:** Native HTML and declared behavior libraries may be used inside the Banhaten component that owns and publishes that behavior.
85
+ 2. **Expanded registry layer:** Higher-level components should compose Banhaten primitives whenever an equivalent owner exists.
86
+ 3. **Consumer layer:** Backgrounds, examples, and copyable documentation must use Banhaten components for interactive controls. Passive semantic/layout HTML remains allowed.
87
+ 4. **Public integration exceptions:** Recharts remains an intentional extension surface of Chart. No such exception exists for direct Radix, cmdk, Embla, react-resizable-panels, or Sonner imports in playground consumers.
88
+ 5. **Test fixtures:** Native elements may be used when a test specifically needs a fixture and does not publish that fixture as product guidance.
89
+
90
+ [component-ownership.test.mjs](../../playground/src/test/component-ownership.test.mjs) now enforces:
91
+
92
+ - No direct playground consumer imports from Radix, cmdk, Embla, react-resizable-panels, or Sonner.
93
+ - No native button, input, select, textarea, or table roots in any background implementation.
94
+ - No component-kind background gap metadata.
95
+ - No raw controls or direct restricted-vendor imports in the copyable Activity Heatmap and Scroll Area pages.
96
+
97
+ The gate runs first in the playground test pipeline and is also available from the repository root as components:ownership:check.
98
+
99
+ ## Component-by-component status
100
+
101
+ All 68 catalog components remain owned, buildable, installable, documented, token-validated, and runtime-export validated. The status below focuses on implementation ownership after remediation.
102
+
103
+ | Component | Status | Ownership note |
104
+ | --- | --- | --- |
105
+ | Accordion | Pass | Owned declared Radix wrapper. |
106
+ | Aspect Ratio | Pass | Owned declared Radix wrapper. |
107
+ | Avatar | Pass | Owned declared Radix wrapper. |
108
+ | Badge | Pass | Owned Slot/CVA primitive. |
109
+ | Tag | Pass | Canonical owned tag/chip owner. |
110
+ | Attribute | Pass | Owned structural key/value composition. |
111
+ | Button | Pass | Canonical action owner. |
112
+ | Card | Pass | Owned card family; CardSurface now covers custom card shells. |
113
+ | Chart | Pass — integration | Banhaten owns container, tooltip, legend, and tokens; Recharts children are the documented public extension. |
114
+ | Carousel | Pass — integration | Owned declared Embla behavior with Banhaten controls. |
115
+ | Button Group | Pass | Canonical connected action/toggle owner. |
116
+ | Segmented Control | Pass | Owned mutually exclusive control composed from Button Group. |
117
+ | Toggle | Pass | Owned declared switch behavior. |
118
+ | Menu | Pass | Owned declared Radix menu implementation. |
119
+ | Menubar | Pass | Owned declared Radix menubar implementation. |
120
+ | Command | Pass — integration | Owned cmdk-backed command surface. |
121
+ | Context Menu | Pass | Owned declared Radix context-menu implementation. |
122
+ | Tooltip | Pass | Owned declared Radix tooltip implementation. |
123
+ | Popover | Pass | Owned declared Radix popover implementation. |
124
+ | Hover Card | Pass | Owned declared Radix hover-card implementation. |
125
+ | Modal | Pass | Owned declared dialog behavior and action composition. |
126
+ | Alert Dialog | Pass | Owned declared alert-dialog behavior with Banhaten actions. |
127
+ | Checkbox | Pass | Owned checkbox and checkbox-card behavior. |
128
+ | Collapsible | Pass | Owned declared collapsible implementation. |
129
+ | Radio Group | Pass | Canonical owned radio-group owner. |
130
+ | Radio Card | Pass | Canonical owned radio-card owner. |
131
+ | Divider | Pass | Owned structural separator. |
132
+ | Pagination | Pass | Canonical pagination owner. |
133
+ | Toolbar | Pass | Owned search, action, filter, and select-trigger family. |
134
+ | Social Button | Pass | Owned provider-action primitive. |
135
+ | Input | Pass | Canonical input owner. |
136
+ | Input Group | Pass | Owned grouped input and inline-action surface. |
137
+ | Label | Pass | Owned declared label implementation. |
138
+ | Kbd | Pass | Owned keyboard-hint primitive. |
139
+ | Item | Pass | Owned Slot-based row composition. |
140
+ | Field | Pass | Owned field composition using Label. |
141
+ | Input OTP | Pass | Owned OTP slot and form behavior. |
142
+ | Select | Pass | Owned declared select and rich menu-item surfaces. |
143
+ | Native Select | Pass | Canonical native-select owner. |
144
+ | Sheet | Pass | Owned edge-panel dialog behavior. |
145
+ | Sidebar | Pass | Canonical provider-aware and standalone sidebar owner. |
146
+ | Navigation Menu | Pass | Owned declared navigation-menu implementation. |
147
+ | Scroll Area | Pass | Owned orientation API; direct consumer Radix usage removed. |
148
+ | Resizable | Pass — integration | Owned react-resizable-panels wrapper. |
149
+ | Autocomplete | Pass | Composes Input, Popover, Select, and Tag. |
150
+ | Date Picker | Pass | Owned calendar behavior composed with Banhaten primitives. |
151
+ | Slider | Pass | Owned declared slider implementation. |
152
+ | Progress | Pass | Owned read-only progress primitive. |
153
+ | Progress Slider | Pass | Owned declared interactive progress control. |
154
+ | Textarea | Pass | Canonical textarea owner. |
155
+ | Skeleton | Pass | Owned loading-placeholder family. |
156
+ | Spinner | Pass | Owned loading indicator. |
157
+ | Toast | Pass — integration | Owned Sonner-backed feedback API and token layer. |
158
+ | Activity Feed | Pass | Owned activity composition using Banhaten actions. |
159
+ | Activity Heatmap | Pass | Owned heatmap; period controls now use Segmented Control everywhere published. |
160
+ | Alert | Pass | Canonical alert owner. |
161
+ | Banner | Pass | Composes Banhaten Button and Input. |
162
+ | Catalog Components | Pass | Publishable owned composition; catalog divider actions use Button and the bundle has a dedicated docs page. |
163
+ | Breadcrumbs | Pass | Canonical breadcrumb navigation owner. |
164
+ | File Upload | Pass | Hidden native file input is the valid owned platform hook; all visible browse/retry actions use Button. |
165
+ | Table | Pass | Semantic table surface closes consumer gaps; visible actions use Button and selection/meter semantics are owned. |
166
+ | Empty State | Pass | Uses Banhaten actions, including link composition. |
167
+ | Onboarding Step | Pass | Owned presentational step row. |
168
+ | Page Header | Pass | Composes Breadcrumbs, Tabs, and Button with explicit heading-level and landmark contracts. |
169
+ | Slideout | Pass | Explicitly documented as a named presentational region and composes Button actions; it no longer claims incomplete dialog behavior. |
170
+ | Steps | Pass | Owns standard, horizontal, vertical, and ProgressSteps compositions. |
171
+ | Tabs | Pass | Owned declared tabs implementation. |
172
+ | Timeline | Pass | Owned timeline composition with richer content hooks. |
173
+
174
+ Component summary:
175
+
176
+ - **68 of 68** catalog entries pass build, publication, docs, tokens, and isolated-install validation.
177
+ - **68 of 68** have no open primitive-reuse or visible-control ownership note in this audit.
178
+ - The only native interactive element in the expanded layer is File Upload's hidden `input[type=file]`, which is the owning platform behavior rather than a visible consumer bypass.
179
+
180
+ ## Remaining work outside the 96 gaps
181
+
182
+ ### Visual fidelity backlog
183
+
184
+ The remaining 100 gaps are non-component concerns. The current promotion report identifies four recurring candidate families:
185
+
186
+ - Workspace shell/layout composition.
187
+ - Icon assets.
188
+ - Elevation treatment.
189
+ - Avatar/image assets.
190
+
191
+ See [gap-promotion-report.md](./gap-promotion-report.md) for the generated detail.
192
+
193
+ ### Component-quality closure
194
+
195
+ The former internal primitive-reuse notes are closed: Catalog Divider, File Upload, Table, Page Header, Slideout, and Alert use owned visible actions, while Page Header also composes Breadcrumbs. Slideout is deliberately a named presentational region rather than an incomplete dialog; modal interaction remains owned by Sheet and Modal.
196
+
197
+ The full route audit now covers all component pages with strict Axe, inherited RTL, 324px document containment, and deterministic Chromium base-card screenshots. Contrast is also clean at 910 of 910 scenarios.
198
+
199
+ ### Structural hotspots
200
+
201
+ The largest implementation units remain Date Picker, expanded Table, Input, Menu, Select, and Modal. They pass current checks, but splitting helpers/state from public component modules would reduce future change risk.
202
+
203
+ ### Test depth
204
+
205
+ Every component route has uniform Axe, inherited-RTL, 324px containment, documentation, and visual-baseline coverage. Deep interaction-specific keyboard and focus assertions remain intentionally component-specific because their behavior contracts differ.
206
+
207
+ ## Verification results
208
+
209
+ | Gate | Result | Evidence |
210
+ | --- | --- | --- |
211
+ | Component ownership | Pass | 38 backgrounds; zero component gaps; zero native controls; zero restricted direct consumer UI-vendor imports. |
212
+ | Background metadata | Pass | 38 scenarios and 100 remaining non-component gaps are internally consistent. |
213
+ | Gap promotion report | Pass | Current with 4 candidates across 38 backgrounds. |
214
+ | TypeScript | Pass | Playground typecheck completed with no errors. |
215
+ | Unit/component tests | Pass | 8 Vitest files and 205 tests. |
216
+ | Documentation coverage | Pass | 68 registry-backed pages; zero pending rollout pages and zero aliases. |
217
+ | Production build | Pass | Vite transformed 3,350 modules and bundle budget passed. |
218
+ | Browser suite | Pass | 389 Playwright tests passed across Chromium, Firefox, and WebKit; 4 engine-deduplicated checks skipped by design. |
219
+ | Registry validation | Pass | 68 catalogs and 113 mirrors; all 68 packed component installs compiled and exported correctly. |
220
+ | Token ownership | Pass | 91 owned token sources; 161 component/example files; metadata current for all 68 components. |
221
+ | Package artifact | Pass | 300 packed files; 96-file registry closure; 72 examples; CLI smoke for all 68 installs. |
222
+ | Documentation contracts | Pass | Markdown checks passed for all 68 components. |
223
+ | Accessibility/RTL/containment | Pass | 69 of 69 component UI routes pass strict Axe and inherited-RTL containment at 324px. |
224
+ | Contrast | Pass | 910 of 910 canonical scenarios pass. |
225
+ | Visual regression | Pass | 69 of 69 canonical Chromium base-card baselines reproduce cleanly. |
226
+ | Patch hygiene | Pass | Git diff whitespace/error check is clean. |
227
+
228
+ Registry and package checks used an isolated npm cache under /tmp because the user-level npm cache contains root-owned entries. The user cache was not changed.
229
+
230
+ ## Final verdict
231
+
232
+ **Pass for the requested 96 component-ownership gaps.**
233
+
234
+ The audited backgrounds and the two named copyable-documentation violations now use Banhaten-owned components, and the invariant is protected by an automated gate. The remaining 100 tracked gaps are visual/layout/token/asset work, not missing or approximated components.
235
+
236
+ The component catalog is also clean under the broader implementation-quality audit. The remaining 100 tracked gaps are background visual/layout/token/asset fidelity work, not missing, approximated, or bypassed components. This distinction keeps the ownership result reliable without treating the separate background-fidelity backlog as component debt.
237
+
238
+ ## Audit scope
239
+
240
+ - Repository: /Users/ahmadgalal/Downloads/Work/Banhaten-design-system
241
+ - Canonical surface: 68 registry catalog entries.
242
+ - Consumer remediation surface: all 38 background implementations and scenario descriptors, plus the Activity Heatmap and Scroll Area copyable pages.
243
+ - Generated artifacts validated: registry indexes, runtime mirrors, token metadata, component docs contracts, background catalog, and gap-promotion report.
244
+ - Verification environments: TypeScript, Vitest, Vite production build, isolated packed installs, and Playwright on Chromium, Firefox, and WebKit.
245
+ - Existing unrelated dirty-tree changes were preserved.