@qijenchen/design-system 0.1.0-beta.10 → 0.1.0-beta.13

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 (307) hide show
  1. package/CLAUDE.md +201 -0
  2. package/README.md +7 -15
  3. package/cli-init.mjs +90 -0
  4. package/ds-canonical/commands/README.md +26 -0
  5. package/ds-canonical/commands/gov-status.md +79 -0
  6. package/ds-canonical/hooks/README.md +145 -0
  7. package/ds-canonical/hooks/_log-fire.sh +44 -0
  8. package/ds-canonical/hooks/block_prototype_imports.py +111 -0
  9. package/ds-canonical/hooks/check_app_shell_primary_header_consistency.sh +68 -0
  10. package/ds-canonical/hooks/check_audit_post_report_validator.sh +88 -0
  11. package/ds-canonical/hooks/check_audit_sample_escape.sh +73 -0
  12. package/ds-canonical/hooks/check_benchmark_citation.sh +106 -0
  13. package/ds-canonical/hooks/check_canonical_propagation.sh +189 -0
  14. package/ds-canonical/hooks/check_chrome_header_handcraft.sh +70 -0
  15. package/ds-canonical/hooks/check_codex_brief_invariants.sh +83 -0
  16. package/ds-canonical/hooks/check_codex_collab_5step.sh +108 -0
  17. package/ds-canonical/hooks/check_datatable_invariants.sh +117 -0
  18. package/ds-canonical/hooks/check_dim_count_drift.sh +72 -0
  19. package/ds-canonical/hooks/check_field_controls_contracts.sh +110 -0
  20. package/ds-canonical/hooks/check_field_family_invariants.sh +205 -0
  21. package/ds-canonical/hooks/check_file_size_budget.sh +60 -0
  22. package/ds-canonical/hooks/check_header_with_tabs_border.sh +87 -0
  23. package/ds-canonical/hooks/check_main_branch_workbench.sh +93 -0
  24. package/ds-canonical/hooks/check_naming_and_abstraction.sh +165 -0
  25. package/ds-canonical/hooks/check_opacity_token_usage.sh +149 -0
  26. package/ds-canonical/hooks/check_pattern_invariants.sh +194 -0
  27. package/ds-canonical/hooks/check_peoplepicker_ssot_drift.sh +56 -0
  28. package/ds-canonical/hooks/check_pixel_quantified_audit.sh +53 -0
  29. package/ds-canonical/hooks/check_propose_plain_chinese.sh +74 -0
  30. package/ds-canonical/hooks/check_propose_pre_grep_verify.sh +70 -0
  31. package/ds-canonical/hooks/check_select_all_canonical.sh +58 -0
  32. package/ds-canonical/hooks/check_solo_workflow.sh +258 -0
  33. package/ds-canonical/hooks/check_spec_class_drift.sh +88 -0
  34. package/ds-canonical/hooks/check_story_invariants.sh +612 -0
  35. package/ds-canonical/hooks/check_substantive_edit_approval_preflight.sh +105 -0
  36. package/ds-canonical/hooks/check_tab_lg_chrome_header_equal.sh +66 -0
  37. package/ds-canonical/hooks/check_wrapper_primitive_schema_drift.sh +104 -0
  38. package/ds-canonical/hooks/enforce_home_charter.sh +44 -0
  39. package/ds-canonical/hooks/inject_pending_self_audit.sh +204 -0
  40. package/ds-canonical/hooks/lib/_approval_re.sh +33 -0
  41. package/ds-canonical/hooks/lib/_code_quality.sh +73 -0
  42. package/ds-canonical/hooks/lib/_cva_default_sync.sh +69 -0
  43. package/ds-canonical/hooks/lib/_governance_coverage_check.sh +49 -0
  44. package/ds-canonical/hooks/lib/_hardcoded_strings.sh +163 -0
  45. package/ds-canonical/hooks/lib/_layout_space_canonical.sh +56 -0
  46. package/ds-canonical/hooks/lib/_overlay_handcraft.sh +141 -0
  47. package/ds-canonical/hooks/lib/_person_data_richness.sh +42 -0
  48. package/ds-canonical/hooks/lib/_story_compile_drift.sh +48 -0
  49. package/ds-canonical/hooks/lib/_token_hygiene.sh +95 -0
  50. package/ds-canonical/hooks/log_governance_fires.sh +50 -0
  51. package/ds-canonical/hooks/log_skill_invokes.sh +41 -0
  52. package/ds-canonical/hooks/post_edit_dispatcher.sh +62 -0
  53. package/ds-canonical/hooks/retired/check_anatomy_section_numbering.sh +106 -0
  54. package/ds-canonical/hooks/retired/check_avatar_hovercard.sh +90 -0
  55. package/ds-canonical/hooks/retired/check_button_icon_literal.sh.retired-2026-04-28 +38 -0
  56. package/ds-canonical/hooks/retired/check_container_breathing.sh +142 -0
  57. package/ds-canonical/hooks/retired/check_governance_compliance.sh +61 -0
  58. package/ds-canonical/hooks/retired/check_icon_only_padding_formula.sh +104 -0
  59. package/ds-canonical/hooks/retired/check_item_content_primitive.sh +150 -0
  60. package/ds-canonical/hooks/retired/check_item_list_gap.sh +153 -0
  61. package/ds-canonical/hooks/retired/check_sideoffset_canonical.sh +65 -0
  62. package/ds-canonical/hooks/retired/check_spec_iteration_tag.sh +87 -0
  63. package/ds-canonical/hooks/retired/check_ssot_consultation.sh +88 -0
  64. package/ds-canonical/hooks/retired/check_sync_update.sh +20 -0
  65. package/ds-canonical/hooks/retired/check_third_party_dom_verified.sh +95 -0
  66. package/ds-canonical/hooks/retired/enforce_home_charter.sh +125 -0
  67. package/ds-canonical/hooks/retired/post_edit_canonical_interrogate.sh +109 -0
  68. package/ds-canonical/hooks/retired/pre_edit_spec_check.sh +68 -0
  69. package/ds-canonical/hooks/retired/pre_new_component_spec.sh +39 -0
  70. package/ds-canonical/hooks/retired/pre_write_subsumption_check.sh +112 -0
  71. package/ds-canonical/hooks/retired/stop_meta_self_audit.sh.retired-2026-05-13 +76 -0
  72. package/ds-canonical/hooks/retired/tests/test_check_anatomy_section_numbering.sh +14 -0
  73. package/ds-canonical/hooks/retired/tests/test_check_avatar_hovercard.sh +15 -0
  74. package/ds-canonical/hooks/retired/tests/test_check_container_breathing.sh +15 -0
  75. package/ds-canonical/hooks/retired/tests/test_check_governance_compliance.sh +15 -0
  76. package/ds-canonical/hooks/retired/tests/test_check_icon_only_padding_formula.sh +79 -0
  77. package/ds-canonical/hooks/retired/tests/test_check_item_content_primitive.sh +15 -0
  78. package/ds-canonical/hooks/retired/tests/test_check_item_list_gap.sh +163 -0
  79. package/ds-canonical/hooks/retired/tests/test_check_sideoffset_canonical.sh +15 -0
  80. package/ds-canonical/hooks/retired/tests/test_check_spec_iteration_tag.sh +15 -0
  81. package/ds-canonical/hooks/retired/tests/test_check_ssot_consultation.sh +15 -0
  82. package/ds-canonical/hooks/retired/tests/test_check_sync_update.sh +14 -0
  83. package/ds-canonical/hooks/retired/tests/test_check_third_party_dom_verified.sh +15 -0
  84. package/ds-canonical/hooks/retired/tests/test_enforce_home_charter.sh +15 -0
  85. package/ds-canonical/hooks/retired/tests/test_pre_edit_spec_check.sh +15 -0
  86. package/ds-canonical/hooks/retired/tests/test_pre_new_component_spec.sh +15 -0
  87. package/ds-canonical/hooks/retired/tests/test_pre_write_subsumption_check.sh +63 -0
  88. package/ds-canonical/hooks/session_start_governance_check.sh +263 -0
  89. package/ds-canonical/hooks/stop_passive_logging.sh +322 -0
  90. package/ds-canonical/hooks/stop_self_audit.sh +450 -0
  91. package/ds-canonical/hooks/tests/KNOWN-BROKEN.md +15 -0
  92. package/ds-canonical/hooks/tests/run-all.sh +76 -0
  93. package/ds-canonical/hooks/tests/test_block_prototype_imports.sh +143 -0
  94. package/ds-canonical/hooks/tests/test_check_app_shell_primary_header_consistency.sh +140 -0
  95. package/ds-canonical/hooks/tests/test_check_audit_post_report_validator.sh +115 -0
  96. package/ds-canonical/hooks/tests/test_check_audit_sample_escape.sh +93 -0
  97. package/ds-canonical/hooks/tests/test_check_benchmark_citation.sh +115 -0
  98. package/ds-canonical/hooks/tests/test_check_canonical_propagation.sh +133 -0
  99. package/ds-canonical/hooks/tests/test_check_chrome_header_handcraft.sh +123 -0
  100. package/ds-canonical/hooks/tests/test_check_code_quality.sh +15 -0
  101. package/ds-canonical/hooks/tests/test_check_codex_collab_5step.sh +96 -0
  102. package/ds-canonical/hooks/tests/test_check_cva_default_sync.sh +15 -0
  103. package/ds-canonical/hooks/tests/test_check_datatable_invariants.sh +122 -0
  104. package/ds-canonical/hooks/tests/test_check_dim_count_drift.sh +98 -0
  105. package/ds-canonical/hooks/tests/test_check_field_controls_contracts.sh +126 -0
  106. package/ds-canonical/hooks/tests/test_check_field_family_invariants.sh +194 -0
  107. package/ds-canonical/hooks/tests/test_check_file_size_budget.sh +32 -0
  108. package/ds-canonical/hooks/tests/test_check_hardcoded_strings.sh +14 -0
  109. package/ds-canonical/hooks/tests/test_check_header_with_tabs_border.sh +110 -0
  110. package/ds-canonical/hooks/tests/test_check_layout_space_canonical.sh +73 -0
  111. package/ds-canonical/hooks/tests/test_check_main_branch_workbench.sh +147 -0
  112. package/ds-canonical/hooks/tests/test_check_naming_and_abstraction.sh +136 -0
  113. package/ds-canonical/hooks/tests/test_check_opacity_token_usage.sh +110 -0
  114. package/ds-canonical/hooks/tests/test_check_overlay_handcraft.sh +126 -0
  115. package/ds-canonical/hooks/tests/test_check_pattern_invariants.sh +148 -0
  116. package/ds-canonical/hooks/tests/test_check_peoplepicker_ssot_drift.sh +108 -0
  117. package/ds-canonical/hooks/tests/test_check_person_data_richness.sh +58 -0
  118. package/ds-canonical/hooks/tests/test_check_pixel_quantified_audit.sh +142 -0
  119. package/ds-canonical/hooks/tests/test_check_propose_plain_chinese.sh +126 -0
  120. package/ds-canonical/hooks/tests/test_check_propose_pre_grep_verify.sh +117 -0
  121. package/ds-canonical/hooks/tests/test_check_select_all_canonical.sh +125 -0
  122. package/ds-canonical/hooks/tests/test_check_solo_workflow.sh +201 -0
  123. package/ds-canonical/hooks/tests/test_check_spec_class_drift.sh +135 -0
  124. package/ds-canonical/hooks/tests/test_check_story_anatomy.sh.broken +197 -0
  125. package/ds-canonical/hooks/tests/test_check_story_category.sh.broken +187 -0
  126. package/ds-canonical/hooks/tests/test_check_story_compile_drift.sh +15 -0
  127. package/ds-canonical/hooks/tests/test_check_story_invariants.sh +209 -0
  128. package/ds-canonical/hooks/tests/test_check_story_name_jargon.sh.broken +53 -0
  129. package/ds-canonical/hooks/tests/test_check_story_slot_split.sh +156 -0
  130. package/ds-canonical/hooks/tests/test_check_substantive_edit_approval_preflight.sh +176 -0
  131. package/ds-canonical/hooks/tests/test_check_tab_lg_chrome_header_equal.sh +138 -0
  132. package/ds-canonical/hooks/tests/test_check_token_hygiene.sh +21 -0
  133. package/ds-canonical/hooks/tests/test_check_wrapper_primitive_schema_drift.sh +169 -0
  134. package/ds-canonical/hooks/tests/test_enforce_home_charter.sh +77 -0
  135. package/ds-canonical/hooks/tests/test_inject_pending_self_audit.sh +125 -0
  136. package/ds-canonical/hooks/tests/test_log_governance_fires.sh +10 -0
  137. package/ds-canonical/hooks/tests/test_log_skill_invokes.sh +7 -0
  138. package/ds-canonical/hooks/tests/test_post_edit_dispatcher.sh +108 -0
  139. package/ds-canonical/hooks/tests/test_session_start_governance_check.sh +143 -0
  140. package/ds-canonical/hooks/tests/test_stop_capture_metrics.sh +95 -0
  141. package/ds-canonical/hooks/tests/test_stop_governance_drift_check.sh.broken +125 -0
  142. package/ds-canonical/hooks/tests/test_stop_harvest_corrections.sh +10 -0
  143. package/ds-canonical/hooks/tests/test_stop_passive_logging.sh +100 -0
  144. package/ds-canonical/hooks/tests/test_stop_self_audit.sh +76 -0
  145. package/ds-canonical/hooks/tests/test_stop_tsc_sanity.sh +10 -0
  146. package/ds-canonical/references/README.md +43 -0
  147. package/ds-canonical/references/audit-coverage-vs-24-checklist.md +74 -0
  148. package/ds-canonical/references/build-ui-canonicals.md +69 -0
  149. package/ds-canonical/references/cva-patterns.md +41 -0
  150. package/ds-canonical/references/drag-canonical.md +331 -0
  151. package/ds-canonical/references/item-anatomy-recipe.md +225 -0
  152. package/ds-canonical/references/naming-conventions.md +56 -0
  153. package/ds-canonical/references/principle-dim-map.json +515 -0
  154. package/ds-canonical/references/props-naming.md +45 -0
  155. package/ds-canonical/references/spec-rules.md +58 -0
  156. package/ds-canonical/references/ssot-consultation.md +63 -0
  157. package/ds-canonical/references/ssot-index.md +40 -0
  158. package/ds-canonical/references/story-baseline-registry.json +79 -0
  159. package/ds-canonical/references/structural-token-retention.md +42 -0
  160. package/ds-canonical/references/tailwind-gotchas.md +87 -0
  161. package/ds-canonical/references/ui-dev-rules.md +60 -0
  162. package/ds-canonical/rules/README.md +34 -0
  163. package/ds-canonical/rules/meta-patterns.md +87 -0
  164. package/ds-canonical/rules/self-verify.md +53 -0
  165. package/ds-canonical/rules/spec-rules.md +25 -0
  166. package/ds-canonical/rules/story-rules.md +56 -0
  167. package/ds-canonical/rules/ui-development.md +87 -0
  168. package/ds-canonical/skills/README.md +88 -0
  169. package/ds-canonical/skills/bug-fix-rhythm/SKILL.md +181 -0
  170. package/ds-canonical/skills/code-quality-audit/SKILL.md +63 -0
  171. package/ds-canonical/skills/codex-collab/SKILL.md +249 -0
  172. package/ds-canonical/skills/codex-collab/references/brief-template.md +48 -0
  173. package/ds-canonical/skills/codex-collab/references/transport.md +58 -0
  174. package/ds-canonical/skills/codify-corrections/SKILL.md +184 -0
  175. package/ds-canonical/skills/codify-principle/SKILL.md +151 -0
  176. package/ds-canonical/skills/component-quality-gate/SKILL.md +102 -0
  177. package/ds-canonical/skills/component-quality-gate/references/checklist.md +79 -0
  178. package/ds-canonical/skills/deep-audit-cross-codex/SKILL.md +247 -0
  179. package/ds-canonical/skills/deep-audit-cross-codex/references/phase-a-workflow.md +123 -0
  180. package/ds-canonical/skills/deep-audit-cross-codex/references/phase-b-codex-brief.md +165 -0
  181. package/ds-canonical/skills/deep-audit-cross-codex/references/triage-rubric.md +91 -0
  182. package/ds-canonical/skills/delivery-handoff/SKILL.md +229 -0
  183. package/ds-canonical/skills/delivery-handoff/references/flow-diagram.md +180 -0
  184. package/ds-canonical/skills/delivery-handoff/references/handoff-template.md +177 -0
  185. package/ds-canonical/skills/delivery-handoff/references/inventory-checklist.md +196 -0
  186. package/ds-canonical/skills/design-system-audit/SKILL.md +343 -0
  187. package/ds-canonical/skills/design-system-audit/references/audit-prompts.md +1260 -0
  188. package/ds-canonical/skills/design-system-audit/references/checkpoints.md +240 -0
  189. package/ds-canonical/skills/design-system-audit/references/historical-bugs.md +240 -0
  190. package/ds-canonical/skills/design-system-audit/references/principle-audit-protocol.md +364 -0
  191. package/ds-canonical/skills/design-system-audit/references/rule-placement.md +175 -0
  192. package/ds-canonical/skills/design-system-audit/references/spec-template.md +66 -0
  193. package/ds-canonical/skills/ensure-canonical/SKILL.md +196 -0
  194. package/ds-canonical/skills/governance-health/SKILL.md +146 -0
  195. package/ds-canonical/skills/knowledge-prune/SKILL.md +303 -0
  196. package/ds-canonical/skills/new-component/SKILL.md +170 -0
  197. package/ds-canonical/skills/new-component/references/new-component-checklist.md +85 -0
  198. package/ds-canonical/skills/performance-audit/SKILL.md +107 -0
  199. package/ds-canonical/skills/product-ui-audit/SKILL.md +230 -0
  200. package/ds-canonical/skills/product-ui-audit/references/audit-checks.md +246 -0
  201. package/ds-canonical/skills/product-ui-audit/references/common-misuses.md +329 -0
  202. package/ds-canonical/skills/product-ui-audit/references/report-template.md +159 -0
  203. package/ds-canonical/skills/propose-options/SKILL.md +177 -0
  204. package/ds-canonical/skills/prototype/SKILL.md +244 -0
  205. package/ds-canonical/skills/prototype/references/audit-checks.md +37 -0
  206. package/ds-canonical/skills/prototype/references/benchmark-sources.md +94 -0
  207. package/ds-canonical/skills/prototype/references/checkpoints.md +191 -0
  208. package/ds-canonical/skills/prototype/references/evaluation-matrix.md +141 -0
  209. package/ds-canonical/skills/prototype/references/ooux-template.md +198 -0
  210. package/ds-canonical/skills/prototype/references/proposal-template.md +229 -0
  211. package/ds-canonical/skills/scan-similar-bugs/SKILL.md +198 -0
  212. package/ds-canonical/skills/story-auto-compile-migrate/SKILL.md +159 -0
  213. package/ds-canonical/skills/story-writing/SKILL.md +122 -0
  214. package/ds-canonical/skills/story-writing/references/anatomy-standard.md +217 -0
  215. package/ds-canonical/skills/story-writing/references/category-templates.md +174 -0
  216. package/ds-canonical/skills/story-writing/references/example-selection.md +70 -0
  217. package/ds-canonical/skills/story-writing/references/self-check.md +20 -0
  218. package/ds-canonical/skills/ux-audit/SKILL.md +130 -0
  219. package/ds-canonical/skills/visual-audit/SKILL.md +245 -0
  220. package/ds-canonical/skills/visual-audit/output/.gitkeep +0 -0
  221. package/ds-canonical/skills/visual-audit/references/audit-architecture.md +100 -0
  222. package/ds-canonical/skills/visual-audit/references/visual-checklist.md +297 -0
  223. package/ds-canonical/skills/visual-audit/references/world-class-benchmarks.md +198 -0
  224. package/package.json +9 -5
  225. package/src/components/Accordion/accordion.spec.md +114 -0
  226. package/src/components/Alert/alert.spec.md +197 -0
  227. package/src/components/AppShell/app-shell.spec.md +331 -0
  228. package/src/components/AspectRatio/aspect-ratio.spec.md +134 -0
  229. package/src/components/Avatar/avatar.spec.md +329 -0
  230. package/src/components/Badge/badge.spec.md +380 -0
  231. package/src/components/Breadcrumb/breadcrumb.spec.md +257 -0
  232. package/src/components/BulkActionBar/bulk-action-bar.spec.md +210 -0
  233. package/src/components/Button/button.spec.md +460 -0
  234. package/src/components/Calendar/calendar.spec.md +242 -0
  235. package/src/components/Carousel/carousel.spec.md +253 -0
  236. package/src/components/Chart/chart.spec.md +155 -0
  237. package/src/components/Checkbox/checkbox.spec.md +344 -0
  238. package/src/components/Chip/chip.spec.md +237 -0
  239. package/src/components/CircularProgress/circular-progress.spec.md +268 -0
  240. package/src/components/Coachmark/coachmark.spec.md +230 -0
  241. package/src/components/Combobox/combobox.spec.md +180 -0
  242. package/src/components/Command/command.spec.md +171 -0
  243. package/src/components/DataTable/data-table.spec.md +525 -0
  244. package/src/components/DateGrid/date-grid.spec.md +215 -0
  245. package/src/components/DatePicker/date-picker.spec.md +334 -0
  246. package/src/components/DescriptionList/description-list.spec.md +214 -0
  247. package/src/components/Dialog/dialog.spec.md +202 -0
  248. package/src/components/DropdownMenu/dropdown-menu.spec.md +250 -0
  249. package/src/components/Empty/empty.spec.md +214 -0
  250. package/src/components/Field/field-controls.spec.md +338 -0
  251. package/src/components/Field/field.spec.md +438 -0
  252. package/src/components/Field/form-validation.spec.md +152 -0
  253. package/src/components/FieldControlGroup/field-control-group.spec.md +176 -0
  254. package/src/components/FileItem/file-item.spec.md +467 -0
  255. package/src/components/FileUpload/file-upload.spec.md +123 -0
  256. package/src/components/FileViewer/file-viewer.spec.md +373 -0
  257. package/src/components/HoverCard/hover-card.spec.md +157 -0
  258. package/src/components/Input/input.spec.md +193 -0
  259. package/src/components/LinkInput/link-input.spec.md +130 -0
  260. package/src/components/Menu/menu-item.spec.md +290 -0
  261. package/src/components/NameCard/name-card.spec.md +171 -0
  262. package/src/components/Notice/notice.spec.md +149 -0
  263. package/src/components/NumberInput/number-input.spec.md +126 -0
  264. package/src/components/OverflowIndicator/overflow-indicator.spec.md +120 -0
  265. package/src/components/PeoplePicker/people-picker.spec.md +263 -0
  266. package/src/components/Popover/popover.spec.md +198 -0
  267. package/src/components/ProgressBar/progress-bar.spec.md +232 -0
  268. package/src/components/RadioGroup/radio-group.spec.md +141 -0
  269. package/src/components/Rating/rating.spec.md +208 -0
  270. package/src/components/ScrollArea/scroll-area.spec.md +145 -0
  271. package/src/components/SegmentedControl/segmented-control.spec.md +295 -0
  272. package/src/components/Select/select.spec.md +299 -0
  273. package/src/components/SelectMenu/select-menu.spec.md +220 -0
  274. package/src/components/SelectionControl/selection-item.spec.md +128 -0
  275. package/src/components/Separator/separator.spec.md +109 -0
  276. package/src/components/Sheet/sheet.spec.md +148 -0
  277. package/src/components/Sidebar/sidebar.spec.md +713 -0
  278. package/src/components/Skeleton/skeleton.spec.md +104 -0
  279. package/src/components/Slider/slider.spec.md +353 -0
  280. package/src/components/Steps/steps.spec.md +465 -0
  281. package/src/components/Switch/switch.spec.md +215 -0
  282. package/src/components/Tabs/tabs.spec.md +314 -0
  283. package/src/components/Tag/tag.spec.md +282 -0
  284. package/src/components/Textarea/textarea.spec.md +151 -0
  285. package/src/components/TimePicker/time-picker.spec.md +279 -0
  286. package/src/components/Toast/toast.spec.md +177 -0
  287. package/src/components/Tooltip/tooltip.spec.md +139 -0
  288. package/src/components/TreeView/tree-view.spec.md +374 -0
  289. package/src/patterns/action-bar/action-bar.spec.md +458 -0
  290. package/src/patterns/element-anatomy/element-anatomy.spec.md +215 -0
  291. package/src/patterns/element-anatomy/inline-action.spec.md +315 -0
  292. package/src/patterns/element-anatomy/item-anatomy.spec.md +1042 -0
  293. package/src/patterns/header-canonical/header-canonical.spec.md +285 -0
  294. package/src/patterns/horizontal-overflow/horizontal-overflow.spec.md +191 -0
  295. package/src/patterns/overlay-surface/overlay-surface.spec.md +428 -0
  296. package/src/patterns/resize-handle/resize-handle.spec.md +109 -0
  297. package/src/tokens/color/color.spec.md +804 -0
  298. package/src/tokens/density/density.spec.md +127 -0
  299. package/src/tokens/elevation/elevation.spec.md +81 -0
  300. package/src/tokens/layoutSpace/layoutSpace.spec.md +314 -0
  301. package/src/tokens/motion/motion.spec.md +97 -0
  302. package/src/tokens/opacity/opacity.spec.md +78 -0
  303. package/src/tokens/orphan-tokens.spec.md +117 -0
  304. package/src/tokens/radius/radius.spec.md +123 -0
  305. package/src/tokens/typography/typography.spec.md +202 -0
  306. package/src/tokens/uiSize/uiSize.spec.md +438 -0
  307. package/src/styles/preset.css +0 -31
@@ -0,0 +1,246 @@
1
+ # Audit Checks — 6 維度 grep pattern + rule
2
+
3
+ 每個維度的具體 check。AI Phase 1 parallel 執行時依此 grep + rule 判斷。
4
+
5
+ ---
6
+
7
+ ## Dim 1 — Token 紀律
8
+
9
+ ### Check 1.1: shadcn compat alias
10
+
11
+ ```
12
+ grep -nE '\b(bg-popover|text-popover-foreground|text-muted-foreground|bg-accent|text-accent-foreground|bg-destructive|bg-background|bg-card|text-card-foreground|border-input|text-primary-foreground)\b' {target}
13
+ ```
14
+
15
+ **Severity**: P0。**Fix**: 對映見 `check_token_hygiene.sh` hook。
16
+
17
+ ### Check 1.2: Tailwind default shadow
18
+
19
+ ```
20
+ grep -nE '\bshadow-(sm|md|lg|xl|2xl|inner)\b' {target}
21
+ ```
22
+
23
+ **Severity**: P0。**Fix**: shadow-sm → shadow-[var(--elevation-100)] / shadow-md → shadow-[var(--elevation-200)] / shadow-lg → shadow-[var(--elevation-300)]。
24
+
25
+ ### Check 1.3: Tailwind v4 `[--foo]` shorthand
26
+
27
+ ```
28
+ grep -nE '\[--[a-z][a-z0-9-]*\]' {target} | grep -v '\[&'
29
+ ```
30
+
31
+ **Severity**: P0(silent fail)。**Fix**: `[--foo]` → `[var(--foo)]`。
32
+
33
+ ### Check 1.4: 硬寫 hex / rgb / hsl
34
+
35
+ ```
36
+ grep -nE '#[0-9a-fA-F]{3,8}\b|rgb\(|rgba\(|hsl\(|hsla\(' {target}
37
+ ```
38
+
39
+ **Severity**: P0。**Exception**: `#fff` 在 Avatar / Tag 白字變體是 documented cva exception(object map 非 cva,per CLAUDE.md `cva 適用範圍`);anatomy inspector chrome 顏色 highlight(`bg: 'rgba(...)'` in `.anatomy.stories.tsx`)。**Fix**: 改 semantic token(`var(--primary)` / `bg-primary` 等)。
40
+
41
+ ### Check 1.5: 硬寫 px 當應用 token
42
+
43
+ ```
44
+ grep -nE 'w-\[\d+px\]|h-\[\d+px\]|text-\[\d+px\]|gap-\[\d+px\]|p-\[\d+px\]' {target}
45
+ ```
46
+
47
+ **Severity**: P1(需 case-by-case 判斷)。**Rule**: 若有對應 field-height / layout-space / icon-size token,應改 token;若是 genuinely unique 尺寸則保留 + spec 解釋。
48
+
49
+ ---
50
+
51
+ ## Dim 2 — Layout primitive 消費
52
+
53
+ ### Check 2.1: icon+title+desc 垂直居中 → 應消費 Empty
54
+
55
+ ```
56
+ # grep for potential misuse patterns
57
+ grep -nE 'flex.*flex-col.*items-center.*text-center' {target}
58
+ ```
59
+
60
+ 對每 hit,檢查是否有:
61
+ - LucideIcon 置頂 + title + desc(3-layer vertical stack)
62
+ - 且 parent 是**空狀態 / 空目錄 / 無資料 / 拖放區 / 首次引導**等語境
63
+
64
+ **Severity**: P1。**Fix**: `<Empty icon={Icon} title="..." description="..." />`。
65
+
66
+ ### Check 2.2: row prefix+content+suffix → 應消費 item-layout
67
+
68
+ ```
69
+ grep -nE 'flex.*items-center.*gap-2' {target}
70
+ ```
71
+
72
+ 對每 hit,檢查是否是:
73
+ - 單列 row with icon/avatar 左 + content 中 + action 右
74
+ - 且是 menu / list / tree / file 類項目
75
+
76
+ **Severity**: P1。**Fix**: 消費 `MenuItem` / `TreeItem` / `SidebarMenuButton` 等既有 row primitive(或組合 item-anatomy 的 slot components `<ItemIcon>` / `<ItemLabel>` / `<ItemSuffix>` 等)。
77
+
78
+ ### Check 2.3: overlay Header/Body/Footer → 應消費 overlay-surface
79
+
80
+ ```
81
+ grep -nE 'border-b border-divider.*px-\[var\(--layout-space-loose\)\]' {target}
82
+ grep -nE 'border-t border-divider.*px-\[var\(--layout-space-loose\)\]' {target}
83
+ ```
84
+
85
+ 若在 Dialog / Popover / Sheet / Drawer consumer 重複寫這個 pattern → flag。
86
+
87
+ **Severity**: P1。**Fix**: 用 `<SurfaceHeader>` / `<SurfaceBody>` / `<SurfaceFooter>` 或 Dialog 的 sub-components。
88
+
89
+ ### Check 2.4: native overflow-(auto|scroll) → 應用 ScrollArea
90
+
91
+ ```
92
+ grep -nE '\boverflow-(auto|scroll|x-auto|x-scroll|y-auto|y-scroll)\b' {target} | grep -vE 'scrollbar-none|useOverflow|horizontal-overflow'
93
+ ```
94
+
95
+ **Severity**: P1(跨 OS drift)。**Fix**: 改用 `<ScrollArea>`;若是刻意隱藏 + fade-mask 改用 `horizontal-overflow` pattern。
96
+
97
+ ### Check 2.5: 硬寫 aspect-* → 應用 AspectRatio
98
+
99
+ ```
100
+ grep -nE '\baspect-(video|square|\[[\d/]+\])' {target}
101
+ ```
102
+
103
+ **Exception**: icon-only Button 以 `aspect-square w-X` 形成正方形 hit area(如 Sidebar trigger)屬幾何 layout 不是 media container,保留。
104
+
105
+ **Severity**: P2(主要影響:未來 ratio 變化時漂移)。**Fix**: media/image container 改用 `<AspectRatio ratio={n}>`。
106
+
107
+ ### Check 2.6: Field wrapper 缺失
108
+
109
+ ```
110
+ grep -nE '<input(?![^>]*ref=)' {target}
111
+ ```
112
+
113
+ 裸 `<input>` 未包 Field / fieldWrapperStyles → flag。
114
+
115
+ **Severity**: P1。**Fix**: 包 Field 或消費 Input 元件。
116
+
117
+ ---
118
+
119
+ ## Dim 3 — 元件使用正確性
120
+
121
+ ### Check 3.1: icon-only 無 aria-label
122
+
123
+ ```
124
+ grep -nE '(iconOnly|startIcon|ItemInlineAction)' {target}
125
+ ```
126
+
127
+ 每 hit 檢查同行或附近有 `aria-label=` / `label=`。
128
+
129
+ **Severity**: P0(a11y 必要)。**Fix**: 加 `aria-label="..."`。
130
+
131
+ ### Check 3.2: Primary Button 堆疊
132
+
133
+ ```
134
+ grep -nE 'variant="primary"' {target}
135
+ ```
136
+
137
+ 若同一 parent 出現多個 primary Button → flag(每 row 應只一個 primary action)。
138
+
139
+ **Severity**: P1。**Fix**: 次要 action 改 tertiary / secondary。
140
+
141
+ ### Check 3.3: Dialog / Popover / Sheet 缺 title / description
142
+
143
+ ```
144
+ grep -nE '<DialogContent>|<PopoverContent>|<SheetContent>' {target}
145
+ ```
146
+
147
+ 每 hit 追蹤 children 是否含 DialogTitle / DialogDescription。
148
+
149
+ **Severity**: P0(Dialog a11y 必要)/ P1(Popover, 可選但建議)。**Fix**: 加 Title / Description(Radix 已提供)。
150
+
151
+ ### Check 3.4: 巢狀 Accordion / Tabs / Carousel
152
+
153
+ ```
154
+ grep -nE '<(Accordion|Tabs|Carousel)' {target}
155
+ ```
156
+
157
+ 檢查是否有同名元件巢狀(兩層以上)。
158
+
159
+ **Severity**: P1(UX 使用者迷失)。**Fix**: flatten 結構或改用 TreeView。
160
+
161
+ ---
162
+
163
+ ## Dim 4 — Mindset adherence
164
+
165
+ ### Check 4.1: placeholder 文案(M4 違反)
166
+
167
+ ```
168
+ grep -nE '(Option [A-E]|按鈕[一二三四五]|Rule [A-E]|Variant [A-E]|Placeholder|Lorem ipsum|Foo|Bar|Test value)' {target}
169
+ ```
170
+
171
+ **Severity**: P1(違反 Mindset #4 「真實業務場景」)。**Fix**: 改真實 SaaS 場景(Jira / Stripe / Notion / Linear / Figma)。
172
+
173
+ ### Check 4.2: TODO-未確認留白(M5 違反)
174
+
175
+ ```
176
+ grep -nE '(TODO:\s*待確認|TODO:\s*decide|FIXME|XXX)' {target}
177
+ ```
178
+
179
+ **Severity**: P2(必討論)。**Fix**: 若是規格未定應 surface 給 user 決策,不在 code 留模糊 TODO。
180
+
181
+ ### Check 4.3: cva defaultVariants 三方漂移(M3)
182
+
183
+ **適用情境**: 若 consumer 在 app 層 override cva 的 defaultVariants(罕見但發生過),檢查是否同步 spec / docblock / anatomy。
184
+
185
+ ---
186
+
187
+ ## Dim 5 — 視覺幾何
188
+
189
+ ### Check 5.1: 同 flex 行互動 slot box 尺寸不一
190
+
191
+ **手動 review pattern**: 找 `flex items-center gap-*` 包含多個 interactive element(Button / ItemInlineActionButton / Link),確認他們的 box 尺寸一致。
192
+
193
+ 例: FileItem `status slot(16px)` + `delete Button sm(28px)` = 不一致 → hover-bg 吃 gap。
194
+
195
+ **Severity**: P0(世界級 DS 鐵律違反,違反 CLAUDE.md「同 flex 列的互動 slot 幾何鐵律」)。
196
+
197
+ ### Check 5.2: 自造 typography tier
198
+
199
+ ```
200
+ grep -nE 'text-\[\d+px\]' {target}
201
+ ```
202
+
203
+ 用 `text-[13px]` 等自造尺寸 → flag。
204
+
205
+ **Severity**: P1。**Fix**: 改用 DS typography utility(text-caption / text-body / text-body-lg / h1 / h2 等)。
206
+
207
+ ---
208
+
209
+ ## Dim 6 — A11y
210
+
211
+ ### Check 6.1: icon-only 無 aria-label(已含 Check 3.1)
212
+
213
+ ### Check 6.2: 非 button 用 onClick
214
+
215
+ ```
216
+ grep -nE '<(div|span)[^>]*onClick='
217
+ ```
218
+
219
+ 非 `<button>` 元素綁 onClick → flag(缺 keyboard / screen reader)。
220
+
221
+ **Severity**: P0。**Fix**: 改 `<button>` 或加 `role="button" tabIndex={0} onKeyDown={...}`。
222
+
223
+ ### Check 6.3: color 作唯一 state signal
224
+
225
+ **手動 review**: 只用紅色 / 綠色 傳 error / success 無 icon 或 label → 色盲不可辨。
226
+
227
+ **Severity**: P1(WCAG 1.4.1 違反)。**Fix**: 色 + icon 雙通道(CheckCircle / XCircle 等)。
228
+
229
+ ### Check 6.4: keyboard 陷阱
230
+
231
+ **手動 review**: Modal 內 focus 能 loop(tab 出去要能回來);esc 能關;Arrow keys 導航 list。
232
+
233
+ **Severity**: P0 若為 Modal / Dialog。**Fix**: 用 Radix primitives(已內建 focus trap)。
234
+
235
+ ---
236
+
237
+ ## 合法例外(documented)
238
+
239
+ 以下 hit 不是 bug,由既有 spec / CLAUDE.md 記錄為合理例外:
240
+
241
+ - **Avatar 白字**(`text: '#fff'`): cva 適用範圍例外(style prop 驅動用 object map 而非 cva),per `cva 適用範圍` 章節。
242
+ - **Anatomy inspector chrome**(`bg: 'rgba(...)'` in `.anatomy.stories.tsx`): dev-tool highlight 非 consumer UI token。
243
+ - **Rating yellow stars**(`bg-warning` 黃星): 世界級 convention(Amazon / Google / Yelp 皆黃),spec line 73 明文 documented exception。
244
+ - **uiSize icon-only button**(`aspect-square w-X`): 幾何性 square,非 media container,per uiSize.spec.md「calc 不用 aspect-square」主體邏輯。
245
+
246
+ 遇到 hit 時檢查是否屬上述 documented exception,若是則不 flag,否則 flag。
@@ -0,0 +1,329 @@
1
+ # Common Misuses — 元件誤用 negative example 庫
2
+
3
+ 針對本 DS 常見的元件誤用 pattern。每筆:**誤用 → 正解 → 理由**。
4
+
5
+ ---
6
+
7
+ ## Button 誤用
8
+
9
+ ### ❌ 多個 primary Button 並列
10
+
11
+ ```tsx
12
+ <div className="flex gap-2">
13
+ <Button variant="primary">儲存</Button>
14
+ <Button variant="primary">下載</Button>
15
+ <Button variant="primary">分享</Button>
16
+ </div>
17
+ ```
18
+
19
+ **正解**:一個 row 一個 primary,其他降階。
20
+
21
+ ```tsx
22
+ <div className="flex gap-2">
23
+ <Button variant="primary">儲存</Button>
24
+ <Button variant="tertiary">下載</Button>
25
+ <Button variant="tertiary">分享</Button>
26
+ </div>
27
+ ```
28
+
29
+ **理由**:primary 是「這個流程的主 CTA」,多個 primary 會讓使用者不知該點哪個。
30
+
31
+ ### ❌ icon-only 無 aria-label
32
+
33
+ ```tsx
34
+ <Button iconOnly startIcon={Trash} /> // ❌
35
+ ```
36
+
37
+ **正解**:`aria-label="刪除"`。screen reader 必要。
38
+
39
+ ### ❌ Button 巢狀
40
+
41
+ ```tsx
42
+ <Button onClick={outer}>
43
+ 外層
44
+ <Button>內層</Button> {/* ❌ 巢狀 button invalid HTML */}
45
+ </Button>
46
+ ```
47
+
48
+ **正解**:拆成兩個 sibling Button 或 inline ItemInlineAction。
49
+
50
+ ---
51
+
52
+ ## Field / Input 誤用
53
+
54
+ ### ❌ 裸 `<input>` 未包 Field wrapper
55
+
56
+ ```tsx
57
+ <input type="text" className="border rounded p-2" /> {/* ❌ */}
58
+ ```
59
+
60
+ **正解**:用 `<Input>` 元件或包 Field wrapper。
61
+
62
+ **理由**:DS `<Input>` 已帶 fieldWrapperStyles(hover / focus / error / disabled 狀態全套),自 roll `<input>` 失去一致性。
63
+
64
+ ### ❌ Input 外層自訂 border / padding
65
+
66
+ ```tsx
67
+ <div className="border-2 border-primary p-3 rounded-xl">
68
+ <Input />
69
+ </div>
70
+ ```
71
+
72
+ **正解**:用 Input 的 `error` prop 或 cva variant,不自套 wrapper。
73
+
74
+ ---
75
+
76
+ ## Dialog / Popover / Sheet 誤用
77
+
78
+ ### ❌ Dialog 內放 Popover(巢狀浮層)
79
+
80
+ ```tsx
81
+ <Dialog>
82
+ <DialogContent>
83
+ <Popover>...</Popover> {/* ❌ 浮層巢狀不推薦 */}
84
+ </DialogContent>
85
+ </Dialog>
86
+ ```
87
+
88
+ **正解**:改用 Dialog 內 Tabs / Accordion / SelectMenu 等 inline 結構。
89
+
90
+ ### ❌ Dialog 無 DialogTitle
91
+
92
+ ```tsx
93
+ <DialogContent>
94
+ <p>確定刪除?</p>
95
+ <Button>確定</Button>
96
+ </DialogContent>
97
+ ```
98
+
99
+ **正解**:必有 DialogTitle + DialogDescription(a11y 必要)。
100
+
101
+ ```tsx
102
+ <DialogContent>
103
+ <DialogHeader><DialogTitle>刪除專案?</DialogTitle></DialogHeader>
104
+ <DialogBody><p>此動作無法復原</p></DialogBody>
105
+ <DialogFooter>
106
+ <Button variant="tertiary">取消</Button>
107
+ <Button variant="primary">確定刪除</Button>
108
+ </DialogFooter>
109
+ </DialogContent>
110
+ ```
111
+
112
+ ### ❌ Popover 當 Tooltip 用
113
+
114
+ ```tsx
115
+ <Popover>
116
+ <PopoverTrigger asChild>
117
+ <button>hover me</button>
118
+ </PopoverTrigger>
119
+ <PopoverContent>提示文字</PopoverContent>
120
+ </Popover>
121
+ ```
122
+
123
+ **正解**:Tooltip 元件。Popover 是 click 觸發互動面板,Tooltip 是 hover 觸發純文字提示。
124
+
125
+ ---
126
+
127
+ ## Empty / 空狀態誤用
128
+
129
+ ### ❌ 自寫 flex+icon+title+desc 垂直居中
130
+
131
+ ```tsx
132
+ <div className="flex flex-col items-center text-center gap-2 py-12">
133
+ <FileSearch size={48} className="text-fg-muted" />
134
+ <div className="text-body-lg font-medium">沒有符合的結果</div>
135
+ <div className="text-body text-fg-secondary">請調整篩選條件</div>
136
+ <Button>重設篩選</Button>
137
+ </div>
138
+ ```
139
+
140
+ **正解**:
141
+
142
+ ```tsx
143
+ <Empty
144
+ icon={FileSearch}
145
+ title="沒有符合的結果"
146
+ description="請調整篩選條件"
147
+ action={<Button>重設篩選</Button>}
148
+ />
149
+ ```
150
+
151
+ **理由**:Empty 元件 own icon size(Avatar 48px)/ typography tier / gap token。自寫 drift 風險。
152
+
153
+ ---
154
+
155
+ ## Skeleton / CircularProgress / Empty 混用
156
+
157
+ ### ❌ Loading 狀態用 Empty
158
+
159
+ ```tsx
160
+ {isLoading && <Empty description="Loading..." />} {/* ❌ */}
161
+ ```
162
+
163
+ **正解**:Skeleton(骨架)或 CircularProgress(不知時長,indeterminate)。Empty 是「確認無資料」。全頁 loading 可 `<Empty icon={<CircularProgress size={48}/>} title="載入中" />`。
164
+
165
+ ### ❌ Error 狀態用 Empty
166
+
167
+ ```tsx
168
+ {error && <Empty description="載入失敗" />} {/* ❌ */}
169
+ ```
170
+
171
+ **正解**:`<Alert variant="error">`。Empty 是中性空(可能有操作解除),Error 是需處理的問題。
172
+
173
+ ---
174
+
175
+ ## ProgressBar / CircularProgress 混用
176
+
177
+ ### ❌ 不知進度硬套 ProgressBar(value=0 / 亂跳)
178
+
179
+ ```tsx
180
+ <ProgressBar value={isLoading ? 30 : 100} /> // ❌ 進度無法量化
181
+ ```
182
+
183
+ **正解**:`<CircularProgress>`(不傳 value)做 indeterminate。ProgressBar 是 determinate。
184
+
185
+ ### ❌ 已知百分比的大區塊進度用 CircularProgress indeterminate
186
+
187
+ ```tsx
188
+ <CircularProgress /> {/* 明明已知 45% */}
189
+ ```
190
+
191
+ **正解**:大區塊 / 頁面級用 `<ProgressBar value={45} affix="value" />`;inline 小空間用 `<CircularProgress value={45} affix="value" />`。
192
+
193
+ ---
194
+
195
+ ## Tabs / Accordion / Carousel 誤用
196
+
197
+ ### ❌ Tabs 切換「獨立功能」而非平行視圖
198
+
199
+ ```tsx
200
+ <Tabs>
201
+ <TabsTrigger value="settings">設定</TabsTrigger>
202
+ <TabsTrigger value="logout">登出</TabsTrigger> {/* ❌ 登出是 action 不是 tab */}
203
+ </Tabs>
204
+ ```
205
+
206
+ **正解**:登出走 DropdownMenu 或獨立 Button。Tabs 是「切平行內容視圖」。
207
+
208
+ ### ❌ Accordion 內巢狀 Accordion
209
+
210
+ ```tsx
211
+ <Accordion>
212
+ <AccordionItem>
213
+ <AccordionContent>
214
+ <Accordion>...</Accordion> {/* ❌ */}
215
+ </AccordionContent>
216
+ </AccordionItem>
217
+ </Accordion>
218
+ ```
219
+
220
+ **正解**:改用 TreeView(有階層語意)或 flatten。
221
+
222
+ ### ❌ Carousel 當資料切換器用
223
+
224
+ ```tsx
225
+ <Carousel>
226
+ <CarouselItem>總覽</CarouselItem>
227
+ <CarouselItem>成員</CarouselItem>
228
+ <CarouselItem>設定</CarouselItem>
229
+ </Carousel>
230
+ ```
231
+
232
+ **正解**:`<Tabs>`。Carousel 是輪播同類內容(圖片組 / testimonial),不是命名視圖切換。
233
+
234
+ ---
235
+
236
+ ## Coachmark / Dialog / Popover 用錯場景
237
+
238
+ ### ❌ 確認破壞性 action 用 Coachmark
239
+
240
+ ```tsx
241
+ <Coachmark title="確定刪除?" onNext={del}>
242
+ <Button variant="primary" danger>刪除</Button>
243
+ </Coachmark>
244
+ ```
245
+
246
+ **正解**:`<Dialog>`。Coachmark 是 non-modal onboarding(使用者可忽略),Dialog 是 modal 阻斷(必須處理)。
247
+
248
+ ### ❌ 錯誤訊息用 Coachmark
249
+
250
+ ```tsx
251
+ <Coachmark title="載入失敗" description="網路異常" />
252
+ ```
253
+
254
+ **正解**:`<Alert variant="error">` 或 `<Notice>` (非浮層)/ Toast(非阻斷)。Coachmark 是主動推送功能介紹,不是錯誤回報。
255
+
256
+ ---
257
+
258
+ ## ScrollArea / Native overflow 混用
259
+
260
+ ### ❌ Consumer 內 DataTable 水平捲動用 native overflow-x-auto
261
+
262
+ ```tsx
263
+ <div className="overflow-x-auto">
264
+ <DataTable columns={...} data={...} />
265
+ </div>
266
+ ```
267
+
268
+ **正解**:`<ScrollArea orientation="horizontal">` 包(跨 OS 一致)。
269
+
270
+ ```tsx
271
+ <ScrollArea>
272
+ <DataTable columns={...} data={...} />
273
+ <ScrollBar orientation="horizontal" />
274
+ </ScrollArea>
275
+ ```
276
+
277
+ ---
278
+
279
+ ## AspectRatio / 硬寫 aspect-* 混用
280
+
281
+ ### ❌ media 容器硬寫 `aspect-video`
282
+
283
+ ```tsx
284
+ <div className="aspect-video bg-muted">
285
+ <img src={url} />
286
+ </div>
287
+ ```
288
+
289
+ **正解**:
290
+
291
+ ```tsx
292
+ <AspectRatio ratio={16 / 9} className="bg-muted">
293
+ <img src={url} className="w-full h-full object-cover" />
294
+ </AspectRatio>
295
+ ```
296
+
297
+ **理由**:`AspectRatio` 是 SSR-safe padding-bottom 方案,跨 OS / 未載入時穩定。硬寫 class 在某些邊緣瀏覽器失效。
298
+
299
+ ---
300
+
301
+ ## 色彩誤用
302
+
303
+ ### ❌ primary 當狀態色用(Mindset #1 違反)
304
+
305
+ ```tsx
306
+ <ProgressBar className="bg-primary" value={60} /> {/* ❌ 除非就是進度 */}
307
+ <Tag className="bg-primary">進行中</Tag> {/* ❌ 應用 info */}
308
+ ```
309
+
310
+ **正解**:進行中用 info,操作入口用 primary。
311
+
312
+ ```tsx
313
+ <Tag className="bg-info-subtle text-info-text">進行中</Tag>
314
+ <Button variant="primary">開始</Button>
315
+ ```
316
+
317
+ ### ❌ 硬寫 Tailwind 預設色
318
+
319
+ ```tsx
320
+ <div className="text-red-500 bg-blue-100"> // ❌
321
+ ```
322
+
323
+ **正解**:改 semantic token(text-error / bg-info-subtle)。
324
+
325
+ ---
326
+
327
+ ## 此清單如何擴充
328
+
329
+ 每次 audit 發現新 misuse pattern,append 到本檔。保留 negative example + 正解 + 理由 3 段格式。