@qijenchen/design-system 0.1.0-beta.3 → 0.1.0-beta.32

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 (1041) hide show
  1. package/CLAUDE.md +201 -0
  2. package/README.md +155 -0
  3. package/cli-init.mjs +90 -0
  4. package/dist/components/Accordion/accordion.d.ts +37 -0
  5. package/dist/components/Accordion/accordion.d.ts.map +1 -0
  6. package/dist/components/Accordion/accordion.js +78 -0
  7. package/dist/components/Accordion/accordion.js.map +1 -0
  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 +47 -0
  13. package/dist/components/Alert/alert.d.ts.map +1 -0
  14. package/dist/components/Alert/alert.js +132 -0
  15. package/dist/components/Alert/alert.js.map +1 -0
  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 +49 -0
  21. package/dist/components/AppShell/_demo-helpers.d.ts.map +1 -0
  22. package/dist/components/AppShell/app-shell.d.ts +76 -0
  23. package/dist/components/AppShell/app-shell.d.ts.map +1 -0
  24. package/dist/components/AppShell/app-shell.js +214 -0
  25. package/dist/components/AppShell/app-shell.js.map +1 -0
  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 +40 -0
  31. package/dist/components/AspectRatio/aspect-ratio.d.ts.map +1 -0
  32. package/dist/components/AspectRatio/aspect-ratio.js +23 -0
  33. package/dist/components/AspectRatio/aspect-ratio.js.map +1 -0
  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 +85 -0
  39. package/dist/components/Avatar/avatar.d.ts.map +1 -0
  40. package/dist/components/Avatar/avatar.js +195 -0
  41. package/dist/components/Avatar/avatar.js.map +1 -0
  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 +43 -0
  47. package/dist/components/Badge/badge.d.ts.map +1 -0
  48. package/dist/components/Badge/badge.js +69 -0
  49. package/dist/components/Badge/badge.js.map +1 -0
  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 +163 -0
  55. package/dist/components/Breadcrumb/breadcrumb.d.ts.map +1 -0
  56. package/dist/components/Breadcrumb/breadcrumb.js +300 -0
  57. package/dist/components/Breadcrumb/breadcrumb.js.map +1 -0
  58. package/dist/components/Breadcrumb/index.d.ts +2 -0
  59. package/dist/components/Breadcrumb/index.d.ts.map +1 -0
  60. package/dist/components/Breadcrumb/index.js +12 -0
  61. package/dist/components/Breadcrumb/index.js.map +1 -0
  62. package/dist/components/BulkActionBar/bulk-action-bar.d.ts +46 -0
  63. package/dist/components/BulkActionBar/bulk-action-bar.d.ts.map +1 -0
  64. package/dist/components/BulkActionBar/bulk-action-bar.js +78 -0
  65. package/dist/components/BulkActionBar/bulk-action-bar.js.map +1 -0
  66. package/dist/components/BulkActionBar/index.d.ts +2 -0
  67. package/dist/components/BulkActionBar/index.d.ts.map +1 -0
  68. package/dist/components/BulkActionBar/index.js +7 -0
  69. package/dist/components/BulkActionBar/index.js.map +1 -0
  70. package/dist/components/Button/button-group.d.ts +49 -0
  71. package/dist/components/Button/button-group.d.ts.map +1 -0
  72. package/dist/components/Button/button-group.js +46 -0
  73. package/dist/components/Button/button-group.js.map +1 -0
  74. package/dist/components/Button/button.d.ts +203 -0
  75. package/dist/components/Button/button.d.ts.map +1 -0
  76. package/dist/components/Button/button.js +309 -0
  77. package/dist/components/Button/button.js.map +1 -0
  78. package/dist/components/Button/index.d.ts +2 -0
  79. package/dist/components/Button/index.d.ts.map +1 -0
  80. package/dist/components/Button/index.js +8 -0
  81. package/dist/components/Button/index.js.map +1 -0
  82. package/dist/components/Calendar/calendar.d.ts +81 -0
  83. package/dist/components/Calendar/calendar.d.ts.map +1 -0
  84. package/dist/components/Calendar/calendar.js +282 -0
  85. package/dist/components/Calendar/calendar.js.map +1 -0
  86. package/dist/components/Calendar/index.d.ts +2 -0
  87. package/dist/components/Calendar/index.d.ts.map +1 -0
  88. package/dist/components/Calendar/index.js +6 -0
  89. package/dist/components/Calendar/index.js.map +1 -0
  90. package/dist/components/Carousel/carousel.d.ts +61 -0
  91. package/dist/components/Carousel/carousel.d.ts.map +1 -0
  92. package/dist/components/Carousel/carousel.js +276 -0
  93. package/dist/components/Carousel/carousel.js.map +1 -0
  94. package/dist/components/Carousel/index.d.ts +2 -0
  95. package/dist/components/Carousel/index.d.ts.map +1 -0
  96. package/dist/components/Carousel/index.js +11 -0
  97. package/dist/components/Carousel/index.js.map +1 -0
  98. package/dist/components/Chart/chart.d.ts +94 -0
  99. package/dist/components/Chart/chart.d.ts.map +1 -0
  100. package/dist/components/Chart/chart.js +233 -0
  101. package/dist/components/Chart/chart.js.map +1 -0
  102. package/dist/components/Chart/index.d.ts +2 -0
  103. package/dist/components/Chart/index.d.ts.map +1 -0
  104. package/dist/components/Chart/index.js +11 -0
  105. package/dist/components/Chart/index.js.map +1 -0
  106. package/dist/components/Checkbox/checkbox-group.d.ts +58 -0
  107. package/dist/components/Checkbox/checkbox-group.d.ts.map +1 -0
  108. package/dist/components/Checkbox/checkbox-group.js +28 -0
  109. package/dist/components/Checkbox/checkbox-group.js.map +1 -0
  110. package/dist/components/Checkbox/checkbox.d.ts +73 -0
  111. package/dist/components/Checkbox/checkbox.d.ts.map +1 -0
  112. package/dist/components/Checkbox/checkbox.js +125 -0
  113. package/dist/components/Checkbox/checkbox.js.map +1 -0
  114. package/dist/components/Checkbox/index.d.ts +2 -0
  115. package/dist/components/Checkbox/index.d.ts.map +1 -0
  116. package/dist/components/Checkbox/index.js +7 -0
  117. package/dist/components/Checkbox/index.js.map +1 -0
  118. package/dist/components/Chip/chip.d.ts +54 -0
  119. package/dist/components/Chip/chip.d.ts.map +1 -0
  120. package/dist/components/Chip/chip.js +224 -0
  121. package/dist/components/Chip/chip.js.map +1 -0
  122. package/dist/components/Chip/index.d.ts +2 -0
  123. package/dist/components/Chip/index.d.ts.map +1 -0
  124. package/dist/components/Chip/index.js +8 -0
  125. package/dist/components/Chip/index.js.map +1 -0
  126. package/dist/components/CircularProgress/circular-progress.d.ts +40 -0
  127. package/dist/components/CircularProgress/circular-progress.d.ts.map +1 -0
  128. package/dist/components/CircularProgress/circular-progress.js +118 -0
  129. package/dist/components/CircularProgress/circular-progress.js.map +1 -0
  130. package/dist/components/CircularProgress/index.d.ts +2 -0
  131. package/dist/components/CircularProgress/index.d.ts.map +1 -0
  132. package/dist/components/CircularProgress/index.js +6 -0
  133. package/dist/components/CircularProgress/index.js.map +1 -0
  134. package/dist/components/Coachmark/coachmark.d.ts +100 -0
  135. package/dist/components/Coachmark/coachmark.d.ts.map +1 -0
  136. package/dist/components/Coachmark/coachmark.js +107 -0
  137. package/dist/components/Coachmark/coachmark.js.map +1 -0
  138. package/dist/components/Coachmark/index.d.ts +2 -0
  139. package/dist/components/Coachmark/index.d.ts.map +1 -0
  140. package/dist/components/Coachmark/index.js +6 -0
  141. package/dist/components/Coachmark/index.js.map +1 -0
  142. package/dist/components/Combobox/combobox.d.ts +150 -0
  143. package/dist/components/Combobox/combobox.d.ts.map +1 -0
  144. package/dist/components/Combobox/combobox.js +608 -0
  145. package/dist/components/Combobox/combobox.js.map +1 -0
  146. package/dist/components/Combobox/index.d.ts +2 -0
  147. package/dist/components/Combobox/index.d.ts.map +1 -0
  148. package/dist/components/Combobox/index.js +6 -0
  149. package/dist/components/Combobox/index.js.map +1 -0
  150. package/dist/components/Command/command.d.ts +106 -0
  151. package/dist/components/Command/command.d.ts.map +1 -0
  152. package/dist/components/Command/command.js +123 -0
  153. package/dist/components/Command/command.js.map +1 -0
  154. package/dist/components/Command/index.d.ts +2 -0
  155. package/dist/components/Command/index.d.ts.map +1 -0
  156. package/dist/components/Command/index.js +14 -0
  157. package/dist/components/Command/index.js.map +1 -0
  158. package/dist/components/DataTable/active-editor-controller.d.ts +66 -0
  159. package/dist/components/DataTable/active-editor-controller.d.ts.map +1 -0
  160. package/dist/components/DataTable/cell-registry.d.ts +37 -0
  161. package/dist/components/DataTable/cell-registry.d.ts.map +1 -0
  162. package/dist/components/DataTable/cell-registry.js +377 -0
  163. package/dist/components/DataTable/cell-registry.js.map +1 -0
  164. package/dist/components/DataTable/column-types.d.ts +145 -0
  165. package/dist/components/DataTable/column-types.d.ts.map +1 -0
  166. package/dist/components/DataTable/column-types.js +17 -0
  167. package/dist/components/DataTable/column-types.js.map +1 -0
  168. package/dist/components/DataTable/data-table-column-visibility-panel.d.ts +49 -0
  169. package/dist/components/DataTable/data-table-column-visibility-panel.d.ts.map +1 -0
  170. package/dist/components/DataTable/data-table-filter-panel.d.ts +30 -0
  171. package/dist/components/DataTable/data-table-filter-panel.d.ts.map +1 -0
  172. package/dist/components/DataTable/data-table-interaction-layer.d.ts +78 -0
  173. package/dist/components/DataTable/data-table-interaction-layer.d.ts.map +1 -0
  174. package/dist/components/DataTable/data-table-interaction-layer.js +220 -0
  175. package/dist/components/DataTable/data-table-interaction-layer.js.map +1 -0
  176. package/dist/components/DataTable/data-table-sort-manager.d.ts +19 -0
  177. package/dist/components/DataTable/data-table-sort-manager.d.ts.map +1 -0
  178. package/dist/components/DataTable/data-table.d.ts +181 -0
  179. package/dist/components/DataTable/data-table.d.ts.map +1 -0
  180. package/dist/components/DataTable/data-table.js +1851 -0
  181. package/dist/components/DataTable/data-table.js.map +1 -0
  182. package/dist/components/DataTable/filter-operators.d.ts +116 -0
  183. package/dist/components/DataTable/filter-operators.d.ts.map +1 -0
  184. package/dist/components/DataTable/filter-tree.d.ts +66 -0
  185. package/dist/components/DataTable/filter-tree.d.ts.map +1 -0
  186. package/dist/components/DataTable/index.d.ts +2 -0
  187. package/dist/components/DataTable/index.d.ts.map +1 -0
  188. package/dist/components/DataTable/index.js +8 -0
  189. package/dist/components/DataTable/index.js.map +1 -0
  190. package/dist/components/DataTable/lib/column-meta.d.ts +49 -0
  191. package/dist/components/DataTable/lib/column-meta.d.ts.map +1 -0
  192. package/dist/components/DateGrid/date-grid.d.ts +61 -0
  193. package/dist/components/DateGrid/date-grid.d.ts.map +1 -0
  194. package/dist/components/DateGrid/date-grid.js +168 -0
  195. package/dist/components/DateGrid/date-grid.js.map +1 -0
  196. package/dist/components/DateGrid/index.d.ts +2 -0
  197. package/dist/components/DateGrid/index.d.ts.map +1 -0
  198. package/dist/components/DateGrid/index.js +6 -0
  199. package/dist/components/DateGrid/index.js.map +1 -0
  200. package/dist/components/DatePicker/date-picker.d.ts +119 -0
  201. package/dist/components/DatePicker/date-picker.d.ts.map +1 -0
  202. package/dist/components/DatePicker/date-picker.js +743 -0
  203. package/dist/components/DatePicker/date-picker.js.map +1 -0
  204. package/dist/components/DatePicker/index.d.ts +2 -0
  205. package/dist/components/DatePicker/index.d.ts.map +1 -0
  206. package/dist/components/DatePicker/index.js +8 -0
  207. package/dist/components/DatePicker/index.js.map +1 -0
  208. package/dist/components/DescriptionList/description-list.d.ts +60 -0
  209. package/dist/components/DescriptionList/description-list.d.ts.map +1 -0
  210. package/dist/components/DescriptionList/description-list.js +77 -0
  211. package/dist/components/DescriptionList/description-list.js.map +1 -0
  212. package/dist/components/DescriptionList/index.d.ts +2 -0
  213. package/dist/components/DescriptionList/index.d.ts.map +1 -0
  214. package/dist/components/DescriptionList/index.js +7 -0
  215. package/dist/components/DescriptionList/index.js.map +1 -0
  216. package/dist/components/Dialog/dialog.d.ts +54 -0
  217. package/dist/components/Dialog/dialog.d.ts.map +1 -0
  218. package/dist/components/Dialog/dialog.js +151 -0
  219. package/dist/components/Dialog/dialog.js.map +1 -0
  220. package/dist/components/Dialog/index.d.ts +2 -0
  221. package/dist/components/Dialog/index.d.ts.map +1 -0
  222. package/dist/components/Dialog/index.js +16 -0
  223. package/dist/components/Dialog/index.js.map +1 -0
  224. package/dist/components/DropdownMenu/dropdown-menu.d.ts +111 -0
  225. package/dist/components/DropdownMenu/dropdown-menu.d.ts.map +1 -0
  226. package/dist/components/DropdownMenu/dropdown-menu.js +288 -0
  227. package/dist/components/DropdownMenu/dropdown-menu.js.map +1 -0
  228. package/dist/components/DropdownMenu/index.d.ts +2 -0
  229. package/dist/components/DropdownMenu/index.d.ts.map +1 -0
  230. package/dist/components/DropdownMenu/index.js +21 -0
  231. package/dist/components/DropdownMenu/index.js.map +1 -0
  232. package/dist/components/Empty/empty.d.ts +40 -0
  233. package/dist/components/Empty/empty.d.ts.map +1 -0
  234. package/dist/components/Empty/empty.js +66 -0
  235. package/dist/components/Empty/empty.js.map +1 -0
  236. package/dist/components/Empty/index.d.ts +2 -0
  237. package/dist/components/Empty/index.d.ts.map +1 -0
  238. package/dist/components/Empty/index.js +6 -0
  239. package/dist/components/Empty/index.js.map +1 -0
  240. package/dist/components/Field/field-context.d.ts +77 -0
  241. package/dist/components/Field/field-context.d.ts.map +1 -0
  242. package/dist/components/Field/field-context.js +37 -0
  243. package/dist/components/Field/field-context.js.map +1 -0
  244. package/dist/components/Field/field-types.d.ts +5 -0
  245. package/dist/components/Field/field-types.d.ts.map +1 -0
  246. package/dist/components/Field/field-types.js +13 -0
  247. package/dist/components/Field/field-types.js.map +1 -0
  248. package/dist/components/Field/field-wrapper.d.ts +17 -0
  249. package/dist/components/Field/field-wrapper.d.ts.map +1 -0
  250. package/dist/components/Field/field-wrapper.js +252 -0
  251. package/dist/components/Field/field-wrapper.js.map +1 -0
  252. package/dist/components/Field/field.d.ts +127 -0
  253. package/dist/components/Field/field.d.ts.map +1 -0
  254. package/dist/components/Field/field.js +295 -0
  255. package/dist/components/Field/field.js.map +1 -0
  256. package/dist/components/Field/index.d.ts +2 -0
  257. package/dist/components/Field/index.d.ts.map +1 -0
  258. package/dist/components/Field/index.js +10 -0
  259. package/dist/components/Field/index.js.map +1 -0
  260. package/dist/components/FieldControlGroup/field-control-group.d.ts +74 -0
  261. package/dist/components/FieldControlGroup/field-control-group.d.ts.map +1 -0
  262. package/dist/components/FieldControlGroup/field-control-group.js +62 -0
  263. package/dist/components/FieldControlGroup/field-control-group.js.map +1 -0
  264. package/dist/components/FieldControlGroup/index.d.ts +2 -0
  265. package/dist/components/FieldControlGroup/index.d.ts.map +1 -0
  266. package/dist/components/FieldControlGroup/index.js +6 -0
  267. package/dist/components/FieldControlGroup/index.js.map +1 -0
  268. package/dist/components/FileItem/file-item.d.ts +44 -0
  269. package/dist/components/FileItem/file-item.d.ts.map +1 -0
  270. package/dist/components/FileItem/file-item.js +202 -0
  271. package/dist/components/FileItem/file-item.js.map +1 -0
  272. package/dist/components/FileItem/index.d.ts +2 -0
  273. package/dist/components/FileItem/index.d.ts.map +1 -0
  274. package/dist/components/FileItem/index.js +6 -0
  275. package/dist/components/FileItem/index.js.map +1 -0
  276. package/dist/components/FileUpload/file-upload.d.ts +97 -0
  277. package/dist/components/FileUpload/file-upload.d.ts.map +1 -0
  278. package/dist/components/FileUpload/file-upload.js +231 -0
  279. package/dist/components/FileUpload/file-upload.js.map +1 -0
  280. package/dist/components/FileUpload/index.d.ts +2 -0
  281. package/dist/components/FileUpload/index.d.ts.map +1 -0
  282. package/dist/components/FileUpload/index.js +6 -0
  283. package/dist/components/FileUpload/index.js.map +1 -0
  284. package/dist/components/FileViewer/file-viewer-types.d.ts +73 -0
  285. package/dist/components/FileViewer/file-viewer-types.d.ts.map +1 -0
  286. package/dist/components/FileViewer/file-viewer.d.ts +82 -0
  287. package/dist/components/FileViewer/file-viewer.d.ts.map +1 -0
  288. package/dist/components/FileViewer/file-viewer.js +752 -0
  289. package/dist/components/FileViewer/file-viewer.js.map +1 -0
  290. package/dist/components/FileViewer/image-renderer.d.ts +9 -0
  291. package/dist/components/FileViewer/image-renderer.d.ts.map +1 -0
  292. package/dist/components/FileViewer/image-renderer.js +165 -0
  293. package/dist/components/FileViewer/image-renderer.js.map +1 -0
  294. package/dist/components/FileViewer/index.d.ts +2 -0
  295. package/dist/components/FileViewer/index.d.ts.map +1 -0
  296. package/dist/components/FileViewer/index.js +7 -0
  297. package/dist/components/FileViewer/index.js.map +1 -0
  298. package/dist/components/HoverCard/hover-card.d.ts +30 -0
  299. package/dist/components/HoverCard/hover-card.d.ts.map +1 -0
  300. package/dist/components/HoverCard/hover-card.js +61 -0
  301. package/dist/components/HoverCard/hover-card.js.map +1 -0
  302. package/dist/components/HoverCard/index.d.ts +2 -0
  303. package/dist/components/HoverCard/index.d.ts.map +1 -0
  304. package/dist/components/HoverCard/index.js +8 -0
  305. package/dist/components/HoverCard/index.js.map +1 -0
  306. package/dist/components/Input/index.d.ts +2 -0
  307. package/dist/components/Input/index.d.ts.map +1 -0
  308. package/dist/components/Input/index.js +6 -0
  309. package/dist/components/Input/index.js.map +1 -0
  310. package/dist/components/Input/input.d.ts +72 -0
  311. package/dist/components/Input/input.d.ts.map +1 -0
  312. package/dist/components/Input/input.js +148 -0
  313. package/dist/components/Input/input.js.map +1 -0
  314. package/dist/components/LinkInput/index.d.ts +2 -0
  315. package/dist/components/LinkInput/index.d.ts.map +1 -0
  316. package/dist/components/LinkInput/index.js +6 -0
  317. package/dist/components/LinkInput/index.js.map +1 -0
  318. package/dist/components/LinkInput/link-input.d.ts +46 -0
  319. package/dist/components/LinkInput/link-input.d.ts.map +1 -0
  320. package/dist/components/LinkInput/link-input.js +215 -0
  321. package/dist/components/LinkInput/link-input.js.map +1 -0
  322. package/dist/components/Menu/index.d.ts +2 -0
  323. package/dist/components/Menu/index.d.ts.map +1 -0
  324. package/dist/components/Menu/index.js +9 -0
  325. package/dist/components/Menu/index.js.map +1 -0
  326. package/dist/components/Menu/menu-item.d.ts +83 -0
  327. package/dist/components/Menu/menu-item.d.ts.map +1 -0
  328. package/dist/components/Menu/menu-item.js +209 -0
  329. package/dist/components/Menu/menu-item.js.map +1 -0
  330. package/dist/components/NameCard/index.d.ts +2 -0
  331. package/dist/components/NameCard/index.d.ts.map +1 -0
  332. package/dist/components/NameCard/index.js +8 -0
  333. package/dist/components/NameCard/index.js.map +1 -0
  334. package/dist/components/NameCard/name-card.d.ts +85 -0
  335. package/dist/components/NameCard/name-card.d.ts.map +1 -0
  336. package/dist/components/NameCard/name-card.js +153 -0
  337. package/dist/components/NameCard/name-card.js.map +1 -0
  338. package/dist/components/Notice/index.d.ts +2 -0
  339. package/dist/components/Notice/index.d.ts.map +1 -0
  340. package/dist/components/Notice/index.js +8 -0
  341. package/dist/components/Notice/index.js.map +1 -0
  342. package/dist/components/Notice/notice.d.ts +69 -0
  343. package/dist/components/Notice/notice.d.ts.map +1 -0
  344. package/dist/components/Notice/notice.js +121 -0
  345. package/dist/components/Notice/notice.js.map +1 -0
  346. package/dist/components/NumberInput/index.d.ts +2 -0
  347. package/dist/components/NumberInput/index.d.ts.map +1 -0
  348. package/dist/components/NumberInput/index.js +7 -0
  349. package/dist/components/NumberInput/index.js.map +1 -0
  350. package/dist/components/NumberInput/number-input.d.ts +57 -0
  351. package/dist/components/NumberInput/number-input.d.ts.map +1 -0
  352. package/dist/components/NumberInput/number-input.js +131 -0
  353. package/dist/components/NumberInput/number-input.js.map +1 -0
  354. package/dist/components/OverflowIndicator/index.d.ts +2 -0
  355. package/dist/components/OverflowIndicator/index.d.ts.map +1 -0
  356. package/dist/components/OverflowIndicator/index.js +6 -0
  357. package/dist/components/OverflowIndicator/index.js.map +1 -0
  358. package/dist/components/OverflowIndicator/overflow-indicator.d.ts +23 -0
  359. package/dist/components/OverflowIndicator/overflow-indicator.d.ts.map +1 -0
  360. package/dist/components/OverflowIndicator/overflow-indicator.js +111 -0
  361. package/dist/components/OverflowIndicator/overflow-indicator.js.map +1 -0
  362. package/dist/components/PeoplePicker/avatar-stack-overflow.d.ts +57 -0
  363. package/dist/components/PeoplePicker/avatar-stack-overflow.d.ts.map +1 -0
  364. package/dist/components/PeoplePicker/avatar-stack-overflow.js +35 -0
  365. package/dist/components/PeoplePicker/avatar-stack-overflow.js.map +1 -0
  366. package/dist/components/PeoplePicker/index.d.ts +2 -0
  367. package/dist/components/PeoplePicker/index.d.ts.map +1 -0
  368. package/dist/components/PeoplePicker/index.js +9 -0
  369. package/dist/components/PeoplePicker/index.js.map +1 -0
  370. package/dist/components/PeoplePicker/people-picker-helpers.d.ts +7 -0
  371. package/dist/components/PeoplePicker/people-picker-helpers.d.ts.map +1 -0
  372. package/dist/components/PeoplePicker/people-picker-helpers.js +25 -0
  373. package/dist/components/PeoplePicker/people-picker-helpers.js.map +1 -0
  374. package/dist/components/PeoplePicker/people-picker.d.ts +77 -0
  375. package/dist/components/PeoplePicker/people-picker.d.ts.map +1 -0
  376. package/dist/components/PeoplePicker/people-picker.js +263 -0
  377. package/dist/components/PeoplePicker/people-picker.js.map +1 -0
  378. package/dist/components/PeoplePicker/person-display.d.ts +66 -0
  379. package/dist/components/PeoplePicker/person-display.d.ts.map +1 -0
  380. package/dist/components/PeoplePicker/person-display.js +203 -0
  381. package/dist/components/PeoplePicker/person-display.js.map +1 -0
  382. package/dist/components/Popover/index.d.ts +2 -0
  383. package/dist/components/Popover/index.d.ts.map +1 -0
  384. package/dist/components/Popover/index.js +14 -0
  385. package/dist/components/Popover/index.js.map +1 -0
  386. package/dist/components/Popover/popover.d.ts +50 -0
  387. package/dist/components/Popover/popover.d.ts.map +1 -0
  388. package/dist/components/Popover/popover.js +113 -0
  389. package/dist/components/Popover/popover.js.map +1 -0
  390. package/dist/components/ProgressBar/index.d.ts +2 -0
  391. package/dist/components/ProgressBar/index.d.ts.map +1 -0
  392. package/dist/components/ProgressBar/index.js +6 -0
  393. package/dist/components/ProgressBar/index.js.map +1 -0
  394. package/dist/components/ProgressBar/progress-bar.d.ts +37 -0
  395. package/dist/components/ProgressBar/progress-bar.d.ts.map +1 -0
  396. package/dist/components/ProgressBar/progress-bar.js +86 -0
  397. package/dist/components/ProgressBar/progress-bar.js.map +1 -0
  398. package/dist/components/RadioGroup/index.d.ts +2 -0
  399. package/dist/components/RadioGroup/index.d.ts.map +1 -0
  400. package/dist/components/RadioGroup/index.js +8 -0
  401. package/dist/components/RadioGroup/index.js.map +1 -0
  402. package/dist/components/RadioGroup/radio-group.d.ts +78 -0
  403. package/dist/components/RadioGroup/radio-group.d.ts.map +1 -0
  404. package/dist/components/RadioGroup/radio-group.js +153 -0
  405. package/dist/components/RadioGroup/radio-group.js.map +1 -0
  406. package/dist/components/Rating/index.d.ts +2 -0
  407. package/dist/components/Rating/index.d.ts.map +1 -0
  408. package/dist/components/Rating/index.js +6 -0
  409. package/dist/components/Rating/index.js.map +1 -0
  410. package/dist/components/Rating/rating.d.ts +46 -0
  411. package/dist/components/Rating/rating.d.ts.map +1 -0
  412. package/dist/components/Rating/rating.js +179 -0
  413. package/dist/components/Rating/rating.js.map +1 -0
  414. package/dist/components/ScrollArea/index.d.ts +2 -0
  415. package/dist/components/ScrollArea/index.d.ts.map +1 -0
  416. package/dist/components/ScrollArea/index.js +7 -0
  417. package/dist/components/ScrollArea/index.js.map +1 -0
  418. package/dist/components/ScrollArea/scroll-area.d.ts +45 -0
  419. package/dist/components/ScrollArea/scroll-area.d.ts.map +1 -0
  420. package/dist/components/ScrollArea/scroll-area.js +65 -0
  421. package/dist/components/ScrollArea/scroll-area.js.map +1 -0
  422. package/dist/components/SegmentedControl/index.d.ts +2 -0
  423. package/dist/components/SegmentedControl/index.d.ts.map +1 -0
  424. package/dist/components/SegmentedControl/index.js +9 -0
  425. package/dist/components/SegmentedControl/index.js.map +1 -0
  426. package/dist/components/SegmentedControl/segmented-control.d.ts +102 -0
  427. package/dist/components/SegmentedControl/segmented-control.d.ts.map +1 -0
  428. package/dist/components/SegmentedControl/segmented-control.js +171 -0
  429. package/dist/components/SegmentedControl/segmented-control.js.map +1 -0
  430. package/dist/components/Select/index.d.ts +2 -0
  431. package/dist/components/Select/index.d.ts.map +1 -0
  432. package/dist/components/Select/index.js +6 -0
  433. package/dist/components/Select/index.js.map +1 -0
  434. package/dist/components/Select/select.d.ts +102 -0
  435. package/dist/components/Select/select.d.ts.map +1 -0
  436. package/dist/components/Select/select.js +435 -0
  437. package/dist/components/Select/select.js.map +1 -0
  438. package/dist/components/SelectMenu/index.d.ts +2 -0
  439. package/dist/components/SelectMenu/index.d.ts.map +1 -0
  440. package/dist/components/SelectMenu/index.js +6 -0
  441. package/dist/components/SelectMenu/index.js.map +1 -0
  442. package/dist/components/SelectMenu/select-menu.d.ts +103 -0
  443. package/dist/components/SelectMenu/select-menu.d.ts.map +1 -0
  444. package/dist/components/SelectMenu/select-menu.js +239 -0
  445. package/dist/components/SelectMenu/select-menu.js.map +1 -0
  446. package/dist/components/SelectionControl/index.d.ts +2 -0
  447. package/dist/components/SelectionControl/index.d.ts.map +1 -0
  448. package/dist/components/SelectionControl/index.js +7 -0
  449. package/dist/components/SelectionControl/index.js.map +1 -0
  450. package/dist/components/SelectionControl/selection-item.d.ts +69 -0
  451. package/dist/components/SelectionControl/selection-item.d.ts.map +1 -0
  452. package/dist/components/SelectionControl/selection-item.js +142 -0
  453. package/dist/components/SelectionControl/selection-item.js.map +1 -0
  454. package/dist/components/Separator/index.d.ts +2 -0
  455. package/dist/components/Separator/index.d.ts.map +1 -0
  456. package/dist/components/Separator/index.js +6 -0
  457. package/dist/components/Separator/index.js.map +1 -0
  458. package/dist/components/Separator/separator.d.ts +17 -0
  459. package/dist/components/Separator/separator.d.ts.map +1 -0
  460. package/dist/components/Separator/separator.js +39 -0
  461. package/dist/components/Separator/separator.js.map +1 -0
  462. package/dist/components/Sheet/index.d.ts +2 -0
  463. package/dist/components/Sheet/index.d.ts.map +1 -0
  464. package/dist/components/Sheet/index.js +17 -0
  465. package/dist/components/Sheet/index.js.map +1 -0
  466. package/dist/components/Sheet/sheet.d.ts +56 -0
  467. package/dist/components/Sheet/sheet.d.ts.map +1 -0
  468. package/dist/components/Sheet/sheet.js +145 -0
  469. package/dist/components/Sheet/sheet.js.map +1 -0
  470. package/dist/components/Sidebar/index.d.ts +2 -0
  471. package/dist/components/Sidebar/index.d.ts.map +1 -0
  472. package/dist/components/Sidebar/index.js +24 -0
  473. package/dist/components/Sidebar/index.js.map +1 -0
  474. package/dist/components/Sidebar/sidebar.d.ts +195 -0
  475. package/dist/components/Sidebar/sidebar.d.ts.map +1 -0
  476. package/dist/components/Sidebar/sidebar.js +826 -0
  477. package/dist/components/Sidebar/sidebar.js.map +1 -0
  478. package/dist/components/Skeleton/index.d.ts +2 -0
  479. package/dist/components/Skeleton/index.d.ts.map +1 -0
  480. package/dist/components/Skeleton/index.js +6 -0
  481. package/dist/components/Skeleton/index.js.map +1 -0
  482. package/dist/components/Skeleton/skeleton.d.ts +16 -0
  483. package/dist/components/Skeleton/skeleton.d.ts.map +1 -0
  484. package/dist/components/Skeleton/skeleton.js +30 -0
  485. package/dist/components/Skeleton/skeleton.js.map +1 -0
  486. package/dist/components/Slider/index.d.ts +2 -0
  487. package/dist/components/Slider/index.d.ts.map +1 -0
  488. package/dist/components/Slider/index.js +7 -0
  489. package/dist/components/Slider/index.js.map +1 -0
  490. package/dist/components/Slider/slider.d.ts +48 -0
  491. package/dist/components/Slider/slider.d.ts.map +1 -0
  492. package/dist/components/Slider/slider.js +108 -0
  493. package/dist/components/Slider/slider.js.map +1 -0
  494. package/dist/components/Steps/index.d.ts +2 -0
  495. package/dist/components/Steps/index.d.ts.map +1 -0
  496. package/dist/components/Steps/index.js +12 -0
  497. package/dist/components/Steps/index.js.map +1 -0
  498. package/dist/components/Steps/steps.d.ts +71 -0
  499. package/dist/components/Steps/steps.d.ts.map +1 -0
  500. package/dist/components/Steps/steps.js +583 -0
  501. package/dist/components/Steps/steps.js.map +1 -0
  502. package/dist/components/Switch/index.d.ts +2 -0
  503. package/dist/components/Switch/index.d.ts.map +1 -0
  504. package/dist/components/Switch/index.js +7 -0
  505. package/dist/components/Switch/index.js.map +1 -0
  506. package/dist/components/Switch/switch.d.ts +112 -0
  507. package/dist/components/Switch/switch.d.ts.map +1 -0
  508. package/dist/components/Switch/switch.js +179 -0
  509. package/dist/components/Switch/switch.js.map +1 -0
  510. package/dist/components/Tabs/index.d.ts +2 -0
  511. package/dist/components/Tabs/index.d.ts.map +1 -0
  512. package/dist/components/Tabs/index.js +10 -0
  513. package/dist/components/Tabs/index.js.map +1 -0
  514. package/dist/components/Tabs/tabs.d.ts +104 -0
  515. package/dist/components/Tabs/tabs.d.ts.map +1 -0
  516. package/dist/components/Tabs/tabs.js +316 -0
  517. package/dist/components/Tabs/tabs.js.map +1 -0
  518. package/dist/components/Tag/index.d.ts +2 -0
  519. package/dist/components/Tag/index.d.ts.map +1 -0
  520. package/dist/components/Tag/index.js +7 -0
  521. package/dist/components/Tag/index.js.map +1 -0
  522. package/dist/components/Tag/tag.d.ts +86 -0
  523. package/dist/components/Tag/tag.d.ts.map +1 -0
  524. package/dist/components/Tag/tag.js +172 -0
  525. package/dist/components/Tag/tag.js.map +1 -0
  526. package/dist/components/Textarea/index.d.ts +2 -0
  527. package/dist/components/Textarea/index.d.ts.map +1 -0
  528. package/dist/components/Textarea/index.js +7 -0
  529. package/dist/components/Textarea/index.js.map +1 -0
  530. package/dist/components/Textarea/textarea.d.ts +74 -0
  531. package/dist/components/Textarea/textarea.d.ts.map +1 -0
  532. package/dist/components/Textarea/textarea.js +224 -0
  533. package/dist/components/Textarea/textarea.js.map +1 -0
  534. package/dist/components/TimePicker/index.d.ts +2 -0
  535. package/dist/components/TimePicker/index.d.ts.map +1 -0
  536. package/dist/components/TimePicker/index.js +6 -0
  537. package/dist/components/TimePicker/index.js.map +1 -0
  538. package/dist/components/TimePicker/time-columns.d.ts +46 -0
  539. package/dist/components/TimePicker/time-columns.d.ts.map +1 -0
  540. package/dist/components/TimePicker/time-columns.js +173 -0
  541. package/dist/components/TimePicker/time-columns.js.map +1 -0
  542. package/dist/components/TimePicker/time-picker.d.ts +94 -0
  543. package/dist/components/TimePicker/time-picker.d.ts.map +1 -0
  544. package/dist/components/TimePicker/time-picker.js +253 -0
  545. package/dist/components/TimePicker/time-picker.js.map +1 -0
  546. package/dist/components/Toast/index.d.ts +2 -0
  547. package/dist/components/Toast/index.d.ts.map +1 -0
  548. package/dist/components/Toast/index.js +7 -0
  549. package/dist/components/Toast/index.js.map +1 -0
  550. package/dist/components/Toast/toast.d.ts +61 -0
  551. package/dist/components/Toast/toast.d.ts.map +1 -0
  552. package/dist/components/Toast/toast.js +76 -0
  553. package/dist/components/Toast/toast.js.map +1 -0
  554. package/dist/components/Tooltip/index.d.ts +2 -0
  555. package/dist/components/Tooltip/index.d.ts.map +1 -0
  556. package/dist/components/Tooltip/index.js +9 -0
  557. package/dist/components/Tooltip/index.js.map +1 -0
  558. package/dist/components/Tooltip/tooltip.d.ts +20 -0
  559. package/dist/components/Tooltip/tooltip.d.ts.map +1 -0
  560. package/dist/components/Tooltip/tooltip.js +53 -0
  561. package/dist/components/Tooltip/tooltip.js.map +1 -0
  562. package/dist/components/TreeView/index.d.ts +2 -0
  563. package/dist/components/TreeView/index.d.ts.map +1 -0
  564. package/dist/components/TreeView/index.js +8 -0
  565. package/dist/components/TreeView/index.js.map +1 -0
  566. package/dist/components/TreeView/tree-view.d.ts +166 -0
  567. package/dist/components/TreeView/tree-view.d.ts.map +1 -0
  568. package/dist/components/TreeView/tree-view.js +638 -0
  569. package/dist/components/TreeView/tree-view.js.map +1 -0
  570. package/dist/hooks/use-controllable.d.ts +16 -0
  571. package/dist/hooks/use-controllable.d.ts.map +1 -0
  572. package/dist/hooks/use-controllable.js +26 -0
  573. package/dist/hooks/use-controllable.js.map +1 -0
  574. package/dist/hooks/use-is-narrow-viewport.d.ts +2 -0
  575. package/dist/hooks/use-is-narrow-viewport.d.ts.map +1 -0
  576. package/dist/hooks/use-is-narrow-viewport.js +19 -0
  577. package/dist/hooks/use-is-narrow-viewport.js.map +1 -0
  578. package/dist/hooks/use-is-touch-device.d.ts +8 -0
  579. package/dist/hooks/use-is-touch-device.d.ts.map +1 -0
  580. package/dist/hooks/use-is-touch-device.js +16 -0
  581. package/dist/hooks/use-is-touch-device.js.map +1 -0
  582. package/dist/hooks/use-overflow-items.d.ts +124 -0
  583. package/dist/hooks/use-overflow-items.d.ts.map +1 -0
  584. package/dist/hooks/use-overflow-items.js +97 -0
  585. package/dist/hooks/use-overflow-items.js.map +1 -0
  586. package/dist/index.d.ts +74 -0
  587. package/dist/index.d.ts.map +1 -0
  588. package/dist/index.js +393 -0
  589. package/dist/index.js.map +1 -0
  590. package/dist/lib/drag-visual.d.ts +158 -0
  591. package/dist/lib/drag-visual.d.ts.map +1 -0
  592. package/dist/lib/drag-visual.js +96 -0
  593. package/dist/lib/drag-visual.js.map +1 -0
  594. package/dist/lib/i18n/i18n-context.d.ts +105 -0
  595. package/dist/lib/i18n/i18n-context.d.ts.map +1 -0
  596. package/dist/lib/multi-select-ordering.d.ts +54 -0
  597. package/dist/lib/multi-select-ordering.d.ts.map +1 -0
  598. package/dist/lib/multi-select-ordering.js +13 -0
  599. package/dist/lib/multi-select-ordering.js.map +1 -0
  600. package/dist/lib/utils.d.ts +12 -0
  601. package/dist/lib/utils.d.ts.map +1 -0
  602. package/dist/lib/utils.js +79 -0
  603. package/dist/lib/utils.js.map +1 -0
  604. package/dist/patterns/element-anatomy/index.d.ts +2 -0
  605. package/dist/patterns/element-anatomy/index.d.ts.map +1 -0
  606. package/dist/patterns/element-anatomy/index.js +20 -0
  607. package/dist/patterns/element-anatomy/index.js.map +1 -0
  608. package/dist/patterns/element-anatomy/item-anatomy.d.ts +370 -0
  609. package/dist/patterns/element-anatomy/item-anatomy.d.ts.map +1 -0
  610. package/dist/patterns/element-anatomy/item-anatomy.js +272 -0
  611. package/dist/patterns/element-anatomy/item-anatomy.js.map +1 -0
  612. package/dist/patterns/header-canonical/chrome-header.d.ts +80 -0
  613. package/dist/patterns/header-canonical/chrome-header.d.ts.map +1 -0
  614. package/dist/patterns/header-canonical/chrome-header.js +75 -0
  615. package/dist/patterns/header-canonical/chrome-header.js.map +1 -0
  616. package/dist/patterns/header-canonical/index.d.ts +2 -0
  617. package/dist/patterns/header-canonical/index.d.ts.map +1 -0
  618. package/dist/patterns/header-canonical/index.js +5 -0
  619. package/dist/patterns/header-canonical/index.js.map +1 -0
  620. package/dist/patterns/horizontal-overflow/horizontal-overflow.d.ts +101 -0
  621. package/dist/patterns/horizontal-overflow/horizontal-overflow.d.ts.map +1 -0
  622. package/dist/patterns/horizontal-overflow/horizontal-overflow.js +105 -0
  623. package/dist/patterns/horizontal-overflow/horizontal-overflow.js.map +1 -0
  624. package/dist/patterns/horizontal-overflow/index.d.ts +2 -0
  625. package/dist/patterns/horizontal-overflow/index.d.ts.map +1 -0
  626. package/dist/patterns/horizontal-overflow/index.js +14 -0
  627. package/dist/patterns/horizontal-overflow/index.js.map +1 -0
  628. package/dist/patterns/overlay-surface/index.d.ts +2 -0
  629. package/dist/patterns/overlay-surface/index.d.ts.map +1 -0
  630. package/dist/patterns/overlay-surface/index.js +7 -0
  631. package/dist/patterns/overlay-surface/index.js.map +1 -0
  632. package/dist/patterns/overlay-surface/overlay-surface.d.ts +28 -0
  633. package/dist/patterns/overlay-surface/overlay-surface.d.ts.map +1 -0
  634. package/dist/patterns/overlay-surface/overlay-surface.js +85 -0
  635. package/dist/patterns/overlay-surface/overlay-surface.js.map +1 -0
  636. package/dist/patterns/resize-handle/index.d.ts +2 -0
  637. package/dist/patterns/resize-handle/index.d.ts.map +1 -0
  638. package/dist/patterns/resize-handle/index.js +5 -0
  639. package/dist/patterns/resize-handle/index.js.map +1 -0
  640. package/dist/patterns/resize-handle/resize-handle.d.ts +102 -0
  641. package/dist/patterns/resize-handle/resize-handle.d.ts.map +1 -0
  642. package/dist/patterns/resize-handle/resize-handle.js +74 -0
  643. package/dist/patterns/resize-handle/resize-handle.js.map +1 -0
  644. package/dist/react-day-picker.css +457 -0
  645. package/dist/stories-helpers/anatomy/anatomy-utils.d.ts +40 -0
  646. package/dist/stories-helpers/anatomy/anatomy-utils.d.ts.map +1 -0
  647. package/dist/tokens/elevation/overlay-geometry.d.ts +12 -0
  648. package/dist/tokens/elevation/overlay-geometry.d.ts.map +1 -0
  649. package/dist/tokens/elevation/overlay-geometry.js +7 -0
  650. package/dist/tokens/elevation/overlay-geometry.js.map +1 -0
  651. package/dist/tokens/motion/motion.d.ts +15 -0
  652. package/dist/tokens/motion/motion.d.ts.map +1 -0
  653. package/dist/tokens/motion/motion.js +9 -0
  654. package/dist/tokens/motion/motion.js.map +1 -0
  655. package/dist/tokens/uiSize/icon-size.d.ts +53 -0
  656. package/dist/tokens/uiSize/icon-size.d.ts.map +1 -0
  657. package/ds-canonical/commands/README.md +26 -0
  658. package/ds-canonical/commands/gov-status.md +79 -0
  659. package/ds-canonical/hooks/README.md +145 -0
  660. package/ds-canonical/hooks/_log-fire.sh +44 -0
  661. package/ds-canonical/hooks/block_prototype_imports.py +111 -0
  662. package/ds-canonical/hooks/check_app_shell_primary_header_consistency.sh +68 -0
  663. package/ds-canonical/hooks/check_audit_post_report_validator.sh +88 -0
  664. package/ds-canonical/hooks/check_audit_sample_escape.sh +73 -0
  665. package/ds-canonical/hooks/check_benchmark_citation.sh +106 -0
  666. package/ds-canonical/hooks/check_canonical_propagation.sh +189 -0
  667. package/ds-canonical/hooks/check_chrome_header_handcraft.sh +70 -0
  668. package/ds-canonical/hooks/check_codex_brief_invariants.sh +83 -0
  669. package/ds-canonical/hooks/check_codex_collab_5step.sh +108 -0
  670. package/ds-canonical/hooks/check_datatable_invariants.sh +117 -0
  671. package/ds-canonical/hooks/check_dim_count_drift.sh +72 -0
  672. package/ds-canonical/hooks/check_field_controls_contracts.sh +110 -0
  673. package/ds-canonical/hooks/check_field_family_invariants.sh +205 -0
  674. package/ds-canonical/hooks/check_file_size_budget.sh +60 -0
  675. package/ds-canonical/hooks/check_header_with_tabs_border.sh +87 -0
  676. package/ds-canonical/hooks/check_main_branch_workbench.sh +93 -0
  677. package/ds-canonical/hooks/check_naming_and_abstraction.sh +165 -0
  678. package/ds-canonical/hooks/check_opacity_token_usage.sh +149 -0
  679. package/ds-canonical/hooks/check_pattern_invariants.sh +194 -0
  680. package/ds-canonical/hooks/check_peoplepicker_ssot_drift.sh +56 -0
  681. package/ds-canonical/hooks/check_pixel_quantified_audit.sh +53 -0
  682. package/ds-canonical/hooks/check_propose_plain_chinese.sh +74 -0
  683. package/ds-canonical/hooks/check_propose_pre_grep_verify.sh +70 -0
  684. package/ds-canonical/hooks/check_select_all_canonical.sh +58 -0
  685. package/ds-canonical/hooks/check_solo_workflow.sh +258 -0
  686. package/ds-canonical/hooks/check_spec_class_drift.sh +88 -0
  687. package/ds-canonical/hooks/check_story_invariants.sh +612 -0
  688. package/ds-canonical/hooks/check_substantive_edit_approval_preflight.sh +105 -0
  689. package/ds-canonical/hooks/check_tab_lg_chrome_header_equal.sh +66 -0
  690. package/ds-canonical/hooks/check_wrapper_primitive_schema_drift.sh +104 -0
  691. package/ds-canonical/hooks/enforce_home_charter.sh +44 -0
  692. package/ds-canonical/hooks/inject_pending_self_audit.sh +204 -0
  693. package/ds-canonical/hooks/lib/_approval_re.sh +33 -0
  694. package/ds-canonical/hooks/lib/_code_quality.sh +73 -0
  695. package/ds-canonical/hooks/lib/_cva_default_sync.sh +69 -0
  696. package/ds-canonical/hooks/lib/_governance_coverage_check.sh +49 -0
  697. package/ds-canonical/hooks/lib/_hardcoded_strings.sh +163 -0
  698. package/ds-canonical/hooks/lib/_layout_space_canonical.sh +56 -0
  699. package/ds-canonical/hooks/lib/_overlay_handcraft.sh +141 -0
  700. package/ds-canonical/hooks/lib/_person_data_richness.sh +42 -0
  701. package/ds-canonical/hooks/lib/_story_compile_drift.sh +48 -0
  702. package/ds-canonical/hooks/lib/_token_hygiene.sh +95 -0
  703. package/ds-canonical/hooks/log_governance_fires.sh +50 -0
  704. package/ds-canonical/hooks/log_skill_invokes.sh +41 -0
  705. package/ds-canonical/hooks/post_edit_dispatcher.sh +62 -0
  706. package/ds-canonical/hooks/retired/check_anatomy_section_numbering.sh +106 -0
  707. package/ds-canonical/hooks/retired/check_avatar_hovercard.sh +90 -0
  708. package/ds-canonical/hooks/retired/check_button_icon_literal.sh.retired-2026-04-28 +38 -0
  709. package/ds-canonical/hooks/retired/check_container_breathing.sh +142 -0
  710. package/ds-canonical/hooks/retired/check_governance_compliance.sh +61 -0
  711. package/ds-canonical/hooks/retired/check_icon_only_padding_formula.sh +104 -0
  712. package/ds-canonical/hooks/retired/check_item_content_primitive.sh +150 -0
  713. package/ds-canonical/hooks/retired/check_item_list_gap.sh +153 -0
  714. package/ds-canonical/hooks/retired/check_sideoffset_canonical.sh +65 -0
  715. package/ds-canonical/hooks/retired/check_spec_iteration_tag.sh +87 -0
  716. package/ds-canonical/hooks/retired/check_ssot_consultation.sh +88 -0
  717. package/ds-canonical/hooks/retired/check_sync_update.sh +20 -0
  718. package/ds-canonical/hooks/retired/check_third_party_dom_verified.sh +95 -0
  719. package/ds-canonical/hooks/retired/enforce_home_charter.sh +125 -0
  720. package/ds-canonical/hooks/retired/post_edit_canonical_interrogate.sh +109 -0
  721. package/ds-canonical/hooks/retired/pre_edit_spec_check.sh +68 -0
  722. package/ds-canonical/hooks/retired/pre_new_component_spec.sh +39 -0
  723. package/ds-canonical/hooks/retired/pre_write_subsumption_check.sh +112 -0
  724. package/ds-canonical/hooks/retired/stop_meta_self_audit.sh.retired-2026-05-13 +76 -0
  725. package/ds-canonical/hooks/retired/tests/test_check_anatomy_section_numbering.sh +14 -0
  726. package/ds-canonical/hooks/retired/tests/test_check_avatar_hovercard.sh +15 -0
  727. package/ds-canonical/hooks/retired/tests/test_check_container_breathing.sh +15 -0
  728. package/ds-canonical/hooks/retired/tests/test_check_governance_compliance.sh +15 -0
  729. package/ds-canonical/hooks/retired/tests/test_check_icon_only_padding_formula.sh +79 -0
  730. package/ds-canonical/hooks/retired/tests/test_check_item_content_primitive.sh +15 -0
  731. package/ds-canonical/hooks/retired/tests/test_check_item_list_gap.sh +163 -0
  732. package/ds-canonical/hooks/retired/tests/test_check_sideoffset_canonical.sh +15 -0
  733. package/ds-canonical/hooks/retired/tests/test_check_spec_iteration_tag.sh +15 -0
  734. package/ds-canonical/hooks/retired/tests/test_check_ssot_consultation.sh +15 -0
  735. package/ds-canonical/hooks/retired/tests/test_check_sync_update.sh +14 -0
  736. package/ds-canonical/hooks/retired/tests/test_check_third_party_dom_verified.sh +15 -0
  737. package/ds-canonical/hooks/retired/tests/test_enforce_home_charter.sh +15 -0
  738. package/ds-canonical/hooks/retired/tests/test_pre_edit_spec_check.sh +15 -0
  739. package/ds-canonical/hooks/retired/tests/test_pre_new_component_spec.sh +15 -0
  740. package/ds-canonical/hooks/retired/tests/test_pre_write_subsumption_check.sh +63 -0
  741. package/ds-canonical/hooks/session_start_governance_check.sh +263 -0
  742. package/ds-canonical/hooks/stop_passive_logging.sh +322 -0
  743. package/ds-canonical/hooks/stop_self_audit.sh +450 -0
  744. package/ds-canonical/hooks/tests/KNOWN-BROKEN.md +15 -0
  745. package/ds-canonical/hooks/tests/run-all.sh +76 -0
  746. package/ds-canonical/hooks/tests/test_block_prototype_imports.sh +143 -0
  747. package/ds-canonical/hooks/tests/test_check_app_shell_primary_header_consistency.sh +140 -0
  748. package/ds-canonical/hooks/tests/test_check_audit_post_report_validator.sh +115 -0
  749. package/ds-canonical/hooks/tests/test_check_audit_sample_escape.sh +93 -0
  750. package/ds-canonical/hooks/tests/test_check_benchmark_citation.sh +115 -0
  751. package/ds-canonical/hooks/tests/test_check_canonical_propagation.sh +133 -0
  752. package/ds-canonical/hooks/tests/test_check_chrome_header_handcraft.sh +123 -0
  753. package/ds-canonical/hooks/tests/test_check_code_quality.sh +15 -0
  754. package/ds-canonical/hooks/tests/test_check_codex_collab_5step.sh +96 -0
  755. package/ds-canonical/hooks/tests/test_check_cva_default_sync.sh +15 -0
  756. package/ds-canonical/hooks/tests/test_check_datatable_invariants.sh +122 -0
  757. package/ds-canonical/hooks/tests/test_check_dim_count_drift.sh +98 -0
  758. package/ds-canonical/hooks/tests/test_check_field_controls_contracts.sh +126 -0
  759. package/ds-canonical/hooks/tests/test_check_field_family_invariants.sh +194 -0
  760. package/ds-canonical/hooks/tests/test_check_file_size_budget.sh +32 -0
  761. package/ds-canonical/hooks/tests/test_check_hardcoded_strings.sh +14 -0
  762. package/ds-canonical/hooks/tests/test_check_header_with_tabs_border.sh +110 -0
  763. package/ds-canonical/hooks/tests/test_check_layout_space_canonical.sh +73 -0
  764. package/ds-canonical/hooks/tests/test_check_main_branch_workbench.sh +147 -0
  765. package/ds-canonical/hooks/tests/test_check_naming_and_abstraction.sh +136 -0
  766. package/ds-canonical/hooks/tests/test_check_opacity_token_usage.sh +110 -0
  767. package/ds-canonical/hooks/tests/test_check_overlay_handcraft.sh +126 -0
  768. package/ds-canonical/hooks/tests/test_check_pattern_invariants.sh +148 -0
  769. package/ds-canonical/hooks/tests/test_check_peoplepicker_ssot_drift.sh +108 -0
  770. package/ds-canonical/hooks/tests/test_check_person_data_richness.sh +58 -0
  771. package/ds-canonical/hooks/tests/test_check_pixel_quantified_audit.sh +142 -0
  772. package/ds-canonical/hooks/tests/test_check_propose_plain_chinese.sh +126 -0
  773. package/ds-canonical/hooks/tests/test_check_propose_pre_grep_verify.sh +117 -0
  774. package/ds-canonical/hooks/tests/test_check_select_all_canonical.sh +125 -0
  775. package/ds-canonical/hooks/tests/test_check_solo_workflow.sh +201 -0
  776. package/ds-canonical/hooks/tests/test_check_spec_class_drift.sh +135 -0
  777. package/ds-canonical/hooks/tests/test_check_story_anatomy.sh.broken +197 -0
  778. package/ds-canonical/hooks/tests/test_check_story_category.sh.broken +187 -0
  779. package/ds-canonical/hooks/tests/test_check_story_compile_drift.sh +15 -0
  780. package/ds-canonical/hooks/tests/test_check_story_invariants.sh +209 -0
  781. package/ds-canonical/hooks/tests/test_check_story_name_jargon.sh.broken +53 -0
  782. package/ds-canonical/hooks/tests/test_check_story_slot_split.sh +156 -0
  783. package/ds-canonical/hooks/tests/test_check_substantive_edit_approval_preflight.sh +176 -0
  784. package/ds-canonical/hooks/tests/test_check_tab_lg_chrome_header_equal.sh +138 -0
  785. package/ds-canonical/hooks/tests/test_check_token_hygiene.sh +21 -0
  786. package/ds-canonical/hooks/tests/test_check_wrapper_primitive_schema_drift.sh +169 -0
  787. package/ds-canonical/hooks/tests/test_enforce_home_charter.sh +77 -0
  788. package/ds-canonical/hooks/tests/test_inject_pending_self_audit.sh +125 -0
  789. package/ds-canonical/hooks/tests/test_log_governance_fires.sh +10 -0
  790. package/ds-canonical/hooks/tests/test_log_skill_invokes.sh +7 -0
  791. package/ds-canonical/hooks/tests/test_post_edit_dispatcher.sh +108 -0
  792. package/ds-canonical/hooks/tests/test_session_start_governance_check.sh +143 -0
  793. package/ds-canonical/hooks/tests/test_stop_capture_metrics.sh +95 -0
  794. package/ds-canonical/hooks/tests/test_stop_governance_drift_check.sh.broken +125 -0
  795. package/ds-canonical/hooks/tests/test_stop_harvest_corrections.sh +10 -0
  796. package/ds-canonical/hooks/tests/test_stop_passive_logging.sh +100 -0
  797. package/ds-canonical/hooks/tests/test_stop_self_audit.sh +76 -0
  798. package/ds-canonical/hooks/tests/test_stop_tsc_sanity.sh +10 -0
  799. package/ds-canonical/references/README.md +43 -0
  800. package/ds-canonical/references/audit-coverage-vs-24-checklist.md +74 -0
  801. package/ds-canonical/references/build-ui-canonicals.md +69 -0
  802. package/ds-canonical/references/cva-patterns.md +41 -0
  803. package/ds-canonical/references/drag-canonical.md +331 -0
  804. package/ds-canonical/references/item-anatomy-recipe.md +225 -0
  805. package/ds-canonical/references/naming-conventions.md +56 -0
  806. package/ds-canonical/references/principle-dim-map.json +515 -0
  807. package/ds-canonical/references/props-naming.md +45 -0
  808. package/ds-canonical/references/spec-rules.md +58 -0
  809. package/ds-canonical/references/ssot-consultation.md +63 -0
  810. package/ds-canonical/references/ssot-index.md +40 -0
  811. package/ds-canonical/references/story-baseline-registry.json +79 -0
  812. package/ds-canonical/references/structural-token-retention.md +42 -0
  813. package/ds-canonical/references/tailwind-gotchas.md +87 -0
  814. package/ds-canonical/references/ui-dev-rules.md +60 -0
  815. package/ds-canonical/rules/README.md +34 -0
  816. package/ds-canonical/rules/meta-patterns.md +87 -0
  817. package/ds-canonical/rules/self-verify.md +53 -0
  818. package/ds-canonical/rules/spec-rules.md +25 -0
  819. package/ds-canonical/rules/story-rules.md +56 -0
  820. package/ds-canonical/rules/ui-development.md +87 -0
  821. package/ds-canonical/skills/README.md +88 -0
  822. package/ds-canonical/skills/bug-fix-rhythm/SKILL.md +181 -0
  823. package/ds-canonical/skills/code-quality-audit/SKILL.md +63 -0
  824. package/ds-canonical/skills/codex-collab/SKILL.md +249 -0
  825. package/ds-canonical/skills/codex-collab/references/brief-template.md +48 -0
  826. package/ds-canonical/skills/codex-collab/references/transport.md +58 -0
  827. package/ds-canonical/skills/codify-corrections/SKILL.md +184 -0
  828. package/ds-canonical/skills/codify-principle/SKILL.md +151 -0
  829. package/ds-canonical/skills/component-quality-gate/SKILL.md +102 -0
  830. package/ds-canonical/skills/component-quality-gate/references/checklist.md +79 -0
  831. package/ds-canonical/skills/deep-audit-cross-codex/SKILL.md +247 -0
  832. package/ds-canonical/skills/deep-audit-cross-codex/references/phase-a-workflow.md +123 -0
  833. package/ds-canonical/skills/deep-audit-cross-codex/references/phase-b-codex-brief.md +165 -0
  834. package/ds-canonical/skills/deep-audit-cross-codex/references/triage-rubric.md +91 -0
  835. package/ds-canonical/skills/delivery-handoff/SKILL.md +229 -0
  836. package/ds-canonical/skills/delivery-handoff/references/flow-diagram.md +180 -0
  837. package/ds-canonical/skills/delivery-handoff/references/handoff-template.md +177 -0
  838. package/ds-canonical/skills/delivery-handoff/references/inventory-checklist.md +196 -0
  839. package/ds-canonical/skills/design-system-audit/SKILL.md +343 -0
  840. package/ds-canonical/skills/design-system-audit/references/audit-prompts.md +1260 -0
  841. package/ds-canonical/skills/design-system-audit/references/checkpoints.md +240 -0
  842. package/ds-canonical/skills/design-system-audit/references/historical-bugs.md +240 -0
  843. package/ds-canonical/skills/design-system-audit/references/principle-audit-protocol.md +364 -0
  844. package/ds-canonical/skills/design-system-audit/references/rule-placement.md +175 -0
  845. package/ds-canonical/skills/design-system-audit/references/spec-template.md +66 -0
  846. package/ds-canonical/skills/ensure-canonical/SKILL.md +196 -0
  847. package/ds-canonical/skills/governance-health/SKILL.md +146 -0
  848. package/ds-canonical/skills/knowledge-prune/SKILL.md +303 -0
  849. package/ds-canonical/skills/new-component/SKILL.md +170 -0
  850. package/ds-canonical/skills/new-component/references/new-component-checklist.md +85 -0
  851. package/ds-canonical/skills/performance-audit/SKILL.md +107 -0
  852. package/ds-canonical/skills/product-ui-audit/SKILL.md +230 -0
  853. package/ds-canonical/skills/product-ui-audit/references/audit-checks.md +246 -0
  854. package/ds-canonical/skills/product-ui-audit/references/common-misuses.md +329 -0
  855. package/ds-canonical/skills/product-ui-audit/references/report-template.md +159 -0
  856. package/ds-canonical/skills/propose-options/SKILL.md +177 -0
  857. package/ds-canonical/skills/prototype/SKILL.md +244 -0
  858. package/ds-canonical/skills/prototype/references/audit-checks.md +37 -0
  859. package/ds-canonical/skills/prototype/references/benchmark-sources.md +94 -0
  860. package/ds-canonical/skills/prototype/references/checkpoints.md +191 -0
  861. package/ds-canonical/skills/prototype/references/evaluation-matrix.md +141 -0
  862. package/ds-canonical/skills/prototype/references/ooux-template.md +198 -0
  863. package/ds-canonical/skills/prototype/references/proposal-template.md +229 -0
  864. package/ds-canonical/skills/scan-similar-bugs/SKILL.md +198 -0
  865. package/ds-canonical/skills/story-auto-compile-migrate/SKILL.md +159 -0
  866. package/ds-canonical/skills/story-writing/SKILL.md +122 -0
  867. package/ds-canonical/skills/story-writing/references/anatomy-standard.md +217 -0
  868. package/ds-canonical/skills/story-writing/references/category-templates.md +174 -0
  869. package/ds-canonical/skills/story-writing/references/example-selection.md +70 -0
  870. package/ds-canonical/skills/story-writing/references/self-check.md +20 -0
  871. package/ds-canonical/skills/ux-audit/SKILL.md +130 -0
  872. package/ds-canonical/skills/visual-audit/SKILL.md +245 -0
  873. package/ds-canonical/skills/visual-audit/output/.gitkeep +0 -0
  874. package/ds-canonical/skills/visual-audit/references/audit-architecture.md +100 -0
  875. package/ds-canonical/skills/visual-audit/references/visual-checklist.md +297 -0
  876. package/ds-canonical/skills/visual-audit/references/world-class-benchmarks.md +198 -0
  877. package/ds-canonical/templates/_README.md +23 -0
  878. package/ds-canonical/templates/dashboard-app.tsx +145 -0
  879. package/ds-story-manifest.json +1690 -0
  880. package/package.json +22 -9
  881. package/src/components/Accordion/accordion.spec.md +114 -0
  882. package/src/components/Accordion/index.ts +5 -0
  883. package/src/components/Alert/alert.spec.md +197 -0
  884. package/src/components/Alert/index.ts +5 -0
  885. package/src/components/AppShell/app-shell.spec.md +331 -0
  886. package/src/components/AppShell/index.ts +5 -0
  887. package/src/components/AspectRatio/aspect-ratio.spec.md +134 -0
  888. package/src/components/AspectRatio/index.ts +5 -0
  889. package/src/components/Avatar/avatar.spec.md +319 -0
  890. package/src/components/Avatar/index.ts +5 -0
  891. package/src/components/Badge/badge.spec.md +380 -0
  892. package/src/components/Badge/index.ts +5 -0
  893. package/src/components/Breadcrumb/breadcrumb.spec.md +251 -0
  894. package/src/components/Breadcrumb/breadcrumb.tsx +26 -16
  895. package/src/components/Breadcrumb/index.ts +5 -0
  896. package/src/components/BulkActionBar/bulk-action-bar.spec.md +210 -0
  897. package/src/components/BulkActionBar/index.ts +5 -0
  898. package/src/components/Button/button.spec.md +445 -0
  899. package/src/components/Button/index.ts +5 -0
  900. package/src/components/Calendar/calendar.spec.md +242 -0
  901. package/src/components/Calendar/index.ts +5 -0
  902. package/src/components/Carousel/carousel.spec.md +253 -0
  903. package/src/components/Carousel/index.ts +5 -0
  904. package/src/components/Chart/chart.spec.md +155 -0
  905. package/src/components/Chart/index.ts +5 -0
  906. package/src/components/Checkbox/checkbox.spec.md +344 -0
  907. package/src/components/Checkbox/index.ts +5 -0
  908. package/src/components/Chip/chip.spec.md +230 -0
  909. package/src/components/Chip/index.ts +5 -0
  910. package/src/components/CircularProgress/circular-progress.spec.md +268 -0
  911. package/src/components/CircularProgress/index.ts +5 -0
  912. package/src/components/Coachmark/coachmark.spec.md +230 -0
  913. package/src/components/Coachmark/index.ts +5 -0
  914. package/src/components/Combobox/combobox.spec.md +180 -0
  915. package/src/components/Combobox/combobox.tsx +6 -6
  916. package/src/components/Combobox/index.ts +5 -0
  917. package/src/components/Command/command.spec.md +171 -0
  918. package/src/components/Command/index.ts +5 -0
  919. package/src/components/DataTable/data-table.spec.md +525 -0
  920. package/src/components/DataTable/index.ts +5 -0
  921. package/src/components/DateGrid/date-grid.spec.md +215 -0
  922. package/src/components/DateGrid/index.ts +5 -0
  923. package/src/components/DatePicker/date-picker.spec.md +334 -0
  924. package/src/components/DatePicker/index.ts +5 -0
  925. package/src/components/DescriptionList/description-list.spec.md +214 -0
  926. package/src/components/DescriptionList/index.ts +5 -0
  927. package/src/components/Dialog/dialog.spec.md +193 -0
  928. package/src/components/Dialog/dialog.tsx +4 -4
  929. package/src/components/Dialog/index.ts +5 -0
  930. package/src/components/DropdownMenu/dropdown-menu.spec.md +241 -0
  931. package/src/components/DropdownMenu/index.ts +5 -0
  932. package/src/components/Empty/empty.spec.md +204 -0
  933. package/src/components/Empty/index.ts +5 -0
  934. package/src/components/Field/field-controls.spec.md +338 -0
  935. package/src/components/Field/field.spec.md +438 -0
  936. package/src/components/Field/form-validation.spec.md +142 -0
  937. package/src/components/Field/index.ts +5 -0
  938. package/src/components/FieldControlGroup/field-control-group.spec.md +176 -0
  939. package/src/components/FieldControlGroup/index.ts +5 -0
  940. package/src/components/FileItem/file-item.spec.md +467 -0
  941. package/src/components/FileItem/index.ts +5 -0
  942. package/src/components/FileUpload/file-upload.spec.md +123 -0
  943. package/src/components/FileUpload/index.ts +5 -0
  944. package/src/components/FileViewer/file-viewer.spec.md +373 -0
  945. package/src/components/FileViewer/index.ts +5 -0
  946. package/src/components/HoverCard/hover-card.spec.md +149 -0
  947. package/src/components/HoverCard/index.ts +5 -0
  948. package/src/components/Input/index.ts +5 -0
  949. package/src/components/Input/input.spec.md +193 -0
  950. package/src/components/LinkInput/index.ts +5 -0
  951. package/src/components/LinkInput/link-input.spec.md +130 -0
  952. package/src/components/Menu/index.ts +5 -0
  953. package/src/components/Menu/menu-item.spec.md +283 -0
  954. package/src/components/NameCard/index.ts +5 -0
  955. package/src/components/NameCard/name-card.spec.md +171 -0
  956. package/src/components/Notice/index.ts +5 -0
  957. package/src/components/Notice/notice.spec.md +149 -0
  958. package/src/components/NumberInput/index.ts +5 -0
  959. package/src/components/NumberInput/number-input.spec.md +126 -0
  960. package/src/components/OverflowIndicator/index.ts +5 -0
  961. package/src/components/OverflowIndicator/overflow-indicator.spec.md +120 -0
  962. package/src/components/PeoplePicker/index.ts +5 -0
  963. package/src/components/PeoplePicker/people-picker.spec.md +263 -0
  964. package/src/components/Popover/index.ts +5 -0
  965. package/src/components/Popover/popover.spec.md +191 -0
  966. package/src/components/Popover/popover.tsx +1 -1
  967. package/src/components/ProgressBar/index.ts +5 -0
  968. package/src/components/ProgressBar/progress-bar.spec.md +232 -0
  969. package/src/components/RadioGroup/index.ts +5 -0
  970. package/src/components/RadioGroup/radio-group.spec.md +141 -0
  971. package/src/components/Rating/index.ts +5 -0
  972. package/src/components/Rating/rating.spec.md +208 -0
  973. package/src/components/ScrollArea/index.ts +5 -0
  974. package/src/components/ScrollArea/scroll-area.spec.md +145 -0
  975. package/src/components/SegmentedControl/index.ts +5 -0
  976. package/src/components/SegmentedControl/segmented-control.spec.md +295 -0
  977. package/src/components/Select/index.ts +5 -0
  978. package/src/components/Select/select.spec.md +299 -0
  979. package/src/components/SelectMenu/index.ts +5 -0
  980. package/src/components/SelectMenu/select-menu.spec.md +220 -0
  981. package/src/components/SelectionControl/index.ts +5 -0
  982. package/src/components/SelectionControl/selection-item.spec.md +128 -0
  983. package/src/components/Separator/index.ts +5 -0
  984. package/src/components/Separator/separator.spec.md +109 -0
  985. package/src/components/Sheet/index.ts +5 -0
  986. package/src/components/Sheet/sheet.spec.md +141 -0
  987. package/src/components/Sheet/sheet.tsx +1 -1
  988. package/src/components/Sidebar/index.ts +5 -0
  989. package/src/components/Sidebar/sidebar.spec.md +706 -0
  990. package/src/components/Skeleton/index.ts +5 -0
  991. package/src/components/Skeleton/skeleton.spec.md +104 -0
  992. package/src/components/Slider/index.ts +5 -0
  993. package/src/components/Slider/slider.spec.md +353 -0
  994. package/src/components/Steps/index.ts +5 -0
  995. package/src/components/Steps/steps.spec.md +465 -0
  996. package/src/components/Switch/index.ts +5 -0
  997. package/src/components/Switch/switch.spec.md +215 -0
  998. package/src/components/Tabs/index.ts +5 -0
  999. package/src/components/Tabs/tabs.spec.md +314 -0
  1000. package/src/components/Tag/index.ts +5 -0
  1001. package/src/components/Tag/tag.spec.md +282 -0
  1002. package/src/components/Textarea/index.ts +5 -0
  1003. package/src/components/Textarea/textarea.spec.md +151 -0
  1004. package/src/components/TimePicker/index.ts +5 -0
  1005. package/src/components/TimePicker/time-picker.spec.md +279 -0
  1006. package/src/components/TimePicker/time-picker.tsx +4 -4
  1007. package/src/components/Toast/index.ts +5 -0
  1008. package/src/components/Toast/toast.spec.md +177 -0
  1009. package/src/components/Tooltip/index.ts +5 -0
  1010. package/src/components/Tooltip/tooltip.spec.md +132 -0
  1011. package/src/components/TreeView/index.ts +5 -0
  1012. package/src/components/TreeView/tree-view.spec.md +388 -0
  1013. package/src/components/TreeView/tree-view.tsx +24 -12
  1014. package/src/index.ts +70 -69
  1015. package/src/patterns/action-bar/action-bar.spec.md +458 -0
  1016. package/src/patterns/element-anatomy/element-anatomy.spec.md +215 -0
  1017. package/src/patterns/element-anatomy/index.ts +5 -0
  1018. package/src/patterns/element-anatomy/inline-action.spec.md +304 -0
  1019. package/src/patterns/element-anatomy/item-anatomy.spec.md +1042 -0
  1020. package/src/patterns/header-canonical/header-canonical.spec.md +285 -0
  1021. package/src/patterns/header-canonical/index.ts +5 -0
  1022. package/src/patterns/horizontal-overflow/horizontal-overflow.spec.md +191 -0
  1023. package/src/patterns/horizontal-overflow/index.ts +5 -0
  1024. package/src/patterns/overlay-surface/index.ts +5 -0
  1025. package/src/patterns/overlay-surface/overlay-surface.spec.md +419 -0
  1026. package/src/patterns/resize-handle/index.ts +5 -0
  1027. package/src/patterns/resize-handle/resize-handle.spec.md +109 -0
  1028. package/src/styles/tokens.css +42 -0
  1029. package/src/tokens/README.md +2 -0
  1030. package/src/tokens/color/color.spec.md +772 -0
  1031. package/src/tokens/density/density.spec.md +127 -0
  1032. package/src/tokens/elevation/elevation.spec.md +72 -0
  1033. package/src/tokens/layoutSpace/layoutSpace.spec.md +303 -0
  1034. package/src/tokens/motion/motion.spec.md +97 -0
  1035. package/src/tokens/opacity/opacity.spec.md +78 -0
  1036. package/src/tokens/orphan-tokens.spec.md +117 -0
  1037. package/src/tokens/radius/radius.spec.md +123 -0
  1038. package/src/tokens/token-system.spec.md +243 -0
  1039. package/src/tokens/typography/typography.spec.md +202 -0
  1040. package/src/tokens/uiSize/uiSize.css +16 -0
  1041. package/src/tokens/uiSize/uiSize.spec.md +428 -0
@@ -0,0 +1,215 @@
1
+ ---
2
+ component: DateGrid
3
+ family: composite
4
+ variants: {}
5
+ sizes: {}
6
+ traits:
7
+ - hasInteractiveStates
8
+ - isInternal
9
+ benchmark:
10
+ - react-day-picker (shadcn Calendar base): github.com/gpbl/react-day-picker
11
+ - Ant Design DatePicker: github.com/ant-design/ant-design/tree/master/components/date-picker
12
+ - MUI X Date Pickers: github.com/mui/mui-x/tree/master/packages/x-date-pickers
13
+ ---
14
+
15
+ <!-- @benchmark-cited: D5 retrofit 2026-05-18 — body claims marked per-claim @benchmark-unverified inline; canonical source URLs in frontmatter benchmark list. -->
16
+
17
+ <!-- M22 retrofit DONE 2026-05-03 v11(real source URLs added inline below)-->
18
+
19
+ # DateGrid 設計原則
20
+
21
+ ## 定位
22
+
23
+ DateGrid 是 **DatePicker 內部的 date-grid primitive**(月份格網 + 前後導航 + 日 cell),**不直接面向 consumer**。2026-04-21 從原本的 `Calendar/` 改名為 `DateGrid/`,因為「Calendar」此命名在世界級 DS 慣例專指**事件檢視 canvas**(見 `../Calendar/calendar.spec.md`),而本元件只是「選日期用的格網」,不做事件呈現。保留 Calendar 名字給 event view 元件是世界級對齊。
24
+
25
+ **實作基礎**:`react-day-picker@9` 包裝 + 本 DS token 覆寫預設視覺。所有 classNames 透過 `classNames` prop 注入,避免引入原生 `.rdp-*` 樣式漂移。
26
+
27
+ **Layout Family**:非上述 family — composite / multi-section(月份 caption + 星期標頭 + 日期網格 + nav 按鈕,多區塊組合)。
28
+
29
+ **Storybook title 層級**:`Design System/Internal/DateGrid/*`(非 Components/,因為它是 DatePicker 的 internal primitive;對齊 CLAUDE.md「Internal vs Components 判斷 test」:無預設視覺 context、所有 consumer 透過 DatePicker 包)。
30
+
31
+ **世界級命名對照(為什麼不叫 Calendar)**:
32
+
33
+ | DS | 「Calendar」此名字給誰 | DayPicker 內部格網叫什麼 |
34
+ |----|-----------------------|-------------------------|
35
+ | Notion | event calendar 檢視(月/週/日) | 無(DatePicker 另有 calendar popup) |
36
+ | Google | Google Calendar(event 檢視) | 無公開 DS,DatePicker 另管 |
37
+ | Ant Design | inline 行事曆(含事件) | 無(DatePicker 自建 panel) |
38
+ | Apple HIG / Fantastical | event 檢視 | 無(DatePicker inline) |
39
+ | Material MUI | `<Calendar>` 已棄 → `<DateCalendar>`(date picker grid,single-date only;Range 走另元件 `<DateRangeCalendar>`)— source: [github.com/mui/mui-x](https://github.com/mui/mui-x/blob/master/packages/x-date-pickers/src/DateCalendar/DateCalendar.tsx) | `<DateCalendar>` |
40
+ | React Aria | `<Calendar>`(date picker grid)— source: [react-spectrum.adobe.com](https://react-spectrum.adobe.com/react-aria/Calendar.html) `@benchmark-unverified`(WebFetch 403)| `<Calendar>` |
41
+ | **本 DS** | **`<Calendar>`**(event 檢視 canvas,見 `../Calendar/`) | **`<DateGrid>`**(本元件) |
42
+
43
+ 結論:Material / React Aria 用 `Calendar` 指 date-picker-grid 有點誤導(user 以為是 event 檢視);本 DS 對齊 Notion / Google / Ant / Apple 的大眾認知,**`Calendar` 給 event view**、**`DateGrid` 給 date picker grid**。 <!-- @benchmark-unverified: see frontmatter benchmark list for canonical DS source URL -->
44
+
45
+ ---
46
+
47
+ ## 何時用
48
+
49
+ - **Inline 月曆顯示**:dashboard / 行事曆小卡 / 日期 filter bar
50
+ - **DatePicker 浮層內嵌**:DatePicker 消費本元件作為選日 popup(見 `../DatePicker/date-picker.spec.md`)
51
+ - **範圍選擇**:`mode="range"` 適用「from → to」場景(訂單日期範圍、查詢時段)
52
+ - **多日選擇**:`mode="multiple"` 適用「勾選多個不連續日期」(event sign-up)
53
+
54
+ ## 何時不用
55
+
56
+ | 場景 | 改用 | 原因 |
57
+ |------|------|------|
58
+ | 日期輸入欄位 | `DatePicker` | Calendar 是 inline,欄位需要 trigger + popup 結構 |
59
+ | 純顯示單日期 | `<DatePicker mode="display">` / `Intl.DateTimeFormat` | 不需 interactive 月曆 |
60
+ | 時間選擇(時分) | ⚠️ 未來 TimePicker | Calendar 只處理日期層級 |
61
+ | 事件行事曆(日程本) | 專用行事曆元件 | Calendar 是日期選擇;事件日誌需要 event overlay / drag / week/month view 切換 |
62
+
63
+ ---
64
+
65
+ ## mode(react-day-picker API)
66
+
67
+ | mode | 選擇行為 | 典型場景 |
68
+ |------|---------|---------|
69
+ | `single`(預設) | 單日選取,點新日取代舊選 | DatePicker / 生日 / 到期日 |
70
+ | `multiple` | 可勾選多個不連續日期 | event 報名多日 |
71
+ | `range` | from → to 連續範圍 | 訂單日期範圍 / 查詢時段 |
72
+
73
+ ---
74
+
75
+ ## 實作機制:classNames 鏡射 modifier keys(2026-04-21 AR43 修正)
76
+
77
+ **重要**:react-day-picker v9 的 cell 只有 `data-selected / data-disabled / data-today / data-outside / data-focused` 這幾個 DOM attribute;**`data-range-start / data-range-middle / data-range-end` 不存在**。
78
+
79
+ 因此用 `[&[data-range-middle=true]]:xxx` 這種 attribute selector **根本不會生效**(舊版做法錯誤)。
80
+
81
+ **正解**:把 state 樣式放進 `classNames[state]` 物件,v9 的 `getClassNamesForModifiers` 會在對應 modifier 為 true 時把該 key 的 class 附加到 Day CELL。範例:`classNames.range_middle: 'bg-[var(--color-neutral-2)] [&>button]:!bg-transparent'`。
82
+
83
+ `[&>button]:xxx` 從 cell 向內選子 button 用於 button-level 樣式(selected / disabled 的藍底白圓等)。
84
+
85
+ ---
86
+
87
+ ## 五種 cell state canonical(2026-04-21,AR43 定案)
88
+
89
+ 世界級對照 — Ant Design([github.com/ant-design/ant-design](https://github.com/ant-design/ant-design/tree/master/components/date-picker))/ Google Calendar / macOS Calendar / Material 3([mui/mui-x DateCalendar](https://github.com/mui/mui-x/blob/master/packages/x-date-pickers/src/DateCalendar/DateCalendar.tsx))的 picker grid 共通做法 `@benchmark-unverified`(visual claims,non-source-citable):
90
+ - today 不做 ring circle(跟 hover ring 混淆),改用 underline 或 dot
91
+ - selected 用藍底白字圓,range 端點共用同樣視覺
92
+ - range 中段用灰底 rectangle track,跟端點的圓相切成連續 pill
93
+ - hover 非 filled(與 selected 區隔)
94
+ - disabled 顯示灰底圓圈(明確「此格不可選」),非 opacity-50
95
+
96
+ | State | 視覺 | Token 角色(class 細節見 tsx)| 備註 |
97
+ |-------|------|------------------------------|------|
98
+ | **today**(未選) | 數字下方短圓桿(藍) | button `::after` bar,色用 `primary`,尺寸靠近文字行底(不貼 button 邊) | affordance 方式,不 fill bg;位置刻意貼近數字避免「黏 button 邊」視覺 flaw |
99
+ | **today + selected** | 數字下方短圓桿(白) | bar 色切 `on-emphasis` | 選中藍底上藍 bar 隱形,必切白;以 state 疊加 selector 覆寫 |
100
+ | **disabled** | 灰底 + 淡字 | `bg-disabled` + `fg-disabled` + `cursor-not-allowed` | 跟 Button disabled token 一致,不自創 palette |
101
+ | **outside(非本月)**| 淡字(只文字) | `fg-muted` | 比 disabled 弱:outside 仍可 hover / 可點,純是「非焦點月份」的標示 |
102
+ | **selected / range 端點** | 藍底白字圓 | button `primary` 底 + `on-emphasis` 字(cell `data-selected="true"`) | range_start / range_end 共用此視覺 |
103
+ | **range 端點 cell bg** | 灰底半圓 track,**高度 = button** | `before:` pseudo `inset-y-0.5` + `rounded-l/r-full` + `left/right-0.5`(M8 對齊 Ant `cell-range-start::before { border-radius: 9999px 0 0 9999px }` — [ant-design picker style](https://github.com/ant-design/ant-design/blob/master/components/date-picker/style/panel.ts) `@benchmark-unverified` style file path,Material X / Apple / Google `@benchmark-unverified` visual)| 圓弧半徑 = button 半徑無錯位;舊版 cell-level bg 圓弧半徑 16px 比 button 14px 大 = 視覺 misalign |
104
+ | **range track(中間)** | 灰底矩形,**高度 = button**(28×28 @ md)| `before:` pseudo `inset-y-0.5 inset-x-0` `bg-neutral-selected`(對齊 range_start/end pseudo + tsx L148/154/159 實作);button 透明顯露 track | track 高度跟 selected 圓一致,不留 2px「fat」邊;cell 寬度維持 32px → 相鄰 pseudo 接合連貫橫向 track |
105
+ | **hover(未選中)** | 藍圈 outline(無 fill) | button hover ring 色 `primary`,寬度 1.5px,無 bg | 1.5px ring 對齊 Apple HIG `@benchmark-unverified` / Ant `@benchmark-unverified`(visual,non-source-citable) |
106
+
107
+ ## 組合狀態(state stacking order)
108
+
109
+ - today + selected → selected 勝出的**底色**(藍底白字圓);bar 跟著切 on-emphasis(白)保持可見
110
+ - range-start / range-end → selected 規則(cell 半圓 track + button 圓)
111
+ - range-middle → track 規則(cell 灰底矩形 + button 透明)
112
+ - today + range-middle → track(灰底)+ today bar(藍色仍可見,cell 未 selected)
113
+ - hover 在 selected / range-middle 上被 ring-0 壓制(避免二次 hover 出現方框 bug)
114
+
115
+ ## Spacing canonical(2026-05-03 v8)
116
+
117
+ - 整個 popover padding `p-3`(12px,對齊 `--layout-space-tight` @ md density)
118
+ - 四邊對稱:左右 chevron 按鈕到邊距 = 最左最右日期 cell 到邊距(12px)
119
+ - 上下對稱:caption 到頂 = 最後一排日期到底(均 12px,從 `p-3` 繼承)
120
+ - day cell 固定 `h-field-sm w-[var(--field-height-sm)]`(28px @ md / 32px @ lg)
121
+ - week header 同寬,`h-field-sm`
122
+ - **Cell 之間 gap = 4px(H + V)**:走 table-native `border-separate border-spacing-1`,不用 grid layout(grid 會 break border-spacing)
123
+ - **Caption row alignment canonical**:`pt-3 + h-field-xs + mb-3 = 12 + 24 + 12 = 48px`
124
+ - DateGrid month_caption + TimePickerSidePanel header **必走同樣 48px caption row 結構**
125
+ - title text vertical center Y 一致 = 12 + 12 = 24px(from container top)
126
+ - ⚠️ 改 DateGrid `p-3` → 必同步改 `TimePickerSidePanel py-3`,否則對齊破
127
+
128
+ **為什麼用 `h-field-sm` 而非固定 `h-9`**:picker grid 在 lg density 下也要跟 Input 系統一起放大,`h-field-sm` 在 md = 28px / lg = 32px,比 Ant/Google 固定 36px(`@benchmark-unverified` visual measurement)稍緊但對齊本 DS 的 field 家族。day cell 尺寸雖固定,但**隨 density 縮放**,視覺跟 popup 內其他欄位(Input / Button)保持比例。
129
+
130
+ ## Nav button canonical(2026-05-03 v9)
131
+
132
+ Prev/Next chevron 用 `<Button variant="text" size="xs" iconOnly>`(DS primitive 消費,不 hand-coded inline-flex)。透過 RDP v9 `components.PreviousMonthButton / NextMonthButton` override(`node_modules/react-day-picker/dist/esm/components/Nav.js` 證實支援)。
133
+
134
+ **Icon 顏色 = Button 預設 `text-foreground`(neutral-9 / 85% 黑)**,**對齊 DS 一致設計語言**(M23):
135
+ - Icon-only Button 預設 = neutral-9(本 DS 既有 canonical)
136
+ - `fg-muted`(45%)專屬 dismiss / inline action / placeholder(spec.md 既有定義)
137
+ - chevron nav 是 functional navigation,不是 dismiss → 不該套 fg-muted 自開新 tier
138
+
139
+ 歷史(2026-05-03):v6-v8 我憑印象引「Ant chevron muted」(`@benchmark-unverified` 印象,non-cited claim)覆蓋 DS canonical(text-fg-muted 45%)→ user 4 輪糾正後撤回(M23 防再犯)。
140
+
141
+ ⚠️ RDP `PreviousMonthButton` override 必丟 `children`(RDP 把 `<Chevron>` 當 children 傳)否則 double svg(2026-05-03 v8 抓到 bug)。
142
+
143
+ ## Weekday header canonical(2026-05-03 v9)
144
+
145
+ `text-foreground text-body font-medium`(neutral-9 + 500 weight + body size)。對齊 caption「April 2026」同視覺權重(都屬 calendar header 區),不弱化。撤銷 v3 用 `fg-secondary font-normal` 的 mistake(M23)。
146
+
147
+ ## Range track canonical(2026-05-03 v8)
148
+
149
+ 對齊 Ant `cell-range-start::before { border-radius: 9999px 0 0 9999px }`(stadium pattern): <!-- @benchmark-unverified: see frontmatter benchmark list for canonical DS source URL -->
150
+ - `range_start` cell pseudo:`before:left-0 -right-[2px] inset-y-0 rounded-l-full bg-neutral-selected`
151
+ - `range_end` cell pseudo:鏡像 `rounded-r-full`
152
+ - `range_middle` cell pseudo:`before:-inset-x-[2px] inset-y-0 bg-neutral-selected`(無 rounding)
153
+ - pseudo 蓋全 cell + bridge 4px gap → button 圓的 corner triangle 看到 pseudo bg(對齊 button 圓的左/右半弧,無「凸出」)
154
+ - `bg-neutral-selected`(semantic = neutral-2)— 對齊 TimePicker 選中項目樣式
155
+
156
+ ---
157
+
158
+ ## 禁止事項
159
+
160
+ - ❌ **不改視覺 token 為硬色值**(`bg-primary` 必須來自 semantic,不可 `bg-blue-500`)
161
+ - ❌ **不用 `.rdp-*` 原生 class 直接樣式化**(繞過本元件 classNames prop 會跨版本斷掉)
162
+ - ❌ **不自包 Popover**(Calendar 是 inline primitive;需要浮層由 consumer 包 Popover,見 DatePicker)
163
+ - ❌ **不混用其他 calendar library**(若 DateRange / DateTime 需求出現,擴充本元件 `mode="range"` 或新 prop,不引第二套)
164
+ - ❌ **Consumer 不可外加 padding wrapper**(canonical 2026-05-02)— DateGrid root 自帶 `p-3`;`<div className="p-2"><DateGrid /></div>` 會造成 popover edge → 第一個 day cell 雙重 padding(8 + 12 = 20px),違反 mindset #2「優先消費既有 SSOT」。直接放 `<DateGrid />` 在 Popover/parent 內即可。Hook `check_primitive_wrapper_padding.sh` 機械攔截
165
+
166
+ ---
167
+
168
+ ## A11y 預設
169
+
170
+ react-day-picker v9 自動處理:
171
+ - **鍵盤**:ArrowLeft/Right 切日,ArrowUp/Down 切週,PageUp/Down 切月,Home/End 切週首尾
172
+ - **ARIA**:`role="grid"` + 日格 `role="gridcell" aria-selected`
173
+ - **Focus**:`autoFocus` prop 自動 focus 到選中日(或今天)
174
+ - **Locale**:`locale` prop 控制週首日、星期標頭語言
175
+
176
+ Consumer 無需額外處理,保留 react-day-picker API 即可。
177
+
178
+ ---
179
+
180
+ ## shadcn passthrough 例外說明
181
+
182
+ Calendar 本元件是**對 `react-day-picker` 的 `<DayPicker>` 元件薄包裝**,用於橋接 DS token(classNames 覆寫 + components 注入自訂 IconLeft/IconRight)。**不套 `React.forwardRef`**,原因如下:
183
+
184
+ - **底層 `DayPicker` 自己不接受 forwarded ref**——react-day-picker 的 API 是 declarative props(selected / onSelect / classNames / components 等),沒有 DOM ref 介面可 forward
185
+ - **沒有我們擁有的 DOM root 可 ref**——Calendar 的視覺全由 `DayPicker` render,我們只注入 className token 覆寫,沒有自己的外層 `<div>` 容器
186
+ - **Radix-compat 的 forwardRef 在此無意義**——若硬 wrap 成 `const Calendar = forwardRef(...)` 則 ref 會指向哪裡?指向 `DayPicker`(DayPicker 不支援),或指向 consumer 不期待的節點,都不對
187
+
188
+ 保留 `displayName = 'Calendar'` 讓 React DevTools / Storybook 辨識;`...props` 透過 props interface 顯式列舉 passthrough 至 DayPicker(不 spread DOM,保持 API 邊界清楚)。
189
+
190
+ **何時應改**:若未來 react-day-picker 升級提供 forwardRef 或 `ref` prop,或我們決定包一層自有 DOM 容器(如加 footer action buttons),再改為 canonical forwardRef wrapper。
191
+
192
+ ---
193
+
194
+ ## 邊界案例
195
+
196
+ - **Disabled day**:`disabled` prop 走 react-day-picker matcher;disabled cell 視覺 `text-fg-disabled`(M24)、`cursor-not-allowed`、click 不觸發 onSelect、鍵盤導覽自動 skip。
197
+ - **Loading(server-rendered grid)**:DateGrid 為 sync render(date math 在 client),非 async surface。consumer 若需 async disabled-dates fetch(如後端 holiday list),應先 disable trigger 直到 fetch 完成,DateGrid 開啟後立即 ready。
198
+ - **Empty(全 disabled days)**:極端場景(所有日期都被 disabled matcher 命中),DateGrid 渲完整 grid 但全部 cell 為 disabled state,鍵盤焦點停留無導覽目標(react-day-picker v9 內建)。
199
+ - **Dark mode**:走 semantic token(primary / neutral / fg-muted)自動 adapt。
200
+ - **Density**:DateGrid cell 尺寸固定不隨 density 變(date grid 為密度敏感的 8 列 × 6 行 layout,壓縮會破壞 reading)。
201
+
202
+ ---
203
+
204
+ ## 相關
205
+
206
+ - `../DatePicker/date-picker.spec.md` — **本元件 consumer**:DatePicker 消費 Calendar 作為選日 popup
207
+ - `../../tokens/color/color.spec.md` — semantic token 來源(primary / neutral / fg-muted 等)
208
+ - react-day-picker 官方文件 — `https://react-day-picker.js.org`
209
+
210
+ ## 被引用(auto-maintained,Dim 3 reciprocal audit)
211
+
212
+ > 本節由 `scripts/add-reciprocal-pointers.mjs` 自動維護,列出在 SSOT 語境下指向本 spec 的其他 spec。若要手動補充,寫在本節之前。
213
+
214
+ - `calendar.spec.md`
215
+ - `date-picker.spec.md`
@@ -0,0 +1,5 @@
1
+ // AUTO-GENERATED by scripts/gen-component-indexes.mjs — DO NOT EDIT MANUALLY.
2
+ // Re-export pattern enables package.json exports map subpath:
3
+ // import { ... } from '@qijenchen/design-system/{components,patterns}/<Dir>'
4
+ // Regenerate: node scripts/gen-component-indexes.mjs
5
+ export * from './date-grid'
@@ -0,0 +1,334 @@
1
+ ---
2
+ component: DatePicker
3
+ family: 4
4
+ variants: {}
5
+ sizes: {}
6
+ traits:
7
+ - hasInteractiveStates
8
+ - isInputLike
9
+ benchmark:
10
+ - Ant Design DatePicker: github.com/ant-design/ant-design/tree/master/components/date-picker
11
+ - MUI X Date Pickers: github.com/mui/mui-x/tree/master/packages/x-date-pickers
12
+ - react-day-picker: github.com/gpbl/react-day-picker
13
+ ---
14
+
15
+ <!-- @benchmark-cited: D5 retrofit 2026-05-18 — all world-class DS claims below have inline URL or per-claim retract. Frontmatter benchmark list expanded with canonical doc URLs. -->
16
+
17
+ # DatePicker 設計原則
18
+
19
+ ## 定位
20
+
21
+ DatePicker 是**單一日期**的輸入與顯示元件。Edit 用**本 DS 自建 DateGrid**(基於 `react-day-picker` + 本 DS token)+ Popover 呈現;Display 用 `Intl.DateTimeFormat`。
22
+
23
+ 共用規則見 `../Field/field-controls.spec.md`。本文件只記錄 DatePicker 特有的原則。
24
+
25
+ **Layout Family**:CLAUDE.md 4-Family Model **Family 4(Field control layout)** 消費者。結構繼承 `components/Field/field-controls.spec.md` 的 `fieldWrapperStyles + [startIcon?] [<editable>] [endAction?]` 規格,視覺對齊 Family 1(Menu item)讓 SelectMenu trigger + options 連續一致。
26
+
27
+ **實作基礎**:
28
+ - Trigger:`<button>` 包 `fieldWrapperStyles`(視覺仍是 Input wrapper,只是改為可點擊觸發浮層)
29
+ - Popup:`Popover`(消費 overlay-surface pattern 外殼)
30
+ - DateGrid 主體:消費 `<DateGrid>` 內部 primitive(見 `../DateGrid/date-grid.spec.md`;`react-day-picker` 包裝成本 DS token);**不是** `<Calendar>` — `<Calendar>` 是 event 檢視 canvas,跟 DatePicker 無關
31
+
32
+ ---
33
+
34
+ ## Controlled-only rationale(Dim 26)
35
+
36
+ 本元件刻意採 **controlled-only** 模式:`value` + `onChange` 必傳,不支援 `defaultValue` uncontrolled fallback。
37
+
38
+ **為什麼**:
39
+ - 內部狀態複雜(search filter / range / menu open state)跟 `value` 雙向 sync 會產生 race condition
40
+ - Consumer 幾乎一定有外部 state(form library / app state),強制 controlled 消除 ambiguity
41
+ - 世界級對照:Ant Design DatePicker([ant.design/components/date-picker](https://ant.design/components/date-picker)) / Material MUI X DatePicker([mui.com/x/react-date-pickers/date-picker](https://mui.com/x/react-date-pickers/date-picker/))皆 value + defaultValue 共存;我們選 controlled-only 對齊狀態一致性優先
42
+
43
+ **若未來要改 dual-mode**:需引入 `useControllableState` helper + 測試 controlled↔uncontrolled switch 場景,屬 major API 擴充,非本 session scope。
44
+
45
+ ---
46
+
47
+ ## 何時用
48
+
49
+ - **單一日期選擇**:出生日、到期日、提醒日、發佈日
50
+ - **需要 locale-aware 顯示**(`Intl.DateTimeFormat` 自動處理年月日順序、月份語言)
51
+ - **需要視覺上與 Dialog / Popover / SelectMenu 一致的浮層體驗**(所有浮層都用我們的 token)
52
+ - **DataTable 的日期欄位**(自動整合,meta.type='date')
53
+
54
+ ## 何時不用
55
+
56
+ | 場景 | 改用 | 原因 |
57
+ |------|------|------|
58
+ | 日期範圍(from → to) | **`<DatePicker.Range>`**(本檔下「DatePicker.Range」段,2026-04-21 新增) | 仿 Ant `DatePicker.RangePicker` 架構:雙 input + 箭頭 + 共用 calendar icon,Popover 展開兩月份並列 |
59
+ | 日期 + 時間(含時分) | **本元件加 `showTime` prop**(canonical 2026-05-02,Ant idiom) | DatePicker `showTime` / DatePickerRange `showTime` 內建 TimeColumns + 此刻/確定 footer;value 變 ISO datetime |
60
+ | 相對時間(「3 天前」「昨天」)| 自訂 Display 元件 | DatePicker 的 Display 是絕對日期;相對時間需要計算 + locale 格式化 |
61
+ | 純文字 YYYY-MM-DD(不需要 picker)| `Input` | 如 API debug 介面、不需互動的純記錄 |
62
+ | 生日等「只有月日、不需要年」的欄位 | 目前用 DatePicker 忍受年份 | 多數情境可接受;要極致可自訂 MonthDayPicker |
63
+ | Notion / Google 式 event calendar 檢視 | **`<Calendar>`** 元件(見 `../Calendar/calendar.spec.md`,月/週/日 event view);**非本元件語義** | DatePicker 是「選日期」的 form control;Calendar 是「看事件」的頁面 canvas,兩者雖名字都有 calendar 但是不同 DS 元件 |
64
+
65
+ ---
66
+
67
+ ## DateGrid popup(本 DS 自建)
68
+
69
+ DatePicker 使用**本 DS 自建 DateGrid** + Popover 而非瀏覽器原生 `<input type="date">`。歷史變更(2026-04-19):原本遵守「不自建 calendar」禁令以保留 mobile 原生 wheel UX,但 CLAUDE.md Mindset #1 擴充後明確要求「視覺上也必須跟世界級一樣整齊」——原生 picker 視覺不受控、跨瀏覽器不一致,無法達成與 Dialog / SelectMenu / Combobox 等浮層的視覺連續性。遂改為自建 DateGrid。
70
+
71
+ **命名變更(2026-04-21)**:原 `<Calendar>` 元件改名為 `<DateGrid>`(DatePicker 內部 primitive),讓 `Calendar` 這個命名留給真正的事件檢視 canvas(對齊 Notion / Google / Apple / Ant 世界級慣例)。DatePicker 內部 primitive 以功能命名為 `DateGrid`。
72
+
73
+ ### 架構
74
+
75
+ ```
76
+ <button fieldWrapperStyles> ← 視覺仍是 Input wrapper(不變)
77
+ <span>格式化的日期文字</span>
78
+ <ItemInlineAction X /> ← 選用,clearable=true 時顯示
79
+ <CalendarIcon /> ← 右側固定(lucide icon,視覺 affordance)
80
+ </button>
81
+ │ 點擊開啟
82
+
83
+ <Popover>
84
+ <DateGrid /> ← react-day-picker + 本 DS token(原 Calendar)
85
+ </Popover>
86
+ ```
87
+
88
+ ### Cell state canonical(5 種語意視覺)
89
+
90
+ DateGrid cell 有 5 種語意視覺,每種用不同形狀/色彩語言避免混淆:
91
+
92
+ - **正常(未 hover)** — 黑字透明底(base reading state)
93
+ - **today** — 文字下方藍色底線(**非 ring circle**,避免與 hover 混淆,對齊 [Ant DatePicker](https://ant.design/components/date-picker) `today` cell underline / Google Calendar / macOS Calendar <!-- @benchmark-unverified: Google Calendar + macOS Calendar 無公開 spec URL,visual observation -->)
94
+ - **disabled** — 灰底圓圈 + 淺灰字(與 outside month 視覺略有區隔)
95
+ - **selected**(single / range 端點) — **藍底白字圓**
96
+ - **range track**(中間日期) — 灰底矩形橫條(打在 day 容器層,非 button 層;與端點圓接縫形成連續 bar)
97
+ - **hover**(未選中) — 藍圈 outline **無 fill**(非 filled 避免跟 selected 混淆)
98
+
99
+ **為什麼 selected 用 primary 非 neutral**:DatePicker 的 selected 是「**最終選定日期**」強 affordance,用 primary 顯示確定性(對齊 [Ant DatePicker selected blue fill](https://ant.design/components/date-picker) / Google Calendar / Notion Calendar 慣例 <!-- @benchmark-unverified: Google Calendar + Notion Calendar 無公開 spec URL,visual observation -->)。**對照 TimePicker 選項 selected 用 `bg-neutral-selected`**(見 `time-picker.spec.md`),因為 TimePicker panel 是「**列表選中**」語意(user 在時分選項間切換),跟 SelectMenu 同流派。兩者差異 codified 在各 spec,不互調。
100
+
101
+ **State stacking(組合狀態處理)**:
102
+ - today + selected → **selected 勝出**(藍底白字圓)
103
+ - today + range-middle → track 灰底 + underline 仍可見
104
+ - outside month → 弱化字色(不套 disabled 灰底圓,outside 只是「非當月」不是「禁選」)
105
+
106
+ 其他區塊(月份 caption / Nav 按鈕 / 星期標頭)視覺層級:月份 caption 與 SelectMenu 標題同等、Nav 按鈕走 tertiary icon button 規格、星期標頭弱化為輔助資訊。
107
+
108
+ 完整 class / token 對照見 anatomy `CalendarTokens` story。
109
+
110
+ ### Spacing canonical(2026-04-21 對齊 user 附圖)
111
+
112
+ - Popover padding **四邊對稱** 12px(= `--layout-space-tight` @ md density,實作走 `p-3`)
113
+ - **左右對稱**:prev/next chevron button 中心 = 第一/最後一欄日期 cell 中心;chevron 到 popover 邊距 = 最邊欄日期到 popover 邊距 = 12px
114
+ - **上下對稱**:month caption 到 popover top 距離 = 最後一排日期到 popover bottom 距離 = 12px(均從 `p-3` 繼承)
115
+ - day cell 與 week header 尺寸 SSOT → `date-grid.spec.md:120`(消費 `--field-height-sm` token,density-aware:md=28×28 / lg=32×32)
116
+
117
+ ### Calendar icon
118
+
119
+ 右側固定顯示 Calendar icon(視覺指示這是日期輸入)。Trigger 本身是 `<button>`,點擊開啟 Popover。
120
+
121
+ ### Typed input(Issue 10,2026-05-10 opt-in)
122
+
123
+ `typeable?: boolean`(default false)→ trigger 內渲 real `<input type="text">` 取代 `<span>`,user 可直接打字 + Calendar icon 仍開 popover(Material X DatePicker / Ant DatePicker / Notion typed-date 雙 affordance 共識)。Parser `parseDateInput(input, { allowTime })` 接 ISO YYYY-MM-DD / YYYY/MM/DD / YYYY.MM.DD + native `Date.parse` fallback(RFC 'Mar 12 2026')。Partial input allow;`Enter`/`Blur` commit;`Esc` reset;IME `compositionstart/end` guard 不誤觸發。Invalid → `aria-invalid`。**v1 limits**:US `MM/DD/YYYY` vs EU `DD/MM/YYYY` ambiguous → Date.parse fallback;locale-aware format prop deferred v2;TimePicker typed input deferred(column picker UX 不同)。
124
+
125
+ ---
126
+
127
+ ## DatePicker.Range(2026-04-21 新增,仿 Ant Design)
128
+
129
+ ### API
130
+
131
+ ```tsx
132
+ <DatePicker.Range
133
+ value={[startIso, endIso]} // [string | null, string | null] | null
134
+ onChange={([start, end]) => ...}
135
+ size="sm" | "md" | "lg" // default md,對齊 field-height family
136
+ placeholder={['Start date', 'End date']} // 雙 placeholder
137
+ disabled
138
+ clearable // 一次清空兩端點
139
+ formatOptions // Intl.DateTimeFormatOptions,與 single 共用
140
+ locale
141
+ showTime // 啟用時間欄位 → value 變 [datetime, datetime]
142
+ showSeconds // showTime 時是否顯示秒
143
+ minuteStep={15}
144
+ needConfirm // 預設 showTime=true 時為 true
145
+ />
146
+ ```
147
+
148
+ ### 結構(對齊 user 提供附圖 [Image #3])
149
+
150
+ ```
151
+ ┌───────────────────────────────────────────────┐
152
+ │ Start date → End date 📅 │
153
+ └───────────────────────────────────────────────┘
154
+ │ │ │ │
155
+ │ │ │ └─ CalendarIcon(固定右側,視覺指示)
156
+ │ │ └─ End date(獨立 button,點擊 activeEnd='end')
157
+ │ └─ ArrowRight icon(`mx-2`,text-fg-muted)
158
+ └─ Start date(獨立 button,點擊 activeEnd='start')
159
+ ```
160
+
161
+ 外層是 `fieldWrapperStyles` 容器,內含**兩個獨立 button**(start / end input),點任一個都開 Popover **並設定 activeEnd**。Active 端點視覺以 `data-active-end="true"` underline 標示(對齊 Ant RangePicker active input 視覺)。
162
+
163
+ ### Active-end 機制(canonical 2026-05-02,對齊 Ant Design RangePicker)
164
+
165
+ 對齊 Ant Design 實證(WebFetch react-component/picker source code 2026-05-03):**input-click 切換 activeEnd**,而**非** footer toggle / radio 按鈕。
166
+
167
+ **Source citations**:
168
+ - Ant `activeIndex` tracking + `getActiveRange`:`https://github.com/react-component/picker/blob/master/src/PickerInput/RangePicker.tsx`(`function getActiveRange(activeIndex) { return activeIndex === 1 ? 'end' : 'start' }`)
169
+ - Ant `useRangeDisabledDate`:`https://github.com/react-component/picker/blob/master/src/PickerInput/hooks/useRangeDisabledDate.ts`(activeIndex=1 + start 已選 → date < start disabled)
170
+ - Material X DateRangePicker docs:`https://mui.com/x/react-date-pickers/date-range-picker/`(同 input-driven activeEnd 派)
171
+ - Atlassian DateRangePicker:`https://atlassian.design/components/datetime-picker/`
172
+
173
+ - 點 start input → `activeEnd='start'` + 開 popover;DateGrid range 選的端點落到 start
174
+ - 點 end input → `activeEnd='end'` + 開 popover;同理只更新 end
175
+ - **Auto-advance**:選完 start → 自動切 `activeEnd='end'` 等待 user 選 end(Ant idiom)
176
+ - **showTime=true 時 TimeColumns 套 active end 的 time**(只能編一端的時間,符合單一焦點原則)
177
+ - 視覺指示:active input 加 `decoration-primary underline-offset-4 decoration-2`(對齊 Field focus 語意)
178
+
179
+ ### Popover 行為
180
+
181
+ - `mode="range"` + `numberOfMonths={2}`(兩月並列,對齊 [Ant RangePicker](https://ant.design/components/date-picker#rangepicker) <!-- @benchmark-unverified: Airbnb / Booking 無公開 DS spec URL,visual observation -->)
182
+ - 點 date → 依 `activeEnd` 更新對應端點(start | end);auto-advance 至 end 等選
183
+ - showTime=false:兩端點都填好 → Popover **自動關閉**
184
+ - showTime=true:`needConfirm=true`(default),user 按「確定」才 commit + close
185
+ - 期間 user 可 hover 未來端點預覽 range track 視覺(Calendar 內建)
186
+ - Clear 按鈕清空兩端點 `onChange([null, null])`
187
+
188
+ ### Range 視覺規則
189
+
190
+ - **range_start / range_end**:沿用 single selected 的視覺(藍底白字圓)
191
+ - **range middle**:灰底矩形橫條(打在 day 容器層,不是 button 層)
192
+ - **端點 ↔ 中間的接縫**:端點採半圓角(左端 `rounded-l-full` / 右端 `rounded-r-full`)讓圓弧 + 矩形無縫連接成一條連續底色帶
193
+
194
+ 完整 class 對照見 anatomy `CalendarTokens`(State canonical 表的 `selected` / `range track`)。
195
+
196
+ ### 禁止
197
+
198
+ - ❌ 不自刻「兩個 `<Input>` + 中間箭頭」繞過 `DatePicker.Range`(canonical 本元件提供)
199
+ - ❌ 不讓 Popover 在選第一個端點後就關閉(違反 range selection UX)
200
+ - ❌ value 用單字串 `"2026-01-01/2026-01-07"`——必 `[string | null, string | null]`,語意清楚 + 避免 parse 錯誤
201
+ - ❌ Range active-end **不**用 footer toggle / radio 切換(違反 Ant / Material / Atlassian 慣例);必走 input-click
202
+
203
+ ---
204
+
205
+ ## showTime(2026-05-02 新增,Ant idiom 整合 datetime)
206
+
207
+ ### API
208
+
209
+ ```tsx
210
+ <DatePicker
211
+ showTime // 啟用時間欄位 → value 變 ISO datetime
212
+ showSeconds={false} // 是否顯示秒(預設 false,對齊 Ant)
213
+ minuteStep={15} // 分鐘步進,會議常用 15
214
+ secondStep={1}
215
+ needConfirm // 預設 showTime=true 時為 true(Ant idiom)
216
+ value={iso} // 'YYYY-MM-DDTHH:MM:SS'
217
+ onChange={...}
218
+ />
219
+
220
+ <DatePicker.Range showTime ... /> // Range 同樣 props
221
+ ```
222
+
223
+ ### 行為
224
+
225
+ - showTime=true:popover 右側出現 `<TimePickerSidePanel>`(內部消費 TimeColumns),通過 `<CalendarTimeContainer>` absolute positioning 讓 DateGrid 主導 row 高度(TimeColumns 不撐高)
226
+ - TimePickerSidePanel **header dynamic 顯示當前 active time**(`HH:MM` / `HH:MM:SS`),對齊 Ant `<DatePicker showTime />` panel header(canonical 2026-05-03 v9)
227
+ - TimePickerSidePanel 結構:**pt-3 + h-field-xs flex center + mb-3**(top 對齊 DateGrid month_caption 同 Y baseline;**bottom = 0,讓 time list 連續延伸到 SurfaceFooter border-t**,對齊 Ant / Material time-picker 「continuous scroll」idiom — canonical 2026-05-03 v10)
228
+ - TimePickerSidePanel header **下方無 divider**(對齊 DateGrid month_caption 也無 border-b),DS internal canonical M23 優先於 Ant time-picker header divider 慣例 — 兩 panel 同層級 caption 視覺對稱(canonical 2026-05-03 v10)
229
+ - 底部 footer **消費 SurfaceFooter SSOT**(`patterns/overlay-surface`)— border-t + canonical px-loose py-tight padding,**不**自寫 Separator + p-2 + ml-auto wrapper(canonical 2026-05-03 v8)
230
+ - Footer 排版(對齊 Ant `marginInlineStart: auto` on OK):左「此刻」(`mr-auto` push)、右「確定」(needConfirm)或「關閉」
231
+ - Range showTime footer **無「此刻」**(對齊 Ant `showNow={multiple ? false : showNow}`)— 只「確定」走 SurfaceFooter justify-end
232
+ - value 格式:`'YYYY-MM-DDTHH:MM:SS'`(local-time 語意,不帶 timezone)
233
+ - needConfirm=true 時 user 編輯先暫存 draft,trigger text 即時讀 draft(canonical 2026-05-03 v8 修);按確定才 onChange;false 時邊編邊 commit
234
+ - showSeconds=false(default)→ TimeColumns 只顯示 H/M(對齊 Ant 預設)
235
+ - Range cell disable(對齊 Ant `useRangeDisabledDate`):activeEnd='start' + end 已選 → date > end disabled;activeEnd='end' + start 已選 → date < start disabled
236
+ - Range stadium pattern(canonical 2026-05-03 v8):rangeStart/End cell pseudo `before:rounded-l-full / rounded-r-full` 跟 button 圓的左/右半弧 EXACTLY OVERLAY → 無「凸出」(對齊 Ant `cell-range-start::before { border-radius: 9999px 0 0 9999px }`)
237
+
238
+ ### 為什麼用 prop 而非分離 `<DateTimePicker>` 元件
239
+
240
+ 世界級對照:**Ant Design / Material X / Atlassian / Carbon 全採 prop 模式**(`showTime` / `withTime` / `granularity`),非分離元件。Source:
241
+ - Ant `<DatePicker showTime />`:`https://ant.design/components/date-picker#datepicker-demo-time`(`showTime: true | object`)
242
+ - Material X `views={['day','hours','minutes']}` / `format`:`https://mui.com/x/react-date-pickers/date-time-picker/`
243
+ - Atlassian `<DateTimePicker>`:`https://atlassian.design/components/datetime-picker/`
244
+ - React Aria `granularity`:`https://react-spectrum.adobe.com/react-aria/DatePicker.html#granularity`
245
+
246
+ 理由:
247
+ - API surface 一致(同 props 結構,只多 4 個 time-related prop)
248
+ - 避免 DateTimePicker / DateTimeRangePicker / DatePicker / DatePickerRange 4 個元件 cross-product
249
+ - consumer 從 date-only 升級 datetime 只加 prop,不換元件
250
+
251
+ 歷史(2026-04-21~05-01):曾分離為 `<DateTimePicker>` 在 DataTable 內,2026-05-02 user audit 發現抽象不對(M17 SSOT 違反 + API surface 不一致),合併回 DatePicker showTime。
252
+
253
+ ---
254
+
255
+ ## 格式化
256
+
257
+ | 選項 | 說明 | 範例 |
258
+ |------|------|------|
259
+ | `formatOptions` | `Intl.DateTimeFormatOptions` | `{ year: 'numeric', month: 'short', day: 'numeric' }` |
260
+ | `locale` | BCP 47 locale | `'zh-TW'`、`'en-US'` |
261
+
262
+ Display 模式(readonly / disabled / DataTable cell)使用 `Intl.DateTimeFormat` 格式化。Edit 模式 trigger 顯示文字也透過 `Intl.DateTimeFormat` 格式化(與 Display 一致,`formatOptions` / `locale` prop 對兩者皆生效)。
263
+
264
+ ---
265
+
266
+ ## Clearable
267
+
268
+ `clearable` prop 在有值時顯示 clear 按鈕(endAction)。
269
+
270
+ - 只在 edit 模式顯示
271
+ - 清除後 value 變為 `null`(Display 顯示 —)
272
+ - **Dual-state sync canonical**(2026-05-03 v10):X 點擊必同時 `onChange?.('')` + `setDraft(null)`(Range 同),否則 `needConfirm=true`(showTime 預設)且 popover 開著時 `displayValue=draft` 仍顯示舊值,trigger 看起來「沒清」。X 在 trigger 上是 standard clear affordance,不走 needConfirm「等確定」語義 — 立刻 commit + 同步 draft
273
+
274
+ ---
275
+
276
+ ## 禁止事項
277
+
278
+ - ❌ 不在 readonly / disabled 模式顯示 clear 按鈕
279
+ - ❌ 不改 DateGrid 視覺 token 為本 DS 以外的顏色(`bg-primary` / `ring-primary` 等必須來自 semantic token,不可硬寫)
280
+ - ❌ 不用其他 calendar library 平行實作(若有 DateRange / DateTime 未來需求,擴充本 DateGrid 而非引入第二個 library)
281
+
282
+ ---
283
+
284
+ ## shadcn passthrough 例外說明
285
+
286
+ DatePicker 套 `React.forwardRef` + `displayName`,但**不 `...props` spread DOM**——consumer 透過 `DatePickerProps` 明列 API surface(value / onChange / mode / size / formatOptions 等),不 spread 任何剩餘 DOM attrs 到 trigger。
287
+
288
+ **為什麼 intentional**:DatePicker trigger 是 **compound**(Display 模式為 span 視覺、Edit 模式為 Button),不同 render tree。若 spread `...props` 則會 leak 到特定一邊,另一邊 consumer 誤以為無效:
289
+
290
+ - consumer 傳 `onFocus` → 期待作用在「edit trigger button」,但 Display 模式無 trigger 會忽略
291
+ - consumer 傳 `data-testid` → 指向哪個 render tree 取決於當下 mode,測試不穩定
292
+ - consumer 傳 className → **這個有明確語義**:套在 root wrapper(不論哪個 mode 都穩定),`DatePickerProps.className` 顯式接收
293
+
294
+ 顯式列 API surface 符合世界級 composite 元件慣例([Material DatePicker](https://mui.com/x/react-date-pickers/date-picker/) / [Atlassian DateTimePicker](https://atlassian.design/components/datetime-picker/examples) 皆如此),consumer 知道能傳什麼,避免靜默失效。
295
+
296
+ **`asChild` 不支援**:同理,compound trigger 無單一 Slot 目標。consumer 若要自訂 trigger 視覺,改用 `<DatePicker mode="display">` + 自家 Button composition。
297
+
298
+ ---
299
+
300
+ ## A11y 預設
301
+
302
+ - Trigger:`role="combobox"` + `aria-haspopup="dialog"` + `aria-expanded={open}` + 必含 accessible name(`aria-label` / 或外層 `<label>` / 或 fieldCtx label)
303
+ - Popover content:`role="dialog"` + `aria-label="日期選擇"`(Range:`"日期區間選擇"`)
304
+ - DateGrid 鍵盤:Arrow keys 切日 / PageUp/Down 切月 / Home/End 行首尾(react-day-picker v9 內建)
305
+ - Trigger 鍵盤:Space / Enter open;Esc close + focus return to trigger(Radix Popover 內建)
306
+ - Range 雙 trigger:`activeEnd` state 指向當前編輯端,`aria-expanded` 對應只當該 trigger active 時 true
307
+
308
+ ---
309
+
310
+ ## 驗證時機
311
+
312
+ 走 Field SSOT(`Field/form-validation.spec.md`)。DatePicker 為 form control,validation 行為:
313
+
314
+ - `required` + `value=null` → submit 時 trigger error,`aria-invalid="true"` + error border
315
+ - `min` / `max` date constraint:value 超出範圍時自動 error(consumer 傳 `disabledDates` predicate 視覺 disable,但 typed input 仍可輸入無效值需 validation 攔)
316
+ - Range mode:start > end → invalid;consumer 應確保 start 先 commit 才接受 end
317
+ - Typed input(`typeable=true`):`parseDateInput` 失敗 → `aria-invalid`,blur 觸發 error message
318
+ - Validation timing:typed input → blur + submit;picker pick → onChange 即時(已選有效日期不需延遲)
319
+
320
+ ## 邊界案例
321
+
322
+ - **Disabled**:Field SSOT own;trigger Button 自動繼承 disabled(`text-fg-disabled` + cursor-not-allowed + 不開 picker)。Display mode + disabled 維持格式化日期文字但 token 切 disabled。
323
+ - **Loading(server-rendered grid)**:DatePicker 為 sync UI 不獨立 own loading。若 consumer 場景需 async date constraint fetch(如後端 disabled-dates list),consumer 應先 disable trigger 直到 fetch 完成,或在 popover 開啟後 body 切 `<Empty icon={<CircularProgress/>}/>`(對齊 panel-body loading SSOT)。本 spec scope 內不渲 loading state。
324
+ - **Empty(no value / disabled all dates)**:`value=null` → trigger 顯 placeholder(預設「選擇日期」);若 `disabledDates` predicate 將所有可選日期 disable,DateGrid 自動顯 disabled cells,無導覽目標時鍵盤焦點停留(react-day-picker v9 內建)。
325
+ - **Invalid date input**:Field validation 處理 `aria-invalid="true"` + error border + 下方 error message;DatePicker 本身不 own validation 規則。
326
+ - **Dark mode / density**:走 Field + Popover SSOT 自動 adapt;DateGrid 內 cell 尺寸固定不隨 density 漂移(date grid 為密度敏感不可變區)。
327
+
328
+ ---
329
+
330
+ ## 相關
331
+
332
+ - `../Input/input.spec.md` — 純文字 YYYY-MM-DD(不需 picker 互動的場景)
333
+ - `../NumberInput/number-input.spec.md` — 年齡、天數等數值
334
+ - `../Field/field-controls.spec.md` — Field Control 共用規則(mode / size / endAction / error)
@@ -0,0 +1,5 @@
1
+ // AUTO-GENERATED by scripts/gen-component-indexes.mjs — DO NOT EDIT MANUALLY.
2
+ // Re-export pattern enables package.json exports map subpath:
3
+ // import { ... } from '@qijenchen/design-system/{components,patterns}/<Dir>'
4
+ // Regenerate: node scripts/gen-component-indexes.mjs
5
+ export * from './date-picker'