@qijenchen/design-system 0.1.0-beta.5 → 0.1.0-beta.50

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 (1142) hide show
  1. package/CLAUDE.md +199 -0
  2. package/README.md +155 -0
  3. package/cli-init.mjs +90 -0
  4. package/dist/components/Accordion/accordion.d.ts.map +1 -1
  5. package/dist/components/Accordion/accordion.js +3 -0
  6. package/dist/components/Accordion/accordion.js.map +1 -1
  7. package/dist/components/Accordion/index.d.ts +2 -0
  8. package/dist/components/Accordion/index.d.ts.map +1 -0
  9. package/dist/components/Accordion/index.js +9 -0
  10. package/dist/components/Accordion/index.js.map +1 -0
  11. package/dist/components/Alert/alert.d.ts +1 -1
  12. package/dist/components/Alert/index.d.ts +2 -0
  13. package/dist/components/Alert/index.d.ts.map +1 -0
  14. package/dist/components/Alert/index.js +7 -0
  15. package/dist/components/Alert/index.js.map +1 -0
  16. package/dist/components/AppShell/index.d.ts +2 -0
  17. package/dist/components/AppShell/index.d.ts.map +1 -0
  18. package/dist/components/AppShell/index.js +7 -0
  19. package/dist/components/AppShell/index.js.map +1 -0
  20. package/dist/components/AspectRatio/index.d.ts +2 -0
  21. package/dist/components/AspectRatio/index.d.ts.map +1 -0
  22. package/dist/components/AspectRatio/index.js +6 -0
  23. package/dist/components/AspectRatio/index.js.map +1 -0
  24. package/dist/components/Avatar/avatar.d.ts +3 -3
  25. package/dist/components/Avatar/avatar.d.ts.map +1 -1
  26. package/dist/components/Avatar/avatar.js +3 -1
  27. package/dist/components/Avatar/avatar.js.map +1 -1
  28. package/dist/components/Avatar/index.d.ts +2 -0
  29. package/dist/components/Avatar/index.d.ts.map +1 -0
  30. package/dist/components/Avatar/index.js +6 -0
  31. package/dist/components/Avatar/index.js.map +1 -0
  32. package/dist/components/Badge/index.d.ts +2 -0
  33. package/dist/components/Badge/index.d.ts.map +1 -0
  34. package/dist/components/Badge/index.js +7 -0
  35. package/dist/components/Badge/index.js.map +1 -0
  36. package/dist/components/Breadcrumb/breadcrumb.d.ts +1 -1
  37. package/dist/components/Breadcrumb/breadcrumb.d.ts.map +1 -1
  38. package/dist/components/Breadcrumb/breadcrumb.js +16 -21
  39. package/dist/components/Breadcrumb/breadcrumb.js.map +1 -1
  40. package/dist/components/Breadcrumb/index.d.ts +2 -0
  41. package/dist/components/Breadcrumb/index.d.ts.map +1 -0
  42. package/dist/components/Breadcrumb/index.js +12 -0
  43. package/dist/components/Breadcrumb/index.js.map +1 -0
  44. package/dist/components/BulkActionBar/bulk-action-bar.d.ts.map +1 -1
  45. package/dist/components/BulkActionBar/bulk-action-bar.js +1 -1
  46. package/dist/components/BulkActionBar/bulk-action-bar.js.map +1 -1
  47. package/dist/components/BulkActionBar/index.d.ts +2 -0
  48. package/dist/components/BulkActionBar/index.d.ts.map +1 -0
  49. package/dist/components/BulkActionBar/index.js +7 -0
  50. package/dist/components/BulkActionBar/index.js.map +1 -0
  51. package/dist/components/Button/index.d.ts +2 -0
  52. package/dist/components/Button/index.d.ts.map +1 -0
  53. package/dist/components/Button/index.js +8 -0
  54. package/dist/components/Button/index.js.map +1 -0
  55. package/dist/components/Calendar/calendar.d.ts.map +1 -1
  56. package/dist/components/Calendar/calendar.js +14 -2
  57. package/dist/components/Calendar/calendar.js.map +1 -1
  58. package/dist/components/Calendar/index.d.ts +2 -0
  59. package/dist/components/Calendar/index.d.ts.map +1 -0
  60. package/dist/components/Calendar/index.js +6 -0
  61. package/dist/components/Calendar/index.js.map +1 -0
  62. package/dist/components/Carousel/carousel.d.ts.map +1 -1
  63. package/dist/components/Carousel/carousel.js +6 -3
  64. package/dist/components/Carousel/carousel.js.map +1 -1
  65. package/dist/components/Carousel/index.d.ts +2 -0
  66. package/dist/components/Carousel/index.d.ts.map +1 -0
  67. package/dist/components/Carousel/index.js +11 -0
  68. package/dist/components/Carousel/index.js.map +1 -0
  69. package/dist/components/Chart/chart.d.ts.map +1 -1
  70. package/dist/components/Chart/chart.js +2 -0
  71. package/dist/components/Chart/chart.js.map +1 -1
  72. package/dist/components/Chart/index.d.ts +2 -0
  73. package/dist/components/Chart/index.d.ts.map +1 -0
  74. package/dist/components/Chart/index.js +11 -0
  75. package/dist/components/Chart/index.js.map +1 -0
  76. package/dist/components/Checkbox/checkbox.d.ts +2 -2
  77. package/dist/components/Checkbox/checkbox.js +6 -5
  78. package/dist/components/Checkbox/checkbox.js.map +1 -1
  79. package/dist/components/Checkbox/index.d.ts +2 -0
  80. package/dist/components/Checkbox/index.d.ts.map +1 -0
  81. package/dist/components/Checkbox/index.js +7 -0
  82. package/dist/components/Checkbox/index.js.map +1 -0
  83. package/dist/components/Chip/chip.d.ts +4 -4
  84. package/dist/components/Chip/chip.js +1 -1
  85. package/dist/components/Chip/chip.js.map +1 -1
  86. package/dist/components/Chip/index.d.ts +2 -0
  87. package/dist/components/Chip/index.d.ts.map +1 -0
  88. package/dist/components/Chip/index.js +8 -0
  89. package/dist/components/Chip/index.js.map +1 -0
  90. package/dist/components/CircularProgress/index.d.ts +2 -0
  91. package/dist/components/CircularProgress/index.d.ts.map +1 -0
  92. package/dist/components/CircularProgress/index.js +6 -0
  93. package/dist/components/CircularProgress/index.js.map +1 -0
  94. package/dist/components/Coachmark/coachmark-story-helpers.d.ts +22 -0
  95. package/dist/components/Coachmark/coachmark-story-helpers.d.ts.map +1 -0
  96. package/dist/components/Coachmark/coachmark.d.ts.map +1 -1
  97. package/dist/components/Coachmark/coachmark.js +7 -3
  98. package/dist/components/Coachmark/coachmark.js.map +1 -1
  99. package/dist/components/Coachmark/index.d.ts +2 -0
  100. package/dist/components/Coachmark/index.d.ts.map +1 -0
  101. package/dist/components/Coachmark/index.js +6 -0
  102. package/dist/components/Coachmark/index.js.map +1 -0
  103. package/dist/components/Combobox/combobox.d.ts +6 -6
  104. package/dist/components/Combobox/combobox.d.ts.map +1 -1
  105. package/dist/components/Combobox/combobox.js +28 -1
  106. package/dist/components/Combobox/combobox.js.map +1 -1
  107. package/dist/components/Combobox/index.d.ts +2 -0
  108. package/dist/components/Combobox/index.d.ts.map +1 -0
  109. package/dist/components/Combobox/index.js +6 -0
  110. package/dist/components/Combobox/index.js.map +1 -0
  111. package/dist/components/Command/index.d.ts +2 -0
  112. package/dist/components/Command/index.d.ts.map +1 -0
  113. package/dist/components/Command/index.js +14 -0
  114. package/dist/components/Command/index.js.map +1 -0
  115. package/dist/components/DataTable/data-table.js +2 -2
  116. package/dist/components/DataTable/data-table.js.map +1 -1
  117. package/dist/components/DataTable/index.d.ts +2 -0
  118. package/dist/components/DataTable/index.d.ts.map +1 -0
  119. package/dist/components/DataTable/index.js +8 -0
  120. package/dist/components/DataTable/index.js.map +1 -0
  121. package/dist/components/DateGrid/date-grid.d.ts +13 -13
  122. package/dist/components/DateGrid/date-grid.js +1 -1
  123. package/dist/components/DateGrid/date-grid.js.map +1 -1
  124. package/dist/components/DateGrid/index.d.ts +2 -0
  125. package/dist/components/DateGrid/index.d.ts.map +1 -0
  126. package/dist/components/DateGrid/index.js +6 -0
  127. package/dist/components/DateGrid/index.js.map +1 -0
  128. package/dist/components/DatePicker/date-picker.d.ts +2 -2
  129. package/dist/components/DatePicker/date-picker.d.ts.map +1 -1
  130. package/dist/components/DatePicker/date-picker.js +8 -1
  131. package/dist/components/DatePicker/date-picker.js.map +1 -1
  132. package/dist/components/DatePicker/index.d.ts +2 -0
  133. package/dist/components/DatePicker/index.d.ts.map +1 -0
  134. package/dist/components/DatePicker/index.js +8 -0
  135. package/dist/components/DatePicker/index.js.map +1 -0
  136. package/dist/components/DescriptionList/description-list.d.ts +2 -2
  137. package/dist/components/DescriptionList/description-list.js +2 -1
  138. package/dist/components/DescriptionList/description-list.js.map +1 -1
  139. package/dist/components/DescriptionList/index.d.ts +2 -0
  140. package/dist/components/DescriptionList/index.d.ts.map +1 -0
  141. package/dist/components/DescriptionList/index.js +7 -0
  142. package/dist/components/DescriptionList/index.js.map +1 -0
  143. package/dist/components/Dialog/dialog.d.ts +1 -1
  144. package/dist/components/Dialog/dialog.js.map +1 -1
  145. package/dist/components/Dialog/index.d.ts +2 -0
  146. package/dist/components/Dialog/index.d.ts.map +1 -0
  147. package/dist/components/Dialog/index.js +16 -0
  148. package/dist/components/Dialog/index.js.map +1 -0
  149. package/dist/components/DropdownMenu/dropdown-menu.d.ts +4 -3
  150. package/dist/components/DropdownMenu/dropdown-menu.d.ts.map +1 -1
  151. package/dist/components/DropdownMenu/dropdown-menu.js +3 -3
  152. package/dist/components/DropdownMenu/dropdown-menu.js.map +1 -1
  153. package/dist/components/DropdownMenu/index.d.ts +2 -0
  154. package/dist/components/DropdownMenu/index.d.ts.map +1 -0
  155. package/dist/components/DropdownMenu/index.js +21 -0
  156. package/dist/components/DropdownMenu/index.js.map +1 -0
  157. package/dist/components/Empty/index.d.ts +2 -0
  158. package/dist/components/Empty/index.d.ts.map +1 -0
  159. package/dist/components/Empty/index.js +6 -0
  160. package/dist/components/Empty/index.js.map +1 -0
  161. package/dist/components/Field/field-types.js.map +1 -1
  162. package/dist/components/Field/index.d.ts +2 -0
  163. package/dist/components/Field/index.d.ts.map +1 -0
  164. package/dist/components/Field/index.js +10 -0
  165. package/dist/components/Field/index.js.map +1 -0
  166. package/dist/components/FieldControlGroup/field-control-group.d.ts +1 -1
  167. package/dist/components/FieldControlGroup/index.d.ts +2 -0
  168. package/dist/components/FieldControlGroup/index.d.ts.map +1 -0
  169. package/dist/components/FieldControlGroup/index.js +6 -0
  170. package/dist/components/FieldControlGroup/index.js.map +1 -0
  171. package/dist/components/FileItem/index.d.ts +2 -0
  172. package/dist/components/FileItem/index.d.ts.map +1 -0
  173. package/dist/components/FileItem/index.js +6 -0
  174. package/dist/components/FileItem/index.js.map +1 -0
  175. package/dist/components/FileUpload/file-upload.d.ts +2 -2
  176. package/dist/components/FileUpload/file-upload.js +2 -2
  177. package/dist/components/FileUpload/file-upload.js.map +1 -1
  178. package/dist/components/FileUpload/index.d.ts +2 -0
  179. package/dist/components/FileUpload/index.d.ts.map +1 -0
  180. package/dist/components/FileUpload/index.js +6 -0
  181. package/dist/components/FileUpload/index.js.map +1 -0
  182. package/dist/components/FileViewer/file-viewer.d.ts +1 -1
  183. package/dist/components/FileViewer/file-viewer.d.ts.map +1 -1
  184. package/dist/components/FileViewer/file-viewer.js +2 -3
  185. package/dist/components/FileViewer/file-viewer.js.map +1 -1
  186. package/dist/components/FileViewer/index.d.ts +2 -0
  187. package/dist/components/FileViewer/index.d.ts.map +1 -0
  188. package/dist/components/FileViewer/index.js +7 -0
  189. package/dist/components/FileViewer/index.js.map +1 -0
  190. package/dist/components/HoverCard/hover-card.d.ts +1 -1
  191. package/dist/components/HoverCard/hover-card.js +1 -1
  192. package/dist/components/HoverCard/hover-card.js.map +1 -1
  193. package/dist/components/HoverCard/index.d.ts +2 -0
  194. package/dist/components/HoverCard/index.d.ts.map +1 -0
  195. package/dist/components/HoverCard/index.js +8 -0
  196. package/dist/components/HoverCard/index.js.map +1 -0
  197. package/dist/components/Input/index.d.ts +2 -0
  198. package/dist/components/Input/index.d.ts.map +1 -0
  199. package/dist/components/Input/index.js +6 -0
  200. package/dist/components/Input/index.js.map +1 -0
  201. package/dist/components/Input/input.d.ts +8 -5
  202. package/dist/components/Input/input.d.ts.map +1 -1
  203. package/dist/components/Input/input.js +6 -4
  204. package/dist/components/Input/input.js.map +1 -1
  205. package/dist/components/LinkInput/index.d.ts +2 -0
  206. package/dist/components/LinkInput/index.d.ts.map +1 -0
  207. package/dist/components/LinkInput/index.js +6 -0
  208. package/dist/components/LinkInput/index.js.map +1 -0
  209. package/dist/components/LinkInput/link-input.d.ts +2 -2
  210. package/dist/components/LinkInput/link-input.js +1 -1
  211. package/dist/components/Menu/index.d.ts +2 -0
  212. package/dist/components/Menu/index.d.ts.map +1 -0
  213. package/dist/components/Menu/index.js +9 -0
  214. package/dist/components/Menu/index.js.map +1 -0
  215. package/dist/components/Menu/menu-item.d.ts +2 -2
  216. package/dist/components/Menu/menu-item.d.ts.map +1 -1
  217. package/dist/components/Menu/menu-item.js +2 -1
  218. package/dist/components/Menu/menu-item.js.map +1 -1
  219. package/dist/components/Notice/index.d.ts +2 -0
  220. package/dist/components/Notice/index.d.ts.map +1 -0
  221. package/dist/components/Notice/index.js +8 -0
  222. package/dist/components/Notice/index.js.map +1 -0
  223. package/dist/components/Notice/notice.d.ts.map +1 -1
  224. package/dist/components/Notice/notice.js +2 -1
  225. package/dist/components/Notice/notice.js.map +1 -1
  226. package/dist/components/NumberInput/index.d.ts +2 -0
  227. package/dist/components/NumberInput/index.d.ts.map +1 -0
  228. package/dist/components/NumberInput/index.js +7 -0
  229. package/dist/components/NumberInput/index.js.map +1 -0
  230. package/dist/components/NumberInput/number-input.d.ts +3 -3
  231. package/dist/components/NumberInput/number-input.d.ts.map +1 -1
  232. package/dist/components/NumberInput/number-input.js +2 -1
  233. package/dist/components/NumberInput/number-input.js.map +1 -1
  234. package/dist/components/OverflowIndicator/index.d.ts +2 -0
  235. package/dist/components/OverflowIndicator/index.d.ts.map +1 -0
  236. package/dist/components/OverflowIndicator/index.js +6 -0
  237. package/dist/components/OverflowIndicator/index.js.map +1 -0
  238. package/dist/components/OverflowIndicator/overflow-indicator.d.ts.map +1 -1
  239. package/dist/components/OverflowIndicator/overflow-indicator.js +9 -2
  240. package/dist/components/OverflowIndicator/overflow-indicator.js.map +1 -1
  241. package/dist/components/PeoplePicker/index.d.ts +2 -0
  242. package/dist/components/PeoplePicker/index.d.ts.map +1 -0
  243. package/dist/components/PeoplePicker/index.js +9 -0
  244. package/dist/components/PeoplePicker/index.js.map +1 -0
  245. package/dist/components/PeoplePicker/people-picker-helpers.d.ts +1 -1
  246. package/dist/components/PeoplePicker/people-picker-helpers.d.ts.map +1 -1
  247. package/dist/components/PeoplePicker/people-picker-helpers.js +2 -2
  248. package/dist/components/PeoplePicker/people-picker-helpers.js.map +1 -1
  249. package/dist/components/PeoplePicker/people-picker.d.ts +1 -1
  250. package/dist/components/PeoplePicker/people-picker.d.ts.map +1 -1
  251. package/dist/components/PeoplePicker/people-picker.js +5 -5
  252. package/dist/components/PeoplePicker/people-picker.js.map +1 -1
  253. package/dist/components/PeoplePicker/person-display.d.ts +7 -7
  254. package/dist/components/PeoplePicker/person-display.d.ts.map +1 -1
  255. package/dist/components/PeoplePicker/person-display.js +7 -7
  256. package/dist/components/PeoplePicker/person-display.js.map +1 -1
  257. package/dist/components/Popover/index.d.ts +2 -0
  258. package/dist/components/Popover/index.d.ts.map +1 -0
  259. package/dist/components/Popover/index.js +14 -0
  260. package/dist/components/Popover/index.js.map +1 -0
  261. package/dist/components/Popover/popover.js +3 -2
  262. package/dist/components/Popover/popover.js.map +1 -1
  263. package/dist/components/ProfileCard/index.d.ts +2 -0
  264. package/dist/components/ProfileCard/index.d.ts.map +1 -0
  265. package/dist/components/ProfileCard/index.js +8 -0
  266. package/dist/components/ProfileCard/index.js.map +1 -0
  267. package/dist/components/{NameCard/name-card.d.ts → ProfileCard/profile-card.d.ts} +17 -17
  268. package/dist/components/ProfileCard/profile-card.d.ts.map +1 -0
  269. package/dist/components/{NameCard/name-card.js → ProfileCard/profile-card.js} +9 -9
  270. package/dist/components/ProfileCard/profile-card.js.map +1 -0
  271. package/dist/components/ProgressBar/index.d.ts +2 -0
  272. package/dist/components/ProgressBar/index.d.ts.map +1 -0
  273. package/dist/components/ProgressBar/index.js +6 -0
  274. package/dist/components/ProgressBar/index.js.map +1 -0
  275. package/dist/components/RadioGroup/index.d.ts +2 -0
  276. package/dist/components/RadioGroup/index.d.ts.map +1 -0
  277. package/dist/components/RadioGroup/index.js +8 -0
  278. package/dist/components/RadioGroup/index.js.map +1 -0
  279. package/dist/components/RadioGroup/radio-group.d.ts +4 -4
  280. package/dist/components/RadioGroup/radio-group.d.ts.map +1 -1
  281. package/dist/components/RadioGroup/radio-group.js +2 -7
  282. package/dist/components/RadioGroup/radio-group.js.map +1 -1
  283. package/dist/components/Rating/index.d.ts +2 -0
  284. package/dist/components/Rating/index.d.ts.map +1 -0
  285. package/dist/components/Rating/index.js +6 -0
  286. package/dist/components/Rating/index.js.map +1 -0
  287. package/dist/components/Rating/rating.d.ts +5 -1
  288. package/dist/components/Rating/rating.d.ts.map +1 -1
  289. package/dist/components/Rating/rating.js +1 -1
  290. package/dist/components/Rating/rating.js.map +1 -1
  291. package/dist/components/ScrollArea/index.d.ts +2 -0
  292. package/dist/components/ScrollArea/index.d.ts.map +1 -0
  293. package/dist/components/ScrollArea/index.js +7 -0
  294. package/dist/components/ScrollArea/index.js.map +1 -0
  295. package/dist/components/SegmentedControl/index.d.ts +2 -0
  296. package/dist/components/SegmentedControl/index.d.ts.map +1 -0
  297. package/dist/components/SegmentedControl/index.js +9 -0
  298. package/dist/components/SegmentedControl/index.js.map +1 -0
  299. package/dist/components/SegmentedControl/segmented-control.d.ts +1 -1
  300. package/dist/components/SegmentedControl/segmented-control.d.ts.map +1 -1
  301. package/dist/components/SegmentedControl/segmented-control.js +2 -2
  302. package/dist/components/SegmentedControl/segmented-control.js.map +1 -1
  303. package/dist/components/Select/index.d.ts +2 -0
  304. package/dist/components/Select/index.d.ts.map +1 -0
  305. package/dist/components/Select/index.js +6 -0
  306. package/dist/components/Select/index.js.map +1 -0
  307. package/dist/components/Select/select.d.ts +2 -2
  308. package/dist/components/Select/select.d.ts.map +1 -1
  309. package/dist/components/Select/select.js +5 -3
  310. package/dist/components/Select/select.js.map +1 -1
  311. package/dist/components/SelectMenu/index.d.ts +2 -0
  312. package/dist/components/SelectMenu/index.d.ts.map +1 -0
  313. package/dist/components/SelectMenu/index.js +6 -0
  314. package/dist/components/SelectMenu/index.js.map +1 -0
  315. package/dist/components/SelectMenu/select-menu.d.ts +7 -6
  316. package/dist/components/SelectMenu/select-menu.d.ts.map +1 -1
  317. package/dist/components/SelectMenu/select-menu.js +6 -1
  318. package/dist/components/SelectMenu/select-menu.js.map +1 -1
  319. package/dist/components/SelectionControl/index.d.ts +2 -0
  320. package/dist/components/SelectionControl/index.d.ts.map +1 -0
  321. package/dist/components/SelectionControl/index.js +7 -0
  322. package/dist/components/SelectionControl/index.js.map +1 -0
  323. package/dist/components/SelectionControl/selection-item.d.ts +1 -1
  324. package/dist/components/Separator/index.d.ts +2 -0
  325. package/dist/components/Separator/index.d.ts.map +1 -0
  326. package/dist/components/Separator/index.js +6 -0
  327. package/dist/components/Separator/index.js.map +1 -0
  328. package/dist/components/Sheet/index.d.ts +2 -0
  329. package/dist/components/Sheet/index.d.ts.map +1 -0
  330. package/dist/components/Sheet/index.js +17 -0
  331. package/dist/components/Sheet/index.js.map +1 -0
  332. package/dist/components/Sheet/sheet.d.ts +1 -1
  333. package/dist/components/Sheet/sheet.js.map +1 -1
  334. package/dist/components/Sidebar/index.d.ts +2 -0
  335. package/dist/components/Sidebar/index.d.ts.map +1 -0
  336. package/dist/components/Sidebar/index.js +24 -0
  337. package/dist/components/Sidebar/index.js.map +1 -0
  338. package/dist/components/Sidebar/sidebar.d.ts +5 -5
  339. package/dist/components/Sidebar/sidebar.d.ts.map +1 -1
  340. package/dist/components/Sidebar/sidebar.js +6 -3
  341. package/dist/components/Sidebar/sidebar.js.map +1 -1
  342. package/dist/components/Skeleton/index.d.ts +2 -0
  343. package/dist/components/Skeleton/index.d.ts.map +1 -0
  344. package/dist/components/Skeleton/index.js +6 -0
  345. package/dist/components/Skeleton/index.js.map +1 -0
  346. package/dist/components/Slider/index.d.ts +2 -0
  347. package/dist/components/Slider/index.d.ts.map +1 -0
  348. package/dist/components/Slider/index.js +7 -0
  349. package/dist/components/Slider/index.js.map +1 -0
  350. package/dist/components/Slider/slider.d.ts +3 -3
  351. package/dist/components/Slider/slider.d.ts.map +1 -1
  352. package/dist/components/Slider/slider.js +7 -4
  353. package/dist/components/Slider/slider.js.map +1 -1
  354. package/dist/components/Steps/index.d.ts +2 -0
  355. package/dist/components/Steps/index.d.ts.map +1 -0
  356. package/dist/components/Steps/index.js +12 -0
  357. package/dist/components/Steps/index.js.map +1 -0
  358. package/dist/components/Steps/steps.d.ts.map +1 -1
  359. package/dist/components/Steps/steps.js +19 -5
  360. package/dist/components/Steps/steps.js.map +1 -1
  361. package/dist/components/Switch/index.d.ts +2 -0
  362. package/dist/components/Switch/index.d.ts.map +1 -0
  363. package/dist/components/Switch/index.js +7 -0
  364. package/dist/components/Switch/index.js.map +1 -0
  365. package/dist/components/Switch/switch.d.ts +3 -3
  366. package/dist/components/Switch/switch.js +6 -5
  367. package/dist/components/Switch/switch.js.map +1 -1
  368. package/dist/components/Tabs/index.d.ts +2 -0
  369. package/dist/components/Tabs/index.d.ts.map +1 -0
  370. package/dist/components/Tabs/index.js +10 -0
  371. package/dist/components/Tabs/index.js.map +1 -0
  372. package/dist/components/Tabs/tabs.d.ts +4 -4
  373. package/dist/components/Tabs/tabs.d.ts.map +1 -1
  374. package/dist/components/Tabs/tabs.js +4 -3
  375. package/dist/components/Tabs/tabs.js.map +1 -1
  376. package/dist/components/Tag/index.d.ts +2 -0
  377. package/dist/components/Tag/index.d.ts.map +1 -0
  378. package/dist/components/Tag/index.js +7 -0
  379. package/dist/components/Tag/index.js.map +1 -0
  380. package/dist/components/Tag/tag.d.ts +6 -6
  381. package/dist/components/Tag/tag.d.ts.map +1 -1
  382. package/dist/components/Tag/tag.js +9 -4
  383. package/dist/components/Tag/tag.js.map +1 -1
  384. package/dist/components/Textarea/index.d.ts +2 -0
  385. package/dist/components/Textarea/index.d.ts.map +1 -0
  386. package/dist/components/Textarea/index.js +7 -0
  387. package/dist/components/Textarea/index.js.map +1 -0
  388. package/dist/components/Textarea/textarea.d.ts +5 -10
  389. package/dist/components/Textarea/textarea.d.ts.map +1 -1
  390. package/dist/components/Textarea/textarea.js +6 -4
  391. package/dist/components/Textarea/textarea.js.map +1 -1
  392. package/dist/components/TimePicker/index.d.ts +2 -0
  393. package/dist/components/TimePicker/index.d.ts.map +1 -0
  394. package/dist/components/TimePicker/index.js +6 -0
  395. package/dist/components/TimePicker/index.js.map +1 -0
  396. package/dist/components/TimePicker/time-picker.d.ts +4 -3
  397. package/dist/components/TimePicker/time-picker.d.ts.map +1 -1
  398. package/dist/components/TimePicker/time-picker.js +10 -2
  399. package/dist/components/TimePicker/time-picker.js.map +1 -1
  400. package/dist/components/Toast/index.d.ts +2 -0
  401. package/dist/components/Toast/index.d.ts.map +1 -0
  402. package/dist/components/Toast/index.js +7 -0
  403. package/dist/components/Toast/index.js.map +1 -0
  404. package/dist/components/Toast/toast.d.ts +1 -1
  405. package/dist/components/Tooltip/index.d.ts +2 -0
  406. package/dist/components/Tooltip/index.d.ts.map +1 -0
  407. package/dist/components/Tooltip/index.js +9 -0
  408. package/dist/components/Tooltip/index.js.map +1 -0
  409. package/dist/components/TreeView/index.d.ts +2 -0
  410. package/dist/components/TreeView/index.d.ts.map +1 -0
  411. package/dist/components/TreeView/index.js +8 -0
  412. package/dist/components/TreeView/index.js.map +1 -0
  413. package/dist/components/TreeView/tree-view.d.ts +5 -5
  414. package/dist/components/TreeView/tree-view.d.ts.map +1 -1
  415. package/dist/components/TreeView/tree-view.js +35 -8
  416. package/dist/components/TreeView/tree-view.js.map +1 -1
  417. package/dist/hooks/use-overflow-items.d.ts +10 -6
  418. package/dist/hooks/use-overflow-items.d.ts.map +1 -1
  419. package/dist/hooks/use-overflow-items.js.map +1 -1
  420. package/dist/index.d.ts +68 -67
  421. package/dist/index.d.ts.map +1 -1
  422. package/dist/index.js +29 -5
  423. package/dist/index.js.map +1 -1
  424. package/dist/lib/i18n/i18n-context.d.ts +3 -3
  425. package/dist/patterns/element-anatomy/index.d.ts +2 -0
  426. package/dist/patterns/element-anatomy/index.d.ts.map +1 -0
  427. package/dist/patterns/element-anatomy/index.js +20 -0
  428. package/dist/patterns/element-anatomy/index.js.map +1 -0
  429. package/dist/patterns/element-anatomy/item-anatomy.d.ts +6 -5
  430. package/dist/patterns/element-anatomy/item-anatomy.d.ts.map +1 -1
  431. package/dist/patterns/element-anatomy/item-anatomy.js +1 -1
  432. package/dist/patterns/element-anatomy/item-anatomy.js.map +1 -1
  433. package/dist/patterns/header-canonical/index.d.ts +2 -0
  434. package/dist/patterns/header-canonical/index.d.ts.map +1 -0
  435. package/dist/patterns/header-canonical/index.js +5 -0
  436. package/dist/patterns/header-canonical/index.js.map +1 -0
  437. package/dist/patterns/horizontal-overflow/horizontal-overflow.d.ts +1 -1
  438. package/dist/patterns/horizontal-overflow/index.d.ts +2 -0
  439. package/dist/patterns/horizontal-overflow/index.d.ts.map +1 -0
  440. package/dist/patterns/horizontal-overflow/index.js +14 -0
  441. package/dist/patterns/horizontal-overflow/index.js.map +1 -0
  442. package/dist/patterns/overlay-surface/index.d.ts +2 -0
  443. package/dist/patterns/overlay-surface/index.d.ts.map +1 -0
  444. package/dist/patterns/overlay-surface/index.js +7 -0
  445. package/dist/patterns/overlay-surface/index.js.map +1 -0
  446. package/dist/patterns/resize-handle/index.d.ts +2 -0
  447. package/dist/patterns/resize-handle/index.d.ts.map +1 -0
  448. package/dist/patterns/resize-handle/index.js +5 -0
  449. package/dist/patterns/resize-handle/index.js.map +1 -0
  450. package/dist/tokens/motion/motion.d.ts +1 -1
  451. package/dist/tokens/motion/motion.d.ts.map +1 -1
  452. package/dist/tokens/motion/motion.js.map +1 -1
  453. package/dist/tokens/uiSize/icon-size.d.ts +4 -5
  454. package/dist/tokens/uiSize/icon-size.d.ts.map +1 -1
  455. package/ds-canonical/commands/README.md +26 -0
  456. package/ds-canonical/commands/gov-status.md +79 -0
  457. package/ds-canonical/hooks/README.md +145 -0
  458. package/ds-canonical/hooks/_log-fire.sh +44 -0
  459. package/ds-canonical/hooks/auto_regen_ds_barrel.sh +58 -0
  460. package/ds-canonical/hooks/block_prototype_imports.py +111 -0
  461. package/ds-canonical/hooks/check_addon_subdir_ship.sh +76 -0
  462. package/ds-canonical/hooks/check_audit_post_report_validator.sh +136 -0
  463. package/ds-canonical/hooks/check_audit_sample_escape.sh +73 -0
  464. package/ds-canonical/hooks/check_benchmark_citation.sh +106 -0
  465. package/ds-canonical/hooks/check_canonical_propagation.sh +189 -0
  466. package/ds-canonical/hooks/check_chrome_header_avatar_canonical.sh +87 -0
  467. package/ds-canonical/hooks/check_codex_brief_invariants.sh +115 -0
  468. package/ds-canonical/hooks/check_codex_collab_5step.sh +108 -0
  469. package/ds-canonical/hooks/check_consumer_app_story_title.sh +81 -0
  470. package/ds-canonical/hooks/check_consumer_ds_primitive_misuse.sh +115 -0
  471. package/ds-canonical/hooks/check_consumer_no_ds_catalog.sh +98 -0
  472. package/ds-canonical/hooks/check_consumer_story_baseline.sh +76 -0
  473. package/ds-canonical/hooks/check_data_table_size_num_to_meta_width.sh +68 -0
  474. package/ds-canonical/hooks/check_datatable_invariants.sh +117 -0
  475. package/ds-canonical/hooks/check_dim_count_drift.sh +72 -0
  476. package/ds-canonical/hooks/check_ds_anchor_preflight.sh +132 -0
  477. package/ds-canonical/hooks/check_escape_marker_abuse.sh +126 -0
  478. package/ds-canonical/hooks/check_field_controls_contracts.sh +110 -0
  479. package/ds-canonical/hooks/check_field_family_invariants.sh +240 -0
  480. package/ds-canonical/hooks/check_file_size_budget.sh +60 -0
  481. package/ds-canonical/hooks/check_fork_user_plugin_install.sh +79 -0
  482. package/ds-canonical/hooks/check_full_story_visual_interaction_sweep.sh +71 -0
  483. package/ds-canonical/hooks/check_item_list_gap.sh +54 -0
  484. package/ds-canonical/hooks/check_layout_space_magic_numbers.sh +84 -0
  485. package/ds-canonical/hooks/check_main_branch_workbench.sh +93 -0
  486. package/ds-canonical/hooks/check_naming_and_abstraction.sh +165 -0
  487. package/ds-canonical/hooks/check_opacity_token_usage.sh +149 -0
  488. package/ds-canonical/hooks/check_orphan_ds_css.sh +66 -0
  489. package/ds-canonical/hooks/check_overlay_open_focus_escape_probe.sh +75 -0
  490. package/ds-canonical/hooks/check_pattern_invariants.sh +196 -0
  491. package/ds-canonical/hooks/check_peoplepicker_ssot_drift.sh +56 -0
  492. package/ds-canonical/hooks/check_pixel_quantified_audit.sh +53 -0
  493. package/ds-canonical/hooks/check_plugin_freshness.sh +68 -0
  494. package/ds-canonical/hooks/check_post_main_ssot_propagate.sh +90 -0
  495. package/ds-canonical/hooks/check_propose_cite_required.sh +88 -0
  496. package/ds-canonical/hooks/check_propose_plain_chinese.sh +74 -0
  497. package/ds-canonical/hooks/check_propose_pre_grep_verify.sh +70 -0
  498. package/ds-canonical/hooks/check_propose_without_benchmark.sh +63 -0
  499. package/ds-canonical/hooks/check_select_all_canonical.sh +58 -0
  500. package/ds-canonical/hooks/check_sidebar_menu_button_implicit_wrap.sh +86 -0
  501. package/ds-canonical/hooks/check_solo_workflow.sh +307 -0
  502. package/ds-canonical/hooks/check_spec_class_drift.sh +88 -0
  503. package/ds-canonical/hooks/check_story_invariants.sh +611 -0
  504. package/ds-canonical/hooks/check_storybook_addon_preset_cjs.sh +87 -0
  505. package/ds-canonical/hooks/check_substantive_edit_approval_preflight.sh +110 -0
  506. package/ds-canonical/hooks/check_tailwind_wildcard_in_docs.sh +73 -0
  507. package/ds-canonical/hooks/check_wrapper_primitive_schema_drift.sh +104 -0
  508. package/ds-canonical/hooks/chrome_header_dispatcher.sh +53 -0
  509. package/ds-canonical/hooks/enforce_home_charter.sh +44 -0
  510. package/ds-canonical/hooks/inject_deploy_url_after_push.sh +182 -0
  511. package/ds-canonical/hooks/inject_pending_self_audit.sh +248 -0
  512. package/ds-canonical/hooks/lib/_app_shell_primary_header_consistency.sh +70 -0
  513. package/ds-canonical/hooks/lib/_approval_re.sh +33 -0
  514. package/ds-canonical/hooks/lib/_chrome_header_handcraft.sh +70 -0
  515. package/ds-canonical/hooks/lib/_code_quality.sh +73 -0
  516. package/ds-canonical/hooks/lib/_cva_default_sync.sh +69 -0
  517. package/ds-canonical/hooks/lib/_governance_coverage_check.sh +49 -0
  518. package/ds-canonical/hooks/lib/_hardcoded_strings.sh +163 -0
  519. package/ds-canonical/hooks/lib/_header_with_tabs_border.sh +87 -0
  520. package/ds-canonical/hooks/lib/_layout_space_canonical.sh +56 -0
  521. package/ds-canonical/hooks/lib/_overlay_handcraft.sh +141 -0
  522. package/ds-canonical/hooks/lib/_person_data_richness.sh +42 -0
  523. package/ds-canonical/hooks/lib/_story_compile_drift.sh +48 -0
  524. package/ds-canonical/hooks/lib/_tab_lg_chrome_header_equal.sh +70 -0
  525. package/ds-canonical/hooks/lib/_token_hygiene.sh +96 -0
  526. package/ds-canonical/hooks/log_governance_fires.sh +50 -0
  527. package/ds-canonical/hooks/log_skill_invokes.sh +41 -0
  528. package/ds-canonical/hooks/post_edit_dispatcher.sh +62 -0
  529. package/ds-canonical/hooks/retired/check_anatomy_section_numbering.sh +106 -0
  530. package/ds-canonical/hooks/retired/check_avatar_hovercard.sh +90 -0
  531. package/ds-canonical/hooks/retired/check_button_icon_literal.sh.retired-2026-04-28 +38 -0
  532. package/ds-canonical/hooks/retired/check_container_breathing.sh +142 -0
  533. package/ds-canonical/hooks/retired/check_governance_compliance.sh +61 -0
  534. package/ds-canonical/hooks/retired/check_icon_only_padding_formula.sh +104 -0
  535. package/ds-canonical/hooks/retired/check_item_content_primitive.sh +150 -0
  536. package/ds-canonical/hooks/retired/check_item_list_gap.sh +153 -0
  537. package/ds-canonical/hooks/retired/check_sideoffset_canonical.sh +65 -0
  538. package/ds-canonical/hooks/retired/check_spec_iteration_tag.sh +87 -0
  539. package/ds-canonical/hooks/retired/check_ssot_consultation.sh +88 -0
  540. package/ds-canonical/hooks/retired/check_sync_update.sh +20 -0
  541. package/ds-canonical/hooks/retired/check_third_party_dom_verified.sh +95 -0
  542. package/ds-canonical/hooks/retired/enforce_home_charter.sh +125 -0
  543. package/ds-canonical/hooks/retired/post_edit_canonical_interrogate.sh +109 -0
  544. package/ds-canonical/hooks/retired/pre_edit_spec_check.sh +68 -0
  545. package/ds-canonical/hooks/retired/pre_new_component_spec.sh +39 -0
  546. package/ds-canonical/hooks/retired/pre_write_subsumption_check.sh +112 -0
  547. package/ds-canonical/hooks/retired/stop_meta_self_audit.sh.retired-2026-05-13 +76 -0
  548. package/ds-canonical/hooks/retired/tests/test_check_anatomy_section_numbering.sh +14 -0
  549. package/ds-canonical/hooks/retired/tests/test_check_avatar_hovercard.sh +15 -0
  550. package/ds-canonical/hooks/retired/tests/test_check_container_breathing.sh +15 -0
  551. package/ds-canonical/hooks/retired/tests/test_check_governance_compliance.sh +15 -0
  552. package/ds-canonical/hooks/retired/tests/test_check_icon_only_padding_formula.sh +79 -0
  553. package/ds-canonical/hooks/retired/tests/test_check_item_content_primitive.sh +15 -0
  554. package/ds-canonical/hooks/retired/tests/test_check_item_list_gap.sh +163 -0
  555. package/ds-canonical/hooks/retired/tests/test_check_sideoffset_canonical.sh +15 -0
  556. package/ds-canonical/hooks/retired/tests/test_check_spec_iteration_tag.sh +15 -0
  557. package/ds-canonical/hooks/retired/tests/test_check_ssot_consultation.sh +15 -0
  558. package/ds-canonical/hooks/retired/tests/test_check_sync_update.sh +14 -0
  559. package/ds-canonical/hooks/retired/tests/test_check_third_party_dom_verified.sh +15 -0
  560. package/ds-canonical/hooks/retired/tests/test_enforce_home_charter.sh +15 -0
  561. package/ds-canonical/hooks/retired/tests/test_pre_edit_spec_check.sh +15 -0
  562. package/ds-canonical/hooks/retired/tests/test_pre_new_component_spec.sh +15 -0
  563. package/ds-canonical/hooks/retired/tests/test_pre_write_subsumption_check.sh +63 -0
  564. package/ds-canonical/hooks/session_start_governance_check.sh +305 -0
  565. package/ds-canonical/hooks/stop_passive_logging.sh +322 -0
  566. package/ds-canonical/hooks/stop_self_audit.sh +513 -0
  567. package/ds-canonical/hooks/tests/KNOWN-BROKEN.md +15 -0
  568. package/ds-canonical/hooks/tests/run-all.sh +76 -0
  569. package/ds-canonical/hooks/tests/test_auto_regen_ds_barrel.sh +180 -0
  570. package/ds-canonical/hooks/tests/test_block_prototype_imports.sh +143 -0
  571. package/ds-canonical/hooks/tests/test_check_addon_subdir_ship.sh +170 -0
  572. package/ds-canonical/hooks/tests/test_check_app_shell_primary_header_consistency.sh +140 -0
  573. package/ds-canonical/hooks/tests/test_check_audit_post_report_validator.sh +127 -0
  574. package/ds-canonical/hooks/tests/test_check_audit_sample_escape.sh +93 -0
  575. package/ds-canonical/hooks/tests/test_check_benchmark_citation.sh +115 -0
  576. package/ds-canonical/hooks/tests/test_check_canonical_propagation.sh +133 -0
  577. package/ds-canonical/hooks/tests/test_check_chrome_header_avatar_canonical.sh +198 -0
  578. package/ds-canonical/hooks/tests/test_check_chrome_header_handcraft.sh +123 -0
  579. package/ds-canonical/hooks/tests/test_check_code_quality.sh +15 -0
  580. package/ds-canonical/hooks/tests/test_check_codex_brief_invariants.sh +208 -0
  581. package/ds-canonical/hooks/tests/test_check_codex_collab_5step.sh +96 -0
  582. package/ds-canonical/hooks/tests/test_check_consumer_app_story_title.sh +163 -0
  583. package/ds-canonical/hooks/tests/test_check_consumer_ds_primitive_misuse.sh +202 -0
  584. package/ds-canonical/hooks/tests/test_check_consumer_no_ds_catalog.sh +201 -0
  585. package/ds-canonical/hooks/tests/test_check_consumer_story_baseline.sh +200 -0
  586. package/ds-canonical/hooks/tests/test_check_cva_default_sync.sh +15 -0
  587. package/ds-canonical/hooks/tests/test_check_data_table_size_num_to_meta_width.sh +52 -0
  588. package/ds-canonical/hooks/tests/test_check_datatable_invariants.sh +122 -0
  589. package/ds-canonical/hooks/tests/test_check_dim_count_drift.sh +98 -0
  590. package/ds-canonical/hooks/tests/test_check_ds_anchor_preflight.sh +104 -0
  591. package/ds-canonical/hooks/tests/test_check_escape_marker_abuse.sh +192 -0
  592. package/ds-canonical/hooks/tests/test_check_field_controls_contracts.sh +126 -0
  593. package/ds-canonical/hooks/tests/test_check_field_family_invariants.sh +194 -0
  594. package/ds-canonical/hooks/tests/test_check_file_size_budget.sh +32 -0
  595. package/ds-canonical/hooks/tests/test_check_fork_user_plugin_install.sh +45 -0
  596. package/ds-canonical/hooks/tests/test_check_full_story_visual_interaction_sweep.sh +190 -0
  597. package/ds-canonical/hooks/tests/test_check_hardcoded_strings.sh +14 -0
  598. package/ds-canonical/hooks/tests/test_check_header_with_tabs_border.sh +110 -0
  599. package/ds-canonical/hooks/tests/test_check_item_list_gap.sh +44 -0
  600. package/ds-canonical/hooks/tests/test_check_layout_space_canonical.sh +73 -0
  601. package/ds-canonical/hooks/tests/test_check_layout_space_magic_numbers.sh +196 -0
  602. package/ds-canonical/hooks/tests/test_check_main_branch_workbench.sh +147 -0
  603. package/ds-canonical/hooks/tests/test_check_naming_and_abstraction.sh +136 -0
  604. package/ds-canonical/hooks/tests/test_check_opacity_token_usage.sh +110 -0
  605. package/ds-canonical/hooks/tests/test_check_orphan_ds_css.sh +212 -0
  606. package/ds-canonical/hooks/tests/test_check_overlay_handcraft.sh +126 -0
  607. package/ds-canonical/hooks/tests/test_check_overlay_open_focus_escape_probe.sh +191 -0
  608. package/ds-canonical/hooks/tests/test_check_pattern_invariants.sh +148 -0
  609. package/ds-canonical/hooks/tests/test_check_peoplepicker_ssot_drift.sh +108 -0
  610. package/ds-canonical/hooks/tests/test_check_person_data_richness.sh +58 -0
  611. package/ds-canonical/hooks/tests/test_check_pixel_quantified_audit.sh +142 -0
  612. package/ds-canonical/hooks/tests/test_check_propose_cite_required.sh +180 -0
  613. package/ds-canonical/hooks/tests/test_check_propose_plain_chinese.sh +126 -0
  614. package/ds-canonical/hooks/tests/test_check_propose_pre_grep_verify.sh +117 -0
  615. package/ds-canonical/hooks/tests/test_check_propose_without_benchmark.sh +55 -0
  616. package/ds-canonical/hooks/tests/test_check_select_all_canonical.sh +125 -0
  617. package/ds-canonical/hooks/tests/test_check_sidebar_menu_button_implicit_wrap.sh +224 -0
  618. package/ds-canonical/hooks/tests/test_check_solo_workflow.sh +201 -0
  619. package/ds-canonical/hooks/tests/test_check_spec_class_drift.sh +135 -0
  620. package/ds-canonical/hooks/tests/test_check_story_anatomy.sh.broken +197 -0
  621. package/ds-canonical/hooks/tests/test_check_story_category.sh.broken +187 -0
  622. package/ds-canonical/hooks/tests/test_check_story_compile_drift.sh +15 -0
  623. package/ds-canonical/hooks/tests/test_check_story_invariants.sh +224 -0
  624. package/ds-canonical/hooks/tests/test_check_story_name_jargon.sh.broken +53 -0
  625. package/ds-canonical/hooks/tests/test_check_story_slot_split.sh +156 -0
  626. package/ds-canonical/hooks/tests/test_check_storybook_addon_preset_cjs.sh +199 -0
  627. package/ds-canonical/hooks/tests/test_check_substantive_edit_approval_preflight.sh +176 -0
  628. package/ds-canonical/hooks/tests/test_check_tab_lg_chrome_header_equal.sh +141 -0
  629. package/ds-canonical/hooks/tests/test_check_tailwind_wildcard_in_docs.sh +182 -0
  630. package/ds-canonical/hooks/tests/test_check_token_hygiene.sh +21 -0
  631. package/ds-canonical/hooks/tests/test_check_wrapper_primitive_schema_drift.sh +169 -0
  632. package/ds-canonical/hooks/tests/test_enforce_home_charter.sh +77 -0
  633. package/ds-canonical/hooks/tests/test_inject_pending_self_audit.sh +125 -0
  634. package/ds-canonical/hooks/tests/test_log_governance_fires.sh +10 -0
  635. package/ds-canonical/hooks/tests/test_log_skill_invokes.sh +7 -0
  636. package/ds-canonical/hooks/tests/test_post_edit_dispatcher.sh +108 -0
  637. package/ds-canonical/hooks/tests/test_session_start_governance_check.sh +154 -0
  638. package/ds-canonical/hooks/tests/test_stop_capture_metrics.sh +95 -0
  639. package/ds-canonical/hooks/tests/test_stop_governance_drift_check.sh.broken +125 -0
  640. package/ds-canonical/hooks/tests/test_stop_harvest_corrections.sh +10 -0
  641. package/ds-canonical/hooks/tests/test_stop_passive_logging.sh +100 -0
  642. package/ds-canonical/hooks/tests/test_stop_self_audit.sh +91 -0
  643. package/ds-canonical/hooks/tests/test_stop_tsc_sanity.sh +10 -0
  644. package/ds-canonical/references/README.md +46 -0
  645. package/ds-canonical/references/audit-coverage-vs-24-checklist.md +74 -0
  646. package/ds-canonical/references/build-ui-canonicals.md +69 -0
  647. package/ds-canonical/references/composition-fidelity.md +47 -0
  648. package/ds-canonical/references/cva-patterns.md +41 -0
  649. package/ds-canonical/references/drag-canonical.md +331 -0
  650. package/ds-canonical/references/item-anatomy-recipe.md +225 -0
  651. package/ds-canonical/references/naming-conventions.md +56 -0
  652. package/ds-canonical/references/principle-dim-map.json +513 -0
  653. package/ds-canonical/references/props-naming.md +45 -0
  654. package/ds-canonical/references/scenario-definition.md +146 -0
  655. package/ds-canonical/references/spec-rules.md +58 -0
  656. package/ds-canonical/references/ssot-consultation.md +63 -0
  657. package/ds-canonical/references/ssot-index.md +40 -0
  658. package/ds-canonical/references/story-baseline-registry.json +79 -0
  659. package/ds-canonical/references/structural-token-retention.md +42 -0
  660. package/ds-canonical/references/tailwind-gotchas.md +87 -0
  661. package/ds-canonical/references/ui-dev-rules.md +60 -0
  662. package/ds-canonical/rules/README.md +34 -0
  663. package/ds-canonical/rules/meta-patterns.md +87 -0
  664. package/ds-canonical/rules/self-verify.md +55 -0
  665. package/ds-canonical/rules/spec-rules.md +25 -0
  666. package/ds-canonical/rules/story-rules.md +65 -0
  667. package/ds-canonical/rules/ui-development.md +87 -0
  668. package/ds-canonical/skills/README.md +88 -0
  669. package/ds-canonical/skills/bug-fix-rhythm/SKILL.md +181 -0
  670. package/ds-canonical/skills/code-quality-audit/SKILL.md +63 -0
  671. package/ds-canonical/skills/codex-collab/SKILL.md +249 -0
  672. package/ds-canonical/skills/codex-collab/references/brief-template.md +48 -0
  673. package/ds-canonical/skills/codex-collab/references/transport.md +58 -0
  674. package/ds-canonical/skills/codify-corrections/SKILL.md +184 -0
  675. package/ds-canonical/skills/codify-principle/SKILL.md +151 -0
  676. package/ds-canonical/skills/component-quality-gate/SKILL.md +102 -0
  677. package/ds-canonical/skills/component-quality-gate/references/checklist.md +79 -0
  678. package/ds-canonical/skills/deep-audit-cross-codex/SKILL.md +233 -0
  679. package/ds-canonical/skills/deep-audit-cross-codex/references/phase-a-workflow.md +123 -0
  680. package/ds-canonical/skills/deep-audit-cross-codex/references/phase-b-codex-brief.md +186 -0
  681. package/ds-canonical/skills/deep-audit-cross-codex/references/skill-relationships-antipatterns-benchmarks.md +30 -0
  682. package/ds-canonical/skills/deep-audit-cross-codex/references/triage-rubric.md +69 -0
  683. package/ds-canonical/skills/deep-audit-cross-codex/references/upstream-directives-r-mapping.md +33 -0
  684. package/ds-canonical/skills/delivery-handoff/SKILL.md +229 -0
  685. package/ds-canonical/skills/delivery-handoff/references/flow-diagram.md +180 -0
  686. package/ds-canonical/skills/delivery-handoff/references/handoff-template.md +177 -0
  687. package/ds-canonical/skills/delivery-handoff/references/inventory-checklist.md +196 -0
  688. package/ds-canonical/skills/design-system-audit/SKILL.md +384 -0
  689. package/ds-canonical/skills/design-system-audit/references/audit-prompts.md +1317 -0
  690. package/ds-canonical/skills/design-system-audit/references/checkpoints.md +240 -0
  691. package/ds-canonical/skills/design-system-audit/references/historical-bugs.md +240 -0
  692. package/ds-canonical/skills/design-system-audit/references/principle-audit-protocol.md +378 -0
  693. package/ds-canonical/skills/design-system-audit/references/rule-placement.md +175 -0
  694. package/ds-canonical/skills/ensure-canonical/SKILL.md +196 -0
  695. package/ds-canonical/skills/governance-health/SKILL.md +147 -0
  696. package/ds-canonical/skills/knowledge-prune/SKILL.md +250 -0
  697. package/ds-canonical/skills/knowledge-prune/references/phase-z-cross-repo-ssot-propagation.md +11 -0
  698. package/ds-canonical/skills/knowledge-prune/references/prune-dimensions-d5-d10.md +55 -0
  699. package/ds-canonical/skills/knowledge-prune/references/world-class-prune-alignment.md +7 -0
  700. package/ds-canonical/skills/new-component/SKILL.md +170 -0
  701. package/ds-canonical/skills/new-component/references/new-component-checklist.md +85 -0
  702. package/ds-canonical/skills/performance-audit/SKILL.md +107 -0
  703. package/ds-canonical/skills/product-ui-audit/SKILL.md +230 -0
  704. package/ds-canonical/skills/product-ui-audit/references/audit-checks.md +246 -0
  705. package/ds-canonical/skills/product-ui-audit/references/common-misuses.md +329 -0
  706. package/ds-canonical/skills/product-ui-audit/references/report-template.md +159 -0
  707. package/ds-canonical/skills/propose-options/SKILL.md +177 -0
  708. package/ds-canonical/skills/prototype/SKILL.md +244 -0
  709. package/ds-canonical/skills/prototype/references/audit-checks.md +37 -0
  710. package/ds-canonical/skills/prototype/references/benchmark-sources.md +94 -0
  711. package/ds-canonical/skills/prototype/references/checkpoints.md +191 -0
  712. package/ds-canonical/skills/prototype/references/evaluation-matrix.md +141 -0
  713. package/ds-canonical/skills/prototype/references/ooux-template.md +198 -0
  714. package/ds-canonical/skills/prototype/references/proposal-template.md +229 -0
  715. package/ds-canonical/skills/scan-similar-bugs/SKILL.md +198 -0
  716. package/ds-canonical/skills/story-auto-compile-migrate/SKILL.md +159 -0
  717. package/ds-canonical/skills/story-writing/SKILL.md +122 -0
  718. package/ds-canonical/skills/story-writing/references/anatomy-standard.md +217 -0
  719. package/ds-canonical/skills/story-writing/references/category-templates.md +174 -0
  720. package/ds-canonical/skills/story-writing/references/example-selection.md +70 -0
  721. package/ds-canonical/skills/story-writing/references/self-check.md +20 -0
  722. package/ds-canonical/skills/ux-audit/SKILL.md +130 -0
  723. package/ds-canonical/skills/visual-audit/SKILL.md +245 -0
  724. package/ds-canonical/skills/visual-audit/output/.gitkeep +0 -0
  725. package/ds-canonical/skills/visual-audit/references/audit-architecture.md +100 -0
  726. package/ds-canonical/skills/visual-audit/references/visual-checklist.md +297 -0
  727. package/ds-canonical/skills/visual-audit/references/world-class-benchmarks.md +198 -0
  728. package/ds-canonical/templates/_README.md +23 -0
  729. package/ds-canonical/templates/dashboard-app.tsx +145 -0
  730. package/ds-story-manifest.json +1685 -0
  731. package/package.json +22 -13
  732. package/src/components/Accordion/accordion.anatomy.stories.tsx +496 -0
  733. package/src/components/Accordion/accordion.principles.stories.tsx +360 -0
  734. package/src/components/Accordion/accordion.spec.md +114 -0
  735. package/src/components/Accordion/accordion.stories.tsx +190 -0
  736. package/src/components/Accordion/accordion.tsx +3 -0
  737. package/src/components/Accordion/index.ts +5 -0
  738. package/src/components/Alert/alert.anatomy.stories.tsx +238 -0
  739. package/src/components/Alert/alert.principles.stories.tsx +220 -0
  740. package/src/components/Alert/alert.spec.md +197 -0
  741. package/src/components/Alert/alert.stories.tsx +139 -0
  742. package/src/components/Alert/index.ts +5 -0
  743. package/src/components/AppShell/_demo-helpers.tsx +5 -5
  744. package/src/components/AppShell/app-shell.anatomy.stories.tsx +176 -0
  745. package/src/components/AppShell/app-shell.principles.stories.tsx +81 -0
  746. package/src/components/AppShell/app-shell.spec.md +330 -0
  747. package/src/components/AppShell/app-shell.stories.tsx +435 -0
  748. package/src/components/AppShell/index.ts +5 -0
  749. package/src/components/AspectRatio/aspect-ratio.anatomy.stories.tsx +208 -0
  750. package/src/components/AspectRatio/aspect-ratio.principles.stories.tsx +303 -0
  751. package/src/components/AspectRatio/aspect-ratio.spec.md +134 -0
  752. package/src/components/AspectRatio/aspect-ratio.stories.tsx +170 -0
  753. package/src/components/AspectRatio/index.ts +5 -0
  754. package/src/components/Avatar/avatar.anatomy.stories.tsx +700 -0
  755. package/src/components/Avatar/avatar.principles.stories.tsx +245 -0
  756. package/src/components/Avatar/avatar.spec.md +331 -0
  757. package/src/components/Avatar/avatar.stories.tsx +135 -0
  758. package/src/components/Avatar/avatar.tsx +21 -16
  759. package/src/components/Avatar/index.ts +5 -0
  760. package/src/components/Badge/badge.anatomy.stories.tsx +588 -0
  761. package/src/components/Badge/badge.principles.stories.tsx +393 -0
  762. package/src/components/Badge/badge.spec.md +380 -0
  763. package/src/components/Badge/badge.stories.tsx +82 -0
  764. package/src/components/Badge/index.ts +5 -0
  765. package/src/components/Breadcrumb/breadcrumb.anatomy.stories.tsx +458 -0
  766. package/src/components/Breadcrumb/breadcrumb.principles.stories.tsx +340 -0
  767. package/src/components/Breadcrumb/breadcrumb.spec.md +258 -0
  768. package/src/components/Breadcrumb/breadcrumb.stories.tsx +332 -0
  769. package/src/components/Breadcrumb/breadcrumb.tsx +27 -17
  770. package/src/components/Breadcrumb/index.ts +5 -0
  771. package/src/components/BulkActionBar/bulk-action-bar.anatomy.stories.tsx +224 -0
  772. package/src/components/BulkActionBar/bulk-action-bar.principles.stories.tsx +242 -0
  773. package/src/components/BulkActionBar/bulk-action-bar.spec.md +210 -0
  774. package/src/components/BulkActionBar/bulk-action-bar.stories.tsx +136 -0
  775. package/src/components/BulkActionBar/bulk-action-bar.tsx +2 -1
  776. package/src/components/BulkActionBar/index.ts +5 -0
  777. package/src/components/Button/button.anatomy.stories.tsx +710 -0
  778. package/src/components/Button/button.principles.stories.tsx +370 -0
  779. package/src/components/Button/button.spec.md +461 -0
  780. package/src/components/Button/button.stories.tsx +362 -0
  781. package/src/components/Button/index.ts +5 -0
  782. package/src/components/Calendar/calendar.anatomy.stories.tsx +218 -0
  783. package/src/components/Calendar/calendar.principles.stories.tsx +143 -0
  784. package/src/components/Calendar/calendar.spec.md +244 -0
  785. package/src/components/Calendar/calendar.stories.tsx +88 -0
  786. package/src/components/Calendar/calendar.tsx +22 -2
  787. package/src/components/Calendar/index.ts +5 -0
  788. package/src/components/Carousel/carousel.anatomy.stories.tsx +516 -0
  789. package/src/components/Carousel/carousel.principles.stories.tsx +330 -0
  790. package/src/components/Carousel/carousel.spec.md +253 -0
  791. package/src/components/Carousel/carousel.stories.tsx +121 -0
  792. package/src/components/Carousel/carousel.tsx +7 -3
  793. package/src/components/Carousel/index.ts +5 -0
  794. package/src/components/Chart/chart.anatomy.stories.tsx +307 -0
  795. package/src/components/Chart/chart.principles.stories.tsx +436 -0
  796. package/src/components/Chart/chart.spec.md +155 -0
  797. package/src/components/Chart/chart.stories.tsx +268 -0
  798. package/src/components/Chart/chart.tsx +3 -0
  799. package/src/components/Chart/index.ts +5 -0
  800. package/src/components/Checkbox/checkbox.anatomy.stories.tsx +626 -0
  801. package/src/components/Checkbox/checkbox.principles.stories.tsx +213 -0
  802. package/src/components/Checkbox/checkbox.spec.md +344 -0
  803. package/src/components/Checkbox/checkbox.stories.tsx +114 -0
  804. package/src/components/Checkbox/checkbox.tsx +12 -12
  805. package/src/components/Checkbox/index.ts +5 -0
  806. package/src/components/Chip/chip.anatomy.stories.tsx +422 -0
  807. package/src/components/Chip/chip.principles.stories.tsx +222 -0
  808. package/src/components/Chip/chip.spec.md +238 -0
  809. package/src/components/Chip/chip.stories.tsx +88 -0
  810. package/src/components/Chip/chip.tsx +4 -4
  811. package/src/components/Chip/index.ts +5 -0
  812. package/src/components/CircularProgress/circular-progress.anatomy.stories.tsx +176 -0
  813. package/src/components/CircularProgress/circular-progress.principles.stories.tsx +258 -0
  814. package/src/components/CircularProgress/circular-progress.spec.md +268 -0
  815. package/src/components/CircularProgress/circular-progress.stories.tsx +160 -0
  816. package/src/components/CircularProgress/index.ts +5 -0
  817. package/src/components/Coachmark/coachmark-story-helpers.tsx +39 -0
  818. package/src/components/Coachmark/coachmark.anatomy.stories.tsx +356 -0
  819. package/src/components/Coachmark/coachmark.principles.stories.tsx +369 -0
  820. package/src/components/Coachmark/coachmark.spec.md +230 -0
  821. package/src/components/Coachmark/coachmark.stories.tsx +214 -0
  822. package/src/components/Coachmark/coachmark.tsx +12 -3
  823. package/src/components/Coachmark/index.ts +5 -0
  824. package/src/components/Combobox/combobox.anatomy.stories.tsx +918 -0
  825. package/src/components/Combobox/combobox.principles.stories.tsx +239 -0
  826. package/src/components/Combobox/combobox.spec.md +182 -0
  827. package/src/components/Combobox/combobox.stories.tsx +184 -0
  828. package/src/components/Combobox/combobox.tsx +21 -8
  829. package/src/components/Combobox/index.ts +5 -0
  830. package/src/components/Command/command.anatomy.stories.tsx +105 -0
  831. package/src/components/Command/command.principles.stories.tsx +88 -0
  832. package/src/components/Command/command.spec.md +171 -0
  833. package/src/components/Command/command.stories.tsx +280 -0
  834. package/src/components/Command/index.ts +5 -0
  835. package/src/components/DataTable/data-table-filter-panel.tsx +1 -1
  836. package/src/components/DataTable/data-table.anatomy.stories.tsx +523 -0
  837. package/src/components/DataTable/data-table.principles.stories.tsx +265 -0
  838. package/src/components/DataTable/data-table.spec.md +526 -0
  839. package/src/components/DataTable/data-table.stories.tsx +1892 -0
  840. package/src/components/DataTable/data-table.tsx +4 -4
  841. package/src/components/DataTable/index.ts +5 -0
  842. package/src/components/DateGrid/date-grid.anatomy.stories.tsx +583 -0
  843. package/src/components/DateGrid/date-grid.principles.stories.tsx +338 -0
  844. package/src/components/DateGrid/date-grid.spec.md +215 -0
  845. package/src/components/DateGrid/date-grid.stories.tsx +195 -0
  846. package/src/components/DateGrid/date-grid.tsx +13 -13
  847. package/src/components/DateGrid/index.ts +5 -0
  848. package/src/components/DatePicker/date-picker.anatomy.stories.tsx +952 -0
  849. package/src/components/DatePicker/date-picker.principles.stories.tsx +205 -0
  850. package/src/components/DatePicker/date-picker.spec.md +333 -0
  851. package/src/components/DatePicker/date-picker.stories.tsx +353 -0
  852. package/src/components/DatePicker/date-picker.tsx +12 -1
  853. package/src/components/DatePicker/index.ts +5 -0
  854. package/src/components/DescriptionList/description-list.anatomy.stories.tsx +252 -0
  855. package/src/components/DescriptionList/description-list.principles.stories.tsx +323 -0
  856. package/src/components/DescriptionList/description-list.spec.md +214 -0
  857. package/src/components/DescriptionList/description-list.stories.tsx +128 -0
  858. package/src/components/DescriptionList/description-list.tsx +2 -2
  859. package/src/components/DescriptionList/index.ts +5 -0
  860. package/src/components/Dialog/dialog.anatomy.stories.tsx +484 -0
  861. package/src/components/Dialog/dialog.principles.stories.tsx +313 -0
  862. package/src/components/Dialog/dialog.spec.md +201 -0
  863. package/src/components/Dialog/dialog.stories.tsx +500 -0
  864. package/src/components/Dialog/dialog.tsx +4 -4
  865. package/src/components/Dialog/index.ts +5 -0
  866. package/src/components/DropdownMenu/dropdown-menu.anatomy.stories.tsx +969 -0
  867. package/src/components/DropdownMenu/dropdown-menu.principles.stories.tsx +340 -0
  868. package/src/components/DropdownMenu/dropdown-menu.spec.md +259 -0
  869. package/src/components/DropdownMenu/dropdown-menu.stories.tsx +288 -0
  870. package/src/components/DropdownMenu/dropdown-menu.tsx +13 -5
  871. package/src/components/DropdownMenu/index.ts +5 -0
  872. package/src/components/Empty/empty.anatomy.stories.tsx +272 -0
  873. package/src/components/Empty/empty.principles.stories.tsx +314 -0
  874. package/src/components/Empty/empty.spec.md +215 -0
  875. package/src/components/Empty/empty.stories.tsx +80 -0
  876. package/src/components/Empty/index.ts +5 -0
  877. package/src/components/Field/field-controls.spec.md +338 -0
  878. package/src/components/Field/field-types.ts +1 -1
  879. package/src/components/Field/field.anatomy.stories.tsx +541 -0
  880. package/src/components/Field/field.principles.stories.tsx +277 -0
  881. package/src/components/Field/field.spec.md +438 -0
  882. package/src/components/Field/field.stories.tsx +552 -0
  883. package/src/components/Field/form-validation.spec.md +150 -0
  884. package/src/components/Field/index.ts +5 -0
  885. package/src/components/FieldControlGroup/field-control-group.anatomy.stories.tsx +117 -0
  886. package/src/components/FieldControlGroup/field-control-group.principles.stories.tsx +117 -0
  887. package/src/components/FieldControlGroup/field-control-group.spec.md +179 -0
  888. package/src/components/FieldControlGroup/field-control-group.stories.tsx +161 -0
  889. package/src/components/FieldControlGroup/index.ts +5 -0
  890. package/src/components/FileItem/file-item.anatomy.stories.tsx +354 -0
  891. package/src/components/FileItem/file-item.principles.stories.tsx +275 -0
  892. package/src/components/FileItem/file-item.spec.md +461 -0
  893. package/src/components/FileItem/file-item.stories.tsx +204 -0
  894. package/src/components/FileItem/index.ts +5 -0
  895. package/src/components/FileUpload/file-upload.anatomy.stories.tsx +457 -0
  896. package/src/components/FileUpload/file-upload.principles.stories.tsx +314 -0
  897. package/src/components/FileUpload/file-upload.spec.md +123 -0
  898. package/src/components/FileUpload/file-upload.stories.tsx +134 -0
  899. package/src/components/FileUpload/file-upload.tsx +4 -4
  900. package/src/components/FileUpload/index.ts +5 -0
  901. package/src/components/FileViewer/file-viewer.anatomy.stories.tsx +1122 -0
  902. package/src/components/FileViewer/file-viewer.principles.stories.tsx +636 -0
  903. package/src/components/FileViewer/file-viewer.spec.md +374 -0
  904. package/src/components/FileViewer/file-viewer.stories.tsx +407 -0
  905. package/src/components/FileViewer/file-viewer.tsx +10 -9
  906. package/src/components/FileViewer/index.ts +5 -0
  907. package/src/components/HoverCard/hover-card.anatomy.stories.tsx +145 -0
  908. package/src/components/HoverCard/hover-card.principles.stories.tsx +222 -0
  909. package/src/components/HoverCard/hover-card.spec.md +157 -0
  910. package/src/components/HoverCard/hover-card.stories.tsx +304 -0
  911. package/src/components/HoverCard/hover-card.tsx +2 -2
  912. package/src/components/HoverCard/index.ts +5 -0
  913. package/src/components/Input/index.ts +5 -0
  914. package/src/components/Input/input.anatomy.stories.tsx +763 -0
  915. package/src/components/Input/input.principles.stories.tsx +292 -0
  916. package/src/components/Input/input.spec.md +195 -0
  917. package/src/components/Input/input.stories.tsx +133 -0
  918. package/src/components/Input/input.tsx +11 -4
  919. package/src/components/LinkInput/index.ts +5 -0
  920. package/src/components/LinkInput/link-input.anatomy.stories.tsx +746 -0
  921. package/src/components/LinkInput/link-input.principles.stories.tsx +182 -0
  922. package/src/components/LinkInput/link-input.spec.md +131 -0
  923. package/src/components/LinkInput/link-input.stories.tsx +132 -0
  924. package/src/components/Menu/index.ts +5 -0
  925. package/src/components/Menu/menu-item.anatomy.stories.tsx +780 -0
  926. package/src/components/Menu/menu-item.principles.stories.tsx +81 -0
  927. package/src/components/Menu/menu-item.spec.md +292 -0
  928. package/src/components/Menu/menu-item.stories.tsx +214 -0
  929. package/src/components/Menu/menu-item.tsx +1 -0
  930. package/src/components/Notice/index.ts +5 -0
  931. package/src/components/Notice/notice.anatomy.stories.tsx +610 -0
  932. package/src/components/Notice/notice.principles.stories.tsx +102 -0
  933. package/src/components/Notice/notice.spec.md +151 -0
  934. package/src/components/Notice/notice.stories.tsx +257 -0
  935. package/src/components/Notice/notice.tsx +1 -0
  936. package/src/components/NumberInput/index.ts +5 -0
  937. package/src/components/NumberInput/number-input.anatomy.stories.tsx +786 -0
  938. package/src/components/NumberInput/number-input.principles.stories.tsx +221 -0
  939. package/src/components/NumberInput/number-input.spec.md +125 -0
  940. package/src/components/NumberInput/number-input.stories.tsx +142 -0
  941. package/src/components/NumberInput/number-input.tsx +2 -1
  942. package/src/components/OverflowIndicator/index.ts +5 -0
  943. package/src/components/OverflowIndicator/overflow-indicator.anatomy.stories.tsx +548 -0
  944. package/src/components/OverflowIndicator/overflow-indicator.principles.stories.tsx +80 -0
  945. package/src/components/OverflowIndicator/overflow-indicator.spec.md +119 -0
  946. package/src/components/OverflowIndicator/overflow-indicator.stories.tsx +274 -0
  947. package/src/components/OverflowIndicator/overflow-indicator.tsx +9 -2
  948. package/src/components/PeoplePicker/index.ts +5 -0
  949. package/src/components/PeoplePicker/people-picker-helpers.ts +5 -5
  950. package/src/components/PeoplePicker/people-picker.anatomy.stories.tsx +418 -0
  951. package/src/components/PeoplePicker/people-picker.principles.stories.tsx +192 -0
  952. package/src/components/PeoplePicker/people-picker.spec.md +278 -0
  953. package/src/components/PeoplePicker/people-picker.stories.tsx +162 -0
  954. package/src/components/PeoplePicker/people-picker.tsx +3 -3
  955. package/src/components/PeoplePicker/person-display.tsx +25 -25
  956. package/src/components/Popover/index.ts +5 -0
  957. package/src/components/Popover/popover.anatomy.stories.tsx +277 -0
  958. package/src/components/Popover/popover.principles.stories.tsx +293 -0
  959. package/src/components/Popover/popover.spec.md +200 -0
  960. package/src/components/Popover/popover.stories.tsx +116 -0
  961. package/src/components/Popover/popover.tsx +2 -2
  962. package/src/components/ProfileCard/index.ts +5 -0
  963. package/src/components/ProfileCard/profile-card.anatomy.stories.tsx +504 -0
  964. package/src/components/ProfileCard/profile-card.principles.stories.tsx +221 -0
  965. package/src/components/ProfileCard/profile-card.spec.md +171 -0
  966. package/src/components/ProfileCard/profile-card.stories.tsx +53 -0
  967. package/src/components/{NameCard/name-card.tsx → ProfileCard/profile-card.tsx} +23 -23
  968. package/src/components/ProgressBar/index.ts +5 -0
  969. package/src/components/ProgressBar/progress-bar.anatomy.stories.tsx +438 -0
  970. package/src/components/ProgressBar/progress-bar.principles.stories.tsx +337 -0
  971. package/src/components/ProgressBar/progress-bar.spec.md +232 -0
  972. package/src/components/ProgressBar/progress-bar.stories.tsx +119 -0
  973. package/src/components/RadioGroup/index.ts +5 -0
  974. package/src/components/RadioGroup/radio-group.anatomy.stories.tsx +678 -0
  975. package/src/components/RadioGroup/radio-group.principles.stories.tsx +170 -0
  976. package/src/components/RadioGroup/radio-group.spec.md +141 -0
  977. package/src/components/RadioGroup/radio-group.stories.tsx +101 -0
  978. package/src/components/RadioGroup/radio-group.tsx +11 -22
  979. package/src/components/Rating/index.ts +5 -0
  980. package/src/components/Rating/rating.anatomy.stories.tsx +494 -0
  981. package/src/components/Rating/rating.principles.stories.tsx +293 -0
  982. package/src/components/Rating/rating.spec.md +208 -0
  983. package/src/components/Rating/rating.stories.tsx +133 -0
  984. package/src/components/Rating/rating.tsx +16 -5
  985. package/src/components/ScrollArea/index.ts +5 -0
  986. package/src/components/ScrollArea/scroll-area.anatomy.stories.tsx +431 -0
  987. package/src/components/ScrollArea/scroll-area.principles.stories.tsx +337 -0
  988. package/src/components/ScrollArea/scroll-area.spec.md +145 -0
  989. package/src/components/ScrollArea/scroll-area.stories.tsx +193 -0
  990. package/src/components/SegmentedControl/index.ts +5 -0
  991. package/src/components/SegmentedControl/segmented-control.anatomy.stories.tsx +295 -0
  992. package/src/components/SegmentedControl/segmented-control.principles.stories.tsx +281 -0
  993. package/src/components/SegmentedControl/segmented-control.spec.md +296 -0
  994. package/src/components/SegmentedControl/segmented-control.stories.tsx +33 -0
  995. package/src/components/SegmentedControl/segmented-control.tsx +3 -2
  996. package/src/components/Select/index.ts +5 -0
  997. package/src/components/Select/select.anatomy.stories.tsx +827 -0
  998. package/src/components/Select/select.principles.stories.tsx +311 -0
  999. package/src/components/Select/select.spec.md +311 -0
  1000. package/src/components/Select/select.stories.tsx +198 -0
  1001. package/src/components/Select/select.tsx +6 -2
  1002. package/src/components/SelectMenu/index.ts +5 -0
  1003. package/src/components/SelectMenu/select-menu.anatomy.stories.tsx +811 -0
  1004. package/src/components/SelectMenu/select-menu.principles.stories.tsx +107 -0
  1005. package/src/components/SelectMenu/select-menu.spec.md +222 -0
  1006. package/src/components/SelectMenu/select-menu.stories.tsx +148 -0
  1007. package/src/components/SelectMenu/select-menu.tsx +20 -6
  1008. package/src/components/SelectionControl/index.ts +5 -0
  1009. package/src/components/SelectionControl/selection-item.anatomy.stories.tsx +571 -0
  1010. package/src/components/SelectionControl/selection-item.principles.stories.tsx +77 -0
  1011. package/src/components/SelectionControl/selection-item.spec.md +130 -0
  1012. package/src/components/SelectionControl/selection-item.stories.tsx +137 -0
  1013. package/src/components/Separator/index.ts +5 -0
  1014. package/src/components/Separator/separator.anatomy.stories.tsx +125 -0
  1015. package/src/components/Separator/separator.principles.stories.tsx +141 -0
  1016. package/src/components/Separator/separator.spec.md +109 -0
  1017. package/src/components/Separator/separator.stories.tsx +127 -0
  1018. package/src/components/Sheet/index.ts +5 -0
  1019. package/src/components/Sheet/sheet.anatomy.stories.tsx +268 -0
  1020. package/src/components/Sheet/sheet.principles.stories.tsx +370 -0
  1021. package/src/components/Sheet/sheet.spec.md +148 -0
  1022. package/src/components/Sheet/sheet.stories.tsx +168 -0
  1023. package/src/components/Sheet/sheet.tsx +1 -1
  1024. package/src/components/Sidebar/index.ts +5 -0
  1025. package/src/components/Sidebar/sidebar.anatomy.stories.tsx +769 -0
  1026. package/src/components/Sidebar/sidebar.principles.stories.tsx +505 -0
  1027. package/src/components/Sidebar/sidebar.spec.md +711 -0
  1028. package/src/components/Sidebar/sidebar.stories.tsx +482 -0
  1029. package/src/components/Sidebar/sidebar.tsx +5 -2
  1030. package/src/components/Skeleton/index.ts +5 -0
  1031. package/src/components/Skeleton/skeleton.anatomy.stories.tsx +145 -0
  1032. package/src/components/Skeleton/skeleton.principles.stories.tsx +221 -0
  1033. package/src/components/Skeleton/skeleton.spec.md +104 -0
  1034. package/src/components/Skeleton/skeleton.stories.tsx +129 -0
  1035. package/src/components/Slider/index.ts +5 -0
  1036. package/src/components/Slider/slider.anatomy.stories.tsx +235 -0
  1037. package/src/components/Slider/slider.principles.stories.tsx +250 -0
  1038. package/src/components/Slider/slider.spec.md +353 -0
  1039. package/src/components/Slider/slider.stories.tsx +115 -0
  1040. package/src/components/Slider/slider.tsx +18 -4
  1041. package/src/components/Steps/index.ts +5 -0
  1042. package/src/components/Steps/steps.anatomy.stories.tsx +448 -0
  1043. package/src/components/Steps/steps.principles.stories.tsx +303 -0
  1044. package/src/components/Steps/steps.spec.md +473 -0
  1045. package/src/components/Steps/steps.stories.tsx +370 -0
  1046. package/src/components/Steps/steps.tsx +19 -2
  1047. package/src/components/Switch/index.ts +5 -0
  1048. package/src/components/Switch/switch.anatomy.stories.tsx +227 -0
  1049. package/src/components/Switch/switch.principles.stories.tsx +174 -0
  1050. package/src/components/Switch/switch.spec.md +221 -0
  1051. package/src/components/Switch/switch.stories.tsx +107 -0
  1052. package/src/components/Switch/switch.tsx +13 -13
  1053. package/src/components/Tabs/index.ts +5 -0
  1054. package/src/components/Tabs/tabs.anatomy.stories.tsx +414 -0
  1055. package/src/components/Tabs/tabs.principles.stories.tsx +257 -0
  1056. package/src/components/Tabs/tabs.spec.md +316 -0
  1057. package/src/components/Tabs/tabs.stories.tsx +155 -0
  1058. package/src/components/Tabs/tabs.tsx +4 -3
  1059. package/src/components/Tag/index.ts +5 -0
  1060. package/src/components/Tag/tag.anatomy.stories.tsx +656 -0
  1061. package/src/components/Tag/tag.principles.stories.tsx +270 -0
  1062. package/src/components/Tag/tag.spec.md +281 -0
  1063. package/src/components/Tag/tag.stories.tsx +69 -0
  1064. package/src/components/Tag/tag.tsx +9 -4
  1065. package/src/components/Textarea/index.ts +5 -0
  1066. package/src/components/Textarea/textarea.anatomy.stories.tsx +304 -0
  1067. package/src/components/Textarea/textarea.principles.stories.tsx +175 -0
  1068. package/src/components/Textarea/textarea.spec.md +151 -0
  1069. package/src/components/Textarea/textarea.stories.tsx +53 -0
  1070. package/src/components/Textarea/textarea.tsx +10 -6
  1071. package/src/components/TimePicker/index.ts +5 -0
  1072. package/src/components/TimePicker/time-picker.anatomy.stories.tsx +275 -0
  1073. package/src/components/TimePicker/time-picker.principles.stories.tsx +140 -0
  1074. package/src/components/TimePicker/time-picker.spec.md +270 -0
  1075. package/src/components/TimePicker/time-picker.stories.tsx +193 -0
  1076. package/src/components/TimePicker/time-picker.tsx +20 -5
  1077. package/src/components/Toast/index.ts +5 -0
  1078. package/src/components/Toast/toast.anatomy.stories.tsx +324 -0
  1079. package/src/components/Toast/toast.principles.stories.tsx +217 -0
  1080. package/src/components/Toast/toast.spec.md +178 -0
  1081. package/src/components/Toast/toast.stories.tsx +119 -0
  1082. package/src/components/Tooltip/index.ts +5 -0
  1083. package/src/components/Tooltip/tooltip.anatomy.stories.tsx +413 -0
  1084. package/src/components/Tooltip/tooltip.principles.stories.tsx +204 -0
  1085. package/src/components/Tooltip/tooltip.spec.md +139 -0
  1086. package/src/components/Tooltip/tooltip.stories.tsx +116 -0
  1087. package/src/components/TreeView/index.ts +5 -0
  1088. package/src/components/TreeView/tree-view.anatomy.stories.tsx +410 -0
  1089. package/src/components/TreeView/tree-view.principles.stories.tsx +190 -0
  1090. package/src/components/TreeView/tree-view.spec.md +388 -0
  1091. package/src/components/TreeView/tree-view.stories.tsx +297 -0
  1092. package/src/components/TreeView/tree-view.tsx +46 -13
  1093. package/src/hooks/use-overflow-items.ts +10 -6
  1094. package/src/index.ts +68 -69
  1095. package/src/patterns/action-bar/action-bar.spec.md +458 -0
  1096. package/src/patterns/action-bar/action-bar.stories.tsx +612 -0
  1097. package/src/patterns/element-anatomy/element-anatomy.spec.md +215 -0
  1098. package/src/patterns/element-anatomy/index.ts +5 -0
  1099. package/src/patterns/element-anatomy/inline-action.spec.md +320 -0
  1100. package/src/patterns/element-anatomy/item-anatomy.spec.md +1042 -0
  1101. package/src/patterns/element-anatomy/item-anatomy.stories.tsx +1622 -0
  1102. package/src/patterns/element-anatomy/item-anatomy.tsx +3 -2
  1103. package/src/patterns/header-canonical/header-canonical.css +2 -2
  1104. package/src/patterns/header-canonical/header-canonical.spec.md +291 -0
  1105. package/src/patterns/header-canonical/index.ts +5 -0
  1106. package/src/patterns/horizontal-overflow/horizontal-overflow.spec.md +195 -0
  1107. package/src/patterns/horizontal-overflow/index.ts +5 -0
  1108. package/src/patterns/overlay-surface/index.ts +5 -0
  1109. package/src/patterns/overlay-surface/overlay-surface.spec.md +429 -0
  1110. package/src/patterns/resize-handle/index.ts +5 -0
  1111. package/src/patterns/resize-handle/resize-handle.spec.md +111 -0
  1112. package/src/patterns/resize-handle/resize-handle.stories.tsx +71 -0
  1113. package/src/styles/base.css +85 -0
  1114. package/src/styles/tokens.css +11 -0
  1115. package/src/tokens/README.md +2 -0
  1116. package/src/tokens/color/color.spec.md +785 -0
  1117. package/src/tokens/color/color.stories.tsx +363 -0
  1118. package/src/tokens/color/primitives.css +7 -0
  1119. package/src/tokens/density/density.spec.md +127 -0
  1120. package/src/tokens/density/density.stories.tsx +240 -0
  1121. package/src/tokens/elevation/elevation.spec.md +79 -0
  1122. package/src/tokens/elevation/elevation.stories.tsx +98 -0
  1123. package/src/tokens/layoutSpace/layoutSpace.css +1 -1
  1124. package/src/tokens/layoutSpace/layoutSpace.spec.md +313 -0
  1125. package/src/tokens/layoutSpace/layoutSpace.stories.tsx +75 -0
  1126. package/src/tokens/motion/motion.css +2 -2
  1127. package/src/tokens/motion/motion.spec.md +97 -0
  1128. package/src/tokens/motion/motion.ts +1 -1
  1129. package/src/tokens/opacity/opacity.spec.md +84 -0
  1130. package/src/tokens/opacity/opacity.stories.tsx +69 -0
  1131. package/src/tokens/orphan-tokens.spec.md +117 -0
  1132. package/src/tokens/radius/radius.spec.md +128 -0
  1133. package/src/tokens/radius/radius.stories.tsx +86 -0
  1134. package/src/tokens/token-system.spec.md +243 -0
  1135. package/src/tokens/typography/typography.spec.md +208 -0
  1136. package/src/tokens/typography/typography.stories.tsx +133 -0
  1137. package/src/tokens/uiSize/icon-size.ts +1 -2
  1138. package/src/tokens/uiSize/uiSize.css +16 -0
  1139. package/src/tokens/uiSize/uiSize.spec.md +439 -0
  1140. package/dist/components/NameCard/name-card.d.ts.map +0 -1
  1141. package/dist/components/NameCard/name-card.js.map +0 -1
  1142. /package/dist/{style.css → react-day-picker.css} +0 -0
@@ -0,0 +1,678 @@
1
+ import type { Meta } from '@storybook/react'
2
+ import { useState } from 'react'
3
+ import { RadioGroup, RadioGroupItem } from './radio-group'
4
+ import { SelectionItem } from '@/design-system/components/SelectionControl/selection-item'
5
+
6
+ const meta: Meta = {
7
+ title: 'Design System/Components/RadioGroup/設計規格',
8
+ parameters: { layout: 'padded' },
9
+ }
10
+ export default meta
11
+
12
+ /* ═══════════════════════════════════════════════════════════════════════════
13
+ Types & Data
14
+ ═══════════════════════════════════════════════════════════════════════════ */
15
+
16
+ type StateKey = 'default' | 'hover' | 'disabled'
17
+ type CheckedKey = 'unchecked' | 'checked'
18
+ type SizeKey = 'sm' | 'md' | 'lg'
19
+ type ColorSpec = { border: string; bg: string; dot: string }
20
+
21
+ const STATES: StateKey[] = ['default', 'hover', 'disabled']
22
+ const CHECKED_STATES: CheckedKey[] = ['unchecked', 'checked']
23
+ const SIZES: SizeKey[] = ['sm', 'md', 'lg']
24
+
25
+ /** Radio color tokens per checked × state */
26
+ const TOKEN_MAP: Record<CheckedKey, Record<StateKey, ColorSpec>> = {
27
+ unchecked: {
28
+ default: { border: '--border', bg: '--surface', dot: 'transparent' },
29
+ hover: { border: '--border-hover', bg: '--surface', dot: 'transparent' },
30
+ disabled: { border: 'transparent', bg: '--bg-disabled', dot: 'transparent' },
31
+ },
32
+ checked: {
33
+ default: { border: '--primary', bg: '--surface', dot: '--primary' },
34
+ hover: { border: '--primary-hover', bg: '--surface', dot: '--primary-hover' },
35
+ disabled: { border: 'transparent', bg: '--bg-disabled', dot: '--fg-disabled' },
36
+ },
37
+ }
38
+
39
+ interface SizeSpec {
40
+ controlPx: number
41
+ dotPx: number
42
+ controlToken: string
43
+ }
44
+
45
+ const SIZE_SPECS: Record<SizeKey, SizeSpec> = {
46
+ sm: { controlPx: 16, dotPx: 8, controlToken: 'h-4 w-4' },
47
+ md: { controlPx: 16, dotPx: 8, controlToken: 'h-4 w-4' },
48
+ lg: { controlPx: 20, dotPx: 10, controlToken: 'h-5 w-5' },
49
+ }
50
+
51
+ /* ═══════════════════════════════════════════════════════════════════════════
52
+ Shared UI Components
53
+
54
+ NOTE: Kept local (not imported from `_anatomy/anatomy-utils`) because the
55
+ Button-family inspector layout diverges visually from the 通用 helpers:
56
+ H3 `text-h6 font-semibold` (not `text-body font-bold mb-2`), Desc has no
57
+ bottom margin, Th/Td use `p-2 border-b border-divider` row style, and
58
+ Swatch defaults to `size="md"` for inline token chips.
59
+ ═══════════════════════════════════════════════════════════════════════════ */
60
+
61
+ const H3 = ({ children }: { children: React.ReactNode }) => (
62
+ <h3 className="text-h6 font-semibold text-foreground">{children}</h3>
63
+ )
64
+ const Desc = ({ children }: { children: React.ReactNode }) => (
65
+ <p className="text-caption text-fg-muted max-w-[720px]">{children}</p>
66
+ )
67
+ const Th = ({ children }: { children: React.ReactNode }) => (
68
+ <th className="text-left p-2 border-b border-divider text-fg-muted font-medium text-caption whitespace-nowrap">{children}</th>
69
+ )
70
+ const Td = ({ children, mono }: { children: React.ReactNode; mono?: boolean }) => (
71
+ <td className={`p-2 border-b border-divider align-top whitespace-nowrap text-caption ${mono ? 'font-mono' : ''}`}>{children}</td>
72
+ )
73
+
74
+ /** Token name (primary) + resolved value (secondary) */
75
+ const TkVal = ({ token, value }: { token: string; value?: string }) => (
76
+ <div className="flex flex-col gap-0.5">
77
+ <span className="font-mono text-[12px] text-fg-secondary">{token}</span>
78
+ {value && <span className="font-mono text-[10px] text-fg-muted">{value}</span>}
79
+ </div>
80
+ )
81
+
82
+ const Swatch = ({ value, size = 'md' }: { value: string; size?: 'sm' | 'md' }) => {
83
+ const s = size === 'sm' ? 'w-3 h-3' : 'w-4 h-4'
84
+ if (value === 'transparent') {
85
+ return <span className={`${s} rounded-md shrink-0 border border-border`}
86
+ style={{ backgroundImage: 'linear-gradient(45deg,#ddd 25%,transparent 25%,transparent 75%,#ddd 75%),linear-gradient(45deg,#ddd 25%,transparent 25%,transparent 75%,#ddd 75%)', backgroundSize: '6px 6px', backgroundPosition: '0 0,3px 3px' }} />
87
+ }
88
+ return <span className={`${s} rounded-md shrink-0 border border-black/10`} style={{ backgroundColor: `var(${value})` }} />
89
+ }
90
+
91
+ const TokenAnnotation = ({ colors }: { colors: ColorSpec }) => (
92
+ <div className="flex flex-col gap-0.5 mt-2">
93
+ {([['border', 'bdr'], ['bg', 'bg'], ['dot', 'dot']] as const).map(([key, label]) => (
94
+ <span key={key} className="inline-flex items-center gap-1 text-[10px]">
95
+ <Swatch value={colors[key]} size="sm" />
96
+ <span className="text-fg-muted w-5 shrink-0">{label}</span>
97
+ <span className="font-mono text-fg-secondary">{colors[key]}</span>
98
+ </span>
99
+ ))}
100
+ </div>
101
+ )
102
+
103
+ const Tab = ({ active, onClick, children }: { active: boolean; onClick: () => void; children: React.ReactNode }) => (
104
+ <button type="button" onClick={onClick}
105
+ className={`px-2.5 py-1 text-[12px] font-mono rounded-md cursor-pointer transition-colors ${
106
+ active ? 'bg-primary text-white font-semibold' : 'bg-neutral-hover text-fg-secondary hover:bg-neutral-active'
107
+ }`}>
108
+ {children}
109
+ </button>
110
+ )
111
+
112
+ const PropRow = ({ label, dot, children }: { label: string; dot?: string; children: React.ReactNode }) => (
113
+ <div className="flex items-start gap-3 py-2 border-b border-divider last:border-b-0">
114
+ <span className="text-[11px] text-fg-muted font-medium w-[72px] shrink-0 pt-0.5 flex items-center gap-1.5">
115
+ {dot && <span className="w-2 h-2 rounded-full shrink-0" style={{ backgroundColor: dot }} />}
116
+ {label}
117
+ </span>
118
+ <div className="flex-1 text-[12px] font-mono text-fg-secondary">{children}</div>
119
+ </div>
120
+ )
121
+
122
+ const TokenValue = ({ value }: { value: string }) => (
123
+ <span className="inline-flex items-center gap-2"><Swatch value={value} /><span>{value}</span></span>
124
+ )
125
+
126
+ /* ═══════════════════════════════════════════════════════════════════════════
127
+ Blueprint Zone Colors
128
+ ═══════════════════════════════════════════════════════════════════════════ */
129
+
130
+ const Z = {
131
+ control: { bg: 'rgba(166,208,245,0.6)', border: 'rgba(80,145,210,0.9)', text: '#2d6a9f' },
132
+ dot: { bg: 'rgba(253,218,158,0.6)', border: 'rgba(218,165,60,0.9)', text: '#8a6010' },
133
+ gap: { bg: 'rgba(194,225,154,0.6)', border: 'rgba(139,179,91,0.9)', text: '#5a7a2e' },
134
+ label: { bg: 'rgba(199,178,230,0.6)', border: 'rgba(138,103,190,0.9)', text: '#6035a8' },
135
+ dim: { text: '#d04040' },
136
+ }
137
+
138
+ /* ═══════════════════════════════════════════════════════════════════════════
139
+ 1. 元件總覽
140
+ ═══════════════════════════════════════════════════════════════════════════ */
141
+
142
+ export const Overview = {
143
+ name: '元件總覽',
144
+ render: () => (
145
+ <div className="flex flex-col gap-8">
146
+ <div className="flex flex-col gap-4">
147
+ <div className="flex flex-col gap-1">
148
+ <H3>結構(Anatomy)</H3>
149
+ <Desc>
150
+ Radio 由兩個部分組成:圓形控件(indicator)和 Label。
151
+ 控件不內建 label,label 組合使用 SelectionItem 元件。
152
+ Radio 必須在 RadioGroup 內使用(互斥選擇語意)。
153
+ </Desc>
154
+ </div>
155
+
156
+ {/* Anatomy diagram */}
157
+ <div className="flex gap-8">
158
+ {/* RadioGroupItem standalone */}
159
+ <div className="flex flex-col gap-2 items-start">
160
+ <span className="text-[11px] text-fg-muted font-medium">RadioGroupItem(控件)</span>
161
+ <div className="inline-flex items-center border-2 border-dashed border-primary/30 rounded-full px-3 py-2.5 gap-2">
162
+ {[{ name: 'border', color: 'info' }, { name: 'border', color: 'warning' }].map((s) => (
163
+ <span key={s.name} className="rounded px-2 py-1 text-[11px] font-mono border border-dashed"
164
+ style={{ borderColor: `var(--${s.color})`, backgroundColor: `var(--${s.color}-subtle)`, color: `var(--${s.color})` }}>{s.name}</span>
165
+ ))}
166
+ </div>
167
+ <span className="text-[10px] text-fg-muted font-mono">rounded-full · grid place-content-center</span>
168
+ </div>
169
+ {/* With SelectionItem */}
170
+ <div className="flex flex-col gap-2 items-start">
171
+ <span className="text-[11px] text-fg-muted font-medium">搭配 SelectionItem</span>
172
+ <div className="inline-flex items-center border-2 border-dashed border-primary/30 rounded-md px-3 py-2.5 gap-2">
173
+ {[{ name: 'control', color: 'info' }, { name: 'control', color: 'success' }, { name: 'control', color: 'magenta' }].map((s) => (
174
+ <span key={s.name} className="rounded px-2 py-1 text-[11px] font-mono border border-dashed"
175
+ style={{ borderColor: `var(--${s.color})`, backgroundColor: `var(--${s.color}-subtle)`, color: `var(--${s.color})` }}>{s.name}</span>
176
+ ))}
177
+ </div>
178
+ <span className="text-[10px] text-fg-muted font-mono">flex items-start gap-2 · control 在一行文字高度的容器內置中</span>
179
+ </div>
180
+ </div>
181
+ </div>
182
+
183
+ {/* Props table */}
184
+ <div className="flex flex-col gap-3">
185
+ <H3>Props</H3>
186
+ <div className="overflow-x-auto">
187
+ <table className="text-caption border-collapse">
188
+ <thead><tr><Th>Prop</Th><Th>Type</Th><Th>Default</Th><Th>說明</Th></tr></thead>
189
+ <tbody>
190
+ {[
191
+ ['value', 'string', '(required)', 'RadioGroup 內的唯一值'],
192
+ ['size', "'sm'|'md'|'lg'", "'md'", '控件尺寸(sm/md = 16px, lg = 20px)'],
193
+ ['disabled', 'boolean', 'false', '不可互動,移除品牌色'],
194
+ ['id', 'string', '—', '搭配 SelectionItem 的 htmlFor'],
195
+ ].map(([p, t, d, desc]) => (
196
+ <tr key={p}><Td mono>{p}</Td><Td mono>{t}</Td><Td mono>{d}</Td><Td>{desc}</Td></tr>
197
+ ))}
198
+ </tbody>
199
+ </table>
200
+ </div>
201
+ </div>
202
+
203
+ {/* Checkbox vs Radio comparison */}
204
+ <div className="flex flex-col gap-3">
205
+ <H3>Checkbox vs Radio</H3>
206
+ <Desc>視覺語言完全一致,差異只有形狀、指示器、語意。</Desc>
207
+ <div className="overflow-x-auto">
208
+ <table className="text-caption border-collapse">
209
+ <thead><tr><Th>項目</Th><Th>Checkbox</Th><Th>Radio</Th></tr></thead>
210
+ <tbody>
211
+ {[
212
+ ['形狀', 'rounded-md(方)', 'rounded-full(圓)'],
213
+ ['指示器', 'Check icon(白色)', 'Filled dot(品牌色)'],
214
+ ['語意', '獨立 toggle(多選)', '互斥選擇(單選)'],
215
+ ['容器', '可獨立使用', '必須在 RadioGroup 內'],
216
+ ].map(([label, cb, radio]) => (
217
+ <tr key={label}><Td>{label}</Td><Td mono>{cb}</Td><Td mono>{radio}</Td></tr>
218
+ ))}
219
+ </tbody>
220
+ </table>
221
+ </div>
222
+ </div>
223
+ </div>
224
+ ),
225
+ }
226
+
227
+ /* ═══════════════════════════════════════════════════════════════════════════
228
+ 2. 元件檢閱器 — Interactive Inspector
229
+ ═══════════════════════════════════════════════════════════════════════════ */
230
+
231
+ const BpZone = ({ w, h, color, label, sub, round }: { w: number; h?: number; color: typeof Z.control; label: string; sub?: string; round?: boolean }) => (
232
+ <div className={`flex flex-col items-center justify-center shrink-0 gap-0.5 ${round ? 'rounded-full' : ''}`}
233
+ style={{ width: w, height: h ?? '100%', background: color.bg, border: `1.5px dashed ${color.border}` }}>
234
+ <span className="text-[11px] font-mono font-bold leading-none" style={{ color: color.text }}>{label}</span>
235
+ {sub && <span className="text-[9px] font-mono leading-none opacity-70" style={{ color: color.text }}>{sub}</span>}
236
+ </div>
237
+ )
238
+
239
+ const InspectorInner = () => {
240
+ const [checked, setChecked] = useState<CheckedKey>('checked')
241
+ const [state, setState] = useState<StateKey>('default')
242
+ const [size, setSize] = useState<SizeKey>('md')
243
+ const [withDescription, setWithDescription] = useState(false)
244
+
245
+ const colors = TOKEN_MAP[checked][state]
246
+ const s = SIZE_SPECS[size]
247
+
248
+ return (
249
+ <div className="flex flex-col gap-6">
250
+ {/* Controls */}
251
+ <div className="flex flex-col gap-2.5">
252
+ <div className="flex items-center gap-2">
253
+ <span className="text-[11px] text-fg-muted w-16 shrink-0">Checked</span>
254
+ <div className="flex gap-1.5">
255
+ {CHECKED_STATES.map((c) => <Tab key={c} active={checked === c} onClick={() => setChecked(c)}>{c}</Tab>)}
256
+ </div>
257
+ </div>
258
+ <div className="flex items-center gap-2">
259
+ <span className="text-[11px] text-fg-muted w-16 shrink-0">State</span>
260
+ <div className="flex gap-1.5">
261
+ {STATES.map((st) => <Tab key={st} active={state === st} onClick={() => setState(st)}>{st}</Tab>)}
262
+ </div>
263
+ </div>
264
+ <div className="flex items-center gap-2">
265
+ <span className="text-[11px] text-fg-muted w-16 shrink-0">Size</span>
266
+ <div className="flex gap-1.5">
267
+ {SIZES.map((sz) => <Tab key={sz} active={size === sz} onClick={() => setSize(sz)}>{sz}</Tab>)}
268
+ </div>
269
+ </div>
270
+ <div className="flex items-center gap-2">
271
+ <span className="text-[11px] text-fg-muted w-16 shrink-0">Description</span>
272
+ <div className="flex gap-1.5">
273
+ <Tab active={!withDescription} onClick={() => setWithDescription(false)}>off</Tab>
274
+ <Tab active={withDescription} onClick={() => setWithDescription(true)}>on</Tab>
275
+ </div>
276
+ <span className="text-[11px] text-fg-muted">label 下方的次要說明</span>
277
+ </div>
278
+ </div>
279
+
280
+ {/* Preview + Panel */}
281
+ <div className="flex gap-6 items-start">
282
+ {/* Left: preview + blueprint */}
283
+ <div className="flex flex-col gap-5 min-w-[300px]">
284
+ {/* Live preview */}
285
+ <div className="px-10 py-8 rounded-lg bg-canvas border border-divider flex items-center justify-center gap-6">
286
+ <RadioGroup defaultValue={checked === 'checked' ? 'preview' : undefined} className="flex gap-4">
287
+ <SelectionItem
288
+ size={size}
289
+ control={<RadioGroupItem value="preview" id="preview-radio" size={size} disabled={state === 'disabled'} />}
290
+ label="信用卡"
291
+ description={withDescription ? '支援 Visa / Mastercard / JCB,結帳時直接扣款' : undefined}
292
+ htmlFor="preview-radio"
293
+ disabled={state === 'disabled'}
294
+ />
295
+ <SelectionItem
296
+ size={size}
297
+ control={<RadioGroupItem value="other" id="preview-other" size={size} disabled={state === 'disabled'} />}
298
+ label="ATM 轉帳"
299
+ description={withDescription ? '取得虛擬帳號後 3 天內完成付款' : undefined}
300
+ htmlFor="preview-other"
301
+ disabled={state === 'disabled'}
302
+ />
303
+ </RadioGroup>
304
+ </div>
305
+
306
+ {/* Blueprint — control with label */}
307
+ <div className="flex flex-col gap-2">
308
+ <div className="flex items-center gap-4 text-[10px]">
309
+ {[{ c: Z.control, l: 'Control' }, { c: Z.dot, l: 'Dot' }, { c: Z.gap, l: 'Gap' }, { c: Z.label, l: 'Label' }].map(({ c, l }) => (
310
+ <span key={l} className="inline-flex items-center gap-1">
311
+ <span className="w-2.5 h-2.5 rounded-md" style={{ background: c.bg, border: `1px dashed ${c.border}` }} />
312
+ <span className="font-medium" style={{ color: c.text }}>{l}</span>
313
+ </span>
314
+ ))}
315
+ </div>
316
+ <div className="flex items-center">
317
+ <div className="flex items-center overflow-hidden" style={{ height: 48, outline: `2px solid ${Z.dim.text}22` }}>
318
+ {/* Control zone */}
319
+ <div className="flex items-center justify-center shrink-0"
320
+ style={{ width: 48, height: 48, background: Z.control.bg, border: `1.5px dashed ${Z.control.border}` }}>
321
+ <div className="flex flex-col items-center gap-0.5">
322
+ <span className="text-[11px] font-mono font-bold leading-none" style={{ color: Z.control.text }}>{s.controlToken.split(' ')[0]}</span>
323
+ <span className="text-[9px] font-mono leading-none opacity-70" style={{ color: Z.control.text }}>{s.controlPx}px</span>
324
+ {checked === 'checked' && (
325
+ <div className="mt-0.5 rounded-full" style={{ width: 10, height: 10, background: Z.dot.bg, border: `1px dashed ${Z.dot.border}` }}>
326
+ <span className="text-[7px] font-mono font-bold flex items-center justify-center h-full" style={{ color: Z.dot.text }}></span>
327
+ </div>
328
+ )}
329
+ </div>
330
+ </div>
331
+ {/* Gap */}
332
+ <BpZone w={32} color={Z.gap} label="gap-2" sub="8px" />
333
+ {/* Label */}
334
+ <BpZone w={80} color={Z.label} label="Label" sub={size === 'lg' ? 'text-body-lg' : 'text-body'} />
335
+ </div>
336
+ {/* Height annotation */}
337
+ <div className="ml-3 flex items-center" style={{ height: 48 }}>
338
+ <svg width="10" height="48" className="shrink-0">
339
+ <line x1="5" y1="2" x2="5" y2="46" stroke={Z.dim.text} strokeWidth="1" />
340
+ <line x1="1" y1="2" x2="9" y2="2" stroke={Z.dim.text} strokeWidth="1.5" />
341
+ <line x1="1" y1="46" x2="9" y2="46" stroke={Z.dim.text} strokeWidth="1.5" />
342
+ </svg>
343
+ <div className="ml-1.5"><TkVal token="一行文字高度" value="控件容器高度" /></div>
344
+ </div>
345
+ </div>
346
+ <p className="text-[10px] text-fg-muted">控件包在一行文字高度的容器內,多行文字時對齊第一行。寬度為示意比例。</p>
347
+ </div>
348
+ </div>
349
+
350
+ {/* Right: inspect panel */}
351
+ <div className="w-[300px] shrink-0 border border-divider rounded-lg bg-surface overflow-hidden">
352
+ <div className="px-4 py-2.5 border-b border-divider bg-neutral-hover">
353
+ <span className="text-[12px] font-semibold text-foreground">Inspect</span>
354
+ </div>
355
+
356
+ {/* COLOR */}
357
+ <div className="px-4 py-1">
358
+ <div className="py-2 border-b border-divider"><span className="text-[10px] font-semibold text-fg-muted uppercase tracking-wider">Color</span></div>
359
+ <PropRow label="Border"><TokenValue value={colors.border} /></PropRow>
360
+ <PropRow label="Fill"><TokenValue value={colors.bg} /></PropRow>
361
+ <PropRow label="Dot"><TokenValue value={colors.dot} /></PropRow>
362
+ </div>
363
+
364
+ {/* LAYOUT */}
365
+ <div className="px-4 py-1">
366
+ <div className="py-2 border-b border-divider"><span className="text-[10px] font-semibold text-fg-muted uppercase tracking-wider">Layout</span></div>
367
+ <PropRow label="控件尺寸" dot={Z.control.text}><TkVal token={s.controlToken} value={`${s.controlPx}px`} /></PropRow>
368
+ <PropRow label="Dot 尺寸" dot={Z.dot.text}><TkVal token={`${s.dotPx}px`} value={checked === 'unchecked' ? '(hidden)' : 'fill-current'} /></PropRow>
369
+ <PropRow label="Item Gap" dot={Z.gap.text}><TkVal token="gap-2" value="8px" /></PropRow>
370
+ </div>
371
+
372
+ {/* STYLE */}
373
+ <div className="px-4 py-1 pb-3">
374
+ <div className="py-2 border-b border-divider"><span className="text-[10px] font-semibold text-fg-muted uppercase tracking-wider">Style</span></div>
375
+ <PropRow label="Radius"><TkVal token="rounded-full" value="9999px" /></PropRow>
376
+ <PropRow label="Border"><TkVal token="border" value="1px solid" /></PropRow>
377
+ <PropRow label="Focus"><TkVal token="ring-2 ring-ring ring-offset-1" /></PropRow>
378
+ <PropRow label="Transition"><TkVal token="duration-150" value="colors" /></PropRow>
379
+ </div>
380
+ </div>
381
+ </div>
382
+ </div>
383
+ )
384
+ }
385
+
386
+ export const Inspector = {
387
+ name: '元件檢閱器',
388
+ render: () => (
389
+ <div className="flex flex-col gap-4">
390
+ <div className="flex flex-col gap-1">
391
+ <H3>元件檢閱器</H3>
392
+ <Desc>選擇任意 checked/state/size 組合,即時查看所有 token。色塊即時渲染,切 dark mode 自動更新。</Desc>
393
+ </div>
394
+ <InspectorInner />
395
+ </div>
396
+ ),
397
+ }
398
+
399
+ /* ═══════════════════════════════════════════════════════════════════════════
400
+ 3. 色彩對照表 — Checked × State Token Matrix
401
+ ═══════════════════════════════════════════════════════════════════════════ */
402
+
403
+ export const ColorMatrix = {
404
+ name: '色彩對照表',
405
+ render: () => (
406
+ <div className="flex flex-col gap-8">
407
+ <div className="flex flex-col gap-1">
408
+ <H3>Checked × State 色彩對照</H3>
409
+ <Desc>
410
+ 橫向看同一 checked 狀態的 state 變化,縱向比較 unchecked 和 checked 的設計邏輯。
411
+ Radio 與 Checkbox 的關鍵差異:checked 時底色維持 surface,指示器用品牌色 dot(Checkbox 則是底色變 primary、指示器用白色 check)。
412
+ </Desc>
413
+ </div>
414
+ <div className="overflow-x-auto">
415
+ <table className="border-collapse">
416
+ <thead><tr><Th>狀態</Th>{STATES.map((st) => <Th key={st}>{st}</Th>)}</tr></thead>
417
+ <tbody>
418
+ {CHECKED_STATES.map((c) => (
419
+ <tr key={c}>
420
+ <td className="p-3 border-b border-divider font-mono text-caption font-medium align-top">{c}</td>
421
+ {STATES.map((st) => {
422
+ const isChecked = c === 'checked'
423
+ const isDisabled = st === 'disabled'
424
+ return (
425
+ <td key={st} className="p-3 border-b border-divider align-top min-w-[160px]">
426
+ <RadioGroup defaultValue={isChecked ? 'demo' : undefined}>
427
+ <RadioGroupItem value="demo" disabled={isDisabled} />
428
+ </RadioGroup>
429
+ <TokenAnnotation colors={TOKEN_MAP[c][st]} />
430
+ </td>
431
+ )
432
+ })}
433
+ </tr>
434
+ ))}
435
+ </tbody>
436
+ </table>
437
+ </div>
438
+
439
+ {/* Token summary */}
440
+ <div className="flex flex-col gap-3">
441
+ <span className="text-caption font-medium text-fg-secondary">Token 摘要</span>
442
+ <div className="overflow-x-auto">
443
+ <table className="border-collapse text-caption">
444
+ <thead><tr><Th>屬性</Th><Th>Unchecked</Th><Th>Checked</Th><Th>Disabled(共用)</Th></tr></thead>
445
+ <tbody>
446
+ {[
447
+ ['邊框', '--border', '--primary', 'transparent'],
448
+ ['底色', '--surface', '--surface', '--bg-disabled'],
449
+ ['Dot', '(hidden)', '--primary', '--fg-disabled / (hidden)'],
450
+ ['Hover 邊框', '--border-hover', '--primary-hover', '—'],
451
+ ].map(([label, unchk, chk, dis]) => (
452
+ <tr key={label}>
453
+ <Td>{label}</Td>
454
+ <Td mono>{unchk}</Td>
455
+ <Td mono>{chk}</Td>
456
+ <Td mono>{dis}</Td>
457
+ </tr>
458
+ ))}
459
+ </tbody>
460
+ </table>
461
+ </div>
462
+ </div>
463
+ </div>
464
+ ),
465
+ }
466
+
467
+ /* ═══════════════════════════════════════════════════════════════════════════
468
+ 4. 尺寸對照表 — Size Token Comparison
469
+ ═══════════════════════════════════════════════════════════════════════════ */
470
+
471
+ export const SizeMatrix = {
472
+ name: '尺寸對照表',
473
+ render: () => (
474
+ <div className="flex flex-col gap-8">
475
+ <div className="flex flex-col gap-1">
476
+ <H3>Size Token 對照</H3>
477
+ <Desc>
478
+ 三種尺寸(sm/md = 16px, lg = 20px)。sm 和 md 視覺相同,純粹是命名 mapping 讓消費者直接傳同一個 size prop。
479
+ 搭配 SelectionItem 時,item 高度自動對齊同 size 的 Input。
480
+ </Desc>
481
+ </div>
482
+
483
+ {/* Token table */}
484
+ <div className="overflow-x-auto">
485
+ <table className="border-collapse text-caption">
486
+ <thead><tr>
487
+ <Th>屬性</Th>
488
+ {SIZES.map((sz) => <Th key={sz}>{sz}{sz === 'md' ? '(預設)' : ''}</Th>)}
489
+ </tr></thead>
490
+ <tbody>
491
+ {([
492
+ { label: '控件尺寸', fn: (s: SizeSpec) => ({ token: s.controlToken, sub: `${s.controlPx}px` }) },
493
+ { label: 'Dot 尺寸', fn: (s: SizeSpec) => ({ token: `${s.dotPx}px`, sub: 'filled circle' }) },
494
+ { label: '形狀', fn: () => ({ token: 'rounded-full', sub: '9999px' }) },
495
+ { label: 'Item 字體', fn: (_: SizeSpec, sz: SizeKey) => ({ token: sz === 'lg' ? 'text-body-lg' : 'text-body', sub: sz === 'lg' ? '16px' : '14px' }) },
496
+ { label: 'Item 間距', fn: () => ({ token: 'gap-2', sub: '8px (control-label)' }) },
497
+ ]).map((row) => (
498
+ <tr key={row.label}>
499
+ <Td>{row.label}</Td>
500
+ {SIZES.map((sz) => {
501
+ const spec = SIZE_SPECS[sz]
502
+ const { token, sub } = row.fn(spec, sz)
503
+ return (
504
+ <Td key={sz} mono>
505
+ <div className="text-fg-secondary">{token}</div>
506
+ <div className="text-fg-muted text-[10px]">{sub}</div>
507
+ </Td>
508
+ )
509
+ })}
510
+ </tr>
511
+ ))}
512
+ {/* SelectionItem padding formula */}
513
+ <tr>
514
+ <Td>Item padding</Td>
515
+ {SIZES.map((sz) => (
516
+ <Td key={sz} mono>
517
+ <div className="text-fg-secondary">py = (field-height − 一行文字高度) / 2</div>
518
+ <div className="text-fg-muted text-[10px]">單行 = field-height-{sz}</div>
519
+ </Td>
520
+ ))}
521
+ </tr>
522
+ </tbody>
523
+ </table>
524
+ </div>
525
+
526
+ {/* Visual preview */}
527
+ <div className="flex flex-col gap-4">
528
+ <span className="text-caption font-medium text-fg-secondary">預覽</span>
529
+ <div className="flex gap-8">
530
+ {SIZES.map((sz) => (
531
+ <div key={sz} className="flex flex-col gap-2">
532
+ <span className="text-[11px] text-fg-muted font-mono">size="{sz}" ({SIZE_SPECS[sz].controlPx}px)</span>
533
+ <RadioGroup defaultValue="a">
534
+ <SelectionItem
535
+ size={sz}
536
+ control={<RadioGroupItem value="a" id={`sz-${sz}-a`} size={sz} />}
537
+ label="即時"
538
+ htmlFor={`sz-${sz}-a`}
539
+ />
540
+ <SelectionItem
541
+ size={sz}
542
+ control={<RadioGroupItem value="b" id={`sz-${sz}-b`} size={sz} />}
543
+ label="每日摘要"
544
+ description="每天晚上 9 點寄一次"
545
+ htmlFor={`sz-${sz}-b`}
546
+ />
547
+ <SelectionItem
548
+ size={sz}
549
+ control={<RadioGroupItem value="c" id={`sz-${sz}-c`} size={sz} disabled />}
550
+ label="每週摘要"
551
+ htmlFor={`sz-${sz}-c`}
552
+ disabled
553
+ />
554
+ </RadioGroup>
555
+ </div>
556
+ ))}
557
+ </div>
558
+ </div>
559
+ </div>
560
+ ),
561
+ }
562
+
563
+ /* ═══════════════════════════════════════════════════════════════════════════
564
+ 5. 狀態行為 — Mutual Exclusion + Disabled Item Matrix
565
+ ═══════════════════════════════════════════════════════════════════════════ */
566
+
567
+ const StateBehaviorInner = () => {
568
+ const [plan, setPlan] = useState('starter')
569
+ const [billing, setBilling] = useState('monthly')
570
+ return (
571
+ <div className="flex flex-col gap-8">
572
+ <div className="flex flex-col gap-1">
573
+ <H3>狀態行為</H3>
574
+ <Desc>
575
+ Radio 的關鍵行為來自 <span className="font-mono">RadioGroup</span> 層級——單選互斥(切 A 會同時清 B),
576
+ 而非個別 item 的 toggle(那是 Checkbox)。本 story 展示 RadioGroup 特有行為,item 級別的
577
+ default / hover / checked / disabled 色彩對照見「3. 色彩對照表」。
578
+ </Desc>
579
+ </div>
580
+
581
+ {/* Mutual exclusion demo */}
582
+ <div className="flex flex-col gap-3">
583
+ <span className="text-caption font-medium text-fg-secondary">行為 1:單選互斥(Mutual Exclusion)</span>
584
+ <Desc>
585
+ 點任一選項,其他選項自動清除——這是 Checkbox / Switch 沒有的核心差異。由 Radix Root 的 value / onValueChange 統一管理,consumer 不需自己實作互斥邏輯。
586
+ </Desc>
587
+ <div className="flex gap-6 items-start">
588
+ <div className="px-6 py-5 rounded-lg bg-canvas border border-divider min-w-[280px]">
589
+ <div className="text-[11px] text-fg-muted mb-3 font-mono">value = "{plan}"</div>
590
+ <RadioGroup value={plan} onValueChange={setPlan} className="flex flex-col gap-2">
591
+ <RadioGroupItem value="starter" label="Starter" description="個人使用 · 免費" />
592
+ <RadioGroupItem value="pro" label="Pro" description="小型團隊 · $12/月" />
593
+ <RadioGroupItem value="business" label="Business" description="企業級 · $49/月" />
594
+ </RadioGroup>
595
+ </div>
596
+ <div className="flex flex-col gap-2 text-[11px] text-fg-muted max-w-[280px]">
597
+ <div>切換任一選項,觀察其他選項的 dot 自動消失。</div>
598
+ <div className="pt-1 border-t border-divider">
599
+ 對照 Checkbox:Checkbox 每項獨立 checked,可同時多選。
600
+ </div>
601
+ </div>
602
+ </div>
603
+ </div>
604
+
605
+ {/* Individual disabled */}
606
+ <div className="flex flex-col gap-3">
607
+ <span className="text-caption font-medium text-fg-secondary">行為 2:個別 item disabled(不影響其他)</span>
608
+ <Desc>
609
+ 單一選項 disabled 時其他仍可互動——disabled item 保留其 checked 視覺但 cursor-not-allowed,無法被選中。適用「功能尚未開放 / 方案不含」等情境。
610
+ </Desc>
611
+ <div className="flex gap-6 items-start">
612
+ <div className="px-6 py-5 rounded-lg bg-canvas border border-divider min-w-[280px]">
613
+ <RadioGroup value={billing} onValueChange={setBilling} className="flex flex-col gap-2">
614
+ <RadioGroupItem value="monthly" label="每月付款" description="可隨時取消" />
615
+ <RadioGroupItem value="yearly" label="每年付款" description="省 20%" />
616
+ <RadioGroupItem value="enterprise" label="企業年約" description="請聯繫業務" disabled />
617
+ </RadioGroup>
618
+ </div>
619
+ <div className="flex flex-col gap-2 text-[11px] text-fg-muted max-w-[280px]">
620
+ <div>第三項 disabled,選擇仍正常運作在前兩項。</div>
621
+ <div className="pt-1 border-t border-divider">Token:disabled item 邊框 transparent / 底色 `--bg-disabled`。</div>
622
+ </div>
623
+ </div>
624
+ </div>
625
+
626
+ {/* Whole group disabled */}
627
+ <div className="flex flex-col gap-3">
628
+ <span className="text-caption font-medium text-fg-secondary">行為 3:整組 disabled(Field context 接管)</span>
629
+ <Desc>
630
+ 整個 RadioGroup 放在 disabled 的 Field 內時,所有 item 繼承 disabled——consumer 不需逐 item 傳 disabled。
631
+ </Desc>
632
+ <div className="flex gap-6 items-start">
633
+ <div className="px-6 py-5 rounded-lg bg-canvas border border-divider min-w-[280px] opacity-60 pointer-events-none">
634
+ <RadioGroup defaultValue="b" className="flex flex-col gap-2">
635
+ <RadioGroupItem value="a" label="個人版" disabled />
636
+ <RadioGroupItem value="b" label="團隊版(目前方案)" disabled />
637
+ <RadioGroupItem value="c" label="企業版" disabled />
638
+ </RadioGroup>
639
+ </div>
640
+ <div className="flex flex-col gap-2 text-[11px] text-fg-muted max-w-[280px]">
641
+ <div>整組不可互動,已選中的項目維持 dot 視覺(但 dot 色走 `--fg-disabled`)。</div>
642
+ <div className="pt-1 border-t border-divider">
643
+ 情境:表單審核中 / 已送出不可改;常配合 FormMessage 解釋「為什麼不能改」。
644
+ </div>
645
+ </div>
646
+ </div>
647
+ </div>
648
+
649
+ {/* Rule notes */}
650
+ <div className="flex flex-col gap-2 pt-4 border-t border-divider">
651
+ <span className="text-caption font-medium text-fg-secondary">行為規則</span>
652
+ <ul className="text-caption text-fg-secondary space-y-1.5 ml-4 list-disc">
653
+ <li>RadioGroup 必須提供 value(受控)或 defaultValue(非受控)——不給預設值 = 空狀態(無任何 dot)。</li>
654
+ <li>單一 disabled item 不影響 group 的 value / onValueChange——disabled item 不會被選中。</li>
655
+ <li>Keyboard:焦點進入 group 後,↑↓ 循環在非 disabled 選項間移動並自動 commit value(Radix 內建)。</li>
656
+ <li>不要用 RadioGroup 做「多選」——改用 Checkbox。RadioGroup 的核心語意是「N 選 1」。</li>
657
+ </ul>
658
+ </div>
659
+ </div>
660
+ )
661
+ }
662
+
663
+ export const StateBehavior = {
664
+ name: '狀態行為',
665
+ render: () => <StateBehaviorInner />,
666
+ }
667
+
668
+ // ── Accessibility ─────────────────────────────────────────────────────────
669
+ // 2026-05-17 ship per audit Dim 13(story-rules.md 6-canonical 含 Accessibility)
670
+ export const Accessibility = {
671
+ name: '無障礙',
672
+ render: () => (
673
+ <div className="max-w-3xl text-body text-fg-secondary">
674
+ <h3 className="text-h5 text-foreground mb-2">無障礙設計</h3>
675
+ <p className="whitespace-pre-line">{"角色與語意:整組是一個單選群組,每個選項自動標記為 radio 角色,螢幕閱讀器會念出「第幾項、共幾項、是否已選」。\n\n鍵盤操作:\n\n- Tab — 進入或離開整個群組(群組只佔一個 Tab 停留點)\n- 上 / 下方向鍵 — 在選項間移動,移到哪個就直接選哪個\n- 空白鍵 — 選取目前聚焦的選項\n\n聚焦:選項被聚焦時會顯示明顯的外框(focus ring)。注意這不是「焦點鎖定」——按 Tab 仍會離開群組、跳到表單的下一個欄位,符合一般表單填寫流程。\n\n驗證:Storybook 無障礙檢查面板應為零項嚴重違規;不靠滑鼠也能完整操作。文字對比度至少 4.5:1、控件對比度至少 3:1。"}</p>
676
+ </div>
677
+ ),
678
+ }