@qijenchen/design-system 0.1.0-beta.10

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 (507) hide show
  1. package/README.md +163 -0
  2. package/dist/components/Accordion/accordion.d.ts +37 -0
  3. package/dist/components/Accordion/accordion.d.ts.map +1 -0
  4. package/dist/components/Accordion/accordion.js +78 -0
  5. package/dist/components/Accordion/accordion.js.map +1 -0
  6. package/dist/components/Alert/alert.d.ts +47 -0
  7. package/dist/components/Alert/alert.d.ts.map +1 -0
  8. package/dist/components/Alert/alert.js +132 -0
  9. package/dist/components/Alert/alert.js.map +1 -0
  10. package/dist/components/AppShell/_demo-helpers.d.ts +49 -0
  11. package/dist/components/AppShell/_demo-helpers.d.ts.map +1 -0
  12. package/dist/components/AppShell/app-shell.d.ts +76 -0
  13. package/dist/components/AppShell/app-shell.d.ts.map +1 -0
  14. package/dist/components/AppShell/app-shell.js +214 -0
  15. package/dist/components/AppShell/app-shell.js.map +1 -0
  16. package/dist/components/AspectRatio/aspect-ratio.d.ts +40 -0
  17. package/dist/components/AspectRatio/aspect-ratio.d.ts.map +1 -0
  18. package/dist/components/AspectRatio/aspect-ratio.js +23 -0
  19. package/dist/components/AspectRatio/aspect-ratio.js.map +1 -0
  20. package/dist/components/Avatar/avatar.d.ts +85 -0
  21. package/dist/components/Avatar/avatar.d.ts.map +1 -0
  22. package/dist/components/Avatar/avatar.js +195 -0
  23. package/dist/components/Avatar/avatar.js.map +1 -0
  24. package/dist/components/Badge/badge.d.ts +43 -0
  25. package/dist/components/Badge/badge.d.ts.map +1 -0
  26. package/dist/components/Badge/badge.js +69 -0
  27. package/dist/components/Badge/badge.js.map +1 -0
  28. package/dist/components/Breadcrumb/breadcrumb.d.ts +163 -0
  29. package/dist/components/Breadcrumb/breadcrumb.d.ts.map +1 -0
  30. package/dist/components/Breadcrumb/breadcrumb.js +300 -0
  31. package/dist/components/Breadcrumb/breadcrumb.js.map +1 -0
  32. package/dist/components/BulkActionBar/bulk-action-bar.d.ts +46 -0
  33. package/dist/components/BulkActionBar/bulk-action-bar.d.ts.map +1 -0
  34. package/dist/components/BulkActionBar/bulk-action-bar.js +78 -0
  35. package/dist/components/BulkActionBar/bulk-action-bar.js.map +1 -0
  36. package/dist/components/Button/button-group.d.ts +49 -0
  37. package/dist/components/Button/button-group.d.ts.map +1 -0
  38. package/dist/components/Button/button-group.js +46 -0
  39. package/dist/components/Button/button-group.js.map +1 -0
  40. package/dist/components/Button/button.d.ts +203 -0
  41. package/dist/components/Button/button.d.ts.map +1 -0
  42. package/dist/components/Button/button.js +309 -0
  43. package/dist/components/Button/button.js.map +1 -0
  44. package/dist/components/Calendar/calendar.d.ts +81 -0
  45. package/dist/components/Calendar/calendar.d.ts.map +1 -0
  46. package/dist/components/Calendar/calendar.js +282 -0
  47. package/dist/components/Calendar/calendar.js.map +1 -0
  48. package/dist/components/Carousel/carousel.d.ts +61 -0
  49. package/dist/components/Carousel/carousel.d.ts.map +1 -0
  50. package/dist/components/Carousel/carousel.js +276 -0
  51. package/dist/components/Carousel/carousel.js.map +1 -0
  52. package/dist/components/Chart/chart.d.ts +94 -0
  53. package/dist/components/Chart/chart.d.ts.map +1 -0
  54. package/dist/components/Chart/chart.js +233 -0
  55. package/dist/components/Chart/chart.js.map +1 -0
  56. package/dist/components/Checkbox/checkbox-group.d.ts +58 -0
  57. package/dist/components/Checkbox/checkbox-group.d.ts.map +1 -0
  58. package/dist/components/Checkbox/checkbox-group.js +28 -0
  59. package/dist/components/Checkbox/checkbox-group.js.map +1 -0
  60. package/dist/components/Checkbox/checkbox.d.ts +73 -0
  61. package/dist/components/Checkbox/checkbox.d.ts.map +1 -0
  62. package/dist/components/Checkbox/checkbox.js +125 -0
  63. package/dist/components/Checkbox/checkbox.js.map +1 -0
  64. package/dist/components/Chip/chip.d.ts +54 -0
  65. package/dist/components/Chip/chip.d.ts.map +1 -0
  66. package/dist/components/Chip/chip.js +224 -0
  67. package/dist/components/Chip/chip.js.map +1 -0
  68. package/dist/components/CircularProgress/circular-progress.d.ts +40 -0
  69. package/dist/components/CircularProgress/circular-progress.d.ts.map +1 -0
  70. package/dist/components/CircularProgress/circular-progress.js +118 -0
  71. package/dist/components/CircularProgress/circular-progress.js.map +1 -0
  72. package/dist/components/Coachmark/coachmark.d.ts +100 -0
  73. package/dist/components/Coachmark/coachmark.d.ts.map +1 -0
  74. package/dist/components/Coachmark/coachmark.js +107 -0
  75. package/dist/components/Coachmark/coachmark.js.map +1 -0
  76. package/dist/components/Combobox/combobox.d.ts +150 -0
  77. package/dist/components/Combobox/combobox.d.ts.map +1 -0
  78. package/dist/components/Combobox/combobox.js +595 -0
  79. package/dist/components/Combobox/combobox.js.map +1 -0
  80. package/dist/components/Command/command.d.ts +106 -0
  81. package/dist/components/Command/command.d.ts.map +1 -0
  82. package/dist/components/Command/command.js +123 -0
  83. package/dist/components/Command/command.js.map +1 -0
  84. package/dist/components/DataTable/active-editor-controller.d.ts +66 -0
  85. package/dist/components/DataTable/active-editor-controller.d.ts.map +1 -0
  86. package/dist/components/DataTable/cell-registry.d.ts +37 -0
  87. package/dist/components/DataTable/cell-registry.d.ts.map +1 -0
  88. package/dist/components/DataTable/cell-registry.js +377 -0
  89. package/dist/components/DataTable/cell-registry.js.map +1 -0
  90. package/dist/components/DataTable/column-types.d.ts +145 -0
  91. package/dist/components/DataTable/column-types.d.ts.map +1 -0
  92. package/dist/components/DataTable/column-types.js +17 -0
  93. package/dist/components/DataTable/column-types.js.map +1 -0
  94. package/dist/components/DataTable/data-table-column-visibility-panel.d.ts +49 -0
  95. package/dist/components/DataTable/data-table-column-visibility-panel.d.ts.map +1 -0
  96. package/dist/components/DataTable/data-table-filter-panel.d.ts +30 -0
  97. package/dist/components/DataTable/data-table-filter-panel.d.ts.map +1 -0
  98. package/dist/components/DataTable/data-table-interaction-layer.d.ts +78 -0
  99. package/dist/components/DataTable/data-table-interaction-layer.d.ts.map +1 -0
  100. package/dist/components/DataTable/data-table-interaction-layer.js +220 -0
  101. package/dist/components/DataTable/data-table-interaction-layer.js.map +1 -0
  102. package/dist/components/DataTable/data-table-sort-manager.d.ts +19 -0
  103. package/dist/components/DataTable/data-table-sort-manager.d.ts.map +1 -0
  104. package/dist/components/DataTable/data-table.d.ts +181 -0
  105. package/dist/components/DataTable/data-table.d.ts.map +1 -0
  106. package/dist/components/DataTable/data-table.js +1851 -0
  107. package/dist/components/DataTable/data-table.js.map +1 -0
  108. package/dist/components/DataTable/filter-operators.d.ts +116 -0
  109. package/dist/components/DataTable/filter-operators.d.ts.map +1 -0
  110. package/dist/components/DataTable/filter-tree.d.ts +66 -0
  111. package/dist/components/DataTable/filter-tree.d.ts.map +1 -0
  112. package/dist/components/DataTable/lib/column-meta.d.ts +49 -0
  113. package/dist/components/DataTable/lib/column-meta.d.ts.map +1 -0
  114. package/dist/components/DateGrid/date-grid.d.ts +61 -0
  115. package/dist/components/DateGrid/date-grid.d.ts.map +1 -0
  116. package/dist/components/DateGrid/date-grid.js +168 -0
  117. package/dist/components/DateGrid/date-grid.js.map +1 -0
  118. package/dist/components/DatePicker/date-picker.d.ts +119 -0
  119. package/dist/components/DatePicker/date-picker.d.ts.map +1 -0
  120. package/dist/components/DatePicker/date-picker.js +743 -0
  121. package/dist/components/DatePicker/date-picker.js.map +1 -0
  122. package/dist/components/DescriptionList/description-list.d.ts +60 -0
  123. package/dist/components/DescriptionList/description-list.d.ts.map +1 -0
  124. package/dist/components/DescriptionList/description-list.js +77 -0
  125. package/dist/components/DescriptionList/description-list.js.map +1 -0
  126. package/dist/components/Dialog/dialog.d.ts +54 -0
  127. package/dist/components/Dialog/dialog.d.ts.map +1 -0
  128. package/dist/components/Dialog/dialog.js +151 -0
  129. package/dist/components/Dialog/dialog.js.map +1 -0
  130. package/dist/components/DropdownMenu/dropdown-menu.d.ts +111 -0
  131. package/dist/components/DropdownMenu/dropdown-menu.d.ts.map +1 -0
  132. package/dist/components/DropdownMenu/dropdown-menu.js +288 -0
  133. package/dist/components/DropdownMenu/dropdown-menu.js.map +1 -0
  134. package/dist/components/Empty/empty.d.ts +40 -0
  135. package/dist/components/Empty/empty.d.ts.map +1 -0
  136. package/dist/components/Empty/empty.js +66 -0
  137. package/dist/components/Empty/empty.js.map +1 -0
  138. package/dist/components/Field/field-context.d.ts +77 -0
  139. package/dist/components/Field/field-context.d.ts.map +1 -0
  140. package/dist/components/Field/field-context.js +37 -0
  141. package/dist/components/Field/field-context.js.map +1 -0
  142. package/dist/components/Field/field-types.d.ts +5 -0
  143. package/dist/components/Field/field-types.d.ts.map +1 -0
  144. package/dist/components/Field/field-types.js +13 -0
  145. package/dist/components/Field/field-types.js.map +1 -0
  146. package/dist/components/Field/field-wrapper.d.ts +17 -0
  147. package/dist/components/Field/field-wrapper.d.ts.map +1 -0
  148. package/dist/components/Field/field-wrapper.js +252 -0
  149. package/dist/components/Field/field-wrapper.js.map +1 -0
  150. package/dist/components/Field/field.d.ts +127 -0
  151. package/dist/components/Field/field.d.ts.map +1 -0
  152. package/dist/components/Field/field.js +295 -0
  153. package/dist/components/Field/field.js.map +1 -0
  154. package/dist/components/FieldControlGroup/field-control-group.d.ts +74 -0
  155. package/dist/components/FieldControlGroup/field-control-group.d.ts.map +1 -0
  156. package/dist/components/FieldControlGroup/field-control-group.js +62 -0
  157. package/dist/components/FieldControlGroup/field-control-group.js.map +1 -0
  158. package/dist/components/FileItem/file-item.d.ts +44 -0
  159. package/dist/components/FileItem/file-item.d.ts.map +1 -0
  160. package/dist/components/FileItem/file-item.js +202 -0
  161. package/dist/components/FileItem/file-item.js.map +1 -0
  162. package/dist/components/FileUpload/file-upload.d.ts +97 -0
  163. package/dist/components/FileUpload/file-upload.d.ts.map +1 -0
  164. package/dist/components/FileUpload/file-upload.js +231 -0
  165. package/dist/components/FileUpload/file-upload.js.map +1 -0
  166. package/dist/components/FileViewer/file-viewer-types.d.ts +73 -0
  167. package/dist/components/FileViewer/file-viewer-types.d.ts.map +1 -0
  168. package/dist/components/FileViewer/file-viewer.d.ts +82 -0
  169. package/dist/components/FileViewer/file-viewer.d.ts.map +1 -0
  170. package/dist/components/FileViewer/file-viewer.js +752 -0
  171. package/dist/components/FileViewer/file-viewer.js.map +1 -0
  172. package/dist/components/FileViewer/image-renderer.d.ts +9 -0
  173. package/dist/components/FileViewer/image-renderer.d.ts.map +1 -0
  174. package/dist/components/FileViewer/image-renderer.js +165 -0
  175. package/dist/components/FileViewer/image-renderer.js.map +1 -0
  176. package/dist/components/HoverCard/hover-card.d.ts +30 -0
  177. package/dist/components/HoverCard/hover-card.d.ts.map +1 -0
  178. package/dist/components/HoverCard/hover-card.js +61 -0
  179. package/dist/components/HoverCard/hover-card.js.map +1 -0
  180. package/dist/components/Input/input.d.ts +72 -0
  181. package/dist/components/Input/input.d.ts.map +1 -0
  182. package/dist/components/Input/input.js +148 -0
  183. package/dist/components/Input/input.js.map +1 -0
  184. package/dist/components/LinkInput/link-input.d.ts +46 -0
  185. package/dist/components/LinkInput/link-input.d.ts.map +1 -0
  186. package/dist/components/LinkInput/link-input.js +215 -0
  187. package/dist/components/LinkInput/link-input.js.map +1 -0
  188. package/dist/components/Menu/menu-item.d.ts +83 -0
  189. package/dist/components/Menu/menu-item.d.ts.map +1 -0
  190. package/dist/components/Menu/menu-item.js +209 -0
  191. package/dist/components/Menu/menu-item.js.map +1 -0
  192. package/dist/components/NameCard/name-card.d.ts +85 -0
  193. package/dist/components/NameCard/name-card.d.ts.map +1 -0
  194. package/dist/components/NameCard/name-card.js +153 -0
  195. package/dist/components/NameCard/name-card.js.map +1 -0
  196. package/dist/components/Notice/notice.d.ts +69 -0
  197. package/dist/components/Notice/notice.d.ts.map +1 -0
  198. package/dist/components/Notice/notice.js +121 -0
  199. package/dist/components/Notice/notice.js.map +1 -0
  200. package/dist/components/NumberInput/number-input.d.ts +57 -0
  201. package/dist/components/NumberInput/number-input.d.ts.map +1 -0
  202. package/dist/components/NumberInput/number-input.js +131 -0
  203. package/dist/components/NumberInput/number-input.js.map +1 -0
  204. package/dist/components/OverflowIndicator/overflow-indicator.d.ts +23 -0
  205. package/dist/components/OverflowIndicator/overflow-indicator.d.ts.map +1 -0
  206. package/dist/components/OverflowIndicator/overflow-indicator.js +111 -0
  207. package/dist/components/OverflowIndicator/overflow-indicator.js.map +1 -0
  208. package/dist/components/PeoplePicker/avatar-stack-overflow.d.ts +57 -0
  209. package/dist/components/PeoplePicker/avatar-stack-overflow.d.ts.map +1 -0
  210. package/dist/components/PeoplePicker/avatar-stack-overflow.js +35 -0
  211. package/dist/components/PeoplePicker/avatar-stack-overflow.js.map +1 -0
  212. package/dist/components/PeoplePicker/people-picker-helpers.d.ts +7 -0
  213. package/dist/components/PeoplePicker/people-picker-helpers.d.ts.map +1 -0
  214. package/dist/components/PeoplePicker/people-picker-helpers.js +25 -0
  215. package/dist/components/PeoplePicker/people-picker-helpers.js.map +1 -0
  216. package/dist/components/PeoplePicker/people-picker.d.ts +77 -0
  217. package/dist/components/PeoplePicker/people-picker.d.ts.map +1 -0
  218. package/dist/components/PeoplePicker/people-picker.js +263 -0
  219. package/dist/components/PeoplePicker/people-picker.js.map +1 -0
  220. package/dist/components/PeoplePicker/person-display.d.ts +66 -0
  221. package/dist/components/PeoplePicker/person-display.d.ts.map +1 -0
  222. package/dist/components/PeoplePicker/person-display.js +203 -0
  223. package/dist/components/PeoplePicker/person-display.js.map +1 -0
  224. package/dist/components/Popover/popover.d.ts +50 -0
  225. package/dist/components/Popover/popover.d.ts.map +1 -0
  226. package/dist/components/Popover/popover.js +113 -0
  227. package/dist/components/Popover/popover.js.map +1 -0
  228. package/dist/components/ProgressBar/progress-bar.d.ts +37 -0
  229. package/dist/components/ProgressBar/progress-bar.d.ts.map +1 -0
  230. package/dist/components/ProgressBar/progress-bar.js +86 -0
  231. package/dist/components/ProgressBar/progress-bar.js.map +1 -0
  232. package/dist/components/RadioGroup/radio-group.d.ts +78 -0
  233. package/dist/components/RadioGroup/radio-group.d.ts.map +1 -0
  234. package/dist/components/RadioGroup/radio-group.js +153 -0
  235. package/dist/components/RadioGroup/radio-group.js.map +1 -0
  236. package/dist/components/Rating/rating.d.ts +46 -0
  237. package/dist/components/Rating/rating.d.ts.map +1 -0
  238. package/dist/components/Rating/rating.js +179 -0
  239. package/dist/components/Rating/rating.js.map +1 -0
  240. package/dist/components/ScrollArea/scroll-area.d.ts +45 -0
  241. package/dist/components/ScrollArea/scroll-area.d.ts.map +1 -0
  242. package/dist/components/ScrollArea/scroll-area.js +65 -0
  243. package/dist/components/ScrollArea/scroll-area.js.map +1 -0
  244. package/dist/components/SegmentedControl/segmented-control.d.ts +102 -0
  245. package/dist/components/SegmentedControl/segmented-control.d.ts.map +1 -0
  246. package/dist/components/SegmentedControl/segmented-control.js +171 -0
  247. package/dist/components/SegmentedControl/segmented-control.js.map +1 -0
  248. package/dist/components/Select/select.d.ts +102 -0
  249. package/dist/components/Select/select.d.ts.map +1 -0
  250. package/dist/components/Select/select.js +435 -0
  251. package/dist/components/Select/select.js.map +1 -0
  252. package/dist/components/SelectMenu/select-menu.d.ts +103 -0
  253. package/dist/components/SelectMenu/select-menu.d.ts.map +1 -0
  254. package/dist/components/SelectMenu/select-menu.js +239 -0
  255. package/dist/components/SelectMenu/select-menu.js.map +1 -0
  256. package/dist/components/SelectionControl/selection-item.d.ts +69 -0
  257. package/dist/components/SelectionControl/selection-item.d.ts.map +1 -0
  258. package/dist/components/SelectionControl/selection-item.js +142 -0
  259. package/dist/components/SelectionControl/selection-item.js.map +1 -0
  260. package/dist/components/Separator/separator.d.ts +17 -0
  261. package/dist/components/Separator/separator.d.ts.map +1 -0
  262. package/dist/components/Separator/separator.js +39 -0
  263. package/dist/components/Separator/separator.js.map +1 -0
  264. package/dist/components/Sheet/sheet.d.ts +56 -0
  265. package/dist/components/Sheet/sheet.d.ts.map +1 -0
  266. package/dist/components/Sheet/sheet.js +145 -0
  267. package/dist/components/Sheet/sheet.js.map +1 -0
  268. package/dist/components/Sidebar/sidebar.d.ts +195 -0
  269. package/dist/components/Sidebar/sidebar.d.ts.map +1 -0
  270. package/dist/components/Sidebar/sidebar.js +826 -0
  271. package/dist/components/Sidebar/sidebar.js.map +1 -0
  272. package/dist/components/Skeleton/skeleton.d.ts +16 -0
  273. package/dist/components/Skeleton/skeleton.d.ts.map +1 -0
  274. package/dist/components/Skeleton/skeleton.js +30 -0
  275. package/dist/components/Skeleton/skeleton.js.map +1 -0
  276. package/dist/components/Slider/slider.d.ts +48 -0
  277. package/dist/components/Slider/slider.d.ts.map +1 -0
  278. package/dist/components/Slider/slider.js +108 -0
  279. package/dist/components/Slider/slider.js.map +1 -0
  280. package/dist/components/Steps/steps.d.ts +71 -0
  281. package/dist/components/Steps/steps.d.ts.map +1 -0
  282. package/dist/components/Steps/steps.js +583 -0
  283. package/dist/components/Steps/steps.js.map +1 -0
  284. package/dist/components/Switch/switch.d.ts +112 -0
  285. package/dist/components/Switch/switch.d.ts.map +1 -0
  286. package/dist/components/Switch/switch.js +179 -0
  287. package/dist/components/Switch/switch.js.map +1 -0
  288. package/dist/components/Tabs/tabs.d.ts +104 -0
  289. package/dist/components/Tabs/tabs.d.ts.map +1 -0
  290. package/dist/components/Tabs/tabs.js +316 -0
  291. package/dist/components/Tabs/tabs.js.map +1 -0
  292. package/dist/components/Tag/tag.d.ts +86 -0
  293. package/dist/components/Tag/tag.d.ts.map +1 -0
  294. package/dist/components/Tag/tag.js +172 -0
  295. package/dist/components/Tag/tag.js.map +1 -0
  296. package/dist/components/Textarea/textarea.d.ts +74 -0
  297. package/dist/components/Textarea/textarea.d.ts.map +1 -0
  298. package/dist/components/Textarea/textarea.js +224 -0
  299. package/dist/components/Textarea/textarea.js.map +1 -0
  300. package/dist/components/TimePicker/time-columns.d.ts +46 -0
  301. package/dist/components/TimePicker/time-columns.d.ts.map +1 -0
  302. package/dist/components/TimePicker/time-columns.js +173 -0
  303. package/dist/components/TimePicker/time-columns.js.map +1 -0
  304. package/dist/components/TimePicker/time-picker.d.ts +94 -0
  305. package/dist/components/TimePicker/time-picker.d.ts.map +1 -0
  306. package/dist/components/TimePicker/time-picker.js +253 -0
  307. package/dist/components/TimePicker/time-picker.js.map +1 -0
  308. package/dist/components/Toast/toast.d.ts +61 -0
  309. package/dist/components/Toast/toast.d.ts.map +1 -0
  310. package/dist/components/Toast/toast.js +76 -0
  311. package/dist/components/Toast/toast.js.map +1 -0
  312. package/dist/components/Tooltip/tooltip.d.ts +20 -0
  313. package/dist/components/Tooltip/tooltip.d.ts.map +1 -0
  314. package/dist/components/Tooltip/tooltip.js +53 -0
  315. package/dist/components/Tooltip/tooltip.js.map +1 -0
  316. package/dist/components/TreeView/tree-view.d.ts +166 -0
  317. package/dist/components/TreeView/tree-view.d.ts.map +1 -0
  318. package/dist/components/TreeView/tree-view.js +617 -0
  319. package/dist/components/TreeView/tree-view.js.map +1 -0
  320. package/dist/hooks/use-controllable.d.ts +16 -0
  321. package/dist/hooks/use-controllable.d.ts.map +1 -0
  322. package/dist/hooks/use-controllable.js +26 -0
  323. package/dist/hooks/use-controllable.js.map +1 -0
  324. package/dist/hooks/use-is-narrow-viewport.d.ts +2 -0
  325. package/dist/hooks/use-is-narrow-viewport.d.ts.map +1 -0
  326. package/dist/hooks/use-is-narrow-viewport.js +19 -0
  327. package/dist/hooks/use-is-narrow-viewport.js.map +1 -0
  328. package/dist/hooks/use-is-touch-device.d.ts +8 -0
  329. package/dist/hooks/use-is-touch-device.d.ts.map +1 -0
  330. package/dist/hooks/use-is-touch-device.js +16 -0
  331. package/dist/hooks/use-is-touch-device.js.map +1 -0
  332. package/dist/hooks/use-overflow-items.d.ts +124 -0
  333. package/dist/hooks/use-overflow-items.d.ts.map +1 -0
  334. package/dist/hooks/use-overflow-items.js +97 -0
  335. package/dist/hooks/use-overflow-items.js.map +1 -0
  336. package/dist/index.d.ts +74 -0
  337. package/dist/index.d.ts.map +1 -0
  338. package/dist/index.js +371 -0
  339. package/dist/index.js.map +1 -0
  340. package/dist/lib/drag-visual.d.ts +158 -0
  341. package/dist/lib/drag-visual.d.ts.map +1 -0
  342. package/dist/lib/drag-visual.js +96 -0
  343. package/dist/lib/drag-visual.js.map +1 -0
  344. package/dist/lib/i18n/i18n-context.d.ts +105 -0
  345. package/dist/lib/i18n/i18n-context.d.ts.map +1 -0
  346. package/dist/lib/multi-select-ordering.d.ts +54 -0
  347. package/dist/lib/multi-select-ordering.d.ts.map +1 -0
  348. package/dist/lib/multi-select-ordering.js +13 -0
  349. package/dist/lib/multi-select-ordering.js.map +1 -0
  350. package/dist/lib/utils.d.ts +12 -0
  351. package/dist/lib/utils.d.ts.map +1 -0
  352. package/dist/lib/utils.js +79 -0
  353. package/dist/lib/utils.js.map +1 -0
  354. package/dist/patterns/element-anatomy/item-anatomy.d.ts +370 -0
  355. package/dist/patterns/element-anatomy/item-anatomy.d.ts.map +1 -0
  356. package/dist/patterns/element-anatomy/item-anatomy.js +272 -0
  357. package/dist/patterns/element-anatomy/item-anatomy.js.map +1 -0
  358. package/dist/patterns/header-canonical/chrome-header.d.ts +80 -0
  359. package/dist/patterns/header-canonical/chrome-header.d.ts.map +1 -0
  360. package/dist/patterns/header-canonical/chrome-header.js +75 -0
  361. package/dist/patterns/header-canonical/chrome-header.js.map +1 -0
  362. package/dist/patterns/horizontal-overflow/horizontal-overflow.d.ts +101 -0
  363. package/dist/patterns/horizontal-overflow/horizontal-overflow.d.ts.map +1 -0
  364. package/dist/patterns/horizontal-overflow/horizontal-overflow.js +105 -0
  365. package/dist/patterns/horizontal-overflow/horizontal-overflow.js.map +1 -0
  366. package/dist/patterns/overlay-surface/overlay-surface.d.ts +28 -0
  367. package/dist/patterns/overlay-surface/overlay-surface.d.ts.map +1 -0
  368. package/dist/patterns/overlay-surface/overlay-surface.js +85 -0
  369. package/dist/patterns/overlay-surface/overlay-surface.js.map +1 -0
  370. package/dist/patterns/resize-handle/resize-handle.d.ts +102 -0
  371. package/dist/patterns/resize-handle/resize-handle.d.ts.map +1 -0
  372. package/dist/patterns/resize-handle/resize-handle.js +74 -0
  373. package/dist/patterns/resize-handle/resize-handle.js.map +1 -0
  374. package/dist/react-day-picker.css +457 -0
  375. package/dist/stories-helpers/anatomy/anatomy-utils.d.ts +40 -0
  376. package/dist/stories-helpers/anatomy/anatomy-utils.d.ts.map +1 -0
  377. package/dist/tokens/elevation/overlay-geometry.d.ts +12 -0
  378. package/dist/tokens/elevation/overlay-geometry.d.ts.map +1 -0
  379. package/dist/tokens/elevation/overlay-geometry.js +7 -0
  380. package/dist/tokens/elevation/overlay-geometry.js.map +1 -0
  381. package/dist/tokens/motion/motion.d.ts +15 -0
  382. package/dist/tokens/motion/motion.d.ts.map +1 -0
  383. package/dist/tokens/motion/motion.js +9 -0
  384. package/dist/tokens/motion/motion.js.map +1 -0
  385. package/dist/tokens/uiSize/icon-size.d.ts +53 -0
  386. package/dist/tokens/uiSize/icon-size.d.ts.map +1 -0
  387. package/package.json +92 -0
  388. package/src/README.md +32 -0
  389. package/src/components/Accordion/accordion.tsx +104 -0
  390. package/src/components/Alert/alert.tsx +188 -0
  391. package/src/components/AppShell/_demo-helpers.tsx +198 -0
  392. package/src/components/AppShell/app-shell.tsx +364 -0
  393. package/src/components/AspectRatio/aspect-ratio.tsx +58 -0
  394. package/src/components/Avatar/avatar.tsx +368 -0
  395. package/src/components/Badge/badge.tsx +104 -0
  396. package/src/components/Breadcrumb/breadcrumb.tsx +619 -0
  397. package/src/components/BulkActionBar/bulk-action-bar.tsx +156 -0
  398. package/src/components/Button/button-group.tsx +96 -0
  399. package/src/components/Button/button.tsx +539 -0
  400. package/src/components/Calendar/calendar.tsx +411 -0
  401. package/src/components/Carousel/carousel.tsx +371 -0
  402. package/src/components/Chart/chart.tsx +376 -0
  403. package/src/components/Checkbox/checkbox-group.tsx +94 -0
  404. package/src/components/Checkbox/checkbox.tsx +237 -0
  405. package/src/components/Chip/chip.tsx +359 -0
  406. package/src/components/CircularProgress/circular-progress.tsx +204 -0
  407. package/src/components/Coachmark/coachmark.tsx +255 -0
  408. package/src/components/Combobox/combobox.tsx +826 -0
  409. package/src/components/Command/command.tsx +187 -0
  410. package/src/components/DataTable/active-editor-controller.ts +72 -0
  411. package/src/components/DataTable/cell-registry.tsx +520 -0
  412. package/src/components/DataTable/column-types.ts +180 -0
  413. package/src/components/DataTable/data-table-column-visibility-panel.tsx +261 -0
  414. package/src/components/DataTable/data-table-filter-panel.tsx +813 -0
  415. package/src/components/DataTable/data-table-interaction-layer.tsx +483 -0
  416. package/src/components/DataTable/data-table-sort-manager.tsx +210 -0
  417. package/src/components/DataTable/data-table.css +165 -0
  418. package/src/components/DataTable/data-table.tsx +2924 -0
  419. package/src/components/DataTable/filter-operators.ts +225 -0
  420. package/src/components/DataTable/filter-tree.ts +313 -0
  421. package/src/components/DataTable/lib/column-meta.ts +79 -0
  422. package/src/components/DateGrid/date-grid.tsx +209 -0
  423. package/src/components/DatePicker/date-picker.tsx +1114 -0
  424. package/src/components/DescriptionList/description-list.tsx +141 -0
  425. package/src/components/Dialog/dialog.tsx +267 -0
  426. package/src/components/DropdownMenu/dropdown-menu.tsx +475 -0
  427. package/src/components/Empty/empty.tsx +108 -0
  428. package/src/components/Field/field-context.ts +136 -0
  429. package/src/components/Field/field-types.ts +52 -0
  430. package/src/components/Field/field-wrapper.tsx +348 -0
  431. package/src/components/Field/field.tsx +535 -0
  432. package/src/components/FieldControlGroup/field-control-group.tsx +136 -0
  433. package/src/components/FileItem/file-item.tsx +322 -0
  434. package/src/components/FileUpload/file-upload.tsx +326 -0
  435. package/src/components/FileViewer/file-viewer-types.ts +76 -0
  436. package/src/components/FileViewer/file-viewer.tsx +1065 -0
  437. package/src/components/FileViewer/image-renderer.tsx +256 -0
  438. package/src/components/HoverCard/hover-card.tsx +79 -0
  439. package/src/components/Input/input.tsx +233 -0
  440. package/src/components/LinkInput/link-input.tsx +304 -0
  441. package/src/components/Menu/menu-item.tsx +334 -0
  442. package/src/components/NameCard/name-card.tsx +319 -0
  443. package/src/components/Notice/notice.tsx +196 -0
  444. package/src/components/NumberInput/number-input.tsx +203 -0
  445. package/src/components/OverflowIndicator/overflow-indicator.tsx +156 -0
  446. package/src/components/PeoplePicker/avatar-stack-overflow.ts +100 -0
  447. package/src/components/PeoplePicker/people-picker-helpers.ts +76 -0
  448. package/src/components/PeoplePicker/people-picker.tsx +455 -0
  449. package/src/components/PeoplePicker/person-display.tsx +358 -0
  450. package/src/components/Popover/popover.tsx +183 -0
  451. package/src/components/ProgressBar/progress-bar.tsx +157 -0
  452. package/src/components/README.md +58 -0
  453. package/src/components/RadioGroup/radio-group.tsx +261 -0
  454. package/src/components/Rating/rating.tsx +295 -0
  455. package/src/components/ScrollArea/scroll-area.tsx +110 -0
  456. package/src/components/SegmentedControl/segmented-control.tsx +304 -0
  457. package/src/components/Select/select.tsx +658 -0
  458. package/src/components/SelectMenu/select-menu.tsx +430 -0
  459. package/src/components/SelectionControl/selection-item.tsx +261 -0
  460. package/src/components/Separator/separator.tsx +48 -0
  461. package/src/components/Sheet/sheet.tsx +240 -0
  462. package/src/components/Sidebar/sidebar.tsx +1280 -0
  463. package/src/components/Skeleton/skeleton.tsx +35 -0
  464. package/src/components/Slider/slider.tsx +158 -0
  465. package/src/components/Steps/steps.tsx +850 -0
  466. package/src/components/Switch/switch.tsx +285 -0
  467. package/src/components/Tabs/tabs.tsx +515 -0
  468. package/src/components/Tag/tag.tsx +246 -0
  469. package/src/components/Textarea/textarea.tsx +280 -0
  470. package/src/components/TimePicker/time-columns.tsx +260 -0
  471. package/src/components/TimePicker/time-picker.tsx +419 -0
  472. package/src/components/Toast/toast.tsx +129 -0
  473. package/src/components/Tooltip/tooltip.tsx +68 -0
  474. package/src/components/TreeView/tree-view.tsx +1031 -0
  475. package/src/hooks/use-controllable.ts +40 -0
  476. package/src/hooks/use-is-narrow-viewport.ts +19 -0
  477. package/src/hooks/use-is-touch-device.ts +21 -0
  478. package/src/hooks/use-overflow-items.ts +256 -0
  479. package/src/index.ts +85 -0
  480. package/src/lib/README.md +82 -0
  481. package/src/lib/drag-visual.ts +272 -0
  482. package/src/lib/i18n/README.md +60 -0
  483. package/src/lib/i18n/i18n-context.tsx +129 -0
  484. package/src/lib/multi-select-ordering.ts +61 -0
  485. package/src/lib/utils.ts +93 -0
  486. package/src/patterns/README.md +67 -0
  487. package/src/patterns/element-anatomy/item-anatomy.tsx +744 -0
  488. package/src/patterns/header-canonical/chrome-header.tsx +175 -0
  489. package/src/patterns/header-canonical/header-canonical.css +27 -0
  490. package/src/patterns/horizontal-overflow/horizontal-overflow.tsx +217 -0
  491. package/src/patterns/overlay-surface/overlay-surface.tsx +191 -0
  492. package/src/patterns/resize-handle/resize-handle.tsx +188 -0
  493. package/src/stories-helpers/anatomy/anatomy-utils.tsx +64 -0
  494. package/src/styles/preset.css +31 -0
  495. package/src/styles/tokens.css +35 -0
  496. package/src/tokens/README.md +53 -0
  497. package/src/tokens/color/primitives.css +429 -0
  498. package/src/tokens/color/semantic.css +539 -0
  499. package/src/tokens/elevation/overlay-geometry.ts +13 -0
  500. package/src/tokens/layoutSpace/layoutSpace.css +36 -0
  501. package/src/tokens/motion/motion.css +30 -0
  502. package/src/tokens/motion/motion.ts +17 -0
  503. package/src/tokens/opacity/opacity.css +23 -0
  504. package/src/tokens/radius/radius.css +19 -0
  505. package/src/tokens/typography/typography.css +118 -0
  506. package/src/tokens/uiSize/icon-size.ts +52 -0
  507. package/src/tokens/uiSize/uiSize.css +125 -0
@@ -0,0 +1,370 @@
1
+ import * as React from "react";
2
+ import type { LucideIcon } from "lucide-react";
3
+ import { type AvatarProps } from "../../components/Avatar/avatar";
4
+ export interface InlineActionConfig {
5
+ icon: LucideIcon;
6
+ /** aria-label,同時作為 tooltip 來源 */
7
+ label: string;
8
+ /**
9
+ * 點擊 handler。可選接收 React 事件物件——有需要時可呼叫 `stopPropagation()` 避免
10
+ * 事件冒泡到父層(例如 Select 清除按鈕在 popover trigger 內,不想觸發 popover open)。
11
+ */
12
+ onClick: (e?: React.MouseEvent<HTMLButtonElement>) => void;
13
+ }
14
+ /**
15
+ * Item Layout — 共用工具與常數
16
+ *
17
+ * 這個檔案不是元件,是 `item-anatomy.spec.md` 的 code-level 實作。
18
+ * 所有 row primitives(`MenuItem` / `TreeItem` / `SidebarMenuButton` /
19
+ * `SelectionItem`)**必須 import 本 module 的 ICON_SIZE 和 helpers**,
20
+ * 不要各自複製常數或 wrapper className——單一 source of truth,避免不一致。
21
+ *
22
+ * 詳細規則見 `item-anatomy.spec.md`。
23
+ */
24
+ /** Row primitive 的 size 變體,對齊 `--field-height-*` token family */
25
+ export type RowSize = "sm" | "md" | "lg";
26
+ /**
27
+ * Icon 尺寸(px)per row size。
28
+ *
29
+ * - sm / md: 16px(標準 row icon)
30
+ * - lg: 20px(對齊 text-body-lg 的視覺重量)
31
+ *
32
+ * **用法**:透過 Lucide icon 的 `size` prop 直接傳入,不要用 CSS `[&>svg]:size-*`
33
+ * selector——當 icon 被包在 `<ItemPrefix>` 的 `h-[1lh]` wrapper 內時,
34
+ * `>` 直接子選擇器會失效,Lucide icon 會 fallback 到預設 24px。
35
+ *
36
+ * ```tsx
37
+ * import { ICON_SIZE } from "../../patterns/element-anatomy/item-anatomy"
38
+ *
39
+ * const iconPx = ICON_SIZE[size] // size: RowSize
40
+ * <MyLucideIcon size={iconPx} />
41
+ * ```
42
+ */
43
+ export declare const ICON_SIZE: Record<RowSize, number>;
44
+ /**
45
+ * Avatar 尺寸(px)per row size,分 inline / block 兩種模式。
46
+ *
47
+ * - **inline**(無 description,大宗情境)→ 對齊第一行 label,用 `h-[1lh]` 容器
48
+ * sm: 20, md: 24, lg: 24
49
+ * - **block**(有 description,avatar 跨越 label + desc 兩行)→ 對齊文字塊中心
50
+ * sm: 32, md: 32, lg: 40
51
+ *
52
+ * **用法**:所有 row primitive 的 consumer(包含 `asChild` pattern 的 Sidebar / Tree
53
+ * consumer)**必須**從本 module import 這個常數,**不可硬寫 `size={24}`**。
54
+ * 硬寫會讓 sm 變體的 avatar 尺寸錯誤、跟 ICON_SIZE 對齊規則脫鉤。
55
+ *
56
+ * ```tsx
57
+ * import { AVATAR_SIZE } from "../../patterns/element-anatomy/item-anatomy"
58
+ *
59
+ * const { size } = useSidebar() // RowSize
60
+ * <Avatar size={AVATAR_SIZE.inline[size]} />
61
+ * ```
62
+ *
63
+ * Canonical 實作:`MenuItem` 的內部 `AVATAR_SIZE` 查表(即將 re-export 自此)。
64
+ */
65
+ export declare const AVATAR_SIZE: {
66
+ readonly inline: {
67
+ readonly sm: 20;
68
+ readonly md: 24;
69
+ readonly lg: 24;
70
+ };
71
+ readonly block: {
72
+ readonly sm: 32;
73
+ readonly md: 32;
74
+ readonly lg: 40;
75
+ };
76
+ };
77
+ /**
78
+ * 回傳 uniform prefix slot 的 inline style(CSS variable form)。
79
+ *
80
+ * 用法:Row-primitive 頂層容器(例如 `<SidebarProvider uniformPrefix>` 的 wrapper)
81
+ * 把這個 style 套在 `style` prop 上(預先放在 `--mixed-prefix-slot` 候選位置,
82
+ * 由外層 CSS `:has()` 條件化套到 `--item-prefix-slot`),子樹內所有 `<ItemPrefix>` /
83
+ * `<ItemIcon>` / `<ItemAvatar>` 會自動用固定寬槽對齊。
84
+ *
85
+ * 槽寬 = `AVATAR_SIZE.inline[size]`(20/24/24 @ sm/md/lg)——以最大的 inline
86
+ * prefix(avatar)為基準,icon 在槽內 `justify-center`。
87
+ *
88
+ * ```tsx
89
+ * <ul style={getUniformPrefixSlotStyle(size)}>
90
+ * <ItemIcon icon={Folder} /> ← 16px icon 在 24px 槽內置中
91
+ * <ItemAvatar alt="GitHub" /> ← 24px logo 填滿槽
92
+ * </ul>
93
+ * ```
94
+ */
95
+ export declare function getUniformPrefixSlotStyle(size: RowSize): React.CSSProperties;
96
+ /**
97
+ * Inline action(suffix 裡的 hover-action icon button)hover 背景尺寸(px)。
98
+ * 規則:icon size + 2px(每邊 +1px,用 absolute positioning 溢出不影響排版)。
99
+ * 對齊 `item-anatomy.spec.md`「Inline Action 設計規格」節。
100
+ */
101
+ export declare const INLINE_ACTION_HOVER_BG_SIZE: Record<RowSize, number>;
102
+ /**
103
+ * `ROW_PADDING_BY_SIZE` — Family 1+2 row primitive 的 size → padding + typography 公式 SSOT
104
+ *
105
+ * Formula(canonical):`py = (field-height - 1lh) / 2`,對齊 1em text 到 field-height center。
106
+ *
107
+ * **消費者**:menuItemVariants / sidebarMenuButtonVariants / treeItemVariants / 未來 row primitive
108
+ * **Rationale**:前先 3 cva 各自寫同一公式 → drift risk(item-anatomy.spec 有明文「SidebarMenuButton
109
+ * 獨立實作風險」)。抽本 export 後改**一處全同步**,risk 消失(對齊 Meta-Pattern M17「SSOT 必可傳播」)。
110
+ *
111
+ * 2026-04-24 D Phase 1+2 consolidation 建立。
112
+ */
113
+ export declare const ROW_PADDING_BY_SIZE: Record<RowSize, string>;
114
+ /**
115
+ * `<ItemPrefix>` — Row primitive 的 prefix slot wrapper。
116
+ *
117
+ * 把 prefix(icon / avatar / checkbox / indicator)包進 `h-[1lh]` 容器,
118
+ * 強制對齊第一行文字中線。這是 item-layout 的底層規則(詳見 spec「Prefix 垂直對齊」)。
119
+ *
120
+ * **為什麼**:
121
+ * - Row primitive 的 outer flex 是 `items-start`(多行 label 時 prefix 不飄移)
122
+ * - 單行時 prefix 透過這個 wrapper 強制對齊第一行中線,視覺效果 = `items-center`
123
+ * - 不同尺寸的 prefix(icon 16、Avatar 24、Checkbox 20)都能穩定置中
124
+ *
125
+ * 用法:
126
+ * ```tsx
127
+ * <div className="flex items-start gap-2">
128
+ * <ItemPrefix>
129
+ * <Avatar size={24} />
130
+ * </ItemPrefix>
131
+ * <span className="min-w-0 flex-1 truncate">{label}</span>
132
+ * </div>
133
+ * ```
134
+ *
135
+ * asChild 的 consumer(例如 `<SidebarMenuButton asChild>`)**必須自己**用這個 wrapper
136
+ * 包 prefix,不能省略。
137
+ */
138
+ export declare const ItemPrefix: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLSpanElement> & React.RefAttributes<HTMLSpanElement>>;
139
+ /**
140
+ * `itemPrefixAlignVariants` — Prefix 對齊高度的 cva SSOT(for 複雜 prefix 結構)。
141
+ *
142
+ * ── 存在的理由 ──
143
+ * `<ItemPrefix>` primitive 預設單一 child(icon / avatar 任一)+ inline 對齊。
144
+ * 但**複雜 prefix 結構**(e.g. MenuItem 可同時含 checkbox + icon/avatar 多 child)
145
+ * 或**block mode**(大 prefix + description 對齊塊中心)需要自建 wrapper cva。
146
+ * 本 cva 把 block formula SSOT 化,讓 MenuItem 等 consumer 共用,
147
+ * 改值一處(token or cva)→ 所有 block-prefix consumer 同步。
148
+ *
149
+ * ── Align 變體(對齊 item-anatomy.spec.md「24px 閾值對齊規則」) ──
150
+ * - `"inline"`:`h-[1lh]`,小 prefix(≤ 24px)對齊 label 第一行
151
+ * - `"block-sm"` / `"block-md"`:大 prefix + scanning desc(sm/md menu),
152
+ * 高度 = label(1lh) + gap(token) + desc(caption × 1.3)
153
+ * - `"block-lg"`:大 prefix + scanning desc(lg menu),desc 改為 body × 1.3
154
+ *
155
+ * ── Consumer ──
156
+ * MenuItem(inline / block-sm / block-md / block-lg)。其他 row primitive 簡單情境
157
+ * 直接用 `<ItemPrefix>` 就好,不需此 cva。
158
+ *
159
+ * ── SSOT 傳播 ──
160
+ * gap 用 `var(--item-gap-label-desc)` token;font-size 用 token-awareness
161
+ * (`var(--font-caption-size)` / `var(--font-body-size)`)。改 token → 公式同步。
162
+ */
163
+ export declare const itemPrefixAlignVariants: (props?: ({
164
+ align?: "inline" | "block-sm" | "block-md" | "block-lg" | null | undefined;
165
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
166
+ /**
167
+ * `<ItemLabel>` — Row primitive 的 label span。
168
+ *
169
+ * 預設 `min-w-0 flex-1 truncate`——單行截斷,佔滿剩餘 flex 空間。
170
+ * 加 `data-sidebar="menu-label"` attribute 讓 sidebar icon 模式的 CSS selector 能命中。
171
+ *
172
+ * 用法:
173
+ * ```tsx
174
+ * <ItemLabel>{label}</ItemLabel>
175
+ * ```
176
+ */
177
+ export declare const ItemLabel: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLSpanElement> & React.RefAttributes<HTMLSpanElement>>;
178
+ /**
179
+ * `<ItemContent>` — Row primitive 的 label + optional description 內容區(SSOT)。
180
+ *
181
+ * ── 存在的唯一理由 ──
182
+ * 封裝「flex-col + label + description + `mt-[var(--item-gap-label-desc)]` gap」結構,
183
+ * 避免 13+ 消費者各自 hard-code `mt-0.5`。改 token 一處,全 DS 同步。
184
+ *
185
+ * ── Consumer 偏離 canonical ──
186
+ * 消費端若有**確切合理理由**不用 `<ItemContent>` / 需自訂 label/desc 行為,必在
187
+ * 該元件 `spec.md` 明文寫下 rationale(對齊 item-anatomy canonical「偏離必明文」)。
188
+ * 合法偏離範例:
189
+ * - MenuItem 的 `leading-compact + text-caption` scanning-mode typography
190
+ * → MenuItem spec 明文 rationale + 消費 `--item-gap-label-desc` token 直接用
191
+ * - SelectionItem 的 control slot 跟 block formula 綁定
192
+ * → SelectionItem spec 明文 rationale
193
+ *
194
+ * ── Props ──
195
+ * - `label`:label 內容(ReactNode,必填)
196
+ * - `description`:description 內容(ReactNode,optional)
197
+ * - `mode`:typography tier(scanning vs reading,世界級對齊 Material `dense` / Carbon `size` / Ant `size`)
198
+ * - `"reading"`(預設):繼承 parent `text-body`(14px / 1.5 leading),舒適閱讀(Family 2 / Material body-large 派)
199
+ * - `"scanning"`:desc 縮為 `text-caption`(12px)+ `leading-compact`(1.3),緊湊掃視
200
+ * (Family 1 Menu item / Material body-medium dense 派)
201
+ * - `descriptionTone`:desc 顏色語意
202
+ * - `"secondary"`(預設):`text-fg-secondary`
203
+ * - `"error"`:`text-error-text`
204
+ * - `"muted"`:`text-fg-muted`
205
+ * - `descriptionWrap`:desc 多行 wrap(預設 true)/ false = truncate
206
+ * - `labelClassName` / `descriptionClassName`:escape hatches(明文 rationale 才用)
207
+ *
208
+ * ── World-class benchmark ──
209
+ * 6 家 DS(Material / Polaris / Atlassian / Apple HIG / Carbon / Ant)一致用
210
+ * 14/20 vs 16/24 兩擋 body 表達 scanning vs reading。API 兩派:(A)密度 prop
211
+ * Material `dense` / Carbon `size` / Ant `size`(本 DS 採 A 派);(B)typography
212
+ * token 手選 Polaris / Atlassian / Apple。
213
+ */
214
+ export interface ItemContentProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "title"> {
215
+ label: React.ReactNode;
216
+ description?: React.ReactNode;
217
+ /**
218
+ * Typography mode — **leading 行為**(跟 size 正交的另一維):
219
+ * - `"reading"`(預設):default leading(1.5)— Family 2 List item 舒適閱讀
220
+ * - `"scanning"`:`leading-compact`(1.3)+ desc 降一 tier —— Menu item / Step 掃視
221
+ */
222
+ mode?: "reading" | "scanning";
223
+ /**
224
+ * Size tier — **label 字級**(跟 mode 正交的另一維):
225
+ * - `"md"`(預設):label `text-body`(14)
226
+ * - `"lg"`:label `text-body-lg`(16)— desc 永遠比 label 小一 tier(body)
227
+ *
228
+ * 2 × 2 = 4 typography 組合,對應 4 tokens:
229
+ * - md + reading → body(14/1.5) + body(14/1.5)
230
+ * - md + scanning → body(14/1.3) + caption(12/1.3)
231
+ * - lg + reading → body-lg(16/1.5) + body(14/1.5)
232
+ * - lg + scanning → body-lg(16/1.3) + body(14/1.3)
233
+ */
234
+ size?: "md" | "lg";
235
+ descriptionTone?: "secondary" | "error" | "muted" | "disabled";
236
+ descriptionWrap?: boolean;
237
+ /**
238
+ * Description 多行截斷(line-clamp-N)。undefined = 不 clamp(自由 wrap)。
239
+ * Tailwind line-clamp utilities 支援 1-6。
240
+ */
241
+ descriptionClamp?: number;
242
+ /**
243
+ * Description `break-words`(default `false`,僅在 consumer 需要時 opt-in)。
244
+ * 使用情境:SelectionItem / Steps 這類 description 可能塞長英文 token 需 break。
245
+ */
246
+ descriptionBreakWords?: boolean;
247
+ /**
248
+ * Label truncate (default `true`, 對齊 row-item 大宗 idiom)。
249
+ * Opt-out(`false`)for card-like consumers(e.g. NameCard label 允許 wrap)。
250
+ * World-class 對照:Material `ListItemText primaryTypographyProps.noWrap` default true。
251
+ */
252
+ labelTruncate?: boolean;
253
+ labelClassName?: string;
254
+ descriptionClassName?: string;
255
+ }
256
+ export declare const ItemContent: React.ForwardRefExoticComponent<ItemContentProps & React.RefAttributes<HTMLDivElement>>;
257
+ export declare const RowSizeProvider: React.Provider<RowSize | null>;
258
+ /**
259
+ * 讀取當前 row size。在 row primitive 子樹外呼叫會回 fallback(預設 "md")。
260
+ * Row primitive 實作者不該呼叫這個——你們已經知道自己的 size。
261
+ * 這個 hook 是給 `<ItemIcon>` / `<ItemAvatar>` 和 asChild consumer 的逃生艙用。
262
+ */
263
+ export declare function useRowSize(fallback?: RowSize): RowSize;
264
+ export interface ItemIconProps extends Omit<React.SVGAttributes<SVGSVGElement>, "children"> {
265
+ /** Lucide icon 元件(不是 JSX element) */
266
+ icon: LucideIcon;
267
+ }
268
+ /**
269
+ * `<ItemIcon icon={Folder} />` — 自動查 `ICON_SIZE[rowSize]`,包在 `ItemPrefix` 內。
270
+ * 永遠對齊第一行 label(item-layout 的 icon 永遠 inline)。
271
+ */
272
+ export declare const ItemIcon: React.ForwardRefExoticComponent<ItemIconProps & React.RefAttributes<SVGSVGElement>>;
273
+ export interface ItemAvatarProps extends Omit<AvatarProps, "size"> {
274
+ /**
275
+ * 對齊模式(選填,預設 `"inline"`):
276
+ * - `"inline"`:視覺重量輕的 avatar,對齊第一行 label(20/24/24 @ sm/md/lg)
277
+ * - `"block"`:視覺重量重的 avatar,對齊 label + description 文字塊(32/32/40 @ sm/md/lg)
278
+ *
279
+ * 預設 inline——大宗情境(扁平 row、footer user、主清單)都用這個。
280
+ * 只有 avatar 是 item 主體(人物卡、顯著身份辨識)才用 block。
281
+ *
282
+ * 詳見 `item-anatomy.spec.md`「Avatar 尺寸選擇」節,含 24px 對齊模式閾值規則。
283
+ */
284
+ mode?: "inline" | "block";
285
+ }
286
+ /**
287
+ * `<ItemAvatar alt="Alan" color="blue" />` — 自動查 `AVATAR_SIZE[mode][rowSize]`,
288
+ * 包在 `ItemPrefix` 內。
289
+ *
290
+ * asChild consumer 的標準用法——不需知道 size,不需 import AVATAR_SIZE,
291
+ * 不可能硬寫錯誤尺寸。
292
+ */
293
+ export declare const ItemAvatar: React.ForwardRefExoticComponent<ItemAvatarProps & React.RefAttributes<HTMLDivElement>>;
294
+ export interface ItemInlineActionButtonProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, "children"> {
295
+ /** Lucide icon 元件 */
296
+ icon: LucideIcon;
297
+ /** 可選:額外加在 icon 上的 className(例如 rotate transition) */
298
+ iconClassName?: string;
299
+ /**
300
+ * Size 明確覆寫(用於 fields / Tag 等**不在 `RowSizeProvider` 樹內**的 host):
301
+ * 傳了就以此為準,否則從 `RowSizeContext` 讀(fallback "md")。
302
+ *
303
+ * 使用時機:
304
+ * - Row primitive 子樹(Sidebar / TreeView / SelectMenu / DropdownMenu)→ **不傳**,吃 context
305
+ * - Field / Tag(自有 size 系統,沒包 RowSizeProvider)→ **必傳** `size={hostSize}`
306
+ */
307
+ size?: RowSize;
308
+ /**
309
+ * Hover / active bg className override(chromatic host 專用,如 Tag solid variant)。
310
+ *
311
+ * 預設 `group-hover/action:bg-neutral-hover group-active/action:bg-neutral-active`。
312
+ * 提供後**完全取代** hover + active 雙態 className,但**不影響** rest 態(永遠 bg-transparent)
313
+ * 與 overlay-trigger 態(`group-data-[state=open]:bg-neutral-selected`)。
314
+ *
315
+ * Consumer 須**同時**包含 hover + active 兩態 selector,例:
316
+ * `'group-hover/action:bg-[var(--my-hover)] group-active/action:bg-[var(--my-active)]'`
317
+ *
318
+ * Use case:Tag solid(blue/green/red 等)需 hover bg 跟 host 色相一致(非 neutral)。
319
+ */
320
+ hoverBgClassName?: string;
321
+ /**
322
+ * 標記本 button 是 **overlay trigger**(DropdownMenu / Popover / Tooltip 透過 `asChild` 包覆)。
323
+ *
324
+ * `true` 時:Radix overlay open 期間(`data-state="open"`)button 維持 host hover 樣式
325
+ * — 視覺鎖,讓 user 追溯 floating panel 來源(對齊 shadcn / Radix Themes / Material)。
326
+ *
327
+ * `false` 時(default):無 data-state=open 樣式 — 適用 in-place 互動如 `Collapsible.Trigger`
328
+ * (展開內容接在 trigger 下方,不需追溯)、drag handle、dismiss X 等。
329
+ *
330
+ * Canonical 詳 `inline-action.spec.md`「Overlay trigger canonical」段。
331
+ *
332
+ * @default false
333
+ */
334
+ overlayTrigger?: boolean;
335
+ }
336
+ export declare const ItemInlineActionButton: React.ForwardRefExoticComponent<ItemInlineActionButtonProps & React.RefAttributes<HTMLButtonElement>>;
337
+ export interface ItemInlineActionProps {
338
+ action: InlineActionConfig;
339
+ /** Size 覆寫(見 `ItemInlineActionButtonProps.size`)——Field Controls / Tag 必傳 */
340
+ size?: RowSize;
341
+ }
342
+ export declare const ItemInlineAction: React.ForwardRefExoticComponent<ItemInlineActionProps & React.RefAttributes<HTMLButtonElement>>;
343
+ declare const SUFFIX_HOVER_REVEAL_BY_GROUP: {
344
+ readonly "menu-item": "opacity-0 group-hover/menu-item:opacity-100 group-has-[:focus-visible]/menu-item:opacity-100 transition-opacity duration-150";
345
+ readonly "tree-item": "opacity-0 group-hover/tree-item:opacity-100 group-has-[:focus-visible]/tree-item:opacity-100 transition-opacity duration-150";
346
+ readonly row: "opacity-0 group-hover/row:opacity-100 group-has-[:focus-visible]/row:opacity-100 transition-opacity duration-150";
347
+ };
348
+ export type ItemSuffixHoverGroup = keyof typeof SUFFIX_HOVER_REVEAL_BY_GROUP;
349
+ export interface ItemSuffixProps extends React.HTMLAttributes<HTMLSpanElement> {
350
+ /**
351
+ * Hover-reveal:預設隱藏,父層 row hover / keyboard focus-visible 時才淡入。
352
+ * 對齊 TreeView / SidebarMenuButton inline action 行為。預設 false(永遠顯示,如 Badge)。
353
+ *
354
+ * 用 `group-has-[:focus-visible]` 而非 `group-focus-within`——後者會被 mouse click 觸發,
355
+ * 導致 click 後 suffix 永久顯示直到焦點移走。focus-visible 只在鍵盤 tab 時啟動。
356
+ */
357
+ hoverReveal?: boolean;
358
+ /**
359
+ * 父層 row 的 group selector(consumer 必加 `group/<name>` 到 row wrapper)。
360
+ * 預設 `'menu-item'`(對齊 MenuItem / Sidebar)。其他 row primitive:
361
+ * `'tree-item'`(TreeView)/ `'row'`(DataTable / FileItem)。
362
+ *
363
+ * 加新 row primitive(且需 hover-reveal)時:在 `SUFFIX_HOVER_REVEAL_BY_GROUP`
364
+ * 加 entry,Tailwind JIT 才能 scan 到 static class。
365
+ */
366
+ hoverGroup?: ItemSuffixHoverGroup;
367
+ }
368
+ export declare const ItemSuffix: React.ForwardRefExoticComponent<ItemSuffixProps & React.RefAttributes<HTMLSpanElement>>;
369
+ export {};
370
+ //# sourceMappingURL=item-anatomy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"item-anatomy.d.ts","sourceRoot":"","sources":["../../../src/patterns/element-anatomy/item-anatomy.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,272 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ import { cva } from "class-variance-authority";
4
+ import { cn } from "../../lib/utils.js";
5
+ import { Avatar } from "../../components/Avatar/avatar.js";
6
+ import { Tooltip, TooltipTrigger, TooltipContent } from "../../components/Tooltip/tooltip.js";
7
+ const ICON_SIZE = {
8
+ sm: 16,
9
+ md: 16,
10
+ lg: 20
11
+ };
12
+ const AVATAR_SIZE = {
13
+ inline: { sm: 20, md: 24, lg: 24 },
14
+ block: { sm: 32, md: 32, lg: 40 }
15
+ };
16
+ function getUniformPrefixSlotStyle(size) {
17
+ return { "--item-prefix-slot": `${AVATAR_SIZE.inline[size]}px` };
18
+ }
19
+ const INLINE_ACTION_HOVER_BG_SIZE = {
20
+ sm: 18,
21
+ md: 18,
22
+ lg: 22
23
+ };
24
+ const ROW_PADDING_BY_SIZE = {
25
+ sm: "text-body leading-compact py-[calc((var(--field-height-sm)-1lh)/2)]",
26
+ md: "text-body leading-compact py-[calc((var(--field-height-md)-1lh)/2)]",
27
+ lg: "text-body-lg leading-compact py-[calc((var(--field-height-lg)-1lh)/2)]"
28
+ };
29
+ const ItemPrefix = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
30
+ "span",
31
+ {
32
+ ref,
33
+ className: cn(
34
+ "h-[1lh] shrink-0 flex items-center",
35
+ // Uniform prefix slot:讀取 `--item-prefix-slot` CSS variable,
36
+ // fallback `auto`(= 預設行為,不佔額外寬度、不 center)。
37
+ // Row-primitive 頂層容器(例如 `<SidebarProvider uniformPrefix>` 的 wrapper)
38
+ // 若設定這個 var,小尺寸 prefix(icon 16px)會在固定寬槽(24px @ md)內置中,
39
+ // 與大尺寸 prefix(app logo 24px)對齊,達成 label 齊左。
40
+ // 詳見 item-anatomy.spec.md「Uniform prefix slot」節。
41
+ "min-w-[var(--item-prefix-slot,auto)] justify-center",
42
+ className
43
+ ),
44
+ ...props
45
+ }
46
+ ));
47
+ ItemPrefix.displayName = "ItemPrefix";
48
+ const itemPrefixAlignVariants = cva(
49
+ "flex items-center gap-2 shrink-0",
50
+ {
51
+ variants: {
52
+ align: {
53
+ inline: "h-[1lh]",
54
+ // sm/md desc = text-caption (12px × 1.3 = 15.6px)
55
+ // block-sm / block-md:scanning mode(body + caption 組合)→ 用 scanning mode 專屬 gap token
56
+ "block-sm": "h-[calc(1lh+var(--item-gap-label-desc-scanning)+var(--font-caption-size)*1.3)]",
57
+ "block-md": "h-[calc(1lh+var(--item-gap-label-desc-scanning)+var(--font-caption-size)*1.3)]",
58
+ // block-lg:scanning-lg mode(body-lg + body compact 組合)→ 用 scanning-lg mode 專屬 gap token
59
+ "block-lg": "h-[calc(1lh+var(--item-gap-label-desc-scanning-lg)+var(--font-body-size)*1.3)]"
60
+ }
61
+ },
62
+ defaultVariants: {
63
+ align: "inline"
64
+ }
65
+ }
66
+ );
67
+ const ItemLabel = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
68
+ "span",
69
+ {
70
+ ref,
71
+ "data-sidebar": "menu-label",
72
+ className: cn("min-w-0 flex-1 truncate", className),
73
+ ...props
74
+ }
75
+ ));
76
+ ItemLabel.displayName = "ItemLabel";
77
+ const ItemContent = React.forwardRef(
78
+ ({
79
+ label,
80
+ description,
81
+ mode = "reading",
82
+ size = "md",
83
+ descriptionTone = "secondary",
84
+ descriptionWrap = true,
85
+ descriptionClamp,
86
+ descriptionBreakWords = false,
87
+ labelTruncate = true,
88
+ labelClassName,
89
+ descriptionClassName,
90
+ className,
91
+ ...props
92
+ }, ref) => {
93
+ const toneClass = {
94
+ secondary: "text-fg-secondary",
95
+ error: "text-error-text",
96
+ muted: "text-fg-muted",
97
+ disabled: "text-fg-disabled"
98
+ }[descriptionTone];
99
+ const isLg = size === "lg";
100
+ const modeClass = mode === "scanning" ? isLg ? "text-[length:var(--font-body-size)] leading-compact" : "text-[length:var(--font-caption-size)] leading-compact" : isLg ? "text-[length:var(--font-body-size)]" : "";
101
+ const clampClass = descriptionClamp ? `line-clamp-${descriptionClamp}` : "";
102
+ return /* @__PURE__ */ jsxs(
103
+ "div",
104
+ {
105
+ ref,
106
+ className: cn("flex flex-col min-w-0 flex-1", className),
107
+ ...props,
108
+ children: [
109
+ /* @__PURE__ */ jsx("span", { className: cn(labelTruncate && "truncate", labelClassName), children: label }),
110
+ description && /* @__PURE__ */ jsx(
111
+ "span",
112
+ {
113
+ className: cn(
114
+ // Typography-mode-aware gap token(2026-04-23):
115
+ // (mode, size)2 維正交 → 4 token 對應 4 typography 組合
116
+ mode === "scanning" ? isLg ? "mt-[var(--item-gap-label-desc-scanning-lg)]" : "mt-[var(--item-gap-label-desc-scanning)]" : isLg ? "mt-[var(--item-gap-label-desc-reading-lg)]" : "mt-[var(--item-gap-label-desc-reading)]",
117
+ modeClass,
118
+ toneClass,
119
+ clampClass,
120
+ descriptionBreakWords && "break-words",
121
+ !descriptionWrap && "truncate",
122
+ descriptionClassName
123
+ ),
124
+ children: description
125
+ }
126
+ )
127
+ ]
128
+ }
129
+ );
130
+ }
131
+ );
132
+ ItemContent.displayName = "ItemContent";
133
+ const RowSizeContext = React.createContext(null);
134
+ const RowSizeProvider = RowSizeContext.Provider;
135
+ function useRowSize(fallback = "md") {
136
+ return React.useContext(RowSizeContext) ?? fallback;
137
+ }
138
+ const ItemIcon = React.forwardRef(
139
+ ({ icon: Icon, className, ...props }, ref) => {
140
+ const size = useRowSize();
141
+ return (
142
+ // data-prefix-type="icon" 讓 row-primitive 容器的 `:has()` selector 能偵測類型,
143
+ // 用於 `<SidebarProvider uniformPrefix>` opt-in 後的混用 auto-detection
144
+ /* @__PURE__ */ jsx(ItemPrefix, { "data-prefix-type": "icon", children: /* @__PURE__ */ jsx(
145
+ Icon,
146
+ {
147
+ ref,
148
+ size: ICON_SIZE[size],
149
+ className: cn("shrink-0", className),
150
+ "aria-hidden": true,
151
+ ...props
152
+ }
153
+ ) })
154
+ );
155
+ }
156
+ );
157
+ ItemIcon.displayName = "ItemIcon";
158
+ const ItemAvatar = React.forwardRef(
159
+ ({ mode = "inline", ...props }, ref) => {
160
+ const size = useRowSize();
161
+ return (
162
+ // data-prefix-type="avatar" 讓 row-primitive 容器的 `:has()` selector 能偵測類型,
163
+ // 用於 `<SidebarProvider uniformPrefix>` opt-in 後的混用 auto-detection
164
+ /* @__PURE__ */ jsx(ItemPrefix, { "data-prefix-type": "avatar", children: /* @__PURE__ */ jsx(Avatar, { ref, size: AVATAR_SIZE[mode][size], ...props }) })
165
+ );
166
+ }
167
+ );
168
+ ItemAvatar.displayName = "ItemAvatar";
169
+ const ItemInlineActionButton = React.forwardRef(({ icon: Icon, className, iconClassName, style, type = "button", size: sizeProp, hoverBgClassName, overlayTrigger = false, ...rest }, ref) => {
170
+ const contextSize = useRowSize();
171
+ const size = sizeProp ?? contextSize;
172
+ const iconPx = ICON_SIZE[size];
173
+ const hoverBgPx = INLINE_ACTION_HOVER_BG_SIZE[size];
174
+ return /* @__PURE__ */ jsxs(
175
+ "button",
176
+ {
177
+ ref,
178
+ type,
179
+ className: cn(
180
+ "group/action relative grid place-content-center shrink-0 cursor-pointer",
181
+ "text-fg-muted hover:text-foreground active:text-foreground transition-colors",
182
+ // Overlay trigger active state — 只在 consumer 顯式宣告 overlayTrigger=true 時生效
183
+ // (canonical 2026-05-05:Collapsible / drag / dismiss 等 in-place 互動 ≠ overlay,
184
+ // 不應 leak 視覺 lock。詳 inline-action.spec.md「Overlay trigger canonical」)
185
+ overlayTrigger && "data-[state=open]:text-foreground",
186
+ "focus-visible:outline-2 focus-visible:outline-ring",
187
+ className
188
+ ),
189
+ style: { width: iconPx, height: iconPx, ...style },
190
+ ...rest,
191
+ children: [
192
+ /* @__PURE__ */ jsx(
193
+ "span",
194
+ {
195
+ "aria-hidden": true,
196
+ className: cn(
197
+ "absolute pointer-events-none",
198
+ "rounded-md",
199
+ "bg-transparent",
200
+ hoverBgClassName ?? "group-hover/action:bg-neutral-hover group-active/action:bg-neutral-active",
201
+ // Overlay 開啟 = 維持 host hover bg(只在 overlayTrigger=true 時生效)
202
+ overlayTrigger && "group-data-[state=open]/action:bg-neutral-hover",
203
+ "transition-colors"
204
+ ),
205
+ style: {
206
+ width: hoverBgPx,
207
+ height: hoverBgPx,
208
+ top: "50%",
209
+ left: "50%",
210
+ transform: "translate(-50%, -50%)"
211
+ }
212
+ }
213
+ ),
214
+ /* @__PURE__ */ jsx(Icon, { size: iconPx, className: cn("relative", iconClassName), "aria-hidden": true })
215
+ ]
216
+ }
217
+ );
218
+ });
219
+ ItemInlineActionButton.displayName = "ItemInlineActionButton";
220
+ const ItemInlineAction = React.forwardRef(({ action, size }, ref) => /* @__PURE__ */ jsxs(Tooltip, { children: [
221
+ /* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx(
222
+ ItemInlineActionButton,
223
+ {
224
+ ref,
225
+ icon: action.icon,
226
+ "aria-label": action.label,
227
+ onClick: action.onClick,
228
+ size
229
+ }
230
+ ) }),
231
+ /* @__PURE__ */ jsx(TooltipContent, { children: action.label })
232
+ ] }));
233
+ ItemInlineAction.displayName = "ItemInlineAction";
234
+ const SUFFIX_HOVER_REVEAL_BY_GROUP = {
235
+ "menu-item": "opacity-0 group-hover/menu-item:opacity-100 group-has-[:focus-visible]/menu-item:opacity-100 transition-opacity duration-150",
236
+ "tree-item": "opacity-0 group-hover/tree-item:opacity-100 group-has-[:focus-visible]/tree-item:opacity-100 transition-opacity duration-150",
237
+ row: "opacity-0 group-hover/row:opacity-100 group-has-[:focus-visible]/row:opacity-100 transition-opacity duration-150"
238
+ };
239
+ const ItemSuffix = React.forwardRef(
240
+ ({ className, hoverReveal = false, hoverGroup = "menu-item", ...props }, ref) => /* @__PURE__ */ jsx(
241
+ "span",
242
+ {
243
+ ref,
244
+ className: cn(
245
+ "h-[1lh] shrink-0 ml-auto flex items-center gap-2",
246
+ hoverReveal && SUFFIX_HOVER_REVEAL_BY_GROUP[hoverGroup],
247
+ className
248
+ ),
249
+ ...props
250
+ }
251
+ )
252
+ );
253
+ ItemSuffix.displayName = "ItemSuffix";
254
+ export {
255
+ AVATAR_SIZE,
256
+ ICON_SIZE,
257
+ INLINE_ACTION_HOVER_BG_SIZE,
258
+ ItemAvatar,
259
+ ItemContent,
260
+ ItemIcon,
261
+ ItemInlineAction,
262
+ ItemInlineActionButton,
263
+ ItemLabel,
264
+ ItemPrefix,
265
+ ItemSuffix,
266
+ ROW_PADDING_BY_SIZE,
267
+ RowSizeProvider,
268
+ getUniformPrefixSlotStyle,
269
+ itemPrefixAlignVariants,
270
+ useRowSize
271
+ };
272
+ //# sourceMappingURL=item-anatomy.js.map