@qijenchen/design-system 0.1.0-beta.83 → 0.1.0-beta.84

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 (604) hide show
  1. package/CLAUDE.md +8 -8
  2. package/README.md +3 -2
  3. package/dist/components/Alert/alert.js.map +1 -1
  4. package/dist/components/AppShell/_demo-helpers.d.ts.map +1 -1
  5. package/dist/components/AppShell/app-shell.d.ts +1 -1
  6. package/dist/components/AppShell/app-shell.d.ts.map +1 -1
  7. package/dist/components/AppShell/app-shell.js +22 -2
  8. package/dist/components/AppShell/app-shell.js.map +1 -1
  9. package/dist/components/Avatar/avatar.d.ts.map +1 -1
  10. package/dist/components/Avatar/avatar.js +4 -4
  11. package/dist/components/Avatar/avatar.js.map +1 -1
  12. package/dist/components/Breadcrumb/breadcrumb.d.ts.map +1 -1
  13. package/dist/components/Breadcrumb/breadcrumb.js +1 -1
  14. package/dist/components/Breadcrumb/breadcrumb.js.map +1 -1
  15. package/dist/components/Button/button.d.ts +2 -2
  16. package/dist/components/Button/button.d.ts.map +1 -1
  17. package/dist/components/Button/button.js +12 -3
  18. package/dist/components/Button/button.js.map +1 -1
  19. package/dist/components/Calendar/calendar.d.ts +13 -5
  20. package/dist/components/Calendar/calendar.d.ts.map +1 -1
  21. package/dist/components/Calendar/calendar.js +7 -1
  22. package/dist/components/Calendar/calendar.js.map +1 -1
  23. package/dist/components/Carousel/carousel.d.ts.map +1 -1
  24. package/dist/components/Carousel/carousel.js +8 -3
  25. package/dist/components/Carousel/carousel.js.map +1 -1
  26. package/dist/components/Chart/chart.d.ts.map +1 -1
  27. package/dist/components/Chart/chart.js +1 -0
  28. package/dist/components/Chart/chart.js.map +1 -1
  29. package/dist/components/Checkbox/checkbox.d.ts +1 -1
  30. package/dist/components/Checkbox/checkbox.d.ts.map +1 -1
  31. package/dist/components/Checkbox/checkbox.js +8 -4
  32. package/dist/components/Checkbox/checkbox.js.map +1 -1
  33. package/dist/components/Chip/chip.d.ts +1 -1
  34. package/dist/components/Chip/chip.d.ts.map +1 -1
  35. package/dist/components/Chip/chip.js.map +1 -1
  36. package/dist/components/Coachmark/coachmark.d.ts +10 -3
  37. package/dist/components/Coachmark/coachmark.d.ts.map +1 -1
  38. package/dist/components/Coachmark/coachmark.js.map +1 -1
  39. package/dist/components/Combobox/combobox.d.ts +5 -1
  40. package/dist/components/Combobox/combobox.d.ts.map +1 -1
  41. package/dist/components/Combobox/combobox.js +30 -13
  42. package/dist/components/Combobox/combobox.js.map +1 -1
  43. package/dist/components/DataTable/cell-registry.d.ts.map +1 -1
  44. package/dist/components/DataTable/cell-registry.js +53 -62
  45. package/dist/components/DataTable/cell-registry.js.map +1 -1
  46. package/dist/components/DataTable/column-types.d.ts +10 -4
  47. package/dist/components/DataTable/column-types.d.ts.map +1 -1
  48. package/dist/components/DataTable/column-types.js.map +1 -1
  49. package/dist/components/DataTable/data-table-column-visibility-panel.d.ts +1 -1
  50. package/dist/components/DataTable/data-table-column-visibility-panel.js +183 -0
  51. package/dist/components/DataTable/data-table-column-visibility-panel.js.map +1 -0
  52. package/dist/components/DataTable/data-table-filter-panel.d.ts.map +1 -1
  53. package/dist/components/DataTable/data-table-filter-panel.js +607 -0
  54. package/dist/components/DataTable/data-table-filter-panel.js.map +1 -0
  55. package/dist/components/DataTable/data-table-interaction-layer.d.ts +11 -15
  56. package/dist/components/DataTable/data-table-interaction-layer.d.ts.map +1 -1
  57. package/dist/components/DataTable/data-table-interaction-layer.js +1 -3
  58. package/dist/components/DataTable/data-table-interaction-layer.js.map +1 -1
  59. package/dist/components/DataTable/data-table-sort-manager.js +140 -0
  60. package/dist/components/DataTable/data-table-sort-manager.js.map +1 -0
  61. package/dist/components/DataTable/data-table.d.ts +5 -6
  62. package/dist/components/DataTable/data-table.d.ts.map +1 -1
  63. package/dist/components/DataTable/data-table.js +36 -15
  64. package/dist/components/DataTable/data-table.js.map +1 -1
  65. package/dist/components/DataTable/filter-operators.js +140 -0
  66. package/dist/components/DataTable/filter-operators.js.map +1 -0
  67. package/dist/components/DataTable/filter-tree.js +312 -0
  68. package/dist/components/DataTable/filter-tree.js.map +1 -0
  69. package/dist/components/DataTable/index.d.ts +3 -0
  70. package/dist/components/DataTable/index.d.ts.map +1 -1
  71. package/dist/components/DataTable/index.js +12 -1
  72. package/dist/components/DataTable/index.js.map +1 -1
  73. package/dist/components/DataTable/lib/column-meta.js +25 -0
  74. package/dist/components/DataTable/lib/column-meta.js.map +1 -0
  75. package/dist/components/DateGrid/date-grid.d.ts.map +1 -1
  76. package/dist/components/DateGrid/date-grid.js +3 -1
  77. package/dist/components/DateGrid/date-grid.js.map +1 -1
  78. package/dist/components/DatePicker/date-picker.d.ts +7 -1
  79. package/dist/components/DatePicker/date-picker.d.ts.map +1 -1
  80. package/dist/components/DatePicker/date-picker.js +105 -74
  81. package/dist/components/DatePicker/date-picker.js.map +1 -1
  82. package/dist/components/Dialog/dialog.d.ts +20 -3
  83. package/dist/components/Dialog/dialog.d.ts.map +1 -1
  84. package/dist/components/Dialog/dialog.js +38 -20
  85. package/dist/components/Dialog/dialog.js.map +1 -1
  86. package/dist/components/DropdownMenu/dropdown-menu.d.ts.map +1 -1
  87. package/dist/components/DropdownMenu/dropdown-menu.js +3 -1
  88. package/dist/components/DropdownMenu/dropdown-menu.js.map +1 -1
  89. package/dist/components/Field/field-context.d.ts +45 -5
  90. package/dist/components/Field/field-context.d.ts.map +1 -1
  91. package/dist/components/Field/field-context.js +19 -0
  92. package/dist/components/Field/field-context.js.map +1 -1
  93. package/dist/components/Field/field-edit-keys.d.ts +21 -0
  94. package/dist/components/Field/field-edit-keys.d.ts.map +1 -0
  95. package/dist/components/Field/field-edit-keys.js +19 -0
  96. package/dist/components/Field/field-edit-keys.js.map +1 -0
  97. package/dist/components/Field/field-types.d.ts +20 -1
  98. package/dist/components/Field/field-types.d.ts.map +1 -1
  99. package/dist/components/Field/field-types.js.map +1 -1
  100. package/dist/components/Field/field-wrapper.d.ts +3 -2
  101. package/dist/components/Field/field-wrapper.d.ts.map +1 -1
  102. package/dist/components/Field/field-wrapper.js +38 -39
  103. package/dist/components/Field/field-wrapper.js.map +1 -1
  104. package/dist/components/Field/field.d.ts +2 -1
  105. package/dist/components/Field/field.d.ts.map +1 -1
  106. package/dist/components/Field/field.js.map +1 -1
  107. package/dist/components/FieldControlGroup/field-control-group.d.ts +1 -1
  108. package/dist/components/FieldControlGroup/field-control-group.js.map +1 -1
  109. package/dist/components/FileItem/file-item.d.ts.map +1 -1
  110. package/dist/components/FileItem/file-item.js +1 -1
  111. package/dist/components/FileItem/file-item.js.map +1 -1
  112. package/dist/components/FileUpload/file-upload.d.ts +1 -1
  113. package/dist/components/FileUpload/file-upload.js.map +1 -1
  114. package/dist/components/FileViewer/file-viewer.d.ts.map +1 -1
  115. package/dist/components/FileViewer/file-viewer.js +7 -2
  116. package/dist/components/FileViewer/file-viewer.js.map +1 -1
  117. package/dist/components/FileViewer/image-renderer.d.ts.map +1 -1
  118. package/dist/components/FileViewer/image-renderer.js +22 -1
  119. package/dist/components/FileViewer/image-renderer.js.map +1 -1
  120. package/dist/components/HoverCard/hover-card.d.ts.map +1 -1
  121. package/dist/components/HoverCard/hover-card.js +5 -3
  122. package/dist/components/HoverCard/hover-card.js.map +1 -1
  123. package/dist/components/InlineEdit/index.d.ts +2 -0
  124. package/dist/components/InlineEdit/index.d.ts.map +1 -0
  125. package/dist/components/InlineEdit/index.js +5 -0
  126. package/dist/components/InlineEdit/index.js.map +1 -0
  127. package/dist/components/InlineEdit/inline-edit.d.ts +59 -0
  128. package/dist/components/InlineEdit/inline-edit.d.ts.map +1 -0
  129. package/dist/components/InlineEdit/inline-edit.js +164 -0
  130. package/dist/components/InlineEdit/inline-edit.js.map +1 -0
  131. package/dist/components/Input/input.d.ts +6 -11
  132. package/dist/components/Input/input.d.ts.map +1 -1
  133. package/dist/components/Input/input.js +43 -13
  134. package/dist/components/Input/input.js.map +1 -1
  135. package/dist/components/LinkInput/link-input.d.ts +2 -2
  136. package/dist/components/LinkInput/link-input.d.ts.map +1 -1
  137. package/dist/components/LinkInput/link-input.js +6 -5
  138. package/dist/components/LinkInput/link-input.js.map +1 -1
  139. package/dist/components/Menu/menu-item.d.ts +14 -2
  140. package/dist/components/Menu/menu-item.d.ts.map +1 -1
  141. package/dist/components/Menu/menu-item.js +25 -3
  142. package/dist/components/Menu/menu-item.js.map +1 -1
  143. package/dist/components/NumberInput/number-input.d.ts +3 -3
  144. package/dist/components/NumberInput/number-input.d.ts.map +1 -1
  145. package/dist/components/NumberInput/number-input.js +6 -5
  146. package/dist/components/NumberInput/number-input.js.map +1 -1
  147. package/dist/components/OverflowIndicator/overflow-indicator.d.ts.map +1 -1
  148. package/dist/components/OverflowIndicator/overflow-indicator.js +2 -6
  149. package/dist/components/OverflowIndicator/overflow-indicator.js.map +1 -1
  150. package/dist/components/Pagination/pagination.js +1 -1
  151. package/dist/components/Pagination/pagination.js.map +1 -1
  152. package/dist/components/PeoplePicker/index.js +7 -1
  153. package/dist/components/PeoplePicker/index.js.map +1 -1
  154. package/dist/components/PeoplePicker/people-picker.d.ts +9 -2
  155. package/dist/components/PeoplePicker/people-picker.d.ts.map +1 -1
  156. package/dist/components/PeoplePicker/people-picker.js +23 -10
  157. package/dist/components/PeoplePicker/people-picker.js.map +1 -1
  158. package/dist/components/PeoplePicker/person-display.d.ts +6 -3
  159. package/dist/components/PeoplePicker/person-display.d.ts.map +1 -1
  160. package/dist/components/PeoplePicker/person-display.js +19 -14
  161. package/dist/components/PeoplePicker/person-display.js.map +1 -1
  162. package/dist/components/Popover/popover.d.ts.map +1 -1
  163. package/dist/components/Popover/popover.js +3 -1
  164. package/dist/components/Popover/popover.js.map +1 -1
  165. package/dist/components/ProfileCard/profile-card.d.ts +2 -2
  166. package/dist/components/ProfileCard/profile-card.js +3 -3
  167. package/dist/components/ProfileCard/profile-card.js.map +1 -1
  168. package/dist/components/RadioGroup/radio-group.d.ts.map +1 -1
  169. package/dist/components/RadioGroup/radio-group.js +15 -9
  170. package/dist/components/RadioGroup/radio-group.js.map +1 -1
  171. package/dist/components/ScrollArea/scroll-area.d.ts +11 -1
  172. package/dist/components/ScrollArea/scroll-area.d.ts.map +1 -1
  173. package/dist/components/ScrollArea/scroll-area.js +6 -3
  174. package/dist/components/ScrollArea/scroll-area.js.map +1 -1
  175. package/dist/components/Select/select.d.ts +46 -5
  176. package/dist/components/Select/select.d.ts.map +1 -1
  177. package/dist/components/Select/select.js +109 -28
  178. package/dist/components/Select/select.js.map +1 -1
  179. package/dist/components/SelectMenu/select-menu.d.ts +3 -1
  180. package/dist/components/SelectMenu/select-menu.d.ts.map +1 -1
  181. package/dist/components/SelectMenu/select-menu.js +8 -1
  182. package/dist/components/SelectMenu/select-menu.js.map +1 -1
  183. package/dist/components/SelectionControl/boolean-value.d.ts +11 -0
  184. package/dist/components/SelectionControl/boolean-value.d.ts.map +1 -0
  185. package/dist/components/SelectionControl/boolean-value.js +23 -0
  186. package/dist/components/SelectionControl/boolean-value.js.map +1 -0
  187. package/dist/components/SelectionControl/index.d.ts +1 -0
  188. package/dist/components/SelectionControl/index.d.ts.map +1 -1
  189. package/dist/components/SelectionControl/index.js +2 -0
  190. package/dist/components/SelectionControl/index.js.map +1 -1
  191. package/dist/components/Sheet/index.js +2 -1
  192. package/dist/components/Sheet/sheet.d.ts +7 -1
  193. package/dist/components/Sheet/sheet.d.ts.map +1 -1
  194. package/dist/components/Sheet/sheet.js +5 -2
  195. package/dist/components/Sheet/sheet.js.map +1 -1
  196. package/dist/components/Sidebar/sidebar.d.ts +9 -4
  197. package/dist/components/Sidebar/sidebar.d.ts.map +1 -1
  198. package/dist/components/Sidebar/sidebar.js +8 -10
  199. package/dist/components/Sidebar/sidebar.js.map +1 -1
  200. package/dist/components/Slider/slider.d.ts.map +1 -1
  201. package/dist/components/Slider/slider.js.map +1 -1
  202. package/dist/components/Switch/switch.d.ts +6 -6
  203. package/dist/components/Switch/switch.d.ts.map +1 -1
  204. package/dist/components/Switch/switch.js +3 -2
  205. package/dist/components/Switch/switch.js.map +1 -1
  206. package/dist/components/Tabs/tabs.d.ts.map +1 -1
  207. package/dist/components/Tabs/tabs.js +15 -1
  208. package/dist/components/Tabs/tabs.js.map +1 -1
  209. package/dist/components/Textarea/textarea.d.ts +2 -2
  210. package/dist/components/Textarea/textarea.d.ts.map +1 -1
  211. package/dist/components/Textarea/textarea.js +50 -42
  212. package/dist/components/Textarea/textarea.js.map +1 -1
  213. package/dist/components/TimePicker/time-columns.d.ts.map +1 -1
  214. package/dist/components/TimePicker/time-columns.js +42 -38
  215. package/dist/components/TimePicker/time-columns.js.map +1 -1
  216. package/dist/components/TimePicker/time-picker.d.ts.map +1 -1
  217. package/dist/components/TimePicker/time-picker.js +8 -6
  218. package/dist/components/TimePicker/time-picker.js.map +1 -1
  219. package/dist/components/Tooltip/tooltip.d.ts.map +1 -1
  220. package/dist/components/Tooltip/tooltip.js +7 -5
  221. package/dist/components/Tooltip/tooltip.js.map +1 -1
  222. package/dist/components/TreeView/tree-view.d.ts +56 -1
  223. package/dist/components/TreeView/tree-view.d.ts.map +1 -1
  224. package/dist/components/TreeView/tree-view.js +211 -12
  225. package/dist/components/TreeView/tree-view.js.map +1 -1
  226. package/dist/index.d.ts +115 -58
  227. package/dist/index.d.ts.map +1 -1
  228. package/dist/index.js +93 -108
  229. package/dist/index.js.map +1 -1
  230. package/dist/patterns/element-anatomy/item-anatomy.d.ts +7 -6
  231. package/dist/patterns/element-anatomy/item-anatomy.d.ts.map +1 -1
  232. package/dist/patterns/element-anatomy/item-anatomy.js.map +1 -1
  233. package/dist/tokens/categorical-color.js +15 -0
  234. package/dist/tokens/categorical-color.js.map +1 -1
  235. package/dist/tokens/motion/motion.d.ts +7 -6
  236. package/dist/tokens/motion/motion.d.ts.map +1 -1
  237. package/dist/tokens/motion/motion.js +6 -6
  238. package/dist/tokens/motion/motion.js.map +1 -1
  239. package/dist/tokens/motion/overlay-motion.d.ts +19 -0
  240. package/dist/tokens/motion/overlay-motion.d.ts.map +1 -0
  241. package/dist/tokens/motion/overlay-motion.js +9 -0
  242. package/dist/tokens/motion/overlay-motion.js.map +1 -0
  243. package/dist/tokens/uiSize/icon-size.js +5 -0
  244. package/dist/tokens/uiSize/icon-size.js.map +1 -0
  245. package/ds-canonical/fork/governance.lock +31 -19
  246. package/ds-canonical/fork/hooks/_log-fire.sh +46 -0
  247. package/ds-canonical/fork/hooks/block_prototype_imports.py +15 -4
  248. package/ds-canonical/fork/hooks/check_consumer_app_invariants.sh +145 -13
  249. package/ds-canonical/fork/hooks/check_ds_anchor_preflight.sh +2 -1
  250. package/ds-canonical/fork/hooks/check_dynamic_tailwind_class.sh +47 -0
  251. package/ds-canonical/fork/hooks/check_escape_marker_abuse.sh +27 -0
  252. package/ds-canonical/fork/hooks/check_field_family_invariants.sh +61 -1
  253. package/ds-canonical/fork/hooks/check_layout_space_magic_numbers.sh +28 -4
  254. package/ds-canonical/fork/hooks/check_opacity_token_usage.sh +28 -0
  255. package/ds-canonical/fork/hooks/check_story_determinism.sh +2 -0
  256. package/ds-canonical/fork/hooks/check_story_invariants.sh +119 -0
  257. package/ds-canonical/fork/hooks/check_tabs_content_chrome_body_double_gap.sh +29 -0
  258. package/ds-canonical/fork/manifest.json +15 -0
  259. package/ds-canonical/fork/preamble.md +20 -18
  260. package/ds-canonical/fork/skills/bug-fix-rhythm/SKILL.md +3 -3
  261. package/ds-canonical/fork/skills/code-quality-audit/SKILL.md +3 -3
  262. package/ds-canonical/fork/skills/delivery-handoff/SKILL.md +1 -1
  263. package/ds-canonical/fork/skills/product-ui-audit/SKILL.md +3 -3
  264. package/ds-canonical/fork/skills/propose-options/SKILL.md +3 -3
  265. package/ds-canonical/fork/skills/prototype/SKILL.md +1 -1
  266. package/ds-canonical/fork/skills/scan-similar-bugs/SKILL.md +2 -2
  267. package/ds-canonical/fork/skills/visual-audit/SKILL.md +2 -2
  268. package/ds-canonical/hooks/README.md +1 -1
  269. package/ds-canonical/hooks/block_prototype_imports.py +15 -4
  270. package/ds-canonical/hooks/check_audit_post_report_validator.sh +65 -7
  271. package/ds-canonical/hooks/check_codex_brief_invariants.sh +28 -1
  272. package/ds-canonical/hooks/check_consumer_app_invariants.sh +145 -13
  273. package/ds-canonical/hooks/check_ds_anchor_preflight.sh +2 -1
  274. package/ds-canonical/hooks/check_dynamic_tailwind_class.sh +47 -0
  275. package/ds-canonical/hooks/check_escape_marker_abuse.sh +27 -0
  276. package/ds-canonical/hooks/check_field_family_invariants.sh +61 -1
  277. package/ds-canonical/hooks/check_layout_space_magic_numbers.sh +28 -4
  278. package/ds-canonical/hooks/check_naming_and_abstraction.sh +1 -1
  279. package/ds-canonical/hooks/check_opacity_token_usage.sh +28 -0
  280. package/ds-canonical/hooks/check_pixel_quantified_audit.sh +3 -2
  281. package/ds-canonical/hooks/check_post_main_ssot_propagate.sh +6 -1
  282. package/ds-canonical/hooks/check_ssot_header_declaration.sh +3 -1
  283. package/ds-canonical/hooks/check_story_determinism.sh +2 -0
  284. package/ds-canonical/hooks/check_substantive_edit_approval_preflight.sh +8 -7
  285. package/ds-canonical/hooks/check_tabs_content_chrome_body_double_gap.sh +29 -0
  286. package/ds-canonical/hooks/lib/_story_compile_drift.sh +1 -1
  287. package/ds-canonical/hooks/lib/_token_hygiene.sh +10 -1
  288. package/ds-canonical/hooks/stop_self_audit.sh +31 -0
  289. package/ds-canonical/hooks/tests/test_block_prototype_imports.sh +24 -0
  290. package/ds-canonical/hooks/tests/test_check_audit_post_report_validator.sh +44 -0
  291. package/ds-canonical/hooks/tests/test_check_codex_brief_invariants.sh +43 -2
  292. package/ds-canonical/hooks/tests/test_check_consumer_ds_primitive_misuse.sh +112 -0
  293. package/ds-canonical/hooks/tests/test_check_consumer_story_baseline.sh +9 -2
  294. package/ds-canonical/hooks/tests/test_check_dynamic_tailwind_class.sh +76 -0
  295. package/ds-canonical/hooks/tests/test_check_escape_marker_abuse.sh +24 -0
  296. package/ds-canonical/hooks/tests/test_check_field_family_invariants.sh +27 -2
  297. package/ds-canonical/hooks/tests/test_check_opacity_token_usage.sh +39 -0
  298. package/ds-canonical/hooks/tests/test_check_tabs_content_chrome_body_double_gap.sh +76 -0
  299. package/ds-canonical/references/audit-coverage-vs-24-checklist.md +1 -1
  300. package/ds-canonical/references/build-ui-canonicals.md +2 -1
  301. package/ds-canonical/references/failure-class-registry.json +145 -0
  302. package/ds-canonical/references/governance-audit-coverage.md +33 -0
  303. package/ds-canonical/references/item-anatomy-recipe.md +2 -2
  304. package/ds-canonical/references/scenario-definition.md +6 -9
  305. package/ds-canonical/references/ssot-consultation.md +2 -2
  306. package/ds-canonical/references/ssot-index.md +5 -4
  307. package/ds-canonical/references/story-baseline-registry.json +8 -2
  308. package/ds-canonical/references/structural-token-retention.md +6 -9
  309. package/ds-canonical/rules/meta-patterns.md +8 -8
  310. package/ds-canonical/rules/self-verify.md +4 -3
  311. package/ds-canonical/rules/story-rules.md +2 -2
  312. package/ds-canonical/rules/ui-development.md +2 -2
  313. package/ds-canonical/skills/bug-fix-rhythm/SKILL.md +3 -3
  314. package/ds-canonical/skills/code-quality-audit/SKILL.md +3 -3
  315. package/ds-canonical/skills/codex-collab/SKILL.md +9 -7
  316. package/ds-canonical/skills/codex-collab/references/brief-template.md +1 -1
  317. package/ds-canonical/skills/codify-principle/SKILL.md +2 -2
  318. package/ds-canonical/skills/component-quality-gate/SKILL.md +1 -1
  319. package/ds-canonical/skills/component-quality-gate/references/checklist.md +2 -2
  320. package/ds-canonical/skills/deep-audit-cross-codex/SKILL.md +51 -58
  321. package/ds-canonical/skills/deep-audit-cross-codex/references/phase-a-workflow.md +29 -0
  322. package/ds-canonical/skills/deep-audit-cross-codex/references/phase-b-codex-brief.md +29 -10
  323. package/ds-canonical/skills/deep-audit-cross-codex/references/triage-rubric.md +21 -0
  324. package/ds-canonical/skills/delivery-handoff/SKILL.md +1 -1
  325. package/ds-canonical/skills/design-system-audit/SKILL.md +26 -25
  326. package/ds-canonical/skills/design-system-audit/references/audit-prompts.md +13 -1
  327. package/ds-canonical/skills/design-system-audit/references/rule-placement.md +1 -1
  328. package/ds-canonical/skills/governance-health/SKILL.md +1 -1
  329. package/ds-canonical/skills/knowledge-prune/SKILL.md +3 -0
  330. package/ds-canonical/skills/knowledge-prune/references/prune-dimensions-d5-d10.md +1 -0
  331. package/ds-canonical/skills/new-component/SKILL.md +5 -5
  332. package/ds-canonical/skills/new-component/references/new-component-checklist.md +1 -1
  333. package/ds-canonical/skills/product-ui-audit/SKILL.md +3 -3
  334. package/ds-canonical/skills/propose-options/SKILL.md +3 -3
  335. package/ds-canonical/skills/prototype/SKILL.md +1 -1
  336. package/ds-canonical/skills/scan-similar-bugs/SKILL.md +2 -2
  337. package/ds-canonical/skills/story-auto-compile-migrate/SKILL.md +3 -3
  338. package/ds-canonical/skills/story-writing/SKILL.md +3 -3
  339. package/ds-canonical/skills/visual-audit/SKILL.md +2 -2
  340. package/ds-story-manifest.json +29 -20
  341. package/llms-full.txt +22 -1
  342. package/llms.txt +5 -4
  343. package/package.json +7 -3
  344. package/src/components/Accordion/accordion.principles.stories.tsx +1 -1
  345. package/src/components/Accordion/accordion.stories.tsx +16 -1
  346. package/src/components/Alert/alert.principles.stories.tsx +1 -1
  347. package/src/components/Alert/alert.spec.md +8 -10
  348. package/src/components/Alert/alert.stories.tsx +28 -28
  349. package/src/components/Alert/alert.tsx +1 -1
  350. package/src/components/AppShell/_demo-helpers.tsx +6 -3
  351. package/src/components/AppShell/app-shell.spec.md +4 -4
  352. package/src/components/AppShell/app-shell.tsx +28 -2
  353. package/src/components/AspectRatio/aspect-ratio.spec.md +1 -1
  354. package/src/components/AspectRatio/aspect-ratio.stories.tsx +7 -89
  355. package/src/components/Avatar/avatar.anatomy.stories.tsx +7 -3
  356. package/src/components/Avatar/avatar.principles.stories.tsx +19 -15
  357. package/src/components/Avatar/avatar.spec.md +2 -2
  358. package/src/components/Avatar/avatar.stories.tsx +8 -6
  359. package/src/components/Avatar/avatar.tsx +13 -5
  360. package/src/components/Badge/badge.principles.stories.tsx +1 -1
  361. package/src/components/Badge/badge.spec.md +2 -0
  362. package/src/components/Badge/badge.stories.tsx +4 -2
  363. package/src/components/Breadcrumb/breadcrumb.principles.stories.tsx +6 -4
  364. package/src/components/Breadcrumb/breadcrumb.stories.tsx +6 -5
  365. package/src/components/Breadcrumb/breadcrumb.tsx +3 -2
  366. package/src/components/BulkActionBar/bulk-action-bar.spec.md +4 -2
  367. package/src/components/Button/button.principles.stories.tsx +1 -1
  368. package/src/components/Button/button.spec.md +2 -2
  369. package/src/components/Button/button.tsx +18 -3
  370. package/src/components/Calendar/calendar.anatomy.stories.tsx +12 -10
  371. package/src/components/Calendar/calendar.principles.stories.tsx +14 -6
  372. package/src/components/Calendar/calendar.spec.md +5 -4
  373. package/src/components/Calendar/calendar.stories.tsx +7 -4
  374. package/src/components/Calendar/calendar.tsx +26 -7
  375. package/src/components/Carousel/carousel.anatomy.stories.tsx +5 -4
  376. package/src/components/Carousel/carousel.spec.md +2 -2
  377. package/src/components/Carousel/carousel.tsx +11 -3
  378. package/src/components/Chart/chart.anatomy.stories.tsx +7 -4
  379. package/src/components/Chart/chart.principles.stories.tsx +1 -1
  380. package/src/components/Chart/chart.stories.tsx +2 -8
  381. package/src/components/Chart/chart.tsx +3 -0
  382. package/src/components/Checkbox/checkbox.anatomy.stories.tsx +28 -49
  383. package/src/components/Checkbox/checkbox.principles.stories.tsx +1 -1
  384. package/src/components/Checkbox/checkbox.spec.md +11 -26
  385. package/src/components/Checkbox/checkbox.stories.tsx +11 -8
  386. package/src/components/Checkbox/checkbox.tsx +18 -13
  387. package/src/components/Chip/chip.anatomy.stories.tsx +44 -24
  388. package/src/components/Chip/chip.principles.stories.tsx +1 -1
  389. package/src/components/Chip/chip.spec.md +5 -4
  390. package/src/components/Chip/chip.tsx +5 -1
  391. package/src/components/CircularProgress/circular-progress.principles.stories.tsx +7 -4
  392. package/src/components/CircularProgress/circular-progress.spec.md +3 -3
  393. package/src/components/CircularProgress/circular-progress.stories.tsx +2 -2
  394. package/src/components/Coachmark/coachmark.anatomy.stories.tsx +2 -2
  395. package/src/components/Coachmark/coachmark.principles.stories.tsx +2 -1
  396. package/src/components/Coachmark/coachmark.spec.md +5 -5
  397. package/src/components/Coachmark/coachmark.stories.tsx +3 -1
  398. package/src/components/Coachmark/coachmark.tsx +10 -3
  399. package/src/components/Combobox/combobox.anatomy.stories.tsx +2 -2
  400. package/src/components/Combobox/combobox.tsx +53 -19
  401. package/src/components/Command/command.anatomy.stories.tsx +2 -2
  402. package/src/components/Command/command.principles.stories.tsx +1 -1
  403. package/src/components/Command/command.stories.tsx +42 -10
  404. package/src/components/DataTable/cell-registry.tsx +86 -63
  405. package/src/components/DataTable/column-types.ts +10 -1
  406. package/src/components/DataTable/data-table-column-visibility-panel.tsx +1 -1
  407. package/src/components/DataTable/data-table-filter-panel.tsx +4 -1
  408. package/src/components/DataTable/data-table-interaction-layer.tsx +15 -19
  409. package/src/components/DataTable/data-table.anatomy.stories.tsx +15 -13
  410. package/src/components/DataTable/data-table.principles.stories.tsx +9 -9
  411. package/src/components/DataTable/data-table.spec.md +32 -12
  412. package/src/components/DataTable/data-table.stories.tsx +16 -17
  413. package/src/components/DataTable/data-table.tsx +103 -60
  414. package/src/components/DataTable/index.ts +3 -0
  415. package/src/components/DateGrid/date-grid.anatomy.stories.tsx +4 -4
  416. package/src/components/DateGrid/date-grid.principles.stories.tsx +1 -1
  417. package/src/components/DateGrid/date-grid.spec.md +1 -1
  418. package/src/components/DateGrid/date-grid.tsx +3 -1
  419. package/src/components/DatePicker/date-picker.anatomy.stories.tsx +8 -8
  420. package/src/components/DatePicker/date-picker.principles.stories.tsx +3 -3
  421. package/src/components/DatePicker/date-picker.spec.md +3 -3
  422. package/src/components/DatePicker/date-picker.stories.tsx +4 -5
  423. package/src/components/DatePicker/date-picker.tsx +99 -45
  424. package/src/components/DescriptionList/description-list.anatomy.stories.tsx +12 -10
  425. package/src/components/DescriptionList/description-list.principles.stories.tsx +2 -2
  426. package/src/components/DescriptionList/description-list.spec.md +3 -3
  427. package/src/components/DescriptionList/description-list.stories.tsx +7 -6
  428. package/src/components/Dialog/dialog.anatomy.stories.tsx +1 -0
  429. package/src/components/Dialog/dialog.spec.md +9 -0
  430. package/src/components/Dialog/dialog.stories.tsx +66 -5
  431. package/src/components/Dialog/dialog.tsx +60 -25
  432. package/src/components/DropdownMenu/dropdown-menu.anatomy.stories.tsx +1 -1
  433. package/src/components/DropdownMenu/dropdown-menu.principles.stories.tsx +8 -6
  434. package/src/components/DropdownMenu/dropdown-menu.spec.md +5 -5
  435. package/src/components/DropdownMenu/dropdown-menu.tsx +18 -9
  436. package/src/components/Empty/empty.anatomy.stories.tsx +1 -1
  437. package/src/components/Empty/empty.spec.md +2 -2
  438. package/src/components/Field/field-context.ts +69 -5
  439. package/src/components/Field/field-controls.spec.md +62 -8
  440. package/src/components/Field/field-edit-keys.ts +66 -0
  441. package/src/components/Field/field-types.ts +58 -9
  442. package/src/components/Field/field-wrapper.tsx +50 -42
  443. package/src/components/Field/field.anatomy.stories.tsx +9 -6
  444. package/src/components/Field/field.spec.md +1 -1
  445. package/src/components/Field/field.stories.tsx +1 -1
  446. package/src/components/Field/field.tsx +2 -1
  447. package/src/components/Field/form-validation.spec.md +3 -3
  448. package/src/components/FieldControlGroup/field-control-group.principles.stories.tsx +6 -6
  449. package/src/components/FieldControlGroup/field-control-group.spec.md +9 -4
  450. package/src/components/FieldControlGroup/field-control-group.tsx +1 -1
  451. package/src/components/FileItem/file-item.anatomy.stories.tsx +1 -1
  452. package/src/components/FileItem/file-item.spec.md +5 -8
  453. package/src/components/FileItem/file-item.stories.tsx +36 -25
  454. package/src/components/FileItem/file-item.tsx +8 -6
  455. package/src/components/FileUpload/file-upload.anatomy.stories.tsx +6 -6
  456. package/src/components/FileUpload/file-upload.principles.stories.tsx +5 -5
  457. package/src/components/FileUpload/file-upload.spec.md +1 -1
  458. package/src/components/FileUpload/file-upload.tsx +1 -1
  459. package/src/components/FileViewer/file-viewer.anatomy.stories.tsx +4 -3
  460. package/src/components/FileViewer/file-viewer.principles.stories.tsx +3 -3
  461. package/src/components/FileViewer/file-viewer.spec.md +30 -12
  462. package/src/components/FileViewer/file-viewer.stories.tsx +1 -2
  463. package/src/components/FileViewer/file-viewer.tsx +12 -4
  464. package/src/components/FileViewer/image-renderer.tsx +35 -7
  465. package/src/components/HoverCard/hover-card.anatomy.stories.tsx +6 -2
  466. package/src/components/HoverCard/hover-card.principles.stories.tsx +6 -3
  467. package/src/components/HoverCard/hover-card.spec.md +5 -5
  468. package/src/components/HoverCard/hover-card.stories.tsx +16 -16
  469. package/src/components/HoverCard/hover-card.tsx +5 -3
  470. package/src/components/InlineEdit/index.ts +5 -0
  471. package/src/components/InlineEdit/inline-edit.spec.md +149 -0
  472. package/src/components/InlineEdit/inline-edit.stories.tsx +246 -0
  473. package/src/components/InlineEdit/inline-edit.tsx +287 -0
  474. package/src/components/Input/input.anatomy.stories.tsx +8 -7
  475. package/src/components/Input/input.principles.stories.tsx +2 -12
  476. package/src/components/Input/input.spec.md +13 -18
  477. package/src/components/Input/input.tsx +69 -22
  478. package/src/components/LinkInput/link-input.anatomy.stories.tsx +1 -1
  479. package/src/components/LinkInput/link-input.principles.stories.tsx +2 -2
  480. package/src/components/LinkInput/link-input.tsx +11 -10
  481. package/src/components/Menu/menu-item.anatomy.stories.tsx +3 -3
  482. package/src/components/Menu/menu-item.principles.stories.tsx +1 -1
  483. package/src/components/Menu/menu-item.spec.md +22 -15
  484. package/src/components/Menu/menu-item.stories.tsx +39 -11
  485. package/src/components/Menu/menu-item.tsx +38 -4
  486. package/src/components/Notice/notice.principles.stories.tsx +1 -1
  487. package/src/components/Notice/notice.spec.md +16 -3
  488. package/src/components/NumberInput/number-input.anatomy.stories.tsx +3 -3
  489. package/src/components/NumberInput/number-input.principles.stories.tsx +1 -1
  490. package/src/components/NumberInput/number-input.spec.md +4 -4
  491. package/src/components/NumberInput/number-input.tsx +19 -12
  492. package/src/components/OverflowIndicator/overflow-indicator.anatomy.stories.tsx +10 -8
  493. package/src/components/OverflowIndicator/overflow-indicator.principles.stories.tsx +3 -3
  494. package/src/components/OverflowIndicator/overflow-indicator.spec.md +4 -2
  495. package/src/components/OverflowIndicator/overflow-indicator.stories.tsx +71 -63
  496. package/src/components/OverflowIndicator/overflow-indicator.tsx +9 -8
  497. package/src/components/Pagination/pagination.spec.md +1 -1
  498. package/src/components/Pagination/pagination.stories.tsx +2 -6
  499. package/src/components/Pagination/pagination.tsx +1 -1
  500. package/src/components/PeoplePicker/people-picker.anatomy.stories.tsx +4 -4
  501. package/src/components/PeoplePicker/people-picker.principles.stories.tsx +2 -2
  502. package/src/components/PeoplePicker/people-picker.spec.md +6 -6
  503. package/src/components/PeoplePicker/people-picker.tsx +56 -16
  504. package/src/components/PeoplePicker/person-display.tsx +32 -16
  505. package/src/components/Popover/popover.anatomy.stories.tsx +2 -2
  506. package/src/components/Popover/popover.tsx +3 -1
  507. package/src/components/ProfileCard/profile-card.anatomy.stories.tsx +12 -23
  508. package/src/components/ProfileCard/profile-card.spec.md +3 -3
  509. package/src/components/ProfileCard/profile-card.tsx +6 -6
  510. package/src/components/ProgressBar/progress-bar.anatomy.stories.tsx +3 -1
  511. package/src/components/ProgressBar/progress-bar.principles.stories.tsx +1 -1
  512. package/src/components/ProgressBar/progress-bar.stories.tsx +50 -42
  513. package/src/components/RadioGroup/radio-group.anatomy.stories.tsx +10 -28
  514. package/src/components/RadioGroup/radio-group.stories.tsx +29 -32
  515. package/src/components/RadioGroup/radio-group.tsx +41 -15
  516. package/src/components/Rating/rating.spec.md +11 -3
  517. package/src/components/ScrollArea/scroll-area.anatomy.stories.tsx +1 -1
  518. package/src/components/ScrollArea/scroll-area.principles.stories.tsx +1 -1
  519. package/src/components/ScrollArea/scroll-area.spec.md +7 -3
  520. package/src/components/ScrollArea/scroll-area.stories.tsx +1 -1
  521. package/src/components/ScrollArea/scroll-area.tsx +17 -4
  522. package/src/components/Select/select.anatomy.stories.tsx +3 -3
  523. package/src/components/Select/select.spec.md +27 -17
  524. package/src/components/Select/select.stories.tsx +33 -0
  525. package/src/components/Select/select.tsx +190 -36
  526. package/src/components/SelectMenu/select-menu.anatomy.stories.tsx +4 -4
  527. package/src/components/SelectMenu/select-menu.spec.md +15 -7
  528. package/src/components/SelectMenu/select-menu.tsx +16 -3
  529. package/src/components/SelectionControl/boolean-value.tsx +39 -0
  530. package/src/components/SelectionControl/index.ts +1 -0
  531. package/src/components/SelectionControl/selection-item.anatomy.stories.tsx +2 -2
  532. package/src/components/SelectionControl/selection-item.principles.stories.tsx +2 -2
  533. package/src/components/SelectionControl/selection-item.spec.md +3 -3
  534. package/src/components/SelectionControl/selection-item.stories.tsx +3 -3
  535. package/src/components/Separator/separator.spec.md +2 -2
  536. package/src/components/Separator/separator.stories.tsx +6 -27
  537. package/src/components/Sheet/sheet.anatomy.stories.tsx +1 -1
  538. package/src/components/Sheet/sheet.principles.stories.tsx +1 -1
  539. package/src/components/Sheet/sheet.spec.md +2 -2
  540. package/src/components/Sheet/sheet.tsx +9 -5
  541. package/src/components/Sidebar/sidebar.anatomy.stories.tsx +16 -12
  542. package/src/components/Sidebar/sidebar.principles.stories.tsx +10 -8
  543. package/src/components/Sidebar/sidebar.spec.md +13 -15
  544. package/src/components/Sidebar/sidebar.stories.tsx +8 -7
  545. package/src/components/Sidebar/sidebar.tsx +37 -25
  546. package/src/components/Skeleton/skeleton.stories.tsx +4 -11
  547. package/src/components/Slider/slider.anatomy.stories.tsx +3 -3
  548. package/src/components/Slider/slider.principles.stories.tsx +2 -2
  549. package/src/components/Slider/slider.spec.md +5 -5
  550. package/src/components/Slider/slider.tsx +3 -1
  551. package/src/components/Steps/steps.anatomy.stories.tsx +4 -4
  552. package/src/components/Steps/steps.principles.stories.tsx +1 -1
  553. package/src/components/Steps/steps.spec.md +1 -1
  554. package/src/components/Switch/switch.anatomy.stories.tsx +7 -7
  555. package/src/components/Switch/switch.principles.stories.tsx +4 -4
  556. package/src/components/Switch/switch.spec.md +8 -8
  557. package/src/components/Switch/switch.stories.tsx +9 -24
  558. package/src/components/Switch/switch.tsx +17 -13
  559. package/src/components/Tabs/tabs.anatomy.stories.tsx +10 -7
  560. package/src/components/Tabs/tabs.spec.md +1 -1
  561. package/src/components/Tabs/tabs.tsx +21 -1
  562. package/src/components/Textarea/textarea.anatomy.stories.tsx +1 -1
  563. package/src/components/Textarea/textarea.principles.stories.tsx +1 -1
  564. package/src/components/Textarea/textarea.spec.md +4 -4
  565. package/src/components/Textarea/textarea.tsx +72 -46
  566. package/src/components/TimePicker/time-columns.tsx +6 -2
  567. package/src/components/TimePicker/time-picker.principles.stories.tsx +1 -1
  568. package/src/components/TimePicker/time-picker.spec.md +3 -3
  569. package/src/components/TimePicker/time-picker.tsx +16 -10
  570. package/src/components/Toast/toast.stories.tsx +7 -4
  571. package/src/components/Tooltip/tooltip.anatomy.stories.tsx +4 -4
  572. package/src/components/Tooltip/tooltip.principles.stories.tsx +3 -3
  573. package/src/components/Tooltip/tooltip.spec.md +1 -1
  574. package/src/components/Tooltip/tooltip.stories.tsx +4 -39
  575. package/src/components/Tooltip/tooltip.tsx +8 -6
  576. package/src/components/TreeView/tree-view.anatomy.stories.tsx +6 -3
  577. package/src/components/TreeView/tree-view.spec.md +42 -11
  578. package/src/components/TreeView/tree-view.stories.tsx +1 -0
  579. package/src/components/TreeView/tree-view.tsx +322 -17
  580. package/src/index.ts +584 -60
  581. package/src/patterns/action-bar/action-bar.spec.md +9 -0
  582. package/src/patterns/action-bar/action-bar.stories.tsx +6 -3
  583. package/src/patterns/element-anatomy/inline-action.spec.md +2 -0
  584. package/src/patterns/element-anatomy/item-anatomy.spec.md +14 -5
  585. package/src/patterns/element-anatomy/item-anatomy.stories.tsx +6 -4
  586. package/src/patterns/element-anatomy/item-anatomy.tsx +7 -6
  587. package/src/patterns/header-canonical/header-canonical.spec.md +5 -4
  588. package/src/patterns/overlay-surface/overlay-surface.spec.md +22 -1
  589. package/src/styles/tokens.css +3 -0
  590. package/src/tokens/README.md +1 -1
  591. package/src/tokens/color/color.spec.md +3 -3
  592. package/src/tokens/color/color.stories.tsx +3 -3
  593. package/src/tokens/density/density.stories.tsx +16 -3
  594. package/src/tokens/layoutSpace/layoutSpace.spec.md +3 -1
  595. package/src/tokens/motion/motion.css +33 -21
  596. package/src/tokens/motion/motion.spec.md +32 -15
  597. package/src/tokens/motion/motion.stories.tsx +58 -5
  598. package/src/tokens/motion/motion.ts +7 -6
  599. package/src/tokens/motion/overlay-motion.ts +26 -0
  600. package/src/tokens/orphan-tokens.spec.md +4 -4
  601. package/src/tokens/token-system.spec.md +1 -0
  602. package/src/tokens/uiSize/uiSize.spec.md +1 -1
  603. package/src/tokens/uiSize/uiSize.stories.tsx +4 -2
  604. package/src/tokens/utility-registry.json +160 -23
@@ -7,7 +7,7 @@
7
7
  "scripts/composition-fidelity-visual-diff.mjs",
8
8
  "product-workspace apps/template/src/AllDsComponents.stories.tsx (ImportSmoke portal → DS Storybook link)"
9
9
  ],
10
- "generatedAt": "2026-07-06T11:37:10.794Z"
10
+ "generatedAt": "2026-07-14T14:23:30.051Z"
11
11
  },
12
12
  "components": {
13
13
  "accordion": {
@@ -40,10 +40,8 @@
40
40
  "alert": {
41
41
  "tiers": {
42
42
  "展示": [
43
- "design-system-components-alert-展示--subtle-single-line",
44
- "design-system-components-alert-展示--solid-single-line",
45
- "design-system-components-alert-展示--subtle-with-description",
46
- "design-system-components-alert-展示--solid-with-description",
43
+ "design-system-components-alert-展示--single-line",
44
+ "design-system-components-alert-展示--with-description",
47
45
  "design-system-components-alert-展示--corner-action-group",
48
46
  "design-system-components-alert-展示--fixed"
49
47
  ],
@@ -90,11 +88,8 @@
90
88
  "aspectratio": {
91
89
  "tiers": {
92
90
  "展示": [
93
- "design-system-components-aspectratio-展示--hero-banner-16-x-9",
94
91
  "design-system-components-aspectratio-展示--product-photo-4-x-3",
95
- "design-system-components-aspectratio-展示--square-avatar-1-x-1",
96
- "design-system-components-aspectratio-展示--ultrawide-21-x-9",
97
- "design-system-components-aspectratio-展示--common-ratios"
92
+ "design-system-components-aspectratio-展示--ultrawide-21-x-9"
98
93
  ],
99
94
  "設計規格": [
100
95
  "design-system-components-aspectratio-設計規格--overview",
@@ -265,7 +260,7 @@
265
260
  "設計原則": [
266
261
  "design-system-components-calendar-設計原則--usage-guidance",
267
262
  "design-system-components-calendar-設計原則--color-semantic",
268
- "design-system-components-calendar-設計原則--mvp-scope"
263
+ "design-system-components-calendar-設計原則--month-view-only-rule"
269
264
  ]
270
265
  },
271
266
  "openSnapshotIds": [],
@@ -388,7 +383,7 @@
388
383
  "設計原則": [
389
384
  "design-system-components-circularprogress-設計原則--usage-guidance",
390
385
  "design-system-components-circularprogress-設計原則--indeterminate-vs-determinate-rule",
391
- "design-system-components-circularprogress-設計原則--usage-scenario-rule",
386
+ "design-system-components-circularprogress-設計原則--consumption-scenario-rule",
392
387
  "design-system-components-circularprogress-設計原則--size-match-context-rule"
393
388
  ]
394
389
  },
@@ -451,7 +446,7 @@
451
446
  "展示": [
452
447
  "design-system-internal-command-展示--command-palette",
453
448
  "design-system-internal-command-展示--inline-command",
454
- "design-system-internal-command-展示--theme-switcher",
449
+ "design-system-internal-command-展示--action-command",
455
450
  "design-system-internal-command-展示--empty-state"
456
451
  ],
457
452
  "設計規格": [
@@ -469,7 +464,6 @@
469
464
  "datatable": {
470
465
  "tiers": {
471
466
  "展示": [
472
- "design-system-components-datatable-展示--number-alignment",
473
467
  "design-system-components-datatable-展示--column-resize",
474
468
  "design-system-components-datatable-展示--column-reorder",
475
469
  "design-system-components-datatable-展示--row-auto-height-inline-edit",
@@ -627,6 +621,7 @@
627
621
  "design-system-components-dialog-展示--long-content",
628
622
  "design-system-components-dialog-展示--destructive",
629
623
  "design-system-components-dialog-展示--list-body",
624
+ "design-system-components-dialog-展示--header-actions",
630
625
  "design-system-components-dialog-展示--with-tabs-in-header",
631
626
  "design-system-components-dialog-展示--open-snapshot"
632
627
  ],
@@ -880,6 +875,22 @@
880
875
  "openSnapshotIds": [],
881
876
  "exception": null
882
877
  },
878
+ "inlineedit": {
879
+ "tiers": {
880
+ "展示": [
881
+ "design-system-components-inlineedit-展示--task-title",
882
+ "design-system-components-inlineedit-展示--metadata-fields",
883
+ "design-system-components-inlineedit-展示--states",
884
+ "design-system-components-inlineedit-展示--select-tag-field",
885
+ "design-system-components-inlineedit-展示--multiline-description",
886
+ "design-system-components-inlineedit-展示--vertical-field-form"
887
+ ],
888
+ "設計規格": [],
889
+ "設計原則": []
890
+ },
891
+ "openSnapshotIds": [],
892
+ "exception": null
893
+ },
883
894
  "input": {
884
895
  "tiers": {
885
896
  "展示": [
@@ -941,6 +952,7 @@
941
952
  "design-system-internal-menu-展示--with-description",
942
953
  "design-system-internal-menu-展示--avatar-inline",
943
954
  "design-system-internal-menu-展示--avatar-block",
955
+ "design-system-internal-menu-展示--with-start-content",
944
956
  "design-system-internal-menu-展示--states",
945
957
  "design-system-internal-menu-展示--multi-select",
946
958
  "design-system-internal-menu-展示--groups",
@@ -1160,8 +1172,7 @@
1160
1172
  "展示": [
1161
1173
  "design-system-components-radiogroup-展示--modes",
1162
1174
  "design-system-components-radiogroup-展示--vertical-group",
1163
- "design-system-components-radiogroup-展示--horizontal",
1164
- "design-system-components-radiogroup-展示--disabled"
1175
+ "design-system-components-radiogroup-展示--horizontal"
1165
1176
  ],
1166
1177
  "設計規格": [
1167
1178
  "design-system-components-radiogroup-設計規格--overview",
@@ -1259,6 +1270,7 @@
1259
1270
  "tiers": {
1260
1271
  "展示": [
1261
1272
  "design-system-components-select-展示--modes",
1273
+ "design-system-components-select-展示--hug-width",
1262
1274
  "design-system-components-select-展示--display-mode",
1263
1275
  "design-system-components-select-展示--size-alignment",
1264
1276
  "design-system-components-select-展示--clearable",
@@ -1337,7 +1349,6 @@
1337
1349
  "展示": [
1338
1350
  "design-system-components-separator-展示--horizontal",
1339
1351
  "design-system-components-separator-展示--vertical",
1340
- "design-system-components-separator-展示--in-dropdown-menu",
1341
1352
  "design-system-components-separator-展示--between-sections"
1342
1353
  ],
1343
1354
  "設計規格": [
@@ -1413,7 +1424,6 @@
1413
1424
  "skeleton": {
1414
1425
  "tiers": {
1415
1426
  "展示": [
1416
- "design-system-components-skeleton-展示--default",
1417
1427
  "design-system-components-skeleton-展示--user-profile-card",
1418
1428
  "design-system-components-skeleton-展示--task-list-loading",
1419
1429
  "design-system-components-skeleton-展示--table-row-loading",
@@ -1655,7 +1665,6 @@
1655
1665
  "展示": [
1656
1666
  "design-system-components-tooltip-展示--default",
1657
1667
  "design-system-components-tooltip-展示--non-button-trigger",
1658
- "design-system-components-tooltip-展示--placement",
1659
1668
  "design-system-components-tooltip-展示--long-text"
1660
1669
  ],
1661
1670
  "設計規格": [
@@ -1702,6 +1711,6 @@
1702
1711
  "exception": null
1703
1712
  }
1704
1713
  },
1705
- "totalComponents": 63,
1706
- "totalStories": 920
1714
+ "totalComponents": 64,
1715
+ "totalStories": 919
1707
1716
  }
package/llms-full.txt CHANGED
@@ -1,6 +1,6 @@
1
1
  # @qijenchen/design-system — 完整設計參考(llms-full)
2
2
 
3
- > 全 component / pattern 的 variants / sizes / 禁止事項。build-time 從 spec.md frontmatter 生成,禁手改。v0.1.0-beta.83
3
+ > 全 component / pattern 的 variants / sizes / 禁止事項。build-time 從 spec.md frontmatter 生成,禁手改。v0.1.0-beta.84
4
4
 
5
5
  # Components
6
6
 
@@ -115,6 +115,9 @@ Source(AI 讀此看官方範例): src/components/Checkbox/
115
115
  Storybook: https://ajenchen-design-system.netlify.app
116
116
  Source(AI 讀此看官方範例): src/components/Chip/
117
117
 
118
+ ### Sizes
119
+ - **sm**: 單一尺寸(h-field-sm 28/32 依 density、icon 16、text-body)— 對齊 chip.tsx componentMeta
120
+
118
121
  ## CircularProgress(family self-contained)
119
122
 
120
123
  Storybook: https://ajenchen-design-system.netlify.app
@@ -194,11 +197,24 @@ Source(AI 讀此看官方範例): src/components/FileUpload/
194
197
  Storybook: https://ajenchen-design-system.netlify.app
195
198
  Source(AI 讀此看官方範例): src/components/FileViewer/
196
199
 
200
+ ## InlineEdit(family composite)
201
+
202
+ Storybook: https://ajenchen-design-system.netlify.app
203
+ Source(AI 讀此看官方範例): src/components/InlineEdit/
204
+
197
205
  ## Input(family 4)
198
206
 
199
207
  Storybook: https://ajenchen-design-system.netlify.app
200
208
  Source(AI 讀此看官方範例): src/components/Input/
201
209
 
210
+ ### Variants
211
+ - **default**: Field wrapper 完整 chrome(bg-surface + border + hover/focus 回饋)— 表單 / Field 內嵌
212
+
213
+ ### Sizes
214
+ - **sm**: field-height 28、icon 16、text-body
215
+ - **md**: default 一般表單(field-height 32、icon 16)
216
+ - **lg**: touch / 大字級(field-height 36、icon 20、text-body-lg)
217
+
202
218
  ## LinkInput(family 4)
203
219
 
204
220
  Storybook: https://ajenchen-design-system.netlify.app
@@ -401,6 +417,11 @@ Source(AI 讀此看官方範例): src/components/Tooltip/
401
417
  Storybook: https://ajenchen-design-system.netlify.app
402
418
  Source(AI 讀此看官方範例): src/components/TreeView/
403
419
 
420
+ ### Sizes
421
+ - **sm**: 緊湊清單(與 md 同視覺:text-body、indent 24;保留供密度語意)
422
+ - **md**: default 一般導覽樹
423
+ - **lg**: touch / 大字級(text-body-lg、px-4 py-2、indent 28)
424
+
404
425
  # Patterns
405
426
 
406
427
  ## action-bar
package/llms.txt CHANGED
@@ -1,7 +1,7 @@
1
1
  # @qijenchen/design-system
2
2
 
3
3
  > World-class React design system(Radix/shadcn + Tailwind v4 + 自訂 design token)。
4
- > 56 components + 4 public patterns + design tokens。v0.1.0-beta.83
4
+ > 57 components + 4 public patterns + design tokens。v0.1.0-beta.84
5
5
 
6
6
  本檔由 source(spec.md frontmatter + Storybook index)build-time 自動生成,**禁手改**(CI --check drift gate 守)。
7
7
  每元件 / pattern 的完整 variants / sizes / 禁止事項 全文見 [llms-full.txt](./llms-full.txt)。
@@ -21,7 +21,7 @@
21
21
  - [Carousel](https://ajenchen-design-system.netlify.app): 見 Storybook / spec — src:components/Carousel
22
22
  - [Chart](https://ajenchen-design-system.netlify.app): 見 Storybook / spec — src:components/Chart
23
23
  - [Checkbox](https://ajenchen-design-system.netlify.app): sizes:sm/md/lg — src:components/Checkbox
24
- - [Chip](https://ajenchen-design-system.netlify.app): Storybook / spec — src:components/Chip
24
+ - [Chip](https://ajenchen-design-system.netlify.app): sizes:sm — src:components/Chip
25
25
  - [CircularProgress](https://ajenchen-design-system.netlify.app): 見 Storybook / spec — src:components/CircularProgress
26
26
  - [Coachmark](https://ajenchen-design-system.netlify.app): 見 Storybook / spec — src:components/Coachmark
27
27
  - [Combobox](https://ajenchen-design-system.netlify.app): 見 Storybook / spec — src:components/Combobox
@@ -37,7 +37,8 @@
37
37
  - [FileItem](https://ajenchen-design-system.netlify.app): 見 Storybook / spec — src:components/FileItem
38
38
  - [FileUpload](https://ajenchen-design-system.netlify.app): variants:dropzone/button — src:components/FileUpload
39
39
  - [FileViewer](https://ajenchen-design-system.netlify.app): 見 Storybook / spec — src:components/FileViewer
40
- - [Input](https://ajenchen-design-system.netlify.app): 見 Storybook / spec — src:components/Input
40
+ - [InlineEdit](https://ajenchen-design-system.netlify.app): 見 Storybook / spec — src:components/InlineEdit
41
+ - [Input](https://ajenchen-design-system.netlify.app): variants:default;sizes:sm/md/lg — src:components/Input
41
42
  - [LinkInput](https://ajenchen-design-system.netlify.app): 見 Storybook / spec — src:components/LinkInput
42
43
  - [NumberInput](https://ajenchen-design-system.netlify.app): 見 Storybook / spec — src:components/NumberInput
43
44
  - [Pagination](https://ajenchen-design-system.netlify.app): 見 Storybook / spec — src:components/Pagination
@@ -63,7 +64,7 @@
63
64
  - [TimePicker](https://ajenchen-design-system.netlify.app): 見 Storybook / spec — src:components/TimePicker
64
65
  - [Toast](https://ajenchen-design-system.netlify.app): variants:neutral/info/success/warning/error — src:components/Toast
65
66
  - [Tooltip](https://ajenchen-design-system.netlify.app): 見 Storybook / spec — src:components/Tooltip
66
- - [TreeView](https://ajenchen-design-system.netlify.app): 見 Storybook / spec — src:components/TreeView
67
+ - [TreeView](https://ajenchen-design-system.netlify.app): sizes:sm/md/lg — src:components/TreeView
67
68
 
68
69
  ## Patterns
69
70
  - [action-bar](https://ajenchen-design-system.netlify.app): 跨元件 anatomy / 設計參照 pattern — src:patterns/action-bar
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qijenchen/design-system",
3
- "version": "0.1.0-beta.83",
3
+ "version": "0.1.0-beta.84",
4
4
  "private": false,
5
5
  "description": "World-class design system — components, patterns, tokens, hooks (single source of truth for team distribution).",
6
6
  "type": "module",
@@ -36,7 +36,10 @@
36
36
  "types": "./dist/patterns/*/index.d.ts",
37
37
  "import": "./dist/patterns/*/index.js"
38
38
  },
39
- "./tokens/*": "./src/tokens/*",
39
+ "./tokens/*": {
40
+ "types": "./dist/tokens/*.d.ts",
41
+ "import": "./dist/tokens/*.js"
42
+ },
40
43
  "./hooks/*": {
41
44
  "types": "./dist/hooks/*.d.ts",
42
45
  "import": "./dist/hooks/*.js"
@@ -100,7 +103,8 @@
100
103
  "react-zoom-pan-pinch": "^4.0.3",
101
104
  "recharts": "^3.8.1",
102
105
  "sonner": "^2.0.7",
103
- "tailwind-merge": "^3.5.0"
106
+ "tailwind-merge": "^3.5.0",
107
+ "tw-animate-css": "^1.4.0"
104
108
  },
105
109
  "peerDependencies": {
106
110
  "react": ">=18.0.0",
@@ -109,7 +109,7 @@ export const UsageGuidance: Story = {
109
109
  title='Accordion — 獨立收合多段(每段各自是否展開)'
110
110
  note='每個 item 是獨立主題,使用者依興趣選擇展開。不是互斥,而是「多段內容,多數時間只想看其中一段」。'
111
111
  >
112
- <Accordion type='single' collapsible>
112
+ <Accordion type='multiple'>
113
113
  <AccordionItem value='pricing'>
114
114
  <AccordionTrigger>付款週期與折扣</AccordionTrigger>
115
115
  <AccordionContent>年付享 20% 折扣。</AccordionContent>
@@ -162,7 +162,10 @@ export const AdvancedOptions: Story = {
162
162
  placeholder="一句話描述此專案"
163
163
  />
164
164
  </div>
165
- <Accordion type="single" collapsible>
165
+ {/* 2026-07-14 Dim 68 修:原單一 AccordionItem 違反 accordion.spec.md「❌ 單一 item 不用
166
+ Accordion」(單區塊該用 <details>,見 principles「單一項目不用 Accordion」)。補第二個
167
+ 可獨立收合的低頻設定段(type="multiple" 非互斥),成為合法多段收合場景。 */}
168
+ <Accordion type="multiple">
166
169
  <AccordionItem value="advanced">
167
170
  <AccordionTrigger>進階選項</AccordionTrigger>
168
171
  <AccordionContent>
@@ -184,6 +187,18 @@ export const AdvancedOptions: Story = {
184
187
  </div>
185
188
  </AccordionContent>
186
189
  </AccordionItem>
190
+ <AccordionItem value="notifications">
191
+ <AccordionTrigger>通知設定</AccordionTrigger>
192
+ <AccordionContent>
193
+ <div className="flex flex-col gap-1">
194
+ <label className="text-body text-foreground">狀態變更通知對象</label>
195
+ <input
196
+ className="h-field-md border border-border rounded-md px-3 text-body"
197
+ placeholder="例:專案成員 + 關注者"
198
+ />
199
+ </div>
200
+ </AccordionContent>
201
+ </AccordionItem>
187
202
  </Accordion>
188
203
  </div>
189
204
  ),
@@ -56,7 +56,7 @@ export const UsageGuidance: Story = {
56
56
  <LinkTo kind="Design System/Components/Alert/展示" name="右上角操作群組"><span className="text-primary hover:text-primary-hover font-medium cursor-pointer">右上角操作群組</span></LinkTo>
57
57
  </li>
58
58
  </ul>
59
- <p className="text-fg-muted mt-3">判斷不確定時:對照 spec.md「何時用 / 何時不用」段;若仍不符,改用近親元件( <code>Vs*Rule</code> stories)。</p>
59
+ <p className="text-fg-muted mt-3">判斷不確定時:對照 spec.md「何時用 / 何時不用」段;若仍不符,改用近親元件(見本頁下方「vs 近親」段)。</p>
60
60
  </div>
61
61
 
62
62
  {/* vs 近親 — VsToastVsDialogRule — 原 VsToastVsDialogRule */}
@@ -83,7 +83,7 @@ Alert 是**持久性通知**,嵌入在頁面中。用於系統狀態提示、
83
83
  - ❌ **不把 error form validation 做成 Alert**:欄位級錯誤必須貼近發生位置(FieldError),使用者才能快速定位;頁面級 Alert 只放非欄位的整體錯誤(如提交失敗、權限不足)
84
84
  - ❌ **Alert 不疊 Alert**:同區出現多個 Alert 視覺雜訊重,整理成一組 messages 或合併為單一 Alert with list
85
85
  - ❌ **destructive 操作確認不用 Alert**:刪除 / 離開等需要明確確認的動作用 Dialog,Alert 無法承載 confirm / cancel 雙按鈕的阻斷流程
86
- - ❌ **兩個 action 區域不混用**:chrome corner 只放 close X(必用 `<Button iconOnly dismiss size="xs" />`,不是 Inline Action、不是自刻 `<button><X /></button>`,見下方 Chrome corner close X canonical);body action row 只放 CTA(Button xs tertiary)。close X 混入 body action row 違反 same-row consistency(box size 與視覺分量不同,造成 gap / 對齊錯亂),完整規則見 `patterns/element-anatomy/inline-action.spec.md`「Same-row consistency rule(防混用)」節
86
+ - ❌ **右側操作區(endContent + close X)內不混不同分量的 action**:endContent(CTA / refresh 等)與 close X 同渲染進單一右上 suffix(對齊第一行、靠右);close X 必用 `<Button iconOnly dismiss size="xs" />`(不是 Inline Action、不是自刻 `<button><X /></button>`,見下方 Chrome corner close X canonical);同一 suffix 內所有 action 必同分量(統一 Button iconOnly xs),不可混 Inline Action + Button iconOnly,否則違反 same-row consistency(box size 與視覺分量不同,造成 gap / 對齊錯亂),完整規則見 `patterns/element-anatomy/inline-action.spec.md`「Same-row consistency rule(防混用)」節
87
87
 
88
88
  ---
89
89
 
@@ -92,7 +92,7 @@ Alert 是**持久性通知**,嵌入在頁面中。用於系統狀態提示、
92
92
  - **一般提示(neutral / info / success)**:`role="status"` + `aria-live="polite"`——screen reader 在空閒時讀出 Alert 內容,不中斷使用者目前動作
93
93
  - **緊急提示(warning / error)**:`role="alert"` + `aria-live="assertive"`——立即中斷 screen reader 目前朗讀讀出內容。「緊急與否」的界線即 variant 選擇本身:選 warning / error 即 assertive,依 variant 自動套用,無 per-instance 切換 API
94
94
  - **Close X 按鈕**:必須有 `aria-label`(如「關閉通知」),實作見下方「Chrome corner close X canonical」
95
- - **CTA 按鈕**:放在 Alert body action row size 固定為 `xs` tertiary,文字描述動作(「前往設定」「立即更新」)
95
+ - **CTA 按鈕**:透過 `endContent` 放進右側操作區(與 close X 同列,靠右上)size 固定為 `xs` tertiary,文字描述動作(「前往設定」「立即更新」)
96
96
 
97
97
  ---
98
98
 
@@ -111,13 +111,12 @@ SSOT 詳見 `patterns/element-anatomy/inline-action.spec.md`「Predicate:Inline
111
111
 
112
112
  ### Corner action group 佈局 canonical
113
113
 
114
- Alert chrome corner 可承載多個 action(close 左側並排):
114
+ Alert 右側操作區(單一 suffix,對齊第一行靠右)可承載多個 action —— endContent 內容 + close X 並排:
115
115
 
116
116
  ```
117
- ┌─ Alert ────────────────── [⟲] │ [X] ┐ ← chrome corner action group(Button xs)
118
- │ [icon] Title │ refresh / share / minimize + ButtonDivider + close X
117
+ ┌─ Alert ────────────────── [⟲] │ [X] ┐ ← 右側操作區 action group(endContent + close X,Button xs)
118
+ │ [icon] Title │ endContent(CTA / refresh / share)+ ButtonDivider + close X
119
119
  │ Description │
120
- │ [CTA1] [CTA2] │ ← body action row(Button xs tertiary)
121
120
  └──────────────────────────────────────┘
122
121
  ```
123
122
 
@@ -159,12 +158,11 @@ Subtle vs Solid 的完整 variant × theme class 對照見 anatomy `ColorMatrix`
159
158
 
160
159
  完整 placement 對照見 anatomy `PlacementMatrix` story。
161
160
 
162
- ## 為何無 Inspector / SizeMatrix
161
+ ## 為何無 SizeMatrix
163
162
 
164
- - **無 Inspector**:Alert 的關鍵決策維度是 `variant`(5 色)× `appearance`(subtle / solid)× `placement`(inline / fixed),已在 `ColorMatrix` 完整呈現 variant × appearance 矩陣,再加 `PlacementMatrix` 呈現 placement——互動切換式 Inspector 不會比這兩張矩陣更能傳達 Alert 的設計規格。
165
163
  - **無 SizeMatrix**:Alert 無 `size` prop,其視覺尺寸繼承自 Notice primitive(14px body / 16px icon / 固定 py),字級與垂直 padding 不隨 density 變動;僅 `placement="fixed"` 的水平 px 走 `--layout-space-loose`(density-aware,跟周圍 loose-padding 佈局對齊,見 alert.tsx)。尺寸規格由 `Notice` spec own。改 Notice 時 Alert 自動跟進,不需要 Alert 有獨立 SizeMatrix。
166
164
 
167
- 對應 anatomy story:保留 `Overview` + `ColorMatrix` + `StateBehavior` + 元件特有 `PlacementMatrix`。
165
+ 對應 anatomy story:`Overview` + `Inspector` + `ColorMatrix` + `PlacementMatrix` + `StateBehavior` + `Accessibility`(6-canonical;Alert `Inspector` 互動切換 variant × appearance × placement × dismissible,SizeMatrix N/A 見上)。
168
166
 
169
167
  ---
170
168
 
@@ -181,7 +179,7 @@ Subtle vs Solid 的完整 variant × theme class 對照見 anatomy `ColorMatrix`
181
179
  ## 邊界案例
182
180
 
183
181
  - **Disabled(dismiss button)**:Alert **不提供 dismiss 停用 API**——banner dismiss 恆可用(對齊 Polaris / Material Banner:通知關閉鈕應永遠可按)。「恆可用」指**已渲染的 X 永遠可按**;X 本身僅在傳 `onDismiss` 時渲染(否則是死按鈕假 affordance,2026-07-05 D4,見「Multi corner action 場景」段 + `../Notice/notice.spec.md`「邊界案例」)。Alert 本身亦無 `disabled` prop(持久通知不該被禁用)。若需防止 close action(API in-flight)被雙擊,consumer 在 `onDismiss` 內自行 debounce / 加上層鎖,不在 UI 層加 disable(Alert 不提供 dismiss 停用 API、也不把 disabled 轉傳給內部 dismiss Button;Button primitive 本身支援 disabled,但 Alert 刻意不開洞)。
184
- - **Loading**:Alert 本身不需 loading state(非 async surface);若 Alert body action row 內 CTA 在 async 動作中,該 Button 自己處理 `loading` prop。
182
+ - **Loading**:Alert 本身不需 loading state(非 async surface);若 `endContent` 內的 CTA 在 async 動作中,該 Button 自己處理 `loading` prop。
185
183
  - **Empty / icon-only**:Alert 必有 `title`(API contract),無 empty 場景;若無 description 則僅顯示 title + icon,layout 自動收斂。
186
184
  - **極長字串**:title 單行 truncate、description 自由換行不截斷(皆繼承 ItemContent 預設);description 超過 2–3 行屬誤用,改 Dialog(見禁止事項)。
187
185
 
@@ -34,38 +34,38 @@ const D: Record<string, string> = {
34
34
 
35
35
  const actionBtn = <Button variant="tertiary" size="xs">查看詳情</Button>
36
36
 
37
- export const SubtleSingleLine = {
38
- name: '低調單行',
37
+ // 2026-07-14 audit Dim 28(story 拆分原則):原 Subtle/Solid × SingleLine/WithDescription
38
+ // 四 story 依 appearance variant 拆細 = 「≥2 variants 拆細」反 pattern(該合對照 grid);
39
+ // 合併為單行 / 含說明兩 story,各以 subtle vs solid 並排對照(appearance trait grid 本體
40
+ // 由 anatomy ColorMatrix owns)。
41
+ export const SingleLine = {
42
+ name: '單行(低調 vs 實心對照)',
39
43
  render: () => (
40
- <div className="flex flex-col gap-3 max-w-lg">
41
- {ALL.map((v) => <Alert key={v} variant={v} appearance="subtle" title={L[v]} endContent={actionBtn} />)}
42
- </div>
43
- ),
44
- }
45
-
46
- export const SolidSingleLine = {
47
- name: '實心單行',
48
- render: () => (
49
- <div className="flex flex-col gap-3 max-w-lg">
50
- {ALL.map((v) => <Alert key={v} variant={v} appearance="solid" title={L[v]} endContent={actionBtn} />)}
51
- </div>
52
- ),
53
- }
54
-
55
- export const SubtleWithDescription = {
56
- name: '低調含說明文字',
57
- render: () => (
58
- <div className="flex flex-col gap-3 max-w-lg">
59
- {ALL.map((v) => <Alert key={v} variant={v} appearance="subtle" title={L[v]} description={D[v]} endContent={actionBtn} />)}
44
+ <div className="grid grid-cols-2 gap-6 max-w-5xl">
45
+ {(['subtle', 'solid'] as const).map((appearance) => (
46
+ <div key={appearance} className="flex flex-col gap-3">
47
+ <span className="text-caption text-fg-muted font-medium">
48
+ {appearance === 'subtle' ? 'Subtle — 頁面內嵌預設(淺底 + 邊框)' : 'Solid — 高強調(飽和底色)'}
49
+ </span>
50
+ {ALL.map((v) => <Alert key={v} variant={v} appearance={appearance} title={L[v]} endContent={actionBtn} />)}
51
+ </div>
52
+ ))}
60
53
  </div>
61
54
  ),
62
55
  }
63
56
 
64
- export const SolidWithDescription = {
65
- name: '實心含說明文字',
57
+ export const WithDescription = {
58
+ name: '含說明文字(低調 vs 實心對照)',
66
59
  render: () => (
67
- <div className="flex flex-col gap-3 max-w-lg">
68
- {ALL.map((v) => <Alert key={v} variant={v} appearance="solid" title={L[v]} description={D[v]} endContent={actionBtn} />)}
60
+ <div className="grid grid-cols-2 gap-6 max-w-5xl">
61
+ {(['subtle', 'solid'] as const).map((appearance) => (
62
+ <div key={appearance} className="flex flex-col gap-3">
63
+ <span className="text-caption text-fg-muted font-medium">
64
+ {appearance === 'subtle' ? 'Subtle — 頁面內嵌預設(淺底 + 邊框)' : 'Solid — 高強調(飽和底色)'}
65
+ </span>
66
+ {ALL.map((v) => <Alert key={v} variant={v} appearance={appearance} title={L[v]} description={D[v]} endContent={actionBtn} />)}
67
+ </div>
68
+ ))}
69
69
  </div>
70
70
  ),
71
71
  }
@@ -99,8 +99,8 @@ export const CornerActionGroup = {
99
99
  </div>
100
100
 
101
101
  <span className="text-caption text-fg-muted">
102
- Close X 跟 refresh / share 同 Button iconOnly xs(chrome 輕量 action,chrome-header-height 幾何),Separator 分群。
103
- 禁止混 Inline Action + Button iconOnly(違反 same-row consistency)。
102
+ 右上角這排(重新整理、分享、關閉)全用同一種最小尺寸的純圖示按鈕,並用分隔線分成兩群,保持同一列視覺一致。
103
+ 不要一群用純圖示按鈕、另一群用列內動作,會不整齊。
104
104
  </span>
105
105
  </div>
106
106
  ),
@@ -12,7 +12,7 @@ import { Notice, useInverseTheme, SUBTLE_ICON_COLOR, type NoticeVariant } from '
12
12
  * 在 theme boundary 設 text-foreground 強制 re-resolve。
13
13
  *
14
14
  * ── Appearance ──
15
- * subtle: 淺底色 + 四邊 1px border(色相 hover 色)。不設 data-theme,跟隨頁面。
15
+ * subtle: 淺底色 + 四邊 1px border(色相 text = icon 同色,見下方 SUBTLE_CONTAINER 註)。不設 data-theme,跟隨頁面。
16
16
  * solid: 跟 Toast 對齊:
17
17
  * neutral → data-theme={inverse} + bg-surface-raised(同層翻轉)
18
18
  * info/success/error → bg on outer, data-theme="dark" on inner
@@ -80,6 +80,8 @@ export const MAIN_NAV = [
80
80
  export const WorkspaceBrand = () => (
81
81
  <div className="flex items-center gap-2 min-w-0">
82
82
  {/* 24 per header-canonical.spec.md 4.5 chrome header avatar canonical; sync with `--chrome-header-avatar-size` */}
83
+ {/* Workspace brand = 組織識別(非人)→ 首字 letter mark;2026-07-08 人像真實化 sweep 刻意保留,
84
+ 真實人像僅套用於 person avatar(組織用人臉照片會誤導身份) */}
83
85
  <Avatar size={24} shape="square" color="blue" solid alt="Acme Inc" />
84
86
  <span className="text-body-lg font-medium truncate group-data-[collapsible=icon]:hidden">Acme Inc</span>
85
87
  </div>
@@ -93,13 +95,14 @@ export const UserFooter = () => (
93
95
  <SidebarMenuButton asChild>
94
96
  <div role="group" aria-label="當前使用者">
95
97
  <ItemAvatar
98
+ src="https://i.pravatar.cc/48?u=EMP-1001"
96
99
  alt="Alan Chen"
97
100
  color="blue"
98
101
  hoverCard={
99
102
  <ProfileCard
100
103
  name="Alan Chen"
101
104
  subtitle="Design|D-0042"
102
- avatar={{ alt: 'Alan Chen', color: 'blue' }}
105
+ avatar={{ src: 'https://i.pravatar.cc/80?u=EMP-1001', alt: 'Alan Chen', color: 'blue' }}
103
106
  status="online"
104
107
  actions={<ProfileCardDefaultActions />}
105
108
  />
@@ -190,7 +193,7 @@ export function AcmeSidebar({
190
193
  // (非 ProfileCard——ProfileCard 是看「別人」的人員卡,預設動作 Chat/通話用在自己身上不對)。
191
194
  // 消費 SSOT:
192
195
  // - <Avatar size={24}>(header-canonical.spec.md 4.5 chrome header avatar:brand + account 同 24px;
193
- // sync with --chrome-header-avatar-size)。互動感由 focus ring + hover 提供,不放大到 field height。
196
+ // sync with --chrome-header-avatar-size)。互動感由 focus-visible ring 提供(無 hover bg,chrome 輕量 entry),不放大到 field height。
194
197
  // - <DropdownMenu>(個人資料 / 設定 / 登出;baseline = dropdown-menu.stories.tsx Groups)
195
198
  // - 放置 / 邊距對稱 canonical → app-shell.spec.md「帳號入口(Account entry)放置 SSOT」段
196
199
  export function AccountMenu() {
@@ -203,7 +206,7 @@ export function AccountMenu() {
203
206
  className="flex items-center justify-center rounded-full focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1"
204
207
  >
205
208
  {/* 24 per header-canonical.spec.md 4.5 chrome header avatar canonical(brand + account 同尺寸); sync with --chrome-header-avatar-size */}
206
- <Avatar size={24} alt="Alan Chen" color="blue" />
209
+ <Avatar size={24} src="https://i.pravatar.cc/48?u=EMP-1001" alt="Alan Chen" color="blue" />
207
210
  </button>
208
211
  </DropdownMenuTrigger>
209
212
  <DropdownMenuContent align="end">
@@ -205,7 +205,7 @@ function CustomAside() {
205
205
  - **Scroll ownership**:Aside 自帶 scroll(body 包 `<ScrollArea>` primitive + `min-h-0`,per Atlassian Layout 慣例),main 自帶 scroll,**禁止** body-level scroll
206
206
 
207
207
  **Modal overlay** 行為:
208
- - 消費既有 `sheet.spec.md` canonical(從右滑出 + Esc 關 + click-outside 關 + focus trap + restore focus)
208
+ - 消費既有 `sheet.spec.md` canonical(從右滑出 + Esc 關 + click-outside 關 + focus trap);**restore focus AppShellAside 自建**(controlled Sheet 無 SheetTrigger → Radix 內建回焦失效;開啟時 snapshot opener、關閉還原、opener 已卸載 fallback `#app-shell-main`,WCAG 2.4.3,2026-07-14)
209
209
  - **title prop required**(per `sheet.spec.md`「禁止事項」禁無 title — `aria-labelledby` 強制)
210
210
  - 跟 Sidebar mobile fallback 同 SSOT
211
211
 
@@ -263,7 +263,7 @@ Main 內塞什麼(table / field / card / page header / list)的 layout + spacing
263
263
  | **`⌘.`(macOS)/ `Ctrl+.`(Windows)** | Toggle aside | Linear convention(新加) |
264
264
  | **Skip-to-main link** | `Tab` 第一站 focus 「Skip to content」link → `main` | A11y WCAG 2.4.1 bypass blocks;對齊 Atlassian Layout skip-link |
265
265
 
266
- 兩者消費既有 Sidebar keyboard shortcut 機制(`useEffect` + `window.addEventListener('keydown')`),AppShell 不發明新機制。
266
+ **`⌘B`** 消費既有 Sidebar SSOT 機制(Sidebar 內建 `useEffect` + `window.addEventListener('keydown')`,AppShell **不重複 register**)。**`⌘.`** 為 AppShell **自有** `window` keydown listener(`app-shell.tsx:179-188`,沿用相同 pattern 形態,但屬**新註冊**、非消費 Sidebar — 對齊上表「新加」標記)。此 AppShell 自有 listener 目前**未含** Sidebar handler 的 IME composition / input-textarea guard(打字時 `⌘.` 仍會觸發 — 已知 gap)。
267
267
 
268
268
  ---
269
269
 
@@ -321,8 +321,8 @@ Main 內塞什麼(table / field / card / page header / list)的 layout + spacing
321
321
  ## Consumer 紀律
322
322
 
323
323
  - ❌ 禁:`<AppShell>` 內 wrap 第二個 `<AppShell>`(nested shell 違反「整頁框架」單例性)
324
- - ❌ 禁:`sidebar={<div>...</div>}`(應傳 `<Sidebar>` primitive,確保視覺 SSOT。型別上收 ReactNode、不做機械強制 — React 型別強制易被 wrapper 包一層繞過,世界級 shell 元件皆收 ReactNode;本約定靠 story 示範 + audit 把關。2026-06-10 user 拍板 2a:措辭「必」→「應」對齊 code 真實)
325
- - ❌ 禁:`header={<header>...</header>}`(應傳 `<ChromeHeader>` 或消費 `header-canonical` 派生 header;同上,型別不機械強制)
324
+ - ❌ 禁:`sidebar={<div>...</div>}`(應傳 `<Sidebar>` primitive,確保視覺 SSOT。raw-element slot 簽名(`sidebar={<div>}` / `header={<header>}` 等)由 `check_consumer_app_invariants.sh` Pattern 9 機械攔(P0,2026-06-12 加);TS 型別層仍收 ReactNode 不強制 — React 型別強制易被 wrapper 包一層繞過,世界級 shell 元件皆收 ReactNode;wrapper 包一層繞過的殘餘 case 靠 story 示範 + audit 把關。2026-06-10 user 拍板 2a:措辭「必」→「應」對齊 code 真實)
325
+ - ❌ 禁:`header={<header>...</header>}`(應傳 `<ChromeHeader>` 或消費 `header-canonical` 派生 header;同上 — Pattern 9 同攔 header raw-element,TS 型別層不強制)
326
326
  - ❌ 禁:AppShell.Main 自加 padding(違反 layoutSpace 規則 1B)
327
327
  - ❌ 禁:AppShellAside header 加第二行 / actions(header = 單行 title + close X,API typed `title: string` 結構鎖;說明文字歸 aside body — 2026-06-12 fork-drift 防線)
328
328
  - ✅ 必:`layout` mode 在 product 啟動時固定,**不在 runtime 切換**(切換 = product 角色變動 = 應該重 mount app)
@@ -18,6 +18,7 @@ import {
18
18
  Sheet,
19
19
  SheetContent,
20
20
  SheetTitle,
21
+ handleSheetOpenAutoFocus,
21
22
  } from '@/design-system/components/Sheet/sheet'
22
23
  import { Button } from '@/design-system/components/Button/button'
23
24
  import { ScrollArea } from '@/design-system/components/ScrollArea/scroll-area'
@@ -32,7 +33,7 @@ type AppShellLayout = 'primary-sidebar' | 'primary-header'
32
33
  export interface AppShellProps extends React.HTMLAttributes<HTMLDivElement> {
33
34
  /** primary-sidebar (Linear/Notion 派) | primary-header (GitHub/Slack 派);預設 primary-sidebar */
34
35
  layout?: AppShellLayout
35
- /** Sidebar 元素(必傳 Sidebar primitive,per Consumer 紀律)*/
36
+ /** Sidebar 元素(應傳 Sidebar primitive,per Consumer 紀律;型別 optional 不機械強制,對齊 spec「應」措辭)*/
36
37
  sidebar?: React.ReactNode
37
38
  /**
38
39
  * Local page header(永遠 render 在 main column 頂部,當前頁 actions / breadcrumb / page-level filter)。
@@ -307,6 +308,9 @@ const AppShellAside = React.forwardRef<HTMLElement, AppShellAsideProps>(
307
308
  // SheetContent 的 aria-labelledby 指向不存在的 id → SR 念「unnamed dialog」+ Radix
308
309
  // TitleWarning console.error(違 sheet.spec.md:98「Sheet content 必有可見 title」)。
309
310
  // inline(aside)用純 <h2>:aside 自身已 aria-label={title},且無 Dialog context 不可用 SheetTitle。
311
+ // R1:mobile Sheet 關閉後焦點還原目標(open 時 snapshot)
312
+ const asideOpenerRef = React.useRef<HTMLElement | null>(null)
313
+
310
314
  const renderFrame = (titleNode: React.ReactNode) => (
311
315
  <>
312
316
  <ChromeHeader>
@@ -327,12 +331,34 @@ const AppShellAside = React.forwardRef<HTMLElement, AppShellAsideProps>(
327
331
  )
328
332
 
329
333
  // Modal mode(mobile)— Sheet from right
334
+ // 2026-07-14 dim-9 修:同步轉交 forwarded ref + 合併 consumer className —— 原 mobile 分支
335
+ // 兩者皆遺失,同一 API(ref / className)隨 breakpoint 靜默失效(desktop 有效、mobile 無效)。
330
336
  if (isMobile) {
331
337
  return (
332
338
  <Sheet open={asideOpen} onOpenChange={setAsideOpen}>
333
339
  <SheetContent
340
+ ref={ref as React.Ref<HTMLDivElement>}
334
341
  side="right"
335
- className="w-[min(90vw,var(--app-shell-aside-modal-width))] flex flex-col p-0 [&>button]:hidden"
342
+ // R1 WCAG 2.4.3(2026-07-14,Claude+codex A′ 共識):controlled Sheet SheetTrigger
343
+ // Radix onCloseAutoFocus triggerRef=null + preventDefault 吃掉 fallback → 焦點掉 <body>。
344
+ // 解:開啟時 snapshot opener(事件 dispatch 時 Radix 尚未移焦;MUI/React Aria/Ant snapshot
345
+ // 共識 + DatePicker Range 先例 date-picker.tsx:1061),關閉手動還原;opener 已 unmount →
346
+ // fallback skip-link main(#app-shell-main tabIndex=-1)。
347
+ onOpenAutoFocus={(e) => {
348
+ asideOpenerRef.current = document.activeElement instanceof HTMLElement ? document.activeElement : null
349
+ handleSheetOpenAutoFocus(e) // 接力 DS 預設 body-focus(自訂 handler 覆寫預設,故顯式呼叫)
350
+ }}
351
+ onCloseAutoFocus={(e) => {
352
+ e.preventDefault()
353
+ const opener = asideOpenerRef.current
354
+ asideOpenerRef.current = null
355
+ if (opener?.isConnected) { opener.focus({ preventScroll: true }); return }
356
+ document.getElementById('app-shell-main')?.focus({ preventScroll: true })
357
+ }}
358
+ className={cn(
359
+ 'w-[min(90vw,var(--app-shell-aside-modal-width))] flex flex-col p-0 [&>button]:hidden',
360
+ className
361
+ )}
336
362
  style={{ ['--app-shell-aside-modal-width' as string]: `${resolvedWidth}px` }}
337
363
  >
338
364
  {renderFrame(<SheetTitle className="flex-1">{title}</SheetTitle>)}
@@ -93,7 +93,7 @@ children 通常要 `className="w-full h-full object-cover"` 讓圖填滿容器;
93
93
 
94
94
  ## 邊界案例
95
95
 
96
- - **極端 ratio**:`ratio` 接受任意正數,元件不驗證、不設上下限(`1/10` 極扁 / `10/1` 極窄高都照算);是否合理由 consumer 把關
96
+ - **極端 ratio**:`ratio` 接受任意正數,元件不驗證、不設上下限(`1/10` 極窄高 / `10/1` 極扁都照算);是否合理由 consumer 把關
97
97
  - **容器 resize**:高度恆 = 寬度 ÷ ratio(padding-bottom 百分比機制),父層寬度變化時高度自動跟隨,無需 JS
98
98
  - **children 超出**:元件不自動裁切 — 超出 ratio 容器的內容會溢出;裁切由 consumer 加 `overflow-hidden`(見 Consumer 範例)
99
99
  - **媒體原始比例 ≠ 容器 ratio**:呈現由 children 的 `object-cover`(裁滿)/ `object-contain`(留白)決定,元件不介入