@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,49 @@
1
+ /**
2
+ * DataTableColumnVisibilityPanel — Issue 3 primitive(2026-05-10)。
3
+ *
4
+ * 從 WithBulkActions story L868+(149 lines)+ RoadmapAllInOne(L1796+,53 lines)抽出 SSOT
5
+ * primitive。Roadmap demo 跟 WithBulkActions 都用此 panel 開啟「欄位顯示」popover。
6
+ *
7
+ * **Feature SSOT**(對齊 Linear / Airtable / Notion / Material X-DataGrid 的 columnVisibility panel idiom):
8
+ * - 列出所有 togglable 欄位 + Eye / EyeOff 切換
9
+ * - Locked 欄位(`lockedIds`)— 顯 Lock icon,不可 toggle / 不可 drag
10
+ * - 可選 search filter(`searchable`,跨欄位 label match)
11
+ * - 可選 column drag reorder(`onColumnOrderChange` 傳 → 啟 DnD)
12
+ * - 可選 reset 按鈕(`onReset`,header 區 RotateCcw)
13
+ * - Bidirectional bulk toggle(footer button:全可見 → 全部隱藏 / 任一隱藏 → 顯示全部)
14
+ *
15
+ * **Why 抽 primitive**(per Issue 3 Rule-of-3):RoadmapAllInOne + WithBulkActions + 未來 product
16
+ * UI 至少 3 處消費同 panel。重複 hand-craft → 設計語言 drift(已抓到:Roadmap 版無 search /
17
+ * 無 drag / 無 reset,WithBulkActions 版有,語意不一致)。Primitive 把所有 feature 集中,
18
+ * consumer opt-in via props 確保 SSOT。
19
+ *
20
+ * **對齊**:Linear column-visibility-panel pattern / Material X-DataGrid `<GridColumnsPanel>`
21
+ * / Airtable Field-config drawer。
22
+ */
23
+ interface ColumnVisibilityPanelColumn {
24
+ /** Column id(stable identifier;對齊 DataTable column.id / accessorKey)*/
25
+ id: string;
26
+ /** Column header label(human-readable)*/
27
+ label: string;
28
+ }
29
+ export interface DataTableColumnVisibilityPanelProps {
30
+ /** 全部可 toggle 欄位(consumer 已過濾掉 system cols 如 __select__)*/
31
+ columns: ColumnVisibilityPanelColumn[];
32
+ /** 受控 visibility map(`true` / undefined = visible / `false` = hidden)*/
33
+ visibility: Record<string, boolean>;
34
+ /** Visibility 變更 callback */
35
+ onVisibilityChange: (next: Record<string, boolean>) => void;
36
+ /** 受控 column order(若提供啟 DnD reorder) */
37
+ columnOrder?: string[];
38
+ /** Order 變更 callback;若提供 → 啟用 drag handle / DnD reorder */
39
+ onColumnOrderChange?: (next: string[]) => void;
40
+ /** Locked column ids(顯 Lock icon,不可 toggle / 不可 drag)*/
41
+ lockedIds?: string[];
42
+ /** 是否啟搜尋 input(預設 false)*/
43
+ searchable?: boolean;
44
+ /** 是否顯 reset button(任一欄隱藏才顯,onClick 清空 visibility map)*/
45
+ resettable?: boolean;
46
+ }
47
+ export declare function DataTableColumnVisibilityPanel({ columns, visibility, onVisibilityChange, columnOrder, onColumnOrderChange, lockedIds, searchable, resettable, }: DataTableColumnVisibilityPanelProps): import("react/jsx-runtime").JSX.Element;
48
+ export {};
49
+ //# sourceMappingURL=data-table-column-visibility-panel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table-column-visibility-panel.d.ts","sourceRoot":"","sources":["../../../src/components/DataTable/data-table-column-visibility-panel.tsx"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAgBH,UAAU,2BAA2B;IACnC,uEAAuE;IACvE,EAAE,EAAE,MAAM,CAAA;IACV,yCAAyC;IACzC,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,mCAAmC;IAClD,2DAA2D;IAC3D,OAAO,EAAE,2BAA2B,EAAE,CAAA;IACtC,wEAAwE;IACxE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACnC,6BAA6B;IAC7B,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;IAC3D,wCAAwC;IACxC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,2DAA2D;IAC3D,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,CAAA;IAC9C,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;IACpB,2BAA2B;IAC3B,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,yDAAyD;IACzD,UAAU,CAAC,EAAE,OAAO,CAAA;CAGrB;AAED,wBAAgB,8BAA8B,CAAC,EAC7C,OAAO,EACP,UAAU,EACV,kBAAkB,EAClB,WAAW,EACX,mBAAmB,EACnB,SAAc,EACd,UAAkB,EAClB,UAAkB,GACnB,EAAE,mCAAmC,2CAmIrC"}
@@ -0,0 +1,30 @@
1
+ import * as React from 'react';
2
+ import type { ColumnDef } from '@tanstack/react-table';
3
+ import { createEmptyFilterTree, isFilterTreeActive, evaluateTree, dataTableFilterMatch, type Conjunction, type FilterCondition, type FilterGroup, type FilterTree, type FilterTreeFlat, type FilterTreeNested } from './filter-tree';
4
+ export { createEmptyFilterTree, isFilterTreeActive, evaluateTree, dataTableFilterMatch, };
5
+ export type { Conjunction, FilterCondition, FilterGroup, FilterTree, FilterTreeFlat, FilterTreeNested };
6
+ export interface DataTableFilterPanelProps<TData> {
7
+ /** flat(無 group)or nested(1-level group)— consumer 拍板 */
8
+ mode: 'flat' | 'nested';
9
+ /** 可被 filter 的 columns */
10
+ columns: ColumnDef<TData, any>[];
11
+ /** 當前 FilterTree(controlled) */
12
+ value: FilterTree;
13
+ /** state 變更 callback */
14
+ onChange: (next: FilterTree) => void;
15
+ /**
16
+ * 管理員 set-as-default 的 baseline(refresh icon 顯示判定用)。
17
+ * 當 `value` ≠ `defaultValue`(deep equal)→ panel header 顯示 refresh icon,
18
+ * click → reset 回 defaultValue。對齊 sort 邏輯(相同 modified-from-default UX)。
19
+ */
20
+ defaultValue?: FilterTree;
21
+ /** Cell ⌄ menu「Filter by this」帶入的 column id(自動 add 一條 condition) */
22
+ prefilledColumnId?: string;
23
+ onPrefillConsumed?: () => void;
24
+ onClose?: () => void;
25
+ className?: string;
26
+ }
27
+ export declare const DataTableFilterPanel: <TData>(props: DataTableFilterPanelProps<TData> & {
28
+ ref?: React.ForwardedRef<HTMLDivElement>;
29
+ }) => React.ReactElement;
30
+ //# sourceMappingURL=data-table-filter-panel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table-filter-panel.d.ts","sourceRoot":"","sources":["../../../src/components/DataTable/data-table-filter-panel.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AAyBtD,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAElB,YAAY,EACZ,oBAAoB,EACpB,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACtB,MAAM,eAAe,CAAA;AAGtB,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,YAAY,EACZ,oBAAoB,GACrB,CAAA;AACD,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,gBAAgB,EAAE,CAAA;AAuTvG,MAAM,WAAW,yBAAyB,CAAC,KAAK;IAC9C,yDAAyD;IACzD,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAA;IACvB,0BAA0B;IAC1B,OAAO,EAAE,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAA;IAChC,gCAAgC;IAChC,KAAK,EAAE,UAAU,CAAA;IACjB,wBAAwB;IACxB,QAAQ,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAA;IACpC;;;;OAIG;IACH,YAAY,CAAC,EAAE,UAAU,CAAA;IACzB,oEAAoE;IACpE,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAA;IAC9B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AA2PD,eAAO,MAAM,oBAAoB,EAAkD,CAAC,KAAK,EACvF,KAAK,EAAE,yBAAyB,CAAC,KAAK,CAAC,GAAG;IAAE,GAAG,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,cAAc,CAAC,CAAA;CAAE,KACnF,KAAK,CAAC,YAAY,CACtB"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * DataTableInteractionLayer — Slice D Step 1A scaffold(per `.claude/planning/datatable-spreadsheet-rfc.md`)
3
+ *
4
+ * Singleton overlay root inside DataTable(M21 private,不抽 global pattern)。
5
+ * 5 sub-layer children(per RFC §Overlay Geometry):
6
+ * - HoverCellRect(z 1):hover 邊框,「one geometry owner, two paint owners」(Contract 8)
7
+ * - SelectionRect / RangeRect(z 1.5):spreadsheet mode 才顯示(Contract 5,defer)
8
+ * - ActiveEditorHost(z 3):portal active edit Field(Slice C wire-up)
9
+ * - NestedPortalRegistry(z 4):date/select popup 註冊為 inside editor(Contract 7)
10
+ *
11
+ * Slice D Step 1A scope:
12
+ * - getCellRect(cellId)geometry source(per Contract 8)
13
+ * - HoverCellRect 1 layer 先做(Contract 8 / Contract 15 cellClickEntersEdit predicate)
14
+ * - 默認 disabled via `experimentalSpreadsheetOverlay` flag,不破現有 outline
15
+ * - 後續 Step 1B/C/D 漸進切換 + 拆 outline
16
+ */
17
+ import * as React from 'react';
18
+ type CellId = string;
19
+ interface CellRect {
20
+ x: number;
21
+ y: number;
22
+ width: number;
23
+ height: number;
24
+ }
25
+ interface DataTableInteractionLayerProps {
26
+ /** Flag default false:不破現有 outline。enable 後 hover/editor 走 overlay。 */
27
+ enabled: boolean;
28
+ /** Container ref;layer absolute position 對 container origin */
29
+ containerRef: React.RefObject<HTMLDivElement | null>;
30
+ /** Per Contract 15:`cellClickEntersEdit` predicate;hover overlay 顯示與否 */
31
+ cellClickEntersEdit?: (cellId: CellId) => boolean;
32
+ /**
33
+ * Slice D Step 3 scaffold(2026-05-10):active editor cell id。null = 無 active editor。
34
+ * 當前只 render rect placeholder layer(z-index 3,higher than hover ring z-index 1)。
35
+ * Future:ActiveEditorHost portal active edit Field per Contract 8 「two paint owners」。
36
+ * Wire-up 走 codex Q-7 string-first canary(text cell first,picker types 漸進)。
37
+ */
38
+ activeEditorCellId?: CellId | null;
39
+ /**
40
+ * Slice D Step 3.x flag:啟用 ActiveEditorHost dashed scaffold rect rendering。
41
+ * 2026-05-10 bug fix(user 圖1 雙 ring 同時顯示):dashed scaffold 之前綁
42
+ * `enabled`(= experimentalSpreadsheetOverlay)→ 任何 cell 進 edit mode 就 leak
43
+ * 出 dashed rect。改 gate 給 `experimentalActiveEditorController`(Step 3.3 真
44
+ * portal Field 工作),hover overlay scope 不會看到 dashed scaffold。
45
+ */
46
+ activeEditorEnabled?: boolean;
47
+ /**
48
+ * Slice D Step 4(spreadsheet semantics,2026-05-10 user 圖1 ask + RFC Contract 5):
49
+ * Excel-like 選取 cell ID。Click 1 select / Click 2 enter edit。
50
+ * Layer renders solid border SelectionRect(per user「不要 dash 直接實的就好」)。
51
+ */
52
+ selectedCellId?: CellId | null;
53
+ /**
54
+ * Slice D Step 4 range support(per user「應該支援 range」+ codex Q2.1 Airtable/AG Grid
55
+ * cite):range cell IDs from anchor↔focus rectangle。Layer renders bg-fill RangeRect
56
+ * (z 1,bg `--primary-subtle`)+ selection border on focus cell。
57
+ */
58
+ rangeCellIds?: CellId[];
59
+ /**
60
+ * Slice D Step 5(D.3 portal Field,2026-05-10 user 拍板「在乎完美乾淨」+ codex Q6.1
61
+ * 撤回 defer):active editor render callback。當 activeEditorEnabled + activeEditorCellId
62
+ * truthy → layer call this 拿 React node(已 bind value/onCommit/onCancel from controller),
63
+ * 在 ActiveEditorHost portal(z 3,float rect)render 之。
64
+ *
65
+ * Per codex Q6.2 outline:cell 永遠 mode="display"(SSOT preserved);portal host 渲
66
+ * mode="edit" 同 registry component;float pass-through + z-index 3 cover display below。
67
+ */
68
+ activeEditorRender?: (cellId: CellId, rect: CellRect) => React.ReactNode;
69
+ }
70
+ /**
71
+ * Singleton interaction layer。
72
+ *
73
+ * Slice D Step 1A:HoverCellRect only。
74
+ * Slice D Step 2/3/4:SelectionRect / ActiveEditorHost / RangeRect 漸進加入。
75
+ */
76
+ export declare function DataTableInteractionLayer({ enabled, containerRef, cellClickEntersEdit, activeEditorCellId, activeEditorEnabled, activeEditorRender, selectedCellId, rangeCellIds: _rangeCellIds, }: DataTableInteractionLayerProps): import("react/jsx-runtime").JSX.Element | null;
77
+ export {};
78
+ //# sourceMappingURL=data-table-interaction-layer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table-interaction-layer.d.ts","sourceRoot":"","sources":["../../../src/components/DataTable/data-table-interaction-layer.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,KAAK,MAAM,GAAG,MAAM,CAAA;AAEpB,UAAU,QAAQ;IAChB,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf;AAED,UAAU,8BAA8B;IACtC,uEAAuE;IACvE,OAAO,EAAE,OAAO,CAAA;IAChB,+DAA+D;IAC/D,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAA;IACpD,yEAAyE;IACzE,mBAAmB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAA;IACjD;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAClC;;;;;;OAMG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB;;;;;;;;OAQG;IACH,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,KAAK,KAAK,CAAC,SAAS,CAAA;CACzE;AAsJD;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,EACxC,OAAO,EACP,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EAClB,mBAA2B,EAC3B,kBAAkB,EAClB,cAAqB,EAErB,YAAY,EAAE,aAAa,GAC5B,EAAE,8BAA8B,kDAqFhC"}
@@ -0,0 +1,220 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ function getCellRect(containerEl, cellId) {
4
+ if (!containerEl) return null;
5
+ const cellEl = containerEl.querySelector(`[data-cell-id="${cellId}"]`);
6
+ if (!cellEl) return null;
7
+ const rect = cellEl.getBoundingClientRect();
8
+ return {
9
+ x: rect.x,
10
+ y: rect.y,
11
+ width: rect.width,
12
+ height: rect.height
13
+ };
14
+ }
15
+ function getCellGeometry(containerEl, cellId) {
16
+ if (!containerEl) return null;
17
+ const cellEl = containerEl.querySelector(`[data-cell-id="${cellId}"]`);
18
+ if (!cellEl) return null;
19
+ const panelEl = cellEl.closest("[data-datatable-panel]");
20
+ if (!panelEl) return null;
21
+ const panel = panelEl.dataset.datatablePanel;
22
+ const cellR = cellEl.getBoundingClientRect();
23
+ const panelR = panelEl.getBoundingClientRect();
24
+ return {
25
+ rect: { x: cellR.x, y: cellR.y, width: cellR.width, height: cellR.height },
26
+ clipRect: { x: panelR.x, y: panelR.y, width: panelR.width, height: panelR.height },
27
+ panel
28
+ };
29
+ }
30
+ function useReactiveRect(containerRef, enabled) {
31
+ const [, setVersion] = React.useState(0);
32
+ React.useEffect(() => {
33
+ if (!enabled) return;
34
+ let rafId = null;
35
+ const force = () => {
36
+ if (rafId !== null) return;
37
+ rafId = requestAnimationFrame(() => {
38
+ rafId = null;
39
+ setVersion((v) => v + 1);
40
+ });
41
+ };
42
+ window.addEventListener("scroll", force, { capture: true, passive: true });
43
+ window.addEventListener("resize", force, { passive: true });
44
+ const container = containerRef.current;
45
+ let ro = null;
46
+ if (container && typeof ResizeObserver !== "undefined") {
47
+ ro = new ResizeObserver(force);
48
+ ro.observe(container);
49
+ }
50
+ return () => {
51
+ window.removeEventListener("scroll", force, { capture: true });
52
+ window.removeEventListener("resize", force);
53
+ if (ro) ro.disconnect();
54
+ if (rafId !== null) cancelAnimationFrame(rafId);
55
+ };
56
+ }, [enabled, containerRef]);
57
+ }
58
+ function useHoveredCell(containerRef, enabled) {
59
+ const [hoveredCellId, setHoveredCellId] = React.useState(null);
60
+ React.useEffect(() => {
61
+ if (!enabled) {
62
+ setHoveredCellId(null);
63
+ return;
64
+ }
65
+ const container = containerRef.current;
66
+ if (!container) return;
67
+ const handleMouseOver = (e) => {
68
+ const target = e.target;
69
+ const cellEl = target == null ? void 0 : target.closest("[data-cell-id]");
70
+ const id = (cellEl == null ? void 0 : cellEl.dataset.cellId) ?? null;
71
+ setHoveredCellId(id);
72
+ };
73
+ const handleMouseLeave = () => setHoveredCellId(null);
74
+ container.addEventListener("mouseover", handleMouseOver);
75
+ container.addEventListener("mouseleave", handleMouseLeave);
76
+ return () => {
77
+ container.removeEventListener("mouseover", handleMouseOver);
78
+ container.removeEventListener("mouseleave", handleMouseLeave);
79
+ };
80
+ }, [enabled, containerRef]);
81
+ return hoveredCellId;
82
+ }
83
+ function DataTableInteractionLayer({
84
+ enabled,
85
+ containerRef,
86
+ cellClickEntersEdit,
87
+ activeEditorCellId,
88
+ activeEditorEnabled = false,
89
+ activeEditorRender,
90
+ selectedCellId = null,
91
+ // rangeCellIds retired 2026-05-10(outer ring 已 retire,range visual 靠 cell-bg `[data-range-cell]`)
92
+ rangeCellIds: _rangeCellIds
93
+ }) {
94
+ const hoveredCellId = useHoveredCell(containerRef, enabled);
95
+ useReactiveRect(containerRef, enabled);
96
+ const isEditingHovered = activeEditorCellId != null && activeEditorCellId === hoveredCellId;
97
+ const isSelectedHovered = selectedCellId != null && selectedCellId === hoveredCellId;
98
+ const shouldShowHover = enabled && hoveredCellId != null && !isEditingHovered && !isSelectedHovered && (cellClickEntersEdit ? cellClickEntersEdit(hoveredCellId) : true);
99
+ const hoverGeo = shouldShowHover ? getCellGeometry(containerRef.current, hoveredCellId) : null;
100
+ const activeEditorRect = activeEditorEnabled && activeEditorCellId != null ? getCellRect(containerRef.current, activeEditorCellId) : null;
101
+ const selectedGeo = enabled && selectedCellId != null ? getCellGeometry(containerRef.current, selectedCellId) : null;
102
+ if (!enabled) return null;
103
+ return /* @__PURE__ */ jsxs(
104
+ "div",
105
+ {
106
+ "aria-hidden": true,
107
+ style: { position: "fixed", inset: 0, pointerEvents: "none", zIndex: 1 },
108
+ children: [
109
+ hoverGeo && /* @__PURE__ */ jsx(ClipMask, { clipRect: hoverGeo.clipRect, children: /* @__PURE__ */ jsx(CellRingOverlay, { rect: toRelRect(hoverGeo.rect, hoverGeo.clipRect), kind: "hover" }) }),
110
+ selectedGeo && /* @__PURE__ */ jsx(ClipMask, { clipRect: selectedGeo.clipRect, children: /* @__PURE__ */ jsx(
111
+ CellRingOverlay,
112
+ {
113
+ rect: toRelRect(selectedGeo.rect, selectedGeo.clipRect),
114
+ kind: "selected",
115
+ cellId: selectedCellId
116
+ }
117
+ ) }),
118
+ activeEditorRect && /* @__PURE__ */ jsx(ActiveEditorHost, { rect: activeEditorRect, children: activeEditorRender ? activeEditorRender(activeEditorCellId, activeEditorRect) : null })
119
+ ]
120
+ }
121
+ );
122
+ }
123
+ function toRelRect(cellRect, clipRect) {
124
+ return {
125
+ x: cellRect.x - clipRect.x,
126
+ y: cellRect.y - clipRect.y,
127
+ width: cellRect.width,
128
+ height: cellRect.height
129
+ };
130
+ }
131
+ const CELL_RING_STYLES = {
132
+ hover: { width: 1, color: "var(--border-hover)", zIndex: 1 },
133
+ selected: { width: 1, color: "var(--primary)", zIndex: 2 }
134
+ // future kinds(per codex Q6 outline,加 entry 即可擴展):
135
+ // focus: { width: 2, color: 'var(--primary)', zIndex: 2 },
136
+ // error: { width: 1, color: 'var(--error)', zIndex: 2 },
137
+ };
138
+ function rectStyle(rect) {
139
+ return {
140
+ position: "absolute",
141
+ left: rect.x,
142
+ top: rect.y,
143
+ width: rect.width,
144
+ height: rect.height
145
+ };
146
+ }
147
+ function CellRingOverlay({ rect, kind, cellId }) {
148
+ const ring = CELL_RING_STYLES[kind];
149
+ const dataAttr = kind === "selected" && cellId ? { "data-selected-cell-id": cellId } : {};
150
+ return /* @__PURE__ */ jsx(
151
+ "div",
152
+ {
153
+ "aria-hidden": true,
154
+ style: {
155
+ ...rectStyle(rect),
156
+ outline: `${ring.width}px solid ${ring.color}`,
157
+ outlineOffset: `-${ring.width}px`,
158
+ boxSizing: "border-box",
159
+ pointerEvents: "none",
160
+ transition: "none",
161
+ zIndex: ring.zIndex
162
+ },
163
+ ...dataAttr
164
+ }
165
+ );
166
+ }
167
+ function ClipMask({ clipRect, children }) {
168
+ return /* @__PURE__ */ jsx(
169
+ "div",
170
+ {
171
+ "aria-hidden": true,
172
+ style: {
173
+ position: "absolute",
174
+ left: clipRect.x,
175
+ top: clipRect.y,
176
+ width: clipRect.width,
177
+ height: clipRect.height,
178
+ overflow: "hidden",
179
+ pointerEvents: "none"
180
+ },
181
+ children
182
+ }
183
+ );
184
+ }
185
+ function ActiveEditorHost({ rect, children }) {
186
+ if (!children) {
187
+ return /* @__PURE__ */ jsx(
188
+ "div",
189
+ {
190
+ "aria-hidden": true,
191
+ style: {
192
+ ...rectStyle(rect),
193
+ pointerEvents: "none",
194
+ zIndex: 3,
195
+ border: "1px dashed var(--primary)",
196
+ boxSizing: "border-box"
197
+ },
198
+ "data-active-editor-host-scaffold": true
199
+ }
200
+ );
201
+ }
202
+ return /* @__PURE__ */ jsx(
203
+ "div",
204
+ {
205
+ style: {
206
+ ...rectStyle(rect),
207
+ pointerEvents: "auto",
208
+ zIndex: 3,
209
+ boxSizing: "border-box",
210
+ background: "var(--canvas)"
211
+ },
212
+ "data-active-editor-host": true,
213
+ children
214
+ }
215
+ );
216
+ }
217
+ export {
218
+ DataTableInteractionLayer
219
+ };
220
+ //# sourceMappingURL=data-table-interaction-layer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table-interaction-layer.js","sources":["../../../src/components/DataTable/data-table-interaction-layer.tsx"],"sourcesContent":["/**\n * DataTableInteractionLayer — Slice D Step 1A scaffold(per `.claude/planning/datatable-spreadsheet-rfc.md`)\n *\n * Singleton overlay root inside DataTable(M21 private,不抽 global pattern)。\n * 5 sub-layer children(per RFC §Overlay Geometry):\n * - HoverCellRect(z 1):hover 邊框,「one geometry owner, two paint owners」(Contract 8)\n * - SelectionRect / RangeRect(z 1.5):spreadsheet mode 才顯示(Contract 5,defer)\n * - ActiveEditorHost(z 3):portal active edit Field(Slice C wire-up)\n * - NestedPortalRegistry(z 4):date/select popup 註冊為 inside editor(Contract 7)\n *\n * Slice D Step 1A scope:\n * - getCellRect(cellId)geometry source(per Contract 8)\n * - HoverCellRect 1 layer 先做(Contract 8 / Contract 15 cellClickEntersEdit predicate)\n * - 默認 disabled via `experimentalSpreadsheetOverlay` flag,不破現有 outline\n * - 後續 Step 1B/C/D 漸進切換 + 拆 outline\n */\n\nimport * as React from 'react'\n\ntype CellId = string\n\ninterface CellRect {\n x: number\n y: number\n width: number\n height: number\n}\n\ninterface DataTableInteractionLayerProps {\n /** Flag default false:不破現有 outline。enable 後 hover/editor 走 overlay。 */\n enabled: boolean\n /** Container ref;layer absolute position 對 container origin */\n containerRef: React.RefObject<HTMLDivElement | null>\n /** Per Contract 15:`cellClickEntersEdit` predicate;hover overlay 顯示與否 */\n cellClickEntersEdit?: (cellId: CellId) => boolean\n /**\n * Slice D Step 3 scaffold(2026-05-10):active editor cell id。null = 無 active editor。\n * 當前只 render rect placeholder layer(z-index 3,higher than hover ring z-index 1)。\n * Future:ActiveEditorHost portal active edit Field per Contract 8 「two paint owners」。\n * Wire-up 走 codex Q-7 string-first canary(text cell first,picker types 漸進)。\n */\n activeEditorCellId?: CellId | null\n /**\n * Slice D Step 3.x flag:啟用 ActiveEditorHost dashed scaffold rect rendering。\n * 2026-05-10 bug fix(user 圖1 雙 ring 同時顯示):dashed scaffold 之前綁\n * `enabled`(= experimentalSpreadsheetOverlay)→ 任何 cell 進 edit mode 就 leak\n * 出 dashed rect。改 gate 給 `experimentalActiveEditorController`(Step 3.3 真\n * portal Field 工作),hover overlay scope 不會看到 dashed scaffold。\n */\n activeEditorEnabled?: boolean\n /**\n * Slice D Step 4(spreadsheet semantics,2026-05-10 user 圖1 ask + RFC Contract 5):\n * Excel-like 選取 cell ID。Click 1 select / Click 2 enter edit。\n * Layer renders solid border SelectionRect(per user「不要 dash 直接實的就好」)。\n */\n selectedCellId?: CellId | null\n /**\n * Slice D Step 4 range support(per user「應該支援 range」+ codex Q2.1 Airtable/AG Grid\n * cite):range cell IDs from anchor↔focus rectangle。Layer renders bg-fill RangeRect\n * (z 1,bg `--primary-subtle`)+ selection border on focus cell。\n */\n rangeCellIds?: CellId[]\n /**\n * Slice D Step 5(D.3 portal Field,2026-05-10 user 拍板「在乎完美乾淨」+ codex Q6.1\n * 撤回 defer):active editor render callback。當 activeEditorEnabled + activeEditorCellId\n * truthy → layer call this 拿 React node(已 bind value/onCommit/onCancel from controller),\n * 在 ActiveEditorHost portal(z 3,float rect)render 之。\n *\n * Per codex Q6.2 outline:cell 永遠 mode=\"display\"(SSOT preserved);portal host 渲\n * mode=\"edit\" 同 registry component;float pass-through + z-index 3 cover display below。\n */\n activeEditorRender?: (cellId: CellId, rect: CellRect) => React.ReactNode\n}\n\n/**\n * `getCellRect(cellId)` geometry source(per Contract 8)。\n *\n * 從 DOM 量(per-call `getBoundingClientRect()`)而非 layoutCache,因為:\n * 1. cell DOM 是 React-rendered,getBoundingClientRect 永遠是 source of truth\n * 2. layoutCache 需另寫 invalidation logic,added complexity\n * 3. Hover overlay re-render 頻率低(per cell hover,不是 per frame)\n *\n * 0.5px sub-pixel snap per RFC §Overlay Geometry。\n */\nfunction getCellRect(containerEl: HTMLElement | null, cellId: CellId): CellRect | null {\n if (!containerEl) return null\n const cellEl = containerEl.querySelector<HTMLElement>(`[data-cell-id=\"${cellId}\"]`)\n if (!cellEl) return null\n // Page-absolute coords for viewport-fixed layer(per Step 1C bug fix:layer\n // 用 position:fixed,讓 paint owner 跟 reference frame 解耦 outer container 的 positioning)。\n // 2026-05-10 v3 fix(user 圖5 SSOT consistency):**float coords no rounding**。\n // Cell 自身 layout 用 sub-pixel float position(CSS 不 snap to integer)— 跨 cell 累積\n // 常見 144.328 / 244.0 / 524.172 等 fractional。任何 Math.round / floor / ceil 都引入\n // varying rounding error(visual audit verified:dx=0.17/0.5/0.83 不一致)。\n // Float pass-through + outline + outline-offset:-1px(下方 paint)→ overlay 永遠跟\n // cell exact pixel-perfect overlap,user verbatim「在內容起始位置不變的前提下讓\n // overlay 的邊框直接剛好壓住 cell 邊框」達成。\n const rect = cellEl.getBoundingClientRect()\n return {\n x: rect.x,\n y: rect.y,\n width: rect.width,\n height: rect.height,\n }\n}\n\n/**\n * Issue 6 viewport clip(2026-05-10):cell 跟 panel(left/center/right)bounding rect 一起取,\n * layer 用 panel rect 當 clip viewport intersect cell rect → overlay 永不畫到 panel 外。\n *\n * Per codex 13-issues verdict:「getCellRect 找最近 scroll viewport;intersect(cellRect, viewportRect),\n * 空 → 不 render,部分 → clipped rect render。」\n *\n * 對齊 AG Grid `cellsForRangeSet` viewport-aware paint / Glide DataGrid clip helpers /\n * Notion sticky-cell virtualizer mask。\n */\ninterface CellGeometry {\n /** Cell exact viewport rect(no rounding,float pass-through per Bug 5 SSOT) */\n rect: CellRect\n /** Nearest panel container rect(left/center/right body)— clip viewport for overlays */\n clipRect: CellRect\n /** Panel identifier(`left` / `center` / `right`)— grouped range outer ring 分段用 */\n panel: 'left' | 'center' | 'right'\n}\n\nfunction getCellGeometry(containerEl: HTMLElement | null, cellId: CellId): CellGeometry | null {\n if (!containerEl) return null\n const cellEl = containerEl.querySelector<HTMLElement>(`[data-cell-id=\"${cellId}\"]`)\n if (!cellEl) return null\n const panelEl = cellEl.closest<HTMLElement>('[data-datatable-panel]')\n if (!panelEl) return null\n const panel = panelEl.dataset.datatablePanel as 'left' | 'center' | 'right'\n const cellR = cellEl.getBoundingClientRect()\n const panelR = panelEl.getBoundingClientRect()\n return {\n rect: { x: cellR.x, y: cellR.y, width: cellR.width, height: cellR.height },\n clipRect: { x: panelR.x, y: panelR.y, width: panelR.width, height: panelR.height },\n panel,\n }\n}\n\n\n/**\n * Reactive rect sync hook — 確保 overlay rect 跨 RWD / scroll / resize 永遠對齊 cell(2026-05-10\n * user 拍板「所有 overlay 在各種 RWD 和捲動時都能處在正確位置上」)。\n *\n * 監聽 3 source(rAF coalesce 避 frame storm):\n * 1. window scroll(capture mode 抓 nested table body scroll + page scroll)\n * 2. window resize(viewport size change → cell width 變)\n * 3. ResizeObserver on container(column resize / table dimension 變)\n *\n * 每次事件 fire → setVersion(v+1) → 觸發 layer re-render → rect 用最新 getBoundingClientRect\n * 重算。getBoundingClientRect 本身永遠 return 當下 viewport-relative coords,沒 stale cache。\n *\n * Per codex(brief: codex-brief-rwd-future-2026-05-10):rAF coalesce 不需要 debounce,scroll\n * 跟到不延遲才對(Glide / AG Grid 同 idiom)。\n */\nfunction useReactiveRect(containerRef: React.RefObject<HTMLElement | null>, enabled: boolean) {\n const [, setVersion] = React.useState(0)\n React.useEffect(() => {\n if (!enabled) return\n let rafId: number | null = null\n const force = () => {\n if (rafId !== null) return\n rafId = requestAnimationFrame(() => {\n rafId = null\n setVersion((v) => v + 1)\n })\n }\n window.addEventListener('scroll', force, { capture: true, passive: true })\n window.addEventListener('resize', force, { passive: true })\n const container = containerRef.current\n let ro: ResizeObserver | null = null\n if (container && typeof ResizeObserver !== 'undefined') {\n ro = new ResizeObserver(force)\n ro.observe(container)\n }\n return () => {\n window.removeEventListener('scroll', force, { capture: true } as EventListenerOptions)\n window.removeEventListener('resize', force)\n if (ro) ro.disconnect()\n if (rafId !== null) cancelAnimationFrame(rafId)\n }\n }, [enabled, containerRef])\n}\n\n/**\n * Hover state hook — 監聽 container hover events,track hovered cell id。\n *\n * Implementation:event delegation on container(不 per-cell mount listeners),\n * 利用 `data-cell-id` attribute + closest()。\n */\nfunction useHoveredCell(\n containerRef: React.RefObject<HTMLElement | null>,\n enabled: boolean,\n): CellId | null {\n const [hoveredCellId, setHoveredCellId] = React.useState<CellId | null>(null)\n\n React.useEffect(() => {\n if (!enabled) { setHoveredCellId(null); return }\n const container = containerRef.current\n if (!container) return\n\n const handleMouseOver = (e: MouseEvent) => {\n const target = e.target as HTMLElement | null\n const cellEl = target?.closest<HTMLElement>('[data-cell-id]')\n const id = cellEl?.dataset.cellId ?? null\n setHoveredCellId(id)\n }\n const handleMouseLeave = () => setHoveredCellId(null)\n\n container.addEventListener('mouseover', handleMouseOver)\n container.addEventListener('mouseleave', handleMouseLeave)\n return () => {\n container.removeEventListener('mouseover', handleMouseOver)\n container.removeEventListener('mouseleave', handleMouseLeave)\n }\n }, [enabled, containerRef])\n\n return hoveredCellId\n}\n\n/**\n * Singleton interaction layer。\n *\n * Slice D Step 1A:HoverCellRect only。\n * Slice D Step 2/3/4:SelectionRect / ActiveEditorHost / RangeRect 漸進加入。\n */\nexport function DataTableInteractionLayer({\n enabled,\n containerRef,\n cellClickEntersEdit,\n activeEditorCellId,\n activeEditorEnabled = false,\n activeEditorRender,\n selectedCellId = null,\n // rangeCellIds retired 2026-05-10(outer ring 已 retire,range visual 靠 cell-bg `[data-range-cell]`)\n rangeCellIds: _rangeCellIds,\n}: DataTableInteractionLayerProps) {\n const hoveredCellId = useHoveredCell(containerRef, enabled)\n // 2026-05-10 RWD/scroll sync(per user mandate「所有 overlay 在各種 RWD 和捲動時都處在正確位置」):\n // window scroll(capture)+ resize + ResizeObserver(container)→ rAF coalesced re-render → rect 重算\n useReactiveRect(containerRef, enabled)\n\n // Contract 14 state precedence:editing > selected > hover(per RFC §State Precedence Matrix)\n const isEditingHovered = activeEditorCellId != null && activeEditorCellId === hoveredCellId\n const isSelectedHovered = selectedCellId != null && selectedCellId === hoveredCellId\n const shouldShowHover = enabled && hoveredCellId != null && !isEditingHovered && !isSelectedHovered\n && (cellClickEntersEdit ? cellClickEntersEdit(hoveredCellId) : true)\n\n // Issue 6 viewport clip(2026-05-10):每個 overlay rect 都跟最近 panel(left/center/right body)\n // intersect。Cell scroll 出 panel viewport(H scroll / pinned 範圍)→ rect null → 不 render;\n // 部分 → 用 ClipMask wrap 在 panel viewport 內裁切,outline 永遠在 cell 真邊但被 mask 限制視覺。\n const hoverGeo = shouldShowHover\n ? getCellGeometry(containerRef.current, hoveredCellId!)\n : null\n\n // Slice D Step 3 scaffold:ActiveEditorHost rect placeholder(per Contract 8 active editor paint owner)。\n // 2026-05-10 bug fix:gate by `activeEditorEnabled` flag(Step 3.3 portal Field work)。\n // Issue 6:active editor host **不**做 viewport clip(per codex「editor 必可見」),\n // 仍走原 path 從 getCellRect 取 viewport coords。User 應將 active editor cell 滾到 viewport 內。\n const activeEditorRect = activeEditorEnabled && activeEditorCellId != null\n ? getCellRect(containerRef.current, activeEditorCellId)\n : null\n\n // Slice D Step 4(spreadsheet semantics):SelectionRect + RangeRect with viewport clip。\n const selectedGeo = enabled && selectedCellId != null\n ? getCellGeometry(containerRef.current, selectedCellId)\n : null\n\n // 2026-05-10 retire `rangeOuterRingsByPanel` calc + render(per user 抓 range 2px outer\n // ring 不需要 — cell-bg `--primary-subtle` 已給「這些 cell 在範圍內」訊號,outer ring 是\n // redundant visual)。`CellRangeOuterRing` primitive 已 retire(下方刪),getCellGeometry 仍\n // 給 hover / selected overlay 使用,保留。Future 若需 outer ring 復用,從 git history 取\n // commit `763b3ac`(Issue 6 viewport clip)的 implementation。\n\n if (!enabled) return null\n\n // Layer absolute fixed-position relative to viewport(避 outer container 缺 position:relative\n // 找錯 reference frame)。getCellRect 已 return container-relative,但這裡 set top/left 用\n // page coords 一致 — 改用 viewport-fixed 簡化。\n return (\n <div\n aria-hidden\n style={{ position: 'fixed', inset: 0, pointerEvents: 'none', zIndex: 1 }}\n >\n {/* HoverRing — kind=hover(1px var(--border-hover)) z 1。Wrap 在 ClipMask(panel viewport)\n 內 → cell scroll 出 panel 時 outline 自動被 mask 裁切,不會 leak 到 panel 外。 */}\n {hoverGeo && (\n <ClipMask clipRect={hoverGeo.clipRect}>\n <CellRingOverlay rect={toRelRect(hoverGeo.rect, hoverGeo.clipRect)} kind=\"hover\" />\n </ClipMask>\n )}\n {/* SelectionRing — kind=selected(1px var(--primary)) z 2,SSOT 同 hover wide */}\n {selectedGeo && (\n <ClipMask clipRect={selectedGeo.clipRect}>\n <CellRingOverlay\n rect={toRelRect(selectedGeo.rect, selectedGeo.clipRect)}\n kind=\"selected\"\n cellId={selectedCellId!}\n />\n </ClipMask>\n )}\n {/* 2026-05-10 retire RangeOuterRing(per user 抓 image 4 + verbatim「range 的 cell 本來就有顏色變化,\n 那樣就夠了,不需要再有 2px 藍色的框」)。Range visual now relies purely on cell-bg\n (`--primary-subtle` via `[data-range-cell]` CSS in `data-table.css`)+ focus cell 2px selected\n border。Outer 2px primary ring 從 Issue 6 ship 但 visual 太重 — bg-fill 已給「這些 cell 在範圍內」\n 訊號,outer ring 是 redundant。`rangeOuterRingsByPanel` 計算保留但不 render(future 若需 reinstate\n 只需打開 .map)。 */}\n {/* {rangeOuterRingsByPanel.map((group) => (\n <ClipMask key={group.panel} clipRect={group.clipRect}>\n <CellRangeOuterRing rect={toRelRect(group.bbox, group.clipRect)} />\n </ClipMask>\n ))} */}\n {/* ActiveEditorHost — z 3,float rect,pointerEvents:auto opaque host(NOT a ring)。\n Issue 6:active editor 不 clip(editor 必可見) — user 滾出 viewport 自負責。 */}\n {activeEditorRect && (\n <ActiveEditorHost rect={activeEditorRect}>\n {activeEditorRender ? activeEditorRender(activeEditorCellId!, activeEditorRect) : null}\n </ActiveEditorHost>\n )}\n </div>\n )\n}\n\n/**\n * `toRelRect(cellRect, clipRect)` — Issue 6 helper(2026-05-10):\n * 把 viewport coords cell rect 轉成 ClipMask containing-block 內 relative coords。\n * ClipMask 用 panel rect 做 absolute container + overflow:hidden,內部 child absolute 定位\n * 以 mask 為 reference frame,所以 cellRect.x - clipRect.x 才對齊 cell 真實位置。\n */\nfunction toRelRect(cellRect: CellRect, clipRect: CellRect): CellRect {\n return {\n x: cellRect.x - clipRect.x,\n y: cellRect.y - clipRect.y,\n width: cellRect.width,\n height: cellRect.height,\n }\n}\n\n// ── Private primitives(per codex unified-ring-overlay-2026-05-10 Final A')──────\n//\n// 三個 private primitive 各自 own 一個 paint concern:\n// 1. CellRingOverlay — outline ring(hover / selected / future focus / error)\n// 2. CellRangeFill — bg fill(range cells in spreadsheet mode)\n// 3. ActiveEditorHost — opaque host(portal Field edit)\n//\n// SSOT pattern(共 3 primitives):rect float pass-through + boxSizing:border-box +\n// pointerEvents 視 kind / position:absolute on viewport-fixed layer。\n//\n// Token mapping 集中 `CELL_RING_STYLES`(per codex Q3 verdict 不開 global `--cell-ring-*` token,\n// 在 primitive 內 kind → semantic token mapping)。\n\nconst CELL_RING_STYLES = {\n hover: { width: 1, color: 'var(--border-hover)', zIndex: 1 },\n selected: { width: 1, color: 'var(--primary)', zIndex: 2 },\n // future kinds(per codex Q6 outline,加 entry 即可擴展):\n // focus: { width: 2, color: 'var(--primary)', zIndex: 2 },\n // error: { width: 1, color: 'var(--error)', zIndex: 2 },\n} as const\n\ntype CellRingKind = keyof typeof CELL_RING_STYLES\n\nfunction rectStyle(rect: CellRect): React.CSSProperties {\n return {\n position: 'absolute',\n left: rect.x,\n top: rect.y,\n width: rect.width,\n height: rect.height,\n }\n}\n\n/**\n * CellRingOverlay — paint owner for hover / selected / future focus / error rings。\n *\n * 共用 SSOT(per Bug 5 fix + codex Q2 unified primitive):\n * - Float pass-through rect(getCellRect 不 round)\n * - outline + outline-offset:`-${width}px` paint 在 cell 既有 border 上 in-place\n * - boxSizing:border-box(避免 outline 影響 layout)\n * - pointerEvents:none(透視點擊穿透)\n * - transition:none(避 fade flash)\n */\nfunction CellRingOverlay({ rect, kind, cellId }: {\n rect: CellRect\n kind: CellRingKind\n cellId?: CellId\n}) {\n const ring = CELL_RING_STYLES[kind]\n const dataAttr = kind === 'selected' && cellId ? { 'data-selected-cell-id': cellId } : {}\n return (\n <div\n aria-hidden\n style={{\n ...rectStyle(rect),\n outline: `${ring.width}px solid ${ring.color}`,\n outlineOffset: `-${ring.width}px`,\n boxSizing: 'border-box',\n pointerEvents: 'none',\n transition: 'none',\n zIndex: ring.zIndex,\n }}\n {...dataAttr}\n />\n )\n}\n\n// `CellRangeOuterRing` primitive retired 2026-05-10(per user 「range cell 本來就有顏色變化\n// 那樣就夠了,不需要再有 2px 藍色的框」)。Source 留 git history commit `763b3ac`(Issue 6\n// viewport clip ship)若需 reinstate。\n\n/**\n * ClipMask — Issue 6 primitive(2026-05-10):panel viewport 裁切容器。\n *\n * 用在 hover / selected / range outer ring overlay,避免 cell 滾出 panel viewport(H scroll /\n * pinned 範圍)時 overlay 仍漂浮在 panel 外。Layer 是 `position: fixed` viewport-anchor,\n * ClipMask 用 panel rect 當 absolute container + `overflow: hidden` mask;child overlay 用\n * `toRelRect(cellRect, clipRect)` 算出 mask-relative 座標,在 mask 內精準定位但被 mask 邊緣裁切。\n *\n * 對齊 AG Grid `cellsForRangeSet` viewport-aware paint / Glide DataGrid clip helpers /\n * Notion sticky-cell virtualizer mask。\n */\nfunction ClipMask({ clipRect, children }: { clipRect: CellRect; children: React.ReactNode }) {\n return (\n <div\n aria-hidden\n style={{\n position: 'absolute',\n left: clipRect.x,\n top: clipRect.y,\n width: clipRect.width,\n height: clipRect.height,\n overflow: 'hidden',\n pointerEvents: 'none',\n }}\n >\n {children}\n </div>\n )\n}\n\n/**\n * ActiveEditorHost — opaque host for portal Field edit(D.3,Slice D Step 5)。\n *\n * Per codex Q2 verdict:不該進 CellRingOverlay primitive — 它是 host 不是 ring。\n * - pointerEvents:auto(child Field 接收 click / keyboard)\n * - background:var(--canvas)(opaque cover display Field below;Cell SSOT 保留)\n * - z-index 3(above hover / selected / range)\n * - children = activeEditorRender 的回傳 React node\n *\n * Empty children fallback = dashed debug indicator(no portal Field provided)。\n */\nfunction ActiveEditorHost({ rect, children }: { rect: CellRect; children: React.ReactNode }) {\n if (!children) {\n return (\n <div\n aria-hidden\n style={{\n ...rectStyle(rect),\n pointerEvents: 'none',\n zIndex: 3,\n border: '1px dashed var(--primary)',\n boxSizing: 'border-box',\n }}\n data-active-editor-host-scaffold\n />\n )\n }\n return (\n <div\n style={{\n ...rectStyle(rect),\n pointerEvents: 'auto',\n zIndex: 3,\n boxSizing: 'border-box',\n background: 'var(--canvas)',\n }}\n data-active-editor-host\n >\n {children}\n </div>\n )\n}\n"],"names":[],"mappings":";;AAoFA,SAAS,YAAY,aAAiC,QAAiC;AACrF,MAAI,CAAC,YAAa,QAAO;AACzB,QAAM,SAAS,YAAY,cAA2B,kBAAkB,MAAM,IAAI;AAClF,MAAI,CAAC,OAAQ,QAAO;AAUpB,QAAM,OAAO,OAAO,sBAAA;AACpB,SAAO;AAAA,IACL,GAAG,KAAK;AAAA,IACR,GAAG,KAAK;AAAA,IACR,OAAO,KAAK;AAAA,IACZ,QAAQ,KAAK;AAAA,EAAA;AAEjB;AAqBA,SAAS,gBAAgB,aAAiC,QAAqC;AAC7F,MAAI,CAAC,YAAa,QAAO;AACzB,QAAM,SAAS,YAAY,cAA2B,kBAAkB,MAAM,IAAI;AAClF,MAAI,CAAC,OAAQ,QAAO;AACpB,QAAM,UAAU,OAAO,QAAqB,wBAAwB;AACpE,MAAI,CAAC,QAAS,QAAO;AACrB,QAAM,QAAQ,QAAQ,QAAQ;AAC9B,QAAM,QAAQ,OAAO,sBAAA;AACrB,QAAM,SAAS,QAAQ,sBAAA;AACvB,SAAO;AAAA,IACL,MAAM,EAAE,GAAG,MAAM,GAAG,GAAG,MAAM,GAAG,OAAO,MAAM,OAAO,QAAQ,MAAM,OAAA;AAAA,IAClE,UAAU,EAAE,GAAG,OAAO,GAAG,GAAG,OAAO,GAAG,OAAO,OAAO,OAAO,QAAQ,OAAO,OAAA;AAAA,IAC1E;AAAA,EAAA;AAEJ;AAkBA,SAAS,gBAAgB,cAAmD,SAAkB;AAC5F,QAAM,CAAA,EAAG,UAAU,IAAI,MAAM,SAAS,CAAC;AACvC,QAAM,UAAU,MAAM;AACpB,QAAI,CAAC,QAAS;AACd,QAAI,QAAuB;AAC3B,UAAM,QAAQ,MAAM;AAClB,UAAI,UAAU,KAAM;AACpB,cAAQ,sBAAsB,MAAM;AAClC,gBAAQ;AACR,mBAAW,CAAC,MAAM,IAAI,CAAC;AAAA,MACzB,CAAC;AAAA,IACH;AACA,WAAO,iBAAiB,UAAU,OAAO,EAAE,SAAS,MAAM,SAAS,MAAM;AACzE,WAAO,iBAAiB,UAAU,OAAO,EAAE,SAAS,MAAM;AAC1D,UAAM,YAAY,aAAa;AAC/B,QAAI,KAA4B;AAChC,QAAI,aAAa,OAAO,mBAAmB,aAAa;AACtD,WAAK,IAAI,eAAe,KAAK;AAC7B,SAAG,QAAQ,SAAS;AAAA,IACtB;AACA,WAAO,MAAM;AACX,aAAO,oBAAoB,UAAU,OAAO,EAAE,SAAS,MAA8B;AACrF,aAAO,oBAAoB,UAAU,KAAK;AAC1C,UAAI,OAAO,WAAA;AACX,UAAI,UAAU,KAAM,sBAAqB,KAAK;AAAA,IAChD;AAAA,EACF,GAAG,CAAC,SAAS,YAAY,CAAC;AAC5B;AAQA,SAAS,eACP,cACA,SACe;AACf,QAAM,CAAC,eAAe,gBAAgB,IAAI,MAAM,SAAwB,IAAI;AAE5E,QAAM,UAAU,MAAM;AACpB,QAAI,CAAC,SAAS;AAAE,uBAAiB,IAAI;AAAG;AAAA,IAAO;AAC/C,UAAM,YAAY,aAAa;AAC/B,QAAI,CAAC,UAAW;AAEhB,UAAM,kBAAkB,CAAC,MAAkB;AACzC,YAAM,SAAS,EAAE;AACjB,YAAM,SAAS,iCAAQ,QAAqB;AAC5C,YAAM,MAAK,iCAAQ,QAAQ,WAAU;AACrC,uBAAiB,EAAE;AAAA,IACrB;AACA,UAAM,mBAAmB,MAAM,iBAAiB,IAAI;AAEpD,cAAU,iBAAiB,aAAa,eAAe;AACvD,cAAU,iBAAiB,cAAc,gBAAgB;AACzD,WAAO,MAAM;AACX,gBAAU,oBAAoB,aAAa,eAAe;AAC1D,gBAAU,oBAAoB,cAAc,gBAAgB;AAAA,IAC9D;AAAA,EACF,GAAG,CAAC,SAAS,YAAY,CAAC;AAE1B,SAAO;AACT;AAQO,SAAS,0BAA0B;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,sBAAsB;AAAA,EACtB;AAAA,EACA,iBAAiB;AAAA;AAAA,EAEjB,cAAc;AAChB,GAAmC;AACjC,QAAM,gBAAgB,eAAe,cAAc,OAAO;AAG1D,kBAAgB,cAAc,OAAO;AAGrC,QAAM,mBAAmB,sBAAsB,QAAQ,uBAAuB;AAC9E,QAAM,oBAAoB,kBAAkB,QAAQ,mBAAmB;AACvE,QAAM,kBAAkB,WAAW,iBAAiB,QAAQ,CAAC,oBAAoB,CAAC,sBAC5E,sBAAsB,oBAAoB,aAAa,IAAI;AAKjE,QAAM,WAAW,kBACb,gBAAgB,aAAa,SAAS,aAAc,IACpD;AAMJ,QAAM,mBAAmB,uBAAuB,sBAAsB,OAClE,YAAY,aAAa,SAAS,kBAAkB,IACpD;AAGJ,QAAM,cAAc,WAAW,kBAAkB,OAC7C,gBAAgB,aAAa,SAAS,cAAc,IACpD;AAQJ,MAAI,CAAC,QAAS,QAAO;AAKrB,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,eAAW;AAAA,MACX,OAAO,EAAE,UAAU,SAAS,OAAO,GAAG,eAAe,QAAQ,QAAQ,EAAA;AAAA,MAIpE,UAAA;AAAA,QAAA,gCACE,UAAA,EAAS,UAAU,SAAS,UAC3B,8BAAC,iBAAA,EAAgB,MAAM,UAAU,SAAS,MAAM,SAAS,QAAQ,GAAG,MAAK,SAAQ,GACnF;AAAA,QAGD,eACC,oBAAC,UAAA,EAAS,UAAU,YAAY,UAC9B,UAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAM,UAAU,YAAY,MAAM,YAAY,QAAQ;AAAA,YACtD,MAAK;AAAA,YACL,QAAQ;AAAA,UAAA;AAAA,QAAA,GAEZ;AAAA,QAeD,oBACC,oBAAC,kBAAA,EAAiB,MAAM,kBACrB,+BAAqB,mBAAmB,oBAAqB,gBAAgB,IAAI,KAAA,CACpF;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR;AAQA,SAAS,UAAU,UAAoB,UAA8B;AACnE,SAAO;AAAA,IACL,GAAG,SAAS,IAAI,SAAS;AAAA,IACzB,GAAG,SAAS,IAAI,SAAS;AAAA,IACzB,OAAO,SAAS;AAAA,IAChB,QAAQ,SAAS;AAAA,EAAA;AAErB;AAeA,MAAM,mBAAmB;AAAA,EACvB,OAAU,EAAE,OAAO,GAAG,OAAO,uBAAuB,QAAQ,EAAA;AAAA,EAC5D,UAAU,EAAE,OAAO,GAAG,OAAO,kBAAuB,QAAQ,EAAA;AAAA;AAAA;AAAA;AAI9D;AAIA,SAAS,UAAU,MAAqC;AACtD,SAAO;AAAA,IACL,UAAU;AAAA,IACV,MAAM,KAAK;AAAA,IACX,KAAK,KAAK;AAAA,IACV,OAAO,KAAK;AAAA,IACZ,QAAQ,KAAK;AAAA,EAAA;AAEjB;AAYA,SAAS,gBAAgB,EAAE,MAAM,MAAM,UAIpC;AACD,QAAM,OAAO,iBAAiB,IAAI;AAClC,QAAM,WAAW,SAAS,cAAc,SAAS,EAAE,yBAAyB,OAAA,IAAW,CAAA;AACvF,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,eAAW;AAAA,MACX,OAAO;AAAA,QACL,GAAG,UAAU,IAAI;AAAA,QACjB,SAAS,GAAG,KAAK,KAAK,YAAY,KAAK,KAAK;AAAA,QAC5C,eAAe,IAAI,KAAK,KAAK;AAAA,QAC7B,WAAW;AAAA,QACX,eAAe;AAAA,QACf,YAAY;AAAA,QACZ,QAAQ,KAAK;AAAA,MAAA;AAAA,MAEd,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;AAiBA,SAAS,SAAS,EAAE,UAAU,YAA+D;AAC3F,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,eAAW;AAAA,MACX,OAAO;AAAA,QACL,UAAU;AAAA,QACV,MAAM,SAAS;AAAA,QACf,KAAK,SAAS;AAAA,QACd,OAAO,SAAS;AAAA,QAChB,QAAQ,SAAS;AAAA,QACjB,UAAU;AAAA,QACV,eAAe;AAAA,MAAA;AAAA,MAGhB;AAAA,IAAA;AAAA,EAAA;AAGP;AAaA,SAAS,iBAAiB,EAAE,MAAM,YAA2D;AAC3F,MAAI,CAAC,UAAU;AACb,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,eAAW;AAAA,QACX,OAAO;AAAA,UACL,GAAG,UAAU,IAAI;AAAA,UACjB,eAAe;AAAA,UACf,QAAQ;AAAA,UACR,QAAQ;AAAA,UACR,WAAW;AAAA,QAAA;AAAA,QAEb,oCAAgC;AAAA,MAAA;AAAA,IAAA;AAAA,EAGtC;AACA,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACL,GAAG,UAAU,IAAI;AAAA,QACjB,eAAe;AAAA,QACf,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,YAAY;AAAA,MAAA;AAAA,MAEd,2BAAuB;AAAA,MAEtB;AAAA,IAAA;AAAA,EAAA;AAGP;"}
@@ -0,0 +1,19 @@
1
+ import type { ColumnDef, SortingState } from '@tanstack/react-table';
2
+ export interface DataTableSortManagerProps<TData> {
3
+ /** 可排序欄位來源(讀 columnDef.header / id);會自動排除 enableSorting=false */
4
+ columns: ColumnDef<TData, any>[];
5
+ /** 當前排序 state(TanStack SortingState) */
6
+ sorting: SortingState;
7
+ /** 排序變更 callback */
8
+ onSortingChange: (next: SortingState) => void;
9
+ /** Refresh 按鈕點擊(可選 — 重置或外部 refetch) */
10
+ onReset?: () => void;
11
+ /** Close 按鈕點擊(若有 — 通常是包在 Popover 外層的 close 行為) */
12
+ onClose?: () => void;
13
+ className?: string;
14
+ }
15
+ export declare function DataTableSortManager<TData>({ columns, sorting, onSortingChange, onReset, onClose, className, }: DataTableSortManagerProps<TData>): import("react/jsx-runtime").JSX.Element;
16
+ export declare namespace DataTableSortManager {
17
+ var displayName: string;
18
+ }
19
+ //# sourceMappingURL=data-table-sort-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table-sort-manager.d.ts","sourceRoot":"","sources":["../../../src/components/DataTable/data-table-sort-manager.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAiCpE,MAAM,WAAW,yBAAyB,CAAC,KAAK;IAC9C,iEAAiE;IACjE,OAAO,EAAE,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAA;IAChC,wCAAwC;IACxC,OAAO,EAAE,YAAY,CAAA;IACrB,oBAAoB;IACpB,eAAe,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAA;IAC7C,uCAAuC;IACvC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAkBD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,EAC1C,OAAO,EACP,OAAO,EACP,eAAe,EACf,OAAO,EACP,OAAO,EACP,SAAS,GACV,EAAE,yBAAyB,CAAC,KAAK,CAAC,2CA2FlC;yBAlGe,oBAAoB"}