@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,515 @@
1
+ {
2
+ "_meta": {
3
+ "purpose": "Explicit semantic mapping: principle (M-rule / trait / hook) → audit dim cover",
4
+ "ssot": ".claude/memory/feedback_audit_preflight_全盤查.md + design-system-audit/SKILL.md",
5
+ "updated": "2026-05-18",
6
+ "version": "1.0",
7
+ "_principle": "禁 heuristic match;每原則必 explicit dim list。新原則加入必同 commit 加 entry,違 = hook BLOCK"
8
+ },
9
+ "mRules": {
10
+ "M1": {
11
+ "name": "SSOT consumption 視覺決策前必查",
12
+ "dims": [],
13
+ "note": "governance-only;審 spec 寫 SSOT 段落 by ssot-consultation.md;無獨立 audit dim"
14
+ },
15
+ "M2": {
16
+ "name": "3rd-party DOM verify",
17
+ "dims": [],
18
+ "note": "runtime discipline;無 mechanical dim"
19
+ },
20
+ "M3": {
21
+ "name": "Portal 逃逸 subtree theme",
22
+ "dims": [],
23
+ "note": "historical-bugs only;考慮加 dim Group N+ Portal-theme check"
24
+ },
25
+ "M4": {
26
+ "name": "_Group fieldCtx 隔離",
27
+ "dims": [
28
+ 34
29
+ ],
30
+ "note": "Dim 34 disabled state precedence 隱含驗 group context"
31
+ },
32
+ "M5": {
33
+ "name": "State 疊加 spec coverage",
34
+ "dims": [
35
+ 7
36
+ ],
37
+ "note": "Spec Rule B 邊界案例"
38
+ },
39
+ "M6": {
40
+ "name": "Stakeholder gate 強制進階稽核",
41
+ "dims": [
42
+ 11,
43
+ 23
44
+ ],
45
+ "note": "Tier-1 gate via component-quality-gate skill chain"
46
+ },
47
+ "M7": {
48
+ "name": "新 skill cross-check 既有 Meta-Principle",
49
+ "dims": [],
50
+ "note": "governance-only"
51
+ },
52
+ "M8": {
53
+ "name": "Cross-component canonical 必 world-class benchmark",
54
+ "dims": [
55
+ 23
56
+ ],
57
+ "note": "Dim 23 benchmark cite"
58
+ },
59
+ "M9": {
60
+ "name": "Predicate 4 題自測",
61
+ "dims": [
62
+ 22
63
+ ],
64
+ "note": "D6e predicate audit protocol"
65
+ },
66
+ "M10": {
67
+ "name": "Proactive exhaustive scan",
68
+ "dims": [],
69
+ "note": "由 /scan-similar-bugs skill cover + Phase 0.5 preflight DS-wide enforce"
70
+ },
71
+ "M11": {
72
+ "name": "7 題 interactive state walk",
73
+ "dims": [],
74
+ "note": "runtime discipline pre-present;無 audit dim"
75
+ },
76
+ "M12": {
77
+ "name": "Binary strict rule benchmark + invariant test",
78
+ "dims": [
79
+ 23
80
+ ],
81
+ "note": "Dim 23 benchmark + propose-options 4-Q"
82
+ },
83
+ "M13": {
84
+ "name": "User 第 2 次提 → 截圖 verify",
85
+ "dims": [],
86
+ "note": "runtime discipline"
87
+ },
88
+ "M14": {
89
+ "name": "對話結論 AUTO integrate 5-layer",
90
+ "dims": [],
91
+ "note": "governance pipeline;由 ensure-canonical / codify-principle skill cover"
92
+ },
93
+ "M15": {
94
+ "name": "Product UI flow visual-audit coverable",
95
+ "dims": [],
96
+ "note": "考慮加 dim 47:檢查 stakeholder-facing OpenSnapshot story 存在"
97
+ },
98
+ "M16": {
99
+ "name": "Standalone gap canonical",
100
+ "dims": [
101
+ 21
102
+ ],
103
+ "note": "Group H 連續 item list gap"
104
+ },
105
+ "M17": {
106
+ "name": "SSOT 可傳播 (token / primitive / utility)",
107
+ "dims": [
108
+ 32
109
+ ],
110
+ "note": "Dim 32 filter operator + 通用 SSOT 消費隱含全 audit 中"
111
+ },
112
+ "M18": {
113
+ "name": "Propose-time 4-Q gate",
114
+ "dims": [],
115
+ "note": "propose-options skill;runtime discipline"
116
+ },
117
+ "M19": {
118
+ "name": "Trigger phrase auto-pipeline",
119
+ "dims": [],
120
+ "note": "ensure-canonical skill"
121
+ },
122
+ "M20": {
123
+ "name": "AI 自問 best-practice + 自動 self-improve",
124
+ "dims": [],
125
+ "note": "stop hook self-audit;runtime discipline"
126
+ },
127
+ "M21": {
128
+ "name": "新元件抽象前 prop variant test",
129
+ "dims": [
130
+ 33
131
+ ],
132
+ "note": "Dim 33(b) premature abstraction"
133
+ },
134
+ "M22": {
135
+ "name": "Benchmark claim 必 inline cite",
136
+ "dims": [
137
+ 23,
138
+ 33
139
+ ],
140
+ "note": "Dim 23 + Dim 33(d) benchmark cite check"
141
+ },
142
+ "M23": {
143
+ "name": "DS-internal canonical 優先 external",
144
+ "dims": [
145
+ 33
146
+ ],
147
+ "note": "Dim 33(e) DS-first"
148
+ },
149
+ "M24": {
150
+ "name": "Disabled > muted state precedence",
151
+ "dims": [
152
+ 34
153
+ ],
154
+ "note": "Group N Dim 34"
155
+ },
156
+ "M25": {
157
+ "name": "Overlay scroll chain invariant",
158
+ "dims": [
159
+ 35
160
+ ],
161
+ "note": "Group N Dim 35"
162
+ },
163
+ "M26": {
164
+ "name": "Behavior decision propose 前 WebFetch 3 source",
165
+ "dims": [],
166
+ "note": "runtime discipline;補強建議加 dim 48 cite freshness check"
167
+ },
168
+ "M28": {
169
+ "name": "Solo git ops grep canonical",
170
+ "dims": [],
171
+ "note": "governance-only;hook check_solo_workflow"
172
+ },
173
+ "M29": {
174
+ "name": "DS anchor preflight grep spec.md",
175
+ "dims": [],
176
+ "note": "runtime discipline;codex-collab Step 0.1"
177
+ },
178
+ "M30": {
179
+ "name": "Wrapper schema extends primitive",
180
+ "dims": [],
181
+ "note": "hook check_wrapper_primitive_schema_drift;考慮加 dim 49 DS-wide scan"
182
+ },
183
+ "M31": {
184
+ "name": "Codex collab 5-step canonical",
185
+ "dims": [],
186
+ "note": "codex-collab skill + hook;runtime"
187
+ },
188
+ "M32": {
189
+ "name": "Audit script pixel-quantified",
190
+ "dims": [],
191
+ "note": "hook check_pixel_quantified_audit;對 audit scripts 自身,不對 component"
192
+ },
193
+ "_retired": {
194
+ "M27": "2026-05-15 → folded into M23(c)(framework prop name conflict child)",
195
+ "M33": "2026-05-22 → folded into M20(AI self-correction sub-rule)",
196
+ "M34": "2026-05-22 → folded into M7(rule-authoring hygiene sub-rule)",
197
+ "M35": "2026-05-22 → folded into M23(d)(nearest same-purpose canonical sub-rule)"
198
+ }
199
+ },
200
+ "traits": {
201
+ "isInternal": {
202
+ "dims": [
203
+ 44
204
+ ],
205
+ "note": "Group O Dim 44"
206
+ },
207
+ "isOverlay": {
208
+ "dims": [
209
+ 31
210
+ ],
211
+ "note": "Group M Dim 31 overlay body"
212
+ },
213
+ "hasSizes": {
214
+ "dims": [
215
+ 13,
216
+ 23,
217
+ 29,
218
+ 45
219
+ ],
220
+ "note": "anatomy SizeMatrix + trait-based + mechanical output"
221
+ },
222
+ "hasVariants": {
223
+ "dims": [
224
+ 13,
225
+ 23,
226
+ 29,
227
+ 45
228
+ ],
229
+ "note": "anatomy ColorMatrix + trait-based"
230
+ },
231
+ "hasInteractiveStates": {
232
+ "dims": [
233
+ 13,
234
+ 29
235
+ ],
236
+ "note": "anatomy StateBehavior"
237
+ },
238
+ "isStructural": {
239
+ "dims": [],
240
+ "note": "考慮加 dim 50 structural-element scan"
241
+ },
242
+ "isInputLike": {
243
+ "dims": [
244
+ 26,
245
+ 34,
246
+ 37
247
+ ],
248
+ "note": "Dim 26 dual-mode + Field state machine"
249
+ },
250
+ "isMatrixHeavy": {
251
+ "dims": [
252
+ 13
253
+ ],
254
+ "note": "anatomy matrix completeness"
255
+ },
256
+ "isSelectionSingle": {
257
+ "dims": [
258
+ 26,
259
+ 34
260
+ ],
261
+ "note": "Field dual-mode"
262
+ },
263
+ "isSelectionMulti": {
264
+ "dims": [
265
+ 26,
266
+ 32,
267
+ 34
268
+ ],
269
+ "note": "Field + filter SSOT"
270
+ },
271
+ "hasActions": {
272
+ "dims": [
273
+ 38
274
+ ],
275
+ "note": "Dim 38 inline-action gap"
276
+ }
277
+ },
278
+ "hooks": {
279
+ "app_shell_primary_header_consistency": {
280
+ "dims": [
281
+ 56
282
+ ],
283
+ "note": "Phase 5 AppShell global header consistency(2026-05-23 entry add per audit-preflight gap)"
284
+ },
285
+ "benchmark_citation": {
286
+ "dims": [
287
+ 23
288
+ ]
289
+ },
290
+ "canonical_propagation": {
291
+ "dims": [
292
+ 5,
293
+ 16,
294
+ 30
295
+ ],
296
+ "note": "1 hook 3 invariant"
297
+ },
298
+ "codex_collab_5step": {
299
+ "dims": [],
300
+ "note": "governance/runtime only,not visible audit"
301
+ },
302
+ "datatable_invariants": {
303
+ "dims": [],
304
+ "note": "考慮加 dim 51 DataTable canonical full-scan"
305
+ },
306
+ "field_controls_contracts": {
307
+ "dims": [
308
+ 26,
309
+ 34,
310
+ 37
311
+ ]
312
+ },
313
+ "field_family_invariants": {
314
+ "dims": [
315
+ 34,
316
+ 35,
317
+ 36,
318
+ 37
319
+ ]
320
+ },
321
+ "file_size_budget": {
322
+ "dims": [],
323
+ "note": "governance-only"
324
+ },
325
+ "naming_and_abstraction": {
326
+ "dims": [
327
+ 14,
328
+ 17,
329
+ 33
330
+ ]
331
+ },
332
+ "opacity_token_usage": {
333
+ "dims": [
334
+ 5
335
+ ]
336
+ },
337
+ "pattern_invariants": {
338
+ "dims": [
339
+ 22,
340
+ 35,
341
+ 38,
342
+ 39
343
+ ]
344
+ },
345
+ "peoplepicker_ssot_drift": {
346
+ "dims": [
347
+ 37
348
+ ],
349
+ "note": "Dim 37 Field state machine SSOT 涵蓋 PeoplePicker trigger render / placeholder / overflow 等 SSOT-bearing API 屬 Field family scope;hook 為 write-time pre-warning,本 dim batch verify 既有 consumer"
350
+ },
351
+ "select_all_canonical": {
352
+ "dims": [
353
+ 17,
354
+ 32
355
+ ],
356
+ "note": "Dim 17 SSOT propagation + Dim 32 filter SSOT consumption canonical 涵蓋 — `multi-select-ordering` primitive 屬 SSOT consumer propagation(per Ant Transfer + Table rowSelection grep 證據,Layer A + Codex M31 Round 4 共識,2026-05-16)。Hook write-time pre-warning,Dim 17/32 batch verify 既有 Select All consumer 是否 import primitive 而非自刻 `options.map(v).onValueChange` reset"
357
+ },
358
+ "pixel_quantified_audit": {
359
+ "dims": [],
360
+ "note": "對 audit scripts 自身,not component"
361
+ },
362
+ "propose_plain_chinese": {
363
+ "dims": [],
364
+ "note": "governance-only"
365
+ },
366
+ "solo_workflow": {
367
+ "dims": [],
368
+ "note": "governance-only"
369
+ },
370
+ "story_invariants": {
371
+ "dims": [
372
+ 11,
373
+ 12,
374
+ 13,
375
+ 23,
376
+ 24,
377
+ 25,
378
+ 28,
379
+ 29,
380
+ 40,
381
+ 41
382
+ ]
383
+ },
384
+ "substantive_edit_approval_preflight": {
385
+ "dims": [],
386
+ "note": "governance-only"
387
+ },
388
+ "wrapper_primitive_schema_drift": {
389
+ "dims": [],
390
+ "note": "考慮加 dim 52 wrapper-extends scan"
391
+ },
392
+ "audit_post_report_validator": {
393
+ "dims": [],
394
+ "note": "2026-05-17 ship;governance-only — validates `/design-system-audit` final report quality(NO-SAMPLE / 46-dim coverage / audit-prompts.md coverage / @benchmark-unverified-blanket debt drift),emit prune-chain-trigger signal。不屬 component scope"
395
+ },
396
+ "tailwind_token_registry": {
397
+ "dims": [
398
+ 47
399
+ ],
400
+ "note": "2026-05-17 升級(原 opacity_token_usage 擴):讀 packages/design-system/src/tokens/utility-registry.json SSOT,擋 leading-N / tracking-* / gap-px|0.5|1.5 / w-fraction / text-(xs|sm|...) / font-(thin|light|...) / rounded-(xl|2xl|3xl) 等 untracked utility"
401
+ },
402
+ "tab_lg_chrome_header_equal": {
403
+ "dims": [
404
+ 52
405
+ ],
406
+ "note": "2026-05-17 ship(Header canonical W3 token alignment):parse uiSize.css + globals.css 對等 assert(不 CSS alias 因 scope 不同)。對應 patterns/header-canonical/header-canonical.spec.md W3 + M31 codex 比稿 Step 5 共識"
407
+ },
408
+ "header_with_tabs_border": {
409
+ "dims": [
410
+ 52
411
+ ],
412
+ "note": "2026-05-17 ship(Header canonical W1 border ownership):header 含 Tabs 必標 withTabs prop 讓 paint delegate;違反 = 雙線 BLOCKER。對應 patterns/header-canonical/header-canonical.spec.md W1 + GitHub Primer PageHeader auto-suppress 模式"
413
+ },
414
+ "chrome_header_handcraft": {
415
+ "dims": [
416
+ 52
417
+ ],
418
+ "note": "2026-05-17 ship(Header canonical Layer 3 ChromeHeader consumption):production chrome header 自刻 h-chrome-header-height+border-b 簽名 → soft P1 warn,Phase 3 後升 P0 BLOCKER。對應 patterns/header-canonical/header-canonical.spec.md Layer 3 + M30 wrapper extends primitive"
419
+ },
420
+ "spec_class_drift": {
421
+ "dims": [
422
+ 53
423
+ ],
424
+ "note": "2026-05-17 ship(audit Dim 53 reverse drift):spec.md 寫「固定 h-NN/寫死/硬寫」keyword 但對應 tsx 已消費 token → soft P1 warn。互補既有 forward direction(spec-to-code),起因 Phase 1 抓不到 FileViewer h-14 spec drift"
425
+ },
426
+ "audit_sample_escape": {
427
+ "dims": [],
428
+ "note": "2026-05-17 ship(audit canonical infra,non-component scope):PreToolUse Agent 攔截 dispatch prompt 含「sample evidence allowed / heavy agent needed / top N」escape clause → BLOCKER。Mechanical enforce NO-SAMPLE invariant。起因 user verbatim「你他媽是不是又再搞抽樣」,Dim 24/25/40-43/45/46/48 sub-agent 多次 sampled"
429
+ },
430
+ "main_branch_workbench": {
431
+ "dims": [],
432
+ "note": "2026-05-17 ship(Solo-work canonical infra,M28 sub-rule):PreToolUse Edit/Write 偵測 current branch=main + edit production code(packages/design-system/src/src/app/src/explorations)+ 近 5 條 user msg 無 branch-trigger keyword → BLOCKER。補 R1(2nd branch)R2(PR)R3(push main)沒抓的「main-as-workbench」case。起因 user verbatim 2026-05-17「不是只有我說 push 到 main 才真的會 push 到 main 嗎」,本 session AI 整個 deep audit 都在 main 上 edit。escape:doc-only(spec.md) / CLAUDE_BYPASS_MAIN_WORKBENCH=1"
433
+ },
434
+ "dim_count_drift": {
435
+ "dims": [],
436
+ "note": "2026-05-18 ship(audit SSOT integrity infra,non-component scope):PreToolUse Edit/Write 攔 chain skill / spec / rule / CLAUDE.md hardcode 具體 audit dim 數字(53 dim / 46-dim / N audit dimensions),強制 design-system-audit/SKILL.md `## The N audit dimensions` 為 SSOT,deep-audit-cross-codex 等 chain skill 自動繼承。Allowlist:SSOT file 自己 / invariant doc 引用(SSOT/禁/forbidden/example/hardcode keyword 同行)。起因 user 2026-05-18「deep-audit-cross-codex 應該要確保其中的 design system deep audit 跟 design-system-audit deep 是 ssot」"
437
+ },
438
+ "propose_pre_grep_verify": {
439
+ "dims": [],
440
+ "note": "2026-05-18 ship(M18 Q0 Pre-ASK self-verify governance infra):PreToolUse Edit/Write planning/reports/handoff *.md 偵測 propose keyword(請拍板 / 等你拍板 / 決策 N / 我推 A/B/C / 選項)但 content 無 file:line cite 證據 → P1 stderr warn。Escape:檔頭 <!-- @propose-pre-verified --> 含 rationale。起因 2026-05-18 Sheet/inline-action/SurfaceBody 三題 propose 給 user 拍板,grep 後 0 個真 gap;user verbatim「不是老早就跟你說過要我決策前請先基於我們所有的檔案包括設計原則包括 ssot 包括所有實作代碼,自主自動驗證這些問題是否真的是問題」"
441
+ }
442
+ },
443
+ "newDims_2026_05_17": {
444
+ "_principle": "Codex M31 共識:World-class tier dims 47-51,對齊 Atlassian/Carbon/Ant/Polaris/Material UI/Material Web/Apple HIG",
445
+ "47": {
446
+ "name": "Tailwind utility registry compliance",
447
+ "ssot": "packages/design-system/src/tokens/utility-registry.json",
448
+ "hook": "tailwind_token_registry"
449
+ },
450
+ "48": {
451
+ "name": "Unused / orphan token detector",
452
+ "ssot": "tokens/**/*.spec.md 消費者 段 cross-verify",
453
+ "hook": "TBD"
454
+ },
455
+ "49": {
456
+ "name": "a11y axe-core 自動 + WCAG contrast ratio",
457
+ "ssot": "Storybook a11y addon + axe-core CI",
458
+ "hook": "TBD"
459
+ },
460
+ "50": {
461
+ "name": "Bundle size budget per component",
462
+ "ssot": "package.json size-limit + per-component manifest",
463
+ "hook": "TBD"
464
+ },
465
+ "51": {
466
+ "name": "Theme / density visual matrix",
467
+ "ssot": "visual-audit Layer B + baseline snapshot",
468
+ "hook": "visual-audit Layer A chain"
469
+ },
470
+ "52": {
471
+ "name": "Header canonical cross-family invariants(W1-W6)",
472
+ "ssot": "patterns/header-canonical/header-canonical.spec.md",
473
+ "hook": "tab_lg_chrome_header_equal + header_with_tabs_border + chrome_header_handcraft"
474
+ },
475
+ "53": {
476
+ "name": "Code-to-spec reverse drift check",
477
+ "ssot": ".claude/skills/design-system-audit/SKILL.md Group P",
478
+ "hook": "spec_class_drift",
479
+ "note": "新加(2026-05-17):反向 grep tsx hardcoded class → 對應 spec.md 是否仍寫舊值。Phase 1 漏抓 FileViewer h-14 spec drift 升 dim,對齊 Layer A own Phase 0 全掃 + codex 共識"
480
+ }
481
+ },
482
+ "auditOnlyGaps": {
483
+ "_principle": "本節列「user mission 真實 gap」— 屬 visible audit 範疇但無 dim cover,需新增 dim",
484
+ "candidates": [
485
+ {
486
+ "id": "M3 Portal theme",
487
+ "proposedDim": "Dim 47 Portal subtree theme integrity DS-wide"
488
+ },
489
+ {
490
+ "id": "M15 OpenSnapshot",
491
+ "proposedDim": "Dim 48 Stakeholder flow OpenSnapshot coverage"
492
+ },
493
+ {
494
+ "id": "M26 cite freshness",
495
+ "proposedDim": "Dim 49 Benchmark cite WebFetch freshness (release 級)"
496
+ },
497
+ {
498
+ "id": "M30 wrapper extends",
499
+ "proposedDim": "Dim 50 Wrapper schema extends primitive DS-wide"
500
+ },
501
+ {
502
+ "id": "M32 audit pixel",
503
+ "proposedDim": "audit script self-test;不屬 component scope,保留 hook layer"
504
+ },
505
+ {
506
+ "id": "trait:isStructural",
507
+ "proposedDim": "Dim 51 Structural element 規格"
508
+ },
509
+ {
510
+ "id": "hook:datatable_invariants",
511
+ "proposedDim": "Dim 52 DataTable canonical full-scan"
512
+ }
513
+ ]
514
+ }
515
+ }
@@ -0,0 +1,45 @@
1
+ # 元件 Props 命名 — 詳細對照表
2
+
3
+ `.claude/rules/ui-development.md`「元件 Props 命名」的詳細展開(callback / Badge / icon canonical)。
4
+
5
+ ## 關閉 / 移除類 callback canonical(按語意分層,不合併)
6
+
7
+ 四個名稱各有語意,不可替換:
8
+
9
+ | Callback | 語意 | 典型元件 | 世界級對照 |
10
+ |----------|------|---------|-----------|
11
+ | `onClose` | **關閉 overlay session** — 浮層關閉回背景 | Dialog / Sheet / Popover / FileViewer / HoverCard | React Aria `onClose` / Material `DialogProps.onClose` |
12
+ | `onDismiss` | **通知被忽略** — 暫時訊息被關,不影響流程 | Alert / Notice / Toast / Coachmark | Polaris `Toast.onDismiss` / iOS `dismiss()` |
13
+ | `onRemove` | **從集合移除 item** — parent collection 狀態變化 | PeoplePicker / Combobox multi-select tag / Tag(in list) | Material `Chip.onDelete` / React Aria `onRemove` |
14
+ | `onClear` | **欄位內容清空** — value 設 empty,元件不關 | Input / Select / Combobox / DatePicker clear | Ant `allowClear` + `onClear` / Polaris `clearButton` |
15
+
16
+ **禁止**:用同一名 cover 多語意(`onClose` 同時表達 Tag 的 `onRemove`)。spec 寫 callback 時必明示哪一類。
17
+
18
+ ## Badge 類 prop 名 canonical(按放置,不按「是 badge」籠統命名)
19
+
20
+ Badge 在不同 anchor 有兩種截然不同視覺 / 語意,prop 名區分:
21
+
22
+ | Prop | 用途 | 典型 anchor | Badge 型態 |
23
+ |------|------|------------|----------|
24
+ | `badge` | **Pill 內 inline badge** — label 右側 flex | Button(有 label)/ Tab item / Chip | inline count |
25
+ | `overlayBadge` | **疊視覺重心** — absolute 於 icon/avatar 角 | iconOnly Button / pure Icon | top-right count overlay |
26
+ | `badgeCount`(Avatar 專用) | count overlay,內部用 `<Badge variant="critical">`,貼 avatar 右上 | Avatar | overlay but Avatar 語意 |
27
+ | `status`(Avatar 專用) | **非 Badge** — SVG presence dot,貼右下 | Avatar | presence indicator |
28
+
29
+ **禁止**:同 prop 名兼 inline + overlay。世界級 Material `BadgedBox`(overlay)vs `Chip.label`(inline)分開;Ant `<Badge overflowCount>` vs `<Tag>` 分開。
30
+
31
+ **禁止組合**:有 label 的 Button / Chip 疊 `overlayBadge`(badge 飄到 chrome 邊緣遠離 icon 語義) → 計數改用 `badge` inline。詳 `badge.spec.md`「Overlay 適用元件 canonical」。
32
+
33
+ ## 常用 icon canonical
34
+
35
+ | 語義 | Icon | 反例 |
36
+ |------|------|------|
37
+ | 溢出選單 / 更多動作 | **`MoreVertical`** | ❌ `MoreHorizontal`(row 內水平排 icon 跟水平動作按鈕群視覺混淆,縱向三點更明確) |
38
+ | 路徑收合(Breadcrumb ellipsis)| `MoreHorizontal` | 唯一保留 `MoreHorizontal` — 沿路徑方向省略,非 overflow menu |
39
+ | 關閉(Close / Dismiss)| `X` | ❌ `XCircle`(error status,語義衝突) |
40
+ | 成功 / 完成 | `Check` / `CircleCheck` | — |
41
+ | 失敗 / 錯誤 | `XCircle` | — |
42
+ | 警告 / 提醒 | `TriangleAlert` | — |
43
+ | 資訊 / 說明 | `Info` | — |
44
+
45
+ **世界級對照**:Linear / Notion / GitHub / Figma 全部用 vertical 3-dots 作 overflow;horizontal 3-dots 專給 path/truncation(Breadcrumb / text ellipsis)。
@@ -0,0 +1,58 @@
1
+ # Spec 規則 — 詳細展開
2
+
3
+ `.claude/rules/spec-rules.md` 的詳表。主章留核心原則,本檔放 SSOT 判斷 + 邊界案例 scope default + 禁止清單。
4
+
5
+ ## SSOT 結構規則
6
+
7
+ 跨元件比較由**一個 spec own 完整內容,其他 spec 用一行 pointer 指回**。
8
+
9
+ **何時需要 SSOT(深度比較)**:
10
+ - 多維度分析(如「與 X 的分界」分多個角度)
11
+ - 情境對照表 > 3 rows
12
+ - 涉及另一元件的內部機制 / 權衡
13
+
14
+ **何時不需要(本地引用即可)**:
15
+ - 「何時不用」表格一行帶過(「改用 X」+ 原因)— 兩側並存不會漂移
16
+ - 「相關」links section 列出
17
+ - 只描述自己元件的 props / variants / state
18
+
19
+ **Ownership 判斷順序**:
20
+ 1. 通用預設元件 own(Select owns vs RadioGroup、Input owns vs NumberInput — 通用者是 fallback)
21
+ 2. 一側 spec 明顯更深 / 另一側薄 wrapper → 深側 own(Tabs owns vs SegmentedControl)
22
+ 3. 兩側對等都需要 → 按字母序決定 anchor
23
+
24
+ **執行規則**:
25
+ - Own 方寫深度 section;被指方寫一行 pointer(**reciprocal 必須存在,不可單向**)
26
+ - Pointer 必須明確指出 anchor spec + section 名稱
27
+ - 本專案目前的 SSOT anchors:
28
+ - Tabs vs SegmentedControl → `tabs.spec.md`「Tabs 與 SegmentedControl 的分界」
29
+ - Select vs RadioGroup → `select.spec.md`「與 RadioGroup 的分界」
30
+ - Checkbox vs Switch → `checkbox.spec.md`「與 Switch 的分界」
31
+ - HoverCard vs Tooltip → `hover-card.spec.md`「與 Tooltip 的分界」
32
+ - Row primitives 共用 → `patterns/element-anatomy/item-anatomy.spec.md`
33
+ - Field Controls 共用 → `components/Field/field-controls.spec.md`
34
+
35
+ **禁止事項**:
36
+ - ❌ 兩 spec 都寫完整對照(保證漂移)
37
+ - ❌ 建孤立 `xxx-selection.spec.md` / `xxx-comparison.spec.md` 承載比較 — 世界級 DS 都把比較放元件 spec 內
38
+ - ❌ 單向指向(A → B,B 沒指回 A)
39
+ - ❌ Pointer 只說「見 X spec」不說 section 名稱
40
+
41
+ ## 邊界案例覆蓋(Scope 預設 — 減少重複)
42
+
43
+ 適用狀態必須有明確說明 — disabled / loading / empty、dark mode / density、icon-only。不適用則明文「本元件無 X 狀態」,不沉默省略。
44
+
45
+ **Scope 預設**:
46
+ - **Field 家族**(Input / NumberInput / DatePicker / Select / Combobox / LinkInput / Textarea / Switch / Slider / SegmentedControl / Checkbox / RadioGroup)→ 直接寫「Mode / disabled / readonly 詳 `field-controls.spec.md`」
47
+ - **Dark mode**:元件靠 semantic token 切換(無自訂 palette)→ 「Dark mode 由 semantic token 自動處理(見 `color.spec.md`)」
48
+ - **Density**:元件用 `--field-height-*` / `--layout-space-*` → 「Density 由 token 自動切換」
49
+ - **純 wrapper**(無互動狀態,如 Separator / Skeleton / CircularProgress / ProgressBar)→ 「本元件無互動狀態」一行帶過
50
+
51
+ 元件特有(non-inherit)狀態必展開寫;繼承自 family / token 的行為 pointer 即可。
52
+
53
+ ## spec.md 與 .tsx 職責分離
54
+
55
+ - spec 只記錄設計原則(「為什麼」「何時用」)— 讓 AI 能舉一反三推導邊緣情況
56
+ - 可程式化規則(具體 token class / pixel 值 / 條件邏輯)寫進 `.tsx`
57
+ - 判斷標準:「這條規則能直接變成 code 嗎?」能 → .tsx;不能、需要人類判斷 → spec
58
+ - 可推導的值用 `calc()` / 公式表達,不硬寫結果(例:divider 內縮 = `(行高 - 文字行高) / 2`)
@@ -0,0 +1,63 @@
1
+ # SSOT 消費 canonical — 完整對照 + 反例
2
+
3
+ CLAUDE.md `# SSOT 消費 canonical` 的詳表 + 反例。主章留核心 + pointer,本檔放大對照表 + 禁止清單 + tsx 註解模板。
4
+
5
+ ## 視覺決策 → 必查清單(完整)
6
+
7
+ | 決策 | 必查的 SSOT 家 |
8
+ |------|---------------|
9
+ | **元件選擇**(這該用哪個既有元件?)| `ls packages/design-system/src/components/` + `ls packages/design-system/src/patterns/` + 近親元件 spec |
10
+ | **Token / 值**(padding / gap / height / color)| 對應 `tokens/{name}/spec.md` + `tokens/README.md` |
11
+ | **Padding / spacing**(chrome vs 元件內 vs 精確幾何)| `.claude/rules/ui-development.md`「Padding source 分層規則」+ `tokens/layoutSpace/layoutSpace.spec.md` |
12
+ | **Row / item 結構**(prefix / content / suffix slot)| `patterns/element-anatomy/item-anatomy.spec.md`(Family 1+2 SSOT) |
13
+ | **連續 item list wrapper gap** | `patterns/element-anatomy/item-anatomy.spec.md`「連續 item 貼邊合法性」— 公式:permanent standalone card/pill → 必 gap;permanent flush / transparent → 0 gap。元件專屬 gap 值 + mixed 混合情境決策表查該元件 spec「List wrapper canonical」節 |
14
+ | **視覺容器 breathing**(自建或 override 帶 bg/border/shadow 的 div)| `patterns/element-anatomy/element-anatomy.spec.md`「視覺容器 breathing invariant」— 有視覺邊界容器必有 inner padding。責任在父容器,子元件 w-full responsive 不變 |
15
+ | **Label ↔ Description gap**(2px)| Token `--item-gap-label-desc` + Primitive `<ItemContent>` — 改 token 一處 → 全 DS 同步。Consumer 2 擇 1:(a) token:`mt-[var(--item-gap-label-desc)]`(b) primitive:`<ItemContent label description descriptionTone>`。偏離必 spec 明文 rationale |
16
+ | **Dismiss / inline action / overflow menu**| `patterns/element-anatomy/item-anatomy.spec.md`「Dismiss 按鈕 canonical」+「Inline Action 設計規格」+「常用 icon canonical」 |
17
+ | **按鈕排列 / 群組 / 分隔**| `patterns/action-bar/action-bar.spec.md` |
18
+ | **Header 高度 / chrome padding**| `tokens/uiSize/uiSize.spec.md`(`--chrome-header-height`)+ `tokens/layoutSpace/layoutSpace.spec.md` |
19
+ | **Chrome header 選型**(fixed-h vs padding-based)| `tokens/uiSize/uiSize.spec.md`「Chrome header 選型 canonical」— decision tree + 8 家世界級對照 + checklist |
20
+ | **Header 跨家族視覺契約**(border / padding / withTabs / dismiss size 連動)| `patterns/header-canonical/header-canonical.spec.md` — SSOT for chrome + overlay header 兩家族;含 withTabs 6 lockstep rules(W1 border auto-suppress / W2 padding align / W3 tabs size 對應 / W4 flush stack / W5 md future tier / W6 default sm)|
21
+ | **Overlay chrome dismiss / unbounded button**| `patterns/overlay-surface/overlay-surface.spec.md`「Chrome dismiss size canonical v5」 |
22
+ | **Overlay title size**(modal 16 vs non-modal 14)| `patterns/overlay-surface/overlay-surface.spec.md`「Overlay title typography canonical」 |
23
+ | **Form field gap**| `components/Field/field.spec.md` +「layoutSpace 規則 3:跟 block 相鄰 = tight,inline ↔ inline = loose」 |
24
+ | **Icon 選擇 / 尺寸**| `.claude/rules/ui-development.md`「元件 Props 命名」「Icon canonical」+ `ui-dev-rules.md`「Icon size 來源分層規則」 |
25
+ | **浮層 header / body / footer**| `patterns/overlay-surface/overlay-surface.spec.md` |
26
+ | **Scrollbar / 滾動**| `components/ScrollArea/scroll-area.spec.md` +「horizontal-overflow pattern」 |
27
+ | **Variant / prop 命名**| 既有元件 `variant=` 值 grep + `# 命名與語言一致性`「命名必過三重 test」 |
28
+ | **State 視覺**(selected / disabled / hover)| `patterns/element-anatomy/item-anatomy.spec.md`「選擇 / 狀態視覺規則」 |
29
+
30
+ ## 強制 Checklist — 新 tsx 檔 top-of-file 註解
31
+
32
+ 新元件 / 新 feature 的 tsx 開頭**必須**有註解段落:
33
+
34
+ ```tsx
35
+ /**
36
+ * {Component} — {定位一句話}
37
+ *
38
+ * ── 定位 ──
39
+ * {...}
40
+ *
41
+ * ── 實作基礎 ──
42
+ * 消費:{List components / primitives used}
43
+ * 對應 pattern:{patterns/xxx}
44
+ *
45
+ * ── 消費的 SSOT ──
46
+ * - components: [Button, Input, ItemInlineAction, ...]
47
+ * - patterns: [item-anatomy, action-bar, overlay-surface]
48
+ * - tokens: [--layout-space-loose, --chrome-header-height, --field-height-md]
49
+ * - spec refs: {近親 spec 清單}
50
+ */
51
+ ```
52
+
53
+ Hook `check_ssot_consultation.sh`(Write 新 tsx 到 `packages/design-system/src/components/` 或 `src/explorations/`)→ 若檔內無上述註解區 → warn 要求補齊。
54
+
55
+ ## 禁止:隱性自創
56
+
57
+ 下列行為等同自創(就算沒宣告新命名):
58
+ - 自寫 `h-14` / `h-12` 等 chrome 高度(應用 `--chrome-header-height` token)
59
+ - 自寫 `gap-3` 當 toolbar 按鈕群 gap(應查 `patterns/action-bar` canonical)
60
+ - 自寫 `<button aria-label="Close"><X /></button>` 作 dismiss(應用 `ItemInlineAction`)
61
+ - 自寫 Row `<div><Icon /><span>label</span><Button /></div>`(應用 `<MenuItem>` + slot)
62
+ - 自訂 Input `variant="custom-name"` 未先 grep 既有 variant 值
63
+ - 在 Toolbar 用 `<input className="bg-transparent border-0 ...">`(應用 `<Input variant="bare">` 若既有;無 → Ambiguity Protocol)