@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,224 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ import * as ToggleGroupPrimitive from "@radix-ui/react-toggle-group";
4
+ import { cva } from "class-variance-authority";
5
+ import { cn } from "../../lib/utils.js";
6
+ import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuCheckboxItem } from "../DropdownMenu/dropdown-menu.js";
7
+ import { useScrollByPage, buildFadeMask, ARROW_BUTTON_WIDTH, OverflowScrollArrow, OverflowMenuTriggerButton } from "../../patterns/horizontal-overflow/horizontal-overflow.js";
8
+ import { useScrollEdges } from "../../hooks/use-overflow-items.js";
9
+ const chipVariants = cva(
10
+ [
11
+ "inline-flex items-center justify-center",
12
+ "h-field-sm px-3 gap-1",
13
+ "rounded-full border border-border",
14
+ // 預設文字: text-fg-secondary (neutral-8) — 對齊 SegmentedControl / Tabs 未選狀態
15
+ "bg-surface text-fg-secondary",
16
+ "text-body leading-compact font-medium whitespace-nowrap",
17
+ "transition-colors duration-150",
18
+ "cursor-pointer select-none",
19
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1",
20
+ // hover(未選):border 加深一階 + 文字轉深,對齊 Input / SegmentedControl hover
21
+ "hover:border-border-hover hover:text-foreground",
22
+ // selected: 文字 + 邊框都用 primary-hover,底色維持 bg-surface 不變
23
+ // ── pill 風格 canonical 選中規則,跟 SegmentedControl 完全一致:
24
+ // primary-hover 同時染文字和線條;底色不改 (不用 primary-subtle)。
25
+ "data-[state=on]:border-primary-hover data-[state=on]:text-primary-hover",
26
+ // disabled:cursor-not-allowed + 鎖 hover 不變色
27
+ // 不用 pointer-events-none(否則 cursor-not-allowed 不會顯示)
28
+ "disabled:cursor-not-allowed disabled:text-fg-disabled",
29
+ "disabled:hover:border-border disabled:hover:text-fg-disabled"
30
+ ]
31
+ );
32
+ const Chip = React.forwardRef(({ className, startIcon: StartIcon, badge, endIcon: EndIcon, children, ...props }, ref) => {
33
+ const hasSuffix = badge != null || EndIcon !== void 0;
34
+ return /* @__PURE__ */ jsxs(
35
+ ToggleGroupPrimitive.Item,
36
+ {
37
+ ref,
38
+ className: cn(chipVariants(), className),
39
+ ...props,
40
+ children: [
41
+ StartIcon && /* @__PURE__ */ jsx(StartIcon, { size: 16, "aria-hidden": true }),
42
+ children != null && /* @__PURE__ */ jsx("span", { className: "px-1", children }),
43
+ hasSuffix && /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1", children: [
44
+ badge,
45
+ EndIcon && /* @__PURE__ */ jsx(EndIcon, { size: 16, "aria-hidden": true })
46
+ ] })
47
+ ]
48
+ }
49
+ );
50
+ });
51
+ Chip.displayName = "Chip";
52
+ const ChipGroup = React.forwardRef(
53
+ ({ layout = "wrap", className, children, ...props }, ref) => {
54
+ if (layout === "scroll") {
55
+ return /* @__PURE__ */ jsx(ScrollChipGroup, { ref, className, ...props, children });
56
+ }
57
+ if (layout === "menu") {
58
+ return /* @__PURE__ */ jsx(MenuChipGroup, { ref, className, ...props, children });
59
+ }
60
+ return /* @__PURE__ */ jsx(
61
+ ToggleGroupPrimitive.Root,
62
+ {
63
+ ref,
64
+ className: cn("flex flex-wrap gap-2", className),
65
+ ...props,
66
+ children
67
+ }
68
+ );
69
+ }
70
+ );
71
+ ChipGroup.displayName = "ChipGroup";
72
+ const ScrollChipGroup = React.forwardRef(({ className, children, ...props }, ref) => {
73
+ const { scrollRef, atStart, atEnd, canScroll } = useScrollEdges();
74
+ const scrollByPage = useScrollByPage(scrollRef);
75
+ const maskImage = buildFadeMask({
76
+ canScroll,
77
+ atStart,
78
+ atEnd,
79
+ reserveArrowWidth: ARROW_BUTTON_WIDTH
80
+ });
81
+ return /* @__PURE__ */ jsxs("div", { className: "relative", children: [
82
+ /* @__PURE__ */ jsx(
83
+ "div",
84
+ {
85
+ ref: scrollRef,
86
+ className: "overflow-x-auto [scrollbar-width:none] [&::-webkit-scrollbar]:hidden",
87
+ style: { maskImage, WebkitMaskImage: maskImage },
88
+ children: /* @__PURE__ */ jsx(
89
+ ToggleGroupPrimitive.Root,
90
+ {
91
+ ref,
92
+ className: cn("flex flex-nowrap gap-2 w-fit", className),
93
+ ...props,
94
+ children
95
+ }
96
+ )
97
+ }
98
+ ),
99
+ !atStart && canScroll && /* @__PURE__ */ jsx(OverflowScrollArrow, { direction: "left", onClick: () => scrollByPage("left") }),
100
+ !atEnd && canScroll && /* @__PURE__ */ jsx(OverflowScrollArrow, { direction: "right", onClick: () => scrollByPage("right") })
101
+ ] });
102
+ });
103
+ ScrollChipGroup.displayName = "ScrollChipGroup";
104
+ const MenuChipGroup = React.forwardRef(({ className, children, ...props }, ref) => {
105
+ const { scrollRef, atStart, atEnd, canScroll } = useScrollEdges();
106
+ const itemRefs = React.useRef(/* @__PURE__ */ new Map());
107
+ const scrollRafIdRef = React.useRef(0);
108
+ React.useEffect(() => () => {
109
+ if (scrollRafIdRef.current) cancelAnimationFrame(scrollRafIdRef.current);
110
+ }, []);
111
+ const registerItem = React.useCallback(
112
+ (index) => (el) => {
113
+ if (el) itemRefs.current.set(index, el);
114
+ else itemRefs.current.delete(index);
115
+ },
116
+ []
117
+ );
118
+ const menuMaskImage = buildFadeMask({ canScroll, atStart, atEnd, reserveArrowWidth: 0 });
119
+ const items = React.useMemo(
120
+ () => React.Children.toArray(children).filter(React.isValidElement),
121
+ [children]
122
+ );
123
+ const groupType = props.type ?? "single";
124
+ const groupValue = props.value;
125
+ const groupOnValueChange = props.onValueChange;
126
+ const isSelected = React.useCallback(
127
+ (chipValue) => {
128
+ if (groupType === "multiple") {
129
+ return Array.isArray(groupValue) && groupValue.includes(chipValue);
130
+ }
131
+ return groupValue === chipValue;
132
+ },
133
+ [groupType, groupValue]
134
+ );
135
+ const toggleFromMenu = React.useCallback(
136
+ (chipValue, index) => {
137
+ if (!groupOnValueChange) {
138
+ return;
139
+ }
140
+ if (groupType === "multiple") {
141
+ const current = Array.isArray(groupValue) ? groupValue : [];
142
+ const next = current.includes(chipValue) ? current.filter((v) => v !== chipValue) : [...current, chipValue];
143
+ groupOnValueChange(next);
144
+ } else {
145
+ groupOnValueChange(chipValue);
146
+ }
147
+ if (scrollRafIdRef.current) cancelAnimationFrame(scrollRafIdRef.current);
148
+ scrollRafIdRef.current = requestAnimationFrame(() => {
149
+ var _a;
150
+ scrollRafIdRef.current = 0;
151
+ (_a = itemRefs.current.get(index)) == null ? void 0 : _a.scrollIntoView({ behavior: "smooth", inline: "center", block: "nearest" });
152
+ });
153
+ },
154
+ [groupType, groupValue, groupOnValueChange]
155
+ );
156
+ const enhancedItems = items.map(
157
+ (child, i) => React.cloneElement(
158
+ child,
159
+ { ref: registerItem(i) }
160
+ )
161
+ );
162
+ return /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
163
+ /* @__PURE__ */ jsx(
164
+ "div",
165
+ {
166
+ ref: scrollRef,
167
+ className: "flex-1 min-w-0 overflow-x-auto [scrollbar-width:none] [&::-webkit-scrollbar]:hidden",
168
+ style: { maskImage: menuMaskImage, WebkitMaskImage: menuMaskImage },
169
+ children: /* @__PURE__ */ jsx(
170
+ ToggleGroupPrimitive.Root,
171
+ {
172
+ ref,
173
+ className: cn("flex flex-nowrap gap-2 w-fit", className),
174
+ ...props,
175
+ children: enhancedItems
176
+ }
177
+ )
178
+ }
179
+ ),
180
+ canScroll && /* @__PURE__ */ jsxs(DropdownMenu, { children: [
181
+ /* @__PURE__ */ jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsx(
182
+ OverflowMenuTriggerButton,
183
+ {
184
+ "aria-label": `選項選單(共 ${items.length} 個)`
185
+ }
186
+ ) }),
187
+ /* @__PURE__ */ jsx(DropdownMenuContent, { align: "end", children: items.map((chip, index) => {
188
+ const chipProps = chip.props;
189
+ const chipValue = chipProps.value;
190
+ if (typeof chipValue !== "string") return null;
191
+ return /* @__PURE__ */ jsx(
192
+ DropdownMenuCheckboxItem,
193
+ {
194
+ checked: isSelected(chipValue),
195
+ disabled: chipProps.disabled,
196
+ onCheckedChange: () => toggleFromMenu(chipValue, index),
197
+ children: chipProps.children
198
+ },
199
+ chipValue
200
+ );
201
+ }) })
202
+ ] })
203
+ ] });
204
+ });
205
+ MenuChipGroup.displayName = "MenuChipGroup";
206
+ const chipMeta = {
207
+ component: "Chip",
208
+ family: 3,
209
+ variants: {},
210
+ sizes: {},
211
+ states: ["default", "hover", "active", "focus-visible", "disabled"],
212
+ tokens: {
213
+ bg: ["bg-primary-subtle", "bg-surface"],
214
+ fg: ["text-fg-disabled", "text-fg-secondary", "text-foreground"],
215
+ ring: ["ring-ring"]
216
+ }
217
+ };
218
+ export {
219
+ Chip,
220
+ ChipGroup,
221
+ chipMeta,
222
+ chipVariants
223
+ };
224
+ //# sourceMappingURL=chip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chip.js","sources":["../../../src/components/Chip/chip.tsx"],"sourcesContent":["// @benchmark-unverified-blanket: file-level retraction per M22 (d) — claims herein not individually URL-cited; treat as unverified visual/usage rumor unless retrofit per-claim. Hook escape preserved.\nimport * as React from 'react'\nimport * as ToggleGroupPrimitive from '@radix-ui/react-toggle-group'\nimport { cva } from 'class-variance-authority'\nimport type { LucideIcon } from 'lucide-react'\nimport { cn } from '@/lib/utils'\nimport {\n DropdownMenu,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuCheckboxItem,\n} from '@/design-system/components/DropdownMenu/dropdown-menu'\nimport {\n useScrollEdges,\n useScrollByPage,\n buildFadeMask,\n ARROW_BUTTON_WIDTH,\n OverflowScrollArrow,\n OverflowMenuTriggerButton,\n} from '@/design-system/patterns/horizontal-overflow/horizontal-overflow'\n\n/**\n * Chip — Material Design Filter Chip\n *\n * 基於 Radix ToggleGroup,橋接設計系統 token。\n * 必須在 <ChipGroup> 內使用。\n *\n * ── 內部結構(鏡射 Button)──\n * [startIcon?] [<span px-1>label</span>] [<span gap-1>badge? + endIcon?</span>]\n *\n * ── Size ──\n * 單一 size = h-field-sm(28/32 density-aware)\n * 對齊 Material 3 / Atlassian / Polaris 世界級共識\n *\n * ── State ──\n * default bg-surface border-border text-foreground\n * hover border-border-hover(對齊 Input / SegmentedControl)\n * selected bg-primary-subtle border-primary-hover text-primary-hover\n * disabled cursor-not-allowed text-fg-disabled\n *\n * ── 詳見 chip.spec.md ──\n */\n\n// ── Chip item ────────────────────────────────────────────────────────────────\n\nconst chipVariants = cva(\n [\n 'inline-flex items-center justify-center',\n 'h-field-sm px-3 gap-1',\n 'rounded-full border border-border',\n // 預設文字: text-fg-secondary (neutral-8) — 對齊 SegmentedControl / Tabs 未選狀態\n 'bg-surface text-fg-secondary',\n 'text-body leading-compact font-medium whitespace-nowrap',\n 'transition-colors duration-150',\n 'cursor-pointer select-none',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1',\n // hover(未選):border 加深一階 + 文字轉深,對齊 Input / SegmentedControl hover\n 'hover:border-border-hover hover:text-foreground',\n // selected: 文字 + 邊框都用 primary-hover,底色維持 bg-surface 不變\n // ── pill 風格 canonical 選中規則,跟 SegmentedControl 完全一致:\n // primary-hover 同時染文字和線條;底色不改 (不用 primary-subtle)。\n 'data-[state=on]:border-primary-hover data-[state=on]:text-primary-hover',\n // disabled:cursor-not-allowed + 鎖 hover 不變色\n // 不用 pointer-events-none(否則 cursor-not-allowed 不會顯示)\n 'disabled:cursor-not-allowed disabled:text-fg-disabled',\n 'disabled:hover:border-border disabled:hover:text-fg-disabled',\n ]\n)\n\nexport interface ChipProps\n extends React.ComponentPropsWithoutRef<typeof ToggleGroupPrimitive.Item> {\n /** 左側 icon(LucideIcon),最多一個 */\n startIcon?: LucideIcon\n /** 右側 badge(通常是計數指示器)*/\n badge?: React.ReactNode\n /** 右側 icon(少見,通常是 ChevronDown 指示可展開)*/\n endIcon?: LucideIcon\n}\n\nconst Chip = React.forwardRef<\n React.ElementRef<typeof ToggleGroupPrimitive.Item>,\n ChipProps\n>(({ className, startIcon: StartIcon, badge, endIcon: EndIcon, children, ...props }, ref) => {\n const hasSuffix = badge != null || EndIcon !== undefined\n\n return (\n <ToggleGroupPrimitive.Item\n ref={ref}\n className={cn(chipVariants(), className)}\n {...props}\n >\n {StartIcon && <StartIcon size={16} aria-hidden />}\n {children != null && <span className=\"px-1\">{children}</span>}\n {hasSuffix && (\n <span className=\"inline-flex items-center gap-1\">\n {badge}\n {EndIcon && <EndIcon size={16} aria-hidden />}\n </span>\n )}\n </ToggleGroupPrimitive.Item>\n )\n})\nChip.displayName = 'Chip'\n\n// ── ChipGroup ────────────────────────────────────────────────────────────────\n\nexport type ChipGroupLayout = 'wrap' | 'scroll' | 'menu'\n\nexport type ChipGroupProps = React.ComponentPropsWithoutRef<\n typeof ToggleGroupPrimitive.Root\n> & {\n /** Overflow 處理模式。預設 `wrap`(塞不下換行)。詳見 chip.spec.md */\n layout?: ChipGroupLayout\n}\n\nconst ChipGroup = React.forwardRef<HTMLDivElement, ChipGroupProps>(\n ({ layout = 'wrap', className, children, ...props }, ref) => {\n if (layout === 'scroll') {\n return (\n <ScrollChipGroup ref={ref} className={className} {...props}>\n {children}\n </ScrollChipGroup>\n )\n }\n if (layout === 'menu') {\n return (\n <MenuChipGroup ref={ref} className={className} {...props}>\n {children}\n </MenuChipGroup>\n )\n }\n // wrap(預設)\n return (\n <ToggleGroupPrimitive.Root\n ref={ref}\n className={cn('flex flex-wrap gap-2', className)}\n {...props}\n >\n {children}\n </ToggleGroupPrimitive.Root>\n )\n }\n)\nChipGroup.displayName = 'ChipGroup'\n\n// ── Scroll / Menu modes ──\n// Fade mask / arrows / menu trigger 全部從 horizontal-overflow pattern module 取用。\n// 詳見 `patterns/horizontal-overflow/horizontal-overflow.spec.md`。\n//\n// Canonical 規則:所有 overflow affordance 一律是 Button text sm iconOnly,\n// 不論在 Chip / Tab / Step / SegmentedControl。Chip menu trigger 曾經用\n// chip-shape 圓形 button,已改回 text button 對齊 mental model。\n\n// ── ScrollChipGroup ──────────────────────────────────────────────────────────\n\nconst ScrollChipGroup = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<typeof ToggleGroupPrimitive.Root>\n>(({ className, children, ...props }, ref) => {\n const { scrollRef, atStart, atEnd, canScroll } = useScrollEdges<HTMLDivElement>()\n const scrollByPage = useScrollByPage(scrollRef)\n const maskImage = buildFadeMask({\n canScroll,\n atStart,\n atEnd,\n reserveArrowWidth: ARROW_BUTTON_WIDTH,\n })\n\n return (\n <div className=\"relative\">\n <div\n ref={scrollRef}\n className=\"overflow-x-auto [scrollbar-width:none] [&::-webkit-scrollbar]:hidden\"\n style={{ maskImage, WebkitMaskImage: maskImage }}\n >\n <ToggleGroupPrimitive.Root\n ref={ref}\n className={cn('flex flex-nowrap gap-2 w-fit', className)}\n {...props}\n >\n {children}\n </ToggleGroupPrimitive.Root>\n </div>\n {!atStart && canScroll && (\n <OverflowScrollArrow direction=\"left\" onClick={() => scrollByPage('left')} />\n )}\n {!atEnd && canScroll && (\n <OverflowScrollArrow direction=\"right\" onClick={() => scrollByPage('right')} />\n )}\n </div>\n )\n})\nScrollChipGroup.displayName = 'ScrollChipGroup'\n\n// ── MenuChipGroup ────────────────────────────────────────────────────────────\n// Show-all navigator pattern (Chrome tab dropdown / VS Code editor tabs):\n// - Menu 永遠顯示全部 chips,每個都用 DropdownMenuCheckboxItem + checked 反映 selection\n// - 點 menu item = toggle selection + scrollIntoView,把該 chip 捲到中央\n// - 不用動態 overflow 計算,menu 內容穩定\n//\n// Menu trigger 使用 canonical `<OverflowMenuTriggerButton>`(= Button text sm iconOnly\n// + ChevronDown),跟 Tabs menu trigger 完全同一套——overflow affordance 屬於工具層,\n// 不該用 chip 自己的視覺語言(圓形 outlined)去渲染,否則 mental model 錯誤(使用者\n// 會誤以為是第 N+1 個可選 chip)。\n//\n// 過去 Chip menu trigger 曾用 `chipVariants() + aspect-square + p-0` 做成圓形 pill,\n// 已按 `horizontal-overflow.spec.md` 的 canonical 規則改回 text button。\n//\n// Fade mask 仍保留(reserveArrowWidth: 0),軟化內容硬邊。\n\n// code-quality-allow: long-function — foundational composite main body — 拆 sub-fn 會複雜化 local state / ref / context binding\nconst MenuChipGroup = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<typeof ToggleGroupPrimitive.Root>\n>(({ className, children, ...props }, ref) => {\n const { scrollRef, atStart, atEnd, canScroll } = useScrollEdges<HTMLDivElement>()\n\n // Local ref map — 追蹤每個 chip 的 DOM 元素供 scrollIntoView 使用。\n // 不用 useOverflowIndices 因為 menu 永遠顯示全部, 不需要動態 overflow 計算。\n // code-quality-allow: long-function — helper fn 結構緊密,拆 sub-fn 會跨 fn 傳 state 反而複雜\n const itemRefs = React.useRef<Map<number, HTMLElement>>(new Map())\n // 2026-05-16 audit codex Round 6:capture rAF + cancel on unmount(defensive hygiene)\n const scrollRafIdRef = React.useRef<number>(0)\n React.useEffect(() => () => { if (scrollRafIdRef.current) cancelAnimationFrame(scrollRafIdRef.current) }, [])\n const registerItem = React.useCallback(\n (index: number) => (el: HTMLElement | null) => {\n if (el) itemRefs.current.set(index, el)\n else itemRefs.current.delete(index)\n },\n []\n )\n\n const menuMaskImage = buildFadeMask({ canScroll, atStart, atEnd, reserveArrowWidth: 0 })\n\n const items = React.useMemo(\n () => React.Children.toArray(children).filter(React.isValidElement) as React.ReactElement[],\n [children]\n )\n\n const groupType = (props as { type?: 'single' | 'multiple' }).type ?? 'single'\n const groupValue = (props as { value?: string | string[] }).value\n const groupOnValueChange = (\n props as { onValueChange?: (value: string | string[]) => void }\n ).onValueChange\n\n // code-quality-allow: long-function — helper fn 結構緊密,拆 sub-fn 會跨 fn 傳 state 反而複雜\n const isSelected = React.useCallback(\n (chipValue: string): boolean => {\n if (groupType === 'multiple') {\n return Array.isArray(groupValue) && groupValue.includes(chipValue)\n }\n return groupValue === chipValue\n },\n [groupType, groupValue]\n )\n\n // code-quality-allow: long-function — multi / single / none selection mode each has 事務性 branch,拆 fn 會跨 fn 傳 chipValue/index/groupOnValueChange state 反而難讀\n const toggleFromMenu = React.useCallback(\n (chipValue: string, index: number) => {\n if (!groupOnValueChange) {\n if (import.meta.env?.DEV) {\n console.warn(\n '[ChipGroup] layout=\"menu\" 需要 controlled 使用(請傳 value + onValueChange),否則 menu items 無法同步主 chip 選擇狀態。'\n )\n }\n return\n }\n if (groupType === 'multiple') {\n const current = (Array.isArray(groupValue) ? groupValue : []) as string[]\n const next = current.includes(chipValue)\n ? current.filter((v) => v !== chipValue)\n : [...current, chipValue]\n ;(groupOnValueChange as (v: string[]) => void)(next)\n } else {\n ;(groupOnValueChange as (v: string) => void)(chipValue)\n }\n // scrollIntoView: 讓剛選中的 chip 出現在視圖中央\n if (scrollRafIdRef.current) cancelAnimationFrame(scrollRafIdRef.current)\n scrollRafIdRef.current = requestAnimationFrame(() => {\n scrollRafIdRef.current = 0\n itemRefs.current.get(index)?.scrollIntoView({ behavior: 'smooth', inline: 'center', block: 'nearest' })\n })\n },\n [groupType, groupValue, groupOnValueChange]\n )\n\n const enhancedItems = items.map((child, i) =>\n React.cloneElement(\n child as React.ReactElement<{ ref?: React.Ref<HTMLElement> }>,\n { ref: registerItem(i) }\n )\n )\n\n return (\n <div className=\"flex items-center gap-2\">\n <div\n ref={scrollRef}\n className=\"flex-1 min-w-0 overflow-x-auto [scrollbar-width:none] [&::-webkit-scrollbar]:hidden\"\n style={{ maskImage: menuMaskImage, WebkitMaskImage: menuMaskImage }}\n >\n <ToggleGroupPrimitive.Root\n ref={ref}\n className={cn('flex flex-nowrap gap-2 w-fit', className)}\n {...props}\n >\n {enhancedItems}\n </ToggleGroupPrimitive.Root>\n </div>\n {canScroll && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <OverflowMenuTriggerButton\n aria-label={`選項選單(共 ${items.length} 個)`}\n />\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n {items.map((chip, index) => {\n const chipProps = chip.props as { value?: string; children?: React.ReactNode; disabled?: boolean }\n const chipValue = chipProps.value\n if (typeof chipValue !== 'string') return null\n return (\n <DropdownMenuCheckboxItem\n key={chipValue}\n checked={isSelected(chipValue)}\n disabled={chipProps.disabled}\n onCheckedChange={() => toggleFromMenu(chipValue, index)}\n >\n {chipProps.children}\n </DropdownMenuCheckboxItem>\n )\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n </div>\n )\n})\nMenuChipGroup.displayName = 'MenuChipGroup'\n\n// Story auto-compile metadata — Phase 1 mechanical migration(2026-04-24)\n// Phase 2 fill needed: purpose descriptions + when rationale + world-class refs\nexport const chipMeta = {\n component: 'Chip',\n family: 3,\n variants: {\n\n },\n sizes: {\n\n },\n states: ['default', 'hover', 'active', 'focus-visible', 'disabled'],\n tokens: {\n bg: ['bg-primary-subtle', 'bg-surface'],\n fg: ['text-fg-disabled', 'text-fg-secondary', 'text-foreground'],\n ring: ['ring-ring'],\n },\n} as const\n\nexport { Chip, ChipGroup, chipVariants }\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from './chip';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Chip/index.ts"],"names":[],"mappings":"AAIA,cAAc,QAAQ,CAAA"}
@@ -0,0 +1,8 @@
1
+ import { Chip, ChipGroup, chipMeta, chipVariants } from "./chip.js";
2
+ export {
3
+ Chip,
4
+ ChipGroup,
5
+ chipMeta,
6
+ chipVariants
7
+ };
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -0,0 +1,40 @@
1
+ import * as React from 'react';
2
+ export interface CircularProgressProps extends React.HTMLAttributes<HTMLSpanElement> {
3
+ /**
4
+ * 進度 0-100。
5
+ * - undefined → indeterminate(旋轉 partial arc,Spinner 樣式)
6
+ * - number → determinate(固定 arc + track)
7
+ */
8
+ value?: number;
9
+ /** 直徑(px)。預設 24,建議 ≤ 64。 */
10
+ size?: number;
11
+ /** 狀態色(lifecycle,與 ProgressBar 同契約)。 */
12
+ /**
13
+ * 視覺 label(inline 顯示於右側)。
14
+ * - font-size 繼承 parent(不設 text-size class,CSS inherit)
15
+ * - color 鎖 `text-fg-muted`(neutral-7)
16
+ * - 塞在元件內時預設不用(e.g. Button loading);全頁 / Empty overlay 可用
17
+ */
18
+ label?: string;
19
+ /**
20
+ * 右側 affix(determinate only;indeterminate 忽略)。
21
+ * - `'value'` → `{value}%` 文字
22
+ * - ReactNode → 客製(若需顯示「已完成」,consumer 端整個 swap 為 Check icon,不走此 prop)
23
+ */
24
+ affix?: 'value' | React.ReactNode;
25
+ }
26
+ declare const CircularProgress: React.ForwardRefExoticComponent<CircularProgressProps & React.RefAttributes<HTMLSpanElement>>;
27
+ export declare const circularProgressMeta: {
28
+ readonly component: "CircularProgress";
29
+ readonly family: null;
30
+ readonly variants: {};
31
+ readonly sizes: {};
32
+ readonly states: readonly ["default", "hover", "active", "focus-visible", "disabled"];
33
+ readonly tokens: {
34
+ readonly bg: readonly [];
35
+ readonly fg: readonly ["text-fg-muted", "text-foreground", "text-primary"];
36
+ readonly ring: readonly [];
37
+ };
38
+ };
39
+ export { CircularProgress };
40
+ //# sourceMappingURL=circular-progress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circular-progress.d.ts","sourceRoot":"","sources":["../../../src/components/CircularProgress/circular-progress.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AA4C9B,MAAM,WAAW,qBAAsB,SAAQ,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC;IAClF;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,4BAA4B;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,wCAAwC;IACxC;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC,SAAS,CAAA;CAClC;AAGD,QAAA,MAAM,gBAAgB,+FA8GrB,CAAA;AAKD,eAAO,MAAM,oBAAoB;;;;;;;;;;;CAevB,CAAA;AAEV,OAAO,EAAE,gBAAgB,EAAE,CAAA"}
@@ -0,0 +1,118 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ import { cn } from "../../lib/utils.js";
4
+ const INDETERMINATE_ARC_RATIO = 0.25;
5
+ const CircularProgress = React.forwardRef(
6
+ ({
7
+ value,
8
+ size = 24,
9
+ label,
10
+ affix,
11
+ className,
12
+ "aria-label": ariaLabel,
13
+ ...props
14
+ }, ref) => {
15
+ const isDeterminate = typeof value === "number";
16
+ const clampedValue = isDeterminate ? Math.max(0, Math.min(100, value)) : 0;
17
+ const strokeWidth = Math.max(2, Math.round(size / 10));
18
+ const radius = (size - strokeWidth) / 2;
19
+ const circumference = 2 * Math.PI * radius;
20
+ const dashOffset = isDeterminate ? circumference * (1 - clampedValue / 100) : circumference * (1 - INDETERMINATE_ARC_RATIO);
21
+ const hasLabel = typeof label === "string" && label.length > 0;
22
+ const hasAriaLabel = typeof ariaLabel === "string" && ariaLabel.length > 0;
23
+ const shouldAnnounce = hasAriaLabel || hasLabel;
24
+ let affixNode = null;
25
+ if (isDeterminate) {
26
+ if (affix === "value") {
27
+ affixNode = /* @__PURE__ */ jsxs("span", { className: "text-caption text-foreground tabular-nums shrink-0", children: [
28
+ Math.round(clampedValue),
29
+ "%"
30
+ ] });
31
+ } else if (React.isValidElement(affix) || typeof affix === "string" || typeof affix === "number") {
32
+ affixNode = affix;
33
+ }
34
+ }
35
+ const a11yRole = isDeterminate ? "progressbar" : shouldAnnounce ? "status" : void 0;
36
+ const a11yLabel = hasAriaLabel ? ariaLabel : hasLabel ? label : void 0;
37
+ const a11yValueAttrs = isDeterminate ? {
38
+ "aria-valuenow": Math.round(clampedValue),
39
+ "aria-valuemin": 0,
40
+ "aria-valuemax": 100
41
+ } : {};
42
+ const graphic = /* @__PURE__ */ jsx(
43
+ "span",
44
+ {
45
+ ref,
46
+ role: a11yRole,
47
+ "aria-label": a11yLabel,
48
+ "aria-hidden": !a11yRole ? true : void 0,
49
+ ...a11yValueAttrs,
50
+ className: cn(
51
+ // align-middle:inline context 內讓 SVG 對齊 adjacent text 的 x-height 中線
52
+ //(不加會按 baseline 對齊,在 inline-flex cell 裡視覺下沉 1-2px 看起來歪)
53
+ "inline-flex shrink-0 align-middle text-primary",
54
+ // motion-reduce:Material 流派 — prefers-reduced-motion 時不停止旋轉(loading 仍需可見回饋),
55
+ // 而是放慢到 3s/cycle(預設 1s),保留資訊不刺激前庭。
56
+ !isDeterminate && "animate-spin motion-reduce:[animation-duration:3s]",
57
+ className
58
+ ),
59
+ style: { width: size, height: size },
60
+ ...props,
61
+ children: /* @__PURE__ */ jsxs("svg", { viewBox: `0 0 ${size} ${size}`, width: size, height: size, "aria-hidden": true, children: [
62
+ /* @__PURE__ */ jsx(
63
+ "circle",
64
+ {
65
+ cx: size / 2,
66
+ cy: size / 2,
67
+ r: radius,
68
+ fill: "none",
69
+ stroke: "var(--secondary)",
70
+ strokeWidth
71
+ }
72
+ ),
73
+ /* @__PURE__ */ jsx(
74
+ "circle",
75
+ {
76
+ cx: size / 2,
77
+ cy: size / 2,
78
+ r: radius,
79
+ fill: "none",
80
+ stroke: "currentColor",
81
+ strokeWidth,
82
+ strokeDasharray: circumference,
83
+ strokeDashoffset: dashOffset,
84
+ strokeLinecap: "round",
85
+ transform: `rotate(-90 ${size / 2} ${size / 2})`,
86
+ className: isDeterminate ? "transition-[stroke-dashoffset] duration-300" : void 0
87
+ }
88
+ )
89
+ ] })
90
+ }
91
+ );
92
+ if (!hasLabel && !affixNode) return graphic;
93
+ return /* @__PURE__ */ jsxs("span", { className: cn("inline-flex items-center", (hasLabel || affixNode) && "gap-2"), children: [
94
+ graphic,
95
+ hasLabel && /* @__PURE__ */ jsx("span", { className: "text-fg-muted", children: label }),
96
+ affixNode
97
+ ] });
98
+ }
99
+ );
100
+ CircularProgress.displayName = "CircularProgress";
101
+ const circularProgressMeta = {
102
+ component: "CircularProgress",
103
+ family: null,
104
+ // non-family composite / overlay / layout
105
+ variants: {},
106
+ sizes: {},
107
+ states: ["default", "hover", "active", "focus-visible", "disabled"],
108
+ tokens: {
109
+ bg: [],
110
+ fg: ["text-fg-muted", "text-foreground", "text-primary"],
111
+ ring: []
112
+ }
113
+ };
114
+ export {
115
+ CircularProgress,
116
+ circularProgressMeta
117
+ };
118
+ //# sourceMappingURL=circular-progress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circular-progress.js","sources":["../../../src/components/CircularProgress/circular-progress.tsx"],"sourcesContent":["// @benchmark-unverified-blanket: file-level retraction per M22 (d) — claims herein not individually URL-cited; treat as unverified visual/usage rumor unless retrofit per-claim. Hook escape preserved.\nimport * as React from 'react'\nimport { cn } from '@/lib/utils'\n\n/**\n * CircularProgress — 圓形進度指示(determinate + indeterminate 雙模式)\n *\n * 世界級對照:Material `CircularProgress` / Chakra `CircularProgress` — 同元件管\n * determinate(有 `value`)+ indeterminate(無 `value`)兩態。本 DS 採此流派作為\n * circular progress 的 SSOT,`Spinner` 名稱廢除(遷至本元件)。\n *\n * ── 姊妹元件 ──\n * `ProgressBar` = linear determinate(大區塊、頁面級、表單步驟、上傳 bar)\n * `CircularProgress` = circular 兩態(本元件,inline 小空間 / Button loading / Field loading)\n *\n * ── API ──\n * value: undefined → indeterminate(旋轉 partial arc,Spinner 樣式)\n * number 0-100 → determinate(固定 arc + track)\n * size: 自由 px(預設 24,≤ 64 建議)— 跟 Avatar / Lucide icon 同策略\n * label: 可選 inline label,font-size inherit parent,color text-fg-muted\n * affix: (determinate only)'value' | ReactNode\n *\n * ── 視覺 ──\n * SVG 雙圓:底 track(`var(--secondary)`)+ 進度 arc(`text-primary`,不隨狀態變色)。\n * stroke-linecap round,rotate -90deg。\n * Indeterminate mode:arc 固定 25%,外層 `animate-spin` 旋轉,視覺同 Spinner。\n *\n * ── 不設 status prop(決策 2026-04-20)──\n * 世界級沒有「success / error CircularProgress」的穩態呈現——完成 / 失敗的語義應由\n * consumer 在業務邏輯上**替換 CircularProgress 為實際內容**(status icon + label、\n * 成功的結果、錯誤訊息等),而非讓 CircularProgress 變色 + 加 check icon。這種「綠底\n * 空心 circle + check icon 並排」是 DS 典型 over-designing 的 anti-pattern(參考:\n * Material / Chakra / Ant / Polaris 全部沒有此 variant)。\n *\n * Consumer 端範例:\n * {uploading ? <CircularProgress /> : done ? <Check /> : error ? <AlertCircle /> : null}\n *\n * ── A11y ──\n * 有 value → role=\"progressbar\" + aria-valuenow/min/max\n * 無 value → role=\"status\"(loading 語義) + aria-label(如傳)或 aria-hidden(否則)\n */\n\n// Indeterminate mode 的 arc 比例(Material 流派:25%-30% 視覺最平衡)\nconst INDETERMINATE_ARC_RATIO = 0.25\n\nexport interface CircularProgressProps extends React.HTMLAttributes<HTMLSpanElement> {\n /**\n * 進度 0-100。\n * - undefined → indeterminate(旋轉 partial arc,Spinner 樣式)\n * - number → determinate(固定 arc + track)\n */\n value?: number\n /** 直徑(px)。預設 24,建議 ≤ 64。 */\n size?: number\n /** 狀態色(lifecycle,與 ProgressBar 同契約)。 */\n /**\n * 視覺 label(inline 顯示於右側)。\n * - font-size 繼承 parent(不設 text-size class,CSS inherit)\n * - color 鎖 `text-fg-muted`(neutral-7)\n * - 塞在元件內時預設不用(e.g. Button loading);全頁 / Empty overlay 可用\n */\n label?: string\n /**\n * 右側 affix(determinate only;indeterminate 忽略)。\n * - `'value'` → `{value}%` 文字\n * - ReactNode → 客製(若需顯示「已完成」,consumer 端整個 swap 為 Check icon,不走此 prop)\n */\n affix?: 'value' | React.ReactNode\n}\n\n// code-quality-allow: long-function — foundational composite main body — 拆 sub-fn 會複雜化 local state / ref / context binding\nconst CircularProgress = React.forwardRef<HTMLSpanElement, CircularProgressProps>(\n (\n {\n value,\n size = 24,\n label,\n affix,\n className,\n 'aria-label': ariaLabel,\n ...props\n },\n ref,\n ) => {\n const isDeterminate = typeof value === 'number'\n const clampedValue = isDeterminate ? Math.max(0, Math.min(100, value)) : 0\n const strokeWidth = Math.max(2, Math.round(size / 10))\n const radius = (size - strokeWidth) / 2\n const circumference = 2 * Math.PI * radius\n const dashOffset = isDeterminate\n ? circumference * (1 - clampedValue / 100)\n : circumference * (1 - INDETERMINATE_ARC_RATIO)\n\n const hasLabel = typeof label === 'string' && label.length > 0\n const hasAriaLabel = typeof ariaLabel === 'string' && ariaLabel.length > 0\n const shouldAnnounce = hasAriaLabel || hasLabel\n\n // Affix(determinate only)\n let affixNode: React.ReactNode = null\n if (isDeterminate) {\n if (affix === 'value') {\n affixNode = (\n <span className=\"text-caption text-foreground tabular-nums shrink-0\">\n {Math.round(clampedValue)}%\n </span>\n )\n } else if (\n React.isValidElement(affix) ||\n typeof affix === 'string' ||\n typeof affix === 'number'\n ) {\n affixNode = affix\n }\n }\n\n const a11yRole = isDeterminate ? 'progressbar' : shouldAnnounce ? 'status' : undefined\n const a11yLabel = hasAriaLabel ? ariaLabel : hasLabel ? label : undefined\n const a11yValueAttrs = isDeterminate\n ? {\n 'aria-valuenow': Math.round(clampedValue),\n 'aria-valuemin': 0,\n 'aria-valuemax': 100,\n }\n : {}\n\n const graphic = (\n <span\n ref={ref}\n role={a11yRole}\n aria-label={a11yLabel}\n aria-hidden={!a11yRole ? true : undefined}\n {...a11yValueAttrs}\n className={cn(\n // align-middle:inline context 內讓 SVG 對齊 adjacent text 的 x-height 中線\n //(不加會按 baseline 對齊,在 inline-flex cell 裡視覺下沉 1-2px 看起來歪)\n 'inline-flex shrink-0 align-middle text-primary',\n // motion-reduce:Material 流派 — prefers-reduced-motion 時不停止旋轉(loading 仍需可見回饋),\n // 而是放慢到 3s/cycle(預設 1s),保留資訊不刺激前庭。\n !isDeterminate && 'animate-spin motion-reduce:[animation-duration:3s]',\n className,\n )}\n style={{ width: size, height: size }}\n {...props}\n >\n <svg viewBox={`0 0 ${size} ${size}`} width={size} height={size} aria-hidden>\n <circle\n cx={size / 2}\n cy={size / 2}\n r={radius}\n fill=\"none\"\n stroke=\"var(--secondary)\"\n strokeWidth={strokeWidth}\n />\n <circle\n cx={size / 2}\n cy={size / 2}\n r={radius}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={strokeWidth}\n strokeDasharray={circumference}\n strokeDashoffset={dashOffset}\n strokeLinecap=\"round\"\n transform={`rotate(-90 ${size / 2} ${size / 2})`}\n className={isDeterminate ? 'transition-[stroke-dashoffset] duration-300' : undefined}\n />\n </svg>\n </span>\n )\n\n // 單純 graphic(無 label / affix)\n if (!hasLabel && !affixNode) return graphic\n\n return (\n <span className={cn('inline-flex items-center', (hasLabel || affixNode) && 'gap-2')}>\n {graphic}\n {hasLabel && <span className=\"text-fg-muted\">{label}</span>}\n {affixNode}\n </span>\n )\n },\n)\nCircularProgress.displayName = 'CircularProgress'\n\n// Story auto-compile metadata — Phase 1 mechanical migration(2026-04-24)\n// Phase 2 fill needed: purpose descriptions + when rationale + world-class refs\nexport const circularProgressMeta = {\n component: 'CircularProgress',\n family: null, // non-family composite / overlay / layout\n variants: {\n\n },\n sizes: {\n\n },\n states: ['default', 'hover', 'active', 'focus-visible', 'disabled'],\n tokens: {\n bg: [],\n fg: ['text-fg-muted', 'text-foreground', 'text-primary'],\n ring: [],\n },\n} as const\n\nexport { CircularProgress }\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from './circular-progress';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/CircularProgress/index.ts"],"names":[],"mappings":"AAIA,cAAc,qBAAqB,CAAA"}
@@ -0,0 +1,6 @@
1
+ import { CircularProgress, circularProgressMeta } from "./circular-progress.js";
2
+ export {
3
+ CircularProgress,
4
+ circularProgressMeta
5
+ };
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -0,0 +1,100 @@
1
+ import * as React from 'react';
2
+ /**
3
+ * Coachmark — 功能介紹 / onboarding tour 的浮層卡片
4
+ *
5
+ * 世界級對照:Apple HIG「Coachmark」(Apple 命名原處)/ Material「Feature Discovery」/
6
+ * Ant Design `<Tour>` / Shepherd.js / react-joyride / Intercom Product Tours。
7
+ *
8
+ * 本元件 = **Popover 的 composition pattern**,consume 相同 overlay-surface SSOT:
9
+ * - Header(可選,多步驟建議傳 `kind="tips" | "new-features" | 自訂 title`,
10
+ * single-step 預設無 header 避免視覺過重)
11
+ * - Media 區(圖 / 截圖 / illustration,full-width 邊緣對齊,由 AspectRatio 管比例)
12
+ * - Body(SurfaceBody padding):title + description 左對齊
13
+ * - Footer(SurfaceFooter padding,但 justify-between):step 計數左 / actions 右
14
+ *
15
+ * ── 單 vs 多步驟 canonical(世界級行為規則) ──
16
+ * 1. **Single step**(無 `onPrev` 且 `isLastStep`):CTA 文字 = `doneLabel ?? '知道了'`
17
+ * (Apple HIG / Intercom 慣例;不用 "Next" 因為沒有下一步)
18
+ * 2. **Multi step 第一步**(無 `onPrev`,有 `onNext`):CTA = "Next",Skip 顯示
19
+ * 3. **Multi step 中間 / 最後步**(有 `onPrev`):**Skip 不顯示**(使用者已投入進度,
20
+ * 再給 Skip 會讓「放棄」入口與「回上一步」衝突 — Linear / Pendo / Shepherd.js
21
+ * 同樣規則)。CTA = `isLastStep ? 'Done' : 'Next'`
22
+ * 4. **不強制 autoFocus 任何按鈕** — Radix Popover 預設 focus 第一個 focusable
23
+ * (通常是 Prev 或 Skip),本元件不額外拉焦點到 Next,避免使用者以為一按 Enter
24
+ * 就會推進(實際上可能還在讀 body)。想推進者 tab 到 Next 再 Enter。
25
+ *
26
+ * ── 為什麼 Body+Footer 消費 overlay-surface ──
27
+ * 避免 padding token 漂移:Dialog / Popover / Coachmark 三者共用同一套 Header/Body/Footer
28
+ * padding(px-loose / py-tight),改 Dialog 就三邊自動跟進。
29
+ */
30
+ interface CoachmarkStep {
31
+ current: number;
32
+ total: number;
33
+ }
34
+ export interface CoachmarkProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children' | 'title'> {
35
+ /** 控制顯示(controlled mode)*/
36
+ open?: boolean;
37
+ /** 預設打開(uncontrolled initial state)— 2026-05-15 audit Dim 26 V1 fix per user verbatim「A:1」approval */
38
+ defaultOpen?: boolean;
39
+ onOpenChange?: (open: boolean) => void;
40
+ /** 觸發 anchor 元素。通常傳 trigger element;Coachmark 浮層會定位於此 */
41
+ children: React.ReactNode;
42
+ /** 頂部 media 區(圖片 / illustration / video 等);不傳則無 media */
43
+ image?: React.ReactNode;
44
+ /**
45
+ * Media 區域的長寬比(ratio = 寬 / 高)。預設 `16/9`(onboarding feature tour
46
+ * 世界級 convention — Intercom / Pendo / Shepherd.js)。其他常用:`4/3` 產品截圖 /
47
+ * `1/1` 方圖 / `3/4` 直式 portrait。消費獨立的 `AspectRatio` primitive 元件。
48
+ */
49
+ mediaRatio?: number;
50
+ /**
51
+ * 頂部 header 類型(多步驟 tour 建議傳)。
52
+ * - `'tips'` → header title = "使用技巧"
53
+ * - `'new-features'` → header title = "新功能介紹"
54
+ * - `ReactNode` → 自訂 title(string / JSX)
55
+ * - undefined → 無 header(單步驟常用)
56
+ */
57
+ kind?: 'tips' | 'new-features' | React.ReactNode;
58
+ /** 標題(bold) */
59
+ title?: React.ReactNode;
60
+ /** 說明文字(normal weight,多行 OK) */
61
+ description?: React.ReactNode;
62
+ /** 步驟計數(2 of 3);若需多步導覽 consumer 自行管理 current */
63
+ step?: CoachmarkStep;
64
+ /** Skip 按鈕 callback;不傳則不顯示 Skip。多步驟中間 / 最後步自動隱藏(有 onPrev 時) */
65
+ onSkip?: () => void;
66
+ /** Next 按鈕 callback;不傳則不顯示 Next */
67
+ onNext?: () => void;
68
+ /** Previous 按鈕 callback(多步 tour 第 2+ 步顯示);不傳則不顯示 */
69
+ onPrev?: () => void;
70
+ /**
71
+ * 最後一步 flag。影響 primary CTA 文字:
72
+ * - single step(無 onPrev 且 isLastStep):CTA = `doneLabel ?? '知道了'`
73
+ * - multi-step 最後步(有 onPrev 且 isLastStep):CTA = 'Done'
74
+ * - 其他:CTA = 'Next'
75
+ */
76
+ isLastStep?: boolean;
77
+ /** 自訂單步驟完成 CTA 文字(預設 `'知道了'`)。僅 single-step 使用 */
78
+ doneLabel?: string;
79
+ /** 浮層定位(對齊 Popover props) */
80
+ side?: 'top' | 'right' | 'bottom' | 'left';
81
+ align?: 'start' | 'center' | 'end';
82
+ sideOffset?: number;
83
+ /** 外殼寬度(預設 w-80 = 320px,比一般 Popover 寬,因要放 media + 文字) */
84
+ className?: string;
85
+ }
86
+ declare const Coachmark: React.ForwardRefExoticComponent<CoachmarkProps & React.RefAttributes<HTMLDivElement>>;
87
+ export declare const coachmarkMeta: {
88
+ readonly component: "Coachmark";
89
+ readonly family: null;
90
+ readonly variants: {};
91
+ readonly sizes: {};
92
+ readonly states: readonly ["default", "hover", "active", "focus-visible", "disabled"];
93
+ readonly tokens: {
94
+ readonly bg: readonly ["bg-muted"];
95
+ readonly fg: readonly ["text-fg-secondary", "text-foreground"];
96
+ readonly ring: readonly [];
97
+ };
98
+ };
99
+ export { Coachmark };
100
+ //# sourceMappingURL=coachmark.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coachmark.d.ts","sourceRoot":"","sources":["../../../src/components/Coachmark/coachmark.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAe9B;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,UAAU,aAAa;IACrB,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,cAAe,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC;IACtG,2BAA2B;IAC3B,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,sGAAsG;IACtG,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACtC,yDAAyD;IACzD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,yDAAyD;IACzD,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACvB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,cAAc,GAAG,KAAK,CAAC,SAAS,CAAA;IAChD,eAAe;IACf,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACvB,gCAAgC;IAChC,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC7B,gDAAgD;IAChD,IAAI,CAAC,EAAE,aAAa,CAAA;IACpB,+DAA+D;IAC/D,MAAM,CAAC,EAAE,MAAM,IAAI,CAAA;IACnB,mCAAmC;IACnC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAA;IACnB,oDAAoD;IACpD,MAAM,CAAC,EAAE,MAAM,IAAI,CAAA;IACnB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,6BAA6B;IAC7B,IAAI,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAA;IAC1C,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAA;IAClC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,yDAAyD;IACzD,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AASD,QAAA,MAAM,SAAS,uFA0Hd,CAAA;AAKD,eAAO,MAAM,aAAa;;;;;;;;;;;CAehB,CAAA;AAEV,OAAO,EAAE,SAAS,EAAE,CAAA"}