banhaten 0.3.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.
- package/CHANGELOG.md +139 -73
- package/CONTRIBUTING.md +46 -44
- package/README.md +192 -190
- package/SECURITY.md +15 -15
- package/banhaten.config.example.json +11 -11
- package/docs/design-spacing.md +13 -0
- package/docs/design-system/README.md +22 -20
- package/docs/design-system/adoption-quality-remediation.md +87 -87
- package/docs/design-system/agent-usage.md +13 -13
- package/docs/design-system/appearance-presets.md +189 -189
- package/docs/design-system/appearances/default.md +94 -94
- package/docs/design-system/appearances/rounded.md +95 -95
- package/docs/design-system/appearances/sharp.md +95 -95
- package/docs/design-system/component-docs-pattern.md +81 -81
- package/docs/design-system/component-implementation-ownership-audit.md +245 -244
- package/docs/design-system/component-quality-audit-2026-08-20.md +225 -223
- package/docs/design-system/component-showcase-consistency-report.md +219 -219
- package/docs/design-system/component-token-consistency-audit.md +173 -173
- package/docs/design-system/components/README.md +90 -76
- package/docs/design-system/components/accordion.md +53 -53
- package/docs/design-system/components/activity-feed.md +94 -94
- package/docs/design-system/components/activity-heatmap.md +57 -57
- package/docs/design-system/components/agent-input.md +85 -0
- package/docs/design-system/components/alert-dialog.md +72 -72
- package/docs/design-system/components/alert.md +98 -98
- package/docs/design-system/components/approval-card.md +134 -0
- package/docs/design-system/components/aspect-ratio.md +45 -45
- package/docs/design-system/components/attribute.md +89 -89
- package/docs/design-system/components/autocomplete.md +75 -75
- package/docs/design-system/components/avatar.md +54 -54
- package/docs/design-system/components/badge.md +54 -54
- package/docs/design-system/components/banner.md +87 -87
- package/docs/design-system/components/breadcrumbs.md +177 -176
- package/docs/design-system/components/button-group.md +98 -98
- package/docs/design-system/components/button.md +83 -80
- package/docs/design-system/components/card.md +88 -88
- package/docs/design-system/components/carousel.md +46 -46
- package/docs/design-system/components/catalog-components.md +47 -47
- package/docs/design-system/components/chart.md +95 -24
- package/docs/design-system/components/checkbox.md +54 -54
- package/docs/design-system/components/collapsible.md +67 -53
- package/docs/design-system/components/command.md +62 -62
- package/docs/design-system/components/context-menu.md +46 -46
- package/docs/design-system/components/date-picker.md +81 -79
- package/docs/design-system/components/divider.md +102 -102
- package/docs/design-system/components/empty-state.md +56 -56
- package/docs/design-system/components/field.md +70 -70
- package/docs/design-system/components/file-upload.md +187 -187
- package/docs/design-system/components/hover-card.md +48 -48
- package/docs/design-system/components/icons.md +48 -48
- package/docs/design-system/components/inline-citations.md +93 -0
- package/docs/design-system/components/input-group.md +58 -58
- package/docs/design-system/components/input-otp.md +56 -56
- package/docs/design-system/components/input.md +117 -61
- package/docs/design-system/components/item.md +59 -57
- package/docs/design-system/components/kbd.md +54 -49
- package/docs/design-system/components/label.md +49 -49
- package/docs/design-system/components/menu.md +71 -61
- package/docs/design-system/components/menubar.md +47 -47
- package/docs/design-system/components/modal.md +105 -105
- package/docs/design-system/components/native-select.md +54 -54
- package/docs/design-system/components/navigation-menu.md +50 -50
- package/docs/design-system/components/onboarding-step-list-item.md +82 -82
- package/docs/design-system/components/page-header.md +93 -86
- package/docs/design-system/components/pagination.md +57 -57
- package/docs/design-system/components/popover.md +60 -60
- package/docs/design-system/components/progress-slider.md +50 -50
- package/docs/design-system/components/progress.md +76 -76
- package/docs/design-system/components/radio-card.md +51 -51
- package/docs/design-system/components/radio-group.md +57 -57
- package/docs/design-system/components/resizable.md +44 -44
- package/docs/design-system/components/rolling-count.md +61 -0
- package/docs/design-system/components/scroll-area.md +51 -51
- package/docs/design-system/components/segmented-control.md +54 -54
- package/docs/design-system/components/select.md +68 -62
- package/docs/design-system/components/sheet.md +67 -67
- package/docs/design-system/components/shimmer-text.md +67 -0
- package/docs/design-system/components/sidebar.md +127 -76
- package/docs/design-system/components/skeleton.md +75 -75
- package/docs/design-system/components/slideout.md +65 -65
- package/docs/design-system/components/slider.md +63 -63
- package/docs/design-system/components/social-button.md +50 -50
- package/docs/design-system/components/spinner.md +62 -62
- package/docs/design-system/components/steps.md +65 -65
- package/docs/design-system/components/streaming-text.md +82 -0
- package/docs/design-system/components/table.md +419 -414
- package/docs/design-system/components/tabs.md +59 -55
- package/docs/design-system/components/tag.md +80 -80
- package/docs/design-system/components/task-list.md +95 -0
- package/docs/design-system/components/textarea.md +50 -50
- package/docs/design-system/components/thinking-reasoning.md +72 -0
- package/docs/design-system/components/thinking-state.md +67 -0
- package/docs/design-system/components/timeline.md +83 -83
- package/docs/design-system/components/toast.md +58 -58
- package/docs/design-system/components/toggle.md +81 -81
- package/docs/design-system/components/toolbar.md +92 -87
- package/docs/design-system/components/tooltip.md +94 -92
- package/docs/design-system/components/typography.md +18 -18
- package/docs/design-system/density-and-elevation.md +65 -61
- package/docs/design-system/design-system-test-missing-items.md +368 -368
- package/docs/design-system/direction-and-localization.md +23 -23
- package/docs/design-system/form-recipes.md +73 -73
- package/docs/design-system/gap-promotion-policy.md +21 -21
- package/docs/design-system/icons.md +74 -69
- package/docs/design-system/installation.md +70 -68
- package/docs/design-system/launch-comparison-shadcn.md +98 -98
- package/docs/design-system/registry-and-cli.md +64 -64
- package/docs/design-system/release-policy.md +30 -30
- package/docs/design-system/roadmap.md +14 -14
- package/docs/design-system/support-matrix.md +23 -23
- package/docs/design-system/tabs.md +54 -53
- package/docs/design-system/template-gap-audit.md +32 -0
- package/docs/design-system/templates.md +59 -0
- package/docs/design-system/token-governance.md +72 -60
- package/package.json +98 -98
- package/registry/component-contract.json +40 -40
- package/registry/components/accordion.tsx +155 -155
- package/registry/components/agent-input-parts.tsx +552 -0
- package/registry/components/agent-input-state.ts +156 -0
- package/registry/components/agent-input.css +307 -0
- package/registry/components/agent-input.tsx +382 -0
- package/registry/components/alert-dialog.tsx +297 -297
- package/registry/components/alert.tsx +293 -293
- package/registry/components/approval-card.css +409 -0
- package/registry/components/approval-card.tsx +401 -0
- package/registry/components/approval-frame.tsx +108 -0
- package/registry/components/approval-questions.tsx +559 -0
- package/registry/components/aspect-ratio.tsx +30 -30
- package/registry/components/attribute.tsx +454 -448
- package/registry/components/autocomplete.tsx +598 -651
- package/registry/components/avatar.tsx +385 -381
- package/registry/components/badge.tsx +629 -629
- package/registry/components/button-group.tsx +565 -565
- package/registry/components/button.tsx +127 -123
- package/registry/components/card.tsx +638 -638
- package/registry/components/carousel.tsx +296 -296
- package/registry/components/chart-block-data.ts +177 -0
- package/registry/components/chart-block.css +171 -0
- package/registry/components/chart-block.tsx +260 -0
- package/registry/components/chart-interactions.ts +123 -0
- package/registry/components/chart-options.cartesian.ts +162 -0
- package/registry/components/chart-options.paint.ts +99 -0
- package/registry/components/chart-options.parts.ts +72 -0
- package/registry/components/chart-options.radial.ts +109 -0
- package/registry/components/chart-options.ts +44 -0
- package/registry/components/chart-options.types.ts +67 -0
- package/registry/components/chart.tsx +203 -203
- package/registry/components/checkbox.tsx +247 -247
- package/registry/components/collapsible.tsx +109 -69
- package/registry/components/command.tsx +208 -208
- package/registry/components/context-menu.tsx +236 -236
- package/registry/components/data-chart.tsx +40 -0
- package/registry/components/date-picker.tsx +1289 -1277
- package/registry/components/echart-theme.ts +246 -0
- package/registry/components/echart.css +49 -0
- package/registry/components/echart.tsx +178 -0
- package/registry/components/expanded/ActivityFeed.tsx +227 -227
- package/registry/components/expanded/ActivityHeatmap.tsx +64 -64
- package/registry/components/expanded/Banner.tsx +179 -179
- package/registry/components/expanded/Breadcrumbs.tsx +131 -131
- package/registry/components/expanded/CatalogComponentsShowcase.tsx +205 -205
- package/registry/components/expanded/CatalogDivider.tsx +49 -49
- package/registry/components/expanded/EmptyState.tsx +155 -155
- package/registry/components/expanded/FileUpload.tsx +543 -543
- package/registry/components/expanded/OnboardingStepListItem.tsx +60 -59
- package/registry/components/expanded/PageHeader.tsx +179 -166
- package/registry/components/expanded/Slideout.tsx +108 -108
- package/registry/components/expanded/Steps.tsx +402 -402
- package/registry/components/expanded/Table.tsx +1092 -1071
- package/registry/components/expanded/Timeline.tsx +203 -203
- package/registry/components/expanded/activityFeed.css +248 -248
- package/registry/components/expanded/activityHeatmap.css +66 -66
- package/registry/components/expanded/banner.css +260 -255
- package/registry/components/expanded/breadcrumbs.css +140 -140
- package/registry/components/expanded/catalogComponentsShowcase.css +87 -87
- package/registry/components/expanded/divider.css +75 -75
- package/registry/components/expanded/emptyState.css +111 -111
- package/registry/components/expanded/fileUpload.css +457 -457
- package/registry/components/expanded/onboardingStepListItem.css +135 -126
- package/registry/components/expanded/pageHeader.css +248 -290
- package/registry/components/expanded/slideout.css +276 -276
- package/registry/components/expanded/steps.css +356 -356
- package/registry/components/expanded/table.css +606 -603
- package/registry/components/expanded/timeline.css +286 -286
- package/registry/components/field.tsx +283 -283
- package/registry/components/hover-card.tsx +48 -48
- package/registry/components/inline-citations.css +126 -0
- package/registry/components/inline-citations.tsx +292 -0
- package/registry/components/input-content.ts +107 -107
- package/registry/components/input-group.tsx +130 -130
- package/registry/components/input-otp.tsx +584 -584
- package/registry/components/input.tsx +990 -972
- package/registry/components/item.tsx +189 -189
- package/registry/components/kbd.tsx +246 -151
- package/registry/components/label.tsx +78 -78
- package/registry/components/menu.tsx +978 -986
- package/registry/components/menubar.tsx +226 -226
- package/registry/components/modal.tsx +872 -872
- package/registry/components/native-select.tsx +205 -205
- package/registry/components/navigation-menu.tsx +171 -171
- package/registry/components/pagination.css +36 -36
- package/registry/components/pagination.tsx +560 -555
- package/registry/components/popover.tsx +338 -338
- package/registry/components/progress-slider.tsx +216 -216
- package/registry/components/radio-card.tsx +676 -677
- package/registry/components/radio-group.tsx +570 -570
- package/registry/components/resizable.tsx +108 -108
- package/registry/components/rolling-count.css +37 -0
- package/registry/components/rolling-count.tsx +110 -0
- package/registry/components/scroll-area.tsx +91 -91
- package/registry/components/segmented-control.tsx +87 -87
- package/registry/components/select-content.tsx +218 -218
- package/registry/components/select.tsx +937 -932
- package/registry/components/sheet.tsx +305 -305
- package/registry/components/shimmer-text.css +69 -0
- package/registry/components/shimmer-text.tsx +43 -0
- package/registry/components/sidebar.tsx +1433 -358
- package/registry/components/skeleton.css +54 -54
- package/registry/components/skeleton.tsx +482 -482
- package/registry/components/slider.tsx +380 -380
- package/registry/components/social-button.tsx +387 -387
- package/registry/components/spinner.tsx +78 -78
- package/registry/components/streaming-text.css +45 -0
- package/registry/components/streaming-text.tsx +165 -0
- package/registry/components/table-elements.tsx +128 -128
- package/registry/components/tabs.css +222 -218
- package/registry/components/tabs.tsx +241 -241
- package/registry/components/tag.tsx +423 -423
- package/registry/components/task-list.css +328 -0
- package/registry/components/task-list.tsx +429 -0
- package/registry/components/textarea.tsx +610 -610
- package/registry/components/thinking-reasoning.css +178 -0
- package/registry/components/thinking-reasoning.tsx +253 -0
- package/registry/components/thinking-state.css +8 -0
- package/registry/components/thinking-state.tsx +46 -0
- package/registry/components/toast.tsx +136 -136
- package/registry/components/toggle.tsx +256 -256
- package/registry/components/toolbar.tsx +539 -539
- package/registry/components/tooltip.tsx +433 -431
- package/registry/examples/agent-input-demo.tsx +90 -0
- package/registry/examples/alert-demo.tsx +34 -34
- package/registry/examples/alert-dialog-demo.tsx +42 -42
- package/registry/examples/approval-card-demo.tsx +83 -0
- package/registry/examples/aspect-ratio-demo.tsx +11 -11
- package/registry/examples/attribute-demo.tsx +65 -65
- package/registry/examples/autocomplete-demo.tsx +109 -109
- package/registry/examples/avatar-demo.tsx +132 -132
- package/registry/examples/badge-demo.tsx +69 -69
- package/registry/examples/button-demo.tsx +86 -83
- package/registry/examples/button-group-demo.tsx +63 -63
- package/registry/examples/card-demo.tsx +86 -86
- package/registry/examples/carousel-demo.tsx +43 -43
- package/registry/examples/chart-block-demo.tsx +5 -0
- package/registry/examples/chart-demo.tsx +18 -33
- package/registry/examples/checkbox-demo.tsx +62 -62
- package/registry/examples/collapsible-demo.tsx +16 -16
- package/registry/examples/collection-filter-bar-demo.tsx +135 -135
- package/registry/examples/command-demo.tsx +42 -42
- package/registry/examples/command-palette-demo.tsx +235 -236
- package/registry/examples/context-menu-demo.tsx +29 -29
- package/registry/examples/control-density-contract-demo.tsx +65 -61
- package/registry/examples/date-picker-demo.tsx +127 -127
- package/registry/examples/divider-demo.tsx +17 -17
- package/registry/examples/expanded/activity-heatmap-demo.tsx +29 -29
- package/registry/examples/expanded/banner-demo.tsx +48 -48
- package/registry/examples/expanded/breadcrumbs-demo.tsx +59 -59
- package/registry/examples/expanded/empty-state-demo.tsx +39 -39
- package/registry/examples/expanded/file-upload-demo.tsx +60 -60
- package/registry/examples/expanded/onboarding-step-demo.tsx +11 -11
- package/registry/examples/expanded/slideout-demo.tsx +15 -15
- package/registry/examples/expanded/steps-demo.tsx +29 -29
- package/registry/examples/expanded/tabs-demo.tsx +13 -13
- package/registry/examples/expanded/timeline-demo.tsx +18 -18
- package/registry/examples/field-demo.tsx +51 -51
- package/registry/examples/hover-card-demo.tsx +23 -23
- package/registry/examples/inline-citations-demo.tsx +31 -0
- package/registry/examples/input-actions-demo.tsx +36 -0
- package/registry/examples/input-demo.tsx +87 -87
- package/registry/examples/input-group-demo.tsx +16 -16
- package/registry/examples/input-otp-demo.tsx +72 -72
- package/registry/examples/item-demo.tsx +46 -46
- package/registry/examples/kbd-demo.tsx +12 -11
- package/registry/examples/label-demo.tsx +20 -20
- package/registry/examples/menu-demo.tsx +122 -122
- package/registry/examples/menubar-demo.tsx +34 -34
- package/registry/examples/modal-demo.tsx +74 -74
- package/registry/examples/native-select-demo.tsx +16 -16
- package/registry/examples/navigation-menu-demo.tsx +29 -29
- package/registry/examples/pagination-demo.tsx +20 -20
- package/registry/examples/popover-demo.tsx +547 -546
- package/registry/examples/progress-demo.tsx +37 -37
- package/registry/examples/progress-slider-demo.tsx +29 -29
- package/registry/examples/radio-card-demo.tsx +51 -51
- package/registry/examples/radio-group-demo.tsx +62 -62
- package/registry/examples/resizable-demo.tsx +22 -22
- package/registry/examples/results-toolbar-demo.tsx +44 -44
- package/registry/examples/rolling-count-demo.tsx +39 -0
- package/registry/examples/scroll-area-demo.tsx +15 -15
- package/registry/examples/segmented-control-demo.tsx +39 -39
- package/registry/examples/select-demo.tsx +87 -87
- package/registry/examples/sheet-demo.tsx +47 -47
- package/registry/examples/shimmer-text-demo.tsx +20 -0
- package/registry/examples/sidebar-demo.tsx +101 -57
- package/registry/examples/slider-demo.tsx +31 -31
- package/registry/examples/social-button-demo.tsx +61 -61
- package/registry/examples/spinner-demo.tsx +59 -59
- package/registry/examples/streaming-text-demo.tsx +28 -0
- package/registry/examples/tabs-demo.tsx +13 -13
- package/registry/examples/tag-demo.tsx +29 -29
- package/registry/examples/task-list-demo.tsx +74 -0
- package/registry/examples/textarea-demo.tsx +79 -79
- package/registry/examples/thinking-reasoning-demo.tsx +74 -0
- package/registry/examples/thinking-state-demo.tsx +13 -0
- package/registry/examples/toast-demo.tsx +35 -35
- package/registry/examples/toggle-demo.tsx +59 -59
- package/registry/examples/tooltip-demo.tsx +115 -115
- package/registry/guidance/USAGE.md +27 -27
- package/registry/guidance/charts.LICENSE.txt +24 -0
- package/registry/hooks/use-controllable-state.ts +33 -0
- package/registry/hooks/use-direction.ts +207 -207
- package/registry/hooks/use-listbox-navigation.ts +73 -0
- package/registry/hooks/use-motion-end.ts +55 -0
- package/registry/hooks/use-reduced-motion.ts +28 -0
- package/registry/index.json +1634 -184
- package/registry/styles/globals.css +1462 -1570
- package/registry.json +364 -10
- package/schema/config.schema.json +51 -51
- package/schema/registry.schema.json +194 -190
- package/schema/tokens.schema.json +167 -163
- package/src/cli/command-line.js +194 -194
- package/src/cli/config-editors.js +9 -9
- package/src/cli/doctor.js +399 -399
- package/src/cli/file-transaction.js +302 -295
- package/src/cli/global-css.js +153 -153
- package/src/cli/index.js +1002 -1009
- package/src/cli/install-plan.js +592 -592
- package/src/cli/install-receipt.js +171 -171
- package/src/cli/jsonc.js +203 -203
- package/src/cli/package-install-state.js +254 -254
- package/src/cli/package-manager.js +238 -238
- package/src/cli/package-plan.js +185 -185
- package/src/cli/package-version.js +97 -97
- package/src/cli/registry-query.js +207 -207
- package/src/cli/reporting.js +55 -55
- package/src/cli/schema-validation.js +19 -19
- package/src/cli/source-scanner.js +686 -686
- package/src/cli/vite-config.js +478 -478
- package/tokens/banhaten.tokens.json +458 -224
|
@@ -1,223 +1,225 @@
|
|
|
1
|
-
# Component Implementation Quality Audit — Final Status
|
|
2
|
-
|
|
3
|
-
Audit date: 2026-08-20
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
- **
|
|
18
|
-
- **
|
|
19
|
-
- **
|
|
20
|
-
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
- all 68
|
|
31
|
-
-
|
|
32
|
-
-
|
|
33
|
-
-
|
|
34
|
-
-
|
|
35
|
-
-
|
|
36
|
-
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
|
52
|
-
|
|
|
53
|
-
|
|
|
54
|
-
|
|
|
55
|
-
|
|
|
56
|
-
|
|
|
57
|
-
|
|
|
58
|
-
|
|
|
59
|
-
|
|
|
60
|
-
|
|
|
61
|
-
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
-
|
|
70
|
-
-
|
|
71
|
-
-
|
|
72
|
-
-
|
|
73
|
-
-
|
|
74
|
-
-
|
|
75
|
-
- Added
|
|
76
|
-
-
|
|
77
|
-
-
|
|
78
|
-
-
|
|
79
|
-
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
-
|
|
84
|
-
|
|
85
|
-
-
|
|
86
|
-
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
-
|
|
93
|
-
-
|
|
94
|
-
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
-
|
|
101
|
-
-
|
|
102
|
-
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
-
|
|
115
|
-
-
|
|
116
|
-
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
|
123
|
-
|
|
|
124
|
-
|
|
|
125
|
-
|
|
|
126
|
-
|
|
|
127
|
-
|
|
|
128
|
-
|
|
|
129
|
-
|
|
|
130
|
-
|
|
|
131
|
-
|
|
|
132
|
-
|
|
|
133
|
-
|
|
|
134
|
-
|
|
|
135
|
-
|
|
|
136
|
-
|
|
|
137
|
-
|
|
|
138
|
-
|
|
|
139
|
-
|
|
|
140
|
-
|
|
|
141
|
-
|
|
|
142
|
-
|
|
|
143
|
-
|
|
|
144
|
-
|
|
|
145
|
-
|
|
|
146
|
-
|
|
|
147
|
-
|
|
|
148
|
-
|
|
|
149
|
-
|
|
|
150
|
-
|
|
|
151
|
-
|
|
|
152
|
-
|
|
|
153
|
-
|
|
|
154
|
-
|
|
|
155
|
-
|
|
|
156
|
-
|
|
|
157
|
-
|
|
|
158
|
-
|
|
|
159
|
-
|
|
|
160
|
-
|
|
|
161
|
-
|
|
|
162
|
-
|
|
|
163
|
-
|
|
|
164
|
-
|
|
|
165
|
-
|
|
|
166
|
-
|
|
|
167
|
-
|
|
|
168
|
-
|
|
|
169
|
-
|
|
|
170
|
-
|
|
|
171
|
-
|
|
|
172
|
-
|
|
|
173
|
-
|
|
|
174
|
-
|
|
|
175
|
-
|
|
|
176
|
-
|
|
|
177
|
-
|
|
|
178
|
-
|
|
|
179
|
-
|
|
|
180
|
-
|
|
|
181
|
-
|
|
|
182
|
-
|
|
|
183
|
-
|
|
|
184
|
-
|
|
|
185
|
-
|
|
|
186
|
-
|
|
|
187
|
-
|
|
|
188
|
-
|
|
|
189
|
-
|
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
|
196
|
-
|
|
|
197
|
-
|
|
|
198
|
-
|
|
|
199
|
-
|
|
|
200
|
-
|
|
|
201
|
-
|
|
|
202
|
-
|
|
|
203
|
-
|
|
|
204
|
-
|
|
|
205
|
-
|
|
|
206
|
-
|
|
|
207
|
-
|
|
|
208
|
-
|
|
|
209
|
-
|
|
|
210
|
-
|
|
|
211
|
-
|
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
1
|
+
# Component Implementation Quality Audit — Final Status
|
|
2
|
+
|
|
3
|
+
Audit date: 2026-08-20
|
|
4
|
+
|
|
5
|
+
Repository: `Banhaten-design-system`
|
|
6
|
+
|
|
7
|
+
Remediation status: complete for the component-library scope
|
|
8
|
+
|
|
9
|
+
## Executive verdict
|
|
10
|
+
|
|
11
|
+
**Pass.** All 68 registry components now pass the repository's implementation, ownership, accessibility, contrast, RTL, responsive-containment, documentation, token, publication, install, unit, build, and browser contracts.
|
|
12
|
+
|
|
13
|
+
The previous 96 component-ownership gaps remain closed. The wider quality review also closed the concrete ARIA, focus, landmark, contrast, inherited-RTL, narrow-layout, primitive-reuse, metadata, and proof-coverage defects found during the audit.
|
|
14
|
+
|
|
15
|
+
Current measured status:
|
|
16
|
+
|
|
17
|
+
- **68 of 68 registry components** are owned, documented on dedicated pages, token-current, packageable, and isolated-install validated.
|
|
18
|
+
- **69 of 69 component UI routes** — the 68 registry pages plus the non-installable Icons explorer — pass the strict route-wide Axe scan and inherited-RTL 324px containment sweep.
|
|
19
|
+
- **69 of 69 routes** have deterministic Chromium base-card visual baselines, and all 69 reproduce without diffs.
|
|
20
|
+
- **910 of 910 contrast scenarios pass**; there are zero known failures in the canonical audit.
|
|
21
|
+
- **38 of 38 audited backgrounds** have zero component-kind gaps, zero native interactive/table roots, and zero restricted direct UI-vendor imports.
|
|
22
|
+
- The final authoritative `npm run check` is green: **389 Playwright tests passed, 4 intentionally browser-deduplicated tests skipped, 205 unit tests passed, and npm reported 0 vulnerabilities.**
|
|
23
|
+
|
|
24
|
+
This is a 100% audit of the repository's declared component catalog and executable contracts. It is not a claim of pixel equivalence to an external Figma source that was not part of this task. The 100 tracked background fidelity gaps for layout, icon assets, image assets, and tokens remain a separate non-component backlog.
|
|
25
|
+
|
|
26
|
+
## Scope and assurance model
|
|
27
|
+
|
|
28
|
+
The audit covered:
|
|
29
|
+
|
|
30
|
+
- all 68 authored catalog entries and their 113 mirrored registry files;
|
|
31
|
+
- all published component source, CSS, exports, examples, token references, generated metadata, and Markdown contracts;
|
|
32
|
+
- all 68 dedicated registry-backed documentation pages and the Icons explorer;
|
|
33
|
+
- Base and Alternatives content, live Anatomy where a single measurable root exists, and documented exemptions for portals, caller-sized canvases, and the Catalog composition bundle;
|
|
34
|
+
- every live route under LTR and inherited RTL, including 324px viewport containment;
|
|
35
|
+
- all live examples on each page through an unsuppressed Axe scan;
|
|
36
|
+
- state/theme/mode contrast through 910 generated scenarios;
|
|
37
|
+
- consumer ownership across all 38 background implementations;
|
|
38
|
+
- package closure, isolated installs, runtime exports, production build, cross-browser behavior, and visual regression output.
|
|
39
|
+
|
|
40
|
+
The assurance layers are intentionally different:
|
|
41
|
+
|
|
42
|
+
1. **Consumer layer:** product backgrounds, copyable examples, and documentation consumers must use Banhaten owners for interactive UI.
|
|
43
|
+
2. **Expanded component layer:** compositions use Banhaten primitives for visible controls. The only native interactive element left in this layer is File Upload's hidden `input[type=file]`, which is the behavior-owning platform input rather than a visible bypass.
|
|
44
|
+
3. **Foundation layer:** Banhaten wrappers may directly use their declared behavior libraries — Radix, cmdk, Embla, react-resizable-panels, Recharts, Sonner — because those wrappers are the owned component boundary.
|
|
45
|
+
4. **Semantic HTML:** elements such as `table`, `nav`, `hr`, headings, and list containers remain correct native structure; ownership does not mean replacing semantics with generic components.
|
|
46
|
+
|
|
47
|
+
Static scans confirm no raw visible `button`, `select`, or `textarea` controls in expanded components and no restricted UI-vendor imports in playground consumers or expanded components.
|
|
48
|
+
|
|
49
|
+
## Before and after
|
|
50
|
+
|
|
51
|
+
| Measure | Audit starting point | Final status |
|
|
52
|
+
| --- | ---: | ---: |
|
|
53
|
+
| Requested component-ownership gaps | 96 open | 0 open |
|
|
54
|
+
| Audited backgrounds using only owned controls | 2 of 38 | 38 of 38 |
|
|
55
|
+
| Missing catalog RTL contracts | 12 | 0 |
|
|
56
|
+
| Dedicated registry-backed component pages | 67 plus 1 alias | 68, no aliases |
|
|
57
|
+
| Canonical contrast audit | 468 pass / 274 fail / 742 total | 910 pass / 0 fail / 910 total |
|
|
58
|
+
| Route-wide automated accessibility | 48 clean / 19 flagged in the initial sweep | 69 clean / 0 flagged |
|
|
59
|
+
| 324px inherited-RTL route containment | Multiple component failures | 69 pass / 0 fail |
|
|
60
|
+
| Per-route component visual baselines | Incomplete | 69 of 69 |
|
|
61
|
+
| Unit/component tests | 187 | 205 passing |
|
|
62
|
+
| Cross-browser Playwright result | 315 passing | 389 passing, 4 intentional skips |
|
|
63
|
+
| Token/example source enforcement | 160 files | 161 files passing |
|
|
64
|
+
|
|
65
|
+
## Remediation completed
|
|
66
|
+
|
|
67
|
+
### Semantics and accessibility
|
|
68
|
+
|
|
69
|
+
- Rebuilt Date Picker's calendar as a valid named ARIA grid with rowgroups, rows, column headers, gridcells, localized labels, and selected-state contrast.
|
|
70
|
+
- Restored Select's Radix-owned combobox state, named standalone listboxes, made internal wrappers presentational, and kept checkbox-styled options valid inside listboxes.
|
|
71
|
+
- Guaranteed a real panel for every Tabs trigger, including Page Header's composed tabs.
|
|
72
|
+
- Corrected Command listbox ownership: separators and internal wrappers are presentational, and empty results are disabled options.
|
|
73
|
+
- Registered only mounted Field descriptions and errors in `aria-describedby`.
|
|
74
|
+
- Made Scroll Area, Button Group, Activity Heatmap, Resizable panel content, horizontal Timeline, and wide Table surfaces keyboard reachable where local scrolling can occur.
|
|
75
|
+
- Added valid Avatar image semantics, named Table progress/rating output, complete header names, and a named Table scroll region.
|
|
76
|
+
- Reframed Slideout as an explicit named presentational region instead of publishing incomplete dialog semantics.
|
|
77
|
+
- Added localized named Carousel landmarks and role descriptions.
|
|
78
|
+
- Corrected Menu switch ownership with `menuitemcheckbox`, hid the visual switch from the accessibility tree, and named Menu progress meters from their visible labels.
|
|
79
|
+
- Removed duplicate page/demo landmarks and IDs; documentation examples now preserve real landmark semantics while scoping repeated valid names to their owning example.
|
|
80
|
+
- Added configurable Page Header heading levels and removed SidebarInset's implicit nested `main`; consumers opt into `main` with `asChild`.
|
|
81
|
+
- Kept standalone TimelineItem neutral while Timeline owns `list`/`listitem` semantics.
|
|
82
|
+
|
|
83
|
+
### Owned-component composition
|
|
84
|
+
|
|
85
|
+
- Replaced visible raw actions in Catalog Divider, File Upload, Table, Page Header, Slideout, and Alert with the owned Button API.
|
|
86
|
+
- Page Header now composes the owned Breadcrumbs component.
|
|
87
|
+
- Expanded components contain no direct imports from restricted behavior vendors.
|
|
88
|
+
- All 38 audited backgrounds contain no native `button`, `input`, `select`, `textarea`, or `table` roots and no restricted direct vendor imports.
|
|
89
|
+
|
|
90
|
+
### RTL and localization
|
|
91
|
+
|
|
92
|
+
- Reworked Activity Feed, Steps, Timeline, Slideout, Activity Heatmap, Banner, Onboarding Step, Breadcrumbs, File Upload, Table, Page Header, and Social Button to inherit the nearest direction boundary instead of requiring a direct prop.
|
|
93
|
+
- Converted physical spacing/position branches to logical CSS where direction changes placement.
|
|
94
|
+
- Fixed Social Button's inline width precedence so provider-specific RTL widths and Arabic labels remain contained.
|
|
95
|
+
- Added or completed machine-readable RTL contracts for all 68 catalog entries.
|
|
96
|
+
- Localized Carousel landmark/control messages without coupling language choice to direction.
|
|
97
|
+
|
|
98
|
+
### Responsive layout and containment
|
|
99
|
+
|
|
100
|
+
- Added narrow rules or local-scroll contracts for Card, Toolbar, Progress Slider, Button Group, Pagination, Table, Banner, Timeline, and the Catalog showcase.
|
|
101
|
+
- Pagination uses a component container query and collapses long numeric runs without losing navigation controls.
|
|
102
|
+
- Table now has keyboard-reachable local scrolling plus paint containment, preventing a 960px data grid from expanding a 324px RTL document.
|
|
103
|
+
- Catalog cards, upload layouts, actions, and table compositions collapse safely at 324px.
|
|
104
|
+
- The complete inherited-RTL route sweep reports zero document overflows at 324px.
|
|
105
|
+
|
|
106
|
+
### Contrast and states
|
|
107
|
+
|
|
108
|
+
- Repaired semantic foreground/background roles across Avatar, Badge, Tag, Button, Date Picker, Alert, Banner, Toggle, Social Button, Table, and shared focus indicators.
|
|
109
|
+
- Expanded the canonical audit from 742 to 910 scenarios so repaired live-only cases are now represented in the durable gate.
|
|
110
|
+
- Final status is **910 pass, 0 fail**, including default, hover, pressed, selected, disabled, warning, success, danger, accent, dark/light, theme, typography, and focus-indicator scenarios covered by the audit data.
|
|
111
|
+
|
|
112
|
+
### Documentation and visual proof
|
|
113
|
+
|
|
114
|
+
- Every registry entry now has a dedicated normalized Markdown contract and a dedicated registry-backed playground page; pending rollout and bundle aliases are both zero.
|
|
115
|
+
- Every page exposes Base and Alternatives. Fifty single-root components also expose a live measured Anatomy inspector; eighteen portal/caller-sized/composition surfaces are explicitly exempt.
|
|
116
|
+
- Fixed percentage-width Anatomy fixtures for Pagination and Progress Slider so their off-screen measurement rack produces real geometry.
|
|
117
|
+
- Added one deterministic canonical screenshot per component UI route under `playground/e2e/__screenshots__`.
|
|
118
|
+
- Added a reviewed aggregate contact sheet at `output/audits/component-visual-baselines-contact-sheet.png` for clipping, collapse, spacing, and base-layout inspection.
|
|
119
|
+
|
|
120
|
+
## Component-by-component final status
|
|
121
|
+
|
|
122
|
+
| Component | Status | Final implementation note |
|
|
123
|
+
| --- | --- | --- |
|
|
124
|
+
| Accordion | Pass | Valid disclosure semantics; unique example region names; variants, sizes, states, and RTL documented. |
|
|
125
|
+
| Aspect Ratio | Pass | Owned Radix wrapper; caller-sized surface with explicit Anatomy exemption. |
|
|
126
|
+
| Avatar | Pass | Valid optional image naming and repaired fallback/disabled contrast. |
|
|
127
|
+
| Badge | Pass | State/theme foregrounds remapped to passing contrast roles. |
|
|
128
|
+
| Tag | Pass | Avatar and active/disabled states pass contrast and owned close actions. |
|
|
129
|
+
| Attribute | Pass | Owned semantic key/value composition with complete docs route. |
|
|
130
|
+
| Button | Pass | Owned action primitive; all audited state/theme contrast combinations pass. |
|
|
131
|
+
| Card | Pass | Horizontal layouts now collapse safely in narrow containers. |
|
|
132
|
+
| Chart | Pass — integration | Banhaten owns the chart shell, semantics, legend, tooltip, and tokens around Recharts. |
|
|
133
|
+
| Carousel | Pass — integration | Named/localized region, owned Button controls, Embla behavior, RTL, and containment pass. |
|
|
134
|
+
| Button Group | Pass | Keyboard-reachable local scroll, focus treatment, narrow containment, and RTL pass. |
|
|
135
|
+
| Segmented Control | Pass | Owned Button Group composition with pressed state and direction-aware keyboard behavior. |
|
|
136
|
+
| Toggle | Pass | Repaired supporting-copy contrast and complete state semantics. |
|
|
137
|
+
| Menu | Pass | Switch items, progress meters, separators, static previews, and Radix menus expose valid ownership. |
|
|
138
|
+
| Menubar | Pass | Owned Radix wrapper with cross-browser docs and accessibility coverage. |
|
|
139
|
+
| Command | Pass — integration | cmdk listbox tree, empty state, groups, and separators are now valid. |
|
|
140
|
+
| Context Menu | Pass | Owned portalled Radix behavior with documented exemption and clean route audit. |
|
|
141
|
+
| Tooltip | Pass | Placement, pointer, focus, RTL, and portal behavior pass. |
|
|
142
|
+
| Popover | Pass | Escape dismissal, focus return, portalled RTL, Axe, and visual baseline pass in all engines. |
|
|
143
|
+
| Hover Card | Pass | Owned Radix behavior with clean route and docs contracts. |
|
|
144
|
+
| Modal | Pass | Dialog naming, focus entry/trap/return, actions, and documentation pass. |
|
|
145
|
+
| Alert Dialog | Pass | Alert-dialog semantics, safe default focus, and owned actions pass. |
|
|
146
|
+
| Checkbox | Pass | Control/card states, focus, contrast, and RTL pass. |
|
|
147
|
+
| Collapsible | Pass | Owned Radix trigger/content relationship and docs pass. |
|
|
148
|
+
| Radio Group | Pass | Orientation, state, labeling, and RTL keyboard behavior pass. |
|
|
149
|
+
| Radio Card | Pass | Direction inheritance and card/radio semantics have focused regressions. |
|
|
150
|
+
| Divider | Pass | Structural separator semantics and variants pass. |
|
|
151
|
+
| Pagination | Pass | Named navigation, unique docs landmarks, container-query collapse, local scroll, and RTL pass. |
|
|
152
|
+
| Toolbar | Pass | Sections and children wrap/contain correctly at narrow widths. |
|
|
153
|
+
| Social Button | Pass | RTL width precedence, Arabic containment, provider states, and contrast pass. |
|
|
154
|
+
| Input | Pass | State, variant, size, density, labeling, and token contracts pass. |
|
|
155
|
+
| Input Group | Pass | Owned grouped input/action surface passes. |
|
|
156
|
+
| Label | Pass | Owned Radix label wrapper and association contract pass. |
|
|
157
|
+
| Kbd | Pass | Intentional chord direction and surrounding RTL inheritance pass. |
|
|
158
|
+
| Item | Pass | Slot-based row composition and state coverage pass. |
|
|
159
|
+
| Field | Pass | Only mounted description/error nodes are referenced. |
|
|
160
|
+
| Input OTP | Pass | Slot semantics, sizes, states, and RTL pass. |
|
|
161
|
+
| Select | Pass | Combobox ARIA, named listboxes, option selection semantics, density, and RTL pass. |
|
|
162
|
+
| Native Select | Pass | Native semantics wrapped by Banhaten state/size/variant tokens. |
|
|
163
|
+
| Sheet | Pass | Edge dialog focus, dismissal, overlay, and RTL pass. |
|
|
164
|
+
| Sidebar | Pass | Provider behavior passes; SidebarInset no longer creates accidental nested-main landmarks. |
|
|
165
|
+
| Navigation Menu | Pass | Named/unique landmarks, Radix behavior, portal layout, and RTL pass. |
|
|
166
|
+
| Scroll Area | Pass | Viewport is keyboard reachable and exposes safe viewport props. |
|
|
167
|
+
| Resizable | Pass — integration | Panels expose focusable overflow content and owned handle focus around react-resizable-panels. |
|
|
168
|
+
| Autocomplete | Pass | Owned Input/Popover/Select/Tag composition passes. |
|
|
169
|
+
| Date Picker | Pass | Valid ARIA calendar grid, names, localization, focus, range/single modes, and contrast pass. |
|
|
170
|
+
| Slider | Pass | Intentional thumb geometry, states, labels, and RTL pass. |
|
|
171
|
+
| Progress | Pass | Named meter semantics and tokenized tones pass. |
|
|
172
|
+
| Progress Slider | Pass | Keyboard/ARIA behavior, sizes, tones, ticks, narrow containment, RTL, and live Anatomy pass. |
|
|
173
|
+
| Textarea | Pass | Modes, labels, states, and token ownership pass. |
|
|
174
|
+
| Skeleton | Pass | Loading family and reduced-motion behavior pass. |
|
|
175
|
+
| Spinner | Pass | Named/hidden modes, token ownership, RTL contract, and reduced motion pass. |
|
|
176
|
+
| Toast | Pass — integration | Owned Sonner API, live region behavior, direction, and tokens pass. |
|
|
177
|
+
| Activity Feed | Pass | Inherits direction and composes owned actions; named feed semantics pass. |
|
|
178
|
+
| Activity Heatmap | Pass | Named image semantics, keyboard-reachable overflow, RTL, tokens, and dedicated docs pass. |
|
|
179
|
+
| Alert | Pass | Owned actions, wrapping/padding invariants, state semantics, and contrast pass. |
|
|
180
|
+
| Banner | Pass | Owned controls, inherited RTL, narrow wrapping, state metadata, and contrast pass. |
|
|
181
|
+
| Catalog Components | Pass — composition | Dedicated page and baseline; Breadcrumbs, Divider, Tag, File Upload, Table, and owned actions compose cleanly. |
|
|
182
|
+
| Breadcrumbs | Pass | Unique named navigation, logical spacing, RTL, truncation, and owned Page Header composition pass. |
|
|
183
|
+
| File Upload | Pass | Visible actions use Button; status text is valid; hidden native file input remains the correct owned platform hook. |
|
|
184
|
+
| Table | Pass | Named meters/ratings/headers, owned actions, focusable local scroll, narrow paint containment, states, and RTL pass. |
|
|
185
|
+
| Empty State | Pass | Sizes, semantics, RTL, and owned actions pass. |
|
|
186
|
+
| Onboarding Step | Pass | Inherited RTL, state metadata, marker geometry, and docs pass. |
|
|
187
|
+
| Page Header | Pass | Composes Breadcrumbs/Tabs/Button, exposes heading level, avoids landmark collisions, and contains narrowly. |
|
|
188
|
+
| Slideout | Pass | Explicit named presentational region, owned actions, unique IDs, logical RTL, and narrow layout pass. |
|
|
189
|
+
| Steps | Pass | Standard/horizontal/vertical/progress modes inherit RTL and preserve marker/connector geometry. |
|
|
190
|
+
| Tabs | Pass | Every trigger owns an existing panel; keyboard, selected state, and docs contracts pass. |
|
|
191
|
+
| Timeline | Pass | Owned list semantics, standalone item neutrality, inherited RTL, connector alignment, and narrow scrolling pass. |
|
|
192
|
+
|
|
193
|
+
## Final verification evidence
|
|
194
|
+
|
|
195
|
+
| Gate | Final result |
|
|
196
|
+
| --- | --- |
|
|
197
|
+
| Authoritative repository gate | `npm run check` exited 0 |
|
|
198
|
+
| Contract schemas | 3 canonical contracts passed |
|
|
199
|
+
| CLI | Argument, dependency, install-plan, integration, and doctor tests passed |
|
|
200
|
+
| Token graph | 91 deterministic owned sources; catalog/CSS generation and clean-room reproduction passed |
|
|
201
|
+
| Component token ownership | 161 component/example files passed; metadata current for all 68 entries |
|
|
202
|
+
| Consumer ownership | 38 backgrounds; zero component gaps, native controls, or restricted direct vendor imports |
|
|
203
|
+
| Registry | 68 catalogs, 113 mirrors, current shadcn export, all 68 isolated packed installs passed |
|
|
204
|
+
| Documentation | 68 normalized Markdown contracts and 68 dedicated registry-backed pages; zero pending/aliases |
|
|
205
|
+
| Unit/component suite | 8 Vitest files, 205 tests passed |
|
|
206
|
+
| Production build | TypeScript passed; Vite transformed 3,350 modules; bundle budget passed |
|
|
207
|
+
| Package artifact | 300 files; 96-file registry closure; 72 examples; 68 CLI install smokes passed |
|
|
208
|
+
| Contrast | 910 pass, 0 fail |
|
|
209
|
+
| Catalog accessibility | 69 of 69 routes pass Axe with all violation impacts enabled |
|
|
210
|
+
| RTL/containment | 69 of 69 routes inherit RTL and keep the 324px document contained |
|
|
211
|
+
| Visual regression | 69 of 69 Chromium base-card baselines reproduce cleanly |
|
|
212
|
+
| Cross-browser suite | 389 passed; 4 intentional Chromium-only deduplication skips |
|
|
213
|
+
| Dependency audit | 0 vulnerabilities |
|
|
214
|
+
|
|
215
|
+
## Residual risk and separate backlog
|
|
216
|
+
|
|
217
|
+
No open component-specific defect was reproduced by the final source, unit, build, package, accessibility, contrast, direction, containment, documentation, or browser gates.
|
|
218
|
+
|
|
219
|
+
Three limitations remain important:
|
|
220
|
+
|
|
221
|
+
1. The visual baselines make future drift detectable; they do not independently prove parity with a design file that was not supplied as a comparison oracle.
|
|
222
|
+
2. Automated Axe and browser tests do not replace periodic manual assistive-technology and usability review on representative real devices.
|
|
223
|
+
3. The background audit still tracks 100 non-component fidelity gaps: 47 layout/composition, 20 icon assets, 20 image assets, and 13 token applications. Those are explicitly outside the 96 component-ownership gaps and outside this component-library remediation.
|
|
224
|
+
|
|
225
|
+
Within the declared component scope, the completion verdict is **Pass: 68 of 68 components, zero known open component gaps.**
|