@rio-cloud/rio-uikit 2.3.0-beta.1 → 2.3.0-beta.3

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 (344) hide show
  1. package/DayPicker.js +6 -2
  2. package/DayPicker.js.map +1 -1
  3. package/DayPickerCalendar.d.ts +2 -0
  4. package/DayPickerCalendar.js +5 -0
  5. package/DayPickerCalendar.js.map +1 -0
  6. package/DayPickerPrototype.d.ts +2 -0
  7. package/DayPickerPrototype.js +5 -0
  8. package/DayPickerPrototype.js.map +1 -0
  9. package/Marker.js +9 -5
  10. package/TableNext.d.ts +2 -0
  11. package/TableNext.js +23 -0
  12. package/TableNext.js.map +1 -0
  13. package/TableToolbar.js +3 -2
  14. package/TableToolbar.js.map +1 -1
  15. package/components/analyticsAnalysisOverlay/AnalyticsAnalysisBanner.d.ts +38 -3
  16. package/components/analyticsAnalysisOverlay/AnalyticsAnalysisBanner.js +104 -109
  17. package/components/analyticsAnalysisOverlay/AnalyticsAnalysisBanner.js.map +1 -1
  18. package/components/analyticsAnalysisOverlay/AnalyticsAnalysisOverlay.d.ts +24 -5
  19. package/components/analyticsAnalysisOverlay/AnalyticsAnalysisOverlay.js +60 -56
  20. package/components/analyticsAnalysisOverlay/AnalyticsAnalysisOverlay.js.map +1 -1
  21. package/components/assetTree/Tree.js +13 -13
  22. package/components/charts/Area.d.ts +5 -3
  23. package/components/charts/Area.js +4 -3
  24. package/components/charts/Area.js.map +1 -1
  25. package/components/charts/AreaChart.js.map +1 -1
  26. package/components/charts/ComposedChart.js.map +1 -1
  27. package/components/clearableInput/ClearableInput.d.ts +30 -0
  28. package/components/clearableInput/ClearableInput.js +81 -78
  29. package/components/clearableInput/ClearableInput.js.map +1 -1
  30. package/components/datepicker/DayPicker.d.ts +4 -51
  31. package/components/datepicker/DayPicker.js +267 -257
  32. package/components/datepicker/DayPicker.js.map +1 -1
  33. package/components/datepicker/DayPickerCalendar.d.ts +4 -0
  34. package/components/datepicker/DayPickerCalendar.js +129 -0
  35. package/components/datepicker/DayPickerCalendar.js.map +1 -0
  36. package/components/datepicker/DayPickerDropdown.d.ts +19 -0
  37. package/components/datepicker/DayPickerDropdown.js +88 -0
  38. package/components/datepicker/DayPickerDropdown.js.map +1 -0
  39. package/components/datepicker/DayPickerDropdownFooter.d.ts +7 -0
  40. package/components/datepicker/DayPickerDropdownFooter.js +7 -0
  41. package/components/datepicker/DayPickerDropdownFooter.js.map +1 -0
  42. package/components/datepicker/DayPickerDropdownSidebar.d.ts +8 -0
  43. package/components/datepicker/DayPickerDropdownSidebar.js +7 -0
  44. package/components/datepicker/DayPickerDropdownSidebar.js.map +1 -0
  45. package/components/datepicker/DayPickerInput.d.ts +28 -0
  46. package/components/datepicker/DayPickerInput.js +65 -0
  47. package/components/datepicker/DayPickerInput.js.map +1 -0
  48. package/components/datepicker/DayPickerPrototype.d.ts +53 -0
  49. package/components/datepicker/DayPickerPrototype.js +285 -0
  50. package/components/datepicker/DayPickerPrototype.js.map +1 -0
  51. package/components/datepicker/dayPickerRangeSelectionUtils.d.ts +15 -0
  52. package/components/datepicker/dayPickerRangeSelectionUtils.js +31 -0
  53. package/components/datepicker/dayPickerRangeSelectionUtils.js.map +1 -0
  54. package/components/datepicker/dayPickerTypes.d.ts +517 -0
  55. package/components/datepicker/dayPickerTypes.js +7 -0
  56. package/components/datepicker/dayPickerTypes.js.map +1 -0
  57. package/components/datepicker/dayPickerUtils.d.ts +10 -0
  58. package/components/datepicker/dayPickerUtils.js +92 -0
  59. package/components/datepicker/dayPickerUtils.js.map +1 -0
  60. package/components/datepicker/useDayPickerInputState.d.ts +32 -0
  61. package/components/datepicker/useDayPickerInputState.js +85 -0
  62. package/components/datepicker/useDayPickerInputState.js.map +1 -0
  63. package/components/datepicker/useStackedDayPickerCalendars.d.ts +5 -0
  64. package/components/datepicker/useStackedDayPickerCalendars.js +39 -0
  65. package/components/datepicker/useStackedDayPickerCalendars.js.map +1 -0
  66. package/components/divider/Divider.js +6 -6
  67. package/components/dropdown/ButtonDropdown.d.ts +4 -0
  68. package/components/dropdown/ButtonDropdown.js +70 -68
  69. package/components/dropdown/ButtonDropdown.js.map +1 -1
  70. package/components/dropdown/DropdownToggleButton.d.ts +1 -0
  71. package/components/dropdown/DropdownToggleButton.js +17 -15
  72. package/components/dropdown/DropdownToggleButton.js.map +1 -1
  73. package/components/fade/FadeExpander.js +17 -20
  74. package/components/fade/FadeExpander.js.map +1 -1
  75. package/components/listMenu/ListMenu.d.ts +8 -0
  76. package/components/listMenu/ListMenu.js +74 -66
  77. package/components/listMenu/ListMenu.js.map +1 -1
  78. package/components/loadMore/LoadMoreProgress.js +6 -7
  79. package/components/map/components/Map.js +189 -157
  80. package/components/map/components/Map.js.map +1 -1
  81. package/components/map/components/MapContext.d.ts +1 -0
  82. package/components/map/components/MapContext.js +8 -7
  83. package/components/map/components/MapContext.js.map +1 -1
  84. package/components/map/components/features/Route.d.ts +65 -1
  85. package/components/map/components/features/Route.js +184 -98
  86. package/components/map/components/features/Route.js.map +1 -1
  87. package/components/map/components/features/basics/Marker.d.ts +21 -1
  88. package/components/map/components/features/basics/Marker.js +99 -40
  89. package/components/map/components/features/basics/Marker.js.map +1 -1
  90. package/components/map/components/features/basics/Polygon.d.ts +24 -1
  91. package/components/map/components/features/basics/Polygon.js +72 -19
  92. package/components/map/components/features/basics/Polygon.js.map +1 -1
  93. package/components/map/components/features/basics/Polyline.d.ts +29 -0
  94. package/components/map/components/features/basics/Polyline.js +69 -39
  95. package/components/map/components/features/basics/Polyline.js.map +1 -1
  96. package/components/map/components/features/layers/MarkerLayer.js +8 -8
  97. package/components/map/components/features/layers/MarkerLayer.js.map +1 -1
  98. package/components/map/components/features/layers/clustering/SimpleClusterLayer.js +13 -6
  99. package/components/map/components/features/layers/clustering/SimpleClusterLayer.js.map +1 -1
  100. package/components/map/utils/clustering.d.ts +1 -1
  101. package/components/map/utils/clustering.js +30 -30
  102. package/components/map/utils/clustering.js.map +1 -1
  103. package/components/map/utils/mapTypes.d.ts +135 -0
  104. package/components/map/utils/mapTypes.js.map +1 -1
  105. package/components/map/utils/rendering.js +5 -5
  106. package/components/mapMarker/ClusterMapMarker.d.ts +2 -0
  107. package/components/mapMarker/ClusterMapMarker.js.map +1 -1
  108. package/components/mapMarker/SingleMapMarker.d.ts +2 -0
  109. package/components/mapMarker/SingleMapMarker.js.map +1 -1
  110. package/components/popover/Popover.js +4 -4
  111. package/components/radiobutton/RadioCardGroup.js +3 -3
  112. package/components/rioglyph/RioglyphIconType.d.ts +1 -1
  113. package/components/selects/ClearButton.js +9 -7
  114. package/components/selects/ClearButton.js.map +1 -1
  115. package/components/selects/Multiselect.d.ts +6 -0
  116. package/components/selects/Multiselect.js +164 -150
  117. package/components/selects/Multiselect.js.map +1 -1
  118. package/components/selects/Select.js +39 -37
  119. package/components/selects/Select.js.map +1 -1
  120. package/components/table/Table.d.ts +27 -248
  121. package/components/table/Table.js +240 -214
  122. package/components/table/Table.js.map +1 -1
  123. package/components/table/Table.types.d.ts +302 -121
  124. package/components/table/TableBody.d.ts +65 -5
  125. package/components/table/TableBody.js +132 -2
  126. package/components/table/TableBody.js.map +1 -1
  127. package/components/table/TableCardsSorting.js +25 -32
  128. package/components/table/TableCardsSorting.js.map +1 -1
  129. package/components/table/TableColumn.d.ts +21 -6
  130. package/components/table/TableColumn.js +114 -2
  131. package/components/table/TableColumn.js.map +1 -1
  132. package/components/table/TableExpandedContentRow.d.ts +7 -7
  133. package/components/table/TableExpandedContentRow.js +107 -2
  134. package/components/table/TableExpandedContentRow.js.map +1 -1
  135. package/components/table/TableExpandedRow.d.ts +9 -4
  136. package/components/table/TableExpandedRow.js +147 -2
  137. package/components/table/TableExpandedRow.js.map +1 -1
  138. package/components/table/TableExpanderButton.js +13 -11
  139. package/components/table/TableExpanderButton.js.map +1 -1
  140. package/components/table/TableFooter.d.ts +10 -6
  141. package/components/table/TableFooter.js +49 -2
  142. package/components/table/TableFooter.js.map +1 -1
  143. package/components/table/TableGroupFooterRow.d.ts +7 -7
  144. package/components/table/TableGroupFooterRow.js +27 -2
  145. package/components/table/TableGroupFooterRow.js.map +1 -1
  146. package/components/table/TableGroupRow.d.ts +7 -7
  147. package/components/table/TableGroupRow.js +33 -2
  148. package/components/table/TableGroupRow.js.map +1 -1
  149. package/components/table/TableHeader.d.ts +26 -4
  150. package/components/table/TableHeader.js +117 -2
  151. package/components/table/TableHeader.js.map +1 -1
  152. package/components/table/TableHeaderColumn.d.ts +25 -9
  153. package/components/table/TableHeaderColumn.js +83 -2
  154. package/components/table/TableHeaderColumn.js.map +1 -1
  155. package/components/table/TableHeaderRow.d.ts +1 -1
  156. package/components/table/TableHeaderRow.js +11 -2
  157. package/components/table/TableHeaderRow.js.map +1 -1
  158. package/components/table/TableRow.d.ts +15 -4
  159. package/components/table/TableRow.js +109 -2
  160. package/components/table/TableRow.js.map +1 -1
  161. package/components/table/TableSpacerRow.d.ts +3 -2
  162. package/components/table/TableSpacerRow.js +26 -2
  163. package/components/table/TableSpacerRow.js.map +1 -1
  164. package/components/table/TableToolbar.d.ts +4 -23
  165. package/components/table/TableToolbar.js +39 -28
  166. package/components/table/TableToolbar.js.map +1 -1
  167. package/components/table/TableToolbarColumn.d.ts +31 -0
  168. package/components/table/TableToolbarColumn.js +33 -0
  169. package/components/table/TableToolbarColumn.js.map +1 -0
  170. package/components/table/TableViewToggles.d.ts +3 -3
  171. package/components/table/TableViewToggles.js.map +1 -1
  172. package/components/table/context/TableInteractionContext.d.ts +26 -0
  173. package/components/table/context/TableInteractionContext.js +7 -0
  174. package/components/table/context/TableInteractionContext.js.map +1 -0
  175. package/components/table/context/TableLayoutContext.d.ts +26 -0
  176. package/components/table/context/TableLayoutContext.js +7 -0
  177. package/components/table/context/TableLayoutContext.js.map +1 -0
  178. package/components/table/context/TableRenderConfigContext.d.ts +27 -0
  179. package/components/table/context/TableRenderConfigContext.js +7 -0
  180. package/components/table/context/TableRenderConfigContext.js.map +1 -0
  181. package/components/table/context/TableRenderContext.d.ts +85 -0
  182. package/components/table/context/TableRenderContext.js +7 -0
  183. package/components/table/context/TableRenderContext.js.map +1 -0
  184. package/components/table/context/TableStructureContext.d.ts +31 -0
  185. package/components/table/context/TableStructureContext.js +17 -0
  186. package/components/table/context/TableStructureContext.js.map +1 -0
  187. package/components/table/layout/columnSizing.d.ts +2 -2
  188. package/components/table/layout/columnSizing.js.map +1 -1
  189. package/components/table/layout/useDraggableColumns.d.ts +3 -3
  190. package/components/table/layout/useDraggableColumns.js +17 -17
  191. package/components/table/layout/useDraggableColumns.js.map +1 -1
  192. package/components/table/layout/useHorizontalSectionSync.d.ts +4 -1
  193. package/components/table/layout/useHorizontalSectionSync.js +36 -31
  194. package/components/table/layout/useHorizontalSectionSync.js.map +1 -1
  195. package/components/table/layout/useMeasuredColumnMaxWidths.d.ts +3 -3
  196. package/components/table/layout/useMeasuredColumnMaxWidths.js.map +1 -1
  197. package/components/table/layout/useResizableColumns.d.ts +5 -4
  198. package/components/table/layout/useResizableColumns.js +108 -67
  199. package/components/table/layout/useResizableColumns.js.map +1 -1
  200. package/components/table/layout/useTableBodyScrollBottom.d.ts +12 -0
  201. package/components/table/layout/useTableBodyScrollBottom.js +37 -0
  202. package/components/table/layout/useTableBodyScrollBottom.js.map +1 -0
  203. package/components/table/layout/useTableLayout.d.ts +18 -6
  204. package/components/table/layout/useTableLayout.js +51 -41
  205. package/components/table/layout/useTableLayout.js.map +1 -1
  206. package/components/table/layout/useTableVirtualization.d.ts +6 -6
  207. package/components/table/layout/useTableVirtualization.js +22 -22
  208. package/components/table/layout/useTableVirtualization.js.map +1 -1
  209. package/components/table/model/resolveRowMeta.d.ts +3 -2
  210. package/components/table/model/resolveRowMeta.js.map +1 -1
  211. package/components/table/model/resolveTableClassConfig.d.ts +2 -3
  212. package/components/table/model/resolveTableClassConfig.js.map +1 -1
  213. package/components/table/model/tableView.types.d.ts +41 -0
  214. package/components/table/native/TableSettingsListItem.js +1 -1
  215. package/components/table/native/TableSettingsListItem.js.map +1 -1
  216. package/components/table/render/body/TableBodyContent.d.ts +21 -0
  217. package/components/table/render/body/TableBodyContent.js +52 -0
  218. package/components/table/render/body/TableBodyContent.js.map +1 -0
  219. package/components/table/render/body/TableEmptyRow.js +2 -2
  220. package/components/table/render/body/TableEmptyRow.js.map +1 -1
  221. package/components/table/render/header/TableBatchDropdown.d.ts +5 -1
  222. package/components/table/render/header/TableBatchDropdown.js +17 -15
  223. package/components/table/render/header/TableBatchDropdown.js.map +1 -1
  224. package/components/table/render/header/TableColumnFilter.d.ts +2 -2
  225. package/components/table/render/header/TableColumnFilter.js +16 -14
  226. package/components/table/render/header/TableColumnFilter.js.map +1 -1
  227. package/components/table/render/header/TableDraggableHeaderCell.d.ts +2 -1
  228. package/components/table/render/header/TableDraggableHeaderCell.js +45 -33
  229. package/components/table/render/header/TableDraggableHeaderCell.js.map +1 -1
  230. package/components/table/render/header/TableHeader.types.d.ts +13 -9
  231. package/components/table/render/header/TableHeaderCellContent.d.ts +2 -1
  232. package/components/table/render/header/TableHeaderCellContent.js +16 -16
  233. package/components/table/render/header/TableHeaderCellContent.js.map +1 -1
  234. package/components/table/render/header/TableHeaderCellResizeHandle.d.ts +2 -1
  235. package/components/table/render/header/TableHeaderCellResizeHandle.js +8 -8
  236. package/components/table/render/header/TableHeaderCellResizeHandle.js.map +1 -1
  237. package/components/table/render/header/TableHeaderDragOverlay.d.ts +5 -4
  238. package/components/table/render/header/TableHeaderDragOverlay.js.map +1 -1
  239. package/components/table/render/header/TableStaticHeaderCell.d.ts +2 -1
  240. package/components/table/render/header/TableStaticHeaderCell.js +34 -20
  241. package/components/table/render/header/TableStaticHeaderCell.js.map +1 -1
  242. package/components/table/render/header/resolveAriaSort.d.ts +2 -1
  243. package/components/table/render/header/resolveAriaSort.js.map +1 -1
  244. package/components/table/render/header/resolveHeaderCellClassName.d.ts +5 -2
  245. package/components/table/render/header/resolveHeaderCellClassName.js +14 -12
  246. package/components/table/render/header/resolveHeaderCellClassName.js.map +1 -1
  247. package/components/table/render/header/resolveHeaderCellStyle.d.ts +2 -1
  248. package/components/table/render/header/resolveHeaderCellStyle.js.map +1 -1
  249. package/components/table/runtime/shouldAnimateBodyRows.d.ts +17 -0
  250. package/components/table/runtime/shouldAnimateBodyRows.js +5 -0
  251. package/components/table/runtime/shouldAnimateBodyRows.js.map +1 -0
  252. package/components/table/runtime/useRenderDraftState.d.ts +14 -0
  253. package/components/table/runtime/useRenderDraftState.js +80 -0
  254. package/components/table/runtime/useRenderDraftState.js.map +1 -0
  255. package/components/table/runtime/useResolvedRenderColumns.d.ts +43 -0
  256. package/components/table/runtime/useResolvedRenderColumns.js +113 -0
  257. package/components/table/runtime/useResolvedRenderColumns.js.map +1 -0
  258. package/components/table/runtime/useResolvedRenderHeader.d.ts +27 -0
  259. package/components/table/runtime/useResolvedRenderHeader.js +67 -0
  260. package/components/table/runtime/useResolvedRenderHeader.js.map +1 -0
  261. package/components/table/selection/useInternalTableSelectionState.d.ts +17 -0
  262. package/components/table/selection/useInternalTableSelectionState.js +28 -0
  263. package/components/table/selection/useInternalTableSelectionState.js.map +1 -0
  264. package/components/table/selection/useTableSelection.d.ts +3 -3
  265. package/components/table/selection/useTableSelection.js.map +1 -1
  266. package/components/table/shared/getCellContentOverflowClassName.d.ts +3 -0
  267. package/components/table/shared/getCellContentOverflowClassName.js +18 -0
  268. package/components/table/shared/getCellContentOverflowClassName.js.map +1 -0
  269. package/components/table/shared/getInteractiveRowProps.d.ts +3 -2
  270. package/components/table/shared/getInteractiveRowProps.js.map +1 -1
  271. package/hooks/useDraggableElement.d.ts +27 -5
  272. package/hooks/useDraggableElement.js +100 -23
  273. package/hooks/useDraggableElement.js.map +1 -1
  274. package/hooks/usePopperDropdown.d.ts +1 -0
  275. package/hooks/usePopperDropdown.js +15 -12
  276. package/hooks/usePopperDropdown.js.map +1 -1
  277. package/hooks/useUrlState.js +3 -3
  278. package/package.json +16 -17
  279. package/utils/analytics/createAnalyticsOverlayTooltip.js +57 -57
  280. package/utils/analytics/createAnalyticsOverlayTooltip.js.map +1 -1
  281. package/utils/analytics/useAnalyticsOverlayDom.js +3 -3
  282. package/utils/init/initConfig.js +5 -5
  283. package/utils/init/initConfig.js.map +1 -1
  284. package/utils/routeUtils.d.ts +5 -2
  285. package/utils/routeUtils.js +17 -17
  286. package/utils/routeUtils.js.map +1 -1
  287. package/version.d.ts +1 -1
  288. package/version.js +1 -1
  289. package/version.js.map +1 -1
  290. package/components/table/TableCard.d.ts +0 -63
  291. package/components/table/TableCard.js +0 -150
  292. package/components/table/TableCard.js.map +0 -1
  293. package/components/table/model/buildTableViewModel.d.ts +0 -28
  294. package/components/table/model/buildTableViewModel.js +0 -221
  295. package/components/table/model/buildTableViewModel.js.map +0 -1
  296. package/components/table/model/resolveCellContent.d.ts +0 -2
  297. package/components/table/model/resolveCellContent.js +0 -5
  298. package/components/table/model/resolveCellContent.js.map +0 -1
  299. package/components/table/model/tableViewModel.types.d.ts +0 -153
  300. package/components/table/parse/parseBody.d.ts +0 -3
  301. package/components/table/parse/parseBody.js +0 -13
  302. package/components/table/parse/parseBody.js.map +0 -1
  303. package/components/table/parse/parseColumns.d.ts +0 -3
  304. package/components/table/parse/parseColumns.js +0 -81
  305. package/components/table/parse/parseColumns.js.map +0 -1
  306. package/components/table/parse/parseFooter.d.ts +0 -3
  307. package/components/table/parse/parseFooter.js +0 -39
  308. package/components/table/parse/parseFooter.js.map +0 -1
  309. package/components/table/parse/parseHeaders.d.ts +0 -4
  310. package/components/table/parse/parseHeaders.js +0 -89
  311. package/components/table/parse/parseHeaders.js.map +0 -1
  312. package/components/table/parse/parseRows.d.ts +0 -3
  313. package/components/table/parse/parseRows.js +0 -93
  314. package/components/table/parse/parseRows.js.map +0 -1
  315. package/components/table/parse/tableChildGuards.d.ts +0 -25
  316. package/components/table/parse/tableChildGuards.js +0 -29
  317. package/components/table/parse/tableChildGuards.js.map +0 -1
  318. package/components/table/render/body/TableBodyRow.d.ts +0 -16
  319. package/components/table/render/body/TableBodyRow.js +0 -84
  320. package/components/table/render/body/TableBodyRow.js.map +0 -1
  321. package/components/table/render/body/TableBodySection.d.ts +0 -20
  322. package/components/table/render/body/TableBodySection.js +0 -68
  323. package/components/table/render/body/TableBodySection.js.map +0 -1
  324. package/components/table/render/body/TableDataRow.d.ts +0 -15
  325. package/components/table/render/body/TableDataRow.js +0 -143
  326. package/components/table/render/body/TableDataRow.js.map +0 -1
  327. package/components/table/render/body/TableExpandedRow.d.ts +0 -8
  328. package/components/table/render/body/TableExpandedRow.js +0 -84
  329. package/components/table/render/body/TableExpandedRow.js.map +0 -1
  330. package/components/table/render/body/TableGroupRow.d.ts +0 -8
  331. package/components/table/render/body/TableGroupRow.js +0 -21
  332. package/components/table/render/body/TableGroupRow.js.map +0 -1
  333. package/components/table/render/body/TableSpacerRow.d.ts +0 -7
  334. package/components/table/render/body/TableSpacerRow.js +0 -15
  335. package/components/table/render/body/TableSpacerRow.js.map +0 -1
  336. package/components/table/render/footer/TableFooterCell.d.ts +0 -8
  337. package/components/table/render/footer/TableFooterCell.js +0 -31
  338. package/components/table/render/footer/TableFooterCell.js.map +0 -1
  339. package/components/table/render/footer/TableFooterSection.d.ts +0 -10
  340. package/components/table/render/footer/TableFooterSection.js +0 -28
  341. package/components/table/render/footer/TableFooterSection.js.map +0 -1
  342. package/components/table/render/header/TableHeaderSection.d.ts +0 -3
  343. package/components/table/render/header/TableHeaderSection.js +0 -104
  344. package/components/table/render/header/TableHeaderSection.js.map +0 -1
@@ -1,12 +1,12 @@
1
1
  import { DragEndEvent } from '@dnd-kit/core';
2
- import { TableColumnDefinition } from '../Table.types';
3
- type UseDraggableColumnsProps<RowType extends Record<string, unknown>> = {
2
+ import { TableColumnDefinition, TableRowData } from '../Table.types';
3
+ type UseDraggableColumnsProps<RowType extends TableRowData> = {
4
4
  columns: TableColumnDefinition<RowType>[];
5
5
  columnOrder?: string[];
6
6
  enabled: boolean;
7
7
  onColumnOrderChange?: (columnOrder: string[]) => void;
8
8
  };
9
- export declare const useDraggableColumns: <RowType extends Record<string, unknown>>(props: UseDraggableColumnsProps<RowType>) => {
9
+ export declare const useDraggableColumns: <RowType extends TableRowData>(props: UseDraggableColumnsProps<RowType>) => {
10
10
  draggableColumnKeys: (string | Extract<keyof RowType, string>)[];
11
11
  handleColumnDragEnd: (event: DragEndEvent) => void;
12
12
  orderedColumns: TableColumnDefinition<RowType>[];
@@ -1,17 +1,17 @@
1
1
  import { useState as D, useEffect as v } from "react";
2
2
  import h from "../../../utils/arrayMove.js";
3
- const K = (s, o) => {
4
- const l = o.map((n) => n.key), i = new Set(l), a = s.filter((n) => i.has(n)), u = l.filter((n) => !a.includes(n));
5
- return [...a, ...u];
6
- }, O = (s) => s.draggable !== !1, E = (s) => {
7
- const { columns: o, columnOrder: l, enabled: i, onColumnOrderChange: a } = s, [u, n] = D(() => o.map((e) => e.key)), p = K(l ?? u, o), d = l !== void 0;
3
+ const K = (s, t) => {
4
+ const l = t.map((n) => n.key), i = new Set(l), u = s.filter((n) => i.has(n)), a = l.filter((n) => !u.includes(n));
5
+ return [...u, ...a];
6
+ }, O = (s) => s.draggable === !0, E = (s) => {
7
+ const { columns: t, columnOrder: l, enabled: i, onColumnOrderChange: u } = s, [a, n] = D(() => t.map((e) => e.key)), p = K(l ?? a, t), d = l !== void 0;
8
8
  v(() => {
9
9
  d || n((e) => {
10
- const r = K(e, o);
10
+ const r = K(e, t);
11
11
  return JSON.stringify(e) === JSON.stringify(r) ? e : r;
12
12
  });
13
- }, [o, d]);
14
- const S = new Map(o.map((e) => [e.key, e])), m = p.flatMap((e) => {
13
+ }, [t, d]);
14
+ const S = new Map(t.map((e) => [e.key, e])), m = p.flatMap((e) => {
15
15
  const r = S.get(e);
16
16
  return r ? [r] : [];
17
17
  }), c = m.filter(O).map((e) => e.key);
@@ -23,20 +23,20 @@ const K = (s, o) => {
23
23
  const r = String(e.active.id), y = e.over ? String(e.over.id) : void 0;
24
24
  if (!y || r === y)
25
25
  return;
26
- const f = c.indexOf(r), C = c.indexOf(y);
27
- if (f < 0 || C < 0)
26
+ const C = c.indexOf(r), f = c.indexOf(y);
27
+ if (C < 0 || f < 0)
28
28
  return;
29
- const b = h(c, f, C);
29
+ const b = h(c, C, f);
30
30
  let x = 0;
31
- const g = m.map((t) => {
32
- if (!O(t))
33
- return t.key;
31
+ const g = m.map((o) => {
32
+ if (!O(o))
33
+ return o.key;
34
34
  const k = b[x];
35
- return x += 1, k ?? t.key;
35
+ return x += 1, k ?? o.key;
36
36
  });
37
37
  d || n(
38
- (t) => JSON.stringify(t) === JSON.stringify(g) ? t : g
39
- ), a?.(g);
38
+ (o) => JSON.stringify(o) === JSON.stringify(g) ? o : g
39
+ ), u?.(g);
40
40
  },
41
41
  orderedColumns: m
42
42
  };
@@ -1 +1 @@
1
- {"version":3,"file":"useDraggableColumns.js","sources":["../../../../src/components/table/layout/useDraggableColumns.ts"],"sourcesContent":["import type { DragEndEvent } from '@dnd-kit/core';\nimport { useEffect, useState } from 'react';\n\nimport arrayMove from '../../../utils/arrayMove';\nimport type { TableColumnDefinition } from '../Table.types';\n\ntype UseDraggableColumnsProps<RowType extends Record<string, unknown>> = {\n columns: TableColumnDefinition<RowType>[];\n columnOrder?: string[];\n enabled: boolean;\n onColumnOrderChange?: (columnOrder: string[]) => void;\n};\n\nconst reconcileColumnOrder = <RowType extends Record<string, unknown>>(\n previousColumnOrder: string[],\n columns: TableColumnDefinition<RowType>[]\n) => {\n const nextColumnKeys = columns.map(column => column.key);\n const previousColumnKeySet = new Set(nextColumnKeys);\n const preservedColumnOrder = previousColumnOrder.filter(columnKey => previousColumnKeySet.has(columnKey));\n const missingColumnKeys = nextColumnKeys.filter(columnKey => !preservedColumnOrder.includes(columnKey));\n\n return [...preservedColumnOrder, ...missingColumnKeys];\n};\n\nconst isColumnDraggable = <RowType extends Record<string, unknown>>(column: TableColumnDefinition<RowType>) =>\n column.draggable !== false;\n\nexport const useDraggableColumns = <RowType extends Record<string, unknown>>(\n props: UseDraggableColumnsProps<RowType>\n) => {\n const { columns, columnOrder, enabled, onColumnOrderChange } = props;\n const [uncontrolledColumnOrder, setUncontrolledColumnOrder] = useState(() => columns.map(column => column.key));\n const orderedColumnKeys = reconcileColumnOrder(columnOrder ?? uncontrolledColumnOrder, columns);\n const isControlled = columnOrder !== undefined;\n\n useEffect(() => {\n if (isControlled) {\n return;\n }\n\n setUncontrolledColumnOrder(previousColumnOrder => {\n const nextColumnOrder = reconcileColumnOrder(previousColumnOrder, columns);\n\n return JSON.stringify(previousColumnOrder) === JSON.stringify(nextColumnOrder)\n ? previousColumnOrder\n : nextColumnOrder;\n });\n }, [columns, isControlled]);\n\n const columnsByKey = new Map(columns.map(column => [column.key, column]));\n const orderedColumns = orderedColumnKeys.flatMap(columnKey => {\n const column = columnsByKey.get(columnKey);\n\n return column ? [column] : [];\n });\n const draggableColumnKeys = orderedColumns.filter(isColumnDraggable).map(column => column.key);\n\n const handleColumnDragEnd = (event: DragEndEvent) => {\n if (!enabled) {\n return;\n }\n\n const activeColumnKey = String(event.active.id);\n const overColumnKey = event.over ? String(event.over.id) : undefined;\n\n if (!overColumnKey || activeColumnKey === overColumnKey) {\n return;\n }\n\n const oldIndex = draggableColumnKeys.indexOf(activeColumnKey);\n const newIndex = draggableColumnKeys.indexOf(overColumnKey);\n\n if (oldIndex < 0 || newIndex < 0) {\n return;\n }\n\n const nextDraggableColumnKeys = arrayMove(draggableColumnKeys, oldIndex, newIndex);\n let nextDraggableColumnKeyIndex = 0;\n\n const nextOrderedColumnKeys = orderedColumns.map(column => {\n if (!isColumnDraggable(column)) {\n return column.key;\n }\n\n const nextColumnKey = nextDraggableColumnKeys[nextDraggableColumnKeyIndex];\n\n nextDraggableColumnKeyIndex += 1;\n\n return nextColumnKey ?? column.key;\n });\n\n if (!isControlled) {\n setUncontrolledColumnOrder(previousColumnOrder =>\n JSON.stringify(previousColumnOrder) === JSON.stringify(nextOrderedColumnKeys)\n ? previousColumnOrder\n : nextOrderedColumnKeys\n );\n }\n\n onColumnOrderChange?.(nextOrderedColumnKeys);\n };\n\n return {\n draggableColumnKeys,\n handleColumnDragEnd,\n orderedColumns,\n };\n};\n"],"names":["reconcileColumnOrder","previousColumnOrder","columns","nextColumnKeys","column","previousColumnKeySet","preservedColumnOrder","columnKey","missingColumnKeys","isColumnDraggable","useDraggableColumns","props","columnOrder","enabled","onColumnOrderChange","uncontrolledColumnOrder","setUncontrolledColumnOrder","useState","orderedColumnKeys","isControlled","useEffect","nextColumnOrder","columnsByKey","orderedColumns","draggableColumnKeys","event","activeColumnKey","overColumnKey","oldIndex","newIndex","nextDraggableColumnKeys","arrayMove","nextDraggableColumnKeyIndex","nextOrderedColumnKeys","nextColumnKey"],"mappings":";;AAaA,MAAMA,IAAuB,CACzBC,GACAC,MACC;AACD,QAAMC,IAAiBD,EAAQ,IAAI,CAAAE,MAAUA,EAAO,GAAG,GACjDC,IAAuB,IAAI,IAAIF,CAAc,GAC7CG,IAAuBL,EAAoB,OAAO,OAAaI,EAAqB,IAAIE,CAAS,CAAC,GAClGC,IAAoBL,EAAe,OAAO,CAAAI,MAAa,CAACD,EAAqB,SAASC,CAAS,CAAC;AAEtG,SAAO,CAAC,GAAGD,GAAsB,GAAGE,CAAiB;AACzD,GAEMC,IAAoB,CAA0CL,MAChEA,EAAO,cAAc,IAEZM,IAAsB,CAC/BC,MACC;AACD,QAAM,EAAE,SAAAT,GAAS,aAAAU,GAAa,SAAAC,GAAS,qBAAAC,MAAwBH,GACzD,CAACI,GAAyBC,CAA0B,IAAIC,EAAS,MAAMf,EAAQ,IAAI,CAAAE,MAAUA,EAAO,GAAG,CAAC,GACxGc,IAAoBlB,EAAqBY,KAAeG,GAAyBb,CAAO,GACxFiB,IAAeP,MAAgB;AAErC,EAAAQ,EAAU,MAAM;AACZ,IAAID,KAIJH,EAA2B,CAAAf,MAAuB;AAC9C,YAAMoB,IAAkBrB,EAAqBC,GAAqBC,CAAO;AAEzE,aAAO,KAAK,UAAUD,CAAmB,MAAM,KAAK,UAAUoB,CAAe,IACvEpB,IACAoB;AAAA,IACV,CAAC;AAAA,EACL,GAAG,CAACnB,GAASiB,CAAY,CAAC;AAE1B,QAAMG,IAAe,IAAI,IAAIpB,EAAQ,IAAI,CAAAE,MAAU,CAACA,EAAO,KAAKA,CAAM,CAAC,CAAC,GAClEmB,IAAiBL,EAAkB,QAAQ,CAAAX,MAAa;AAC1D,UAAMH,IAASkB,EAAa,IAAIf,CAAS;AAEzC,WAAOH,IAAS,CAACA,CAAM,IAAI,CAAA;AAAA,EAC/B,CAAC,GACKoB,IAAsBD,EAAe,OAAOd,CAAiB,EAAE,IAAI,CAAAL,MAAUA,EAAO,GAAG;AA+C7F,SAAO;AAAA,IACH,qBAAAoB;AAAA,IACA,qBA/CwB,CAACC,MAAwB;AACjD,UAAI,CAACZ;AACD;AAGJ,YAAMa,IAAkB,OAAOD,EAAM,OAAO,EAAE,GACxCE,IAAgBF,EAAM,OAAO,OAAOA,EAAM,KAAK,EAAE,IAAI;AAE3D,UAAI,CAACE,KAAiBD,MAAoBC;AACtC;AAGJ,YAAMC,IAAWJ,EAAoB,QAAQE,CAAe,GACtDG,IAAWL,EAAoB,QAAQG,CAAa;AAE1D,UAAIC,IAAW,KAAKC,IAAW;AAC3B;AAGJ,YAAMC,IAA0BC,EAAUP,GAAqBI,GAAUC,CAAQ;AACjF,UAAIG,IAA8B;AAElC,YAAMC,IAAwBV,EAAe,IAAI,CAAAnB,MAAU;AACvD,YAAI,CAACK,EAAkBL,CAAM;AACzB,iBAAOA,EAAO;AAGlB,cAAM8B,IAAgBJ,EAAwBE,CAA2B;AAEzE,eAAAA,KAA+B,GAExBE,KAAiB9B,EAAO;AAAA,MACnC,CAAC;AAED,MAAKe,KACDH;AAAA,QAA2B,CAAAf,MACvB,KAAK,UAAUA,CAAmB,MAAM,KAAK,UAAUgC,CAAqB,IACtEhC,IACAgC;AAAA,MAAA,GAIdnB,IAAsBmB,CAAqB;AAAA,IAC/C;AAAA,IAKI,gBAAAV;AAAA,EAAA;AAER;"}
1
+ {"version":3,"file":"useDraggableColumns.js","sources":["../../../../src/components/table/layout/useDraggableColumns.ts"],"sourcesContent":["import type { DragEndEvent } from '@dnd-kit/core';\nimport { useEffect, useState } from 'react';\n\nimport arrayMove from '../../../utils/arrayMove';\nimport type { TableColumnDefinition, TableRowData } from '../Table.types';\n\ntype UseDraggableColumnsProps<RowType extends TableRowData> = {\n columns: TableColumnDefinition<RowType>[];\n columnOrder?: string[];\n enabled: boolean;\n onColumnOrderChange?: (columnOrder: string[]) => void;\n};\n\nconst reconcileColumnOrder = <RowType extends TableRowData>(\n previousColumnOrder: string[],\n columns: TableColumnDefinition<RowType>[]\n) => {\n const nextColumnKeys = columns.map(column => column.key);\n const previousColumnKeySet = new Set(nextColumnKeys);\n const preservedColumnOrder = previousColumnOrder.filter(columnKey => previousColumnKeySet.has(columnKey));\n const missingColumnKeys = nextColumnKeys.filter(columnKey => !preservedColumnOrder.includes(columnKey));\n\n return [...preservedColumnOrder, ...missingColumnKeys];\n};\n\nconst isColumnDraggable = <RowType extends TableRowData>(column: TableColumnDefinition<RowType>) =>\n column.draggable === true;\n\nexport const useDraggableColumns = <RowType extends TableRowData>(props: UseDraggableColumnsProps<RowType>) => {\n const { columns, columnOrder, enabled, onColumnOrderChange } = props;\n const [uncontrolledColumnOrder, setUncontrolledColumnOrder] = useState(() => columns.map(column => column.key));\n const orderedColumnKeys = reconcileColumnOrder(columnOrder ?? uncontrolledColumnOrder, columns);\n const isControlled = columnOrder !== undefined;\n\n useEffect(() => {\n if (isControlled) {\n return;\n }\n\n setUncontrolledColumnOrder(previousColumnOrder => {\n const nextColumnOrder = reconcileColumnOrder(previousColumnOrder, columns);\n\n return JSON.stringify(previousColumnOrder) === JSON.stringify(nextColumnOrder)\n ? previousColumnOrder\n : nextColumnOrder;\n });\n }, [columns, isControlled]);\n\n const columnsByKey = new Map(columns.map(column => [column.key, column]));\n const orderedColumns = orderedColumnKeys.flatMap(columnKey => {\n const column = columnsByKey.get(columnKey);\n\n return column ? [column] : [];\n });\n const draggableColumnKeys = orderedColumns.filter(isColumnDraggable).map(column => column.key);\n\n const handleColumnDragEnd = (event: DragEndEvent) => {\n if (!enabled) {\n return;\n }\n\n const activeColumnKey = String(event.active.id);\n const overColumnKey = event.over ? String(event.over.id) : undefined;\n\n if (!overColumnKey || activeColumnKey === overColumnKey) {\n return;\n }\n\n const oldIndex = draggableColumnKeys.indexOf(activeColumnKey);\n const newIndex = draggableColumnKeys.indexOf(overColumnKey);\n\n if (oldIndex < 0 || newIndex < 0) {\n return;\n }\n\n const nextDraggableColumnKeys = arrayMove(draggableColumnKeys, oldIndex, newIndex);\n let nextDraggableColumnKeyIndex = 0;\n\n const nextOrderedColumnKeys = orderedColumns.map(column => {\n if (!isColumnDraggable(column)) {\n return column.key;\n }\n\n const nextColumnKey = nextDraggableColumnKeys[nextDraggableColumnKeyIndex];\n\n nextDraggableColumnKeyIndex += 1;\n\n return nextColumnKey ?? column.key;\n });\n\n if (!isControlled) {\n setUncontrolledColumnOrder(previousColumnOrder =>\n JSON.stringify(previousColumnOrder) === JSON.stringify(nextOrderedColumnKeys)\n ? previousColumnOrder\n : nextOrderedColumnKeys\n );\n }\n\n onColumnOrderChange?.(nextOrderedColumnKeys);\n };\n\n return {\n draggableColumnKeys,\n handleColumnDragEnd,\n orderedColumns,\n };\n};\n"],"names":["reconcileColumnOrder","previousColumnOrder","columns","nextColumnKeys","column","previousColumnKeySet","preservedColumnOrder","columnKey","missingColumnKeys","isColumnDraggable","useDraggableColumns","props","columnOrder","enabled","onColumnOrderChange","uncontrolledColumnOrder","setUncontrolledColumnOrder","useState","orderedColumnKeys","isControlled","useEffect","nextColumnOrder","columnsByKey","orderedColumns","draggableColumnKeys","event","activeColumnKey","overColumnKey","oldIndex","newIndex","nextDraggableColumnKeys","arrayMove","nextDraggableColumnKeyIndex","nextOrderedColumnKeys","nextColumnKey"],"mappings":";;AAaA,MAAMA,IAAuB,CACzBC,GACAC,MACC;AACD,QAAMC,IAAiBD,EAAQ,IAAI,CAAAE,MAAUA,EAAO,GAAG,GACjDC,IAAuB,IAAI,IAAIF,CAAc,GAC7CG,IAAuBL,EAAoB,OAAO,OAAaI,EAAqB,IAAIE,CAAS,CAAC,GAClGC,IAAoBL,EAAe,OAAO,CAAAI,MAAa,CAACD,EAAqB,SAASC,CAAS,CAAC;AAEtG,SAAO,CAAC,GAAGD,GAAsB,GAAGE,CAAiB;AACzD,GAEMC,IAAoB,CAA+BL,MACrDA,EAAO,cAAc,IAEZM,IAAsB,CAA+BC,MAA6C;AAC3G,QAAM,EAAE,SAAAT,GAAS,aAAAU,GAAa,SAAAC,GAAS,qBAAAC,MAAwBH,GACzD,CAACI,GAAyBC,CAA0B,IAAIC,EAAS,MAAMf,EAAQ,IAAI,CAAAE,MAAUA,EAAO,GAAG,CAAC,GACxGc,IAAoBlB,EAAqBY,KAAeG,GAAyBb,CAAO,GACxFiB,IAAeP,MAAgB;AAErC,EAAAQ,EAAU,MAAM;AACZ,IAAID,KAIJH,EAA2B,CAAAf,MAAuB;AAC9C,YAAMoB,IAAkBrB,EAAqBC,GAAqBC,CAAO;AAEzE,aAAO,KAAK,UAAUD,CAAmB,MAAM,KAAK,UAAUoB,CAAe,IACvEpB,IACAoB;AAAA,IACV,CAAC;AAAA,EACL,GAAG,CAACnB,GAASiB,CAAY,CAAC;AAE1B,QAAMG,IAAe,IAAI,IAAIpB,EAAQ,IAAI,CAAAE,MAAU,CAACA,EAAO,KAAKA,CAAM,CAAC,CAAC,GAClEmB,IAAiBL,EAAkB,QAAQ,CAAAX,MAAa;AAC1D,UAAMH,IAASkB,EAAa,IAAIf,CAAS;AAEzC,WAAOH,IAAS,CAACA,CAAM,IAAI,CAAA;AAAA,EAC/B,CAAC,GACKoB,IAAsBD,EAAe,OAAOd,CAAiB,EAAE,IAAI,CAAAL,MAAUA,EAAO,GAAG;AA+C7F,SAAO;AAAA,IACH,qBAAAoB;AAAA,IACA,qBA/CwB,CAACC,MAAwB;AACjD,UAAI,CAACZ;AACD;AAGJ,YAAMa,IAAkB,OAAOD,EAAM,OAAO,EAAE,GACxCE,IAAgBF,EAAM,OAAO,OAAOA,EAAM,KAAK,EAAE,IAAI;AAE3D,UAAI,CAACE,KAAiBD,MAAoBC;AACtC;AAGJ,YAAMC,IAAWJ,EAAoB,QAAQE,CAAe,GACtDG,IAAWL,EAAoB,QAAQG,CAAa;AAE1D,UAAIC,IAAW,KAAKC,IAAW;AAC3B;AAGJ,YAAMC,IAA0BC,EAAUP,GAAqBI,GAAUC,CAAQ;AACjF,UAAIG,IAA8B;AAElC,YAAMC,IAAwBV,EAAe,IAAI,CAAAnB,MAAU;AACvD,YAAI,CAACK,EAAkBL,CAAM;AACzB,iBAAOA,EAAO;AAGlB,cAAM8B,IAAgBJ,EAAwBE,CAA2B;AAEzE,eAAAA,KAA+B,GAExBE,KAAiB9B,EAAO;AAAA,MACnC,CAAC;AAED,MAAKe,KACDH;AAAA,QAA2B,CAAAf,MACvB,KAAK,UAAUA,CAAmB,MAAM,KAAK,UAAUgC,CAAqB,IACtEhC,IACAgC;AAAA,MAAA,GAIdnB,IAAsBmB,CAAqB;AAAA,IAC/C;AAAA,IAKI,gBAAAV;AAAA,EAAA;AAER;"}
@@ -2,9 +2,12 @@ import { UIEvent } from 'react';
2
2
  export declare const TABLE_HORIZONTAL_SCROLL_EVENT = "table-horizontal-scroll";
3
3
  type UseHorizontalSectionSyncProps = {
4
4
  enabled: boolean;
5
+ hasFooterCells?: boolean;
5
6
  };
6
- export declare const useHorizontalSectionSync: ({ enabled }: UseHorizontalSectionSyncProps) => {
7
+ export declare const useHorizontalSectionSync: ({ enabled, hasFooterCells }: UseHorizontalSectionSyncProps) => {
7
8
  handleBodyScroll: (event: UIEvent<HTMLElement> | undefined) => void;
9
+ hasHorizontalScrollEndOffset: boolean;
10
+ hasHorizontalScrollStartOffset: boolean;
8
11
  tableFooterRowRef: import('react').RefObject<HTMLDivElement>;
9
12
  tableHeadRowRef: import('react').RefObject<HTMLDivElement>;
10
13
  };
@@ -1,39 +1,44 @@
1
- import { useRef as f, useCallback as u, useEffect as i } from "react";
2
- const L = "table-horizontal-scroll", p = (t) => {
3
- const r = t?.currentTarget;
4
- if (r && "scrollLeft" in r)
5
- return r.scrollLeft;
6
- const o = t?.target;
7
- return o && "scrollLeft" in o ? o.scrollLeft : 0;
8
- }, y = ({ enabled: t }) => {
9
- const r = f(null), o = f(null), s = f(0), e = u((c) => {
10
- const n = (l) => {
11
- if (l) {
12
- if (c === 0) {
13
- l.style.removeProperty("transform");
14
- return;
1
+ import { useRef as f, useState as S, useCallback as m, useEffect as g } from "react";
2
+ const h = "table-horizontal-scroll", R = (r) => {
3
+ const o = r?.currentTarget;
4
+ if (o && "scrollLeft" in o)
5
+ return o.scrollLeft;
6
+ const e = r?.target;
7
+ return e && "scrollLeft" in e ? e.scrollLeft : 0;
8
+ }, z = ({ enabled: r, hasFooterCells: o = !0 }) => {
9
+ const e = f(null), c = f(null), a = f(0), [L, i] = S(!1), [H, u] = S(!1), l = m(
10
+ (s) => {
11
+ const n = (t) => {
12
+ if (t) {
13
+ if (s === 0) {
14
+ t.style.removeProperty("transform");
15
+ return;
16
+ }
17
+ t.style.transform = `translateX(-${s}px)`;
15
18
  }
16
- l.style.transform = `translateX(-${c}px)`;
17
- }
18
- };
19
- n(r.current), n(o.current);
20
- }, []), a = u(
21
- (c) => {
22
- const n = p(c);
23
- t && e(n), n !== s.current && (s.current = n, window.dispatchEvent(new CustomEvent(L)));
19
+ };
20
+ n(e.current), o ? n(c.current) : c.current && c.current.style.removeProperty("transform");
24
21
  },
25
- [t, e]
22
+ [o]
23
+ ), p = m(
24
+ (s) => {
25
+ const n = s?.currentTarget, t = R(s), y = n ? Math.max(n.scrollWidth - n.clientWidth, 0) : 0, E = Math.max(y - t, 0);
26
+ i(t > 0), u(E > 1), r && l(t), t !== a.current && (a.current = t, window.dispatchEvent(new CustomEvent(h)));
27
+ },
28
+ [r, l]
26
29
  );
27
- return i(() => {
28
- t || (s.current = 0, e(0));
29
- }, [t, e]), {
30
- handleBodyScroll: a,
31
- tableFooterRowRef: o,
32
- tableHeadRowRef: r
30
+ return g(() => {
31
+ r || (a.current = 0, i(!1), u(!1), l(0));
32
+ }, [r, l]), {
33
+ handleBodyScroll: p,
34
+ hasHorizontalScrollEndOffset: H,
35
+ hasHorizontalScrollStartOffset: L,
36
+ tableFooterRowRef: c,
37
+ tableHeadRowRef: e
33
38
  };
34
39
  };
35
40
  export {
36
- L as TABLE_HORIZONTAL_SCROLL_EVENT,
37
- y as useHorizontalSectionSync
41
+ h as TABLE_HORIZONTAL_SCROLL_EVENT,
42
+ z as useHorizontalSectionSync
38
43
  };
39
44
  //# sourceMappingURL=useHorizontalSectionSync.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useHorizontalSectionSync.js","sources":["../../../../src/components/table/layout/useHorizontalSectionSync.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, type UIEvent } from 'react';\n\nexport const TABLE_HORIZONTAL_SCROLL_EVENT = 'table-horizontal-scroll';\n\nconst getScrollLeftFromEvent = (event: UIEvent<HTMLElement> | undefined) => {\n const currentTarget = event?.currentTarget;\n\n if (currentTarget && 'scrollLeft' in currentTarget) {\n return (currentTarget as HTMLElement).scrollLeft;\n }\n\n const target = event?.target;\n\n if (target && 'scrollLeft' in target) {\n return (target as HTMLElement).scrollLeft;\n }\n\n return 0;\n};\n\ntype UseHorizontalSectionSyncProps = {\n enabled: boolean;\n};\n\nexport const useHorizontalSectionSync = ({ enabled }: UseHorizontalSectionSyncProps) => {\n const tableHeadRowRef = useRef<HTMLDivElement>(null);\n const tableFooterRowRef = useRef<HTMLDivElement>(null);\n const previousScrollLeftRef = useRef(0);\n\n const syncHorizontalSections = useCallback((scrollLeft: number) => {\n const applyTransform = (element: HTMLDivElement | null) => {\n if (!element) {\n return;\n }\n\n if (scrollLeft === 0) {\n element.style.removeProperty('transform');\n return;\n }\n\n element.style.transform = `translateX(-${scrollLeft}px)`;\n };\n\n applyTransform(tableHeadRowRef.current);\n applyTransform(tableFooterRowRef.current);\n }, []);\n\n const handleBodyScroll = useCallback(\n (event: UIEvent<HTMLElement> | undefined) => {\n const scrollLeft = getScrollLeftFromEvent(event);\n\n if (enabled) {\n syncHorizontalSections(scrollLeft);\n }\n\n if (scrollLeft !== previousScrollLeftRef.current) {\n previousScrollLeftRef.current = scrollLeft;\n window.dispatchEvent(new CustomEvent(TABLE_HORIZONTAL_SCROLL_EVENT));\n }\n },\n [enabled, syncHorizontalSections]\n );\n\n useEffect(() => {\n if (!enabled) {\n previousScrollLeftRef.current = 0;\n syncHorizontalSections(0);\n }\n }, [enabled, syncHorizontalSections]);\n\n return {\n handleBodyScroll,\n tableFooterRowRef,\n tableHeadRowRef,\n };\n};\n"],"names":["TABLE_HORIZONTAL_SCROLL_EVENT","getScrollLeftFromEvent","event","currentTarget","target","useHorizontalSectionSync","enabled","tableHeadRowRef","useRef","tableFooterRowRef","previousScrollLeftRef","syncHorizontalSections","useCallback","scrollLeft","applyTransform","element","handleBodyScroll","useEffect"],"mappings":";AAEO,MAAMA,IAAgC,2BAEvCC,IAAyB,CAACC,MAA4C;AACxE,QAAMC,IAAgBD,GAAO;AAE7B,MAAIC,KAAiB,gBAAgBA;AACjC,WAAQA,EAA8B;AAG1C,QAAMC,IAASF,GAAO;AAEtB,SAAIE,KAAU,gBAAgBA,IAClBA,EAAuB,aAG5B;AACX,GAMaC,IAA2B,CAAC,EAAE,SAAAC,QAA6C;AACpF,QAAMC,IAAkBC,EAAuB,IAAI,GAC7CC,IAAoBD,EAAuB,IAAI,GAC/CE,IAAwBF,EAAO,CAAC,GAEhCG,IAAyBC,EAAY,CAACC,MAAuB;AAC/D,UAAMC,IAAiB,CAACC,MAAmC;AACvD,UAAKA,GAIL;AAAA,YAAIF,MAAe,GAAG;AAClB,UAAAE,EAAQ,MAAM,eAAe,WAAW;AACxC;AAAA,QACJ;AAEA,QAAAA,EAAQ,MAAM,YAAY,eAAeF,CAAU;AAAA;AAAA,IACvD;AAEA,IAAAC,EAAeP,EAAgB,OAAO,GACtCO,EAAeL,EAAkB,OAAO;AAAA,EAC5C,GAAG,CAAA,CAAE,GAECO,IAAmBJ;AAAA,IACrB,CAACV,MAA4C;AACzC,YAAMW,IAAaZ,EAAuBC,CAAK;AAE/C,MAAII,KACAK,EAAuBE,CAAU,GAGjCA,MAAeH,EAAsB,YACrCA,EAAsB,UAAUG,GAChC,OAAO,cAAc,IAAI,YAAYb,CAA6B,CAAC;AAAA,IAE3E;AAAA,IACA,CAACM,GAASK,CAAsB;AAAA,EAAA;AAGpC,SAAAM,EAAU,MAAM;AACZ,IAAKX,MACDI,EAAsB,UAAU,GAChCC,EAAuB,CAAC;AAAA,EAEhC,GAAG,CAACL,GAASK,CAAsB,CAAC,GAE7B;AAAA,IACH,kBAAAK;AAAA,IACA,mBAAAP;AAAA,IACA,iBAAAF;AAAA,EAAA;AAER;"}
1
+ {"version":3,"file":"useHorizontalSectionSync.js","sources":["../../../../src/components/table/layout/useHorizontalSectionSync.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useState, type UIEvent } from 'react';\n\nexport const TABLE_HORIZONTAL_SCROLL_EVENT = 'table-horizontal-scroll';\n\nconst getScrollLeftFromEvent = (event: UIEvent<HTMLElement> | undefined) => {\n const currentTarget = event?.currentTarget;\n\n if (currentTarget && 'scrollLeft' in currentTarget) {\n return (currentTarget as HTMLElement).scrollLeft;\n }\n\n const target = event?.target;\n\n if (target && 'scrollLeft' in target) {\n return (target as HTMLElement).scrollLeft;\n }\n\n return 0;\n};\n\ntype UseHorizontalSectionSyncProps = {\n enabled: boolean;\n hasFooterCells?: boolean;\n};\n\nexport const useHorizontalSectionSync = ({ enabled, hasFooterCells = true }: UseHorizontalSectionSyncProps) => {\n const tableHeadRowRef = useRef<HTMLDivElement>(null);\n const tableFooterRowRef = useRef<HTMLDivElement>(null);\n const previousScrollLeftRef = useRef(0);\n\n const [hasHorizontalScrollStartOffset, setHasHorizontalScrollStartOffset] = useState(false);\n const [hasHorizontalScrollEndOffset, setHasHorizontalScrollEndOffset] = useState(false);\n\n const syncHorizontalSections = useCallback(\n (scrollLeft: number) => {\n const applyTransform = (element: HTMLDivElement | null) => {\n if (!element) {\n return;\n }\n\n if (scrollLeft === 0) {\n element.style.removeProperty('transform');\n return;\n }\n\n element.style.transform = `translateX(-${scrollLeft}px)`;\n };\n\n applyTransform(tableHeadRowRef.current);\n\n if (hasFooterCells) {\n applyTransform(tableFooterRowRef.current);\n } else if (tableFooterRowRef.current) {\n tableFooterRowRef.current.style.removeProperty('transform');\n }\n },\n [hasFooterCells]\n );\n\n const handleBodyScroll = useCallback(\n (event: UIEvent<HTMLElement> | undefined) => {\n const currentTarget = event?.currentTarget as HTMLElement | undefined;\n const scrollLeft = getScrollLeftFromEvent(event);\n const maxScrollLeft = currentTarget\n ? Math.max(currentTarget.scrollWidth - currentTarget.clientWidth, 0)\n : 0;\n const remainingScrollLeft = Math.max(maxScrollLeft - scrollLeft, 0);\n\n setHasHorizontalScrollStartOffset(scrollLeft > 0);\n setHasHorizontalScrollEndOffset(remainingScrollLeft > 1);\n\n if (enabled) {\n syncHorizontalSections(scrollLeft);\n }\n\n if (scrollLeft !== previousScrollLeftRef.current) {\n previousScrollLeftRef.current = scrollLeft;\n window.dispatchEvent(new CustomEvent(TABLE_HORIZONTAL_SCROLL_EVENT));\n }\n },\n [enabled, syncHorizontalSections]\n );\n\n useEffect(() => {\n if (!enabled) {\n previousScrollLeftRef.current = 0;\n setHasHorizontalScrollStartOffset(false);\n setHasHorizontalScrollEndOffset(false);\n syncHorizontalSections(0);\n }\n }, [enabled, syncHorizontalSections]);\n\n return {\n handleBodyScroll,\n hasHorizontalScrollEndOffset,\n hasHorizontalScrollStartOffset,\n tableFooterRowRef,\n tableHeadRowRef,\n };\n};\n"],"names":["TABLE_HORIZONTAL_SCROLL_EVENT","getScrollLeftFromEvent","event","currentTarget","target","useHorizontalSectionSync","enabled","hasFooterCells","tableHeadRowRef","useRef","tableFooterRowRef","previousScrollLeftRef","hasHorizontalScrollStartOffset","setHasHorizontalScrollStartOffset","useState","hasHorizontalScrollEndOffset","setHasHorizontalScrollEndOffset","syncHorizontalSections","useCallback","scrollLeft","applyTransform","element","handleBodyScroll","maxScrollLeft","remainingScrollLeft","useEffect"],"mappings":";AAEO,MAAMA,IAAgC,2BAEvCC,IAAyB,CAACC,MAA4C;AACxE,QAAMC,IAAgBD,GAAO;AAE7B,MAAIC,KAAiB,gBAAgBA;AACjC,WAAQA,EAA8B;AAG1C,QAAMC,IAASF,GAAO;AAEtB,SAAIE,KAAU,gBAAgBA,IAClBA,EAAuB,aAG5B;AACX,GAOaC,IAA2B,CAAC,EAAE,SAAAC,GAAS,gBAAAC,IAAiB,SAA0C;AAC3G,QAAMC,IAAkBC,EAAuB,IAAI,GAC7CC,IAAoBD,EAAuB,IAAI,GAC/CE,IAAwBF,EAAO,CAAC,GAEhC,CAACG,GAAgCC,CAAiC,IAAIC,EAAS,EAAK,GACpF,CAACC,GAA8BC,CAA+B,IAAIF,EAAS,EAAK,GAEhFG,IAAyBC;AAAA,IAC3B,CAACC,MAAuB;AACpB,YAAMC,IAAiB,CAACC,MAAmC;AACvD,YAAKA,GAIL;AAAA,cAAIF,MAAe,GAAG;AAClB,YAAAE,EAAQ,MAAM,eAAe,WAAW;AACxC;AAAA,UACJ;AAEA,UAAAA,EAAQ,MAAM,YAAY,eAAeF,CAAU;AAAA;AAAA,MACvD;AAEA,MAAAC,EAAeZ,EAAgB,OAAO,GAElCD,IACAa,EAAeV,EAAkB,OAAO,IACjCA,EAAkB,WACzBA,EAAkB,QAAQ,MAAM,eAAe,WAAW;AAAA,IAElE;AAAA,IACA,CAACH,CAAc;AAAA,EAAA,GAGbe,IAAmBJ;AAAA,IACrB,CAAChB,MAA4C;AACzC,YAAMC,IAAgBD,GAAO,eACvBiB,IAAalB,EAAuBC,CAAK,GACzCqB,IAAgBpB,IAChB,KAAK,IAAIA,EAAc,cAAcA,EAAc,aAAa,CAAC,IACjE,GACAqB,IAAsB,KAAK,IAAID,IAAgBJ,GAAY,CAAC;AAElE,MAAAN,EAAkCM,IAAa,CAAC,GAChDH,EAAgCQ,IAAsB,CAAC,GAEnDlB,KACAW,EAAuBE,CAAU,GAGjCA,MAAeR,EAAsB,YACrCA,EAAsB,UAAUQ,GAChC,OAAO,cAAc,IAAI,YAAYnB,CAA6B,CAAC;AAAA,IAE3E;AAAA,IACA,CAACM,GAASW,CAAsB;AAAA,EAAA;AAGpC,SAAAQ,EAAU,MAAM;AACZ,IAAKnB,MACDK,EAAsB,UAAU,GAChCE,EAAkC,EAAK,GACvCG,EAAgC,EAAK,GACrCC,EAAuB,CAAC;AAAA,EAEhC,GAAG,CAACX,GAASW,CAAsB,CAAC,GAE7B;AAAA,IACH,kBAAAK;AAAA,IACA,8BAAAP;AAAA,IACA,gCAAAH;AAAA,IACA,mBAAAF;AAAA,IACA,iBAAAF;AAAA,EAAA;AAER;"}
@@ -1,12 +1,12 @@
1
1
  import { RefObject } from 'react';
2
- import { TableColumnDefinition } from '../Table.types';
2
+ import { TableColumnDefinition, TableRowData } from '../Table.types';
3
3
  export declare const stabilizeMeasuredColumnMaxWidths: (previousMeasuredColumnMaxWidths: Record<string, string>, nextMeasuredColumnMaxWidths: Record<string, string>) => {
4
4
  [k: string]: string;
5
5
  };
6
- type UseMeasuredColumnMaxWidthsProps<RowType extends Record<string, unknown>> = {
6
+ type UseMeasuredColumnMaxWidthsProps<RowType extends TableRowData> = {
7
7
  columns: TableColumnDefinition<RowType>[];
8
8
  enabled: boolean;
9
9
  tableWrapperRef: RefObject<HTMLDivElement | null>;
10
10
  };
11
- export declare const useMeasuredColumnMaxWidths: <RowType extends Record<string, unknown>>(props: UseMeasuredColumnMaxWidthsProps<RowType>) => Record<string, string>;
11
+ export declare const useMeasuredColumnMaxWidths: <RowType extends TableRowData>(props: UseMeasuredColumnMaxWidthsProps<RowType>) => Record<string, string>;
12
12
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"useMeasuredColumnMaxWidths.js","sources":["../../../../src/components/table/layout/useMeasuredColumnMaxWidths.ts"],"sourcesContent":["import { useLayoutEffect, useMemo, useRef, useState, type RefObject } from 'react';\n\nimport type { TableColumnDefinition } from '../Table.types';\n\nconst MEASURED_WIDTH_JITTER_TOLERANCE_PX = 1;\n\nconst parsePixelWidth = (width?: string) => {\n const match = width?.trim().match(/^(-?\\d+(?:\\.\\d+)?)px$/);\n\n return match ? Number(match[1]) : undefined;\n};\n\nconst measureRenderedWidth = (element: HTMLElement) => {\n const renderedWidth = element.getBoundingClientRect().width;\n\n return renderedWidth > 0 ? Math.ceil(renderedWidth) : element.scrollWidth;\n};\n\nconst resolveFlexGapWidth = (element: HTMLElement | null) => {\n if (!element) {\n return 0;\n }\n\n const styles = window.getComputedStyle(element);\n const gap = Number.parseFloat(styles.columnGap || styles.gap || '0');\n\n return Number.isFinite(gap) ? Math.ceil(gap) : 0;\n};\n\nconst measureColumnContentWidth = (element: HTMLElement) => {\n const headerLabelElement = element.querySelector<HTMLElement>('.table-head-label');\n\n if (headerLabelElement) {\n const sortArrowsElement = element.querySelector<HTMLElement>('.sort-arrows');\n\n return (\n measureRenderedWidth(headerLabelElement) +\n (sortArrowsElement ? measureRenderedWidth(sortArrowsElement) : 0) +\n (sortArrowsElement ? resolveFlexGapWidth(element.querySelector<HTMLElement>('.table-head-button')) : 0)\n );\n }\n\n const contentElement =\n element.querySelector<HTMLElement>('.table-cell-content, .table-head-button-label') ?? element;\n\n return contentElement.scrollWidth;\n};\n\nexport const stabilizeMeasuredColumnMaxWidths = (\n previousMeasuredColumnMaxWidths: Record<string, string>,\n nextMeasuredColumnMaxWidths: Record<string, string>\n) =>\n Object.fromEntries(\n Object.entries(nextMeasuredColumnMaxWidths).map(([columnKey, nextMeasuredWidth]) => {\n const previousMeasuredWidth = previousMeasuredColumnMaxWidths[columnKey];\n const previousMeasuredWidthPx = parsePixelWidth(previousMeasuredWidth);\n const nextMeasuredWidthPx = parsePixelWidth(nextMeasuredWidth);\n\n return [\n columnKey,\n previousMeasuredWidthPx !== undefined &&\n nextMeasuredWidthPx !== undefined &&\n Math.abs(previousMeasuredWidthPx - nextMeasuredWidthPx) <= MEASURED_WIDTH_JITTER_TOLERANCE_PX\n ? previousMeasuredWidth\n : nextMeasuredWidth,\n ];\n })\n );\n\ntype UseMeasuredColumnMaxWidthsProps<RowType extends Record<string, unknown>> = {\n columns: TableColumnDefinition<RowType>[];\n enabled: boolean;\n tableWrapperRef: RefObject<HTMLDivElement | null>;\n};\n\nexport const useMeasuredColumnMaxWidths = <RowType extends Record<string, unknown>>(\n props: UseMeasuredColumnMaxWidthsProps<RowType>\n) => {\n const { columns, enabled, tableWrapperRef } = props;\n const [measuredColumnMaxWidths, setMeasuredColumnMaxWidths] = useState<Record<string, string>>({});\n const previousMeasuredWidthsRef = useRef('');\n const previousMeasuredColumnMaxWidthsRef = useRef<Record<string, string>>({});\n const columnsSignature = useMemo(\n () =>\n columns\n .map(column => `${column.key}:${column.width === undefined ? 'auto' : String(column.width)}`)\n .join('|'),\n [columns]\n );\n\n useLayoutEffect(() => {\n const wrapperElement = tableWrapperRef.current;\n\n if (!enabled || !wrapperElement) {\n if (previousMeasuredWidthsRef.current) {\n previousMeasuredWidthsRef.current = '';\n previousMeasuredColumnMaxWidthsRef.current = {};\n setMeasuredColumnMaxWidths({});\n }\n\n return;\n }\n\n if (columns.length === 0) {\n if (previousMeasuredWidthsRef.current) {\n previousMeasuredWidthsRef.current = '';\n previousMeasuredColumnMaxWidthsRef.current = {};\n setMeasuredColumnMaxWidths({});\n }\n\n return;\n }\n\n const columnsWithoutWidth = columns.filter(column => column.width === undefined);\n\n if (columnsWithoutWidth.length === 0) {\n if (previousMeasuredWidthsRef.current) {\n previousMeasuredWidthsRef.current = '';\n previousMeasuredColumnMaxWidthsRef.current = {};\n setMeasuredColumnMaxWidths({});\n }\n\n return;\n }\n\n const measureColumnMaxWidths = () => {\n const columnElements = Array.from(wrapperElement.querySelectorAll<HTMLElement>('[data-column]'));\n const nextMeasuredColumnMaxWidths = Object.fromEntries(\n columnsWithoutWidth.flatMap(column => {\n const matchingElements = columnElements.filter(element => element.dataset.column === column.key);\n const measuredWidth = matchingElements.reduce(\n (largestWidth, element) => Math.max(largestWidth, measureColumnContentWidth(element)),\n 0\n );\n\n return measuredWidth > 0 ? [[column.key, `${Math.ceil(measuredWidth)}px`]] : [];\n })\n );\n const stabilizedMeasuredColumnMaxWidths = stabilizeMeasuredColumnMaxWidths(\n previousMeasuredColumnMaxWidthsRef.current,\n nextMeasuredColumnMaxWidths\n );\n const serializedMeasuredWidths = JSON.stringify(stabilizedMeasuredColumnMaxWidths);\n\n if (serializedMeasuredWidths !== previousMeasuredWidthsRef.current) {\n previousMeasuredWidthsRef.current = serializedMeasuredWidths;\n previousMeasuredColumnMaxWidthsRef.current = stabilizedMeasuredColumnMaxWidths;\n setMeasuredColumnMaxWidths(stabilizedMeasuredColumnMaxWidths);\n }\n };\n\n measureColumnMaxWidths();\n\n const observedElements = [\n wrapperElement,\n ...Array.from(\n wrapperElement.querySelectorAll<HTMLElement>(\n '.table-head, .table-body, .table-footer, .table-scroll-content'\n )\n ),\n ];\n const resizeObserver = new ResizeObserver(() => {\n measureColumnMaxWidths();\n });\n\n observedElements.forEach(element => {\n resizeObserver.observe(element);\n });\n\n return () => {\n resizeObserver.disconnect();\n };\n }, [columnsSignature, enabled, tableWrapperRef]);\n\n return measuredColumnMaxWidths;\n};\n"],"names":["MEASURED_WIDTH_JITTER_TOLERANCE_PX","parsePixelWidth","width","match","measureRenderedWidth","element","renderedWidth","resolveFlexGapWidth","styles","gap","measureColumnContentWidth","headerLabelElement","sortArrowsElement","stabilizeMeasuredColumnMaxWidths","previousMeasuredColumnMaxWidths","nextMeasuredColumnMaxWidths","columnKey","nextMeasuredWidth","previousMeasuredWidth","previousMeasuredWidthPx","nextMeasuredWidthPx","useMeasuredColumnMaxWidths","props","columns","enabled","tableWrapperRef","measuredColumnMaxWidths","setMeasuredColumnMaxWidths","useState","previousMeasuredWidthsRef","useRef","previousMeasuredColumnMaxWidthsRef","columnsSignature","useMemo","column","useLayoutEffect","wrapperElement","columnsWithoutWidth","measureColumnMaxWidths","columnElements","measuredWidth","largestWidth","stabilizedMeasuredColumnMaxWidths","serializedMeasuredWidths","observedElements","resizeObserver"],"mappings":"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"}
1
+ {"version":3,"file":"useMeasuredColumnMaxWidths.js","sources":["../../../../src/components/table/layout/useMeasuredColumnMaxWidths.ts"],"sourcesContent":["import { useLayoutEffect, useMemo, useRef, useState, type RefObject } from 'react';\n\nimport type { TableColumnDefinition, TableRowData } from '../Table.types';\n\nconst MEASURED_WIDTH_JITTER_TOLERANCE_PX = 1;\n\nconst parsePixelWidth = (width?: string) => {\n const match = width?.trim().match(/^(-?\\d+(?:\\.\\d+)?)px$/);\n\n return match ? Number(match[1]) : undefined;\n};\n\nconst measureRenderedWidth = (element: HTMLElement) => {\n const renderedWidth = element.getBoundingClientRect().width;\n\n return renderedWidth > 0 ? Math.ceil(renderedWidth) : element.scrollWidth;\n};\n\nconst resolveFlexGapWidth = (element: HTMLElement | null) => {\n if (!element) {\n return 0;\n }\n\n const styles = window.getComputedStyle(element);\n const gap = Number.parseFloat(styles.columnGap || styles.gap || '0');\n\n return Number.isFinite(gap) ? Math.ceil(gap) : 0;\n};\n\nconst measureColumnContentWidth = (element: HTMLElement) => {\n const headerLabelElement = element.querySelector<HTMLElement>('.table-head-label');\n\n if (headerLabelElement) {\n const sortArrowsElement = element.querySelector<HTMLElement>('.sort-arrows');\n\n return (\n measureRenderedWidth(headerLabelElement) +\n (sortArrowsElement ? measureRenderedWidth(sortArrowsElement) : 0) +\n (sortArrowsElement ? resolveFlexGapWidth(element.querySelector<HTMLElement>('.table-head-button')) : 0)\n );\n }\n\n const contentElement =\n element.querySelector<HTMLElement>('.table-cell-content, .table-head-button-label') ?? element;\n\n return contentElement.scrollWidth;\n};\n\nexport const stabilizeMeasuredColumnMaxWidths = (\n previousMeasuredColumnMaxWidths: Record<string, string>,\n nextMeasuredColumnMaxWidths: Record<string, string>\n) =>\n Object.fromEntries(\n Object.entries(nextMeasuredColumnMaxWidths).map(([columnKey, nextMeasuredWidth]) => {\n const previousMeasuredWidth = previousMeasuredColumnMaxWidths[columnKey];\n const previousMeasuredWidthPx = parsePixelWidth(previousMeasuredWidth);\n const nextMeasuredWidthPx = parsePixelWidth(nextMeasuredWidth);\n\n return [\n columnKey,\n previousMeasuredWidthPx !== undefined &&\n nextMeasuredWidthPx !== undefined &&\n Math.abs(previousMeasuredWidthPx - nextMeasuredWidthPx) <= MEASURED_WIDTH_JITTER_TOLERANCE_PX\n ? previousMeasuredWidth\n : nextMeasuredWidth,\n ];\n })\n );\n\ntype UseMeasuredColumnMaxWidthsProps<RowType extends TableRowData> = {\n columns: TableColumnDefinition<RowType>[];\n enabled: boolean;\n tableWrapperRef: RefObject<HTMLDivElement | null>;\n};\n\nexport const useMeasuredColumnMaxWidths = <RowType extends TableRowData>(\n props: UseMeasuredColumnMaxWidthsProps<RowType>\n) => {\n const { columns, enabled, tableWrapperRef } = props;\n const [measuredColumnMaxWidths, setMeasuredColumnMaxWidths] = useState<Record<string, string>>({});\n const previousMeasuredWidthsRef = useRef('');\n const previousMeasuredColumnMaxWidthsRef = useRef<Record<string, string>>({});\n const columnsSignature = useMemo(\n () =>\n columns\n .map(column => `${column.key}:${column.width === undefined ? 'auto' : String(column.width)}`)\n .join('|'),\n [columns]\n );\n\n useLayoutEffect(() => {\n const wrapperElement = tableWrapperRef.current;\n\n if (!enabled || !wrapperElement) {\n if (previousMeasuredWidthsRef.current) {\n previousMeasuredWidthsRef.current = '';\n previousMeasuredColumnMaxWidthsRef.current = {};\n setMeasuredColumnMaxWidths({});\n }\n\n return;\n }\n\n if (columns.length === 0) {\n if (previousMeasuredWidthsRef.current) {\n previousMeasuredWidthsRef.current = '';\n previousMeasuredColumnMaxWidthsRef.current = {};\n setMeasuredColumnMaxWidths({});\n }\n\n return;\n }\n\n const columnsWithoutWidth = columns.filter(column => column.width === undefined);\n\n if (columnsWithoutWidth.length === 0) {\n if (previousMeasuredWidthsRef.current) {\n previousMeasuredWidthsRef.current = '';\n previousMeasuredColumnMaxWidthsRef.current = {};\n setMeasuredColumnMaxWidths({});\n }\n\n return;\n }\n\n const measureColumnMaxWidths = () => {\n const columnElements = Array.from(wrapperElement.querySelectorAll<HTMLElement>('[data-column]'));\n const nextMeasuredColumnMaxWidths = Object.fromEntries(\n columnsWithoutWidth.flatMap(column => {\n const matchingElements = columnElements.filter(element => element.dataset.column === column.key);\n const measuredWidth = matchingElements.reduce(\n (largestWidth, element) => Math.max(largestWidth, measureColumnContentWidth(element)),\n 0\n );\n\n return measuredWidth > 0 ? [[column.key, `${Math.ceil(measuredWidth)}px`]] : [];\n })\n );\n const stabilizedMeasuredColumnMaxWidths = stabilizeMeasuredColumnMaxWidths(\n previousMeasuredColumnMaxWidthsRef.current,\n nextMeasuredColumnMaxWidths\n );\n const serializedMeasuredWidths = JSON.stringify(stabilizedMeasuredColumnMaxWidths);\n\n if (serializedMeasuredWidths !== previousMeasuredWidthsRef.current) {\n previousMeasuredWidthsRef.current = serializedMeasuredWidths;\n previousMeasuredColumnMaxWidthsRef.current = stabilizedMeasuredColumnMaxWidths;\n setMeasuredColumnMaxWidths(stabilizedMeasuredColumnMaxWidths);\n }\n };\n\n measureColumnMaxWidths();\n\n const observedElements = [\n wrapperElement,\n ...Array.from(\n wrapperElement.querySelectorAll<HTMLElement>(\n '.table-head, .table-body, .table-footer, .table-scroll-content'\n )\n ),\n ];\n const resizeObserver = new ResizeObserver(() => {\n measureColumnMaxWidths();\n });\n\n observedElements.forEach(element => {\n resizeObserver.observe(element);\n });\n\n return () => {\n resizeObserver.disconnect();\n };\n }, [columnsSignature, enabled, tableWrapperRef]);\n\n return measuredColumnMaxWidths;\n};\n"],"names":["MEASURED_WIDTH_JITTER_TOLERANCE_PX","parsePixelWidth","width","match","measureRenderedWidth","element","renderedWidth","resolveFlexGapWidth","styles","gap","measureColumnContentWidth","headerLabelElement","sortArrowsElement","stabilizeMeasuredColumnMaxWidths","previousMeasuredColumnMaxWidths","nextMeasuredColumnMaxWidths","columnKey","nextMeasuredWidth","previousMeasuredWidth","previousMeasuredWidthPx","nextMeasuredWidthPx","useMeasuredColumnMaxWidths","props","columns","enabled","tableWrapperRef","measuredColumnMaxWidths","setMeasuredColumnMaxWidths","useState","previousMeasuredWidthsRef","useRef","previousMeasuredColumnMaxWidthsRef","columnsSignature","useMemo","column","useLayoutEffect","wrapperElement","columnsWithoutWidth","measureColumnMaxWidths","columnElements","measuredWidth","largestWidth","stabilizedMeasuredColumnMaxWidths","serializedMeasuredWidths","observedElements","resizeObserver"],"mappings":"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"}
@@ -1,14 +1,15 @@
1
1
  import { PointerEvent as ReactPointerEvent } from 'react';
2
- import { TableColumnDefinition } from '../Table.types';
3
- type UseResizableColumnsProps<RowType extends Record<string, unknown>> = {
2
+ import { TableColumnDefinition, TableRowData } from '../Table.types';
3
+ type UseResizableColumnsProps<RowType extends TableRowData> = {
4
4
  columns: TableColumnDefinition<RowType>[];
5
5
  enabled: boolean;
6
- onColumnResize?: (columnKey: string, width?: number) => void;
6
+ onColumnResize?: (columnKey: string, width?: number | string) => void;
7
7
  };
8
- export declare const useResizableColumns: <RowType extends Record<string, unknown>>(props: UseResizableColumnsProps<RowType>) => {
8
+ export declare const useResizableColumns: <RowType extends TableRowData>(props: UseResizableColumnsProps<RowType>) => {
9
9
  handleColumnResizeReset: (columnKey: string) => void;
10
10
  handleColumnResizeStart: (columnKey: string, event: ReactPointerEvent<HTMLDivElement>) => void;
11
11
  lastResizableColumnKey: string | Extract<keyof RowType, string> | undefined;
12
+ resettableColumnKeys: Set<string>;
12
13
  resizedColumns: TableColumnDefinition<RowType>[];
13
14
  };
14
15
  export {};
@@ -1,91 +1,132 @@
1
- import { useState as z, useEffect as f } from "react";
2
- import { DEFAULT_MIN_RESIZE_WIDTH_PX as W, MIN_COLUMN_WIDTH_PX as R, DEFAULT_MAX_RESIZE_WIDTH_PX as p } from "../tableSizing.constants.js";
3
- const w = (c) => {
4
- const l = (typeof c == "number" ? `${c}px` : c)?.trim().match(/^(-?\d+(?:\.\d+)?)px$/);
5
- if (l)
6
- return Math.round(Number(l[1]));
7
- }, S = (c) => {
8
- const { columns: s, enabled: l, onColumnResize: a } = c, [y, u] = z({}), [r, h] = z(void 0);
9
- f(() => {
10
- a && u((e) => {
11
- const n = Object.fromEntries(
12
- Object.entries(e).flatMap(([o]) => {
13
- const t = s.find((d) => d.key === o), i = w(t?.width);
14
- return i === void 0 ? [] : [[o, i]];
15
- })
16
- );
17
- return JSON.stringify(e) === JSON.stringify(n) ? e : n;
18
- });
19
- }, [s, a]), f(() => {
20
- if (!r)
1
+ import { useState as z, useRef as R, useLayoutEffect as L, useEffect as I, useMemo as X } from "react";
2
+ import { DEFAULT_MIN_RESIZE_WIDTH_PX as g, MIN_COLUMN_WIDTH_PX as b, DEFAULT_MAX_RESIZE_WIDTH_PX as D } from "../tableSizing.constants.js";
3
+ const E = (l) => {
4
+ const u = (typeof l == "number" ? `${l}px` : l?.trim())?.match(/^(-?\d+(?:\.\d+)?)(px|%)$/);
5
+ if (u)
6
+ return {
7
+ unit: u[2],
8
+ value: Number(u[1])
9
+ };
10
+ }, f = (l, r) => {
11
+ if (l === r)
12
+ return !0;
13
+ const u = E(l), h = E(r);
14
+ return u !== void 0 && h !== void 0 && u.unit === h.unit ? u.value === h.value : !1;
15
+ }, P = (l) => {
16
+ const { columns: r, enabled: u, onColumnResize: h } = l, [C, W] = z({}), [c, p] = z(void 0), m = R({}), y = R({}), w = R(!1);
17
+ r.forEach((e) => {
18
+ e.key in m.current || (m.current[e.key] = e.width);
19
+ }), L(() => {
20
+ const e = Object.fromEntries(r.map((t) => [t.key, t.width]));
21
+ if (r.length === 0)
22
+ return;
23
+ if (!w.current) {
24
+ y.current = e, w.current = !0;
25
+ return;
26
+ }
27
+ const i = y.current, a = new Set(r.map((t) => t.key)), s = Object.keys(i);
28
+ (r.some((t) => !f(t.width, i[t.key])) || s.some((t) => !a.has(t))) && (W((t) => {
29
+ let n = t;
30
+ return r.forEach((d) => {
31
+ const S = y.current[d.key];
32
+ if (f(d.width, S))
33
+ return;
34
+ const _ = m.current[d.key];
35
+ if (f(d.width, _)) {
36
+ if (!(d.key in n))
37
+ return;
38
+ n = { ...n }, delete n[d.key];
39
+ return;
40
+ }
41
+ n[d.key] !== d.width && (n = {
42
+ ...n,
43
+ [d.key]: d.width
44
+ });
45
+ }), Object.keys(n).forEach((d) => {
46
+ a.has(d) || (n === t && (n = { ...n }), delete n[d]);
47
+ }), n;
48
+ }), y.current = e);
49
+ }, [r]), I(() => {
50
+ if (!c)
21
51
  return;
22
- const e = document.body.style.cursor, n = document.body.style.userSelect;
52
+ const e = document.body.style.cursor, i = document.body.style.userSelect;
23
53
  document.body.style.cursor = "col-resize", document.body.style.userSelect = "none";
24
- const o = (i) => {
25
- const d = Math.min(
26
- r.maxResizeWidth,
54
+ const a = (o) => {
55
+ const t = Math.min(
56
+ c.maxResizeWidth,
27
57
  Math.max(
28
- r.minResizeWidth,
29
- Math.round(r.startWidth + i.clientX - r.startX)
58
+ c.minResizeWidth,
59
+ Math.round(c.startWidth + o.clientX - c.startX)
30
60
  )
31
61
  );
32
- a?.(r.columnKey, d), u(
33
- (m) => m[r.columnKey] === d ? m : {
34
- ...m,
35
- [r.columnKey]: d
62
+ h?.(c.columnKey, t), W(
63
+ (n) => n[c.columnKey] === t ? n : {
64
+ ...n,
65
+ [c.columnKey]: t
36
66
  }
37
67
  );
38
- }, t = () => {
39
- h(void 0);
68
+ }, s = () => {
69
+ p(void 0);
40
70
  };
41
- return window.addEventListener("pointermove", o), window.addEventListener("pointerup", t), window.addEventListener("pointercancel", t), () => {
42
- document.body.style.cursor = e, document.body.style.userSelect = n, window.removeEventListener("pointermove", o), window.removeEventListener("pointerup", t), window.removeEventListener("pointercancel", t);
71
+ return window.addEventListener("pointermove", a), window.addEventListener("pointerup", s), window.addEventListener("pointercancel", s), () => {
72
+ document.body.style.cursor = e, document.body.style.userSelect = i, window.removeEventListener("pointermove", a), window.removeEventListener("pointerup", s), window.removeEventListener("pointercancel", s);
43
73
  };
44
- }, [a, r]);
45
- const b = (e, n) => {
46
- if (!l || n.button !== 0)
74
+ }, [h, c]);
75
+ const k = (e, i) => {
76
+ if (!u || i.button !== 0)
47
77
  return;
48
- const o = s.find((m) => m.key === e), t = n.currentTarget.closest(".table-head-cell");
49
- if (!o || !t)
78
+ const a = r.find((n) => n.key === e), s = i.currentTarget.closest(".table-head-cell");
79
+ if (!a || !s)
50
80
  return;
51
- n.preventDefault(), n.stopPropagation();
52
- const i = Math.max(o.minResizeWidth ?? W, R), d = Math.max(o.maxResizeWidth ?? p, i);
53
- h({
81
+ i.preventDefault(), i.stopPropagation();
82
+ const o = Math.max(a.minResizeWidth ?? g, b), t = Math.max(a.maxResizeWidth ?? D, o);
83
+ p({
54
84
  columnKey: e,
55
- maxResizeWidth: d,
56
- minResizeWidth: i,
57
- startWidth: t.getBoundingClientRect().width,
58
- startX: n.clientX
85
+ maxResizeWidth: t,
86
+ minResizeWidth: o,
87
+ startWidth: s.getBoundingClientRect().width,
88
+ startX: i.clientX
59
89
  });
60
- }, x = (e) => {
61
- const n = s.find((t) => t.key === e), o = n?.minResizeWidth !== void 0 ? Math.max(n.minResizeWidth, R) : void 0;
62
- h(void 0), a?.(e, o), u((t) => {
63
- if (o === void 0) {
64
- if (!(e in t))
65
- return t;
66
- const i = { ...t };
67
- return delete i[e], i;
90
+ }, v = (e) => {
91
+ const i = r.find((o) => o.key === e), s = m.current[e] ?? (i?.minResizeWidth !== void 0 ? Math.max(i.minResizeWidth, b) : void 0);
92
+ p(void 0), h?.(e, s), W((o) => {
93
+ if (s === void 0) {
94
+ if (!(e in o))
95
+ return o;
96
+ const t = { ...o };
97
+ return delete t[e], t;
68
98
  }
69
- return t[e] === o ? t : {
70
- ...t,
71
- [e]: o
99
+ return o[e] === s ? o : {
100
+ ...o,
101
+ [e]: s
72
102
  };
73
103
  });
74
- }, E = s.map((e) => {
75
- const n = y[e.key];
76
- return n === void 0 ? e : {
104
+ }, M = r.map((e) => {
105
+ const i = C[e.key];
106
+ return i === void 0 ? e : {
77
107
  ...e,
78
- width: n
108
+ width: i
79
109
  };
80
- });
110
+ }), x = X(
111
+ () => /* @__PURE__ */ new Set([
112
+ ...r.flatMap(
113
+ (e) => f(e.width, m.current[e.key]) ? [] : [e.key]
114
+ ),
115
+ ...Object.entries(C).flatMap(
116
+ ([e, i]) => f(i, m.current[e]) ? [] : [e]
117
+ )
118
+ ]),
119
+ [r, C]
120
+ );
81
121
  return {
82
- handleColumnResizeReset: x,
83
- handleColumnResizeStart: b,
84
- lastResizableColumnKey: s.at(-1)?.key,
85
- resizedColumns: E
122
+ handleColumnResizeReset: v,
123
+ handleColumnResizeStart: k,
124
+ lastResizableColumnKey: r.at(-1)?.key,
125
+ resettableColumnKeys: x,
126
+ resizedColumns: M
86
127
  };
87
128
  };
88
129
  export {
89
- S as useResizableColumns
130
+ P as useResizableColumns
90
131
  };
91
132
  //# sourceMappingURL=useResizableColumns.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useResizableColumns.js","sources":["../../../../src/components/table/layout/useResizableColumns.ts"],"sourcesContent":["import { useEffect, useState, type PointerEvent as ReactPointerEvent } from 'react';\n\nimport type { TableColumnDefinition } from '../Table.types';\nimport {\n DEFAULT_MAX_RESIZE_WIDTH_PX,\n DEFAULT_MIN_RESIZE_WIDTH_PX,\n MIN_COLUMN_WIDTH_PX,\n} from '../tableSizing.constants';\n\ntype ResizeSession = {\n columnKey: string;\n maxResizeWidth: number;\n minResizeWidth: number;\n startWidth: number;\n startX: number;\n};\n\ntype UseResizableColumnsProps<RowType extends Record<string, unknown>> = {\n columns: TableColumnDefinition<RowType>[];\n enabled: boolean;\n onColumnResize?: (columnKey: string, width?: number) => void;\n};\n\nconst parsePixelWidth = (width?: number | string) => {\n const normalizedWidth = typeof width === 'number' ? `${width}px` : width;\n const match = normalizedWidth?.trim().match(/^(-?\\d+(?:\\.\\d+)?)px$/);\n\n if (!match) {\n return;\n }\n\n return Math.round(Number(match[1]));\n};\n\nexport const useResizableColumns = <RowType extends Record<string, unknown>>(\n props: UseResizableColumnsProps<RowType>\n) => {\n const { columns, enabled, onColumnResize } = props;\n const [resizedColumnWidths, setResizedColumnWidths] = useState<Record<string, number>>({});\n const [resizeSession, setResizeSession] = useState<ResizeSession | undefined>(undefined);\n\n useEffect(() => {\n if (!onColumnResize) {\n return;\n }\n\n setResizedColumnWidths(previousWidths => {\n const nextWidths = Object.fromEntries(\n Object.entries(previousWidths).flatMap(([columnKey]) => {\n const currentColumn = columns.find(column => column.key === columnKey);\n const currentPixelWidth = parsePixelWidth(currentColumn?.width);\n\n return currentPixelWidth === undefined ? [] : [[columnKey, currentPixelWidth]];\n })\n );\n\n return JSON.stringify(previousWidths) === JSON.stringify(nextWidths) ? previousWidths : nextWidths;\n });\n }, [columns, onColumnResize]);\n\n useEffect(() => {\n if (!resizeSession) {\n return;\n }\n\n const previousBodyCursor = document.body.style.cursor;\n const previousBodyUserSelect = document.body.style.userSelect;\n\n document.body.style.cursor = 'col-resize';\n document.body.style.userSelect = 'none';\n\n const handlePointerMove = (event: PointerEvent) => {\n const nextWidth = Math.min(\n resizeSession.maxResizeWidth,\n Math.max(\n resizeSession.minResizeWidth,\n Math.round(resizeSession.startWidth + event.clientX - resizeSession.startX)\n )\n );\n\n onColumnResize?.(resizeSession.columnKey, nextWidth);\n\n setResizedColumnWidths(previousWidths =>\n previousWidths[resizeSession.columnKey] === nextWidth\n ? previousWidths\n : {\n ...previousWidths,\n [resizeSession.columnKey]: nextWidth,\n }\n );\n };\n\n const stopResize = () => {\n setResizeSession(undefined);\n };\n\n window.addEventListener('pointermove', handlePointerMove);\n window.addEventListener('pointerup', stopResize);\n window.addEventListener('pointercancel', stopResize);\n\n return () => {\n document.body.style.cursor = previousBodyCursor;\n document.body.style.userSelect = previousBodyUserSelect;\n window.removeEventListener('pointermove', handlePointerMove);\n window.removeEventListener('pointerup', stopResize);\n window.removeEventListener('pointercancel', stopResize);\n };\n }, [onColumnResize, resizeSession]);\n\n const handleColumnResizeStart = (columnKey: string, event: ReactPointerEvent<HTMLDivElement>) => {\n if (!enabled || event.button !== 0) {\n return;\n }\n\n const column = columns.find(currentColumn => currentColumn.key === columnKey);\n const headerCellElement = event.currentTarget.closest<HTMLElement>('.table-head-cell');\n\n if (!column || !headerCellElement) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n const minResizeWidth = Math.max(column.minResizeWidth ?? DEFAULT_MIN_RESIZE_WIDTH_PX, MIN_COLUMN_WIDTH_PX);\n const maxResizeWidth = Math.max(column.maxResizeWidth ?? DEFAULT_MAX_RESIZE_WIDTH_PX, minResizeWidth);\n\n setResizeSession({\n columnKey,\n maxResizeWidth,\n minResizeWidth,\n startWidth: headerCellElement.getBoundingClientRect().width,\n startX: event.clientX,\n });\n };\n\n const handleColumnResizeReset = (columnKey: string) => {\n const column = columns.find(currentColumn => currentColumn.key === columnKey);\n const resetWidth =\n column?.minResizeWidth !== undefined ? Math.max(column.minResizeWidth, MIN_COLUMN_WIDTH_PX) : undefined;\n\n setResizeSession(undefined);\n onColumnResize?.(columnKey, resetWidth);\n setResizedColumnWidths(previousWidths => {\n if (resetWidth === undefined) {\n if (!(columnKey in previousWidths)) {\n return previousWidths;\n }\n\n const nextWidths = { ...previousWidths };\n delete nextWidths[columnKey];\n\n return nextWidths;\n }\n\n return previousWidths[columnKey] === resetWidth\n ? previousWidths\n : {\n ...previousWidths,\n [columnKey]: resetWidth,\n };\n });\n };\n\n const resizedColumns = columns.map(column => {\n const resizedWidth = resizedColumnWidths[column.key];\n\n return resizedWidth === undefined\n ? column\n : {\n ...column,\n width: resizedWidth,\n };\n });\n\n return {\n handleColumnResizeReset,\n handleColumnResizeStart,\n lastResizableColumnKey: columns.at(-1)?.key,\n resizedColumns,\n };\n};\n"],"names":["parsePixelWidth","width","match","useResizableColumns","props","columns","enabled","onColumnResize","resizedColumnWidths","setResizedColumnWidths","useState","resizeSession","setResizeSession","useEffect","previousWidths","nextWidths","columnKey","currentColumn","column","currentPixelWidth","previousBodyCursor","previousBodyUserSelect","handlePointerMove","event","nextWidth","stopResize","handleColumnResizeStart","headerCellElement","minResizeWidth","DEFAULT_MIN_RESIZE_WIDTH_PX","MIN_COLUMN_WIDTH_PX","maxResizeWidth","DEFAULT_MAX_RESIZE_WIDTH_PX","handleColumnResizeReset","resetWidth","resizedColumns","resizedWidth"],"mappings":";;AAuBA,MAAMA,IAAkB,CAACC,MAA4B;AAEjD,QAAMC,KADkB,OAAOD,KAAU,WAAW,GAAGA,CAAK,OAAOA,IACpC,KAAA,EAAO,MAAM,uBAAuB;AAEnE,MAAKC;AAIL,WAAO,KAAK,MAAM,OAAOA,EAAM,CAAC,CAAC,CAAC;AACtC,GAEaC,IAAsB,CAC/BC,MACC;AACD,QAAM,EAAE,SAAAC,GAAS,SAAAC,GAAS,gBAAAC,EAAA,IAAmBH,GACvC,CAACI,GAAqBC,CAAsB,IAAIC,EAAiC,CAAA,CAAE,GACnF,CAACC,GAAeC,CAAgB,IAAIF,EAAoC,MAAS;AAEvF,EAAAG,EAAU,MAAM;AACZ,IAAKN,KAILE,EAAuB,CAAAK,MAAkB;AACrC,YAAMC,IAAa,OAAO;AAAA,QACtB,OAAO,QAAQD,CAAc,EAAE,QAAQ,CAAC,CAACE,CAAS,MAAM;AACpD,gBAAMC,IAAgBZ,EAAQ,KAAK,CAAAa,MAAUA,EAAO,QAAQF,CAAS,GAC/DG,IAAoBnB,EAAgBiB,GAAe,KAAK;AAE9D,iBAAOE,MAAsB,SAAY,CAAA,IAAK,CAAC,CAACH,GAAWG,CAAiB,CAAC;AAAA,QACjF,CAAC;AAAA,MAAA;AAGL,aAAO,KAAK,UAAUL,CAAc,MAAM,KAAK,UAAUC,CAAU,IAAID,IAAiBC;AAAA,IAC5F,CAAC;AAAA,EACL,GAAG,CAACV,GAASE,CAAc,CAAC,GAE5BM,EAAU,MAAM;AACZ,QAAI,CAACF;AACD;AAGJ,UAAMS,IAAqB,SAAS,KAAK,MAAM,QACzCC,IAAyB,SAAS,KAAK,MAAM;AAEnD,aAAS,KAAK,MAAM,SAAS,cAC7B,SAAS,KAAK,MAAM,aAAa;AAEjC,UAAMC,IAAoB,CAACC,MAAwB;AAC/C,YAAMC,IAAY,KAAK;AAAA,QACnBb,EAAc;AAAA,QACd,KAAK;AAAA,UACDA,EAAc;AAAA,UACd,KAAK,MAAMA,EAAc,aAAaY,EAAM,UAAUZ,EAAc,MAAM;AAAA,QAAA;AAAA,MAC9E;AAGJ,MAAAJ,IAAiBI,EAAc,WAAWa,CAAS,GAEnDf;AAAA,QAAuB,OACnBK,EAAeH,EAAc,SAAS,MAAMa,IACtCV,IACA;AAAA,UACI,GAAGA;AAAA,UACH,CAACH,EAAc,SAAS,GAAGa;AAAA,QAAA;AAAA,MAC/B;AAAA,IAEd,GAEMC,IAAa,MAAM;AACrB,MAAAb,EAAiB,MAAS;AAAA,IAC9B;AAEA,kBAAO,iBAAiB,eAAeU,CAAiB,GACxD,OAAO,iBAAiB,aAAaG,CAAU,GAC/C,OAAO,iBAAiB,iBAAiBA,CAAU,GAE5C,MAAM;AACT,eAAS,KAAK,MAAM,SAASL,GAC7B,SAAS,KAAK,MAAM,aAAaC,GACjC,OAAO,oBAAoB,eAAeC,CAAiB,GAC3D,OAAO,oBAAoB,aAAaG,CAAU,GAClD,OAAO,oBAAoB,iBAAiBA,CAAU;AAAA,IAC1D;AAAA,EACJ,GAAG,CAAClB,GAAgBI,CAAa,CAAC;AAElC,QAAMe,IAA0B,CAACV,GAAmBO,MAA6C;AAC7F,QAAI,CAACjB,KAAWiB,EAAM,WAAW;AAC7B;AAGJ,UAAML,IAASb,EAAQ,KAAK,CAAAY,MAAiBA,EAAc,QAAQD,CAAS,GACtEW,IAAoBJ,EAAM,cAAc,QAAqB,kBAAkB;AAErF,QAAI,CAACL,KAAU,CAACS;AACZ;AAGJ,IAAAJ,EAAM,eAAA,GACNA,EAAM,gBAAA;AAEN,UAAMK,IAAiB,KAAK,IAAIV,EAAO,kBAAkBW,GAA6BC,CAAmB,GACnGC,IAAiB,KAAK,IAAIb,EAAO,kBAAkBc,GAA6BJ,CAAc;AAEpG,IAAAhB,EAAiB;AAAA,MACb,WAAAI;AAAA,MACA,gBAAAe;AAAA,MACA,gBAAAH;AAAA,MACA,YAAYD,EAAkB,sBAAA,EAAwB;AAAA,MACtD,QAAQJ,EAAM;AAAA,IAAA,CACjB;AAAA,EACL,GAEMU,IAA0B,CAACjB,MAAsB;AACnD,UAAME,IAASb,EAAQ,KAAK,CAAAY,MAAiBA,EAAc,QAAQD,CAAS,GACtEkB,IACFhB,GAAQ,mBAAmB,SAAY,KAAK,IAAIA,EAAO,gBAAgBY,CAAmB,IAAI;AAElG,IAAAlB,EAAiB,MAAS,GAC1BL,IAAiBS,GAAWkB,CAAU,GACtCzB,EAAuB,CAAAK,MAAkB;AACrC,UAAIoB,MAAe,QAAW;AAC1B,YAAI,EAAElB,KAAaF;AACf,iBAAOA;AAGX,cAAMC,IAAa,EAAE,GAAGD,EAAA;AACxB,sBAAOC,EAAWC,CAAS,GAEpBD;AAAA,MACX;AAEA,aAAOD,EAAeE,CAAS,MAAMkB,IAC/BpB,IACA;AAAA,QACI,GAAGA;AAAA,QACH,CAACE,CAAS,GAAGkB;AAAA,MAAA;AAAA,IAE3B,CAAC;AAAA,EACL,GAEMC,IAAiB9B,EAAQ,IAAI,CAAAa,MAAU;AACzC,UAAMkB,IAAe5B,EAAoBU,EAAO,GAAG;AAEnD,WAAOkB,MAAiB,SAClBlB,IACA;AAAA,MACI,GAAGA;AAAA,MACH,OAAOkB;AAAA,IAAA;AAAA,EAErB,CAAC;AAED,SAAO;AAAA,IACH,yBAAAH;AAAA,IACA,yBAAAP;AAAA,IACA,wBAAwBrB,EAAQ,GAAG,EAAE,GAAG;AAAA,IACxC,gBAAA8B;AAAA,EAAA;AAER;"}
1
+ {"version":3,"file":"useResizableColumns.js","sources":["../../../../src/components/table/layout/useResizableColumns.ts"],"sourcesContent":["import { useEffect, useLayoutEffect, useMemo, useRef, useState, type PointerEvent as ReactPointerEvent } from 'react';\n\nimport type { TableColumnDefinition, TableRowData } from '../Table.types';\nimport {\n DEFAULT_MAX_RESIZE_WIDTH_PX,\n DEFAULT_MIN_RESIZE_WIDTH_PX,\n MIN_COLUMN_WIDTH_PX,\n} from '../tableSizing.constants';\n\ntype ResizeSession = {\n columnKey: string;\n maxResizeWidth: number;\n minResizeWidth: number;\n startWidth: number;\n startX: number;\n};\n\ntype UseResizableColumnsProps<RowType extends TableRowData> = {\n columns: TableColumnDefinition<RowType>[];\n enabled: boolean;\n onColumnResize?: (columnKey: string, width?: number | string) => void;\n};\n\nconst parseComparableWidth = (width?: number | string) => {\n const normalizedWidth = typeof width === 'number' ? `${width}px` : width?.trim();\n const match = normalizedWidth?.match(/^(-?\\d+(?:\\.\\d+)?)(px|%)$/);\n\n if (!match) {\n return;\n }\n\n return {\n unit: match[2],\n value: Number(match[1]),\n };\n};\n\nconst areColumnWidthsEqual = (currentWidth?: number | string, initialWidth?: number | string) => {\n if (currentWidth === initialWidth) {\n return true;\n }\n\n const currentComparableWidth = parseComparableWidth(currentWidth);\n const initialComparableWidth = parseComparableWidth(initialWidth);\n\n if (\n currentComparableWidth !== undefined &&\n initialComparableWidth !== undefined &&\n currentComparableWidth.unit === initialComparableWidth.unit\n ) {\n return currentComparableWidth.value === initialComparableWidth.value;\n }\n\n return false;\n};\n\nexport const useResizableColumns = <RowType extends TableRowData>(props: UseResizableColumnsProps<RowType>) => {\n const { columns, enabled, onColumnResize } = props;\n const [modifiedColumnWidths, setModifiedColumnWidths] = useState<Record<string, number | string | undefined>>({});\n const [resizeSession, setResizeSession] = useState<ResizeSession | undefined>(undefined);\n const initialColumnWidthsRef = useRef<Record<string, number | string | undefined>>({});\n const previousColumnWidthsRef = useRef<Record<string, number | string | undefined>>({});\n const hasInitializedColumnWidthsRef = useRef(false);\n\n // Capture the initial explicit width synchronously during render so the first\n // derived `resettableColumnKeys` set already compares against stable defaults.\n // Using an effect here would be too late: the first render would treat every\n // explicit width as \"already resized\" and show dotted reset handles.\n columns.forEach(column => {\n if (!(column.key in initialColumnWidthsRef.current)) {\n initialColumnWidthsRef.current[column.key] = column.width;\n }\n });\n\n useLayoutEffect(() => {\n const currentColumnWidths = Object.fromEntries(columns.map(column => [column.key, column.width] as const));\n\n // Header columns are registered in a preceding render pass. Ignore empty\n // intermediate states and only establish the baseline once the first real\n // column model is available.\n if (columns.length === 0) {\n return;\n }\n\n // The first non-empty column model defines the baseline widths. Do not mark\n // anything as resettable during that initialization phase, even if later\n // renders normalize the same width differently.\n if (!hasInitializedColumnWidthsRef.current) {\n previousColumnWidthsRef.current = currentColumnWidths;\n hasInitializedColumnWidthsRef.current = true;\n return;\n }\n\n const previousColumnWidths = previousColumnWidthsRef.current;\n const currentColumnKeySet = new Set(columns.map(column => column.key));\n const previousColumnKeys = Object.keys(previousColumnWidths);\n const hasColumnWidthChanges =\n columns.some(column => !areColumnWidthsEqual(column.width, previousColumnWidths[column.key])) ||\n previousColumnKeys.some(columnKey => !currentColumnKeySet.has(columnKey));\n\n if (!hasColumnWidthChanges) {\n return;\n }\n\n setModifiedColumnWidths(previousWidths => {\n let nextWidths = previousWidths;\n\n columns.forEach(column => {\n const previousColumnWidth = previousColumnWidthsRef.current[column.key];\n\n if (areColumnWidthsEqual(column.width, previousColumnWidth)) {\n return;\n }\n\n const initialColumnWidth = initialColumnWidthsRef.current[column.key];\n\n if (areColumnWidthsEqual(column.width, initialColumnWidth)) {\n if (!(column.key in nextWidths)) {\n return;\n }\n\n nextWidths = { ...nextWidths };\n delete nextWidths[column.key];\n return;\n }\n\n if (nextWidths[column.key] === column.width) {\n return;\n }\n\n nextWidths = {\n ...nextWidths,\n [column.key]: column.width,\n };\n });\n\n Object.keys(nextWidths).forEach(columnKey => {\n if (currentColumnKeySet.has(columnKey)) {\n return;\n }\n\n if (nextWidths === previousWidths) {\n nextWidths = { ...nextWidths };\n }\n\n delete nextWidths[columnKey];\n });\n\n return nextWidths;\n });\n\n previousColumnWidthsRef.current = currentColumnWidths;\n }, [columns]);\n\n useEffect(() => {\n if (!resizeSession) {\n return;\n }\n\n const previousBodyCursor = document.body.style.cursor;\n const previousBodyUserSelect = document.body.style.userSelect;\n\n document.body.style.cursor = 'col-resize';\n document.body.style.userSelect = 'none';\n\n const handlePointerMove = (event: PointerEvent) => {\n const nextWidth = Math.min(\n resizeSession.maxResizeWidth,\n Math.max(\n resizeSession.minResizeWidth,\n Math.round(resizeSession.startWidth + event.clientX - resizeSession.startX)\n )\n );\n\n onColumnResize?.(resizeSession.columnKey, nextWidth);\n\n setModifiedColumnWidths(previousWidths =>\n previousWidths[resizeSession.columnKey] === nextWidth\n ? previousWidths\n : {\n ...previousWidths,\n [resizeSession.columnKey]: nextWidth,\n }\n );\n };\n\n const stopResize = () => {\n setResizeSession(undefined);\n };\n\n window.addEventListener('pointermove', handlePointerMove);\n window.addEventListener('pointerup', stopResize);\n window.addEventListener('pointercancel', stopResize);\n\n return () => {\n document.body.style.cursor = previousBodyCursor;\n document.body.style.userSelect = previousBodyUserSelect;\n window.removeEventListener('pointermove', handlePointerMove);\n window.removeEventListener('pointerup', stopResize);\n window.removeEventListener('pointercancel', stopResize);\n };\n }, [onColumnResize, resizeSession]);\n\n const handleColumnResizeStart = (columnKey: string, event: ReactPointerEvent<HTMLDivElement>) => {\n if (!enabled || event.button !== 0) {\n return;\n }\n\n const column = columns.find(currentColumn => currentColumn.key === columnKey);\n const headerCellElement = event.currentTarget.closest<HTMLElement>('.table-head-cell');\n\n if (!column || !headerCellElement) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n const minResizeWidth = Math.max(column.minResizeWidth ?? DEFAULT_MIN_RESIZE_WIDTH_PX, MIN_COLUMN_WIDTH_PX);\n const maxResizeWidth = Math.max(column.maxResizeWidth ?? DEFAULT_MAX_RESIZE_WIDTH_PX, minResizeWidth);\n\n setResizeSession({\n columnKey,\n maxResizeWidth,\n minResizeWidth,\n startWidth: headerCellElement.getBoundingClientRect().width,\n startX: event.clientX,\n });\n };\n\n const handleColumnResizeReset = (columnKey: string) => {\n const column = columns.find(currentColumn => currentColumn.key === columnKey);\n const initialColumnWidth = initialColumnWidthsRef.current[columnKey];\n const resetWidth =\n initialColumnWidth ??\n (column?.minResizeWidth !== undefined ? Math.max(column.minResizeWidth, MIN_COLUMN_WIDTH_PX) : undefined);\n\n setResizeSession(undefined);\n onColumnResize?.(columnKey, resetWidth);\n setModifiedColumnWidths(previousWidths => {\n if (resetWidth === undefined) {\n if (!(columnKey in previousWidths)) {\n return previousWidths;\n }\n\n const nextWidths = { ...previousWidths };\n delete nextWidths[columnKey];\n\n return nextWidths;\n }\n\n return previousWidths[columnKey] === resetWidth\n ? previousWidths\n : {\n ...previousWidths,\n [columnKey]: resetWidth,\n };\n });\n };\n\n const resizedColumns = columns.map(column => {\n const resizedWidth = modifiedColumnWidths[column.key];\n\n return resizedWidth === undefined\n ? column\n : {\n ...column,\n width: resizedWidth,\n };\n });\n\n const resettableColumnKeys = useMemo(\n () =>\n new Set([\n ...columns.flatMap(column =>\n areColumnWidthsEqual(column.width, initialColumnWidthsRef.current[column.key]) ? [] : [column.key]\n ),\n ...Object.entries(modifiedColumnWidths).flatMap(([columnKey, width]) =>\n areColumnWidthsEqual(width, initialColumnWidthsRef.current[columnKey]) ? [] : [columnKey]\n ),\n ]),\n [columns, modifiedColumnWidths]\n );\n\n return {\n handleColumnResizeReset,\n handleColumnResizeStart,\n lastResizableColumnKey: columns.at(-1)?.key,\n resettableColumnKeys,\n resizedColumns,\n };\n};\n"],"names":["parseComparableWidth","width","match","areColumnWidthsEqual","currentWidth","initialWidth","currentComparableWidth","initialComparableWidth","useResizableColumns","props","columns","enabled","onColumnResize","modifiedColumnWidths","setModifiedColumnWidths","useState","resizeSession","setResizeSession","initialColumnWidthsRef","useRef","previousColumnWidthsRef","hasInitializedColumnWidthsRef","column","useLayoutEffect","currentColumnWidths","previousColumnWidths","currentColumnKeySet","previousColumnKeys","columnKey","previousWidths","nextWidths","previousColumnWidth","initialColumnWidth","useEffect","previousBodyCursor","previousBodyUserSelect","handlePointerMove","event","nextWidth","stopResize","handleColumnResizeStart","currentColumn","headerCellElement","minResizeWidth","DEFAULT_MIN_RESIZE_WIDTH_PX","MIN_COLUMN_WIDTH_PX","maxResizeWidth","DEFAULT_MAX_RESIZE_WIDTH_PX","handleColumnResizeReset","resetWidth","resizedColumns","resizedWidth","resettableColumnKeys","useMemo"],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ type UseTableBodyScrollBottomProps = {
2
+ enabled: boolean;
3
+ itemCount: number;
4
+ onScrollBottom?: () => void;
5
+ scrollBottomOffset: number;
6
+ scrollElement?: HTMLDivElement | null;
7
+ };
8
+ declare const useTableBodyScrollBottom: (props: UseTableBodyScrollBottomProps) => {
9
+ handleScrollBottom: (element?: HTMLDivElement | null) => void;
10
+ resetScrollBottomTrigger: () => void;
11
+ };
12
+ export default useTableBodyScrollBottom;