@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,141 @@
1
+ // @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.
2
+ import * as React from 'react'
3
+ import { cn } from '@/lib/utils'
4
+
5
+ /**
6
+ * DescriptionList — 唯讀 label + value 展示
7
+ *
8
+ * HTML 語義:dl + dt + dd(跟 Atlassian、Shopify Polaris 對齊)。
9
+ *
10
+ * ── Typography(兩個方向都一致)──
11
+ * label (dt): text-body (14px) text-fg-secondary (neutral-8)
12
+ * value (dd): text-body (14px) text-foreground (neutral-9)
13
+ * 兩者都是 14px × 1.5 行高——層級靠色彩區分,不靠字體大小。
14
+ *
15
+ * ── direction(2026-04-20 新增)──
16
+ * vertical(預設):label 在上 / value 在下,適合長 value(地址、bio、說明段落)、
17
+ * form-like 資訊展示
18
+ * horizontal :label 左 / value 右對齊,適合短 value 的 metadata 列
19
+ * (檔案資訊、訂單詳情、settings summary)— Google Drive /
20
+ * Notion file info panel 模式
21
+ *
22
+ * ── divided(horizontal 專用,預設 false)──
23
+ * 每個 item 下方加 `border-b border-divider`,rows 視覺對齊。長列表、key 長度
24
+ * 不一時需要對齊格線才易讀 → 開 divided;短列表(< 4 rows)不需要。
25
+ *
26
+ * ── 間距 ──
27
+ * vertical: label → value(同 item 內): `var(--item-gap-label-desc)` token(預設 2px,item-anatomy SSOT)
28
+ * horizontal: label ↔ value: gap-x-4(16px)最小間距
29
+ * items 之間垂直 gap: layout-space-tight(density-aware)
30
+ * divided horizontal 模式:每 item py-[var(--layout-space-tight)](cell-like row 高度)
31
+ */
32
+
33
+ export type DescriptionDirection = 'vertical' | 'horizontal'
34
+
35
+ interface DescriptionContextValue {
36
+ direction: DescriptionDirection
37
+ divided: boolean
38
+ }
39
+
40
+ const DescriptionContext = React.createContext<DescriptionContextValue>({
41
+ direction: 'vertical',
42
+ divided: false,
43
+ })
44
+
45
+ export interface DescriptionListProps extends React.HTMLAttributes<HTMLDListElement> {
46
+ /** grid 欄數(vertical 才生效;horizontal 永遠單欄),預設 1 */
47
+ cols?: 1 | 2 | 3
48
+ /** 項目排列方向,預設 vertical(label 在上 / value 在下) */
49
+ direction?: DescriptionDirection
50
+ /**
51
+ * horizontal 模式下每個 item 下方加分隔線以對齊 rows。預設 false。
52
+ * 短列表(< 4 rows)不需要;檔案 metadata 等長列表、key 長度不一時建議開。
53
+ */
54
+ divided?: boolean
55
+ }
56
+
57
+ const colsClass: Record<number, string> = {
58
+ 1: 'grid-cols-1',
59
+ 2: 'grid-cols-2',
60
+ 3: 'grid-cols-3',
61
+ }
62
+
63
+ const DescriptionList = React.forwardRef<HTMLDListElement, DescriptionListProps>(
64
+ ({ cols = 1, direction = 'vertical', divided = false, className, ...props }, ref) => {
65
+ const isHorizontal = direction === 'horizontal'
66
+ // Memoize provider value(2026-04-22 D3 perf audit):避免每 render 重建 2-field object
67
+ const ctxValue = React.useMemo(() => ({ direction, divided }), [direction, divided])
68
+ return (
69
+ <DescriptionContext.Provider value={ctxValue}>
70
+ <dl
71
+ ref={ref}
72
+ className={cn(
73
+ isHorizontal
74
+ ? 'flex flex-col'
75
+ : cn('grid gap-x-4 gap-y-[var(--layout-space-tight)]', colsClass[cols]),
76
+ className,
77
+ )}
78
+ {...props}
79
+ />
80
+ </DescriptionContext.Provider>
81
+ )
82
+ },
83
+ )
84
+ DescriptionList.displayName = 'DescriptionList'
85
+
86
+ export interface DescriptionItemProps extends React.HTMLAttributes<HTMLDivElement> {
87
+ label: string
88
+ children: React.ReactNode
89
+ }
90
+
91
+ const DescriptionItem = React.forwardRef<HTMLDivElement, DescriptionItemProps>(
92
+ ({ label, children, className, ...props }, ref) => {
93
+ const { direction, divided } = React.useContext(DescriptionContext)
94
+ if (direction === 'horizontal') {
95
+ return (
96
+ <div
97
+ ref={ref}
98
+ className={cn(
99
+ 'flex items-baseline justify-between gap-4',
100
+ divided
101
+ ? 'py-[var(--layout-space-tight)] border-b border-divider last:border-b-0'
102
+ : 'mb-[var(--layout-space-tight)] last:mb-0',
103
+ className,
104
+ )}
105
+ {...props}
106
+ >
107
+ <dt className="text-body text-fg-secondary shrink-0">{label}</dt>
108
+ <dd className="text-body text-foreground text-right break-all min-w-0">{children}</dd>
109
+ </div>
110
+ )
111
+ }
112
+ return (
113
+ <div ref={ref} className={cn('flex flex-col', className)} {...props}>
114
+ <dt className="text-body text-fg-secondary">{label}</dt>
115
+ <dd className="text-body mt-[var(--item-gap-label-desc-reading)]">{children}</dd>
116
+ </div>
117
+ )
118
+ },
119
+ )
120
+ DescriptionItem.displayName = 'DescriptionItem'
121
+
122
+ // Story auto-compile metadata — Phase 1 mechanical migration(2026-04-24)
123
+ // Phase 2 fill needed: purpose descriptions + when rationale + world-class refs
124
+ export const descriptionListMeta = {
125
+ component: 'DescriptionList',
126
+ family: null, // non-family composite / overlay / layout
127
+ variants: {
128
+
129
+ },
130
+ sizes: {
131
+
132
+ },
133
+ states: ['default', 'hover', 'active', 'focus-visible', 'disabled'],
134
+ tokens: {
135
+ bg: [],
136
+ fg: ['text-fg-secondary', 'text-foreground'],
137
+ ring: [],
138
+ },
139
+ } as const
140
+
141
+ export { DescriptionList, DescriptionItem }
@@ -0,0 +1,267 @@
1
+ // @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.
2
+ import * as React from "react"
3
+ import * as DialogPrimitive from "@radix-ui/react-dialog"
4
+ import { X as XIcon } from "lucide-react"
5
+
6
+ import { cn } from "@/lib/utils"
7
+ import { Button } from "@/design-system/components/Button/button"
8
+ import { SurfaceHeader, SurfaceFooter, type SurfaceHeaderProps } from "@/design-system/patterns/overlay-surface/overlay-surface"
9
+ import { ScrollArea } from "@/design-system/components/ScrollArea/scroll-area"
10
+
11
+ /**
12
+ * Dialog (Modal) — Radix Dialog + 設計系統 token
13
+ *
14
+ * ── Layout ──
15
+ * px = layout-space-loose, header/footer py = layout-space-tight。
16
+ * Body pt = layout-space-tight, pb = layout-space-bottom。
17
+ * Density:繼承 page `data-density`(v5 校準,跟 Sheet 對齊;header 自動對齊
18
+ * `--chrome-header-height` 48/56)。詳 dialog.spec.md「Density」節。
19
+ *
20
+ * ── Viewport Inset ──
21
+ * Modal 與 viewport 四邊保持 layout-space-bottom (48px) 最小間距。
22
+ *
23
+ * ── 高度行為 ──
24
+ * 預設:height 填滿 viewport(扣除 inset),body 捲動。防止動態內容跳動。
25
+ * height="auto":高度隨內容,超過 viewport 時 max-height 安全帽。
26
+ */
27
+
28
+ const Dialog = DialogPrimitive.Root
29
+ const DialogTrigger = DialogPrimitive.Trigger
30
+ const DialogPortal = DialogPrimitive.Portal
31
+ const DialogClose = DialogPrimitive.Close
32
+
33
+ // Modal 與 viewport 四邊的最小間距 = layout-space-bottom (48px)
34
+ const DIALOG_INSET_VAR = 'var(--layout-space-bottom)'
35
+
36
+ const DialogOverlay = React.forwardRef<
37
+ React.ElementRef<typeof DialogPrimitive.Overlay>,
38
+ React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>
39
+ >(({ className, ...props }, ref) => (
40
+ <DialogPrimitive.Overlay
41
+ ref={ref}
42
+ className={cn(
43
+ "fixed inset-0 z-50 bg-overlay",
44
+ "data-[state=open]:animate-in data-[state=closed]:animate-out motion-reduce:animate-none",
45
+ "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
46
+ className,
47
+ )}
48
+ {...props}
49
+ />
50
+ ))
51
+ DialogOverlay.displayName = DialogPrimitive.Overlay.displayName
52
+
53
+ interface DialogContentProps extends React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content> {
54
+ /** 最大寬度。預設 512px。傳 number 視為 px。 */
55
+ maxWidth?: string | number
56
+ /**
57
+ * 高度模式。
58
+ * - 不傳(預設):填滿 viewport(height = 100vh - inset*2),body 捲動。防止內容跳動。
59
+ * - true:高度隨內容,超過 viewport 時捲動(max-height 安全帽)。
60
+ */
61
+ autoHeight?: boolean
62
+ }
63
+
64
+ const DialogContent = React.forwardRef<
65
+ React.ElementRef<typeof DialogPrimitive.Content>,
66
+ DialogContentProps
67
+ >(({ className, maxWidth = '512px', autoHeight, children, style, ...props }, ref) => {
68
+ const insetCalc = `${DIALOG_INSET_VAR} * 2`
69
+ const viewportH = `calc(100vh - ${insetCalc})`
70
+ const maxWidthCss = typeof maxWidth === 'number' ? `${maxWidth}px` : maxWidth
71
+
72
+ const heightStyle: React.CSSProperties = autoHeight
73
+ ? { maxHeight: viewportH }
74
+ : { height: viewportH }
75
+
76
+ // AutoFocus canonical(對齊 Material / Polaris / Atlassian)—
77
+ // 開啟時 focus 落在 body 第一個有意義互動元素(input / button),不是 chrome close X。
78
+ // 預設 Radix 會 focus first tabbable = close X → Button iconOnly 的 focus-triggered
79
+ // tooltip 會立即顯示「關閉」,user-hostile。此 callback 攔截:先找 body 第一個
80
+ // input/textarea/select/button(排除 data-dismiss)focus;找不到就 focus container(不 focus X)。
81
+ const handleOpenAutoFocus = (e: Event) => {
82
+ e.preventDefault()
83
+ const content = e.currentTarget as HTMLElement
84
+ const firstBodyTarget = content.querySelector<HTMLElement>(
85
+ '[data-dialog-body] input:not([disabled]),[data-dialog-body] textarea:not([disabled]),[data-dialog-body] select:not([disabled]),[data-dialog-body] button:not([disabled]):not([data-dismiss])'
86
+ )
87
+ const firstFooterButton = content.querySelector<HTMLElement>(
88
+ '[data-dialog-footer] button:not([disabled]):not([data-dismiss])'
89
+ )
90
+ ;(firstBodyTarget ?? firstFooterButton ?? content).focus({ preventScroll: true })
91
+ }
92
+
93
+ return (
94
+ <DialogPortal>
95
+ <DialogOverlay />
96
+ <DialogPrimitive.Content
97
+ ref={ref}
98
+ // Density canonical(2026-04-22 v5 校準):Dialog 繼承 page density(跟 Sheet 對齊
99
+ // sheet.tsx line 111 canonical),不自設 data-layout-space="lg" 或 data-density。
100
+ //
101
+ // 先前曾設 `data-layout-space="lg"` 給 header/body 寬鬆呼吸,但跟 chrome-header-height
102
+ // canonical 衝突(md page dialog header 期望 48,強設 lg 會變 56)。
103
+ // 世界級對照:Polaris Modal horizontal padding 16 / Material M3 24 / Atlassian 24 — 16 是
104
+ // 合理 lower bound;md page 用 16 loose body padding 可接受,lg page 自動 24。
105
+ // 詳 overlay-surface.spec.md「Chrome dismiss size canonical」
106
+ onOpenAutoFocus={handleOpenAutoFocus}
107
+ className={cn(
108
+ "fixed left-1/2 top-1/2 z-50 w-full -translate-x-1/2 -translate-y-1/2",
109
+ "flex flex-col bg-surface-raised rounded-lg border border-border",
110
+ "data-[state=open]:animate-in data-[state=closed]:animate-out motion-reduce:animate-none",
111
+ "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
112
+ "data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95",
113
+ "data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%]",
114
+ "data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%]",
115
+ className,
116
+ )}
117
+ style={{
118
+ boxShadow: 'var(--elevation-200)',
119
+ maxWidth: `min(${maxWidthCss}, calc(100vw - ${insetCalc}))`,
120
+ ...heightStyle,
121
+ ...style,
122
+ }}
123
+ {...props}
124
+ >
125
+ {children}
126
+ </DialogPrimitive.Content>
127
+ </DialogPortal>
128
+ )
129
+ })
130
+ DialogContent.displayName = DialogPrimitive.Content.displayName
131
+
132
+ // DialogHeader: SurfaceHeader + Close 按鈕(Dialog 特有)
133
+ // justify-between 讓 children 與 Close 分左右;Close 用 Radix DialogPrimitive.Close 包裝。
134
+ // 2026-05-18 audit gap fix:type 用 SurfaceHeaderProps 對齊 — DialogHeader 是 SurfaceHeader
135
+ // 薄包裝,withTabs / lockDensity 等 props 透過 spread 已 forward,但 TS type 沒 expose
136
+ // 導致 consumer 不能用 `<DialogHeader withTabs>` 而只能寫 `as any` 繞。Type lift 修
137
+ // per header-canonical.spec.md W1 跨 6 consumer 同契約。
138
+ const DialogHeader = React.forwardRef<
139
+ HTMLDivElement,
140
+ SurfaceHeaderProps
141
+ >(({ className, children, ...props }, ref) => (
142
+ // 2026-05-18:className 不再硬加 justify-between(冗餘:row 1 是 flex items-center gap-2,
143
+ // 第一 child flex-1 grow 自然 push close X 靠右,跟 justify-between 同視覺)。
144
+ // 並且 column mode(tabsSlot 提供)justify-between 會把 row 1 / row 2 上下推開 = 破裂。
145
+ // tabsSlot via `...props` spread 自動 forward(type 來自 SurfaceHeaderProps)。
146
+ <SurfaceHeader
147
+ ref={ref}
148
+ className={className}
149
+ {...props}
150
+ >
151
+ <div className="flex-1 min-w-0">{children}</div>
152
+ {/* Dismiss X(chrome-slot canonical,v5):Button 本身 native sm(28 md / 32 lg,touch target 亦同),
153
+ 但 data-dismiss attribute 讓 SurfaceHeader CSS rule 套負 my 讓 layout 佔位 = 24,
154
+ header = 24 + 2×tight = 48 / 56 chrome-header-height ✓。
155
+ 詳 overlay-surface.spec.md「Chrome dismiss size canonical」*/}
156
+ <DialogPrimitive.Close asChild>
157
+ <Button data-dismiss iconOnly dismiss size="sm" startIcon={XIcon} aria-label="關閉" />
158
+ </DialogPrimitive.Close>
159
+ </SurfaceHeader>
160
+ ))
161
+ DialogHeader.displayName = "DialogHeader"
162
+
163
+ // DialogBody: flex-1 ScrollArea + chrome padding(對齊 overlay-surface SSOT + ScrollArea canonical)
164
+ // 捲軸必用 ScrollArea(跨 OS 一致、不吃寬度)— 不自寫 overflow-y-auto。
165
+ // padding 搬進 viewport inner div:px-loose / pt-tight / pb-bottom(Dialog 「大容器」底部多一拍呼吸)。
166
+ // data-dialog-body:讓 DialogContent onOpenAutoFocus 找得到 body 第一個有意義互動元素(避免 focus 到 close X)
167
+ //
168
+ // ── List-as-region 場景(menu group / Cmd+K)──
169
+ // 不再提供 `flush` variant(2026-05-01 移除,先前曾叫 `variant="list"`)。
170
+ // **canonical pattern** = consumer 自管 list outer wrapper + 用 `className` override 撤掉 chrome padding:
171
+ // ```tsx
172
+ // <DialogBody className="!px-0 !pt-0 !pb-0">
173
+ // <div className="py-2"> {/* list outer wrapper 自帶 py-2(menu group canonical)*/}
174
+ // {items.map(item => <MenuItem className="px-[var(--layout-space-loose)] rounded-md" />)}
175
+ // </div>
176
+ // </DialogBody>
177
+ // ```
178
+ // **rationale**:flush 只為 list-only body 省一行 className,但 (a) 多一個 row(search / banner)
179
+ // 就破功 → 保留 chrome padding 反而更穩,(b) 加新 variant 不解決底層脆弱(consumer 仍要管 list py
180
+ // 且 item px-loose),反而把 1 個 surface decision 拆兩 API。世界級主流(Material/Atlassian/Mantine/
181
+ // shadcn)無 universal LayoutBody flush variant,Polaris flush API 只用於極窄 scope。
182
+ // 詳 `tokens/layoutSpace/layoutSpace.spec.md`「List-as-region in overlay body」節
183
+ // `className` forward 到 **inner content div**(非外層 ScrollArea wrapper)——
184
+ // consumer `<DialogBody className="flex flex-col gap-X">` 期望作用於 children 排列;
185
+ // 套在 ScrollArea 上會 0 效果(children 住 inner div),曾造成 modal form field 完全貼邊。
186
+ const DialogBody = React.forwardRef<
187
+ HTMLDivElement,
188
+ React.ComponentPropsWithoutRef<typeof ScrollArea>
189
+ >(({ className, children, ...props }, ref) => (
190
+ <ScrollArea ref={ref} data-dialog-body className="flex-1 min-h-0" {...props}>
191
+ <div
192
+ className={cn(
193
+ "px-[var(--layout-space-loose)] pt-[var(--layout-space-tight)] pb-[var(--layout-space-bottom)]",
194
+ className,
195
+ )}
196
+ >
197
+ {children}
198
+ </div>
199
+ </ScrollArea>
200
+ ))
201
+ DialogBody.displayName = "DialogBody"
202
+
203
+ // DialogFooter: SurfaceFooter wrap 加 data-dialog-footer(autoFocus fallback target)
204
+ const DialogFooter = React.forwardRef<
205
+ HTMLDivElement,
206
+ React.HTMLAttributes<HTMLDivElement>
207
+ >(({ ...props }, ref) => <SurfaceFooter ref={ref} data-dialog-footer {...props} />)
208
+ DialogFooter.displayName = "DialogFooter"
209
+
210
+ const DialogTitle = React.forwardRef<
211
+ React.ElementRef<typeof DialogPrimitive.Title>,
212
+ React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>
213
+ >(({ className, ...props }, ref) => (
214
+ <DialogPrimitive.Title
215
+ ref={ref}
216
+ className={cn("text-body-lg font-medium truncate", className)}
217
+ {...props}
218
+ />
219
+ ))
220
+ DialogTitle.displayName = DialogPrimitive.Title.displayName
221
+
222
+ const DialogDescription = React.forwardRef<
223
+ React.ElementRef<typeof DialogPrimitive.Description>,
224
+ React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>
225
+ >(({ className, ...props }, ref) => (
226
+ <DialogPrimitive.Description
227
+ ref={ref}
228
+ // title → description 間距 canonical:DialogTitle 是 body-lg(16)+ desc body(14)→ reading-lg token
229
+ // (label tier 決定 token 選擇;item-anatomy Family 2 reading-family token 對照表)
230
+ className={cn("mt-[var(--item-gap-label-desc-reading-lg)] text-body text-fg-secondary", className)}
231
+ {...props}
232
+ />
233
+ ))
234
+ DialogDescription.displayName = DialogPrimitive.Description.displayName
235
+
236
+ // Story auto-compile metadata — Phase 1 mechanical migration(2026-04-24)
237
+ // Phase 2 fill needed: purpose descriptions + when rationale + world-class refs
238
+ export const dialogMeta = {
239
+ component: 'Dialog',
240
+ family: null, // non-family composite / overlay / layout
241
+ variants: {
242
+
243
+ },
244
+ sizes: {
245
+
246
+ },
247
+ states: ['default', 'hover', 'active', 'focus-visible', 'disabled'],
248
+ tokens: {
249
+ bg: ['bg-surface-raised'],
250
+ fg: ['text-fg-secondary'],
251
+ ring: [],
252
+ },
253
+ } as const
254
+
255
+ export {
256
+ Dialog,
257
+ DialogPortal,
258
+ DialogOverlay,
259
+ DialogClose,
260
+ DialogTrigger,
261
+ DialogContent,
262
+ DialogHeader,
263
+ DialogBody,
264
+ DialogFooter,
265
+ DialogTitle,
266
+ DialogDescription,
267
+ }