@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
package/dist/index.js ADDED
@@ -0,0 +1,371 @@
1
+ import { Accordion, AccordionContent, AccordionItem, AccordionTrigger, accordionMeta } from "./components/Accordion/accordion.js";
2
+ import { Alert, alertMeta, alertVariants } from "./components/Alert/alert.js";
3
+ import { AppShell, AppShellAside, useAppShell } from "./components/AppShell/app-shell.js";
4
+ import { AspectRatio, aspectRatioMeta } from "./components/AspectRatio/aspect-ratio.js";
5
+ import { Avatar, avatarMeta } from "./components/Avatar/avatar.js";
6
+ import { Badge, badgeMeta, badgeVariants } from "./components/Badge/badge.js";
7
+ import { Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, breadcrumbMeta } from "./components/Breadcrumb/breadcrumb.js";
8
+ import { BULK_ACTION_BAR_DEFAULT_LABELS, BulkActionBar, bulkActionBarMeta } from "./components/BulkActionBar/bulk-action-bar.js";
9
+ import { Button, ButtonGroupContext, buttonMeta, buttonVariants } from "./components/Button/button.js";
10
+ import { Calendar, calendarMeta } from "./components/Calendar/calendar.js";
11
+ import { Carousel, CarouselContent, CarouselDots, CarouselItem, CarouselNext, CarouselPrevious, carouselMeta } from "./components/Carousel/carousel.js";
12
+ import { ChartContainer, ChartLegend, ChartLegendContent, ChartStyle, ChartTooltip, ChartTooltipContent, chartMeta } from "./components/Chart/chart.js";
13
+ import { Checkbox, checkboxMeta, checkboxVariants } from "./components/Checkbox/checkbox.js";
14
+ import { Chip, ChipGroup, chipMeta, chipVariants } from "./components/Chip/chip.js";
15
+ import { CircularProgress, circularProgressMeta } from "./components/CircularProgress/circular-progress.js";
16
+ import { Coachmark, coachmarkMeta } from "./components/Coachmark/coachmark.js";
17
+ import { Combobox } from "./components/Combobox/combobox.js";
18
+ import { Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, commandMeta } from "./components/Command/command.js";
19
+ import { DataTable, MIN_COLUMN_WIDTH, dataTableMeta, dataTableVariants } from "./components/DataTable/data-table.js";
20
+ import { DateGrid, dateGridMeta } from "./components/DateGrid/date-grid.js";
21
+ import { DatePicker, DatePickerRange, datePickerMeta, formatDate } from "./components/DatePicker/date-picker.js";
22
+ import { DescriptionItem, DescriptionList, descriptionListMeta } from "./components/DescriptionList/description-list.js";
23
+ import { Dialog, DialogBody, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, dialogMeta } from "./components/Dialog/dialog.js";
24
+ import { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, dropdownMenuMeta, floatingLayerClass } from "./components/DropdownMenu/dropdown-menu.js";
25
+ import { Empty, emptyMeta } from "./components/Empty/empty.js";
26
+ import { Field, FieldDescription, FieldError, FieldGroup, FieldLabel, fieldMeta } from "./components/Field/field.js";
27
+ import { FieldControlGroup, fieldControlGroupMeta } from "./components/FieldControlGroup/field-control-group.js";
28
+ import { FileItem, fileItemMeta } from "./components/FileItem/file-item.js";
29
+ import { FileUpload, fileUploadMeta } from "./components/FileUpload/file-upload.js";
30
+ import { FileViewer, fileViewerMeta, registerFileRenderer } from "./components/FileViewer/file-viewer.js";
31
+ import { HoverCard, HoverCardContent, HoverCardTrigger, hoverCardMeta } from "./components/HoverCard/hover-card.js";
32
+ import { Input, inputMeta } from "./components/Input/input.js";
33
+ import { LinkInput, linkInputMeta } from "./components/LinkInput/link-input.js";
34
+ import { MenuFooter, MenuGroup, MenuItem, menuItemMeta, menuItemVariants } from "./components/Menu/menu-item.js";
35
+ import { NAMECARD_DEFAULT_FIELD_KEYS, NameCard, NameCardDefaultActions, nameCardMeta } from "./components/NameCard/name-card.js";
36
+ import { Notice, SUBTLE_ICON_COLOR, noticeMeta, useInverseTheme } from "./components/Notice/notice.js";
37
+ import { NumberInput, formatNumber, numberInputMeta } from "./components/NumberInput/number-input.js";
38
+ import { OverflowIndicator, overflowIndicatorMeta } from "./components/OverflowIndicator/overflow-indicator.js";
39
+ import { PeoplePicker, peoplePickerMeta } from "./components/PeoplePicker/people-picker.js";
40
+ import { Popover, PopoverAnchor, PopoverBody, PopoverClose, PopoverContent, PopoverFooter, PopoverHeader, PopoverTitle, PopoverTrigger, popoverMeta } from "./components/Popover/popover.js";
41
+ import { ProgressBar, progressBarMeta } from "./components/ProgressBar/progress-bar.js";
42
+ import { RadioGroup, RadioGroupItem, radioGroupMeta, radioItemVariants } from "./components/RadioGroup/radio-group.js";
43
+ import { Rating, ratingMeta } from "./components/Rating/rating.js";
44
+ import { ScrollArea, ScrollBar, scrollAreaMeta } from "./components/ScrollArea/scroll-area.js";
45
+ import { SegmentedControl, SegmentedControlItem, segmentedControlItemVariants, segmentedControlMeta, segmentedControlVariants } from "./components/SegmentedControl/segmented-control.js";
46
+ import { Select, selectMeta } from "./components/Select/select.js";
47
+ import { SelectMenu, selectMenuMeta } from "./components/SelectMenu/select-menu.js";
48
+ import { SelectionItem, selectionItemMeta, selectionItemStyles } from "./components/SelectionControl/selection-item.js";
49
+ import { Separator, separatorMeta } from "./components/Separator/separator.js";
50
+ import { Sheet, SheetBody, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, sheetMeta, sheetVariants } from "./components/Sheet/sheet.js";
51
+ import { Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarProvider, SidebarSeparator, SidebarTrigger, sidebarMeta, useSidebar } from "./components/Sidebar/sidebar.js";
52
+ import { Skeleton, skeletonMeta } from "./components/Skeleton/skeleton.js";
53
+ import { Slider, sliderMeta, sliderRootVariants } from "./components/Slider/slider.js";
54
+ import { StepContent, StepDescription, StepItem, StepLabel, Steps, stepItemVariants, stepsMeta, stepsRootVariants } from "./components/Steps/steps.js";
55
+ import { Switch, switchMeta, switchVariants } from "./components/Switch/switch.js";
56
+ import { Tabs, TabsContent, TabsList, TabsTrigger, tabsMeta, tabsTriggerVariants } from "./components/Tabs/tabs.js";
57
+ import { Tag, tagMeta, tagVariants } from "./components/Tag/tag.js";
58
+ import { Textarea, textareaMeta, textareaVariants } from "./components/Textarea/textarea.js";
59
+ import { TimePicker, timePickerMeta } from "./components/TimePicker/time-picker.js";
60
+ import { Toaster, toast, toastMeta } from "./components/Toast/toast.js";
61
+ import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, tooltipMeta } from "./components/Tooltip/tooltip.js";
62
+ import { TreeItem, TreeView } from "./components/TreeView/tree-view.js";
63
+ import { ARROW_BUTTON_WIDTH, FADE_WIDTH, OverflowMenuTriggerButton, OverflowScrollArrow, SCROLL_PAGE_RATIO, buildFadeMask, useScrollByPage } from "./patterns/horizontal-overflow/horizontal-overflow.js";
64
+ import { SurfaceBody, SurfaceFooter, SurfaceHeader } from "./patterns/overlay-surface/overlay-surface.js";
65
+ import { ResizeHandle } from "./patterns/resize-handle/resize-handle.js";
66
+ import { useControllable } from "./hooks/use-controllable.js";
67
+ import { useIsNarrowViewport } from "./hooks/use-is-narrow-viewport.js";
68
+ import { useIsTouchDevice } from "./hooks/use-is-touch-device.js";
69
+ import { useOverflowIndices, useScrollEdges } from "./hooks/use-overflow-items.js";
70
+ import { dragActiveCursor, dragHandleCursorClass, dragSourceClass, dragSourceStyle, dropIndicatorColumn, dropIndicatorInside, dropIndicatorRow, isReorderNoop, reconstructFullRowGhost, snapToCursorModifier } from "./lib/drag-visual.js";
71
+ import { applySelectAll, clearSelection } from "./lib/multi-select-ordering.js";
72
+ import { PEOPLE_PICKER_LENGTH1_WRAPPER_CLASS, getPeoplePickerTagWrapperClass } from "./components/PeoplePicker/people-picker-helpers.js";
73
+ export {
74
+ ARROW_BUTTON_WIDTH,
75
+ Accordion,
76
+ AccordionContent,
77
+ AccordionItem,
78
+ AccordionTrigger,
79
+ Alert,
80
+ AppShell,
81
+ AppShellAside,
82
+ AspectRatio,
83
+ Avatar,
84
+ BULK_ACTION_BAR_DEFAULT_LABELS,
85
+ Badge,
86
+ Breadcrumb,
87
+ BreadcrumbEllipsis,
88
+ BreadcrumbItem,
89
+ BreadcrumbLink,
90
+ BreadcrumbList,
91
+ BreadcrumbPage,
92
+ BreadcrumbSeparator,
93
+ BulkActionBar,
94
+ Button,
95
+ ButtonGroupContext,
96
+ Calendar,
97
+ Carousel,
98
+ CarouselContent,
99
+ CarouselDots,
100
+ CarouselItem,
101
+ CarouselNext,
102
+ CarouselPrevious,
103
+ ChartContainer,
104
+ ChartLegend,
105
+ ChartLegendContent,
106
+ ChartStyle,
107
+ ChartTooltip,
108
+ ChartTooltipContent,
109
+ Checkbox,
110
+ Chip,
111
+ ChipGroup,
112
+ CircularProgress,
113
+ Coachmark,
114
+ Combobox,
115
+ Command,
116
+ CommandDialog,
117
+ CommandEmpty,
118
+ CommandGroup,
119
+ CommandInput,
120
+ CommandItem,
121
+ CommandList,
122
+ CommandSeparator,
123
+ CommandShortcut,
124
+ DataTable,
125
+ DateGrid,
126
+ DatePicker,
127
+ DatePickerRange,
128
+ DescriptionItem,
129
+ DescriptionList,
130
+ Dialog,
131
+ DialogBody,
132
+ DialogClose,
133
+ DialogContent,
134
+ DialogDescription,
135
+ DialogFooter,
136
+ DialogHeader,
137
+ DialogOverlay,
138
+ DialogPortal,
139
+ DialogTitle,
140
+ DialogTrigger,
141
+ DropdownMenu,
142
+ DropdownMenuCheckboxItem,
143
+ DropdownMenuContent,
144
+ DropdownMenuGroup,
145
+ DropdownMenuItem,
146
+ DropdownMenuLabel,
147
+ DropdownMenuPortal,
148
+ DropdownMenuRadioGroup,
149
+ DropdownMenuRadioItem,
150
+ DropdownMenuSeparator,
151
+ DropdownMenuShortcut,
152
+ DropdownMenuSub,
153
+ DropdownMenuSubContent,
154
+ DropdownMenuSubTrigger,
155
+ DropdownMenuTrigger,
156
+ Empty,
157
+ FADE_WIDTH,
158
+ Field,
159
+ FieldControlGroup,
160
+ FieldDescription,
161
+ FieldError,
162
+ FieldGroup,
163
+ FieldLabel,
164
+ FileItem,
165
+ FileUpload,
166
+ FileViewer,
167
+ HoverCard,
168
+ HoverCardContent,
169
+ HoverCardTrigger,
170
+ Input,
171
+ LinkInput,
172
+ MIN_COLUMN_WIDTH,
173
+ MenuFooter,
174
+ MenuGroup,
175
+ MenuItem,
176
+ NAMECARD_DEFAULT_FIELD_KEYS,
177
+ NameCard,
178
+ NameCardDefaultActions,
179
+ Notice,
180
+ NumberInput,
181
+ OverflowIndicator,
182
+ OverflowMenuTriggerButton,
183
+ OverflowScrollArrow,
184
+ PEOPLE_PICKER_LENGTH1_WRAPPER_CLASS,
185
+ PeoplePicker,
186
+ Popover,
187
+ PopoverAnchor,
188
+ PopoverBody,
189
+ PopoverClose,
190
+ PopoverContent,
191
+ PopoverFooter,
192
+ PopoverHeader,
193
+ PopoverTitle,
194
+ PopoverTrigger,
195
+ ProgressBar,
196
+ RadioGroup,
197
+ RadioGroupItem,
198
+ Rating,
199
+ ResizeHandle,
200
+ SCROLL_PAGE_RATIO,
201
+ SUBTLE_ICON_COLOR,
202
+ ScrollArea,
203
+ ScrollBar,
204
+ SegmentedControl,
205
+ SegmentedControlItem,
206
+ Select,
207
+ SelectMenu,
208
+ SelectionItem,
209
+ Separator,
210
+ Sheet,
211
+ SheetBody,
212
+ SheetClose,
213
+ SheetContent,
214
+ SheetDescription,
215
+ SheetFooter,
216
+ SheetHeader,
217
+ SheetOverlay,
218
+ SheetPortal,
219
+ SheetTitle,
220
+ SheetTrigger,
221
+ Sidebar,
222
+ SidebarContent,
223
+ SidebarFooter,
224
+ SidebarGroup,
225
+ SidebarGroupAction,
226
+ SidebarGroupContent,
227
+ SidebarGroupLabel,
228
+ SidebarHeader,
229
+ SidebarInput,
230
+ SidebarMenu,
231
+ SidebarMenuAction,
232
+ SidebarMenuBadge,
233
+ SidebarMenuButton,
234
+ SidebarMenuItem,
235
+ SidebarMenuSkeleton,
236
+ SidebarProvider,
237
+ SidebarSeparator,
238
+ SidebarTrigger,
239
+ Skeleton,
240
+ Slider,
241
+ StepContent,
242
+ StepDescription,
243
+ StepItem,
244
+ StepLabel,
245
+ Steps,
246
+ SurfaceBody,
247
+ SurfaceFooter,
248
+ SurfaceHeader,
249
+ Switch,
250
+ Tabs,
251
+ TabsContent,
252
+ TabsList,
253
+ TabsTrigger,
254
+ Tag,
255
+ Textarea,
256
+ TimePicker,
257
+ Toaster,
258
+ Tooltip,
259
+ TooltipContent,
260
+ TooltipProvider,
261
+ TooltipTrigger,
262
+ TreeItem,
263
+ TreeView,
264
+ accordionMeta,
265
+ alertMeta,
266
+ alertVariants,
267
+ applySelectAll,
268
+ aspectRatioMeta,
269
+ avatarMeta,
270
+ badgeMeta,
271
+ badgeVariants,
272
+ breadcrumbMeta,
273
+ buildFadeMask,
274
+ bulkActionBarMeta,
275
+ buttonMeta,
276
+ buttonVariants,
277
+ calendarMeta,
278
+ carouselMeta,
279
+ chartMeta,
280
+ checkboxMeta,
281
+ checkboxVariants,
282
+ chipMeta,
283
+ chipVariants,
284
+ circularProgressMeta,
285
+ clearSelection,
286
+ coachmarkMeta,
287
+ commandMeta,
288
+ dataTableMeta,
289
+ dataTableVariants,
290
+ dateGridMeta,
291
+ datePickerMeta,
292
+ descriptionListMeta,
293
+ dialogMeta,
294
+ dragActiveCursor,
295
+ dragHandleCursorClass,
296
+ dragSourceClass,
297
+ dragSourceStyle,
298
+ dropIndicatorColumn,
299
+ dropIndicatorInside,
300
+ dropIndicatorRow,
301
+ dropdownMenuMeta,
302
+ emptyMeta,
303
+ fieldControlGroupMeta,
304
+ fieldMeta,
305
+ fileItemMeta,
306
+ fileUploadMeta,
307
+ fileViewerMeta,
308
+ floatingLayerClass,
309
+ formatDate,
310
+ formatNumber,
311
+ getPeoplePickerTagWrapperClass,
312
+ hoverCardMeta,
313
+ inputMeta,
314
+ isReorderNoop,
315
+ linkInputMeta,
316
+ menuItemMeta,
317
+ menuItemVariants,
318
+ nameCardMeta,
319
+ noticeMeta,
320
+ numberInputMeta,
321
+ overflowIndicatorMeta,
322
+ peoplePickerMeta,
323
+ popoverMeta,
324
+ progressBarMeta,
325
+ radioGroupMeta,
326
+ radioItemVariants,
327
+ ratingMeta,
328
+ reconstructFullRowGhost,
329
+ registerFileRenderer,
330
+ scrollAreaMeta,
331
+ segmentedControlItemVariants,
332
+ segmentedControlMeta,
333
+ segmentedControlVariants,
334
+ selectMenuMeta,
335
+ selectMeta,
336
+ selectionItemMeta,
337
+ selectionItemStyles,
338
+ separatorMeta,
339
+ sheetMeta,
340
+ sheetVariants,
341
+ sidebarMeta,
342
+ skeletonMeta,
343
+ sliderMeta,
344
+ sliderRootVariants,
345
+ snapToCursorModifier,
346
+ stepItemVariants,
347
+ stepsMeta,
348
+ stepsRootVariants,
349
+ switchMeta,
350
+ switchVariants,
351
+ tabsMeta,
352
+ tabsTriggerVariants,
353
+ tagMeta,
354
+ tagVariants,
355
+ textareaMeta,
356
+ textareaVariants,
357
+ timePickerMeta,
358
+ toast,
359
+ toastMeta,
360
+ tooltipMeta,
361
+ useAppShell,
362
+ useControllable,
363
+ useInverseTheme,
364
+ useIsNarrowViewport,
365
+ useIsTouchDevice,
366
+ useOverflowIndices,
367
+ useScrollByPage,
368
+ useScrollEdges,
369
+ useSidebar
370
+ };
371
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,158 @@
1
+ /**
2
+ * Drag visual SSOT(2026-05-06 v14.5)
3
+ *
4
+ * DS canonical drag visual,3 處 consumer(TreeView / DataTable row drag / DataTable column reorder)
5
+ * 共用同一組 styling constant — 對齊 TreeView 最早 codified 的 pattern。
6
+ *
7
+ * ## Pattern
8
+ *
9
+ * - **Source element**(被拖中的 row/column):`opacity-30`(半透,user 仍看得到原位)
10
+ * — 不是 `opacity:0` 全隱形,因 user 拖太遠看不到「源頭」會迷失方向。對齊 TreeView 最早 v1 + Notion / Atlassian / Linear。
11
+ * - **Ghost preview**(浮動 follow cursor):透過 dnd-kit `<DragOverlay>` portal,clone source 的 outerHTML
12
+ * strip transform/transition/opacity → render 在 portal 層,visually 跟 cursor 走。
13
+ * - **Drop indicator**(目標位置藍細線):2px(`h-0.5` / `w-0.5`)`bg-primary` absolute line:
14
+ * - **Row context**(TreeView / table row drag):水平線 在 target row 的 top(before)/ bottom(after)
15
+ * - **Column context**(table column reorder):垂直線 在 target column 的 left(before)/ right(after)
16
+ * - **Inside-drop highlight**(nested target,如拖到 TreeView 子層 / Table nested row 內):整 row `bg-primary-subtle`
17
+ *
18
+ * ## Why centralize
19
+ *
20
+ * 三處 drag 之前各自實作不一致(TreeView opacity:30 + indicator vs DataTable row opacity:0 no indicator
21
+ * vs Column reorder opacity:0 + indicator)— M23 / M27 violation(DS 內 canonical 沒對齊)。
22
+ * 抽到此 module 後 3 處 import 同 constants,未來改 1 處全 sync。
23
+ *
24
+ * ## Token usage
25
+ *
26
+ * - `bg-primary`:semantic state token(`--primary`)— 跟 focus state ring color 同 source(M23 一致)
27
+ * - `bg-primary-subtle`:semantic primary subtle(`--primary-subtle`)— inside-drop dim background
28
+ * - `h-0.5` / `w-0.5`:Tailwind size token = 2px(對齊 hairline divider thickness 概念)
29
+ * - `opacity-30`:Tailwind 30% opacity(半透但仍清楚看到 outline)
30
+ */
31
+ import type * as React from 'react';
32
+ import type { Modifier } from '@dnd-kit/core';
33
+ /**
34
+ * Source element 拖中的 opacity className。
35
+ *
36
+ * **Reuse `opacity-disabled` token**(2026-05-06 v14.5.2 對齊 Atlassian Pragmatic):
37
+ * Atlassian dnd guidelines 也用 `opacity.disabled` token 給 drag source dim(他們值 0.40,
38
+ * 我們值 0.45,role 一致)。不另開 drag-source 專屬 token — single-role-per-value 哲學
39
+ * + DS internal SSOT。
40
+ */
41
+ export declare const dragSourceClass: "opacity-disabled";
42
+ /** Source element 拖中的 inline style(consume DS token `--opacity-disabled`)*/
43
+ export declare function dragSourceStyle(isDragging: boolean): React.CSSProperties;
44
+ /**
45
+ * DragOverlay ghost 視覺 canonical(2026-05-06 v14.5.2 對齊 dnd-kit / Atlassian / Material):
46
+ * **不 dim**(opacity:1)+ elevation shadow `shadow-[var(--elevation-200)]` + 顯式 bg
47
+ * (`bg-surface` 或 `bg-surface-raised`)+ border。Lifted preview pattern,跟 surface 拉開
48
+ * 視覺距離靠 shadow 不靠 opacity。
49
+ *
50
+ * Consumer 自己組 className(因 ghost 結構各自不同 — TreeView 是 icon+label compact pill,
51
+ * DataTable 是 cloned row HTML wrapper),這裡只 codify 規則 不導出 class string。
52
+ */
53
+ /**
54
+ * Row drop indicator(水平線,跨 row 全寬)
55
+ *
56
+ * - `before`:在 target row top edge,提示「放開後會插入這 row 之前」
57
+ * - `after`:在 target row bottom edge,提示「放開後會插入這 row 之後」
58
+ *
59
+ * **Indent option**:nested context(TreeView / table nested rows)可加 `style={{ left: indentPx }}`
60
+ * 讓 indicator 隨 depth 縮排,視覺對齊 row content 起始位置。
61
+ */
62
+ export declare const dropIndicatorRow: {
63
+ readonly before: "absolute top-0 left-0 right-0 h-0.5 bg-primary z-10 pointer-events-none";
64
+ readonly after: "absolute bottom-0 left-0 right-0 h-0.5 bg-primary z-10 pointer-events-none";
65
+ };
66
+ /**
67
+ * Column drop indicator(垂直線,跨 column header height)
68
+ *
69
+ * - `before`:在 target column left edge(-1px outset 對齊 grid line)
70
+ * - `after`:在 target column right edge(-1px outset 對齊 grid line)
71
+ *
72
+ * 兩種變體,視覺一致(2px primary line),只有 DOM mechanism 不同 — consumer 視 use case 選:
73
+ *
74
+ * - **`absoluteDiv`**(TreeView pattern):render absolute `<div>` child;
75
+ * consumer 必須有 `position: relative` parent。
76
+ * - **`pseudoBefore` / `pseudoAfter`**:用 Tailwind `before:` / `after:` pseudo-element;
77
+ * consumer 不需 child element(適合 cloneElement 等不能加 child 的場景)。
78
+ *
79
+ * 兩變體 thickness / color / z-index 完全一致,差別純 implementation 機制。
80
+ */
81
+ export declare const dropIndicatorColumn: {
82
+ readonly before: "absolute top-0 bottom-0 left-[-1px] w-0.5 bg-primary z-10 pointer-events-none";
83
+ readonly after: "absolute top-0 bottom-0 right-[-1px] w-0.5 bg-primary z-10 pointer-events-none";
84
+ readonly pseudoBefore: "before:absolute before:top-0 before:bottom-0 before:left-[-1px] before:w-0.5 before:bg-primary before:z-10 before:pointer-events-none before:content-[\"\"]";
85
+ readonly pseudoAfter: "after:absolute after:top-0 after:bottom-0 after:right-[-1px] after:w-0.5 after:bg-primary after:z-10 after:pointer-events-none after:content-[\"\"]";
86
+ };
87
+ /**
88
+ * Nested 拖入 highlight(TreeView / nested rows 拖到子層)。整 row 加 background。
89
+ */
90
+ export declare const dropIndicatorInside: "bg-primary-subtle";
91
+ /** Draggable element 拖中時的 cursor(grabbing)*/
92
+ export declare const dragActiveCursor: "cursor-grabbing";
93
+ /**
94
+ * Combined drag handle cursor canonical(2026-05-07 v15.7 user directive):
95
+ * **只 cursor-grab,不變 grabbing**。對齊 Material / Carbon / Polaris canonical —
96
+ * drag affordance 由 visible button 提供,cursor 變化反而干擾 indicator+ghost 視覺焦點。
97
+ * Consumer 直接 cn(...)。
98
+ */
99
+ export declare const dragHandleCursorClass: "cursor-grab";
100
+ /**
101
+ * Ghost 跟 cursor 維持「cursor 在 ghost 點下時相對位置」SSOT(對齊 user directive
102
+ * 「ghost 和 cursor 要確保相對位置是合理的而且有 ssot」)。
103
+ *
104
+ * **Why need this**:dnd-kit DragOverlay 預設 ghost.top-left = source rect (`setNodeRef`)
105
+ * 的 top-left。當 source ≠ activator 位置不同(e.g. activator = portal'd Button 在
106
+ * table outer 邊緣;source = primary row 在 table 內 column region),cursor 點下
107
+ * activator → cursor 落在 source rect 的 negative offset → ghost 永遠相對 source rect
108
+ * 起算 → cursor 跟 ghost 起始就有大 offset(e.g. 100+ px),drag 期間維持錯位。
109
+ *
110
+ * **本 modifier**:把 (cursor.initial - source.left, cursor.initial - source.top)
111
+ * 加進 transform → ghost.top-left 永遠對齊 cursor 位置(cursor 在 ghost 左前角)。
112
+ * Consumer 套進 DndContext.modifiers array,所有 drag scenario 套用 = SSOT。
113
+ *
114
+ * **對齊世界級**:Linear / Notion / Jira / AG Grid 的 row drag ghost 都跟 cursor
115
+ * 維持初始相對位置(整列拖時 cursor 在 click 點;button 拖時 cursor 在 button 位置)—
116
+ * 這個 modifier 把「整列拖 + 整列 ghost」UX 在 button-only / 多 region 場景下也達到。
117
+ */
118
+ export declare const snapToCursorModifier: Modifier;
119
+ /**
120
+ * Drop position 等同 source 原位 → noop。對齊 Linear / Notion / Jira / TreeView SSOT:
121
+ * user 拉到 source 鄰近(視覺等同原位)應 cancel,不 commit reorder 也不顯 indicator。
122
+ *
123
+ * Consumer 在 onDragOver 用此判斷是否畫 indicator;onDragEnd 用同一函數判斷是否
124
+ * 觸發 reorder callback —— 兩處共享一個 invariant,避免「indicator 顯示但 commit 不 fire」
125
+ * 或反向 drift。
126
+ *
127
+ * 規則:
128
+ * - source idx N,drop on idx N (self) → noop
129
+ * - source idx N,drop on idx N-1 with side='after' = N(原位)→ noop
130
+ * - source idx N,drop on idx N+1 with side='before' = N(原位)→ noop
131
+ */
132
+ export declare function isReorderNoop(activeIdx: number, overIdx: number, side: 'before' | 'after'): boolean;
133
+ /**
134
+ * 為 dnd-kit DragOverlay 重建跨 region 的完整 row ghost(2026-05-07 v15.9 Bug A+B 修)。
135
+ *
136
+ * **Why cross-region**:Pinned column DataTable 結構 = 三 region(left / center / right)
137
+ * 各 mount 一個 row div(同 `row.id`),listeners 只在 primary(center)。之前 ghost 只
138
+ * 抓 primary region row → cells 只有 center 欄(missing pinned SKU / Updated)→ user 看
139
+ * 到 ghost「跟 source 不一樣」(Bug B)。virtualized + 無 pinning 下亦可能因 region 多
140
+ * 個 mount 衍生不可預期(Bug A)。
141
+ *
142
+ * **Algorithm**:
143
+ * 1. 收集 `[role="row"][data-sortable-row-id="${id}"]` 所有 match(可能 1-3 個 region)
144
+ * 2. DOM 文檔順序剛好是 left → center → right(因 body region 排列順序)
145
+ * 3. 從每個 region row 的 children(role=cell)抽出 outerHTML,串成單一 flex row
146
+ * 4. 總寬 = sum(region offsetWidth)
147
+ * 5. Wrap 用 primary region 的 className(視覺一致)+ inline `display:flex; width:total`
148
+ *
149
+ * **Single-region case**(無 pinning,常見):退化成 single row clone + sanitize,行為跟舊版同。
150
+ *
151
+ * **Returns** `{ html, width }` 或 `null`(找不到 row)。
152
+ */
153
+ export declare function reconstructFullRowGhost(rowId: string, tableRoot: HTMLElement | null): {
154
+ html: string;
155
+ width: number;
156
+ } | null;
157
+ export type DropPosition = 'before' | 'after' | 'inside';
158
+ //# sourceMappingURL=drag-visual.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drag-visual.d.ts","sourceRoot":"","sources":["../../src/lib/drag-visual.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAA;AACnC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAI7C;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,EAAG,kBAA2B,CAAA;AAE1D,4EAA4E;AAC5E,wBAAgB,eAAe,CAAC,UAAU,EAAE,OAAO,GAAG,KAAK,CAAC,aAAa,CAExE;AAED;;;;;;;;GAQG;AAIH;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB;;;CAGnB,CAAA;AAEV;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,mBAAmB;;;;;CAOtB,CAAA;AAIV;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAG,mBAA4B,CAAA;AAI/D,6CAA6C;AAC7C,eAAO,MAAM,gBAAgB,EAAG,iBAA0B,CAAA;AAC1D;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,EAAG,aAAsB,CAAA;AAI3D;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,oBAAoB,EAAE,QAgBlC,CAAA;AAID;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,GAAG,OAAO,CAKnG;AAID;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,WAAW,GAAG,IAAI,GAC5B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CA6CxC;AAqBD,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAA"}
@@ -0,0 +1,96 @@
1
+ const dragSourceClass = "opacity-disabled";
2
+ function dragSourceStyle(isDragging) {
3
+ return isDragging ? { opacity: "var(--opacity-disabled)" } : {};
4
+ }
5
+ const dropIndicatorRow = {
6
+ before: "absolute top-0 left-0 right-0 h-0.5 bg-primary z-10 pointer-events-none",
7
+ after: "absolute bottom-0 left-0 right-0 h-0.5 bg-primary z-10 pointer-events-none"
8
+ };
9
+ const dropIndicatorColumn = {
10
+ // Absolute div 變體(consumer render <div>)
11
+ before: "absolute top-0 bottom-0 left-[-1px] w-0.5 bg-primary z-10 pointer-events-none",
12
+ after: "absolute top-0 bottom-0 right-[-1px] w-0.5 bg-primary z-10 pointer-events-none",
13
+ // Pseudo-element 變體(用 Tailwind before:/after:)
14
+ pseudoBefore: 'before:absolute before:top-0 before:bottom-0 before:left-[-1px] before:w-0.5 before:bg-primary before:z-10 before:pointer-events-none before:content-[""]',
15
+ pseudoAfter: 'after:absolute after:top-0 after:bottom-0 after:right-[-1px] after:w-0.5 after:bg-primary after:z-10 after:pointer-events-none after:content-[""]'
16
+ };
17
+ const dropIndicatorInside = "bg-primary-subtle";
18
+ const dragActiveCursor = "cursor-grabbing";
19
+ const dragHandleCursorClass = "cursor-grab";
20
+ const snapToCursorModifier = ({ transform, activatorEvent, draggingNodeRect }) => {
21
+ if (!activatorEvent || !draggingNodeRect) return transform;
22
+ if (!("clientX" in activatorEvent) || !("clientY" in activatorEvent)) return transform;
23
+ const ev = activatorEvent;
24
+ if (typeof ev.clientX !== "number" || typeof ev.clientY !== "number") return transform;
25
+ const offsetX = ev.clientX - draggingNodeRect.left;
26
+ const offsetY = ev.clientY - draggingNodeRect.top;
27
+ return {
28
+ ...transform,
29
+ x: transform.x + offsetX,
30
+ y: transform.y + offsetY
31
+ };
32
+ };
33
+ function isReorderNoop(activeIdx, overIdx, side) {
34
+ if (activeIdx === overIdx) return true;
35
+ if (side === "after" && overIdx + 1 === activeIdx) return true;
36
+ if (side === "before" && overIdx - 1 === activeIdx) return true;
37
+ return false;
38
+ }
39
+ function reconstructFullRowGhost(rowId, tableRoot) {
40
+ if (!tableRoot) return null;
41
+ const escaped = rowId.replace(/(["\\])/g, "\\$1");
42
+ const allRows = Array.from(
43
+ tableRoot.querySelectorAll(
44
+ `[role="row"][data-sortable-row-id="${escaped}"]`
45
+ )
46
+ );
47
+ if (allRows.length === 0) return null;
48
+ if (allRows.length === 1) {
49
+ const sourceEl = allRows[0];
50
+ const clone = sourceEl.cloneNode(true);
51
+ sanitizeGhostClone(clone, sourceEl.offsetWidth);
52
+ return { html: clone.outerHTML, width: sourceEl.offsetWidth };
53
+ }
54
+ const primaryRow = allRows.find((r) => r.dataset.rowDragSource === "true") ?? allRows[0];
55
+ const cellsHtml = [];
56
+ let totalWidth = 0;
57
+ for (const regionRow of allRows) {
58
+ totalWidth += regionRow.offsetWidth;
59
+ for (const cell of Array.from(
60
+ regionRow.querySelectorAll('[role="cell"],[role="gridcell"]')
61
+ )) {
62
+ const cellClone = cell.cloneNode(true);
63
+ cellClone.querySelectorAll("[data-drag-handle-portal]").forEach((n) => n.remove());
64
+ cellClone.style.transform = "none";
65
+ cellsHtml.push(cellClone.outerHTML);
66
+ }
67
+ }
68
+ const inlineStyle = `display:flex; width:${totalWidth}px; transform:none; position:static; opacity:1; transition:none;`;
69
+ const html = `<div role="row" class="${primaryRow.className}" style="${inlineStyle}">${cellsHtml.join("")}</div>`;
70
+ return { html, width: totalWidth };
71
+ }
72
+ function sanitizeGhostClone(el, width) {
73
+ el.style.position = "static";
74
+ el.style.transform = "none";
75
+ el.style.transition = "none";
76
+ el.style.opacity = "1";
77
+ el.style.zIndex = "";
78
+ el.style.width = `${width}px`;
79
+ el.removeAttribute("data-row-index");
80
+ el.removeAttribute("aria-rowindex");
81
+ el.removeAttribute("data-hovered");
82
+ el.querySelectorAll("[data-drag-handle-portal]").forEach((n) => n.remove());
83
+ }
84
+ export {
85
+ dragActiveCursor,
86
+ dragHandleCursorClass,
87
+ dragSourceClass,
88
+ dragSourceStyle,
89
+ dropIndicatorColumn,
90
+ dropIndicatorInside,
91
+ dropIndicatorRow,
92
+ isReorderNoop,
93
+ reconstructFullRowGhost,
94
+ snapToCursorModifier
95
+ };
96
+ //# sourceMappingURL=drag-visual.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drag-visual.js","sources":["../../src/lib/drag-visual.ts"],"sourcesContent":["/**\n * Drag visual SSOT(2026-05-06 v14.5)\n *\n * DS canonical drag visual,3 處 consumer(TreeView / DataTable row drag / DataTable column reorder)\n * 共用同一組 styling constant — 對齊 TreeView 最早 codified 的 pattern。\n *\n * ## Pattern\n *\n * - **Source element**(被拖中的 row/column):`opacity-30`(半透,user 仍看得到原位)\n * — 不是 `opacity:0` 全隱形,因 user 拖太遠看不到「源頭」會迷失方向。對齊 TreeView 最早 v1 + Notion / Atlassian / Linear。\n * - **Ghost preview**(浮動 follow cursor):透過 dnd-kit `<DragOverlay>` portal,clone source 的 outerHTML\n * strip transform/transition/opacity → render 在 portal 層,visually 跟 cursor 走。\n * - **Drop indicator**(目標位置藍細線):2px(`h-0.5` / `w-0.5`)`bg-primary` absolute line:\n * - **Row context**(TreeView / table row drag):水平線 在 target row 的 top(before)/ bottom(after)\n * - **Column context**(table column reorder):垂直線 在 target column 的 left(before)/ right(after)\n * - **Inside-drop highlight**(nested target,如拖到 TreeView 子層 / Table nested row 內):整 row `bg-primary-subtle`\n *\n * ## Why centralize\n *\n * 三處 drag 之前各自實作不一致(TreeView opacity:30 + indicator vs DataTable row opacity:0 no indicator\n * vs Column reorder opacity:0 + indicator)— M23 / M27 violation(DS 內 canonical 沒對齊)。\n * 抽到此 module 後 3 處 import 同 constants,未來改 1 處全 sync。\n *\n * ## Token usage\n *\n * - `bg-primary`:semantic state token(`--primary`)— 跟 focus state ring color 同 source(M23 一致)\n * - `bg-primary-subtle`:semantic primary subtle(`--primary-subtle`)— inside-drop dim background\n * - `h-0.5` / `w-0.5`:Tailwind size token = 2px(對齊 hairline divider thickness 概念)\n * - `opacity-30`:Tailwind 30% opacity(半透但仍清楚看到 outline)\n */\n\nimport type * as React from 'react'\nimport type { Modifier } from '@dnd-kit/core'\n\n// ── Source element styling(被拖中的 source row/column)─────────────────────\n\n/**\n * Source element 拖中的 opacity className。\n *\n * **Reuse `opacity-disabled` token**(2026-05-06 v14.5.2 對齊 Atlassian Pragmatic):\n * Atlassian dnd guidelines 也用 `opacity.disabled` token 給 drag source dim(他們值 0.40,\n * 我們值 0.45,role 一致)。不另開 drag-source 專屬 token — single-role-per-value 哲學\n * + DS internal SSOT。\n */\nexport const dragSourceClass = 'opacity-disabled' as const\n\n/** Source element 拖中的 inline style(consume DS token `--opacity-disabled`)*/\nexport function dragSourceStyle(isDragging: boolean): React.CSSProperties {\n return isDragging ? { opacity: 'var(--opacity-disabled)' } : {}\n}\n\n/**\n * DragOverlay ghost 視覺 canonical(2026-05-06 v14.5.2 對齊 dnd-kit / Atlassian / Material):\n * **不 dim**(opacity:1)+ elevation shadow `shadow-[var(--elevation-200)]` + 顯式 bg\n * (`bg-surface` 或 `bg-surface-raised`)+ border。Lifted preview pattern,跟 surface 拉開\n * 視覺距離靠 shadow 不靠 opacity。\n *\n * Consumer 自己組 className(因 ghost 結構各自不同 — TreeView 是 icon+label compact pill,\n * DataTable 是 cloned row HTML wrapper),這裡只 codify 規則 不導出 class string。\n */\n\n// ── Drop indicator className(target row/column edge 顯藍細線)──────────────\n\n/**\n * Row drop indicator(水平線,跨 row 全寬)\n *\n * - `before`:在 target row top edge,提示「放開後會插入這 row 之前」\n * - `after`:在 target row bottom edge,提示「放開後會插入這 row 之後」\n *\n * **Indent option**:nested context(TreeView / table nested rows)可加 `style={{ left: indentPx }}`\n * 讓 indicator 隨 depth 縮排,視覺對齊 row content 起始位置。\n */\nexport const dropIndicatorRow = {\n before: 'absolute top-0 left-0 right-0 h-0.5 bg-primary z-10 pointer-events-none',\n after: 'absolute bottom-0 left-0 right-0 h-0.5 bg-primary z-10 pointer-events-none',\n} as const\n\n/**\n * Column drop indicator(垂直線,跨 column header height)\n *\n * - `before`:在 target column left edge(-1px outset 對齊 grid line)\n * - `after`:在 target column right edge(-1px outset 對齊 grid line)\n *\n * 兩種變體,視覺一致(2px primary line),只有 DOM mechanism 不同 — consumer 視 use case 選:\n *\n * - **`absoluteDiv`**(TreeView pattern):render absolute `<div>` child;\n * consumer 必須有 `position: relative` parent。\n * - **`pseudoBefore` / `pseudoAfter`**:用 Tailwind `before:` / `after:` pseudo-element;\n * consumer 不需 child element(適合 cloneElement 等不能加 child 的場景)。\n *\n * 兩變體 thickness / color / z-index 完全一致,差別純 implementation 機制。\n */\nexport const dropIndicatorColumn = {\n // Absolute div 變體(consumer render <div>)\n before: 'absolute top-0 bottom-0 left-[-1px] w-0.5 bg-primary z-10 pointer-events-none',\n after: 'absolute top-0 bottom-0 right-[-1px] w-0.5 bg-primary z-10 pointer-events-none',\n // Pseudo-element 變體(用 Tailwind before:/after:)\n pseudoBefore: 'before:absolute before:top-0 before:bottom-0 before:left-[-1px] before:w-0.5 before:bg-primary before:z-10 before:pointer-events-none before:content-[\"\"]',\n pseudoAfter: 'after:absolute after:top-0 after:bottom-0 after:right-[-1px] after:w-0.5 after:bg-primary after:z-10 after:pointer-events-none after:content-[\"\"]',\n} as const\n\n// ── Inside-drop highlight(nested context,target row 整列亮藍 subtle)─────\n\n/**\n * Nested 拖入 highlight(TreeView / nested rows 拖到子層)。整 row 加 background。\n */\nexport const dropIndicatorInside = 'bg-primary-subtle' as const\n\n// ── Cursor classes ────────────────────────────────────────────────────────\n\n/** Draggable element 拖中時的 cursor(grabbing)*/\nexport const dragActiveCursor = 'cursor-grabbing' as const\n/**\n * Combined drag handle cursor canonical(2026-05-07 v15.7 user directive):\n * **只 cursor-grab,不變 grabbing**。對齊 Material / Carbon / Polaris canonical —\n * drag affordance 由 visible button 提供,cursor 變化反而干擾 indicator+ghost 視覺焦點。\n * Consumer 直接 cn(...)。\n */\nexport const dragHandleCursorClass = 'cursor-grab' as const\n\n// ── Modifier:Ghost 跟 cursor 維持初始相對位置 SSOT(v15.7 user directive) ─\n\n/**\n * Ghost 跟 cursor 維持「cursor 在 ghost 點下時相對位置」SSOT(對齊 user directive\n * 「ghost 和 cursor 要確保相對位置是合理的而且有 ssot」)。\n *\n * **Why need this**:dnd-kit DragOverlay 預設 ghost.top-left = source rect (`setNodeRef`)\n * 的 top-left。當 source ≠ activator 位置不同(e.g. activator = portal'd Button 在\n * table outer 邊緣;source = primary row 在 table 內 column region),cursor 點下\n * activator → cursor 落在 source rect 的 negative offset → ghost 永遠相對 source rect\n * 起算 → cursor 跟 ghost 起始就有大 offset(e.g. 100+ px),drag 期間維持錯位。\n *\n * **本 modifier**:把 (cursor.initial - source.left, cursor.initial - source.top)\n * 加進 transform → ghost.top-left 永遠對齊 cursor 位置(cursor 在 ghost 左前角)。\n * Consumer 套進 DndContext.modifiers array,所有 drag scenario 套用 = SSOT。\n *\n * **對齊世界級**:Linear / Notion / Jira / AG Grid 的 row drag ghost 都跟 cursor\n * 維持初始相對位置(整列拖時 cursor 在 click 點;button 拖時 cursor 在 button 位置)—\n * 這個 modifier 把「整列拖 + 整列 ghost」UX 在 button-only / 多 region 場景下也達到。\n */\nexport const snapToCursorModifier: Modifier = ({ transform, activatorEvent, draggingNodeRect }) => {\n if (!activatorEvent || !draggingNodeRect) return transform\n // **codex P1 fix(2026-05-07 v15.12)**:KeyboardSensor 走 KeyboardEvent,沒\n // `clientX/clientY` → `offsetX/offsetY = NaN` → ghost transform 變 NaN/NaN →\n // overlay 定位+collision 全 corrupt → keyboard-initiated drag 直接壞。Guard 條件:\n // 只 pointer/mouse event 才平移,keyboard 走 dnd-kit 預設(無 modifier 偏移)。\n if (!('clientX' in activatorEvent) || !('clientY' in activatorEvent)) return transform\n const ev = activatorEvent as PointerEvent | MouseEvent\n if (typeof ev.clientX !== 'number' || typeof ev.clientY !== 'number') return transform\n const offsetX = ev.clientX - draggingNodeRect.left\n const offsetY = ev.clientY - draggingNodeRect.top\n return {\n ...transform,\n x: transform.x + offsetX,\n y: transform.y + offsetY,\n }\n}\n\n// ── Reorder noop helper(SSOT 對齊 row + column reorder canonical) ────────\n\n/**\n * Drop position 等同 source 原位 → noop。對齊 Linear / Notion / Jira / TreeView SSOT:\n * user 拉到 source 鄰近(視覺等同原位)應 cancel,不 commit reorder 也不顯 indicator。\n *\n * Consumer 在 onDragOver 用此判斷是否畫 indicator;onDragEnd 用同一函數判斷是否\n * 觸發 reorder callback —— 兩處共享一個 invariant,避免「indicator 顯示但 commit 不 fire」\n * 或反向 drift。\n *\n * 規則:\n * - source idx N,drop on idx N (self) → noop\n * - source idx N,drop on idx N-1 with side='after' = N(原位)→ noop\n * - source idx N,drop on idx N+1 with side='before' = N(原位)→ noop\n */\nexport function isReorderNoop(activeIdx: number, overIdx: number, side: 'before' | 'after'): boolean {\n if (activeIdx === overIdx) return true\n if (side === 'after' && overIdx + 1 === activeIdx) return true\n if (side === 'before' && overIdx - 1 === activeIdx) return true\n return false\n}\n\n// ── Ghost reconstruction(跨 region table row → 完整橫跨 ghost) ───────────\n\n/**\n * 為 dnd-kit DragOverlay 重建跨 region 的完整 row ghost(2026-05-07 v15.9 Bug A+B 修)。\n *\n * **Why cross-region**:Pinned column DataTable 結構 = 三 region(left / center / right)\n * 各 mount 一個 row div(同 `row.id`),listeners 只在 primary(center)。之前 ghost 只\n * 抓 primary region row → cells 只有 center 欄(missing pinned SKU / Updated)→ user 看\n * 到 ghost「跟 source 不一樣」(Bug B)。virtualized + 無 pinning 下亦可能因 region 多\n * 個 mount 衍生不可預期(Bug A)。\n *\n * **Algorithm**:\n * 1. 收集 `[role=\"row\"][data-sortable-row-id=\"${id}\"]` 所有 match(可能 1-3 個 region)\n * 2. DOM 文檔順序剛好是 left → center → right(因 body region 排列順序)\n * 3. 從每個 region row 的 children(role=cell)抽出 outerHTML,串成單一 flex row\n * 4. 總寬 = sum(region offsetWidth)\n * 5. Wrap 用 primary region 的 className(視覺一致)+ inline `display:flex; width:total`\n *\n * **Single-region case**(無 pinning,常見):退化成 single row clone + sanitize,行為跟舊版同。\n *\n * **Returns** `{ html, width }` 或 `null`(找不到 row)。\n */\nexport function reconstructFullRowGhost(\n rowId: string,\n tableRoot: HTMLElement | null,\n): { html: string; width: number } | null {\n // **codex P1 fix(2026-05-07 v15.13)**:tableRoot 強制 required(non-optional)。\n // 之前 fallback document 仍允許多 DataTable 同頁 row.id reuse(default index-based)→\n // cross-instance ghost 污染。strict-scope canonical:caller 必傳 tableRef.current\n // (`[data-data-table-outer]`),null 直接 return null(caller 該守 ref 已 mount)。\n if (!tableRoot) return null\n const escaped = rowId.replace(/([\"\\\\])/g, '\\\\$1')\n const allRows = Array.from(\n tableRoot.querySelectorAll<HTMLElement>(\n `[role=\"row\"][data-sortable-row-id=\"${escaped}\"]`,\n ),\n )\n if (allRows.length === 0) return null\n\n // Single-region:直接 clone 整 row + sanitize(無 pinning 場景,跟舊版一致)\n if (allRows.length === 1) {\n const sourceEl = allRows[0]\n const clone = sourceEl.cloneNode(true) as HTMLElement\n sanitizeGhostClone(clone, sourceEl.offsetWidth)\n return { html: clone.outerHTML, width: sourceEl.offsetWidth }\n }\n\n // Multi-region:抽 cells 串接。Primary region(`data-row-drag-source=\"true\"`)的\n // className + role 給 outer wrapper,確保 hover bg / border / row-height token 一致。\n const primaryRow =\n allRows.find((r) => r.dataset.rowDragSource === 'true') ?? allRows[0]\n const cellsHtml: string[] = []\n let totalWidth = 0\n for (const regionRow of allRows) {\n totalWidth += regionRow.offsetWidth\n for (const cell of Array.from(\n regionRow.querySelectorAll<HTMLElement>('[role=\"cell\"],[role=\"gridcell\"]'),\n )) {\n const cellClone = cell.cloneNode(true) as HTMLElement\n // Strip drag handle portal(只在 primary region)+ inline transform 殘餘\n cellClone.querySelectorAll('[data-drag-handle-portal]').forEach((n) => n.remove())\n cellClone.style.transform = 'none'\n cellsHtml.push(cellClone.outerHTML)\n }\n }\n // 套 primary row 的 class(cn 結果含 hover/border/sizing token)+ display:flex 顯式\n // 容納 cells,inline style override transform/position/opacity 避免 stale 殘餘\n const inlineStyle = `display:flex; width:${totalWidth}px; transform:none; position:static; opacity:1; transition:none;`\n const html = `<div role=\"row\" class=\"${primaryRow.className}\" style=\"${inlineStyle}\">${cellsHtml.join('')}</div>`\n return { html, width: totalWidth }\n}\n\n/**\n * Reset ghost clone inline styles + strip 干擾 attributes(transform/opacity/data-row-index 等)。\n * Internal helper, not exported.\n */\nfunction sanitizeGhostClone(el: HTMLElement, width: number): void {\n el.style.position = 'static'\n el.style.transform = 'none'\n el.style.transition = 'none'\n el.style.opacity = '1'\n el.style.zIndex = ''\n el.style.width = `${width}px`\n el.removeAttribute('data-row-index')\n el.removeAttribute('aria-rowindex')\n el.removeAttribute('data-hovered')\n el.querySelectorAll('[data-drag-handle-portal]').forEach((n) => n.remove())\n}\n\n// ── Type exports for consumer ─────────────────────────────────────────────\n\nexport type DropPosition = 'before' | 'after' | 'inside'\n"],"names":[],"mappings":"AA4CO,MAAM,kBAAkB;AAGxB,SAAS,gBAAgB,YAA0C;AACxE,SAAO,aAAa,EAAE,SAAS,0BAAA,IAA8B,CAAA;AAC/D;AAuBO,MAAM,mBAAmB;AAAA,EAC9B,QAAQ;AAAA,EACR,OAAO;AACT;AAiBO,MAAM,sBAAsB;AAAA;AAAA,EAEjC,QAAQ;AAAA,EACR,OAAO;AAAA;AAAA,EAEP,cAAc;AAAA,EACd,aAAa;AACf;AAOO,MAAM,sBAAsB;AAK5B,MAAM,mBAAmB;AAOzB,MAAM,wBAAwB;AAsB9B,MAAM,uBAAiC,CAAC,EAAE,WAAW,gBAAgB,uBAAuB;AACjG,MAAI,CAAC,kBAAkB,CAAC,iBAAkB,QAAO;AAKjD,MAAI,EAAE,aAAa,mBAAmB,EAAE,aAAa,gBAAiB,QAAO;AAC7E,QAAM,KAAK;AACX,MAAI,OAAO,GAAG,YAAY,YAAY,OAAO,GAAG,YAAY,SAAU,QAAO;AAC7E,QAAM,UAAU,GAAG,UAAU,iBAAiB;AAC9C,QAAM,UAAU,GAAG,UAAU,iBAAiB;AAC9C,SAAO;AAAA,IACL,GAAG;AAAA,IACH,GAAG,UAAU,IAAI;AAAA,IACjB,GAAG,UAAU,IAAI;AAAA,EAAA;AAErB;AAiBO,SAAS,cAAc,WAAmB,SAAiB,MAAmC;AACnG,MAAI,cAAc,QAAS,QAAO;AAClC,MAAI,SAAS,WAAW,UAAU,MAAM,UAAW,QAAO;AAC1D,MAAI,SAAS,YAAY,UAAU,MAAM,UAAW,QAAO;AAC3D,SAAO;AACT;AAwBO,SAAS,wBACd,OACA,WACwC;AAKxC,MAAI,CAAC,UAAW,QAAO;AACvB,QAAM,UAAU,MAAM,QAAQ,YAAY,MAAM;AAChD,QAAM,UAAU,MAAM;AAAA,IACpB,UAAU;AAAA,MACR,sCAAsC,OAAO;AAAA,IAAA;AAAA,EAC/C;AAEF,MAAI,QAAQ,WAAW,EAAG,QAAO;AAGjC,MAAI,QAAQ,WAAW,GAAG;AACxB,UAAM,WAAW,QAAQ,CAAC;AAC1B,UAAM,QAAQ,SAAS,UAAU,IAAI;AACrC,uBAAmB,OAAO,SAAS,WAAW;AAC9C,WAAO,EAAE,MAAM,MAAM,WAAW,OAAO,SAAS,YAAA;AAAA,EAClD;AAIA,QAAM,aACJ,QAAQ,KAAK,CAAC,MAAM,EAAE,QAAQ,kBAAkB,MAAM,KAAK,QAAQ,CAAC;AACtE,QAAM,YAAsB,CAAA;AAC5B,MAAI,aAAa;AACjB,aAAW,aAAa,SAAS;AAC/B,kBAAc,UAAU;AACxB,eAAW,QAAQ,MAAM;AAAA,MACvB,UAAU,iBAA8B,iCAAiC;AAAA,IAAA,GACxE;AACD,YAAM,YAAY,KAAK,UAAU,IAAI;AAErC,gBAAU,iBAAiB,2BAA2B,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ;AACjF,gBAAU,MAAM,YAAY;AAC5B,gBAAU,KAAK,UAAU,SAAS;AAAA,IACpC;AAAA,EACF;AAGA,QAAM,cAAc,uBAAuB,UAAU;AACrD,QAAM,OAAO,0BAA0B,WAAW,SAAS,YAAY,WAAW,KAAK,UAAU,KAAK,EAAE,CAAC;AACzG,SAAO,EAAE,MAAM,OAAO,WAAA;AACxB;AAMA,SAAS,mBAAmB,IAAiB,OAAqB;AAChE,KAAG,MAAM,WAAW;AACpB,KAAG,MAAM,YAAY;AACrB,KAAG,MAAM,aAAa;AACtB,KAAG,MAAM,UAAU;AACnB,KAAG,MAAM,SAAS;AAClB,KAAG,MAAM,QAAQ,GAAG,KAAK;AACzB,KAAG,gBAAgB,gBAAgB;AACnC,KAAG,gBAAgB,eAAe;AAClC,KAAG,gBAAgB,cAAc;AACjC,KAAG,iBAAiB,2BAA2B,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ;AAC5E;"}