@qijenchen/design-system 0.1.0-beta.8 → 0.1.0-beta.80

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 (1356) hide show
  1. package/CLAUDE.md +200 -0
  2. package/README.md +10 -9
  3. package/cli-init.mjs +90 -0
  4. package/dist/components/Accordion/accordion.d.ts +1 -1
  5. package/dist/components/Accordion/accordion.d.ts.map +1 -1
  6. package/dist/components/Accordion/accordion.js +4 -1
  7. package/dist/components/Accordion/accordion.js.map +1 -1
  8. package/dist/components/Accordion/index.d.ts +2 -0
  9. package/dist/components/Accordion/index.d.ts.map +1 -0
  10. package/dist/components/Accordion/index.js +9 -0
  11. package/dist/components/Accordion/index.js.map +1 -0
  12. package/dist/components/Alert/alert.d.ts +2 -2
  13. package/dist/components/Alert/alert.d.ts.map +1 -1
  14. package/dist/components/Alert/alert.js +8 -7
  15. package/dist/components/Alert/alert.js.map +1 -1
  16. package/dist/components/Alert/index.d.ts +2 -0
  17. package/dist/components/Alert/index.d.ts.map +1 -0
  18. package/dist/components/Alert/index.js +7 -0
  19. package/dist/components/Alert/index.js.map +1 -0
  20. package/dist/components/AppShell/_demo-helpers.d.ts +3 -1
  21. package/dist/components/AppShell/_demo-helpers.d.ts.map +1 -1
  22. package/dist/components/AppShell/app-shell.d.ts +2 -2
  23. package/dist/components/AppShell/app-shell.d.ts.map +1 -1
  24. package/dist/components/AppShell/app-shell.js +9 -8
  25. package/dist/components/AppShell/app-shell.js.map +1 -1
  26. package/dist/components/AppShell/index.d.ts +2 -0
  27. package/dist/components/AppShell/index.d.ts.map +1 -0
  28. package/dist/components/AppShell/index.js +7 -0
  29. package/dist/components/AppShell/index.js.map +1 -0
  30. package/dist/components/AspectRatio/aspect-ratio.d.ts +1 -1
  31. package/dist/components/AspectRatio/aspect-ratio.d.ts.map +1 -1
  32. package/dist/components/AspectRatio/aspect-ratio.js +4 -2
  33. package/dist/components/AspectRatio/aspect-ratio.js.map +1 -1
  34. package/dist/components/AspectRatio/index.d.ts +2 -0
  35. package/dist/components/AspectRatio/index.d.ts.map +1 -0
  36. package/dist/components/AspectRatio/index.js +6 -0
  37. package/dist/components/AspectRatio/index.js.map +1 -0
  38. package/dist/components/Avatar/avatar.d.ts +12 -6
  39. package/dist/components/Avatar/avatar.d.ts.map +1 -1
  40. package/dist/components/Avatar/avatar.js +12 -23
  41. package/dist/components/Avatar/avatar.js.map +1 -1
  42. package/dist/components/Avatar/index.d.ts +2 -0
  43. package/dist/components/Avatar/index.d.ts.map +1 -0
  44. package/dist/components/Avatar/index.js +6 -0
  45. package/dist/components/Avatar/index.js.map +1 -0
  46. package/dist/components/Badge/badge.d.ts +20 -8
  47. package/dist/components/Badge/badge.d.ts.map +1 -1
  48. package/dist/components/Badge/badge.js +7 -5
  49. package/dist/components/Badge/badge.js.map +1 -1
  50. package/dist/components/Badge/index.d.ts +2 -0
  51. package/dist/components/Badge/index.d.ts.map +1 -0
  52. package/dist/components/Badge/index.js +7 -0
  53. package/dist/components/Badge/index.js.map +1 -0
  54. package/dist/components/Breadcrumb/breadcrumb.d.ts +1 -1
  55. package/dist/components/Breadcrumb/breadcrumb.js.map +1 -1
  56. package/dist/components/Breadcrumb/index.d.ts +2 -0
  57. package/dist/components/Breadcrumb/index.d.ts.map +1 -0
  58. package/dist/components/Breadcrumb/index.js +12 -0
  59. package/dist/components/Breadcrumb/index.js.map +1 -0
  60. package/dist/components/BulkActionBar/bulk-action-bar.d.ts +2 -2
  61. package/dist/components/BulkActionBar/bulk-action-bar.d.ts.map +1 -1
  62. package/dist/components/BulkActionBar/bulk-action-bar.js +3 -3
  63. package/dist/components/BulkActionBar/bulk-action-bar.js.map +1 -1
  64. package/dist/components/BulkActionBar/index.d.ts +2 -0
  65. package/dist/components/BulkActionBar/index.d.ts.map +1 -0
  66. package/dist/components/BulkActionBar/index.js +7 -0
  67. package/dist/components/BulkActionBar/index.js.map +1 -0
  68. package/dist/components/Button/button.d.ts +7 -7
  69. package/dist/components/Button/button.d.ts.map +1 -1
  70. package/dist/components/Button/button.js +13 -10
  71. package/dist/components/Button/button.js.map +1 -1
  72. package/dist/components/Button/index.d.ts +2 -0
  73. package/dist/components/Button/index.d.ts.map +1 -0
  74. package/dist/components/Button/index.js +8 -0
  75. package/dist/components/Button/index.js.map +1 -0
  76. package/dist/components/Calendar/calendar.d.ts +9 -5
  77. package/dist/components/Calendar/calendar.d.ts.map +1 -1
  78. package/dist/components/Calendar/calendar.js +88 -76
  79. package/dist/components/Calendar/calendar.js.map +1 -1
  80. package/dist/components/Calendar/index.d.ts +2 -0
  81. package/dist/components/Calendar/index.d.ts.map +1 -0
  82. package/dist/components/Calendar/index.js +6 -0
  83. package/dist/components/Calendar/index.js.map +1 -0
  84. package/dist/components/Carousel/carousel.d.ts.map +1 -1
  85. package/dist/components/Carousel/carousel.js +11 -6
  86. package/dist/components/Carousel/carousel.js.map +1 -1
  87. package/dist/components/Carousel/index.d.ts +2 -0
  88. package/dist/components/Carousel/index.d.ts.map +1 -0
  89. package/dist/components/Carousel/index.js +11 -0
  90. package/dist/components/Carousel/index.js.map +1 -0
  91. package/dist/components/Chart/chart.d.ts +2 -2
  92. package/dist/components/Chart/chart.d.ts.map +1 -1
  93. package/dist/components/Chart/chart.js +3 -1
  94. package/dist/components/Chart/chart.js.map +1 -1
  95. package/dist/components/Chart/index.d.ts +2 -0
  96. package/dist/components/Chart/index.d.ts.map +1 -0
  97. package/dist/components/Chart/index.js +11 -0
  98. package/dist/components/Chart/index.js.map +1 -0
  99. package/dist/components/Checkbox/checkbox-group.d.ts +2 -1
  100. package/dist/components/Checkbox/checkbox-group.d.ts.map +1 -1
  101. package/dist/components/Checkbox/checkbox-group.js.map +1 -1
  102. package/dist/components/Checkbox/checkbox.d.ts +13 -7
  103. package/dist/components/Checkbox/checkbox.d.ts.map +1 -1
  104. package/dist/components/Checkbox/checkbox.js +49 -15
  105. package/dist/components/Checkbox/checkbox.js.map +1 -1
  106. package/dist/components/Checkbox/index.d.ts +2 -0
  107. package/dist/components/Checkbox/index.d.ts.map +1 -0
  108. package/dist/components/Checkbox/index.js +7 -0
  109. package/dist/components/Checkbox/index.js.map +1 -0
  110. package/dist/components/Chip/chip.d.ts +6 -6
  111. package/dist/components/Chip/chip.js +4 -3
  112. package/dist/components/Chip/chip.js.map +1 -1
  113. package/dist/components/Chip/index.d.ts +2 -0
  114. package/dist/components/Chip/index.d.ts.map +1 -0
  115. package/dist/components/Chip/index.js +8 -0
  116. package/dist/components/Chip/index.js.map +1 -0
  117. package/dist/components/CircularProgress/circular-progress.d.ts +2 -3
  118. package/dist/components/CircularProgress/circular-progress.d.ts.map +1 -1
  119. package/dist/components/CircularProgress/circular-progress.js +4 -3
  120. package/dist/components/CircularProgress/circular-progress.js.map +1 -1
  121. package/dist/components/CircularProgress/index.d.ts +2 -0
  122. package/dist/components/CircularProgress/index.d.ts.map +1 -0
  123. package/dist/components/CircularProgress/index.js +6 -0
  124. package/dist/components/CircularProgress/index.js.map +1 -0
  125. package/dist/components/Coachmark/coachmark-story-helpers.d.ts +22 -0
  126. package/dist/components/Coachmark/coachmark-story-helpers.d.ts.map +1 -0
  127. package/dist/components/Coachmark/coachmark.d.ts +4 -4
  128. package/dist/components/Coachmark/coachmark.d.ts.map +1 -1
  129. package/dist/components/Coachmark/coachmark.js +9 -4
  130. package/dist/components/Coachmark/coachmark.js.map +1 -1
  131. package/dist/components/Coachmark/index.d.ts +2 -0
  132. package/dist/components/Coachmark/index.d.ts.map +1 -0
  133. package/dist/components/Coachmark/index.js +6 -0
  134. package/dist/components/Coachmark/index.js.map +1 -0
  135. package/dist/components/Combobox/combobox.d.ts +16 -7
  136. package/dist/components/Combobox/combobox.d.ts.map +1 -1
  137. package/dist/components/Combobox/combobox.js +74 -39
  138. package/dist/components/Combobox/combobox.js.map +1 -1
  139. package/dist/components/Combobox/index.d.ts +2 -0
  140. package/dist/components/Combobox/index.d.ts.map +1 -0
  141. package/dist/components/Combobox/index.js +6 -0
  142. package/dist/components/Combobox/index.js.map +1 -0
  143. package/dist/components/Command/command.d.ts +5 -1
  144. package/dist/components/Command/command.d.ts.map +1 -1
  145. package/dist/components/Command/command.js +6 -6
  146. package/dist/components/Command/command.js.map +1 -1
  147. package/dist/components/Command/index.d.ts +2 -0
  148. package/dist/components/Command/index.d.ts.map +1 -0
  149. package/dist/components/Command/index.js +14 -0
  150. package/dist/components/Command/index.js.map +1 -0
  151. package/dist/components/DataTable/cell-registry.d.ts.map +1 -1
  152. package/dist/components/DataTable/cell-registry.js +6 -5
  153. package/dist/components/DataTable/cell-registry.js.map +1 -1
  154. package/dist/components/DataTable/data-table.d.ts +29 -8
  155. package/dist/components/DataTable/data-table.d.ts.map +1 -1
  156. package/dist/components/DataTable/data-table.js +69 -39
  157. package/dist/components/DataTable/data-table.js.map +1 -1
  158. package/dist/components/DataTable/filter-operators.d.ts +1 -1
  159. package/dist/components/DataTable/filter-tree.d.ts +1 -1
  160. package/dist/components/DataTable/index.d.ts +2 -0
  161. package/dist/components/DataTable/index.d.ts.map +1 -0
  162. package/dist/components/DataTable/index.js +8 -0
  163. package/dist/components/DataTable/index.js.map +1 -0
  164. package/dist/components/DateGrid/date-grid.d.ts +21 -17
  165. package/dist/components/DateGrid/date-grid.d.ts.map +1 -1
  166. package/dist/components/DateGrid/date-grid.js +2 -2
  167. package/dist/components/DateGrid/date-grid.js.map +1 -1
  168. package/dist/components/DateGrid/index.d.ts +2 -0
  169. package/dist/components/DateGrid/index.d.ts.map +1 -0
  170. package/dist/components/DateGrid/index.js +6 -0
  171. package/dist/components/DateGrid/index.js.map +1 -0
  172. package/dist/components/DatePicker/date-picker.d.ts.map +1 -1
  173. package/dist/components/DatePicker/date-picker.js +29 -18
  174. package/dist/components/DatePicker/date-picker.js.map +1 -1
  175. package/dist/components/DatePicker/index.d.ts +2 -0
  176. package/dist/components/DatePicker/index.d.ts.map +1 -0
  177. package/dist/components/DatePicker/index.js +8 -0
  178. package/dist/components/DatePicker/index.js.map +1 -0
  179. package/dist/components/DescriptionList/description-list.d.ts +3 -3
  180. package/dist/components/DescriptionList/description-list.js +4 -3
  181. package/dist/components/DescriptionList/description-list.js.map +1 -1
  182. package/dist/components/DescriptionList/index.d.ts +2 -0
  183. package/dist/components/DescriptionList/index.d.ts.map +1 -0
  184. package/dist/components/DescriptionList/index.js +7 -0
  185. package/dist/components/DescriptionList/index.js.map +1 -0
  186. package/dist/components/Dialog/dialog.d.ts.map +1 -1
  187. package/dist/components/Dialog/dialog.js.map +1 -1
  188. package/dist/components/Dialog/index.d.ts +2 -0
  189. package/dist/components/Dialog/index.d.ts.map +1 -0
  190. package/dist/components/Dialog/index.js +16 -0
  191. package/dist/components/Dialog/index.js.map +1 -0
  192. package/dist/components/DropdownMenu/dropdown-menu.d.ts +3 -2
  193. package/dist/components/DropdownMenu/dropdown-menu.d.ts.map +1 -1
  194. package/dist/components/DropdownMenu/dropdown-menu.js +3 -4
  195. package/dist/components/DropdownMenu/dropdown-menu.js.map +1 -1
  196. package/dist/components/DropdownMenu/index.d.ts +2 -0
  197. package/dist/components/DropdownMenu/index.d.ts.map +1 -0
  198. package/dist/components/DropdownMenu/index.js +21 -0
  199. package/dist/components/DropdownMenu/index.js.map +1 -0
  200. package/dist/components/Empty/empty.d.ts +11 -3
  201. package/dist/components/Empty/empty.d.ts.map +1 -1
  202. package/dist/components/Empty/empty.js +6 -6
  203. package/dist/components/Empty/empty.js.map +1 -1
  204. package/dist/components/Empty/index.d.ts +2 -0
  205. package/dist/components/Empty/index.d.ts.map +1 -0
  206. package/dist/components/Empty/index.js +6 -0
  207. package/dist/components/Empty/index.js.map +1 -0
  208. package/dist/components/Field/field-context.d.ts +49 -0
  209. package/dist/components/Field/field-context.d.ts.map +1 -1
  210. package/dist/components/Field/field-context.js +42 -0
  211. package/dist/components/Field/field-context.js.map +1 -1
  212. package/dist/components/Field/field-types.js.map +1 -1
  213. package/dist/components/Field/field-wrapper.js +5 -5
  214. package/dist/components/Field/field-wrapper.js.map +1 -1
  215. package/dist/components/Field/field.d.ts +4 -2
  216. package/dist/components/Field/field.d.ts.map +1 -1
  217. package/dist/components/Field/field.js +1 -0
  218. package/dist/components/Field/field.js.map +1 -1
  219. package/dist/components/Field/index.d.ts +2 -0
  220. package/dist/components/Field/index.d.ts.map +1 -0
  221. package/dist/components/Field/index.js +12 -0
  222. package/dist/components/Field/index.js.map +1 -0
  223. package/dist/components/Field/use-form-validation.d.ts +88 -0
  224. package/dist/components/Field/use-form-validation.d.ts.map +1 -0
  225. package/dist/components/Field/use-form-validation.js +127 -0
  226. package/dist/components/Field/use-form-validation.js.map +1 -0
  227. package/dist/components/FieldControlGroup/field-control-group.d.ts +5 -5
  228. package/dist/components/FieldControlGroup/field-control-group.d.ts.map +1 -1
  229. package/dist/components/FieldControlGroup/field-control-group.js +1 -1
  230. package/dist/components/FieldControlGroup/field-control-group.js.map +1 -1
  231. package/dist/components/FieldControlGroup/index.d.ts +2 -0
  232. package/dist/components/FieldControlGroup/index.d.ts.map +1 -0
  233. package/dist/components/FieldControlGroup/index.js +6 -0
  234. package/dist/components/FieldControlGroup/index.js.map +1 -0
  235. package/dist/components/FileItem/file-item.d.ts +12 -2
  236. package/dist/components/FileItem/file-item.d.ts.map +1 -1
  237. package/dist/components/FileItem/file-item.js +20 -6
  238. package/dist/components/FileItem/file-item.js.map +1 -1
  239. package/dist/components/FileItem/index.d.ts +2 -0
  240. package/dist/components/FileItem/index.d.ts.map +1 -0
  241. package/dist/components/FileItem/index.js +6 -0
  242. package/dist/components/FileItem/index.js.map +1 -0
  243. package/dist/components/FileUpload/file-upload.d.ts +32 -13
  244. package/dist/components/FileUpload/file-upload.d.ts.map +1 -1
  245. package/dist/components/FileUpload/file-upload.js +62 -18
  246. package/dist/components/FileUpload/file-upload.js.map +1 -1
  247. package/dist/components/FileUpload/index.d.ts +2 -0
  248. package/dist/components/FileUpload/index.d.ts.map +1 -0
  249. package/dist/components/FileUpload/index.js +6 -0
  250. package/dist/components/FileUpload/index.js.map +1 -0
  251. package/dist/components/FileViewer/file-viewer.d.ts +2 -2
  252. package/dist/components/FileViewer/file-viewer.d.ts.map +1 -1
  253. package/dist/components/FileViewer/file-viewer.js +28 -19
  254. package/dist/components/FileViewer/file-viewer.js.map +1 -1
  255. package/dist/components/FileViewer/index.d.ts +2 -0
  256. package/dist/components/FileViewer/index.d.ts.map +1 -0
  257. package/dist/components/FileViewer/index.js +7 -0
  258. package/dist/components/FileViewer/index.js.map +1 -0
  259. package/dist/components/HoverCard/hover-card.d.ts +7 -3
  260. package/dist/components/HoverCard/hover-card.d.ts.map +1 -1
  261. package/dist/components/HoverCard/hover-card.js +4 -3
  262. package/dist/components/HoverCard/hover-card.js.map +1 -1
  263. package/dist/components/HoverCard/index.d.ts +2 -0
  264. package/dist/components/HoverCard/index.d.ts.map +1 -0
  265. package/dist/components/HoverCard/index.js +8 -0
  266. package/dist/components/HoverCard/index.js.map +1 -0
  267. package/dist/components/Input/index.d.ts +2 -0
  268. package/dist/components/Input/index.d.ts.map +1 -0
  269. package/dist/components/Input/index.js +6 -0
  270. package/dist/components/Input/index.js.map +1 -0
  271. package/dist/components/Input/input.d.ts +5 -2
  272. package/dist/components/Input/input.d.ts.map +1 -1
  273. package/dist/components/Input/input.js +10 -8
  274. package/dist/components/Input/input.js.map +1 -1
  275. package/dist/components/LinkInput/index.d.ts +2 -0
  276. package/dist/components/LinkInput/index.d.ts.map +1 -0
  277. package/dist/components/LinkInput/index.js +6 -0
  278. package/dist/components/LinkInput/index.js.map +1 -0
  279. package/dist/components/LinkInput/link-input.d.ts.map +1 -1
  280. package/dist/components/LinkInput/link-input.js +8 -8
  281. package/dist/components/LinkInput/link-input.js.map +1 -1
  282. package/dist/components/Menu/index.d.ts +2 -0
  283. package/dist/components/Menu/index.d.ts.map +1 -0
  284. package/dist/components/Menu/index.js +9 -0
  285. package/dist/components/Menu/index.js.map +1 -0
  286. package/dist/components/Menu/menu-item.d.ts +6 -2
  287. package/dist/components/Menu/menu-item.d.ts.map +1 -1
  288. package/dist/components/Menu/menu-item.js +2 -1
  289. package/dist/components/Menu/menu-item.js.map +1 -1
  290. package/dist/components/Notice/index.d.ts +2 -0
  291. package/dist/components/Notice/index.d.ts.map +1 -0
  292. package/dist/components/Notice/index.js +8 -0
  293. package/dist/components/Notice/index.js.map +1 -0
  294. package/dist/components/Notice/notice.d.ts +13 -6
  295. package/dist/components/Notice/notice.d.ts.map +1 -1
  296. package/dist/components/Notice/notice.js +16 -6
  297. package/dist/components/Notice/notice.js.map +1 -1
  298. package/dist/components/NumberInput/index.d.ts +2 -0
  299. package/dist/components/NumberInput/index.d.ts.map +1 -0
  300. package/dist/components/NumberInput/index.js +7 -0
  301. package/dist/components/NumberInput/index.js.map +1 -0
  302. package/dist/components/NumberInput/number-input.d.ts.map +1 -1
  303. package/dist/components/NumberInput/number-input.js +8 -7
  304. package/dist/components/NumberInput/number-input.js.map +1 -1
  305. package/dist/components/OverflowIndicator/index.d.ts +2 -0
  306. package/dist/components/OverflowIndicator/index.d.ts.map +1 -0
  307. package/dist/components/OverflowIndicator/index.js +6 -0
  308. package/dist/components/OverflowIndicator/index.js.map +1 -0
  309. package/dist/components/OverflowIndicator/overflow-indicator.d.ts +5 -1
  310. package/dist/components/OverflowIndicator/overflow-indicator.d.ts.map +1 -1
  311. package/dist/components/OverflowIndicator/overflow-indicator.js +13 -6
  312. package/dist/components/OverflowIndicator/overflow-indicator.js.map +1 -1
  313. package/dist/components/PeoplePicker/index.d.ts +2 -0
  314. package/dist/components/PeoplePicker/index.d.ts.map +1 -0
  315. package/dist/components/PeoplePicker/index.js +9 -0
  316. package/dist/components/PeoplePicker/index.js.map +1 -0
  317. package/dist/components/PeoplePicker/people-picker-helpers.d.ts.map +1 -1
  318. package/dist/components/PeoplePicker/people-picker-helpers.js +2 -2
  319. package/dist/components/PeoplePicker/people-picker-helpers.js.map +1 -1
  320. package/dist/components/PeoplePicker/people-picker.d.ts.map +1 -1
  321. package/dist/components/PeoplePicker/people-picker.js +21 -17
  322. package/dist/components/PeoplePicker/people-picker.js.map +1 -1
  323. package/dist/components/PeoplePicker/person-display.d.ts +7 -7
  324. package/dist/components/PeoplePicker/person-display.d.ts.map +1 -1
  325. package/dist/components/PeoplePicker/person-display.js +9 -9
  326. package/dist/components/PeoplePicker/person-display.js.map +1 -1
  327. package/dist/components/Popover/index.d.ts +2 -0
  328. package/dist/components/Popover/index.d.ts.map +1 -0
  329. package/dist/components/Popover/index.js +14 -0
  330. package/dist/components/Popover/index.js.map +1 -0
  331. package/dist/components/Popover/popover.d.ts +2 -2
  332. package/dist/components/Popover/popover.d.ts.map +1 -1
  333. package/dist/components/Popover/popover.js +12 -12
  334. package/dist/components/Popover/popover.js.map +1 -1
  335. package/dist/components/ProfileCard/index.d.ts +2 -0
  336. package/dist/components/ProfileCard/index.d.ts.map +1 -0
  337. package/dist/components/ProfileCard/index.js +8 -0
  338. package/dist/components/ProfileCard/index.js.map +1 -0
  339. package/dist/components/{NameCard/name-card.d.ts → ProfileCard/profile-card.d.ts} +26 -20
  340. package/dist/components/ProfileCard/profile-card.d.ts.map +1 -0
  341. package/dist/components/{NameCard/name-card.js → ProfileCard/profile-card.js} +11 -10
  342. package/dist/components/ProfileCard/profile-card.js.map +1 -0
  343. package/dist/components/ProgressBar/index.d.ts +2 -0
  344. package/dist/components/ProgressBar/index.d.ts.map +1 -0
  345. package/dist/components/ProgressBar/index.js +6 -0
  346. package/dist/components/ProgressBar/index.js.map +1 -0
  347. package/dist/components/ProgressBar/progress-bar.d.ts +2 -2
  348. package/dist/components/ProgressBar/progress-bar.js +3 -3
  349. package/dist/components/ProgressBar/progress-bar.js.map +1 -1
  350. package/dist/components/RadioGroup/index.d.ts +2 -0
  351. package/dist/components/RadioGroup/index.d.ts.map +1 -0
  352. package/dist/components/RadioGroup/index.js +8 -0
  353. package/dist/components/RadioGroup/index.js.map +1 -0
  354. package/dist/components/RadioGroup/radio-group.d.ts +15 -9
  355. package/dist/components/RadioGroup/radio-group.d.ts.map +1 -1
  356. package/dist/components/RadioGroup/radio-group.js +71 -33
  357. package/dist/components/RadioGroup/radio-group.js.map +1 -1
  358. package/dist/components/Rating/index.d.ts +2 -0
  359. package/dist/components/Rating/index.d.ts.map +1 -0
  360. package/dist/components/Rating/index.js +6 -0
  361. package/dist/components/Rating/index.js.map +1 -0
  362. package/dist/components/Rating/rating.d.ts +6 -2
  363. package/dist/components/Rating/rating.d.ts.map +1 -1
  364. package/dist/components/Rating/rating.js +10 -7
  365. package/dist/components/Rating/rating.js.map +1 -1
  366. package/dist/components/ScrollArea/index.d.ts +2 -0
  367. package/dist/components/ScrollArea/index.d.ts.map +1 -0
  368. package/dist/components/ScrollArea/index.js +7 -0
  369. package/dist/components/ScrollArea/index.js.map +1 -0
  370. package/dist/components/ScrollArea/scroll-area.d.ts +1 -1
  371. package/dist/components/ScrollArea/scroll-area.js +2 -2
  372. package/dist/components/ScrollArea/scroll-area.js.map +1 -1
  373. package/dist/components/SegmentedControl/index.d.ts +2 -0
  374. package/dist/components/SegmentedControl/index.d.ts.map +1 -0
  375. package/dist/components/SegmentedControl/index.js +9 -0
  376. package/dist/components/SegmentedControl/index.js.map +1 -0
  377. package/dist/components/SegmentedControl/segmented-control.d.ts +2 -2
  378. package/dist/components/SegmentedControl/segmented-control.d.ts.map +1 -1
  379. package/dist/components/SegmentedControl/segmented-control.js +8 -10
  380. package/dist/components/SegmentedControl/segmented-control.js.map +1 -1
  381. package/dist/components/Select/index.d.ts +2 -0
  382. package/dist/components/Select/index.d.ts.map +1 -0
  383. package/dist/components/Select/index.js +6 -0
  384. package/dist/components/Select/index.js.map +1 -0
  385. package/dist/components/Select/select.d.ts.map +1 -1
  386. package/dist/components/Select/select.js +30 -18
  387. package/dist/components/Select/select.js.map +1 -1
  388. package/dist/components/SelectMenu/index.d.ts +2 -0
  389. package/dist/components/SelectMenu/index.d.ts.map +1 -0
  390. package/dist/components/SelectMenu/index.js +6 -0
  391. package/dist/components/SelectMenu/index.js.map +1 -0
  392. package/dist/components/SelectMenu/select-menu.d.ts +10 -5
  393. package/dist/components/SelectMenu/select-menu.d.ts.map +1 -1
  394. package/dist/components/SelectMenu/select-menu.js +12 -4
  395. package/dist/components/SelectMenu/select-menu.js.map +1 -1
  396. package/dist/components/SelectionControl/index.d.ts +2 -0
  397. package/dist/components/SelectionControl/index.d.ts.map +1 -0
  398. package/dist/components/SelectionControl/index.js +7 -0
  399. package/dist/components/SelectionControl/index.js.map +1 -0
  400. package/dist/components/SelectionControl/selection-item.d.ts +5 -1
  401. package/dist/components/SelectionControl/selection-item.d.ts.map +1 -1
  402. package/dist/components/SelectionControl/selection-item.js +3 -1
  403. package/dist/components/SelectionControl/selection-item.js.map +1 -1
  404. package/dist/components/Separator/index.d.ts +2 -0
  405. package/dist/components/Separator/index.d.ts.map +1 -0
  406. package/dist/components/Separator/index.js +6 -0
  407. package/dist/components/Separator/index.js.map +1 -0
  408. package/dist/components/Separator/separator.d.ts +2 -2
  409. package/dist/components/Separator/separator.js +4 -3
  410. package/dist/components/Separator/separator.js.map +1 -1
  411. package/dist/components/Sheet/index.d.ts +2 -0
  412. package/dist/components/Sheet/index.d.ts.map +1 -0
  413. package/dist/components/Sheet/index.js +17 -0
  414. package/dist/components/Sheet/index.js.map +1 -0
  415. package/dist/components/Sheet/sheet.d.ts +6 -5
  416. package/dist/components/Sheet/sheet.d.ts.map +1 -1
  417. package/dist/components/Sheet/sheet.js +1 -1
  418. package/dist/components/Sheet/sheet.js.map +1 -1
  419. package/dist/components/Sidebar/index.d.ts +2 -0
  420. package/dist/components/Sidebar/index.d.ts.map +1 -0
  421. package/dist/components/Sidebar/index.js +24 -0
  422. package/dist/components/Sidebar/index.js.map +1 -0
  423. package/dist/components/Sidebar/sidebar.d.ts +2 -2
  424. package/dist/components/Sidebar/sidebar.d.ts.map +1 -1
  425. package/dist/components/Sidebar/sidebar.js +9 -5
  426. package/dist/components/Sidebar/sidebar.js.map +1 -1
  427. package/dist/components/Skeleton/index.d.ts +2 -0
  428. package/dist/components/Skeleton/index.d.ts.map +1 -0
  429. package/dist/components/Skeleton/index.js +6 -0
  430. package/dist/components/Skeleton/index.js.map +1 -0
  431. package/dist/components/Skeleton/skeleton.d.ts +1 -1
  432. package/dist/components/Skeleton/skeleton.js +2 -1
  433. package/dist/components/Skeleton/skeleton.js.map +1 -1
  434. package/dist/components/Slider/index.d.ts +2 -0
  435. package/dist/components/Slider/index.d.ts.map +1 -0
  436. package/dist/components/Slider/index.js +7 -0
  437. package/dist/components/Slider/index.js.map +1 -0
  438. package/dist/components/Slider/slider.d.ts +6 -6
  439. package/dist/components/Slider/slider.d.ts.map +1 -1
  440. package/dist/components/Slider/slider.js +25 -10
  441. package/dist/components/Slider/slider.js.map +1 -1
  442. package/dist/components/Steps/index.d.ts +2 -0
  443. package/dist/components/Steps/index.d.ts.map +1 -0
  444. package/dist/components/Steps/index.js +12 -0
  445. package/dist/components/Steps/index.js.map +1 -0
  446. package/dist/components/Steps/steps.d.ts +2 -2
  447. package/dist/components/Steps/steps.d.ts.map +1 -1
  448. package/dist/components/Steps/steps.js +48 -23
  449. package/dist/components/Steps/steps.js.map +1 -1
  450. package/dist/components/Switch/index.d.ts +2 -0
  451. package/dist/components/Switch/index.d.ts.map +1 -0
  452. package/dist/components/Switch/index.js +7 -0
  453. package/dist/components/Switch/index.js.map +1 -0
  454. package/dist/components/Switch/switch.d.ts +16 -14
  455. package/dist/components/Switch/switch.d.ts.map +1 -1
  456. package/dist/components/Switch/switch.js +46 -17
  457. package/dist/components/Switch/switch.js.map +1 -1
  458. package/dist/components/Tabs/index.d.ts +2 -0
  459. package/dist/components/Tabs/index.d.ts.map +1 -0
  460. package/dist/components/Tabs/index.js +10 -0
  461. package/dist/components/Tabs/index.js.map +1 -0
  462. package/dist/components/Tabs/tabs.d.ts +5 -5
  463. package/dist/components/Tabs/tabs.d.ts.map +1 -1
  464. package/dist/components/Tabs/tabs.js +14 -7
  465. package/dist/components/Tabs/tabs.js.map +1 -1
  466. package/dist/components/Tag/index.d.ts +2 -0
  467. package/dist/components/Tag/index.d.ts.map +1 -0
  468. package/dist/components/Tag/index.js +7 -0
  469. package/dist/components/Tag/index.js.map +1 -0
  470. package/dist/components/Tag/tag.d.ts +37 -23
  471. package/dist/components/Tag/tag.d.ts.map +1 -1
  472. package/dist/components/Tag/tag.js +39 -44
  473. package/dist/components/Tag/tag.js.map +1 -1
  474. package/dist/components/Textarea/index.d.ts +2 -0
  475. package/dist/components/Textarea/index.d.ts.map +1 -0
  476. package/dist/components/Textarea/index.js +7 -0
  477. package/dist/components/Textarea/index.js.map +1 -0
  478. package/dist/components/Textarea/textarea.d.ts +5 -10
  479. package/dist/components/Textarea/textarea.d.ts.map +1 -1
  480. package/dist/components/Textarea/textarea.js +14 -12
  481. package/dist/components/Textarea/textarea.js.map +1 -1
  482. package/dist/components/TimePicker/index.d.ts +2 -0
  483. package/dist/components/TimePicker/index.d.ts.map +1 -0
  484. package/dist/components/TimePicker/index.js +6 -0
  485. package/dist/components/TimePicker/index.js.map +1 -0
  486. package/dist/components/TimePicker/time-columns.d.ts.map +1 -1
  487. package/dist/components/TimePicker/time-columns.js +4 -1
  488. package/dist/components/TimePicker/time-columns.js.map +1 -1
  489. package/dist/components/TimePicker/time-picker.d.ts +2 -1
  490. package/dist/components/TimePicker/time-picker.d.ts.map +1 -1
  491. package/dist/components/TimePicker/time-picker.js +33 -32
  492. package/dist/components/TimePicker/time-picker.js.map +1 -1
  493. package/dist/components/Toast/index.d.ts +2 -0
  494. package/dist/components/Toast/index.d.ts.map +1 -0
  495. package/dist/components/Toast/index.js +7 -0
  496. package/dist/components/Toast/index.js.map +1 -0
  497. package/dist/components/Toast/toast.d.ts +1 -1
  498. package/dist/components/Toast/toast.js +2 -2
  499. package/dist/components/Toast/toast.js.map +1 -1
  500. package/dist/components/Tooltip/index.d.ts +2 -0
  501. package/dist/components/Tooltip/index.d.ts.map +1 -0
  502. package/dist/components/Tooltip/index.js +9 -0
  503. package/dist/components/Tooltip/index.js.map +1 -0
  504. package/dist/components/Tooltip/tooltip.d.ts +1 -1
  505. package/dist/components/Tooltip/tooltip.d.ts.map +1 -1
  506. package/dist/components/Tooltip/tooltip.js +2 -1
  507. package/dist/components/Tooltip/tooltip.js.map +1 -1
  508. package/dist/components/TreeView/index.d.ts +2 -0
  509. package/dist/components/TreeView/index.d.ts.map +1 -0
  510. package/dist/components/TreeView/index.js +8 -0
  511. package/dist/components/TreeView/index.js.map +1 -0
  512. package/dist/components/TreeView/tree-view.d.ts +11 -11
  513. package/dist/components/TreeView/tree-view.d.ts.map +1 -1
  514. package/dist/components/TreeView/tree-view.js +36 -9
  515. package/dist/components/TreeView/tree-view.js.map +1 -1
  516. package/dist/hooks/use-overflow-items.d.ts +10 -6
  517. package/dist/hooks/use-overflow-items.d.ts.map +1 -1
  518. package/dist/hooks/use-overflow-items.js.map +1 -1
  519. package/dist/index.d.ts +57 -67
  520. package/dist/index.d.ts.map +1 -1
  521. package/dist/index.js +29 -59
  522. package/dist/index.js.map +1 -1
  523. package/dist/lib/utils.d.ts.map +1 -1
  524. package/dist/lib/utils.js +3 -1
  525. package/dist/lib/utils.js.map +1 -1
  526. package/dist/node_modules/react-hook-form/dist/index.esm.js +1950 -0
  527. package/dist/node_modules/react-hook-form/dist/index.esm.js.map +1 -0
  528. package/dist/patterns/element-anatomy/index.d.ts +2 -0
  529. package/dist/patterns/element-anatomy/index.d.ts.map +1 -0
  530. package/dist/patterns/element-anatomy/index.js +20 -0
  531. package/dist/patterns/element-anatomy/index.js.map +1 -0
  532. package/dist/patterns/element-anatomy/item-anatomy.d.ts +9 -5
  533. package/dist/patterns/element-anatomy/item-anatomy.d.ts.map +1 -1
  534. package/dist/patterns/element-anatomy/item-anatomy.js +1 -1
  535. package/dist/patterns/element-anatomy/item-anatomy.js.map +1 -1
  536. package/dist/patterns/header-canonical/chrome-header.d.ts +13 -4
  537. package/dist/patterns/header-canonical/chrome-header.d.ts.map +1 -1
  538. package/dist/patterns/header-canonical/chrome-header.js +4 -2
  539. package/dist/patterns/header-canonical/chrome-header.js.map +1 -1
  540. package/dist/patterns/header-canonical/index.d.ts +2 -0
  541. package/dist/patterns/header-canonical/index.d.ts.map +1 -0
  542. package/dist/patterns/header-canonical/index.js +6 -0
  543. package/dist/patterns/header-canonical/index.js.map +1 -0
  544. package/dist/patterns/horizontal-overflow/index.d.ts +2 -0
  545. package/dist/patterns/horizontal-overflow/index.d.ts.map +1 -0
  546. package/dist/patterns/horizontal-overflow/index.js +14 -0
  547. package/dist/patterns/horizontal-overflow/index.js.map +1 -0
  548. package/dist/patterns/overlay-surface/index.d.ts +2 -0
  549. package/dist/patterns/overlay-surface/index.d.ts.map +1 -0
  550. package/dist/patterns/overlay-surface/index.js +8 -0
  551. package/dist/patterns/overlay-surface/index.js.map +1 -0
  552. package/dist/patterns/overlay-surface/overlay-surface.d.ts +11 -2
  553. package/dist/patterns/overlay-surface/overlay-surface.d.ts.map +1 -1
  554. package/dist/patterns/overlay-surface/overlay-surface.js +5 -2
  555. package/dist/patterns/overlay-surface/overlay-surface.js.map +1 -1
  556. package/dist/patterns/resize-handle/index.d.ts +2 -0
  557. package/dist/patterns/resize-handle/index.d.ts.map +1 -0
  558. package/dist/patterns/resize-handle/index.js +5 -0
  559. package/dist/patterns/resize-handle/index.js.map +1 -0
  560. package/dist/story-governance/category-matrix.d.ts +35 -0
  561. package/dist/story-governance/category-matrix.d.ts.map +1 -0
  562. package/dist/tokens/categorical-color.d.ts +60 -0
  563. package/dist/tokens/categorical-color.d.ts.map +1 -0
  564. package/dist/tokens/categorical-color.js +110 -0
  565. package/dist/tokens/categorical-color.js.map +1 -0
  566. package/dist/tokens/motion/motion.d.ts +1 -1
  567. package/dist/tokens/motion/motion.d.ts.map +1 -1
  568. package/dist/tokens/motion/motion.js.map +1 -1
  569. package/dist/tokens/uiSize/icon-size.d.ts +1 -2
  570. package/dist/tokens/uiSize/icon-size.d.ts.map +1 -1
  571. package/ds-canonical/commands/README.md +26 -0
  572. package/ds-canonical/commands/gov-status.md +79 -0
  573. package/ds-canonical/fork/governance.lock +222 -0
  574. package/ds-canonical/fork/hooks/block_prototype_imports.py +111 -0
  575. package/ds-canonical/fork/hooks/check_chrome_header_avatar_canonical.sh +95 -0
  576. package/ds-canonical/fork/hooks/check_consumer_app_invariants.sh +349 -0
  577. package/ds-canonical/fork/hooks/check_ds_anchor_preflight.sh +132 -0
  578. package/ds-canonical/fork/hooks/check_escape_marker_abuse.sh +140 -0
  579. package/ds-canonical/fork/hooks/check_field_family_invariants.sh +250 -0
  580. package/ds-canonical/fork/hooks/check_fork_product_quality.sh +36 -0
  581. package/ds-canonical/fork/hooks/check_item_list_gap.sh +54 -0
  582. package/ds-canonical/fork/hooks/check_layout_space_magic_numbers.sh +96 -0
  583. package/ds-canonical/fork/hooks/check_opacity_token_usage.sh +149 -0
  584. package/ds-canonical/fork/hooks/check_pattern_invariants.sh +196 -0
  585. package/ds-canonical/fork/hooks/check_sidebar_menu_button_implicit_wrap.sh +86 -0
  586. package/ds-canonical/fork/hooks/check_tabs_content_chrome_body_double_gap.sh +183 -0
  587. package/ds-canonical/fork/hooks/check_tailwind_wildcard_in_docs.sh +79 -0
  588. package/ds-canonical/fork/hooks/inject_deploy_url_after_push.sh +238 -0
  589. package/ds-canonical/fork/launchers/fork-governance-dispatcher.sh +44 -0
  590. package/ds-canonical/fork/launchers/inject_fork_governance_preamble.sh +54 -0
  591. package/ds-canonical/fork/launchers/settings-hooks.json +58 -0
  592. package/ds-canonical/fork/manifest.json +98 -0
  593. package/ds-canonical/fork/preamble.md +495 -0
  594. package/ds-canonical/fork/skills/bug-fix-rhythm/SKILL.md +183 -0
  595. package/ds-canonical/fork/skills/code-quality-audit/SKILL.md +65 -0
  596. package/ds-canonical/fork/skills/delivery-handoff/SKILL.md +229 -0
  597. package/ds-canonical/fork/skills/delivery-handoff/references/flow-diagram.md +180 -0
  598. package/ds-canonical/fork/skills/delivery-handoff/references/handoff-template.md +177 -0
  599. package/ds-canonical/fork/skills/delivery-handoff/references/inventory-checklist.md +196 -0
  600. package/ds-canonical/fork/skills/performance-audit/SKILL.md +107 -0
  601. package/ds-canonical/fork/skills/product-ui-audit/SKILL.md +232 -0
  602. package/ds-canonical/fork/skills/product-ui-audit/references/audit-checks.md +246 -0
  603. package/ds-canonical/fork/skills/product-ui-audit/references/common-misuses.md +329 -0
  604. package/ds-canonical/fork/skills/product-ui-audit/references/report-template.md +159 -0
  605. package/ds-canonical/fork/skills/propose-options/SKILL.md +177 -0
  606. package/ds-canonical/fork/skills/prototype/SKILL.md +244 -0
  607. package/ds-canonical/fork/skills/prototype/references/audit-checks.md +38 -0
  608. package/ds-canonical/fork/skills/prototype/references/benchmark-sources.md +94 -0
  609. package/ds-canonical/fork/skills/prototype/references/checkpoints.md +191 -0
  610. package/ds-canonical/fork/skills/prototype/references/evaluation-matrix.md +141 -0
  611. package/ds-canonical/fork/skills/prototype/references/ooux-template.md +198 -0
  612. package/ds-canonical/fork/skills/prototype/references/proposal-template.md +229 -0
  613. package/ds-canonical/fork/skills/scan-similar-bugs/SKILL.md +200 -0
  614. package/ds-canonical/fork/skills/ux-audit/SKILL.md +130 -0
  615. package/ds-canonical/fork/skills/visual-audit/SKILL.md +247 -0
  616. package/ds-canonical/fork/skills/visual-audit/output/.gitkeep +0 -0
  617. package/ds-canonical/fork/skills/visual-audit/references/audit-architecture.md +101 -0
  618. package/ds-canonical/fork/skills/visual-audit/references/visual-checklist.md +297 -0
  619. package/ds-canonical/fork/skills/visual-audit/references/world-class-benchmarks.md +198 -0
  620. package/ds-canonical/hooks/README.md +145 -0
  621. package/ds-canonical/hooks/_log-fire.sh +46 -0
  622. package/ds-canonical/hooks/auto_regen_ds_barrel.sh +58 -0
  623. package/ds-canonical/hooks/block_prototype_imports.py +111 -0
  624. package/ds-canonical/hooks/check_audit_post_report_validator.sh +156 -0
  625. package/ds-canonical/hooks/check_audit_sample_escape.sh +76 -0
  626. package/ds-canonical/hooks/check_benchmark_citation.sh +106 -0
  627. package/ds-canonical/hooks/check_canonical_propagation.sh +189 -0
  628. package/ds-canonical/hooks/check_chrome_header_avatar_canonical.sh +95 -0
  629. package/ds-canonical/hooks/check_codex_brief_invariants.sh +115 -0
  630. package/ds-canonical/hooks/check_codex_collab_5step.sh +108 -0
  631. package/ds-canonical/hooks/check_consumer_app_invariants.sh +349 -0
  632. package/ds-canonical/hooks/check_datatable_invariants.sh +180 -0
  633. package/ds-canonical/hooks/check_dim_count_drift.sh +72 -0
  634. package/ds-canonical/hooks/check_ds_anchor_preflight.sh +132 -0
  635. package/ds-canonical/hooks/check_escape_marker_abuse.sh +140 -0
  636. package/ds-canonical/hooks/check_field_controls_contracts.sh +137 -0
  637. package/ds-canonical/hooks/check_field_family_invariants.sh +250 -0
  638. package/ds-canonical/hooks/check_file_size_budget.sh +60 -0
  639. package/ds-canonical/hooks/check_full_story_visual_interaction_sweep.sh +71 -0
  640. package/ds-canonical/hooks/check_item_list_gap.sh +54 -0
  641. package/ds-canonical/hooks/check_layout_space_magic_numbers.sh +96 -0
  642. package/ds-canonical/hooks/check_main_branch_workbench.sh +93 -0
  643. package/ds-canonical/hooks/check_naming_and_abstraction.sh +165 -0
  644. package/ds-canonical/hooks/check_opacity_token_usage.sh +149 -0
  645. package/ds-canonical/hooks/check_orphan_ds_css.sh +66 -0
  646. package/ds-canonical/hooks/check_overlay_open_focus_escape_probe.sh +75 -0
  647. package/ds-canonical/hooks/check_pattern_invariants.sh +196 -0
  648. package/ds-canonical/hooks/check_peoplepicker_ssot_drift.sh +56 -0
  649. package/ds-canonical/hooks/check_pixel_quantified_audit.sh +53 -0
  650. package/ds-canonical/hooks/check_plugin_fork_health.sh +137 -0
  651. package/ds-canonical/hooks/check_post_main_ssot_propagate.sh +90 -0
  652. package/ds-canonical/hooks/check_propose_discipline.sh +147 -0
  653. package/ds-canonical/hooks/check_propose_pre_grep_verify.sh +70 -0
  654. package/ds-canonical/hooks/check_propose_without_benchmark.sh +63 -0
  655. package/ds-canonical/hooks/check_select_all_canonical.sh +58 -0
  656. package/ds-canonical/hooks/check_sidebar_menu_button_implicit_wrap.sh +86 -0
  657. package/ds-canonical/hooks/check_solo_workflow.sh +317 -0
  658. package/ds-canonical/hooks/check_spec_class_drift.sh +88 -0
  659. package/ds-canonical/hooks/check_story_invariants.sh +748 -0
  660. package/ds-canonical/hooks/check_storybook_addon_packaging.sh +151 -0
  661. package/ds-canonical/hooks/check_substantive_edit_approval_preflight.sh +110 -0
  662. package/ds-canonical/hooks/check_tabs_content_chrome_body_double_gap.sh +183 -0
  663. package/ds-canonical/hooks/check_tailwind_wildcard_in_docs.sh +79 -0
  664. package/ds-canonical/hooks/check_wrapper_primitive_schema_drift.sh +104 -0
  665. package/ds-canonical/hooks/chrome_header_dispatcher.sh +56 -0
  666. package/ds-canonical/hooks/enforce_home_charter.sh +44 -0
  667. package/ds-canonical/hooks/inject_deploy_url_after_push.sh +238 -0
  668. package/ds-canonical/hooks/inject_pending_self_audit.sh +248 -0
  669. package/ds-canonical/hooks/lib/_app_shell_primary_header_consistency.sh +100 -0
  670. package/ds-canonical/hooks/lib/_approval_re.sh +33 -0
  671. package/ds-canonical/hooks/lib/_chrome_header_handcraft.sh +75 -0
  672. package/ds-canonical/hooks/lib/_code_quality.sh +73 -0
  673. package/ds-canonical/hooks/lib/_cva_default_sync.sh +69 -0
  674. package/ds-canonical/hooks/lib/_governance_coverage_check.sh +49 -0
  675. package/ds-canonical/hooks/lib/_hardcoded_strings.sh +163 -0
  676. package/ds-canonical/hooks/lib/_header_with_tabs_border.sh +87 -0
  677. package/ds-canonical/hooks/lib/_layout_space_canonical.sh +56 -0
  678. package/ds-canonical/hooks/lib/_overlay_handcraft.sh +162 -0
  679. package/ds-canonical/hooks/lib/_person_data_richness.sh +42 -0
  680. package/ds-canonical/hooks/lib/_story_compile_drift.sh +48 -0
  681. package/ds-canonical/hooks/lib/_tab_lg_chrome_header_equal.sh +70 -0
  682. package/ds-canonical/hooks/lib/_token_hygiene.sh +104 -0
  683. package/ds-canonical/hooks/log_governance_fires.sh +50 -0
  684. package/ds-canonical/hooks/log_skill_invokes.sh +41 -0
  685. package/ds-canonical/hooks/post_edit_dispatcher.sh +62 -0
  686. package/ds-canonical/hooks/retired/2026-06-11-prune-merge/check_addon_subdir_ship.sh +76 -0
  687. package/ds-canonical/hooks/retired/2026-06-11-prune-merge/check_consumer_app_story_title.sh +81 -0
  688. package/ds-canonical/hooks/retired/2026-06-11-prune-merge/check_consumer_ds_primitive_misuse.sh +120 -0
  689. package/ds-canonical/hooks/retired/2026-06-11-prune-merge/check_consumer_no_ds_catalog.sh +101 -0
  690. package/ds-canonical/hooks/retired/2026-06-11-prune-merge/check_consumer_story_baseline.sh +76 -0
  691. package/ds-canonical/hooks/retired/2026-06-11-prune-merge/check_data_table_size_num_to_meta_width.sh +68 -0
  692. package/ds-canonical/hooks/retired/2026-06-11-prune-merge/check_fork_user_plugin_install.sh +79 -0
  693. package/ds-canonical/hooks/retired/2026-06-11-prune-merge/check_plugin_freshness.sh +68 -0
  694. package/ds-canonical/hooks/retired/2026-06-11-prune-merge/check_propose_cite_required.sh +88 -0
  695. package/ds-canonical/hooks/retired/2026-06-11-prune-merge/check_propose_plain_chinese.sh +74 -0
  696. package/ds-canonical/hooks/retired/2026-06-11-prune-merge/check_storybook_addon_preset_cjs.sh +87 -0
  697. package/ds-canonical/hooks/retired/check_anatomy_section_numbering.sh +106 -0
  698. package/ds-canonical/hooks/retired/check_avatar_hovercard.sh +90 -0
  699. package/ds-canonical/hooks/retired/check_button_icon_literal.sh.retired-2026-04-28 +38 -0
  700. package/ds-canonical/hooks/retired/check_container_breathing.sh +142 -0
  701. package/ds-canonical/hooks/retired/check_governance_compliance.sh +61 -0
  702. package/ds-canonical/hooks/retired/check_icon_only_padding_formula.sh +104 -0
  703. package/ds-canonical/hooks/retired/check_item_content_primitive.sh +150 -0
  704. package/ds-canonical/hooks/retired/check_item_list_gap.sh +153 -0
  705. package/ds-canonical/hooks/retired/check_sideoffset_canonical.sh +65 -0
  706. package/ds-canonical/hooks/retired/check_spec_iteration_tag.sh +87 -0
  707. package/ds-canonical/hooks/retired/check_ssot_consultation.sh +88 -0
  708. package/ds-canonical/hooks/retired/check_sync_update.sh +20 -0
  709. package/ds-canonical/hooks/retired/check_third_party_dom_verified.sh +95 -0
  710. package/ds-canonical/hooks/retired/enforce_home_charter.sh +125 -0
  711. package/ds-canonical/hooks/retired/post_edit_canonical_interrogate.sh +109 -0
  712. package/ds-canonical/hooks/retired/pre_edit_spec_check.sh +68 -0
  713. package/ds-canonical/hooks/retired/pre_new_component_spec.sh +39 -0
  714. package/ds-canonical/hooks/retired/pre_write_subsumption_check.sh +112 -0
  715. package/ds-canonical/hooks/retired/stop_meta_self_audit.sh.retired-2026-05-13 +76 -0
  716. package/ds-canonical/hooks/retired/tests/test_check_anatomy_section_numbering.sh +14 -0
  717. package/ds-canonical/hooks/retired/tests/test_check_avatar_hovercard.sh +15 -0
  718. package/ds-canonical/hooks/retired/tests/test_check_container_breathing.sh +15 -0
  719. package/ds-canonical/hooks/retired/tests/test_check_governance_compliance.sh +15 -0
  720. package/ds-canonical/hooks/retired/tests/test_check_icon_only_padding_formula.sh +79 -0
  721. package/ds-canonical/hooks/retired/tests/test_check_item_content_primitive.sh +15 -0
  722. package/ds-canonical/hooks/retired/tests/test_check_item_list_gap.sh +163 -0
  723. package/ds-canonical/hooks/retired/tests/test_check_sideoffset_canonical.sh +15 -0
  724. package/ds-canonical/hooks/retired/tests/test_check_spec_iteration_tag.sh +15 -0
  725. package/ds-canonical/hooks/retired/tests/test_check_ssot_consultation.sh +15 -0
  726. package/ds-canonical/hooks/retired/tests/test_check_sync_update.sh +14 -0
  727. package/ds-canonical/hooks/retired/tests/test_check_third_party_dom_verified.sh +15 -0
  728. package/ds-canonical/hooks/retired/tests/test_enforce_home_charter.sh +15 -0
  729. package/ds-canonical/hooks/retired/tests/test_pre_edit_spec_check.sh +15 -0
  730. package/ds-canonical/hooks/retired/tests/test_pre_new_component_spec.sh +15 -0
  731. package/ds-canonical/hooks/retired/tests/test_pre_write_subsumption_check.sh +63 -0
  732. package/ds-canonical/hooks/session_start_governance_check.sh +310 -0
  733. package/ds-canonical/hooks/stop_passive_logging.sh +322 -0
  734. package/ds-canonical/hooks/stop_self_audit.sh +516 -0
  735. package/ds-canonical/hooks/tests/KNOWN-BROKEN.md +15 -0
  736. package/ds-canonical/hooks/tests/run-all.sh +76 -0
  737. package/ds-canonical/hooks/tests/test_auto_regen_ds_barrel.sh +180 -0
  738. package/ds-canonical/hooks/tests/test_block_prototype_imports.sh +143 -0
  739. package/ds-canonical/hooks/tests/test_check_addon_subdir_ship.sh +171 -0
  740. package/ds-canonical/hooks/tests/test_check_app_shell_primary_header_consistency.sh +196 -0
  741. package/ds-canonical/hooks/tests/test_check_audit_post_report_validator.sh +127 -0
  742. package/ds-canonical/hooks/tests/test_check_audit_sample_escape.sh +93 -0
  743. package/ds-canonical/hooks/tests/test_check_benchmark_citation.sh +115 -0
  744. package/ds-canonical/hooks/tests/test_check_canonical_propagation.sh +133 -0
  745. package/ds-canonical/hooks/tests/test_check_chrome_header_avatar_canonical.sh +198 -0
  746. package/ds-canonical/hooks/tests/test_check_chrome_header_handcraft.sh +146 -0
  747. package/ds-canonical/hooks/tests/test_check_code_quality.sh +15 -0
  748. package/ds-canonical/hooks/tests/test_check_codex_brief_invariants.sh +208 -0
  749. package/ds-canonical/hooks/tests/test_check_codex_collab_5step.sh +96 -0
  750. package/ds-canonical/hooks/tests/test_check_consumer_app_invariants.sh +12 -0
  751. package/ds-canonical/hooks/tests/test_check_consumer_app_story_title.sh +164 -0
  752. package/ds-canonical/hooks/tests/test_check_consumer_ds_primitive_misuse.sh +240 -0
  753. package/ds-canonical/hooks/tests/test_check_consumer_no_ds_catalog.sh +214 -0
  754. package/ds-canonical/hooks/tests/test_check_consumer_story_baseline.sh +202 -0
  755. package/ds-canonical/hooks/tests/test_check_cva_default_sync.sh +15 -0
  756. package/ds-canonical/hooks/tests/test_check_data_table_size_num_to_meta_width.sh +53 -0
  757. package/ds-canonical/hooks/tests/test_check_datatable_invariants.sh +122 -0
  758. package/ds-canonical/hooks/tests/test_check_dim_count_drift.sh +98 -0
  759. package/ds-canonical/hooks/tests/test_check_ds_anchor_preflight.sh +104 -0
  760. package/ds-canonical/hooks/tests/test_check_escape_marker_abuse.sh +192 -0
  761. package/ds-canonical/hooks/tests/test_check_field_controls_contracts.sh +126 -0
  762. package/ds-canonical/hooks/tests/test_check_field_family_invariants.sh +203 -0
  763. package/ds-canonical/hooks/tests/test_check_file_size_budget.sh +32 -0
  764. package/ds-canonical/hooks/tests/test_check_fork_user_plugin_install.sh +46 -0
  765. package/ds-canonical/hooks/tests/test_check_full_story_visual_interaction_sweep.sh +190 -0
  766. package/ds-canonical/hooks/tests/test_check_hardcoded_strings.sh +14 -0
  767. package/ds-canonical/hooks/tests/test_check_header_with_tabs_border.sh +110 -0
  768. package/ds-canonical/hooks/tests/test_check_item_list_gap.sh +44 -0
  769. package/ds-canonical/hooks/tests/test_check_layout_space_canonical.sh +73 -0
  770. package/ds-canonical/hooks/tests/test_check_layout_space_magic_numbers.sh +206 -0
  771. package/ds-canonical/hooks/tests/test_check_main_branch_workbench.sh +147 -0
  772. package/ds-canonical/hooks/tests/test_check_naming_and_abstraction.sh +136 -0
  773. package/ds-canonical/hooks/tests/test_check_opacity_token_usage.sh +110 -0
  774. package/ds-canonical/hooks/tests/test_check_orphan_ds_css.sh +212 -0
  775. package/ds-canonical/hooks/tests/test_check_overlay_handcraft.sh +126 -0
  776. package/ds-canonical/hooks/tests/test_check_overlay_open_focus_escape_probe.sh +191 -0
  777. package/ds-canonical/hooks/tests/test_check_pattern_invariants.sh +148 -0
  778. package/ds-canonical/hooks/tests/test_check_peoplepicker_ssot_drift.sh +108 -0
  779. package/ds-canonical/hooks/tests/test_check_person_data_richness.sh +58 -0
  780. package/ds-canonical/hooks/tests/test_check_pixel_quantified_audit.sh +142 -0
  781. package/ds-canonical/hooks/tests/test_check_plugin_fork_health.sh +9 -0
  782. package/ds-canonical/hooks/tests/test_check_propose_cite_required.sh +181 -0
  783. package/ds-canonical/hooks/tests/test_check_propose_discipline.sh +10 -0
  784. package/ds-canonical/hooks/tests/test_check_propose_plain_chinese.sh +127 -0
  785. package/ds-canonical/hooks/tests/test_check_propose_pre_grep_verify.sh +117 -0
  786. package/ds-canonical/hooks/tests/test_check_propose_without_benchmark.sh +55 -0
  787. package/ds-canonical/hooks/tests/test_check_select_all_canonical.sh +125 -0
  788. package/ds-canonical/hooks/tests/test_check_sidebar_menu_button_implicit_wrap.sh +224 -0
  789. package/ds-canonical/hooks/tests/test_check_solo_workflow.sh +201 -0
  790. package/ds-canonical/hooks/tests/test_check_spec_class_drift.sh +135 -0
  791. package/ds-canonical/hooks/tests/test_check_story_anatomy.sh.broken +197 -0
  792. package/ds-canonical/hooks/tests/test_check_story_category.sh.broken +187 -0
  793. package/ds-canonical/hooks/tests/test_check_story_compile_drift.sh +15 -0
  794. package/ds-canonical/hooks/tests/test_check_story_invariants.sh +384 -0
  795. package/ds-canonical/hooks/tests/test_check_story_name_jargon.sh.broken +53 -0
  796. package/ds-canonical/hooks/tests/test_check_story_slot_split.sh +156 -0
  797. package/ds-canonical/hooks/tests/test_check_storybook_addon_packaging.sh +10 -0
  798. package/ds-canonical/hooks/tests/test_check_storybook_addon_preset_cjs.sh +200 -0
  799. package/ds-canonical/hooks/tests/test_check_substantive_edit_approval_preflight.sh +176 -0
  800. package/ds-canonical/hooks/tests/test_check_tab_lg_chrome_header_equal.sh +141 -0
  801. package/ds-canonical/hooks/tests/test_check_tailwind_wildcard_in_docs.sh +182 -0
  802. package/ds-canonical/hooks/tests/test_check_token_hygiene.sh +21 -0
  803. package/ds-canonical/hooks/tests/test_check_wrapper_primitive_schema_drift.sh +169 -0
  804. package/ds-canonical/hooks/tests/test_enforce_home_charter.sh +77 -0
  805. package/ds-canonical/hooks/tests/test_inject_deploy_url_after_push.sh +193 -0
  806. package/ds-canonical/hooks/tests/test_inject_pending_self_audit.sh +125 -0
  807. package/ds-canonical/hooks/tests/test_log_governance_fires.sh +10 -0
  808. package/ds-canonical/hooks/tests/test_log_skill_invokes.sh +7 -0
  809. package/ds-canonical/hooks/tests/test_post_edit_dispatcher.sh +108 -0
  810. package/ds-canonical/hooks/tests/test_session_start_governance_check.sh +154 -0
  811. package/ds-canonical/hooks/tests/test_stop_capture_metrics.sh +95 -0
  812. package/ds-canonical/hooks/tests/test_stop_governance_drift_check.sh.broken +125 -0
  813. package/ds-canonical/hooks/tests/test_stop_harvest_corrections.sh +10 -0
  814. package/ds-canonical/hooks/tests/test_stop_passive_logging.sh +100 -0
  815. package/ds-canonical/hooks/tests/test_stop_self_audit.sh +98 -0
  816. package/ds-canonical/hooks/tests/test_stop_tsc_sanity.sh +10 -0
  817. package/ds-canonical/references/README.md +46 -0
  818. package/ds-canonical/references/audit-coverage-vs-24-checklist.md +74 -0
  819. package/ds-canonical/references/build-ui-canonicals.md +72 -0
  820. package/ds-canonical/references/composition-fidelity.md +47 -0
  821. package/ds-canonical/references/cva-patterns.md +41 -0
  822. package/ds-canonical/references/drag-canonical.md +331 -0
  823. package/ds-canonical/references/item-anatomy-recipe.md +225 -0
  824. package/ds-canonical/references/naming-conventions.md +57 -0
  825. package/ds-canonical/references/principle-dim-map.json +513 -0
  826. package/ds-canonical/references/props-naming.md +59 -0
  827. package/ds-canonical/references/scenario-definition.md +146 -0
  828. package/ds-canonical/references/spec-rules.md +58 -0
  829. package/ds-canonical/references/ssot-consultation.md +63 -0
  830. package/ds-canonical/references/ssot-index.md +40 -0
  831. package/ds-canonical/references/story-baseline-registry.json +107 -0
  832. package/ds-canonical/references/structural-token-retention.md +42 -0
  833. package/ds-canonical/references/tailwind-gotchas.md +87 -0
  834. package/ds-canonical/references/ui-dev-rules.md +81 -0
  835. package/ds-canonical/rules/README.md +34 -0
  836. package/ds-canonical/rules/meta-patterns.md +87 -0
  837. package/ds-canonical/rules/self-verify.md +56 -0
  838. package/ds-canonical/rules/spec-rules.md +25 -0
  839. package/ds-canonical/rules/story-rules.md +67 -0
  840. package/ds-canonical/rules/ui-development.md +92 -0
  841. package/ds-canonical/skills/README.md +88 -0
  842. package/ds-canonical/skills/bug-fix-rhythm/SKILL.md +181 -0
  843. package/ds-canonical/skills/code-quality-audit/SKILL.md +63 -0
  844. package/ds-canonical/skills/codex-collab/SKILL.md +249 -0
  845. package/ds-canonical/skills/codex-collab/references/brief-template.md +48 -0
  846. package/ds-canonical/skills/codex-collab/references/transport.md +58 -0
  847. package/ds-canonical/skills/codify-corrections/SKILL.md +184 -0
  848. package/ds-canonical/skills/codify-principle/SKILL.md +151 -0
  849. package/ds-canonical/skills/component-quality-gate/SKILL.md +102 -0
  850. package/ds-canonical/skills/component-quality-gate/references/checklist.md +79 -0
  851. package/ds-canonical/skills/deep-audit-cross-codex/SKILL.md +254 -0
  852. package/ds-canonical/skills/deep-audit-cross-codex/references/phase-a-workflow.md +123 -0
  853. package/ds-canonical/skills/deep-audit-cross-codex/references/phase-b-codex-brief.md +186 -0
  854. package/ds-canonical/skills/deep-audit-cross-codex/references/skill-relationships-antipatterns-benchmarks.md +30 -0
  855. package/ds-canonical/skills/deep-audit-cross-codex/references/triage-rubric.md +69 -0
  856. package/ds-canonical/skills/deep-audit-cross-codex/references/upstream-directives-r-mapping.md +33 -0
  857. package/ds-canonical/skills/delivery-handoff/SKILL.md +229 -0
  858. package/ds-canonical/skills/delivery-handoff/references/flow-diagram.md +180 -0
  859. package/ds-canonical/skills/delivery-handoff/references/handoff-template.md +177 -0
  860. package/ds-canonical/skills/delivery-handoff/references/inventory-checklist.md +196 -0
  861. package/ds-canonical/skills/design-system-audit/SKILL.md +386 -0
  862. package/ds-canonical/skills/design-system-audit/references/audit-prompts.md +1325 -0
  863. package/ds-canonical/skills/design-system-audit/references/checkpoints.md +240 -0
  864. package/ds-canonical/skills/design-system-audit/references/historical-bugs.md +240 -0
  865. package/ds-canonical/skills/design-system-audit/references/principle-audit-protocol.md +378 -0
  866. package/ds-canonical/skills/design-system-audit/references/rule-placement.md +175 -0
  867. package/ds-canonical/skills/ensure-canonical/SKILL.md +196 -0
  868. package/ds-canonical/skills/governance-health/SKILL.md +147 -0
  869. package/ds-canonical/skills/knowledge-prune/SKILL.md +250 -0
  870. package/ds-canonical/skills/knowledge-prune/references/phase-z-cross-repo-ssot-propagation.md +11 -0
  871. package/ds-canonical/skills/knowledge-prune/references/prune-dimensions-d5-d10.md +55 -0
  872. package/ds-canonical/skills/knowledge-prune/references/world-class-prune-alignment.md +7 -0
  873. package/ds-canonical/skills/new-component/SKILL.md +170 -0
  874. package/ds-canonical/skills/new-component/references/new-component-checklist.md +85 -0
  875. package/ds-canonical/skills/performance-audit/SKILL.md +107 -0
  876. package/ds-canonical/skills/product-ui-audit/SKILL.md +230 -0
  877. package/ds-canonical/skills/product-ui-audit/references/audit-checks.md +246 -0
  878. package/ds-canonical/skills/product-ui-audit/references/common-misuses.md +329 -0
  879. package/ds-canonical/skills/product-ui-audit/references/report-template.md +159 -0
  880. package/ds-canonical/skills/propose-options/SKILL.md +177 -0
  881. package/ds-canonical/skills/prototype/SKILL.md +244 -0
  882. package/ds-canonical/skills/prototype/references/audit-checks.md +37 -0
  883. package/ds-canonical/skills/prototype/references/benchmark-sources.md +94 -0
  884. package/ds-canonical/skills/prototype/references/checkpoints.md +191 -0
  885. package/ds-canonical/skills/prototype/references/evaluation-matrix.md +141 -0
  886. package/ds-canonical/skills/prototype/references/ooux-template.md +198 -0
  887. package/ds-canonical/skills/prototype/references/proposal-template.md +229 -0
  888. package/ds-canonical/skills/scan-similar-bugs/SKILL.md +198 -0
  889. package/ds-canonical/skills/story-auto-compile-migrate/SKILL.md +159 -0
  890. package/ds-canonical/skills/story-writing/SKILL.md +122 -0
  891. package/ds-canonical/skills/story-writing/references/anatomy-standard.md +217 -0
  892. package/ds-canonical/skills/story-writing/references/category-templates.md +174 -0
  893. package/ds-canonical/skills/story-writing/references/example-selection.md +70 -0
  894. package/ds-canonical/skills/story-writing/references/self-check.md +20 -0
  895. package/ds-canonical/skills/ux-audit/SKILL.md +130 -0
  896. package/ds-canonical/skills/visual-audit/SKILL.md +245 -0
  897. package/ds-canonical/skills/visual-audit/output/.gitkeep +0 -0
  898. package/ds-canonical/skills/visual-audit/references/audit-architecture.md +100 -0
  899. package/ds-canonical/skills/visual-audit/references/visual-checklist.md +297 -0
  900. package/ds-canonical/skills/visual-audit/references/world-class-benchmarks.md +198 -0
  901. package/ds-canonical/templates/_README.md +23 -0
  902. package/ds-canonical/templates/dashboard-app.tsx +161 -0
  903. package/ds-story-manifest.json +1684 -0
  904. package/llms-full.txt +414 -0
  905. package/llms.txt +70 -0
  906. package/package.json +31 -8
  907. package/src/components/Accordion/accordion.anatomy.stories.tsx +496 -0
  908. package/src/components/Accordion/accordion.principles.stories.tsx +360 -0
  909. package/src/components/Accordion/accordion.spec.md +131 -0
  910. package/src/components/Accordion/accordion.stories.tsx +190 -0
  911. package/src/components/Accordion/accordion.tsx +4 -1
  912. package/src/components/Accordion/index.ts +5 -0
  913. package/src/components/Alert/alert.anatomy.stories.tsx +238 -0
  914. package/src/components/Alert/alert.principles.stories.tsx +220 -0
  915. package/src/components/Alert/alert.spec.md +202 -0
  916. package/src/components/Alert/alert.stories.tsx +139 -0
  917. package/src/components/Alert/alert.tsx +9 -6
  918. package/src/components/Alert/index.ts +5 -0
  919. package/src/components/AppShell/_demo-helpers.tsx +87 -11
  920. package/src/components/AppShell/app-shell.anatomy.stories.tsx +176 -0
  921. package/src/components/AppShell/app-shell.principles.stories.tsx +140 -0
  922. package/src/components/AppShell/app-shell.spec.md +357 -0
  923. package/src/components/AppShell/app-shell.stories.tsx +442 -0
  924. package/src/components/AppShell/app-shell.tsx +15 -9
  925. package/src/components/AppShell/index.ts +5 -0
  926. package/src/components/AspectRatio/aspect-ratio.anatomy.stories.tsx +208 -0
  927. package/src/components/AspectRatio/aspect-ratio.principles.stories.tsx +303 -0
  928. package/src/components/AspectRatio/aspect-ratio.spec.md +148 -0
  929. package/src/components/AspectRatio/aspect-ratio.stories.tsx +170 -0
  930. package/src/components/AspectRatio/aspect-ratio.tsx +4 -2
  931. package/src/components/AspectRatio/index.ts +5 -0
  932. package/src/components/Avatar/avatar.anatomy.stories.tsx +701 -0
  933. package/src/components/Avatar/avatar.principles.stories.tsx +245 -0
  934. package/src/components/Avatar/avatar.spec.md +312 -0
  935. package/src/components/Avatar/avatar.stories.tsx +135 -0
  936. package/src/components/Avatar/avatar.tsx +45 -46
  937. package/src/components/Avatar/index.ts +5 -0
  938. package/src/components/Badge/badge.anatomy.stories.tsx +591 -0
  939. package/src/components/Badge/badge.principles.stories.tsx +391 -0
  940. package/src/components/Badge/badge.spec.md +398 -0
  941. package/src/components/Badge/badge.stories.tsx +80 -0
  942. package/src/components/Badge/badge.tsx +34 -13
  943. package/src/components/Badge/index.ts +5 -0
  944. package/src/components/Breadcrumb/breadcrumb.anatomy.stories.tsx +458 -0
  945. package/src/components/Breadcrumb/breadcrumb.principles.stories.tsx +343 -0
  946. package/src/components/Breadcrumb/breadcrumb.spec.md +268 -0
  947. package/src/components/Breadcrumb/breadcrumb.stories.tsx +307 -0
  948. package/src/components/Breadcrumb/breadcrumb.tsx +2 -2
  949. package/src/components/Breadcrumb/index.ts +5 -0
  950. package/src/components/BulkActionBar/bulk-action-bar.anatomy.stories.tsx +224 -0
  951. package/src/components/BulkActionBar/bulk-action-bar.principles.stories.tsx +242 -0
  952. package/src/components/BulkActionBar/bulk-action-bar.spec.md +226 -0
  953. package/src/components/BulkActionBar/bulk-action-bar.stories.tsx +136 -0
  954. package/src/components/BulkActionBar/bulk-action-bar.tsx +13 -11
  955. package/src/components/BulkActionBar/index.ts +5 -0
  956. package/src/components/Button/button.anatomy.stories.tsx +710 -0
  957. package/src/components/Button/button.principles.stories.tsx +370 -0
  958. package/src/components/Button/button.spec.md +463 -0
  959. package/src/components/Button/button.stories.tsx +362 -0
  960. package/src/components/Button/button.tsx +25 -28
  961. package/src/components/Button/index.ts +5 -0
  962. package/src/components/Calendar/calendar.anatomy.stories.tsx +218 -0
  963. package/src/components/Calendar/calendar.principles.stories.tsx +143 -0
  964. package/src/components/Calendar/calendar.spec.md +264 -0
  965. package/src/components/Calendar/calendar.stories.tsx +88 -0
  966. package/src/components/Calendar/calendar.tsx +54 -40
  967. package/src/components/Calendar/index.ts +5 -0
  968. package/src/components/Carousel/carousel.anatomy.stories.tsx +516 -0
  969. package/src/components/Carousel/carousel.principles.stories.tsx +330 -0
  970. package/src/components/Carousel/carousel.spec.md +273 -0
  971. package/src/components/Carousel/carousel.stories.tsx +121 -0
  972. package/src/components/Carousel/carousel.tsx +26 -7
  973. package/src/components/Carousel/index.ts +5 -0
  974. package/src/components/Chart/chart.anatomy.stories.tsx +307 -0
  975. package/src/components/Chart/chart.principles.stories.tsx +436 -0
  976. package/src/components/Chart/chart.spec.md +174 -0
  977. package/src/components/Chart/chart.stories.tsx +268 -0
  978. package/src/components/Chart/chart.tsx +5 -2
  979. package/src/components/Chart/index.ts +5 -0
  980. package/src/components/Checkbox/checkbox-group.tsx +2 -1
  981. package/src/components/Checkbox/checkbox.anatomy.stories.tsx +626 -0
  982. package/src/components/Checkbox/checkbox.principles.stories.tsx +216 -0
  983. package/src/components/Checkbox/checkbox.spec.md +372 -0
  984. package/src/components/Checkbox/checkbox.stories.tsx +114 -0
  985. package/src/components/Checkbox/checkbox.tsx +80 -22
  986. package/src/components/Checkbox/index.ts +5 -0
  987. package/src/components/Chip/chip.anatomy.stories.tsx +422 -0
  988. package/src/components/Chip/chip.principles.stories.tsx +228 -0
  989. package/src/components/Chip/chip.spec.md +237 -0
  990. package/src/components/Chip/chip.stories.tsx +88 -0
  991. package/src/components/Chip/chip.tsx +6 -6
  992. package/src/components/Chip/index.ts +5 -0
  993. package/src/components/CircularProgress/circular-progress.anatomy.stories.tsx +176 -0
  994. package/src/components/CircularProgress/circular-progress.principles.stories.tsx +258 -0
  995. package/src/components/CircularProgress/circular-progress.spec.md +267 -0
  996. package/src/components/CircularProgress/circular-progress.stories.tsx +153 -0
  997. package/src/components/CircularProgress/circular-progress.tsx +4 -5
  998. package/src/components/CircularProgress/index.ts +5 -0
  999. package/src/components/Coachmark/coachmark-story-helpers.tsx +39 -0
  1000. package/src/components/Coachmark/coachmark.anatomy.stories.tsx +356 -0
  1001. package/src/components/Coachmark/coachmark.principles.stories.tsx +355 -0
  1002. package/src/components/Coachmark/coachmark.spec.md +238 -0
  1003. package/src/components/Coachmark/coachmark.stories.tsx +214 -0
  1004. package/src/components/Coachmark/coachmark.tsx +16 -7
  1005. package/src/components/Coachmark/index.ts +5 -0
  1006. package/src/components/Combobox/combobox.anatomy.stories.tsx +919 -0
  1007. package/src/components/Combobox/combobox.principles.stories.tsx +239 -0
  1008. package/src/components/Combobox/combobox.spec.md +202 -0
  1009. package/src/components/Combobox/combobox.stories.tsx +184 -0
  1010. package/src/components/Combobox/combobox.tsx +86 -39
  1011. package/src/components/Combobox/index.ts +5 -0
  1012. package/src/components/Command/command.anatomy.stories.tsx +107 -0
  1013. package/src/components/Command/command.principles.stories.tsx +88 -0
  1014. package/src/components/Command/command.spec.md +181 -0
  1015. package/src/components/Command/command.stories.tsx +280 -0
  1016. package/src/components/Command/command.tsx +13 -8
  1017. package/src/components/Command/index.ts +5 -0
  1018. package/src/components/DataTable/cell-registry.tsx +19 -6
  1019. package/src/components/DataTable/data-table-filter-panel.tsx +8 -8
  1020. package/src/components/DataTable/data-table-sort-manager.tsx +4 -4
  1021. package/src/components/DataTable/data-table.anatomy.stories.tsx +519 -0
  1022. package/src/components/DataTable/data-table.css +1 -1
  1023. package/src/components/DataTable/data-table.principles.stories.tsx +265 -0
  1024. package/src/components/DataTable/data-table.spec.md +540 -0
  1025. package/src/components/DataTable/data-table.stories.tsx +1941 -0
  1026. package/src/components/DataTable/data-table.tsx +121 -53
  1027. package/src/components/DataTable/filter-operators.spec.md +267 -0
  1028. package/src/components/DataTable/filter-operators.ts +1 -1
  1029. package/src/components/DataTable/filter-tree.ts +2 -2
  1030. package/src/components/DataTable/index.ts +5 -0
  1031. package/src/components/DateGrid/date-grid.anatomy.stories.tsx +583 -0
  1032. package/src/components/DateGrid/date-grid.principles.stories.tsx +338 -0
  1033. package/src/components/DateGrid/date-grid.spec.md +218 -0
  1034. package/src/components/DateGrid/date-grid.stories.tsx +195 -0
  1035. package/src/components/DateGrid/date-grid.tsx +22 -18
  1036. package/src/components/DateGrid/index.ts +5 -0
  1037. package/src/components/DatePicker/date-picker.anatomy.stories.tsx +952 -0
  1038. package/src/components/DatePicker/date-picker.principles.stories.tsx +205 -0
  1039. package/src/components/DatePicker/date-picker.spec.md +337 -0
  1040. package/src/components/DatePicker/date-picker.stories.tsx +323 -0
  1041. package/src/components/DatePicker/date-picker.tsx +46 -22
  1042. package/src/components/DatePicker/index.ts +5 -0
  1043. package/src/components/DescriptionList/description-list.anatomy.stories.tsx +252 -0
  1044. package/src/components/DescriptionList/description-list.principles.stories.tsx +309 -0
  1045. package/src/components/DescriptionList/description-list.spec.md +220 -0
  1046. package/src/components/DescriptionList/description-list.stories.tsx +112 -0
  1047. package/src/components/DescriptionList/description-list.tsx +3 -3
  1048. package/src/components/DescriptionList/index.ts +5 -0
  1049. package/src/components/Dialog/dialog.anatomy.stories.tsx +484 -0
  1050. package/src/components/Dialog/dialog.principles.stories.tsx +313 -0
  1051. package/src/components/Dialog/dialog.spec.md +216 -0
  1052. package/src/components/Dialog/dialog.stories.tsx +483 -0
  1053. package/src/components/Dialog/dialog.tsx +9 -9
  1054. package/src/components/Dialog/index.ts +5 -0
  1055. package/src/components/DropdownMenu/dropdown-menu.anatomy.stories.tsx +969 -0
  1056. package/src/components/DropdownMenu/dropdown-menu.principles.stories.tsx +339 -0
  1057. package/src/components/DropdownMenu/dropdown-menu.spec.md +260 -0
  1058. package/src/components/DropdownMenu/dropdown-menu.stories.tsx +286 -0
  1059. package/src/components/DropdownMenu/dropdown-menu.tsx +29 -7
  1060. package/src/components/DropdownMenu/index.ts +5 -0
  1061. package/src/components/Empty/empty.anatomy.stories.tsx +275 -0
  1062. package/src/components/Empty/empty.principles.stories.tsx +314 -0
  1063. package/src/components/Empty/empty.spec.md +216 -0
  1064. package/src/components/Empty/empty.stories.tsx +80 -0
  1065. package/src/components/Empty/empty.tsx +16 -7
  1066. package/src/components/Empty/index.ts +5 -0
  1067. package/src/components/Field/field-context.ts +98 -0
  1068. package/src/components/Field/field-controls.spec.md +382 -0
  1069. package/src/components/Field/field-types.ts +1 -1
  1070. package/src/components/Field/field-wrapper.tsx +6 -6
  1071. package/src/components/Field/field.anatomy.stories.tsx +544 -0
  1072. package/src/components/Field/field.principles.stories.tsx +278 -0
  1073. package/src/components/Field/field.spec.md +460 -0
  1074. package/src/components/Field/field.stories.tsx +716 -0
  1075. package/src/components/Field/field.tsx +12 -5
  1076. package/src/components/Field/form-validation.spec.md +172 -0
  1077. package/src/components/Field/index.ts +5 -0
  1078. package/src/components/Field/use-form-validation.ts +242 -0
  1079. package/src/components/FieldControlGroup/field-control-group.anatomy.stories.tsx +118 -0
  1080. package/src/components/FieldControlGroup/field-control-group.principles.stories.tsx +121 -0
  1081. package/src/components/FieldControlGroup/field-control-group.spec.md +195 -0
  1082. package/src/components/FieldControlGroup/field-control-group.stories.tsx +161 -0
  1083. package/src/components/FieldControlGroup/field-control-group.tsx +9 -8
  1084. package/src/components/FieldControlGroup/index.ts +5 -0
  1085. package/src/components/FileItem/file-item.anatomy.stories.tsx +344 -0
  1086. package/src/components/FileItem/file-item.principles.stories.tsx +276 -0
  1087. package/src/components/FileItem/file-item.spec.md +491 -0
  1088. package/src/components/FileItem/file-item.stories.tsx +265 -0
  1089. package/src/components/FileItem/file-item.tsx +37 -13
  1090. package/src/components/FileItem/index.ts +5 -0
  1091. package/src/components/FileUpload/file-upload.anatomy.stories.tsx +446 -0
  1092. package/src/components/FileUpload/file-upload.principles.stories.tsx +312 -0
  1093. package/src/components/FileUpload/file-upload.spec.md +163 -0
  1094. package/src/components/FileUpload/file-upload.stories.tsx +167 -0
  1095. package/src/components/FileUpload/file-upload.tsx +78 -27
  1096. package/src/components/FileUpload/index.ts +5 -0
  1097. package/src/components/FileViewer/file-viewer.anatomy.stories.tsx +1127 -0
  1098. package/src/components/FileViewer/file-viewer.principles.stories.tsx +636 -0
  1099. package/src/components/FileViewer/file-viewer.spec.md +368 -0
  1100. package/src/components/FileViewer/file-viewer.stories.tsx +407 -0
  1101. package/src/components/FileViewer/file-viewer.tsx +58 -28
  1102. package/src/components/FileViewer/index.ts +5 -0
  1103. package/src/components/HoverCard/hover-card.anatomy.stories.tsx +145 -0
  1104. package/src/components/HoverCard/hover-card.principles.stories.tsx +222 -0
  1105. package/src/components/HoverCard/hover-card.spec.md +167 -0
  1106. package/src/components/HoverCard/hover-card.stories.tsx +304 -0
  1107. package/src/components/HoverCard/hover-card.tsx +15 -4
  1108. package/src/components/HoverCard/index.ts +5 -0
  1109. package/src/components/Input/index.ts +5 -0
  1110. package/src/components/Input/input.anatomy.stories.tsx +763 -0
  1111. package/src/components/Input/input.principles.stories.tsx +265 -0
  1112. package/src/components/Input/input.spec.md +207 -0
  1113. package/src/components/Input/input.stories.tsx +133 -0
  1114. package/src/components/Input/input.tsx +17 -14
  1115. package/src/components/LinkInput/index.ts +5 -0
  1116. package/src/components/LinkInput/link-input.anatomy.stories.tsx +746 -0
  1117. package/src/components/LinkInput/link-input.principles.stories.tsx +182 -0
  1118. package/src/components/LinkInput/link-input.spec.md +144 -0
  1119. package/src/components/LinkInput/link-input.stories.tsx +132 -0
  1120. package/src/components/LinkInput/link-input.tsx +9 -8
  1121. package/src/components/Menu/index.ts +5 -0
  1122. package/src/components/Menu/menu-item.anatomy.stories.tsx +780 -0
  1123. package/src/components/Menu/menu-item.principles.stories.tsx +81 -0
  1124. package/src/components/Menu/menu-item.spec.md +304 -0
  1125. package/src/components/Menu/menu-item.stories.tsx +214 -0
  1126. package/src/components/Menu/menu-item.tsx +8 -3
  1127. package/src/components/Notice/index.ts +5 -0
  1128. package/src/components/Notice/notice.anatomy.stories.tsx +610 -0
  1129. package/src/components/Notice/notice.principles.stories.tsx +102 -0
  1130. package/src/components/Notice/notice.spec.md +158 -0
  1131. package/src/components/Notice/notice.stories.tsx +257 -0
  1132. package/src/components/Notice/notice.tsx +26 -10
  1133. package/src/components/NumberInput/index.ts +5 -0
  1134. package/src/components/NumberInput/number-input.anatomy.stories.tsx +787 -0
  1135. package/src/components/NumberInput/number-input.principles.stories.tsx +199 -0
  1136. package/src/components/NumberInput/number-input.spec.md +144 -0
  1137. package/src/components/NumberInput/number-input.stories.tsx +142 -0
  1138. package/src/components/NumberInput/number-input.tsx +9 -10
  1139. package/src/components/OverflowIndicator/index.ts +5 -0
  1140. package/src/components/OverflowIndicator/overflow-indicator.anatomy.stories.tsx +549 -0
  1141. package/src/components/OverflowIndicator/overflow-indicator.principles.stories.tsx +77 -0
  1142. package/src/components/OverflowIndicator/overflow-indicator.spec.md +127 -0
  1143. package/src/components/OverflowIndicator/overflow-indicator.stories.tsx +238 -0
  1144. package/src/components/OverflowIndicator/overflow-indicator.tsx +19 -6
  1145. package/src/components/PeoplePicker/index.ts +5 -0
  1146. package/src/components/PeoplePicker/people-picker-helpers.ts +5 -5
  1147. package/src/components/PeoplePicker/people-picker.anatomy.stories.tsx +427 -0
  1148. package/src/components/PeoplePicker/people-picker.principles.stories.tsx +192 -0
  1149. package/src/components/PeoplePicker/people-picker.spec.md +292 -0
  1150. package/src/components/PeoplePicker/people-picker.stories.tsx +162 -0
  1151. package/src/components/PeoplePicker/people-picker.tsx +31 -22
  1152. package/src/components/PeoplePicker/person-display.tsx +30 -29
  1153. package/src/components/Popover/index.ts +5 -0
  1154. package/src/components/Popover/popover.anatomy.stories.tsx +279 -0
  1155. package/src/components/Popover/popover.principles.stories.tsx +295 -0
  1156. package/src/components/Popover/popover.spec.md +209 -0
  1157. package/src/components/Popover/popover.stories.tsx +116 -0
  1158. package/src/components/Popover/popover.tsx +17 -14
  1159. package/src/components/ProfileCard/index.ts +5 -0
  1160. package/src/components/ProfileCard/profile-card.anatomy.stories.tsx +504 -0
  1161. package/src/components/ProfileCard/profile-card.principles.stories.tsx +225 -0
  1162. package/src/components/ProfileCard/profile-card.spec.md +191 -0
  1163. package/src/components/ProfileCard/profile-card.stories.tsx +53 -0
  1164. package/src/components/{NameCard/name-card.tsx → ProfileCard/profile-card.tsx} +36 -30
  1165. package/src/components/ProgressBar/index.ts +5 -0
  1166. package/src/components/ProgressBar/progress-bar.anatomy.stories.tsx +438 -0
  1167. package/src/components/ProgressBar/progress-bar.principles.stories.tsx +339 -0
  1168. package/src/components/ProgressBar/progress-bar.spec.md +240 -0
  1169. package/src/components/ProgressBar/progress-bar.stories.tsx +119 -0
  1170. package/src/components/ProgressBar/progress-bar.tsx +4 -4
  1171. package/src/components/RadioGroup/index.ts +5 -0
  1172. package/src/components/RadioGroup/radio-group.anatomy.stories.tsx +681 -0
  1173. package/src/components/RadioGroup/radio-group.principles.stories.tsx +163 -0
  1174. package/src/components/RadioGroup/radio-group.spec.md +149 -0
  1175. package/src/components/RadioGroup/radio-group.stories.tsx +101 -0
  1176. package/src/components/RadioGroup/radio-group.tsx +114 -57
  1177. package/src/components/Rating/index.ts +5 -0
  1178. package/src/components/Rating/rating.anatomy.stories.tsx +495 -0
  1179. package/src/components/Rating/rating.principles.stories.tsx +296 -0
  1180. package/src/components/Rating/rating.spec.md +214 -0
  1181. package/src/components/Rating/rating.stories.tsx +133 -0
  1182. package/src/components/Rating/rating.tsx +29 -14
  1183. package/src/components/ScrollArea/index.ts +5 -0
  1184. package/src/components/ScrollArea/scroll-area.anatomy.stories.tsx +451 -0
  1185. package/src/components/ScrollArea/scroll-area.principles.stories.tsx +331 -0
  1186. package/src/components/ScrollArea/scroll-area.spec.md +143 -0
  1187. package/src/components/ScrollArea/scroll-area.stories.tsx +243 -0
  1188. package/src/components/ScrollArea/scroll-area.tsx +2 -2
  1189. package/src/components/SegmentedControl/index.ts +5 -0
  1190. package/src/components/SegmentedControl/segmented-control.anatomy.stories.tsx +295 -0
  1191. package/src/components/SegmentedControl/segmented-control.principles.stories.tsx +281 -0
  1192. package/src/components/SegmentedControl/segmented-control.spec.md +297 -0
  1193. package/src/components/SegmentedControl/segmented-control.stories.tsx +33 -0
  1194. package/src/components/SegmentedControl/segmented-control.tsx +9 -10
  1195. package/src/components/Select/index.ts +5 -0
  1196. package/src/components/Select/select.anatomy.stories.tsx +828 -0
  1197. package/src/components/Select/select.principles.stories.tsx +311 -0
  1198. package/src/components/Select/select.spec.md +337 -0
  1199. package/src/components/Select/select.stories.tsx +198 -0
  1200. package/src/components/Select/select.tsx +37 -16
  1201. package/src/components/SelectMenu/index.ts +5 -0
  1202. package/src/components/SelectMenu/select-menu.anatomy.stories.tsx +812 -0
  1203. package/src/components/SelectMenu/select-menu.principles.stories.tsx +107 -0
  1204. package/src/components/SelectMenu/select-menu.spec.md +229 -0
  1205. package/src/components/SelectMenu/select-menu.stories.tsx +155 -0
  1206. package/src/components/SelectMenu/select-menu.tsx +34 -9
  1207. package/src/components/SelectionControl/index.ts +5 -0
  1208. package/src/components/SelectionControl/selection-item.anatomy.stories.tsx +571 -0
  1209. package/src/components/SelectionControl/selection-item.principles.stories.tsx +77 -0
  1210. package/src/components/SelectionControl/selection-item.spec.md +141 -0
  1211. package/src/components/SelectionControl/selection-item.stories.tsx +137 -0
  1212. package/src/components/SelectionControl/selection-item.tsx +8 -2
  1213. package/src/components/Separator/index.ts +5 -0
  1214. package/src/components/Separator/separator.anatomy.stories.tsx +125 -0
  1215. package/src/components/Separator/separator.principles.stories.tsx +141 -0
  1216. package/src/components/Separator/separator.spec.md +115 -0
  1217. package/src/components/Separator/separator.stories.tsx +127 -0
  1218. package/src/components/Separator/separator.tsx +2 -2
  1219. package/src/components/Sheet/index.ts +5 -0
  1220. package/src/components/Sheet/sheet.anatomy.stories.tsx +269 -0
  1221. package/src/components/Sheet/sheet.principles.stories.tsx +351 -0
  1222. package/src/components/Sheet/sheet.spec.md +146 -0
  1223. package/src/components/Sheet/sheet.stories.tsx +168 -0
  1224. package/src/components/Sheet/sheet.tsx +7 -6
  1225. package/src/components/Sidebar/index.ts +5 -0
  1226. package/src/components/Sidebar/sidebar.anatomy.stories.tsx +772 -0
  1227. package/src/components/Sidebar/sidebar.principles.stories.tsx +505 -0
  1228. package/src/components/Sidebar/sidebar.spec.md +724 -0
  1229. package/src/components/Sidebar/sidebar.stories.tsx +498 -0
  1230. package/src/components/Sidebar/sidebar.tsx +20 -9
  1231. package/src/components/Skeleton/index.ts +5 -0
  1232. package/src/components/Skeleton/skeleton.anatomy.stories.tsx +145 -0
  1233. package/src/components/Skeleton/skeleton.principles.stories.tsx +234 -0
  1234. package/src/components/Skeleton/skeleton.spec.md +106 -0
  1235. package/src/components/Skeleton/skeleton.stories.tsx +137 -0
  1236. package/src/components/Skeleton/skeleton.tsx +1 -1
  1237. package/src/components/Slider/index.ts +5 -0
  1238. package/src/components/Slider/slider.anatomy.stories.tsx +236 -0
  1239. package/src/components/Slider/slider.principles.stories.tsx +250 -0
  1240. package/src/components/Slider/slider.spec.md +358 -0
  1241. package/src/components/Slider/slider.stories.tsx +99 -0
  1242. package/src/components/Slider/slider.tsx +54 -16
  1243. package/src/components/Steps/index.ts +5 -0
  1244. package/src/components/Steps/steps.anatomy.stories.tsx +448 -0
  1245. package/src/components/Steps/steps.principles.stories.tsx +300 -0
  1246. package/src/components/Steps/steps.spec.md +479 -0
  1247. package/src/components/Steps/steps.stories.tsx +335 -0
  1248. package/src/components/Steps/steps.tsx +56 -26
  1249. package/src/components/Switch/index.ts +5 -0
  1250. package/src/components/Switch/switch.anatomy.stories.tsx +227 -0
  1251. package/src/components/Switch/switch.principles.stories.tsx +174 -0
  1252. package/src/components/Switch/switch.spec.md +238 -0
  1253. package/src/components/Switch/switch.stories.tsx +107 -0
  1254. package/src/components/Switch/switch.tsx +69 -32
  1255. package/src/components/Tabs/index.ts +5 -0
  1256. package/src/components/Tabs/tabs.anatomy.stories.tsx +414 -0
  1257. package/src/components/Tabs/tabs.principles.stories.tsx +257 -0
  1258. package/src/components/Tabs/tabs.spec.md +331 -0
  1259. package/src/components/Tabs/tabs.stories.tsx +155 -0
  1260. package/src/components/Tabs/tabs.tsx +17 -10
  1261. package/src/components/Tag/index.ts +5 -0
  1262. package/src/components/Tag/tag.anatomy.stories.tsx +664 -0
  1263. package/src/components/Tag/tag.principles.stories.tsx +270 -0
  1264. package/src/components/Tag/tag.spec.md +324 -0
  1265. package/src/components/Tag/tag.stories.tsx +69 -0
  1266. package/src/components/Tag/tag.tsx +55 -57
  1267. package/src/components/Textarea/index.ts +5 -0
  1268. package/src/components/Textarea/textarea.anatomy.stories.tsx +304 -0
  1269. package/src/components/Textarea/textarea.principles.stories.tsx +175 -0
  1270. package/src/components/Textarea/textarea.spec.md +162 -0
  1271. package/src/components/Textarea/textarea.stories.tsx +53 -0
  1272. package/src/components/Textarea/textarea.tsx +20 -18
  1273. package/src/components/TimePicker/index.ts +5 -0
  1274. package/src/components/TimePicker/time-columns.tsx +8 -1
  1275. package/src/components/TimePicker/time-picker.anatomy.stories.tsx +281 -0
  1276. package/src/components/TimePicker/time-picker.principles.stories.tsx +140 -0
  1277. package/src/components/TimePicker/time-picker.spec.md +290 -0
  1278. package/src/components/TimePicker/time-picker.stories.tsx +193 -0
  1279. package/src/components/TimePicker/time-picker.tsx +41 -23
  1280. package/src/components/Toast/index.ts +5 -0
  1281. package/src/components/Toast/toast.anatomy.stories.tsx +324 -0
  1282. package/src/components/Toast/toast.principles.stories.tsx +217 -0
  1283. package/src/components/Toast/toast.spec.md +181 -0
  1284. package/src/components/Toast/toast.stories.tsx +125 -0
  1285. package/src/components/Toast/toast.tsx +2 -2
  1286. package/src/components/Tooltip/index.ts +5 -0
  1287. package/src/components/Tooltip/tooltip.anatomy.stories.tsx +413 -0
  1288. package/src/components/Tooltip/tooltip.principles.stories.tsx +204 -0
  1289. package/src/components/Tooltip/tooltip.spec.md +142 -0
  1290. package/src/components/Tooltip/tooltip.stories.tsx +116 -0
  1291. package/src/components/Tooltip/tooltip.tsx +4 -1
  1292. package/src/components/TreeView/index.ts +5 -0
  1293. package/src/components/TreeView/tree-view.anatomy.stories.tsx +426 -0
  1294. package/src/components/TreeView/tree-view.principles.stories.tsx +190 -0
  1295. package/src/components/TreeView/tree-view.spec.md +390 -0
  1296. package/src/components/TreeView/tree-view.stories.tsx +299 -0
  1297. package/src/components/TreeView/tree-view.tsx +63 -26
  1298. package/src/hooks/use-overflow-items.ts +10 -6
  1299. package/src/index.ts +73 -69
  1300. package/src/lib/utils.ts +2 -1
  1301. package/src/patterns/README.md +15 -11
  1302. package/src/patterns/action-bar/action-bar.spec.md +465 -0
  1303. package/src/patterns/action-bar/action-bar.stories.tsx +612 -0
  1304. package/src/patterns/element-anatomy/element-anatomy.spec.md +217 -0
  1305. package/src/patterns/element-anatomy/index.ts +5 -0
  1306. package/src/patterns/element-anatomy/inline-action.spec.md +320 -0
  1307. package/src/patterns/element-anatomy/item-anatomy.spec.md +1051 -0
  1308. package/src/patterns/element-anatomy/item-anatomy.stories.tsx +1622 -0
  1309. package/src/patterns/element-anatomy/item-anatomy.tsx +9 -5
  1310. package/src/patterns/header-canonical/chrome-header.tsx +16 -5
  1311. package/src/patterns/header-canonical/header-canonical.css +2 -2
  1312. package/src/patterns/header-canonical/header-canonical.spec.md +326 -0
  1313. package/src/patterns/header-canonical/header-canonical.stories.tsx +150 -0
  1314. package/src/patterns/header-canonical/index.ts +5 -0
  1315. package/src/patterns/horizontal-overflow/horizontal-overflow.spec.md +211 -0
  1316. package/src/patterns/horizontal-overflow/index.ts +5 -0
  1317. package/src/patterns/overlay-surface/index.ts +5 -0
  1318. package/src/patterns/overlay-surface/overlay-surface.spec.md +442 -0
  1319. package/src/patterns/overlay-surface/overlay-surface.tsx +26 -11
  1320. package/src/patterns/resize-handle/index.ts +5 -0
  1321. package/src/patterns/resize-handle/resize-handle.spec.md +120 -0
  1322. package/src/patterns/resize-handle/resize-handle.stories.tsx +71 -0
  1323. package/src/story-governance/category-matrix.json +132 -0
  1324. package/src/story-governance/category-matrix.ts +55 -0
  1325. package/src/styles/base.css +92 -0
  1326. package/src/styles/tokens.css +11 -0
  1327. package/src/tokens/README.md +7 -2
  1328. package/src/tokens/categorical-color.ts +164 -0
  1329. package/src/tokens/color/color.spec.md +801 -0
  1330. package/src/tokens/color/color.stories.tsx +363 -0
  1331. package/src/tokens/color/primitives.css +7 -0
  1332. package/src/tokens/color/semantic.css +28 -13
  1333. package/src/tokens/density/density.spec.md +128 -0
  1334. package/src/tokens/density/density.stories.tsx +240 -0
  1335. package/src/tokens/elevation/elevation.spec.md +78 -0
  1336. package/src/tokens/elevation/elevation.stories.tsx +98 -0
  1337. package/src/tokens/layoutSpace/layoutSpace.css +1 -1
  1338. package/src/tokens/layoutSpace/layoutSpace.spec.md +324 -0
  1339. package/src/tokens/layoutSpace/layoutSpace.stories.tsx +75 -0
  1340. package/src/tokens/motion/motion.css +2 -2
  1341. package/src/tokens/motion/motion.spec.md +105 -0
  1342. package/src/tokens/motion/motion.ts +1 -1
  1343. package/src/tokens/opacity/opacity.spec.md +73 -0
  1344. package/src/tokens/opacity/opacity.stories.tsx +69 -0
  1345. package/src/tokens/orphan-tokens.spec.md +128 -0
  1346. package/src/tokens/radius/radius.spec.md +126 -0
  1347. package/src/tokens/radius/radius.stories.tsx +86 -0
  1348. package/src/tokens/token-system.spec.md +240 -0
  1349. package/src/tokens/typography/typography.spec.md +204 -0
  1350. package/src/tokens/typography/typography.stories.tsx +133 -0
  1351. package/src/tokens/uiSize/icon-size.ts +1 -2
  1352. package/src/tokens/uiSize/uiSize.css +21 -0
  1353. package/src/tokens/uiSize/uiSize.spec.md +465 -0
  1354. package/src/tokens/utility-registry.json +124 -0
  1355. package/dist/components/NameCard/name-card.d.ts.map +0 -1
  1356. package/dist/components/NameCard/name-card.js.map +0 -1
@@ -0,0 +1,491 @@
1
+ ---
2
+ component: FileItem
3
+ family: 2
4
+ variants: {}
5
+ sizes: {}
6
+ traits:
7
+ - hasInteractiveStates
8
+ benchmark:
9
+ - Ant Design Upload (file list): github.com/ant-design/ant-design/tree/master/components/upload
10
+ - Polaris Thumbnail: github.com/Shopify/polaris/tree/main/polaris-react/src/components/Thumbnail
11
+ ---
12
+
13
+ <!-- @benchmark-cited: D5 retrofit 2026-05-18 — body claims marked per-claim @benchmark-unverified inline; canonical source URLs in frontmatter benchmark list. -->
14
+
15
+ # FileItem 設計原則
16
+
17
+ **檔案上傳列表項目**——顯示檔案名稱、上傳進度、狀態(uploading / completed / error)。
18
+
19
+ **實作基礎**:組合元件——Icon + Text + ProgressBar + Button,無 external primitive base。
20
+
21
+ **Layout Family**:CLAUDE.md 4-Family Model **Family 2(List item layout)** 消費者。結構繼承 `patterns/element-anatomy/item-anatomy.spec.md`「List item layout」章節的 reading-mode 規格。FileItem 在 rich mode 用 avatar 作 item boundary。
22
+
23
+ **命名 rationale**:`compact / rich` 表達精簡 vs 完整內容呈現(對齊 Discord embed type='rich' / Slack rich preview / Notion rich text 世界級 idiom)。不叫 `lg/sm`——兩者是資訊量不同的展示策略,不是同一結構的尺寸縮放。 <!-- @benchmark-unverified: see frontmatter benchmark list for canonical DS source URL -->
24
+
25
+ ---
26
+
27
+ ## 何時用
28
+
29
+ - **檔案上傳清單**:drag-drop upload、multiple file selector 的選中檔案列表
30
+ - **附件展示**:email / comment / ticket 的附件列表(rich mode 顯示縮圖 + 檔名)
31
+ - **批次處理進度**:CSV / JSON 匯入的逐檔進度追蹤(compact mode,預設)
32
+ - **上傳錯誤回報**:顯示哪些檔案失敗 + 重試按鈕
33
+
34
+ ## 何時不用
35
+
36
+ | 場景 | 改用 | 原因 |
37
+ |------|------|------|
38
+ | 只是顯示已上傳檔名(純連結)| `LinkInput` / plain `<a>` | FileItem 承載 upload 狀態,靜態連結不需要 |
39
+ | 下載進度(不是上傳)| 自訂 download 元件 | FileItem 專為 upload 流程設計,下載有不同 UX(瀏覽器原生)|
40
+ | 照片 / 影片 gallery | Grid / Carousel | Gallery 需要預覽 grid 佈局,FileItem 是 list 單行 |
41
+ | 資料夾階層 | `TreeView` | FileItem 是平面列表,階層用 tree |
42
+
43
+ ---
44
+
45
+ ## Mode
46
+
47
+ | Mode | Prefix | Typography | 適用場景 |
48
+ |---|---|---|---|
49
+ | `compact`(預設) | Paperclip icon 16px | 掃描模式 | 批次上傳的一般檔案(CSV、JSON) |
50
+ | `rich` | Avatar 48px square(固定) | 掃描模式(兩 mode 統一,見下「為什麼兩 mode 都 scanning」) | 需要縮圖預覽的檔案(圖片、文件) |
51
+
52
+ compact 為預設——多數 upload 清單是「快速掃視多檔」場景,只有需要縮圖預覽才升級為 rich。
53
+
54
+ ## Typography(兩 mode 都 scanning typography · 2026-04-23 user 指示)
55
+
56
+ **兩 mode 統一 scanning typography**(row 帶 `leading-compact`,對齊 MenuItem / Steps 的 Family 1 scanning idiom):
57
+
58
+ | | compact | rich |
59
+ |---|---|---|
60
+ | label | text-body (14px) + `leading-compact` (1.3) | text-body (14px) + `leading-compact` (1.3) |
61
+ | description | text-caption (12px) + `leading-compact` | text-caption (12px) + `leading-compact` |
62
+ | ItemContent `mode` | `"scanning"` | `"scanning"` |
63
+ | Gap token | `--item-gap-label-desc-scanning` | `--item-gap-label-desc-scanning` |
64
+
65
+ **為什麼兩 mode 都 scanning**:FileItem 是檔案列表 row — 使用者需快速掃視多檔(Gmail attachment / Google Drive 清單),掃描 typography 視覺緊湊符合語義。Rich mode 保留 Avatar 48 thumbnail 作視覺引導,但文字層採 scanning idiom。
66
+
67
+ ## 結構(2026-04-23 修正對齊 item-anatomy canonical)
68
+
69
+ ### 共通 layout invariants(兩 mode 都遵守)
70
+
71
+ | 間距 | 值 | 來源 canonical |
72
+ |------|-----|--------------|
73
+ | **Label ↔ Description gap** | `--item-gap-label-desc-scanning`(2px,scanning mode)— FileItem 走 scanning typography(掃視密集列表) | `patterns/element-anatomy/item-anatomy.spec.md`「Label ↔ Desc 間距 / 4 token 矩陣」+ primitive `<ItemContent mode="scanning">` |
74
+ | **Content ↔ ProgressBar gap** | `gap-2`(8px) | 兩 mode 一致(compact 用 py-2 + absolute 自然達成;rich 用 explicit flex-col gap-2) |
75
+ | **Suffix 高度**(小 suffix,icons ≤24) | `h-[1lh]` + items-center inline 對齊 label 第一行 | `patterns/element-anatomy/item-anatomy.spec.md`「24px 閾值對齊規則」 |
76
+
77
+ ### compact(預設)
78
+
79
+ ```
80
+ [📎] [ label
81
+ ↓ --item-gap-label-desc-scanning (2px,scanning mode md)
82
+ desc? ] [suffix h-[1lh]]
83
+ [ ██████████░░ ] ← 底部 progress bar(absolute,content 與 bar ≈ 8px gap)
84
+ ```
85
+
86
+ ### rich(完整呈現)
87
+
88
+ ```
89
+ [Avatar 48 square [ label ─────────────────── ↑ label top = avatar top
90
+ 固定,top-align ↓ --item-gap-label-desc-scanning (2px,scanning mode md)
91
+ 作視覺引導] desc ] [suffix h-[1lh]]
92
+ ↓ 自動填滿餘空間(min 8px gap)
93
+ [ ██████████░░ ] ────────── ↓ bar bottom = avatar bottom(1-line 時)
94
+ ```
95
+
96
+ ### Rich layout invariant(2026-04-23 user 校準)
97
+
98
+ **1-line desc 時**:
99
+ - Content col `minHeight = AVATAR_SIZE (48)` + `justify-between` + `gap-2`
100
+ - **label 頂 = avatar 頂**(row `items-start`)
101
+ - **progress bar 底 = avatar 底**(minHeight + justify-between 的剩餘空間分配)
102
+ - 中間 gap 自動填(label+desc+bar 總高 < 48 時,剩餘空間成為 gap,至少 `gap-2`=8px)
103
+
104
+ **multi-line desc 時**:
105
+ - Content 自然高度超過 avatar 48
106
+ - Progress bar 溢出 avatar 底(正常語義:內容撐長了)
107
+ - **desc ↔ progress bar 保持 8px min gap**(`gap-2` 強制)
108
+
109
+ **無 progress bar 時**:`justify-center` 取代 `justify-between`,content 垂直置中對齊 avatar 中心。
110
+
111
+ ### Rich Avatar 對齊的明文例外(上游 item-anatomy 24px 規則的例外)
112
+
113
+ item-anatomy「> 24 prefix + 有 desc」規則要求 prefix 對齊 content 塊**中心**(items-center)。
114
+ FileItem rich **刻意不遵守**這條,使用 `items-start`(top-align),原因:
115
+
116
+ > **當 FileItem rich 被放在「檔案上傳管理 box」等 tight-stack 情境**(consumer 移除 border 並 0 gap 相連時),avatar 作為**每個 item 的視覺邊界引導**——若 avatar 中心對齊,連續 item 的 avatar 會擠在一起失去「每筆檔案一個 thumbnail」的視覺節奏。top-align 讓 avatar 明確標示每個 item 的起點。
117
+
118
+ ### Avatar 尺寸(固定 48px)
119
+
120
+ Avatar **固定 48px square**,不隨 content 高度變化。content(label + desc + bar)可自然 > 48(2-line desc 時)或 < 48(無 desc + 無 bar 時),avatar 始終 48。
121
+
122
+ ## Padding
123
+
124
+ | Mode × surface | 規則 |
125
+ |---|---|
126
+ | compact(`surface=form` 預設) | `px-3 py-2`(FileItem 無 size prop,不走 `ROW_PADDING_BY_SIZE` 公式;`gap-2` 對齊 item-anatomy row) |
127
+ | compact(`surface=upload-manager`) | **`py-2` 保留 + 左右 padding 拿掉**(`px-0`)。py 是**純文字列高來源**(無 avatar 撐高)不可拿;左右拿掉讓列對齊面板 loose L/R |
128
+ | rich(`surface=form` 預設) | `px-3 py-3` border card(py 固定,高度由 avatar 決定不走 row 公式)|
129
+ | rich(`surface=upload-manager`) | **左右 + 上下 padding 全拿掉**(`px-0 py-0`)。**列高靠 avatar 48(content `minHeight`)**,卡片移除後 py 多餘 → 由面板 + gap 控制間距(2026-06-03 user 校準:rich 拿上下、compact 保留上下,因列高來源不同)|
130
+
131
+ **item 與容器分工**:item 只控「容器不該管的內距」—— compact `py-2`(純文字列高來源,無 avatar 撐高)/ rich `0`(列高靠 avatar 48);左右一律拿掉交給容器。**`surface=upload-manager` 浮層面板(容器)的左右 / 上下 padding / 列間 gap → 見「List wrapper canonical」的「upload-manager 浮層面板 composition」段**(SSOT 不在此重述,避免 drift)。
132
+
133
+ ## 邊框 / 背景(AR15-21 canonical,2026-04-21 · 2026-04-22 擴充)
134
+
135
+ **容器視覺由 `mode` × `surface` 決定**(2026-06-03 加 surface 維度,codify rich-borderless)。`surface` prop:`form`(預設)/ `upload-manager`。
136
+
137
+ | Mode × surface | 容器視覺 | Rationale |
138
+ |------|---------|-----------|
139
+ | **rich + `surface=form`**(預設,表單/訊息附件)| `border border-divider rounded-md bg-surface` | Rich = 「檔案 card」自立輪廓——Slack / Notion / Linear attachment 慣例;邊框讓每 row 視覺獨立 |
140
+ | **rich + `surface=upload-manager`**(Google Drive / Dropbox 背景上傳 box)| **無邊框 + 無 bg**(`rounded-md` 保留供 thumbnail 切角);avatar 作每筆 item 視覺邊界 | box 自身已是容器 → card border 多餘=雙層容器;avatar thumbnail 提供「每筆檔案」邊界節奏。2026-06-03 codify(原僅 L116 旁註「consumer 自己移除 border」,現 `surface` prop 機械化)|
141
+ | **compact + 有 status**(uploading / error / upload-manager completed,有 progress bar)| 無背景、無邊框,只靠 progress bar 提供 affordance | 「正在發生」/「剛發生」的動態 narrative,progress 本身就是視覺焦點 |
142
+ | **compact + 無 progress**(form attachment 靜態態) | `bg-secondary rounded-md`(= neutral-3 色) | 靜態清單(form / 訊息附件)背景色區隔出「檔案 row」邊界,跟純文字內容區分。**為何 `bg-secondary` 不 `bg-neutral-3`**:`--secondary` 是 semantic token 經 `@theme inline` 橋接成合法 Tailwind utility,`--color-neutral-3` 是 primitive token(僅 `:root` CSS var)不生成 utility,寫 `bg-neutral-3` 會 silent 失效。對齊 Badge low / ProgressBar track SSOT(同色) |
143
+
144
+ ### Hover 行為 canonical(2026-04-23)
145
+
146
+ **FileItem 永不顯示 hover-bg**,不論 mode / status / onClick。affordance 只靠 `cursor-pointer`(onClick 存在時)+ actions icon / hover-swap(status slot icon fade → action icon fade)。
147
+
148
+ **Rationale(permanent visual anchor → 不加 hover-bg double-emphasis)**:
149
+
150
+ | Mode | 永久 visual anchor | 加 hover-bg 後果 |
151
+ |------|-------------------|-----------------|
152
+ | rich | `border + rounded-md + bg-surface` 永遠 card | card + hover-bg = 雙層強調,視覺 heavy |
153
+ | compact 無 status(靜態) | `bg-secondary rounded-md` 永遠 pill | pill bg + hover-bg neutral-hover 兩層相近灰,視覺雜 |
154
+ | compact 有 status(uploading / error / completed with bar) | 底部 2px progress bar(分隔線型 permanent affordance) | bar + hover-bg 同時並存,affordance 重複 |
155
+
156
+ 三種型態**都已 anchored**,hover-bg 是多餘的視覺層。Cursor + click 本身已是足夠互動 affordance,世界級檔案 card / attachment 皆如此。
157
+
158
+ **世界級對照**(M8 / M12 benchmark):
159
+
160
+ | DS | File card / attachment hover 行為 | 跟本 canonical 對齊? |
161
+ |----|----------------------------------|----------------------|
162
+ | Slack file tile | border highlight,**無 bg 變化** | ✓ |
163
+ | Notion file callout | **無 bg 變化**,action icons fade in | ✓ |
164
+ | Figma file card | shadow lift,**無 bg 變化** | ✓ |
165
+ | Gmail attachment chip | **無 bg 變化**,download icon fade in | ✓ |
166
+ | Dropbox / Google Drive file **row**(flush transparent 無 permanent anchor) | **有** hover-bg | Opposite case(證明 canonical:anchored → 無、flush → 有) |
167
+
168
+ **跟 MenuItem / DataTable row 對比**(它們用 hover-bg):兩者是 **flush transparent row**(無 permanent bg / border),hover-bg 是唯一 affordance。FileItem 三種型態皆已 anchored → 反向 canonical。
169
+
170
+ **反例**(本 session 修正):
171
+ - 原 code `hoverClass = onClick ? 'cursor-pointer hover:bg-neutral-hover' : ''` → rich card 上 hover 多一層灰 bg 雙層強調;無 status pill 上 hover 加 `bg-neutral-hover` 跟 pill 底色近似造成視覺雜
172
+ - 修為 `hoverClass = onClick ? 'cursor-pointer' : ''`
173
+
174
+ **❌ 反例**:
175
+ - Rich mode 無邊框 → 與一般 list item 無法區分,跟 MenuItem 混淆
176
+ - Compact mode 靜態 item 無 bg → 純文字列,使用者不知這是「可點下載的檔案」
177
+ - 外層 list wrapper 加邊框 / `overflow-hidden` → 雙重邊框(list 邊框 + item card 邊框)視覺干擾;並強制邊框相黏破壞 card 自立性(2026-04-22 user 糾正)
178
+
179
+ ---
180
+
181
+ ## 可下載狀態 canonical(2 use case)
182
+
183
+ **核心區分**:同一個 FileItem,依**所在 surface** 分 2 種使用場景,各有 prop signature + 視覺節奏。唯一詞彙 = `surface` prop(`form` / `upload-manager`),以下兩節即其兩值。**一句話差別:`upload-manager` 完成後保留狀態(管理上傳是重點)/ `form` 完成後清除狀態變靜態附件。進度條兩者上傳中都會顯示(`progressBar` 只看 `status` 不看 `surface`,見 `file-item.tsx`)。**
184
+
185
+ ### `surface="upload-manager"` — 上傳管理面板(Google Drive / Dropbox 右下角類)
186
+
187
+ **語意**:管理檔案上傳的 UI —— **上傳狀態是重點,完成後仍保留 progress + status narrative**(不清除),使用者回顧「這檔剛上傳完成」。裝在獨立浮層面板(非 dropzone)。
188
+
189
+ | 屬性 | 值 |
190
+ |------|---|
191
+ | `status` | `uploading` / `error` / `completed`(**completed 持續保留不清除** = 此情境精髓) |
192
+ | Progress bar | 隨 status 顯示;completed = 100% 完成條(不隱藏) |
193
+ | Status icon | uploading 無 / completed 綠 ✓ / error 紅 ✗ |
194
+ | hover 行為 | **status slot hover-swap**:✓ → Download ↓(icon button)觸發 `onDownload` |
195
+ | Row-click | optional `onClick` 讓整 row 可點 → 預設 FileViewer 開啟;可與 hover-swap 並存 |
196
+ | Rich 容器 | **無邊框 + 無 bg**(面板自身是容器,avatar 作 item 邊界)。**2026-06-03 修正:原寫「border card 永遠」與 surface=upload-manager 無邊框矛盾** |
197
+ | Compact 容器 | 無 bg(progress bar 提供 affordance) |
198
+ | 刪除按鈕 | optional(業務權限) |
199
+
200
+ ```tsx
201
+ <FileItem
202
+ mode="rich"
203
+ surface="upload-manager"
204
+ name="report.pdf"
205
+ status="completed"
206
+ onDownload={() => download(id)}
207
+ actions={<Button size="xs" iconOnly variant="text" startIcon={Trash2} onClick={del} aria-label="刪除" />}
208
+ />
209
+ ```
210
+
211
+ ### `surface="form"`(預設)— 表單 / 訊息附件
212
+
213
+ **語意**:檔案是「已存在的附件」。**上傳中會顯示進度**(`status="uploading"`,暫時),**完成後 consumer 清掉 status → 變靜態**(無 bar、無 icon),不再是 upload 動作延續。
214
+
215
+ | 屬性 | 值 |
216
+ |------|---|
217
+ | `status` | 上傳中暫時 `uploading` / `error`;**靜態態 `undefined`**(清除) |
218
+ | Progress bar | 上傳中顯示;靜態態無 |
219
+ | Status icon | 同上 |
220
+ | hover 行為 | `cursor-pointer`(永不顯示 hover-bg ——permanent-anchored 元件不加 double-emphasis) |
221
+ | Row-click | **`onClick` 為主要 affordance** → **預設 FileViewer 開啟**(consumer 決定,也可下載) |
222
+ | Rich 容器 | `border card`(永遠) |
223
+ | Compact 容器 | 靜態態 `bg-secondary`(灰底區隔「這是檔案 row」;= `--color-neutral-3` semantic 橋接名,見邊框 / 背景章節);上傳中有 bar 時無灰底 |
224
+ | 刪除按鈕 | optional(業務權限) |
225
+
226
+ ```tsx
227
+ <FileItem
228
+ mode="compact"
229
+ name="report.pdf"
230
+ description="2.3 MB"
231
+ onClick={() => openViewer(id)}
232
+ actions={hasDeletePermission ? <Button size="xs" iconOnly variant="text" startIcon={Trash2} onClick={del} aria-label="刪除" /> : undefined}
233
+ />
234
+ ```
235
+
236
+ **選用判斷**:
237
+ - 管理上傳、完成後仍要看狀態 → `surface="upload-manager"`
238
+ - 檔案進駐表單 / 留言 / 既有資料(完成後靜態)→ `surface="form"`(預設)
239
+
240
+ ### Description ReactNode 可含 clickable 元素
241
+
242
+ Description 是 ReactNode,**不限純文字**。常見場景:
243
+ - Error 描述含 "View log" 需可點 → 用 `<a className="underline">View log</a>` 或 inline Button:
244
+
245
+ ```tsx
246
+ <FileItem
247
+ mode="compact"
248
+ name="backup-failed.json"
249
+ status="error"
250
+ description={
251
+ <>
252
+ Network timeout.{' '}
253
+ <a href="#logs" className="underline hover:text-error-hover">View log</a>
254
+ </>
255
+ }
256
+ onRetry={noop}
257
+ />
258
+ ```
259
+
260
+ 視覺上 underline + hover 色變讓使用者知道「那段文字可點」。
261
+
262
+ ### 不可混用 invariants
263
+
264
+ **Invariant 1 — rich 跟 compact 不可混用**:
265
+ 同一 list 內**只能一種 mode**。rich 是「檔案 card」視覺語言(border + avatar + 完整 metadata),compact 是「掃視密集列表」視覺語言(paperclip + filename),兩者並排會:
266
+ - 高度差異過大(rich ~72px / compact ~36px)破壞 row rhythm
267
+ - Avatar vs paperclip prefix 視覺語言衝突
268
+ - consumer 要混用代表情境定位不清 —— 選一種
269
+
270
+ **Invariant 2 — completed-保留 跟 靜態-無 status 不共存**:
271
+ upload-manager 的 completed(100% bar + ✓)屬「剛完成的 upload session」視覺;form 靜態(無 bar / status=undefined)屬「已存 attachment」視覺 —— 業務語義互斥。表單情境完成後 consumer 把 item 清掉 status 轉靜態,不會同時顯示「completed with bar」+「無 bar」。
272
+
273
+ **合法 mixed 情境**(email 草稿 / 多步驟 upload flow):同一 form list 內「上傳中」(`status="uploading"`/`error`,顯示進度)+「已存附件」(無 status,靜態)— 只在 **compact mode 內**。
274
+
275
+ ---
276
+
277
+ ## List wrapper canonical(多 item 間距)
278
+
279
+ **規則:gap 由「item 視覺密度」決定** —— rich form(有邊框 card)`gap-2`(8px,邊框不相黏);rich `surface=upload-manager`(無邊框)`gap-[var(--layout-space-tight)]`(12px);compact(所有情境)`gap-1`(4px)。
280
+
281
+ | Mode × surface | List wrapper gap | Rationale |
282
+ |------|----------------|-----------|
283
+ | **Rich + `surface=form`**(border card)| `gap-2`(8px) | card 邊框不相黏(standalone card invariant) |
284
+ | **Rich + `surface=upload-manager`**(無邊框浮層面板)| `gap-[var(--layout-space-tight)]`(12px)| 卡片 + 48 縮圖列需垂直呼吸。**2026-06-03 圖五 user 校準:rich upload-manager 初版誤設 4px,已校正為 tight(12px)**,因 rich 列比 compact 大 |
285
+ | **Compact**(所有情境)| `gap-1`(4px) | 統一 — 有 status only / 無 status only / mixed 都 gap-1(2026-04-23 user 指示簡化:原條件式「全上傳中 → 0 gap」是 consumer 心智負擔 + state 轉換時 fragile,故捨棄 0-gap)|
286
+
287
+ **control→list gap(FileUpload 內建 list 消費)**:dropzone / button 控制項 ↔ 第一個 FileItem 的間距 = **同上 form gap 同值**(rich card 8px / compact bg-pill 4px),由 `file-upload.tsx` 依 `fileListMode` 套用。**FileUpload 內建 list 一律 `surface=form`**(dropzone 是表單上傳框,非獨立浮層 upload manager),故不套用下方 upload-manager 的 12px / 面板 padding。
288
+
289
+ ### upload-manager 浮層面板 composition(Google Drive 右下角類獨立面板,**非** FileUpload dropzone)
290
+
291
+ `surface=upload-manager` 的 FileItem list 裝在獨立浮層面板(header + 列表),item 拿掉的左右 / 上下邊距改由容器負責:
292
+
293
+ - **它是 popover-class 浮層 surface,但不是 Radix `<Popover>`**(常駐面板:不靠 trigger 開、不 outside-click 關、用 chevron 收合非 X dismiss)→ **不包 `<Popover>`**,而是直接消費 overlay-surface 三件套 primitive。
294
+ - **殼 + header + body 全消費 overlay-surface SSOT(禁手刻)**:
295
+ - 殼:用 Popover 同款 chrome token `rounded-lg border border-border bg-surface-raised shadow-[var(--elevation-200)] flex flex-col`(DS 無獨立 shell primitive — `PopoverContent`/`DialogContent` 各自套這組 token;常駐面板鏡像同值)。
296
+ - header:`<SurfaceHeader className={cn("justify-between", COMPACT_HEADER_SLOT)}>` + `<PopoverTitle>`(輕量浮層 header SSOT,slot 走 `COMPACT_HEADER_SLOT`=21 衍生自 text-body title;padding = px-loose py-tight + border-b + unbounded-slot 負 my trick)。
297
+ - body:**`<SurfaceBody>`(body SSOT,含 px-loose py-tight + flex-1 scroll 鏈)**,FileItem-specific padding 用 className override(見下)。**這不是「List-as-region」**(那專指 edge-to-edge 選單清單:item hover-bg 貼容器、px-0;Cmd+K / menu / nav)—— upload-manager list 有 px-loose、item 無 hover-bg、是 chrome-padded body,故就用 SurfaceBody。**scroll(consumer 注意)**:SurfaceBody 的 `flex-1 / overflow-y-auto` 只在 shell 有 `max-h` + `overflow-hidden` 時生效;常駐面板若檔案數可超 viewport,shell 須加 `max-h`(對齊 overlay-surface.spec.md「viewport-aware scroll」),demo 短內容不需。
298
+ - **禁手刻**:`<div px-loose py-2 border-b>`(header)/ 手刻 `<div px-loose py-tight>`(body)= drift(2026-06-03/04 user 抓:py-2≠py-tight / 殼 token 全偏 / body 重刻 SurfaceBody)。Hook `check_story_invariants.sh R9` 機械攔手刻 header。
299
+
300
+ - **左右**:`SurfaceBody` 預設 `px-[var(--layout-space-loose)]`(16px,item 內容左緣對齊 header 標題),不需 override。
301
+ - **上下:目標 = 邊緣到 item「ink」(可見內容)距離 `var(--layout-space-tight)`(12px),兩 mode + 上下都一致**。通則:**容器該側 padding = 12 − item 在該側自己的留白(ink inset)**。
302
+ - **rich**:item 上下 ink inset 皆 0(avatar 頂、bar/content 底貼齊)→ 用 `SurfaceBody` 預設 `py-[var(--layout-space-tight)]`(12 / 12 對稱,不需 override)。
303
+ - **compact**:item 上方自帶 `py-2`(8px)→ top 補 `4`(4+8=12);**進度條 `absolute bottom-0` 貼 item 底、下方無留白(inset 0)**→ bottom 留 SurfaceBody 預設 `py-tight`(12,12+0=12)。故 compact 用 **`SurfaceBody className="!pt-1"`** override 成上下不對稱(top=4 / bottom=12)。**為何用 `!`(important)**:twMerge 不 strip SurfaceBody 基底 `py-[tight]`,非 important 的 `pt-1` 跟基底 `py` 競爭 top 看 Tailwind stylesheet 生成順序(非決定性 → 可能 silent 變 12);`!pt-1` 強制決定性勝。對齊 List-as-region `!px-0` SurfaceBody override 慣例。
304
+ - **列間 gap**:套在 SurfaceBody className;值見上方「List wrapper canonical」gap 表(SSOT,不在此重述:rich upload-manager 12px / compact 4px)。
305
+ - **為何 compact container 上下不對稱**(2026-06-03 圖一研究校準):compact 進度條 absolute 貼底,item 的 py-2 那 8px 落在「文字↔bar」之間、bar 下方無 padding;若上下都用同值 → 下邊距(bar→邊緣)只剩容器值、比上邊距(含 item 8px)小。故用「12 − ink inset」逐側補。世界級對照:密集 list / dropdown 容器上下 padding 慣例 4–8px(Atlassian space.050–100 / 8px-base 共識);此處目標 12px 是「邊緣→ink」視覺值(含 item 自身留白),非容器裸值。
306
+ - Demo:`file-item.stories.tsx` 的 `UploadManagerSurface`(rich)/ `UploadManagerCompactSurface`(compact)。
307
+
308
+ **Rich + Compact 不可混用**(見 Invariant 1 上方),故無「混用 gap」決策。
309
+
310
+ ### List wrapper 本身不加視覺
311
+
312
+ **規則**(2026-04-22 user 直指):FileItem 各自 own 視覺(rich card / compact bg),list wrapper 只負責垂直排列 + gap。**不應該有外框**(無 `border` / 無 `rounded-*` / 無 `overflow-hidden`)— 否則:
313
+ - FileItem rich 自帶 card,list 再加外框 → 雙重 card
314
+ - 強制邊框合併(user 2026-04-22 指出的 `border rounded-lg overflow-hidden` 反例)
315
+
316
+ ```tsx
317
+ // ✅ Rich list
318
+ <div className="flex flex-col gap-2">
319
+ {files.map(f => <FileItem key={f.id} mode="rich" {...f} />)}
320
+ </div>
321
+
322
+ // ✅ Compact 一律 gap-1(無 status / 有 status / mixed 上傳中+已存附件 都同此 wrapper,見上表)
323
+ <div className="flex flex-col gap-1">
324
+ {files.map(f => <FileItem key={f.id} mode="compact" status={f.isUploading ? 'uploading' : undefined} {...f} />)}
325
+ </div>
326
+
327
+ // ❌ 反例:list 加外框 + overflow-hidden(雙重 card / 強制邊框相黏)
328
+ <div className="flex flex-col border rounded-lg overflow-hidden">
329
+ {files.map(f => <FileItem key={f.id} mode="rich" {...f} />)}
330
+ </div>
331
+ ```
332
+
333
+ **Clickable → 下載 / 預覽 canonical**(AR15):
334
+ - FileItem 提供 `onClick` prop,consumer 傳入即進 clickable 模式(僅滑鼠可點 + `cursor-pointer`;刻意不加整列 keyboard 焦點 / hover-bg — 見「A11y 預設」nested-interactive rationale 與「Hover 行為 canonical」)
335
+ - 兩種 surface 都可以用 `onClick`(upload-manager 可跟 `onDownload` hover-swap 並存)
336
+ - consumer 決定具體行為(download / FileViewer),元件只提供 row 可點擊能力
337
+
338
+ ## ProgressBar
339
+
340
+ **SSOT**:FileItem 不自 roll bar,消費 `../ProgressBar/progress-bar.spec.md` 元件(Radix Progress 包裝 + 本 DS token)。避免視覺漂移。
341
+
342
+ | 屬性 | 值 | 依據 |
343
+ |---|---|---|
344
+ | 消費元件 | `<ProgressBar status={...} value={...} height={compact ? 2 : undefined} />` | 本 DS ProgressBar SSOT(公開 API 固定 4px;`height` 是 internal-only 逃生艙,FileItem 為唯一合法 consumer) |
345
+ | status 映射 | `uploading → inProgress` / `completed → success` / `error → error` | ProgressBar `status` 原生支援 |
346
+ | height 映射 | `compact → 2px` / `rich → 4px`(預設) | compact mode 極密集 row layout 需要更細 track;rich mode 走 DS 預設 4px |
347
+ | value | `status === 'completed' ? 100 : progress` | completed 永遠 100% |
348
+
349
+ 改動進度條視覺(高度 / 色 / 動畫) → 去 ProgressBar 改,**本元件無本地 bar 實作**。
350
+
351
+ ## Actions(suffix,row dedicated region canonical)
352
+
353
+ Consumer 自行組合。按 `patterns/element-anatomy/item-anatomy.spec.md`「Predicate」+「Row action 絕對值 cap」,**row dedicated action 絕對值 cap = ≤ 24px,不隨 row tier 放大**。依 row 高度分兩種實作:
354
+
355
+ **兩 mode 統一(2026-04-23 canonical)**:rich + compact 都用 **Button iconOnly `size="xs"`**(24 固定,≤ cap):
356
+
357
+ | Mode | 實作 | 尺寸 |
358
+ |------|------|------|
359
+ | `rich` | **Button iconOnly `size="xs"`**(24 固定,不隨 row 放大) | 24 |
360
+ | `compact` | **Button iconOnly `size="xs"`**(同 rich;靠 suffix wrapper `[&>[data-unbounded]]:my-[calc((1lh-var(--field-height-xs))/2)]` trick 把 24 footprint 收斂到 1lh,不撐高 row,視覺 / touch target 仍 24) | 24 |
361
+
362
+ ```tsx
363
+ // Rich + Compact 統一 → Button xs iconOnly 固定 24(≤ 24 cap)
364
+ <FileItem actions={
365
+ <Button size="xs" iconOnly variant="text" startIcon={Trash2} aria-label="刪除" onClick={del} />
366
+ } />
367
+ ```
368
+
369
+ **為什麼 row action 固定 Button xs(24)**:row 放大不代表 action 要放大——世界級 DS(Material DataGrid / Polaris / Atlassian / Apple HIG)row action 都是固定小 icon button(20–24),row 高度變化只影響 row padding 與 content,不影響 action 尺寸。compact row 雖矮,但 Button 24 透過 suffix wrapper 的 data-unbounded margin trick 收斂到 1lh footprint(同 chrome SurfaceHeader dismiss canonical),不會填滿 row。 <!-- @benchmark-unverified: see frontmatter benchmark list for canonical DS source URL -->
370
+
371
+ **Trash/Delete 不是 dismiss 語意**:`dismiss` 嚴格保留給「X close overlay session」(Dialog / Sheet / Popover / Alert close X)。Row 的 Trash/Delete 語意是 `onRemove`(從集合移除一個 item,見 `.claude/rules/ui-development.md`「元件 Props 命名」「onRemove」),**不套 Button `dismiss` prop**:Button `variant="text"` 預設 icon 已是 fg-muted → foreground,hover 弱化視覺自然呈現(兩 mode 同)。
372
+
373
+ 參見 `patterns/element-anatomy/item-anatomy.spec.md`「Predicate」+「Real case 表」+「Row action 絕對值 cap」。
374
+
375
+ ## Status ↔ Action hover-swap(passive → active affordance)
376
+
377
+ **世界級 UX pattern**(Gmail / Slack / Dropbox 附件 convention):status 預設是 passive 狀態標記(綠 ✓ / 紅 ✗),使用者 hover 整個 row 時,**狀態 icon 自動換成「相應的操作」**,click 即觸發:
378
+
379
+ | status | Passive icon | Hover 換成 | Consumer handler |
380
+ |--------|-------------|-----------|------------------|
381
+ | `completed` | `CircleCheck` 綠 ✓ | `Download ↓` | `onDownload` |
382
+ | `error` | `XCircle` 紅 ✗ | `RotateCw ⟲` | `onRetry` |
383
+ | `uploading` | *(progress %)* | *(無 swap)* | — |
384
+
385
+ **幾何一致性(2026-04-23 統一 canonical · row action ≤ 24 cap)**:status slot 容器大小 **= consumer 的 delete action 尺寸**,兩 mode 統一:
386
+ - `mode="rich"` → `var(--field-height-xs)`(24 固定,與 Button xs iconOnly 同)
387
+ - `mode="compact"` → `var(--field-height-xs)`(24,同 rich;compact 靠 status slot wrapper 的 `[&>[data-unbounded]]:my-[calc((1lh-var(--field-height-xs))/2)]` 把 24 footprint 收斂到 1lh,不撐高 row,視覺 / touch target 仍 24)
388
+
389
+ Passive status icon 置中於 action-sized 容器,hover 時 active action 填滿同一容器。這讓 flex gap token 測量的是**兩個同尺寸 action slot 之間的真實 gap**,不被 hover bg overflow 吃掉——status slot 尺寸 = 同 size delete slot,gap token 才能如實呈現;歷史 bug 細節見 `.claude/skills/design-system-audit/references/historical-bugs.md`。
390
+
391
+ 世界級 DS 的幾何鐵律:**同一 flex 列的互動元素必須有統一 box 尺寸**,gap token 才能如實呈現。
392
+
393
+ **Backward compat**:consumer 若沒傳 `onDownload` / `onRetry`,status icon 永遠保持 passive(不響應 hover)——既有使用者無感。
394
+
395
+ **為什麼值得這麼做**:
396
+ - passive 階段清楚告知使用者檔案狀態(✓ / ✗ 顏色強訊號)
397
+ - hover 階段立即提供相應行動(completed → 下載 / error → 重試),不需另外挪位置做按鈕
398
+ - 符合「改一處看多處」的 design system primitive 思維:passive + active 共用 slot,不讓使用者多認一處
399
+
400
+ ```tsx
401
+ <FileItem
402
+ mode="rich"
403
+ name="report.pdf"
404
+ status="completed"
405
+ onDownload={() => downloadFile(id)} // hover ✓ → ↓;error 場景同理:onRetry → hover ✗ → ⟲
406
+ actions={<Button size="xs" iconOnly variant="text" startIcon={Trash2} onClick={del} aria-label="刪除" />}
407
+ />
408
+ ```
409
+
410
+ ## Suffix 24px 閾值
411
+
412
+ 兩 mode 統一:suffix 最大元素 = Button xs = 24px ≤ 24px(小 suffix)→ `h-[1lh]` inline,不因 desc wrap 改公式(對齊 item-anatomy「24px 閾值對齊規則」)。
413
+
414
+ | Mode | 最大 suffix 元素 | alignment |
415
+ |---|---|---|
416
+ | compact(預設) | Button xs = 24px ≤ 24px | `h-[1lh]` inline |
417
+ | rich | Button xs = 24px ≤ 24px | `h-[1lh]` inline |
418
+
419
+ ## A11y 預設
420
+
421
+ - **ProgressBar 整合(進度 context 帶檔名)**:消費的 `<ProgressBar>` 自帶 `role="progressbar"` + `aria-valuenow` / `aria-valuemax`(Radix Progress primitive 提供),本元件再傳 `aria-label={檔名 上傳進度}` 作 context;keyboard 不需 focus progress bar(被動指示器,非互動元素)。
422
+ - **Action button labels**:Download / retry / remove 等 inline action 必傳 `aria-label`(中文 / consumer locale)— 「下載 report.pdf」/「重試上傳」/「移除附件」,單純「下載」/「刪除」缺檔名 context SR user 無法區分多 row。
423
+ - **Status icon hover-swap a11y**:hover-swap 不改變 SR 語意 — passive status icon `aria-hidden`,active action button 自帶 `aria-label`,避免 SR user 收到視覺 swap 噪音。
424
+ - **Row clickable 不做整列 keyboard 焦點**:傳 `onClick` 時整列僅滑鼠可點(`onClick` 直接掛在 row);**刻意不**把整列設成單一可聚焦按鈕(不加 `role="button"` / `tabIndex` / Enter-Space handler),避免與列內操作按鈕(下載 / 重試 / 移除)構成巢狀互動(axe nested-interactive)。keyboard user 直接 Tab 到列內 explicit 操作按鈕取得等價能力。世界級對照:Slack message row / Notion page row 同模式(整列只滑鼠點,鍵盤走列內按鈕)。
425
+ - **status / error 不額外加 row ARIA**:`status="uploading"` / `status="error"` 不在 row 上加 `aria-busy` / `role="status"` / `aria-live`;狀態由 progress bar 的 `role="progressbar"` 與 description 文字本身傳達。若 consumer 需要上傳完成 / 失敗的即時 announce,由外層上傳流程容器(FileUpload)統一管理 live region,避免每列各自宣告造成 SR 噪音。
426
+
427
+ ---
428
+
429
+ ## 與 FileUpload 的分界
430
+
431
+ | 元件 | 職責 | 場景 |
432
+ |------|------|------|
433
+ | **FileItem** | 單一檔案 row primitive — 顯示一個檔案的 name / status / progress / actions | List 內的單筆 / detail / preview / message attachment |
434
+ | **FileUpload** | Dropzone + file list orchestrator — 拖放區 + 多 FileItem 排列 + 上傳狀態管理 | 完整上傳流程入口 |
435
+ | **FileViewer** | 檔案內容預覽 overlay — FileItem `onClick` 的預設開啟目標 | 點 row 後的檔案全幅預覽 |
436
+
437
+ **判斷**:
438
+
439
+ - **完整上傳流程**(drag-drop / validate / list multiple files)→ 用 `FileUpload`(內部消費多個 `FileItem`)
440
+ - **單一檔案展示 / preview**(message bubble 附件 / detail page header / FileViewer 觸發點)→ 直接用 `FileItem`
441
+ - **Form attachment field**(留言區附件、ticket attachments)→ 視場景:有上傳行為走 `FileUpload`,只展示既有附件走 `FileItem` list(`surface="form"` 靜態)
442
+
443
+ **簡單記**:**有 dropzone 用 FileUpload,沒 dropzone 用 FileItem**。FileItem 不應自帶 dropzone(會跟 FileUpload 重複職責)。
444
+
445
+ ---
446
+
447
+ ## 禁止事項
448
+
449
+ - ❌ **不用 FileItem 做 generic list row**(menu / settings 列表 / nav)→ 改 `MenuItem`。FileItem prefix(paperclip / Avatar 48 thumbnail)、status pattern(uploading / error)、ProgressBar slot 都是檔案專屬語義,套到 generic row 會視覺 / 語意誤導。
450
+ - ❌ **不用 FileItem 做 selection picker**(選檔案、選 template)→ 改 `Combobox` / `Select` / `Listbox`。FileItem 設計是「展示已存在的檔案 row」,不是「從候選池挑一個」;hover / selected state 與 picker 語義不對齊。
451
+ - ❌ **不在 FileItem 內塞自組 ProgressBar**(`<div className="bg-primary h-1" style={{width: `${progress}%`}} />`)→ 必消費內建 `<ProgressBar>` SSOT。自組會視覺漂移(高度 / 動畫 / status 色不一致)+ 失去 a11y attributes。
452
+ - ❌ **不混用 rich + compact 在同一 list**(詳「Invariant 1」)— 高度差破壞 row rhythm,prefix 視覺語言衝突。
453
+ - ❌ **不用 FileItem 做下載進度**(瀏覽器原生下載 UX 已足夠)— FileItem 為 upload narrative 設計,download progress 走自訂元件。
454
+
455
+ **常見誤解**:FileItem 該有 hover-bg → 永不(三型態 permanent-anchored,見「Hover 行為 canonical」);status 會染整 row 底色 → 只升階 progress bar / status icon / description(見「Inspector 與矩陣的教學分工」);`surface` 影響進度條 → 進度條只看 `status`(見「可下載狀態 canonical」)。
456
+
457
+ ---
458
+
459
+ ## 邊界案例
460
+
461
+ - **超長檔名**:label 經 `ItemContent` 預設 `truncate` 單行截斷(ellipsis),不換行。
462
+ - **過長 description**:自由換行不截斷(FileItem 未傳 `descriptionClamp`);rich 多行 desc 時 progress bar 隨內容下移並保 8px min gap(見 Rich layout invariant)。
463
+ - **progress 精度**:傳入值直接顯示(rich 的 `%` 文字與 bar 同源),元件不四捨五入;`completed` 強制 100。
464
+ - **RTL**:未特化——compact progress bar offset 用 physical `left/right`(見 `file-item.tsx`),RTL 支援需另案。
465
+ - **Dark mode**:走 semantic token 自動 adapt。無 `disabled` prop(展示型 row,非 form control)。
466
+
467
+ ---
468
+
469
+ ## Inspector 與矩陣的教學分工
470
+
471
+ FileItem 決策維度是 `mode`(compact / rich)× `status`(uploading / completed / error / static)。anatomy 同時提供 `Inspector`(右側 Controls 即時切 `mode` / `status` / `progress` / `description` 試玩單值)與 `ColorMatrix` / `SizeMatrix` / `StateBehavior` 結構矩陣——兩者分工:Inspector 給「單一組合長怎樣」的即時試玩,矩陣給「跨 status 並排比對」的 side-by-side 決策。
472
+
473
+ ColorMatrix 已建:展示 status × 元素(filename / description / progress bar / status icon)色彩矩陣,明示 status 只驅動 **progress bar + status icon + description** 升階,**不染容器背景**(避免整 row 轉紅蓋過其他 metadata)。容器本身無 hover-bg / selected / disabled state——FileItem 三型態皆 permanent-anchored,反向於 MenuItem / DataTable flush row 的 hover-bg primitive(詳「Hover 行為 canonical」段),且 interface 無 `disabled` prop。
474
+
475
+ ---
476
+
477
+ ## 相關
478
+
479
+ - `../../patterns/element-anatomy/item-anatomy.spec.md` — row anatomy primitive(ItemContent / ItemPrefix;FileItem 兩 mode 採 scanning idiom)
480
+ - `../Avatar/avatar.spec.md` — Avatar shape(rich mode 的 icon 容器)
481
+ - `../FileUpload/file-upload.spec.md` — **配對元件**:FileUpload 是拖放 / 點擊上傳區塊,FileItem 是已上傳檔案 row 顯示;兩者構成完整 file-handling 元件組
482
+ - `../LinkInput/link-input.spec.md` — 純連結(非 upload 流程)替代
483
+ - `../TreeView/tree-view.spec.md` — 階層 file structure 場景
484
+ - `../ProgressBar/progress-bar.spec.md` — ProgressBar SSOT(FileItem consumes ProgressBar for upload bar)
485
+ - `../../tokens/color/color.spec.md` — Track 底色(`bg-secondary` 使用原則)
486
+
487
+ ## 被引用(auto-maintained,Dim 3 reciprocal audit)
488
+
489
+ > 本節由 `scripts/add-reciprocal-pointers.mjs` 自動維護,列出在 SSOT 語境下指向本 spec 的其他 spec。若要手動補充,寫在本節之前。
490
+
491
+ - `file-upload.spec.md`