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

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 (412) hide show
  1. package/AnalyticsAnalysisOverlay.d.ts +1 -0
  2. package/AnalyticsAnalysisOverlay.js +5 -0
  3. package/AnalyticsAnalysisOverlay.js.map +1 -0
  4. package/Table.d.ts +2 -0
  5. package/Table.js +23 -0
  6. package/Table.js.map +1 -0
  7. package/TableCol.d.ts +2 -2
  8. package/TableCol.js +1 -1
  9. package/TableHead.d.ts +2 -2
  10. package/TableHead.js +1 -1
  11. package/TableSettingsDialog.d.ts +2 -2
  12. package/TableSettingsDialog.js +1 -1
  13. package/TableToolbar.js +3 -2
  14. package/analyticsAnalysisUtils.d.ts +1 -0
  15. package/analyticsAnalysisUtils.js +13 -0
  16. package/analyticsAnalysisUtils.js.map +1 -0
  17. package/components/analyticsAnalysisOverlay/AnalyticsAnalysisBanner.d.ts +18 -0
  18. package/components/analyticsAnalysisOverlay/AnalyticsAnalysisBanner.js +128 -0
  19. package/components/analyticsAnalysisOverlay/AnalyticsAnalysisBanner.js.map +1 -0
  20. package/components/analyticsAnalysisOverlay/AnalyticsAnalysisOverlay.d.ts +9 -0
  21. package/components/analyticsAnalysisOverlay/AnalyticsAnalysisOverlay.js +73 -0
  22. package/components/analyticsAnalysisOverlay/AnalyticsAnalysisOverlay.js.map +1 -0
  23. package/components/applicationHeader/AppMenuContent.js.map +1 -1
  24. package/components/applicationHeader/ApplicationActionBar.js +4 -4
  25. package/components/applicationHeader/ApplicationActionBar.js.map +1 -1
  26. package/components/applicationHeader/CollapsedNavItem.js +5 -14
  27. package/components/applicationHeader/CollapsedNavItem.js.map +1 -1
  28. package/components/applicationHeader/NavItems.js +10 -10
  29. package/components/applicationHeader/NavItems.js.map +1 -1
  30. package/components/assetTree/AssetTree.js +23 -23
  31. package/components/assetTree/AssetTree.js.map +1 -1
  32. package/components/assetTree/TreeNothingFound.js +2 -2
  33. package/components/assetTree/TreeNothingFound.js.map +1 -1
  34. package/components/assetTree/treeUtils.js.map +1 -1
  35. package/components/autosuggest/AutoSuggest.js +31 -31
  36. package/components/autosuggest/AutoSuggest.js.map +1 -1
  37. package/components/autosuggest/AutoSuggestAddons.js +9 -9
  38. package/components/autosuggest/AutoSuggestAddons.js.map +1 -1
  39. package/components/banner/BannerActions.js +2 -2
  40. package/components/banner/BannerActions.js.map +1 -1
  41. package/components/banner/BannerIcon.js +3 -3
  42. package/components/banner/BannerIcon.js.map +1 -1
  43. package/components/banner/BannerPage.js +4 -4
  44. package/components/banner/BannerPage.js.map +1 -1
  45. package/components/button/Button.d.ts +7 -0
  46. package/components/button/Button.js +73 -65
  47. package/components/button/Button.js.map +1 -1
  48. package/components/checkbox/Checkbox.js +18 -17
  49. package/components/checkbox/Checkbox.js.map +1 -1
  50. package/components/datepicker/DateRangePicker.js +0 -2
  51. package/components/datepicker/DateRangePicker.js.map +1 -1
  52. package/components/datepicker/DayPicker.js +16 -16
  53. package/components/datepicker/DayPicker.js.map +1 -1
  54. package/components/dialog/Dialog.js.map +1 -1
  55. package/components/dialog/DialogHeader.js +23 -20
  56. package/components/dialog/DialogHeader.js.map +1 -1
  57. package/components/dialog/MediaDialog.js +1 -1
  58. package/components/dialog/MediaDialog.js.map +1 -1
  59. package/components/editableContent/EditableContent.js +7 -7
  60. package/components/editableContent/EditableContent.js.map +1 -1
  61. package/components/expander/ExpanderList.d.ts +5 -0
  62. package/components/expander/ExpanderList.js +25 -16
  63. package/components/expander/ExpanderList.js.map +1 -1
  64. package/components/expander/ExpanderPanel.d.ts +5 -0
  65. package/components/expander/ExpanderPanel.js +29 -28
  66. package/components/expander/ExpanderPanel.js.map +1 -1
  67. package/components/fade/FadeExpander.js +1 -1
  68. package/components/fade/FadeExpander.js.map +1 -1
  69. package/components/filepicker/FilePicker.js.map +1 -1
  70. package/components/loadMore/LoadMoreButton.d.ts +5 -0
  71. package/components/loadMore/LoadMoreButton.js +33 -29
  72. package/components/loadMore/LoadMoreButton.js.map +1 -1
  73. package/components/map/components/features/ContextMenu.js +13 -13
  74. package/components/map/components/features/ContextMenu.js.map +1 -1
  75. package/components/map/components/features/basics/InfoBubble.js.map +1 -1
  76. package/components/map/components/features/settings/MapSettingsTile.js.map +1 -1
  77. package/components/map/components/features/settings/builtinSettings/MapTypeSettings.js +6 -6
  78. package/components/map/components/features/settings/builtinSettings/MapTypeSettings.js.map +1 -1
  79. package/components/map/utils/eventHandling.js +18 -18
  80. package/components/map/utils/eventHandling.js.map +1 -1
  81. package/components/map/utils/positions.d.ts +1 -1
  82. package/components/map/utils/positions.js +15 -12
  83. package/components/map/utils/positions.js.map +1 -1
  84. package/components/map/utils/rendering.d.ts +1 -1
  85. package/components/menuItems/MenuItems.js +6 -6
  86. package/components/menuItems/MenuItems.js.map +1 -1
  87. package/components/notification/NotificationsContainer.js.map +1 -1
  88. package/components/numberInput/NumberInput.js +57 -56
  89. package/components/numberInput/NumberInput.js.map +1 -1
  90. package/components/popover/Popover.js +4 -4
  91. package/components/popover/Popover.js.map +1 -1
  92. package/components/resizer/Resizer.js +6 -3
  93. package/components/resizer/Resizer.js.map +1 -1
  94. package/components/selects/BaseSelectDropdown.js +34 -32
  95. package/components/selects/BaseSelectDropdown.js.map +1 -1
  96. package/components/selects/MultiselectTogglePlaceholder.js.map +1 -1
  97. package/components/selects/MultiselectToggleSelection.js +11 -11
  98. package/components/selects/MultiselectToggleSelection.js.map +1 -1
  99. package/components/sidebars/Sidebar.js +12 -12
  100. package/components/sidebars/Sidebar.js.map +1 -1
  101. package/components/sidebars/SidebarCloseButton.js +2 -2
  102. package/components/sidebars/SidebarCloseButton.js.map +1 -1
  103. package/components/smoothScrollbars/SmoothScrollbars.d.ts +4 -3
  104. package/components/smoothScrollbars/SmoothScrollbars.js +11 -11
  105. package/components/smoothScrollbars/SmoothScrollbars.js.map +1 -1
  106. package/components/states/CustomState.js.map +1 -1
  107. package/components/svgImage/svgConverter.js.map +1 -1
  108. package/components/table/Table.d.ts +267 -0
  109. package/components/table/Table.js +233 -0
  110. package/components/table/Table.js.map +1 -0
  111. package/components/table/Table.types.d.ts +207 -0
  112. package/components/table/TableBody.d.ts +10 -0
  113. package/components/table/TableBody.js +5 -0
  114. package/components/table/TableBody.js.map +1 -0
  115. package/components/table/TableCard.d.ts +63 -0
  116. package/components/table/TableCard.js +150 -0
  117. package/components/table/TableCard.js.map +1 -0
  118. package/components/table/TableColumn.d.ts +47 -0
  119. package/components/table/TableColumn.js +5 -0
  120. package/components/table/TableColumn.js.map +1 -0
  121. package/components/table/TableExpandedContentRow.d.ts +22 -0
  122. package/components/table/TableExpandedContentRow.js +5 -0
  123. package/components/table/TableExpandedContentRow.js.map +1 -0
  124. package/components/table/TableExpandedRow.d.ts +17 -0
  125. package/components/table/TableExpandedRow.js +5 -0
  126. package/components/table/TableExpandedRow.js.map +1 -0
  127. package/components/table/TableExpanderButton.d.ts +25 -0
  128. package/components/table/TableExpanderButton.js +22 -0
  129. package/components/table/TableExpanderButton.js.map +1 -0
  130. package/components/table/TableFooter.d.ts +13 -0
  131. package/components/table/TableFooter.js +5 -0
  132. package/components/table/TableFooter.js.map +1 -0
  133. package/components/table/TableGroupFooterRow.d.ts +18 -0
  134. package/components/table/TableGroupFooterRow.js +5 -0
  135. package/components/table/TableGroupFooterRow.js.map +1 -0
  136. package/components/table/TableGroupRow.d.ts +24 -0
  137. package/components/table/TableGroupRow.js +5 -0
  138. package/components/table/TableGroupRow.js.map +1 -0
  139. package/components/table/TableHeader.d.ts +9 -0
  140. package/components/table/TableHeader.js +5 -0
  141. package/components/table/TableHeader.js.map +1 -0
  142. package/components/table/TableHeaderColumn.d.ts +70 -0
  143. package/components/table/TableHeaderColumn.js +5 -0
  144. package/components/table/TableHeaderColumn.js.map +1 -0
  145. package/components/table/TableHeaderRow.d.ts +9 -0
  146. package/components/table/TableHeaderRow.js +5 -0
  147. package/components/table/TableHeaderRow.js.map +1 -0
  148. package/components/table/TableRow.d.ts +19 -0
  149. package/components/table/TableRow.js +5 -0
  150. package/components/table/TableRow.js.map +1 -0
  151. package/components/table/TableSpacerRow.d.ts +12 -0
  152. package/components/table/TableSpacerRow.js +5 -0
  153. package/components/table/TableSpacerRow.js.map +1 -0
  154. package/components/table/TableToolbar.d.ts +23 -1
  155. package/components/table/TableToolbar.js +38 -4
  156. package/components/table/TableToolbar.js.map +1 -1
  157. package/components/table/TableViewToggles.d.ts +18 -0
  158. package/components/table/TableViewToggles.js +59 -87
  159. package/components/table/TableViewToggles.js.map +1 -1
  160. package/components/table/layout/columnSizing.d.ts +3 -0
  161. package/components/table/layout/columnSizing.js +23 -0
  162. package/components/table/layout/columnSizing.js.map +1 -0
  163. package/components/table/layout/useDraggableColumns.d.ts +14 -0
  164. package/components/table/layout/useDraggableColumns.js +47 -0
  165. package/components/table/layout/useDraggableColumns.js.map +1 -0
  166. package/components/table/layout/useHorizontalSectionSync.d.ts +11 -0
  167. package/components/table/layout/useHorizontalSectionSync.js +39 -0
  168. package/components/table/layout/useHorizontalSectionSync.js.map +1 -0
  169. package/components/table/layout/useMeasuredColumnMaxWidths.d.ts +12 -0
  170. package/components/table/layout/useMeasuredColumnMaxWidths.js +85 -0
  171. package/components/table/layout/useMeasuredColumnMaxWidths.js.map +1 -0
  172. package/components/table/layout/useResizableColumns.d.ts +14 -0
  173. package/components/table/layout/useResizableColumns.js +91 -0
  174. package/components/table/layout/useResizableColumns.js.map +1 -0
  175. package/components/table/layout/useTableLayout.d.ts +25 -0
  176. package/components/table/layout/useTableLayout.js +56 -0
  177. package/components/table/layout/useTableLayout.js.map +1 -0
  178. package/components/table/layout/useTableVirtualization.d.ts +22 -0
  179. package/components/table/layout/useTableVirtualization.js +125 -0
  180. package/components/table/layout/useTableVirtualization.js.map +1 -0
  181. package/components/table/model/buildTableViewModel.d.ts +28 -0
  182. package/components/table/model/buildTableViewModel.js +221 -0
  183. package/components/table/model/buildTableViewModel.js.map +1 -0
  184. package/components/table/model/resolveCellContent.d.ts +2 -0
  185. package/components/table/model/resolveCellContent.js +5 -0
  186. package/components/table/model/resolveCellContent.js.map +1 -0
  187. package/components/table/model/resolveRowMeta.d.ts +2 -0
  188. package/components/table/model/resolveRowMeta.js +15 -0
  189. package/components/table/model/resolveRowMeta.js.map +1 -0
  190. package/components/table/model/resolveTableClassConfig.d.ts +48 -0
  191. package/components/table/model/resolveTableClassConfig.js +64 -0
  192. package/components/table/model/resolveTableClassConfig.js.map +1 -0
  193. package/components/table/model/tableViewModel.types.d.ts +153 -0
  194. package/components/table/native/TableCol.js.map +1 -0
  195. package/components/table/{TableHead.js → native/TableHead.js} +2 -2
  196. package/components/table/native/TableHead.js.map +1 -0
  197. package/components/table/native/TableSettingsColumnButtons.js +59 -0
  198. package/components/table/native/TableSettingsColumnButtons.js.map +1 -0
  199. package/components/table/{TableSettingsColumnDetails.js → native/TableSettingsColumnDetails.js} +2 -2
  200. package/components/table/native/TableSettingsColumnDetails.js.map +1 -0
  201. package/components/table/{TableSettingsDialog.d.ts → native/TableSettingsDialog.d.ts} +2 -3
  202. package/components/table/native/TableSettingsDialog.js +216 -0
  203. package/components/table/native/TableSettingsDialog.js.map +1 -0
  204. package/components/table/{TableSettingsDialogFooter.js → native/TableSettingsDialogFooter.js} +2 -2
  205. package/components/table/native/TableSettingsDialogFooter.js.map +1 -0
  206. package/components/table/{TableSettingsListContainer.js → native/TableSettingsListContainer.js} +8 -8
  207. package/components/table/native/TableSettingsListContainer.js.map +1 -0
  208. package/components/table/native/TableSettingsListItem.js +100 -0
  209. package/components/table/native/TableSettingsListItem.js.map +1 -0
  210. package/components/table/parse/parseBody.d.ts +3 -0
  211. package/components/table/parse/parseBody.js +13 -0
  212. package/components/table/parse/parseBody.js.map +1 -0
  213. package/components/table/parse/parseColumns.d.ts +3 -0
  214. package/components/table/parse/parseColumns.js +81 -0
  215. package/components/table/parse/parseColumns.js.map +1 -0
  216. package/components/table/parse/parseFooter.d.ts +3 -0
  217. package/components/table/parse/parseFooter.js +39 -0
  218. package/components/table/parse/parseFooter.js.map +1 -0
  219. package/components/table/parse/parseHeaders.d.ts +4 -0
  220. package/components/table/parse/parseHeaders.js +89 -0
  221. package/components/table/parse/parseHeaders.js.map +1 -0
  222. package/components/table/parse/parseRows.d.ts +3 -0
  223. package/components/table/parse/parseRows.js +93 -0
  224. package/components/table/parse/parseRows.js.map +1 -0
  225. package/components/table/parse/tableChildGuards.d.ts +25 -0
  226. package/components/table/parse/tableChildGuards.js +29 -0
  227. package/components/table/parse/tableChildGuards.js.map +1 -0
  228. package/components/table/render/body/TableBodyRow.d.ts +16 -0
  229. package/components/table/render/body/TableBodyRow.js +84 -0
  230. package/components/table/render/body/TableBodyRow.js.map +1 -0
  231. package/components/table/render/body/TableBodySection.d.ts +20 -0
  232. package/components/table/render/body/TableBodySection.js +68 -0
  233. package/components/table/render/body/TableBodySection.js.map +1 -0
  234. package/components/table/render/body/TableDataRow.d.ts +15 -0
  235. package/components/table/render/body/TableDataRow.js +143 -0
  236. package/components/table/render/body/TableDataRow.js.map +1 -0
  237. package/components/table/render/body/TableEmptyRow.d.ts +7 -0
  238. package/components/table/render/body/TableEmptyRow.js +6 -0
  239. package/components/table/render/body/TableEmptyRow.js.map +1 -0
  240. package/components/table/render/body/TableExpandedRow.d.ts +8 -0
  241. package/components/table/render/body/TableExpandedRow.js +84 -0
  242. package/components/table/render/body/TableExpandedRow.js.map +1 -0
  243. package/components/table/render/body/TableGroupRow.d.ts +8 -0
  244. package/components/table/render/body/TableGroupRow.js +21 -0
  245. package/components/table/render/body/TableGroupRow.js.map +1 -0
  246. package/components/table/render/body/TableSpacerRow.d.ts +7 -0
  247. package/components/table/render/body/TableSpacerRow.js +15 -0
  248. package/components/table/render/body/TableSpacerRow.js.map +1 -0
  249. package/components/table/render/footer/TableFooterCell.d.ts +8 -0
  250. package/components/table/render/footer/TableFooterCell.js +31 -0
  251. package/components/table/render/footer/TableFooterCell.js.map +1 -0
  252. package/components/table/render/footer/TableFooterContent.d.ts +6 -0
  253. package/components/table/render/footer/TableFooterContent.js +6 -0
  254. package/components/table/render/footer/TableFooterContent.js.map +1 -0
  255. package/components/table/render/footer/TableFooterSection.d.ts +10 -0
  256. package/components/table/render/footer/TableFooterSection.js +28 -0
  257. package/components/table/render/footer/TableFooterSection.js.map +1 -0
  258. package/components/table/render/header/TableBatchDropdown.d.ts +9 -0
  259. package/components/table/render/header/TableBatchDropdown.js +28 -0
  260. package/components/table/render/header/TableBatchDropdown.js.map +1 -0
  261. package/components/table/render/header/TableColumnFilter.d.ts +66 -0
  262. package/components/table/render/header/TableColumnFilter.js +70 -0
  263. package/components/table/render/header/TableColumnFilter.js.map +1 -0
  264. package/components/table/render/header/TableDraggableHeaderCell.d.ts +3 -0
  265. package/components/table/render/header/TableDraggableHeaderCell.js +54 -0
  266. package/components/table/render/header/TableDraggableHeaderCell.js.map +1 -0
  267. package/components/table/render/header/TableHeader.types.d.ts +35 -0
  268. package/components/table/render/header/TableHeaderCellContent.d.ts +3 -0
  269. package/components/table/render/header/TableHeaderCellContent.js +57 -0
  270. package/components/table/render/header/TableHeaderCellContent.js.map +1 -0
  271. package/components/table/render/header/TableHeaderCellResizeHandle.d.ts +3 -0
  272. package/components/table/render/header/TableHeaderCellResizeHandle.js +22 -0
  273. package/components/table/render/header/TableHeaderCellResizeHandle.js.map +1 -0
  274. package/components/table/render/header/TableHeaderDragOverlay.d.ts +13 -0
  275. package/components/table/render/header/TableHeaderDragOverlay.js +35 -0
  276. package/components/table/render/header/TableHeaderDragOverlay.js.map +1 -0
  277. package/components/table/render/header/TableHeaderSection.d.ts +3 -0
  278. package/components/table/render/header/TableHeaderSection.js +104 -0
  279. package/components/table/render/header/TableHeaderSection.js.map +1 -0
  280. package/components/table/render/header/TableHeaderSelectionCell.d.ts +9 -0
  281. package/components/table/render/header/TableHeaderSelectionCell.js +41 -0
  282. package/components/table/render/header/TableHeaderSelectionCell.js.map +1 -0
  283. package/components/table/render/header/TableStaticHeaderCell.d.ts +3 -0
  284. package/components/table/render/header/TableStaticHeaderCell.js +36 -0
  285. package/components/table/render/header/TableStaticHeaderCell.js.map +1 -0
  286. package/components/table/render/header/resolveAriaSort.d.ts +2 -0
  287. package/components/table/render/header/resolveAriaSort.js +8 -0
  288. package/components/table/render/header/resolveAriaSort.js.map +1 -0
  289. package/components/table/render/header/resolveColumnCollisionDetection.d.ts +2 -0
  290. package/components/table/render/header/resolveColumnCollisionDetection.js +9 -0
  291. package/components/table/render/header/resolveColumnCollisionDetection.js.map +1 -0
  292. package/components/table/render/header/resolveHeaderCellClassName.d.ts +10 -0
  293. package/components/table/render/header/resolveHeaderCellClassName.js +22 -0
  294. package/components/table/render/header/resolveHeaderCellClassName.js.map +1 -0
  295. package/components/table/render/header/resolveHeaderCellStyle.d.ts +829 -0
  296. package/components/table/render/header/resolveHeaderCellStyle.js +9 -0
  297. package/components/table/render/header/resolveHeaderCellStyle.js.map +1 -0
  298. package/components/table/selection/useTableSelection.d.ts +82 -0
  299. package/components/table/selection/useTableSelection.js +35 -0
  300. package/components/table/selection/useTableSelection.js.map +1 -0
  301. package/components/table/settings/TableColumnsDropdown.d.ts +90 -0
  302. package/components/table/settings/TableColumnsDropdown.js +137 -0
  303. package/components/table/settings/TableColumnsDropdown.js.map +1 -0
  304. package/components/table/settings/TableColumnsDropdownItem.d.ts +8 -0
  305. package/components/table/settings/TableColumnsDropdownItem.js +66 -0
  306. package/components/table/settings/TableColumnsDropdownItem.js.map +1 -0
  307. package/components/table/shared/getAlignClassName.d.ts +3 -0
  308. package/components/table/shared/getAlignClassName.js +6 -0
  309. package/components/table/shared/getAlignClassName.js.map +1 -0
  310. package/components/table/shared/getInteractiveRowProps.d.ts +14 -0
  311. package/components/table/shared/getInteractiveRowProps.js +15 -0
  312. package/components/table/shared/getInteractiveRowProps.js.map +1 -0
  313. package/components/table/shared/resolveTableAria.d.ts +2 -0
  314. package/components/table/shared/resolveTableAria.js +6 -0
  315. package/components/table/shared/resolveTableAria.js.map +1 -0
  316. package/components/table/tableSizing.constants.d.ts +4 -0
  317. package/components/table/tableSizing.constants.js +8 -0
  318. package/components/table/tableSizing.constants.js.map +1 -0
  319. package/components/teaser/TeaserContainer.js +3 -3
  320. package/components/teaser/TeaserContainer.js.map +1 -1
  321. package/components/virtualList/VirtualList.js +16 -13
  322. package/components/virtualList/VirtualList.js.map +1 -1
  323. package/googleAnalyticsUtils.d.ts +1 -0
  324. package/googleAnalyticsUtils.js +9 -0
  325. package/googleAnalyticsUtils.js.map +1 -0
  326. package/hooks/useCookies.js +17 -17
  327. package/hooks/useCookies.js.map +1 -1
  328. package/hooks/useDraggableElement.d.ts +35 -0
  329. package/hooks/useDraggableElement.js +49 -0
  330. package/hooks/useDraggableElement.js.map +1 -0
  331. package/hooks/useElapsedTime.js +4 -4
  332. package/hooks/useElapsedTime.js.map +1 -1
  333. package/hooks/useLocationSuggestions.js +13 -10
  334. package/hooks/useLocationSuggestions.js.map +1 -1
  335. package/hooks/useMergeRefs.js +12 -12
  336. package/hooks/useMergeRefs.js.map +1 -1
  337. package/hooks/usePrevious.d.ts +1 -1
  338. package/hooks/usePrevious.js.map +1 -1
  339. package/hooks/useResizeObserver.js +25 -10
  340. package/hooks/useResizeObserver.js.map +1 -1
  341. package/hooks/useRioCookieConsent.js +7 -4
  342. package/hooks/useRioCookieConsent.js.map +1 -1
  343. package/hooks/useSorting.js +10 -10
  344. package/hooks/useSorting.js.map +1 -1
  345. package/hooks/useStorage.js +12 -12
  346. package/hooks/useStorage.js.map +1 -1
  347. package/hooks/useSum.js +10 -7
  348. package/hooks/useSum.js.map +1 -1
  349. package/hooks/useTableSelection.js.map +1 -1
  350. package/hooks/useTimeout.js +6 -3
  351. package/hooks/useTimeout.js.map +1 -1
  352. package/package.json +3 -3
  353. package/routeUtils.js +12 -10
  354. package/utils/analytics/analyticsAnalysisUtils.d.ts +27 -0
  355. package/utils/analytics/analyticsAnalysisUtils.js +161 -0
  356. package/utils/analytics/analyticsAnalysisUtils.js.map +1 -0
  357. package/utils/analytics/autoTracking.d.ts +14 -0
  358. package/utils/analytics/autoTracking.js +19 -0
  359. package/utils/analytics/autoTracking.js.map +1 -0
  360. package/utils/analytics/createAnalyticsOverlayTooltip.d.ts +36 -0
  361. package/utils/analytics/createAnalyticsOverlayTooltip.js +203 -0
  362. package/utils/analytics/createAnalyticsOverlayTooltip.js.map +1 -0
  363. package/utils/analytics/googleAnalyticsUtils.d.ts +37 -0
  364. package/utils/analytics/googleAnalyticsUtils.js +37 -0
  365. package/utils/analytics/googleAnalyticsUtils.js.map +1 -0
  366. package/utils/analytics/logAnalyticsOverlayUnmatchedEntries.d.ts +8 -0
  367. package/utils/analytics/logAnalyticsOverlayUnmatchedEntries.js +61 -0
  368. package/utils/analytics/logAnalyticsOverlayUnmatchedEntries.js.map +1 -0
  369. package/utils/analytics/useAnalyticsOverlayDom.d.ts +11 -0
  370. package/utils/analytics/useAnalyticsOverlayDom.js +120 -0
  371. package/utils/analytics/useAnalyticsOverlayDom.js.map +1 -0
  372. package/utils/arrayMove.js +11 -0
  373. package/utils/arrayMove.js.map +1 -0
  374. package/utils/cssuseragent.js +2 -2
  375. package/utils/cssuseragent.js.map +1 -1
  376. package/utils/deviceUtils.js.map +1 -1
  377. package/utils/formatUtils.js.map +1 -1
  378. package/utils/hasUtilityClass.js +3 -3
  379. package/utils/hasUtilityClass.js.map +1 -1
  380. package/utils/hidePiiData.js.map +1 -1
  381. package/utils/init/checkForReleaseVersion.js +4 -4
  382. package/utils/init/checkForReleaseVersion.js.map +1 -1
  383. package/utils/init/styledLogs.js.map +1 -1
  384. package/utils/mergeRefs.js +3 -3
  385. package/utils/mergeRefs.js.map +1 -1
  386. package/utils/routeUtils.d.ts +32 -1
  387. package/utils/routeUtils.js +85 -67
  388. package/utils/routeUtils.js.map +1 -1
  389. package/utils/storageUtils.js +9 -9
  390. package/utils/storageUtils.js.map +1 -1
  391. package/version.d.ts +1 -1
  392. package/version.js +2 -2
  393. package/version.js.map +1 -1
  394. package/components/table/TableCol.js.map +0 -1
  395. package/components/table/TableHead.js.map +0 -1
  396. package/components/table/TableSettingsColumnButtons.js +0 -45
  397. package/components/table/TableSettingsColumnButtons.js.map +0 -1
  398. package/components/table/TableSettingsColumnDetails.js.map +0 -1
  399. package/components/table/TableSettingsDialog.js +0 -208
  400. package/components/table/TableSettingsDialog.js.map +0 -1
  401. package/components/table/TableSettingsDialogFooter.js.map +0 -1
  402. package/components/table/TableSettingsListContainer.js.map +0 -1
  403. package/components/table/TableSettingsListItem.js +0 -96
  404. package/components/table/TableSettingsListItem.js.map +0 -1
  405. /package/components/table/{TableCol.d.ts → native/TableCol.d.ts} +0 -0
  406. /package/components/table/{TableCol.js → native/TableCol.js} +0 -0
  407. /package/components/table/{TableHead.d.ts → native/TableHead.d.ts} +0 -0
  408. /package/components/table/{TableSettingsColumnButtons.d.ts → native/TableSettingsColumnButtons.d.ts} +0 -0
  409. /package/components/table/{TableSettingsColumnDetails.d.ts → native/TableSettingsColumnDetails.d.ts} +0 -0
  410. /package/components/table/{TableSettingsDialogFooter.d.ts → native/TableSettingsDialogFooter.d.ts} +0 -0
  411. /package/components/table/{TableSettingsListContainer.d.ts → native/TableSettingsListContainer.d.ts} +0 -0
  412. /package/components/table/{TableSettingsListItem.d.ts → native/TableSettingsListItem.d.ts} +0 -0
@@ -19,7 +19,10 @@ const J = (S) => {
19
19
  visibleRange: { start: 0, end: 10 },
20
20
  scrollTop: 0,
21
21
  viewportHeight: 0
22
- }), b = H(null), R = H(null), C = H(-1), u = m(() => d?.current || b.current, [d]), n = m(
22
+ }), b = H(null), R = H(null), C = H(-1), g = m(
23
+ () => d?.current || b.current,
24
+ [d]
25
+ ), n = m(
23
26
  (e) => !Number.isNaN(e) && e > 0 ? e : l,
24
27
  [l]
25
28
  ), M = m(
@@ -36,23 +39,23 @@ const J = (S) => {
36
39
  const e = Object.values(r.itemHeights).reduce((a, o) => a + n(o), 0), t = Object.keys(r.itemHeights).length, s = t > 0 ? n(e / t) : l, i = c.length - t;
37
40
  return n(e + i * s);
38
41
  }, [c.length, r.itemHeights, n, l]), N = m(() => {
39
- const e = u();
42
+ const e = g();
40
43
  if (!e)
41
44
  return r.visibleRange;
42
45
  const t = e.clientHeight, s = e.scrollTop;
43
46
  let i = 0, a = 0;
44
47
  for (; i < c.length; ) {
45
- const g = n(r.itemHeights[i] ?? l);
46
- if (a + g > s - h * g)
48
+ const u = n(r.itemHeights[i] ?? l);
49
+ if (a + u > s - h * u)
47
50
  break;
48
- a += g, i++;
51
+ a += u, i++;
49
52
  }
50
53
  let o = i;
51
54
  for (; o < c.length; ) {
52
- const g = n(r.itemHeights[o] ?? l);
53
- if (a > s + t + h * g)
55
+ const u = n(r.itemHeights[o] ?? l);
56
+ if (a > s + t + h * u)
54
57
  break;
55
- a += g, o++;
58
+ a += u, o++;
56
59
  }
57
60
  return {
58
61
  start: Math.max(0, i - h),
@@ -65,7 +68,7 @@ const J = (S) => {
65
68
  r.visibleRange,
66
69
  n,
67
70
  l,
68
- u
71
+ g
69
72
  ]), W = m(
70
73
  (e, t) => {
71
74
  const s = t.getBoundingClientRect(), i = window.getComputedStyle(t), a = n(
@@ -80,7 +83,7 @@ const J = (S) => {
80
83
  );
81
84
  x(R, W, [r.visibleRange]);
82
85
  const f = m(() => {
83
- const e = u();
86
+ const e = g();
84
87
  if (!e)
85
88
  return;
86
89
  const t = N();
@@ -90,12 +93,12 @@ const J = (S) => {
90
93
  scrollTop: e.scrollTop,
91
94
  viewportHeight: e.clientHeight
92
95
  }));
93
- }, [N, u]);
96
+ }, [N, g]);
94
97
  B(() => {
95
- const e = u();
98
+ const e = g();
96
99
  if (e)
97
100
  return e.addEventListener("scroll", f, { passive: !0 }), () => e.removeEventListener("scroll", f);
98
- }, [f, u]), $(f);
101
+ }, [f, g]), $(f);
99
102
  const j = (e, t) => {
100
103
  const s = y(e, t), i = M(t);
101
104
  return /* @__PURE__ */ p(
@@ -1 +1 @@
1
- {"version":3,"file":"VirtualList.js","sources":["../../../src/components/virtualList/VirtualList.tsx"],"sourcesContent":["import type React from 'react';\nimport { useRef, useState, useEffect, useCallback } from 'react';\n\nimport VirtualListItemWrapper from './VirtualListItemWrapper';\nimport useWindowResize from '../../hooks/useWindowResize';\nimport useVirtualListResizeObserver from './useVirtualListResizeObserver';\n\n// Known issues:\n// ------------\n// - when dragging the scrollbar, the mouse pointer will get an offset the longer the list is.\n// Having a short list of like 100 items, the offset is less noticeable\n\nexport type VirtualListProps<T> = {\n /**\n * The array of items to be rendered in the list.\n */\n items: T[];\n\n /**\n * A function that renders an item given its data and index.\n *\n * @param item\n * @param index\n * @returns\n */\n renderItem: (item: T, index: number) => React.ReactElement;\n\n /**\n * The number of items to render outside the visible area for smoother scrolling.\n *\n * @default 3\n */\n overscanCount?: number;\n\n /**\n * The default height for items if their height cannot be determined.\n *\n * @default 50\n */\n defaultHeight?: number;\n\n /**\n * Optional ref to an external scroll container.\n * Use this when VirtualList is inside a scrollable container.\n */\n scrollContainerRef?: React.RefObject<HTMLElement>;\n\n /**\n * Additional classNames for the container of the list items.\n */\n containerClassName?: string;\n\n /**\n * Additional classNames for each individual list item wrapper.\n * This wrapper is required for proper positioning each item in the list using an absolute top value.\n */\n listItemWrapperClassName?: string;\n\n /**\n * Additional classNames for the outer list container\n */\n className?: string;\n};\n\nexport type ItemHeight = number;\nexport type ItemIndex = number;\n\nexport type VisibleRange = {\n start: number;\n end: number;\n};\n\nexport type VirtualListState = {\n itemHeights: Record<ItemIndex, ItemHeight>;\n visibleRange: VisibleRange;\n scrollTop: number;\n viewportHeight: number;\n};\n\nexport const VirtualList = <T,>(props: VirtualListProps<T>) => {\n const {\n items,\n renderItem,\n overscanCount = 3,\n defaultHeight = 50,\n scrollContainerRef,\n containerClassName = '',\n listItemWrapperClassName = '',\n className = '',\n ...remainingProps\n } = props;\n\n const [state, setState] = useState<VirtualListState>({\n itemHeights: {},\n visibleRange: { start: 0, end: 10 },\n scrollTop: 0,\n viewportHeight: 0,\n });\n\n const containerRef = useRef<HTMLDivElement>(null);\n const itemsRef = useRef<HTMLDivElement>(null);\n const lastMeasuredIndexRef = useRef(-1);\n\n // Get the actual scroll container - either external or internal\n const getScrollContainer = useCallback(() => {\n return scrollContainerRef?.current || containerRef.current;\n }, [scrollContainerRef]);\n\n // Ensure we never return NaN or invalid heights\n const getSafeHeight = useCallback(\n (height: number): number => {\n return !Number.isNaN(height) && height > 0 ? height : defaultHeight;\n },\n [defaultHeight]\n );\n\n const getItemPosition = useCallback(\n (index: number) => {\n let position = 0;\n for (let i = 0; i < index; i++) {\n const height = state.itemHeights[i] ?? defaultHeight;\n position += getSafeHeight(height);\n }\n return position;\n },\n [state.itemHeights, getSafeHeight, defaultHeight]\n );\n\n const getTotalHeight = useCallback(() => {\n const measuredHeight = Object.values(state.itemHeights).reduce((sum, height) => sum + getSafeHeight(height), 0);\n const measuredCount = Object.keys(state.itemHeights).length;\n const averageHeight = measuredCount > 0 ? getSafeHeight(measuredHeight / measuredCount) : defaultHeight;\n const unmeasuredCount = items.length - measuredCount;\n return getSafeHeight(measuredHeight + unmeasuredCount * averageHeight);\n }, [items.length, state.itemHeights, getSafeHeight, defaultHeight]);\n\n const calculateVisibleRange = useCallback(() => {\n const scrollContainer = getScrollContainer();\n if (!scrollContainer) {\n return state.visibleRange;\n }\n\n const viewportHeight = scrollContainer.clientHeight;\n const scrollTop = scrollContainer.scrollTop;\n\n let start = 0;\n let currentPosition = 0;\n\n while (start < items.length) {\n const height = getSafeHeight(state.itemHeights[start] ?? defaultHeight);\n if (currentPosition + height > scrollTop - overscanCount * height) {\n break;\n }\n currentPosition += height;\n start++;\n }\n\n let end = start;\n while (end < items.length) {\n const height = getSafeHeight(state.itemHeights[end] ?? defaultHeight);\n if (currentPosition > scrollTop + viewportHeight + overscanCount * height) {\n break;\n }\n currentPosition += height;\n end++;\n }\n\n return {\n start: Math.max(0, start - overscanCount),\n end: Math.min(items.length, end + overscanCount),\n };\n }, [\n items.length,\n overscanCount,\n state.itemHeights,\n state.visibleRange,\n getSafeHeight,\n defaultHeight,\n getScrollContainer,\n ]);\n\n const measureItem = useCallback(\n (index: number, element: HTMLElement) => {\n const rect = element.getBoundingClientRect();\n const computedStyle = window.getComputedStyle(element);\n\n // Calculate total height with safety checks\n const totalSafeHeight = getSafeHeight(\n rect.height +\n Number.parseFloat(computedStyle.marginTop || '0') +\n Number.parseFloat(computedStyle.marginBottom || '0')\n );\n\n setState(prev => {\n if (prev.itemHeights[index] === totalSafeHeight) {\n return prev;\n }\n return {\n ...prev,\n itemHeights: { ...prev.itemHeights, [index]: totalSafeHeight },\n };\n });\n lastMeasuredIndexRef.current = Math.max(lastMeasuredIndexRef.current, index);\n },\n [getSafeHeight]\n );\n\n useVirtualListResizeObserver(itemsRef, measureItem, [state.visibleRange]);\n\n const handleScroll = useCallback(() => {\n const scrollContainer = getScrollContainer();\n if (!scrollContainer) {\n return;\n }\n\n const newRange = calculateVisibleRange();\n setState(prev => ({\n ...prev,\n visibleRange: newRange,\n scrollTop: scrollContainer.scrollTop,\n viewportHeight: scrollContainer.clientHeight,\n }));\n }, [calculateVisibleRange, getScrollContainer]);\n\n // Register container scroll event\n useEffect(() => {\n const scrollContainer = getScrollContainer();\n if (!scrollContainer) {\n return;\n }\n\n scrollContainer.addEventListener('scroll', handleScroll, { passive: true });\n return () => scrollContainer.removeEventListener('scroll', handleScroll);\n }, [handleScroll, getScrollContainer]);\n\n // On window resize, update scroll position\n useWindowResize(handleScroll);\n\n const renderItemWithPosition = (item: T, index: number) => {\n const renderedItem = renderItem(item, index);\n const translateY = getItemPosition(index);\n\n return (\n <VirtualListItemWrapper\n key={index}\n data-index={index}\n translateY={translateY}\n className={listItemWrapperClassName}\n >\n {renderedItem}\n </VirtualListItemWrapper>\n );\n };\n\n const { start, end } = state.visibleRange;\n\n const totalHeight = getTotalHeight();\n\n // Adjust the root element style based on whether we're using an external scroll container\n const rootStyle: React.CSSProperties = {\n height: scrollContainerRef ? totalHeight : '100%',\n position: 'relative',\n overflow: scrollContainerRef ? 'visible' : 'auto',\n };\n\n return (\n <div\n {...remainingProps}\n ref={containerRef}\n className={`VirtualList overflow-y-auto ${className}`}\n style={rootStyle}\n >\n <div\n className='position-relative'\n style={{\n height: scrollContainerRef ? 'auto' : totalHeight,\n }}\n >\n <div ref={itemsRef} className={`VirtualListItemContainer ${containerClassName}`}>\n {items.slice(start, end).map((item, idx) => renderItemWithPosition(item, start + idx))}\n </div>\n </div>\n </div>\n );\n};\n\nexport default VirtualList;\n"],"names":["VirtualList","props","items","renderItem","overscanCount","defaultHeight","scrollContainerRef","containerClassName","listItemWrapperClassName","className","remainingProps","state","setState","useState","containerRef","useRef","itemsRef","lastMeasuredIndexRef","getScrollContainer","useCallback","getSafeHeight","height","getItemPosition","index","position","i","getTotalHeight","measuredHeight","sum","measuredCount","averageHeight","unmeasuredCount","calculateVisibleRange","scrollContainer","viewportHeight","scrollTop","start","currentPosition","end","measureItem","element","rect","computedStyle","totalSafeHeight","prev","useVirtualListResizeObserver","handleScroll","newRange","useEffect","useWindowResize","renderItemWithPosition","item","renderedItem","translateY","jsx","VirtualListItemWrapper","totalHeight","rootStyle","idx"],"mappings":"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"}
1
+ {"version":3,"file":"VirtualList.js","sources":["../../../src/components/virtualList/VirtualList.tsx"],"sourcesContent":["import type React from 'react';\nimport { useRef, useState, useEffect, useCallback } from 'react';\n\nimport VirtualListItemWrapper from './VirtualListItemWrapper';\nimport useWindowResize from '../../hooks/useWindowResize';\nimport useVirtualListResizeObserver from './useVirtualListResizeObserver';\n\n// Known issues:\n// ------------\n// - when dragging the scrollbar, the mouse pointer will get an offset the longer the list is.\n// Having a short list of like 100 items, the offset is less noticeable\n\nexport type VirtualListProps<T> = {\n /**\n * The array of items to be rendered in the list.\n */\n items: T[];\n\n /**\n * A function that renders an item given its data and index.\n *\n * @param item\n * @param index\n * @returns\n */\n renderItem: (item: T, index: number) => React.ReactElement;\n\n /**\n * The number of items to render outside the visible area for smoother scrolling.\n *\n * @default 3\n */\n overscanCount?: number;\n\n /**\n * The default height for items if their height cannot be determined.\n *\n * @default 50\n */\n defaultHeight?: number;\n\n /**\n * Optional ref to an external scroll container.\n * Use this when VirtualList is inside a scrollable container.\n */\n scrollContainerRef?: React.RefObject<HTMLElement>;\n\n /**\n * Additional classNames for the container of the list items.\n */\n containerClassName?: string;\n\n /**\n * Additional classNames for each individual list item wrapper.\n * This wrapper is required for proper positioning each item in the list using an absolute top value.\n */\n listItemWrapperClassName?: string;\n\n /**\n * Additional classNames for the outer list container\n */\n className?: string;\n};\n\nexport type ItemHeight = number;\nexport type ItemIndex = number;\n\nexport type VisibleRange = {\n start: number;\n end: number;\n};\n\nexport type VirtualListState = {\n itemHeights: Record<ItemIndex, ItemHeight>;\n visibleRange: VisibleRange;\n scrollTop: number;\n viewportHeight: number;\n};\n\nexport const VirtualList = <T,>(props: VirtualListProps<T>) => {\n const {\n items,\n renderItem,\n overscanCount = 3,\n defaultHeight = 50,\n scrollContainerRef,\n containerClassName = '',\n listItemWrapperClassName = '',\n className = '',\n ...remainingProps\n } = props;\n\n const [state, setState] = useState<VirtualListState>({\n itemHeights: {},\n visibleRange: { start: 0, end: 10 },\n scrollTop: 0,\n viewportHeight: 0,\n });\n\n const containerRef = useRef<HTMLDivElement>(null);\n const itemsRef = useRef<HTMLDivElement>(null);\n const lastMeasuredIndexRef = useRef(-1);\n\n // Get the actual scroll container - either external or internal\n const getScrollContainer = useCallback(\n () => scrollContainerRef?.current || containerRef.current,\n [scrollContainerRef]\n );\n\n // Ensure we never return NaN or invalid heights\n const getSafeHeight = useCallback(\n (height: number): number => (!Number.isNaN(height) && height > 0 ? height : defaultHeight),\n [defaultHeight]\n );\n\n const getItemPosition = useCallback(\n (index: number) => {\n let position = 0;\n for (let i = 0; i < index; i++) {\n const height = state.itemHeights[i] ?? defaultHeight;\n position += getSafeHeight(height);\n }\n return position;\n },\n [state.itemHeights, getSafeHeight, defaultHeight]\n );\n\n const getTotalHeight = useCallback(() => {\n const measuredHeight = Object.values(state.itemHeights).reduce((sum, height) => sum + getSafeHeight(height), 0);\n const measuredCount = Object.keys(state.itemHeights).length;\n const averageHeight = measuredCount > 0 ? getSafeHeight(measuredHeight / measuredCount) : defaultHeight;\n const unmeasuredCount = items.length - measuredCount;\n return getSafeHeight(measuredHeight + unmeasuredCount * averageHeight);\n }, [items.length, state.itemHeights, getSafeHeight, defaultHeight]);\n\n const calculateVisibleRange = useCallback(() => {\n const scrollContainer = getScrollContainer();\n if (!scrollContainer) {\n return state.visibleRange;\n }\n\n const viewportHeight = scrollContainer.clientHeight;\n const scrollTop = scrollContainer.scrollTop;\n\n let start = 0;\n let currentPosition = 0;\n\n while (start < items.length) {\n const height = getSafeHeight(state.itemHeights[start] ?? defaultHeight);\n if (currentPosition + height > scrollTop - overscanCount * height) {\n break;\n }\n currentPosition += height;\n start++;\n }\n\n let end = start;\n while (end < items.length) {\n const height = getSafeHeight(state.itemHeights[end] ?? defaultHeight);\n if (currentPosition > scrollTop + viewportHeight + overscanCount * height) {\n break;\n }\n currentPosition += height;\n end++;\n }\n\n return {\n start: Math.max(0, start - overscanCount),\n end: Math.min(items.length, end + overscanCount),\n };\n }, [\n items.length,\n overscanCount,\n state.itemHeights,\n state.visibleRange,\n getSafeHeight,\n defaultHeight,\n getScrollContainer,\n ]);\n\n const measureItem = useCallback(\n (index: number, element: HTMLElement) => {\n const rect = element.getBoundingClientRect();\n const computedStyle = window.getComputedStyle(element);\n\n // Calculate total height with safety checks\n const totalSafeHeight = getSafeHeight(\n rect.height +\n Number.parseFloat(computedStyle.marginTop || '0') +\n Number.parseFloat(computedStyle.marginBottom || '0')\n );\n\n setState(prev => {\n if (prev.itemHeights[index] === totalSafeHeight) {\n return prev;\n }\n return {\n ...prev,\n itemHeights: { ...prev.itemHeights, [index]: totalSafeHeight },\n };\n });\n lastMeasuredIndexRef.current = Math.max(lastMeasuredIndexRef.current, index);\n },\n [getSafeHeight]\n );\n\n useVirtualListResizeObserver(itemsRef, measureItem, [state.visibleRange]);\n\n const handleScroll = useCallback(() => {\n const scrollContainer = getScrollContainer();\n if (!scrollContainer) {\n return;\n }\n\n const newRange = calculateVisibleRange();\n setState(prev => ({\n ...prev,\n visibleRange: newRange,\n scrollTop: scrollContainer.scrollTop,\n viewportHeight: scrollContainer.clientHeight,\n }));\n }, [calculateVisibleRange, getScrollContainer]);\n\n // Register container scroll event\n useEffect(() => {\n const scrollContainer = getScrollContainer();\n if (!scrollContainer) {\n return;\n }\n\n scrollContainer.addEventListener('scroll', handleScroll, { passive: true });\n return () => scrollContainer.removeEventListener('scroll', handleScroll);\n }, [handleScroll, getScrollContainer]);\n\n // On window resize, update scroll position\n useWindowResize(handleScroll);\n\n const renderItemWithPosition = (item: T, index: number) => {\n const renderedItem = renderItem(item, index);\n const translateY = getItemPosition(index);\n\n return (\n <VirtualListItemWrapper\n key={index}\n data-index={index}\n translateY={translateY}\n className={listItemWrapperClassName}\n >\n {renderedItem}\n </VirtualListItemWrapper>\n );\n };\n\n const { start, end } = state.visibleRange;\n\n const totalHeight = getTotalHeight();\n\n // Adjust the root element style based on whether we're using an external scroll container\n const rootStyle: React.CSSProperties = {\n height: scrollContainerRef ? totalHeight : '100%',\n position: 'relative',\n overflow: scrollContainerRef ? 'visible' : 'auto',\n };\n\n return (\n <div\n {...remainingProps}\n ref={containerRef}\n className={`VirtualList overflow-y-auto ${className}`}\n style={rootStyle}\n >\n <div\n className='position-relative'\n style={{\n height: scrollContainerRef ? 'auto' : totalHeight,\n }}\n >\n <div ref={itemsRef} className={`VirtualListItemContainer ${containerClassName}`}>\n {items.slice(start, end).map((item, idx) => renderItemWithPosition(item, start + idx))}\n </div>\n </div>\n </div>\n );\n};\n\nexport default VirtualList;\n"],"names":["VirtualList","props","items","renderItem","overscanCount","defaultHeight","scrollContainerRef","containerClassName","listItemWrapperClassName","className","remainingProps","state","setState","useState","containerRef","useRef","itemsRef","lastMeasuredIndexRef","getScrollContainer","useCallback","getSafeHeight","height","getItemPosition","index","position","i","getTotalHeight","measuredHeight","sum","measuredCount","averageHeight","unmeasuredCount","calculateVisibleRange","scrollContainer","viewportHeight","scrollTop","start","currentPosition","end","measureItem","element","rect","computedStyle","totalSafeHeight","prev","useVirtualListResizeObserver","handleScroll","newRange","useEffect","useWindowResize","renderItemWithPosition","item","renderedItem","translateY","jsx","VirtualListItemWrapper","totalHeight","rootStyle","idx"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export * from './utils/analytics/googleAnalyticsUtils';
@@ -0,0 +1,9 @@
1
+ import { TRACKING_ACTIONS as A, TRACKING_LABELS as r, executeAndTrack as T, gaPush as a, getTrackingAttributes as c } from "./utils/analytics/googleAnalyticsUtils.js";
2
+ export {
3
+ A as TRACKING_ACTIONS,
4
+ r as TRACKING_LABELS,
5
+ T as executeAndTrack,
6
+ a as gaPush,
7
+ c as getTrackingAttributes
8
+ };
9
+ //# sourceMappingURL=googleAnalyticsUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"googleAnalyticsUtils.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -1,31 +1,31 @@
1
- import { useCallback as a } from "react";
2
- const u = () => typeof document > "u" ? {} : document.cookie.split(";").map((n) => n.trim()).filter(Boolean).reduce(
3
- (n, o) => {
4
- const s = o.indexOf("="), i = s >= 0 ? o.slice(0, s) : o, t = s >= 0 ? o.slice(s + 1) : "";
5
- return n[decodeURIComponent(i)] = decodeURIComponent(t), n;
1
+ import { useCallback as i } from "react";
2
+ const m = () => typeof document > "u" ? {} : document.cookie.split(";").map((t) => t.trim()).filter(Boolean).reduce(
3
+ (t, n) => {
4
+ const s = n.indexOf("="), r = s >= 0 ? n.slice(0, s) : n, o = s >= 0 ? n.slice(s + 1) : "";
5
+ return t[decodeURIComponent(r)] = decodeURIComponent(o), t;
6
6
  },
7
7
  {}
8
8
  ), f = () => {
9
- const n = a((t, c, e = {}) => {
9
+ const t = i((o, c, e = {}) => {
10
10
  if (typeof document > "u")
11
11
  return;
12
- const r = [`${encodeURIComponent(t)}=${encodeURIComponent(c)}`, `path=${e.path ?? "/"}`];
13
- if (e.domain && r.push(`domain=${e.domain}`), e.expires) {
14
- const m = e.expires instanceof Date ? e.expires.toUTCString() : e.expires;
15
- r.push(`expires=${m}`);
12
+ const a = [`${encodeURIComponent(o)}=${encodeURIComponent(c)}`, `path=${e.path ?? "/"}`];
13
+ if (e.domain && a.push(`domain=${e.domain}`), e.expires) {
14
+ const u = e.expires instanceof Date ? e.expires.toUTCString() : e.expires;
15
+ a.push(`expires=${u}`);
16
16
  }
17
- typeof e.maxAge == "number" && r.push(`max-age=${e.maxAge}`), e.sameSite && r.push(`samesite=${e.sameSite}`), e.secure && r.push("secure"), document.cookie = r.join("; ");
18
- }, []), o = a(
19
- (t, c = {}) => {
20
- n(t, "", {
17
+ typeof e.maxAge == "number" && a.push(`max-age=${e.maxAge}`), e.sameSite && a.push(`samesite=${e.sameSite}`), e.secure && a.push("secure"), document.cookie = a.join("; ");
18
+ }, []), n = i(
19
+ (o, c = {}) => {
20
+ t(o, "", {
21
21
  ...c,
22
22
  expires: /* @__PURE__ */ new Date(0),
23
23
  maxAge: 0
24
24
  });
25
25
  },
26
- [n]
27
- ), s = a((t) => Object.hasOwn(u(), t), []), i = a((t) => u()[t], []);
28
- return { setCookie: n, deleteCookie: o, hasCookie: s, getCookie: i };
26
+ [t]
27
+ ), s = i((o) => Object.hasOwn(m(), o), []), r = i((o) => m()[o], []);
28
+ return { setCookie: t, deleteCookie: n, hasCookie: s, getCookie: r };
29
29
  };
30
30
  export {
31
31
  f as default
@@ -1 +1 @@
1
- {"version":3,"file":"useCookies.js","sources":["../../src/hooks/useCookies.ts"],"sourcesContent":["import { useCallback } from 'react';\n\nexport type CookieSameSite = 'Strict' | 'Lax' | 'None';\n\nexport type CookieOptions = {\n /**\n * Cookie path scope.\n *\n * @default '/'\n */\n path?: string;\n\n /**\n * Cookie domain scope (for example `.rio.cloud`).\n */\n domain?: string;\n\n /**\n * Absolute expiration date for the cookie.\n */\n expires?: Date | string;\n\n /**\n * Cookie lifetime in seconds.\n */\n maxAge?: number;\n\n /**\n * Cross-site cookie behavior.\n *\n * Possible values are:\n *\n * - `Strict`\n * - `Lax`\n * - `None`\n */\n sameSite?: CookieSameSite;\n\n /**\n * Adds the `Secure` flag so the cookie is sent over HTTPS only.\n */\n secure?: boolean;\n};\n\nexport type UseCookiesResult = {\n /**\n * Sets a cookie with optional metadata.\n *\n * @param name - Cookie name.\n * @param value - Cookie value.\n * @param options - Additional cookie options.\n */\n setCookie: (name: string, value: string, options?: CookieOptions) => void;\n\n /**\n * Deletes a cookie by name.\n *\n * @param name - Cookie name.\n * @param options - Optional path/domain to target the correct cookie scope.\n */\n deleteCookie: (name: string, options?: Pick<CookieOptions, 'path' | 'domain'>) => void;\n\n /**\n * Returns true if the cookie exists.\n *\n * @param name - Cookie name.\n */\n hasCookie: (name: string) => boolean;\n\n /**\n * Reads a cookie value.\n *\n * @param name - Cookie name.\n */\n getCookie: (name: string) => string | undefined;\n};\n\nconst parseCookies = (): Record<string, string> => {\n if (typeof document === 'undefined') {\n return {};\n }\n\n return document.cookie\n .split(';')\n .map(entry => entry.trim())\n .filter(Boolean)\n .reduce(\n (acc, entry) => {\n const separatorIndex = entry.indexOf('=');\n const rawName = separatorIndex >= 0 ? entry.slice(0, separatorIndex) : entry;\n const rawValue = separatorIndex >= 0 ? entry.slice(separatorIndex + 1) : '';\n\n acc[decodeURIComponent(rawName)] = decodeURIComponent(rawValue);\n return acc;\n },\n {} as Record<string, string>\n );\n};\n\n/**\n * Returns helpers to set, delete, and read browser cookies.\n *\n * @returns {UseCookiesResult} Cookie helper functions.\n *\n * @example\n * const { setCookie, deleteCookie, hasCookie, getCookie } = useCookies();\n *\n * setCookie('token', 'abc123', { path: '/', maxAge: 60 * 60 });\n * const isLoggedIn = hasCookie('token');\n * const token = getCookie('token');\n * deleteCookie('token');\n */\nconst useCookies = (): UseCookiesResult => {\n const setCookie = useCallback((name: string, value: string, options: CookieOptions = {}) => {\n if (typeof document === 'undefined') {\n return;\n }\n\n const segments = [`${encodeURIComponent(name)}=${encodeURIComponent(value)}`, `path=${options.path ?? '/'}`];\n\n if (options.domain) {\n segments.push(`domain=${options.domain}`);\n }\n\n if (options.expires) {\n const expires = options.expires instanceof Date ? options.expires.toUTCString() : options.expires;\n segments.push(`expires=${expires}`);\n }\n\n if (typeof options.maxAge === 'number') {\n segments.push(`max-age=${options.maxAge}`);\n }\n\n if (options.sameSite) {\n segments.push(`samesite=${options.sameSite}`);\n }\n\n if (options.secure) {\n segments.push('secure');\n }\n\n // biome-ignore lint/suspicious/noDocumentCookie: this hook intentionally manages cookies through the browser cookie API.\n document.cookie = segments.join('; ');\n }, []);\n\n const deleteCookie = useCallback(\n (name: string, options: Pick<CookieOptions, 'path' | 'domain'> = {}) => {\n setCookie(name, '', {\n ...options,\n expires: new Date(0),\n maxAge: 0,\n });\n },\n [setCookie]\n );\n\n const hasCookie = useCallback((name: string) => {\n return Object.hasOwn(parseCookies(), name);\n }, []);\n\n const getCookie = useCallback((name: string) => {\n return parseCookies()[name];\n }, []);\n\n return { setCookie, deleteCookie, hasCookie, getCookie };\n};\n\nexport default useCookies;\n"],"names":["parseCookies","entry","acc","separatorIndex","rawName","rawValue","useCookies","setCookie","useCallback","name","value","options","segments","expires","deleteCookie","hasCookie","getCookie"],"mappings":";AA6EA,MAAMA,IAAe,MACb,OAAO,WAAa,MACb,CAAA,IAGJ,SAAS,OACX,MAAM,GAAG,EACT,IAAI,CAAAC,MAASA,EAAM,KAAA,CAAM,EACzB,OAAO,OAAO,EACd;AAAA,EACG,CAACC,GAAKD,MAAU;AACZ,UAAME,IAAiBF,EAAM,QAAQ,GAAG,GAClCG,IAAUD,KAAkB,IAAIF,EAAM,MAAM,GAAGE,CAAc,IAAIF,GACjEI,IAAWF,KAAkB,IAAIF,EAAM,MAAME,IAAiB,CAAC,IAAI;AAEzE,WAAAD,EAAI,mBAAmBE,CAAO,CAAC,IAAI,mBAAmBC,CAAQ,GACvDH;AAAA,EACX;AAAA,EACA,CAAA;AAAC,GAiBPI,IAAa,MAAwB;AACvC,QAAMC,IAAYC,EAAY,CAACC,GAAcC,GAAeC,IAAyB,OAAO;AACxF,QAAI,OAAO,WAAa;AACpB;AAGJ,UAAMC,IAAW,CAAC,GAAG,mBAAmBH,CAAI,CAAC,IAAI,mBAAmBC,CAAK,CAAC,IAAI,QAAQC,EAAQ,QAAQ,GAAG,EAAE;AAM3G,QAJIA,EAAQ,UACRC,EAAS,KAAK,UAAUD,EAAQ,MAAM,EAAE,GAGxCA,EAAQ,SAAS;AACjB,YAAME,IAAUF,EAAQ,mBAAmB,OAAOA,EAAQ,QAAQ,gBAAgBA,EAAQ;AAC1F,MAAAC,EAAS,KAAK,WAAWC,CAAO,EAAE;AAAA,IACtC;AAEA,IAAI,OAAOF,EAAQ,UAAW,YAC1BC,EAAS,KAAK,WAAWD,EAAQ,MAAM,EAAE,GAGzCA,EAAQ,YACRC,EAAS,KAAK,YAAYD,EAAQ,QAAQ,EAAE,GAG5CA,EAAQ,UACRC,EAAS,KAAK,QAAQ,GAI1B,SAAS,SAASA,EAAS,KAAK,IAAI;AAAA,EACxC,GAAG,CAAA,CAAE,GAECE,IAAeN;AAAA,IACjB,CAACC,GAAcE,IAAkD,OAAO;AACpE,MAAAJ,EAAUE,GAAM,IAAI;AAAA,QAChB,GAAGE;AAAA,QACH,SAAS,oBAAI,KAAK,CAAC;AAAA,QACnB,QAAQ;AAAA,MAAA,CACX;AAAA,IACL;AAAA,IACA,CAACJ,CAAS;AAAA,EAAA,GAGRQ,IAAYP,EAAY,CAACC,MACpB,OAAO,OAAOT,EAAA,GAAgBS,CAAI,GAC1C,CAAA,CAAE,GAECO,IAAYR,EAAY,CAACC,MACpBT,EAAA,EAAeS,CAAI,GAC3B,CAAA,CAAE;AAEL,SAAO,EAAE,WAAAF,GAAW,cAAAO,GAAc,WAAAC,GAAW,WAAAC,EAAA;AACjD;"}
1
+ {"version":3,"file":"useCookies.js","sources":["../../src/hooks/useCookies.ts"],"sourcesContent":["import { useCallback } from 'react';\n\nexport type CookieSameSite = 'Strict' | 'Lax' | 'None';\n\nexport type CookieOptions = {\n /**\n * Cookie path scope.\n *\n * @default '/'\n */\n path?: string;\n\n /**\n * Cookie domain scope (for example `.rio.cloud`).\n */\n domain?: string;\n\n /**\n * Absolute expiration date for the cookie.\n */\n expires?: Date | string;\n\n /**\n * Cookie lifetime in seconds.\n */\n maxAge?: number;\n\n /**\n * Cross-site cookie behavior.\n *\n * Possible values are:\n *\n * - `Strict`\n * - `Lax`\n * - `None`\n */\n sameSite?: CookieSameSite;\n\n /**\n * Adds the `Secure` flag so the cookie is sent over HTTPS only.\n */\n secure?: boolean;\n};\n\nexport type UseCookiesResult = {\n /**\n * Sets a cookie with optional metadata.\n *\n * @param name - Cookie name.\n * @param value - Cookie value.\n * @param options - Additional cookie options.\n */\n setCookie: (name: string, value: string, options?: CookieOptions) => void;\n\n /**\n * Deletes a cookie by name.\n *\n * @param name - Cookie name.\n * @param options - Optional path/domain to target the correct cookie scope.\n */\n deleteCookie: (name: string, options?: Pick<CookieOptions, 'path' | 'domain'>) => void;\n\n /**\n * Returns true if the cookie exists.\n *\n * @param name - Cookie name.\n */\n hasCookie: (name: string) => boolean;\n\n /**\n * Reads a cookie value.\n *\n * @param name - Cookie name.\n */\n getCookie: (name: string) => string | undefined;\n};\n\nconst parseCookies = (): Record<string, string> => {\n if (typeof document === 'undefined') {\n return {};\n }\n\n return document.cookie\n .split(';')\n .map(entry => entry.trim())\n .filter(Boolean)\n .reduce(\n (acc, entry) => {\n const separatorIndex = entry.indexOf('=');\n const rawName = separatorIndex >= 0 ? entry.slice(0, separatorIndex) : entry;\n const rawValue = separatorIndex >= 0 ? entry.slice(separatorIndex + 1) : '';\n\n acc[decodeURIComponent(rawName)] = decodeURIComponent(rawValue);\n return acc;\n },\n {} as Record<string, string>\n );\n};\n\n/**\n * Returns helpers to set, delete, and read browser cookies.\n *\n * @returns {UseCookiesResult} Cookie helper functions.\n *\n * @example\n * const { setCookie, deleteCookie, hasCookie, getCookie } = useCookies();\n *\n * setCookie('token', 'abc123', { path: '/', maxAge: 60 * 60 });\n * const isLoggedIn = hasCookie('token');\n * const token = getCookie('token');\n * deleteCookie('token');\n */\nconst useCookies = (): UseCookiesResult => {\n const setCookie = useCallback((name: string, value: string, options: CookieOptions = {}) => {\n if (typeof document === 'undefined') {\n return;\n }\n\n const segments = [`${encodeURIComponent(name)}=${encodeURIComponent(value)}`, `path=${options.path ?? '/'}`];\n\n if (options.domain) {\n segments.push(`domain=${options.domain}`);\n }\n\n if (options.expires) {\n const expires = options.expires instanceof Date ? options.expires.toUTCString() : options.expires;\n segments.push(`expires=${expires}`);\n }\n\n if (typeof options.maxAge === 'number') {\n segments.push(`max-age=${options.maxAge}`);\n }\n\n if (options.sameSite) {\n segments.push(`samesite=${options.sameSite}`);\n }\n\n if (options.secure) {\n segments.push('secure');\n }\n\n // biome-ignore lint/suspicious/noDocumentCookie: this hook intentionally manages cookies through the browser cookie API.\n document.cookie = segments.join('; ');\n }, []);\n\n const deleteCookie = useCallback(\n (name: string, options: Pick<CookieOptions, 'path' | 'domain'> = {}) => {\n setCookie(name, '', {\n ...options,\n expires: new Date(0),\n maxAge: 0,\n });\n },\n [setCookie]\n );\n\n const hasCookie = useCallback((name: string) => Object.hasOwn(parseCookies(), name), []);\n\n const getCookie = useCallback((name: string) => parseCookies()[name], []);\n\n return { setCookie, deleteCookie, hasCookie, getCookie };\n};\n\nexport default useCookies;\n"],"names":["parseCookies","entry","acc","separatorIndex","rawName","rawValue","useCookies","setCookie","useCallback","name","value","options","segments","expires","deleteCookie","hasCookie","getCookie"],"mappings":";AA6EA,MAAMA,IAAe,MACb,OAAO,WAAa,MACb,CAAA,IAGJ,SAAS,OACX,MAAM,GAAG,EACT,IAAI,CAAAC,MAASA,EAAM,KAAA,CAAM,EACzB,OAAO,OAAO,EACd;AAAA,EACG,CAACC,GAAKD,MAAU;AACZ,UAAME,IAAiBF,EAAM,QAAQ,GAAG,GAClCG,IAAUD,KAAkB,IAAIF,EAAM,MAAM,GAAGE,CAAc,IAAIF,GACjEI,IAAWF,KAAkB,IAAIF,EAAM,MAAME,IAAiB,CAAC,IAAI;AAEzE,WAAAD,EAAI,mBAAmBE,CAAO,CAAC,IAAI,mBAAmBC,CAAQ,GACvDH;AAAA,EACX;AAAA,EACA,CAAA;AAAC,GAiBPI,IAAa,MAAwB;AACvC,QAAMC,IAAYC,EAAY,CAACC,GAAcC,GAAeC,IAAyB,OAAO;AACxF,QAAI,OAAO,WAAa;AACpB;AAGJ,UAAMC,IAAW,CAAC,GAAG,mBAAmBH,CAAI,CAAC,IAAI,mBAAmBC,CAAK,CAAC,IAAI,QAAQC,EAAQ,QAAQ,GAAG,EAAE;AAM3G,QAJIA,EAAQ,UACRC,EAAS,KAAK,UAAUD,EAAQ,MAAM,EAAE,GAGxCA,EAAQ,SAAS;AACjB,YAAME,IAAUF,EAAQ,mBAAmB,OAAOA,EAAQ,QAAQ,gBAAgBA,EAAQ;AAC1F,MAAAC,EAAS,KAAK,WAAWC,CAAO,EAAE;AAAA,IACtC;AAEA,IAAI,OAAOF,EAAQ,UAAW,YAC1BC,EAAS,KAAK,WAAWD,EAAQ,MAAM,EAAE,GAGzCA,EAAQ,YACRC,EAAS,KAAK,YAAYD,EAAQ,QAAQ,EAAE,GAG5CA,EAAQ,UACRC,EAAS,KAAK,QAAQ,GAI1B,SAAS,SAASA,EAAS,KAAK,IAAI;AAAA,EACxC,GAAG,CAAA,CAAE,GAECE,IAAeN;AAAA,IACjB,CAACC,GAAcE,IAAkD,OAAO;AACpE,MAAAJ,EAAUE,GAAM,IAAI;AAAA,QAChB,GAAGE;AAAA,QACH,SAAS,oBAAI,KAAK,CAAC;AAAA,QACnB,QAAQ;AAAA,MAAA,CACX;AAAA,IACL;AAAA,IACA,CAACJ,CAAS;AAAA,EAAA,GAGRQ,IAAYP,EAAY,CAACC,MAAiB,OAAO,OAAOT,EAAA,GAAgBS,CAAI,GAAG,EAAE,GAEjFO,IAAYR,EAAY,CAACC,MAAiBT,IAAeS,CAAI,GAAG,EAAE;AAExE,SAAO,EAAE,WAAAF,GAAW,cAAAO,GAAc,WAAAC,GAAW,WAAAC,EAAA;AACjD;"}
@@ -0,0 +1,35 @@
1
+ import { MutableRefObject, PointerEvent as ReactPointerEvent } from 'react';
2
+ export type DraggablePosition = {
3
+ /**
4
+ * Top offset in pixels relative to the viewport.
5
+ */
6
+ top: number;
7
+ /**
8
+ * Left offset in pixels relative to the viewport.
9
+ */
10
+ left: number;
11
+ /**
12
+ * Indicates whether the element has been moved by dragging at least once.
13
+ */
14
+ hasDragged: boolean;
15
+ };
16
+ export type UseDraggableResult<T extends HTMLElement> = {
17
+ /**
18
+ * Ref that must be attached to the draggable element container.
19
+ */
20
+ draggableRef: MutableRefObject<T | null>;
21
+ /**
22
+ * Indicates whether a drag interaction is currently active.
23
+ */
24
+ isDragging: boolean;
25
+ /**
26
+ * Current draggable coordinates and drag-state metadata.
27
+ */
28
+ position: DraggablePosition;
29
+ /**
30
+ * Pointer down handler for the dedicated drag handle element.
31
+ */
32
+ onDragHandlePointerDown: (event: ReactPointerEvent<HTMLElement>) => void;
33
+ };
34
+ declare const useDraggableElement: <T extends HTMLElement = HTMLDivElement>() => UseDraggableResult<T>;
35
+ export default useDraggableElement;
@@ -0,0 +1,49 @@
1
+ import { useState as f, useRef as m, useCallback as R, useEffect as X } from "react";
2
+ const x = 4, d = "is-dragging", p = (o, s, i) => Math.min(i, Math.max(s, o)), b = () => {
3
+ const [o, s] = f(!1), [i, h] = f({ top: 0, left: 0, hasDragged: !1 }), c = m(null), l = m(null), w = R((t) => {
4
+ if (t.button !== 0)
5
+ return;
6
+ t.preventDefault(), t.stopPropagation();
7
+ const r = c.current;
8
+ if (!r)
9
+ return;
10
+ const n = r.getBoundingClientRect();
11
+ l.current = {
12
+ offsetX: t.clientX - n.left,
13
+ offsetY: t.clientY - n.top,
14
+ startX: t.clientX,
15
+ startY: t.clientY,
16
+ hasMoved: !1
17
+ }, s(!0);
18
+ }, []);
19
+ return X(() => {
20
+ if (!o)
21
+ return;
22
+ const t = document.documentElement;
23
+ t.classList.add(d);
24
+ const r = (a) => {
25
+ const e = l.current, g = c.current;
26
+ if (!e || !g)
27
+ return;
28
+ const E = Math.hypot(a.clientX - e.startX, a.clientY - e.startY);
29
+ if (!e.hasMoved && E < x)
30
+ return;
31
+ e.hasMoved || (e.hasMoved = !0);
32
+ const u = g.getBoundingClientRect(), L = Math.max(0, window.innerWidth - u.width), M = Math.max(0, window.innerHeight - u.height), v = p(a.clientX - e.offsetX, 0, L), D = p(a.clientY - e.offsetY, 0, M);
33
+ h({
34
+ top: D,
35
+ left: v,
36
+ hasDragged: !0
37
+ });
38
+ }, n = () => {
39
+ t.classList.remove(d), s(!1), l.current = null;
40
+ };
41
+ return window.addEventListener("pointermove", r), window.addEventListener("pointerup", n), window.addEventListener("pointercancel", n), () => {
42
+ window.removeEventListener("pointermove", r), window.removeEventListener("pointerup", n), window.removeEventListener("pointercancel", n), t.classList.remove(d);
43
+ };
44
+ }, [o]), { draggableRef: c, isDragging: o, position: i, onDragHandlePointerDown: w };
45
+ };
46
+ export {
47
+ b as default
48
+ };
49
+ //# sourceMappingURL=useDraggableElement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDraggableElement.js","sources":["../../src/hooks/useDraggableElement.ts"],"sourcesContent":["import {\n useCallback,\n useEffect,\n useRef,\n useState,\n type MutableRefObject,\n type PointerEvent as ReactPointerEvent,\n} from 'react';\n\nexport type DraggablePosition = {\n /**\n * Top offset in pixels relative to the viewport.\n */\n top: number;\n\n /**\n * Left offset in pixels relative to the viewport.\n */\n left: number;\n\n /**\n * Indicates whether the element has been moved by dragging at least once.\n */\n hasDragged: boolean;\n};\n\nexport type UseDraggableResult<T extends HTMLElement> = {\n /**\n * Ref that must be attached to the draggable element container.\n */\n draggableRef: MutableRefObject<T | null>;\n\n /**\n * Indicates whether a drag interaction is currently active.\n */\n isDragging: boolean;\n\n /**\n * Current draggable coordinates and drag-state metadata.\n */\n position: DraggablePosition;\n\n /**\n * Pointer down handler for the dedicated drag handle element.\n */\n onDragHandlePointerDown: (event: ReactPointerEvent<HTMLElement>) => void;\n};\n\ntype DraggableState = {\n offsetX: number;\n offsetY: number;\n startX: number;\n startY: number;\n hasMoved: boolean;\n};\n\nconst MOVEMENT_THRESHOLD_PX = 4;\nconst DRAGGING_CLASS_NAME = 'is-dragging';\n\nconst clampToRange = (value: number, min: number, max: number) => Math.min(max, Math.max(min, value));\n\nconst useDraggableElement = <T extends HTMLElement = HTMLDivElement>(): UseDraggableResult<T> => {\n const [isDragging, setIsDragging] = useState(false);\n const [position, setPosition] = useState<DraggablePosition>({ top: 0, left: 0, hasDragged: false });\n\n const draggableRef = useRef<T | null>(null);\n const dragStateRef = useRef<DraggableState | null>(null);\n\n const onDragHandlePointerDown = useCallback((event: ReactPointerEvent<HTMLElement>) => {\n if (event.button !== 0) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n const draggableElement = draggableRef.current;\n if (!draggableElement) {\n return;\n }\n\n const rect = draggableElement.getBoundingClientRect();\n dragStateRef.current = {\n offsetX: event.clientX - rect.left,\n offsetY: event.clientY - rect.top,\n startX: event.clientX,\n startY: event.clientY,\n hasMoved: false,\n };\n setIsDragging(true);\n }, []);\n\n useEffect(() => {\n if (!isDragging) {\n return;\n }\n\n const rootElement = document.documentElement;\n rootElement.classList.add(DRAGGING_CLASS_NAME);\n\n const handlePointerMove = (event: PointerEvent) => {\n const dragState = dragStateRef.current;\n const draggableElement = draggableRef.current;\n if (!dragState || !draggableElement) {\n return;\n }\n\n const movedDistance = Math.hypot(event.clientX - dragState.startX, event.clientY - dragState.startY);\n if (!dragState.hasMoved && movedDistance < MOVEMENT_THRESHOLD_PX) {\n return;\n }\n\n if (!dragState.hasMoved) {\n dragState.hasMoved = true;\n }\n\n const rect = draggableElement.getBoundingClientRect();\n const maxLeft = Math.max(0, window.innerWidth - rect.width);\n const maxTop = Math.max(0, window.innerHeight - rect.height);\n const nextLeft = clampToRange(event.clientX - dragState.offsetX, 0, maxLeft);\n const nextTop = clampToRange(event.clientY - dragState.offsetY, 0, maxTop);\n\n setPosition({\n top: nextTop,\n left: nextLeft,\n hasDragged: true,\n });\n };\n\n const handlePointerRelease = () => {\n rootElement.classList.remove(DRAGGING_CLASS_NAME);\n setIsDragging(false);\n dragStateRef.current = null;\n };\n\n window.addEventListener('pointermove', handlePointerMove);\n window.addEventListener('pointerup', handlePointerRelease);\n window.addEventListener('pointercancel', handlePointerRelease);\n\n return () => {\n window.removeEventListener('pointermove', handlePointerMove);\n window.removeEventListener('pointerup', handlePointerRelease);\n window.removeEventListener('pointercancel', handlePointerRelease);\n rootElement.classList.remove(DRAGGING_CLASS_NAME);\n };\n }, [isDragging]);\n\n return { draggableRef, isDragging, position, onDragHandlePointerDown };\n};\n\nexport default useDraggableElement;\n"],"names":["MOVEMENT_THRESHOLD_PX","DRAGGING_CLASS_NAME","clampToRange","value","min","max","useDraggableElement","isDragging","setIsDragging","useState","position","setPosition","draggableRef","useRef","dragStateRef","onDragHandlePointerDown","useCallback","event","draggableElement","rect","useEffect","rootElement","handlePointerMove","dragState","movedDistance","maxLeft","maxTop","nextLeft","nextTop","handlePointerRelease"],"mappings":";AAwDA,MAAMA,IAAwB,GACxBC,IAAsB,eAEtBC,IAAe,CAACC,GAAeC,GAAaC,MAAgB,KAAK,IAAIA,GAAK,KAAK,IAAID,GAAKD,CAAK,CAAC,GAE9FG,IAAsB,MAAqE;AAC7F,QAAM,CAACC,GAAYC,CAAa,IAAIC,EAAS,EAAK,GAC5C,CAACC,GAAUC,CAAW,IAAIF,EAA4B,EAAE,KAAK,GAAG,MAAM,GAAG,YAAY,GAAA,CAAO,GAE5FG,IAAeC,EAAiB,IAAI,GACpCC,IAAeD,EAA8B,IAAI,GAEjDE,IAA0BC,EAAY,CAACC,MAA0C;AACnF,QAAIA,EAAM,WAAW;AACjB;AAGJ,IAAAA,EAAM,eAAA,GACNA,EAAM,gBAAA;AAEN,UAAMC,IAAmBN,EAAa;AACtC,QAAI,CAACM;AACD;AAGJ,UAAMC,IAAOD,EAAiB,sBAAA;AAC9B,IAAAJ,EAAa,UAAU;AAAA,MACnB,SAASG,EAAM,UAAUE,EAAK;AAAA,MAC9B,SAASF,EAAM,UAAUE,EAAK;AAAA,MAC9B,QAAQF,EAAM;AAAA,MACd,QAAQA,EAAM;AAAA,MACd,UAAU;AAAA,IAAA,GAEdT,EAAc,EAAI;AAAA,EACtB,GAAG,CAAA,CAAE;AAEL,SAAAY,EAAU,MAAM;AACZ,QAAI,CAACb;AACD;AAGJ,UAAMc,IAAc,SAAS;AAC7B,IAAAA,EAAY,UAAU,IAAIpB,CAAmB;AAE7C,UAAMqB,IAAoB,CAACL,MAAwB;AAC/C,YAAMM,IAAYT,EAAa,SACzBI,IAAmBN,EAAa;AACtC,UAAI,CAACW,KAAa,CAACL;AACf;AAGJ,YAAMM,IAAgB,KAAK,MAAMP,EAAM,UAAUM,EAAU,QAAQN,EAAM,UAAUM,EAAU,MAAM;AACnG,UAAI,CAACA,EAAU,YAAYC,IAAgBxB;AACvC;AAGJ,MAAKuB,EAAU,aACXA,EAAU,WAAW;AAGzB,YAAMJ,IAAOD,EAAiB,sBAAA,GACxBO,IAAU,KAAK,IAAI,GAAG,OAAO,aAAaN,EAAK,KAAK,GACpDO,IAAS,KAAK,IAAI,GAAG,OAAO,cAAcP,EAAK,MAAM,GACrDQ,IAAWzB,EAAae,EAAM,UAAUM,EAAU,SAAS,GAAGE,CAAO,GACrEG,IAAU1B,EAAae,EAAM,UAAUM,EAAU,SAAS,GAAGG,CAAM;AAEzE,MAAAf,EAAY;AAAA,QACR,KAAKiB;AAAA,QACL,MAAMD;AAAA,QACN,YAAY;AAAA,MAAA,CACf;AAAA,IACL,GAEME,IAAuB,MAAM;AAC/B,MAAAR,EAAY,UAAU,OAAOpB,CAAmB,GAChDO,EAAc,EAAK,GACnBM,EAAa,UAAU;AAAA,IAC3B;AAEA,kBAAO,iBAAiB,eAAeQ,CAAiB,GACxD,OAAO,iBAAiB,aAAaO,CAAoB,GACzD,OAAO,iBAAiB,iBAAiBA,CAAoB,GAEtD,MAAM;AACT,aAAO,oBAAoB,eAAeP,CAAiB,GAC3D,OAAO,oBAAoB,aAAaO,CAAoB,GAC5D,OAAO,oBAAoB,iBAAiBA,CAAoB,GAChER,EAAY,UAAU,OAAOpB,CAAmB;AAAA,IACpD;AAAA,EACJ,GAAG,CAACM,CAAU,CAAC,GAER,EAAE,cAAAK,GAAc,YAAAL,GAAY,UAAAG,GAAU,yBAAAK,EAAA;AACjD;"}
@@ -1,9 +1,9 @@
1
- import { useRef as n, useEffect as o } from "react";
1
+ import { useRef as o, useEffect as r } from "react";
2
2
  const u = (e = Date.now()) => {
3
- const t = n(e), r = () => Date.now() - t.current;
4
- return o(() => {
3
+ const t = o(e), n = () => Date.now() - t.current;
4
+ return r(() => {
5
5
  t.current = e;
6
- }, [e]), r;
6
+ }, [e]), n;
7
7
  };
8
8
  export {
9
9
  u as default
@@ -1 +1 @@
1
- {"version":3,"file":"useElapsedTime.js","sources":["../../src/hooks/useElapsedTime.ts"],"sourcesContent":["import { useRef, useEffect } from 'react';\n\n/**\n * Custom React hook to measure the elapsed time since a specified start time or the component's mount time.\n *\n * @param {number} [startTime=Date.now()] - The start time in milliseconds from which to measure the elapsed time.\n * @returns {Function} A function that returns the elapsed time in milliseconds since the specified start time\n * or the component's mount time.\n *\n * @example\n * import useElapsedTime from '@rio-cloud/rio-uikit/useElapsedTime';\n * import Button from '@rio-cloud/rio-uikit/Button';\n *\n * const MyComponent = () => {\n * const getElapsedTime = useElapsedTime();\n *\n * const handleClick = () => {\n * const elapsedTime = getElapsedTime();\n * console.log(`Elapsed time: ${elapsedTime} ms`);\n * };\n *\n * return (\n * <Button onClick={handleClick}>Get elapsed time</Button>\n * );\n * };\n */\nconst useElapsedTime = (startTime: number = Date.now()): (() => number) => {\n const startTimeRef = useRef(startTime);\n\n const getElapsedTime = () => {\n return Date.now() - startTimeRef.current;\n };\n\n useEffect(() => {\n startTimeRef.current = startTime;\n }, [startTime]);\n\n return getElapsedTime;\n};\n\nexport default useElapsedTime;\n"],"names":["useElapsedTime","startTime","startTimeRef","useRef","getElapsedTime","useEffect"],"mappings":";AA0BA,MAAMA,IAAiB,CAACC,IAAoB,KAAK,UAA0B;AACvE,QAAMC,IAAeC,EAAOF,CAAS,GAE/BG,IAAiB,MACZ,KAAK,QAAQF,EAAa;AAGrC,SAAAG,EAAU,MAAM;AACZ,IAAAH,EAAa,UAAUD;AAAA,EAC3B,GAAG,CAACA,CAAS,CAAC,GAEPG;AACX;"}
1
+ {"version":3,"file":"useElapsedTime.js","sources":["../../src/hooks/useElapsedTime.ts"],"sourcesContent":["import { useRef, useEffect } from 'react';\n\n/**\n * Custom React hook to measure the elapsed time since a specified start time or the component's mount time.\n *\n * @param {number} [startTime=Date.now()] - The start time in milliseconds from which to measure the elapsed time.\n * @returns {Function} A function that returns the elapsed time in milliseconds since the specified start time\n * or the component's mount time.\n *\n * @example\n * import useElapsedTime from '@rio-cloud/rio-uikit/useElapsedTime';\n * import Button from '@rio-cloud/rio-uikit/Button';\n *\n * const MyComponent = () => {\n * const getElapsedTime = useElapsedTime();\n *\n * const handleClick = () => {\n * const elapsedTime = getElapsedTime();\n * console.log(`Elapsed time: ${elapsedTime} ms`);\n * };\n *\n * return (\n * <Button onClick={handleClick}>Get elapsed time</Button>\n * );\n * };\n */\nconst useElapsedTime = (startTime: number = Date.now()): (() => number) => {\n const startTimeRef = useRef(startTime);\n\n const getElapsedTime = () => Date.now() - startTimeRef.current;\n\n useEffect(() => {\n startTimeRef.current = startTime;\n }, [startTime]);\n\n return getElapsedTime;\n};\n\nexport default useElapsedTime;\n"],"names":["useElapsedTime","startTime","startTimeRef","useRef","getElapsedTime","useEffect"],"mappings":";AA0BA,MAAMA,IAAiB,CAACC,IAAoB,KAAK,UAA0B;AACvE,QAAMC,IAAeC,EAAOF,CAAS,GAE/BG,IAAiB,MAAM,KAAK,IAAA,IAAQF,EAAa;AAEvD,SAAAG,EAAU,MAAM;AACZ,IAAAH,EAAa,UAAUD;AAAA,EAC3B,GAAG,CAACA,CAAS,CAAC,GAEPG;AACX;"}
@@ -1,16 +1,16 @@
1
1
  import { useState as m, useRef as h, useEffect as p } from "react";
2
2
  import { debounce as b } from "es-toolkit/function";
3
- const E = "https://autocomplete.search.hereapi.com/v1/autocomplete", w = async (r, e, l = {}) => {
3
+ const E = "https://autocomplete.search.hereapi.com/v1/autocomplete", w = async (e, r, l = {}) => {
4
4
  const { apiKey: s, fetchUrl: u = E, limit: o = 5, ...f } = l;
5
- if (!r || !s)
5
+ if (!e || !s)
6
6
  return [];
7
7
  const a = new URLSearchParams({
8
- q: r,
8
+ q: e,
9
9
  apiKey: s,
10
10
  limit: String(o),
11
11
  // Add any additional options dynamically
12
12
  ...f
13
- }), t = await fetch(`${u}?${a.toString()}`, { signal: e });
13
+ }), t = await fetch(`${u}?${a.toString()}`, { signal: r });
14
14
  if (!t.ok)
15
15
  throw new Error(`API request failed with status ${t.status}`);
16
16
  const n = await t.json();
@@ -18,7 +18,7 @@ const E = "https://autocomplete.search.hereapi.com/v1/autocomplete", w = async (
18
18
  id: c.id,
19
19
  label: c.title
20
20
  })) : [];
21
- }, S = 300, L = (r, e = {}) => {
21
+ }, S = 300, L = (e, r = {}) => {
22
22
  const [l, s] = m([]), [u, o] = m(!1), [f, a] = m(null), t = h(null), n = h(
23
23
  b(async (c, d) => {
24
24
  t.current?.abort();
@@ -35,14 +35,17 @@ const E = "https://autocomplete.search.hereapi.com/v1/autocomplete", w = async (
35
35
  }, S)
36
36
  ).current;
37
37
  return p(() => {
38
- if (!r || !e.apiKey) {
38
+ if (!e || !r.apiKey) {
39
39
  s([]), o(!1), t.current?.abort();
40
40
  return;
41
41
  }
42
- o(!0), n(r, e);
43
- }, [r, n, e.apiKey, e.fetchUrl]), p(() => () => {
44
- t.current?.abort();
45
- }, []), { suggestions: l, loading: u, error: f };
42
+ o(!0), n(e, r);
43
+ }, [e, n, r.apiKey, r.fetchUrl]), p(
44
+ () => () => {
45
+ t.current?.abort();
46
+ },
47
+ []
48
+ ), { suggestions: l, loading: u, error: f };
46
49
  };
47
50
  export {
48
51
  L as default
@@ -1 +1 @@
1
- {"version":3,"file":"useLocationSuggestions.js","sources":["../../src/hooks/useLocationSuggestions.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\nimport { debounce } from 'es-toolkit/function';\n\nexport type LocationSuggestion = {\n id: string;\n label: string;\n};\n\n// See API documentation - https://www.here.com/docs/bundle/geocoding-and-search-api-v7-api-reference/page/index.html#/paths/~1autocomplete/get\nexport type LocationFetchOptions = Record<string, unknown> & {\n apiKey?: string;\n fetchUrl?: string;\n limit?: number; // Default by Here API is set to 5; Maximum is 20\n};\n\nconst DEFAULT_URL = 'https://autocomplete.search.hereapi.com/v1/autocomplete';\n\nconst fetchLocationSuggestions = async (\n query: string,\n signal: AbortSignal,\n options: LocationFetchOptions = {}\n): Promise<LocationSuggestion[]> => {\n const { apiKey, fetchUrl = DEFAULT_URL, limit = 5, ...restOptions } = options;\n\n if (!query || !apiKey) {\n return [];\n }\n\n const params = new URLSearchParams({\n q: query,\n apiKey,\n limit: String(limit),\n\n // Add any additional options dynamically\n ...restOptions,\n });\n\n const response = await fetch(`${fetchUrl}?${params.toString()}`, { signal });\n\n if (!response.ok) {\n // Throw an error for bad responses (4xx, 5xx)\n // This allows the hook's catch block to handle API errors\n throw new Error(`API request failed with status ${response.status}`);\n }\n\n const data = await response.json();\n\n // Ensure data.items exists and is an array before mapping\n return Array.isArray(data?.items)\n ? data.items.map((item: any) => ({\n id: item.id,\n label: item.title,\n }))\n : [];\n};\n\nconst FETCH_DEBOUNCE_IN_MS = 300;\n\n/**\n * Custom React hook for fetching location suggestions using HERE Maps Autocomplete API.\n *\n * @param query - The user input string to search for location suggestions.\n * @param options - Optional configuration:\n * - apiKey: Your HERE Maps API key (default is 'YOUR_API_KEY').\n * - fetchUrl: Optional override for the autocomplete endpoint URL.\n * @returns An object containing:\n * - suggestions: Array of location suggestions with `id` and `label`.\n * - loading: Boolean indicating whether the fetch is in progress.\n * - error: Any error that occurred during fetching.\n */\nconst useLocationSuggestions = (query: string, options: LocationFetchOptions = {}) => {\n const [suggestions, setSuggestions] = useState<LocationSuggestion[]>([]);\n\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const abortRef = useRef<AbortController | null>(null);\n\n // React re-renders the component every time state or props change. If we define the debounce() call\n // directly inside the component without useRef, we'll create a new debounced function on every render,\n // which defeats the purpose of debouncing.\n // By wrapping it in useRef, we ensure the debounced function is created only once and persists between renders\n const debouncedFetch = useRef(\n debounce(async (currentQuery: string, currentOptions: LocationFetchOptions) => {\n // Abort any ongoing request from previous calls\n abortRef.current?.abort();\n\n const controller = new AbortController();\n abortRef.current = controller;\n\n // Reset error before a new fetch attempt\n setError(null);\n\n try {\n const results = await fetchLocationSuggestions(currentQuery, controller.signal, currentOptions);\n setSuggestions(results);\n } catch (fetchError) {\n if ((fetchError as any).name !== 'AbortError') {\n setError(fetchError as Error);\n }\n setSuggestions([]);\n } finally {\n setLoading(false);\n }\n }, FETCH_DEBOUNCE_IN_MS)\n ).current;\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>\n useEffect(() => {\n if (!query || !options.apiKey) {\n setSuggestions([]);\n setLoading(false);\n // Abort if there was an ongoing request\n abortRef.current?.abort();\n return;\n }\n\n setLoading(true);\n debouncedFetch(query, options);\n }, [query, debouncedFetch, options.apiKey, options.fetchUrl]); // `debouncedFetch` is stable due to useRef\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n abortRef.current?.abort();\n };\n }, []);\n\n return { suggestions, loading, error };\n};\n\nexport default useLocationSuggestions;\n"],"names":["DEFAULT_URL","fetchLocationSuggestions","query","signal","options","apiKey","fetchUrl","limit","restOptions","params","response","data","item","FETCH_DEBOUNCE_IN_MS","useLocationSuggestions","suggestions","setSuggestions","useState","loading","setLoading","error","setError","abortRef","useRef","debouncedFetch","debounce","currentQuery","currentOptions","controller","results","fetchError","useEffect"],"mappings":";;AAeA,MAAMA,IAAc,2DAEdC,IAA2B,OAC7BC,GACAC,GACAC,IAAgC,CAAA,MACA;AAChC,QAAM,EAAE,QAAAC,GAAQ,UAAAC,IAAWN,GAAa,OAAAO,IAAQ,GAAG,GAAGC,MAAgBJ;AAEtE,MAAI,CAACF,KAAS,CAACG;AACX,WAAO,CAAA;AAGX,QAAMI,IAAS,IAAI,gBAAgB;AAAA,IAC/B,GAAGP;AAAA,IACH,QAAAG;AAAA,IACA,OAAO,OAAOE,CAAK;AAAA;AAAA,IAGnB,GAAGC;AAAA,EAAA,CACN,GAEKE,IAAW,MAAM,MAAM,GAAGJ,CAAQ,IAAIG,EAAO,SAAA,CAAU,IAAI,EAAE,QAAAN,EAAA,CAAQ;AAE3E,MAAI,CAACO,EAAS;AAGV,UAAM,IAAI,MAAM,kCAAkCA,EAAS,MAAM,EAAE;AAGvE,QAAMC,IAAO,MAAMD,EAAS,KAAA;AAG5B,SAAO,MAAM,QAAQC,GAAM,KAAK,IAC1BA,EAAK,MAAM,IAAI,CAACC,OAAe;AAAA,IAC3B,IAAIA,EAAK;AAAA,IACT,OAAOA,EAAK;AAAA,EAAA,EACd,IACF,CAAA;AACV,GAEMC,IAAuB,KAcvBC,IAAyB,CAACZ,GAAeE,IAAgC,OAAO;AAClF,QAAM,CAACW,GAAaC,CAAc,IAAIC,EAA+B,CAAA,CAAE,GAEjE,CAACC,GAASC,CAAU,IAAIF,EAAS,EAAK,GACtC,CAACG,GAAOC,CAAQ,IAAIJ,EAAuB,IAAI,GAE/CK,IAAWC,EAA+B,IAAI,GAM9CC,IAAiBD;AAAA,IACnBE,EAAS,OAAOC,GAAsBC,MAAyC;AAE3E,MAAAL,EAAS,SAAS,MAAA;AAElB,YAAMM,IAAa,IAAI,gBAAA;AACvB,MAAAN,EAAS,UAAUM,GAGnBP,EAAS,IAAI;AAEb,UAAI;AACA,cAAMQ,IAAU,MAAM5B,EAAyByB,GAAcE,EAAW,QAAQD,CAAc;AAC9F,QAAAX,EAAea,CAAO;AAAA,MAC1B,SAASC,GAAY;AACjB,QAAKA,EAAmB,SAAS,gBAC7BT,EAASS,CAAmB,GAEhCd,EAAe,CAAA,CAAE;AAAA,MACrB,UAAA;AACI,QAAAG,EAAW,EAAK;AAAA,MACpB;AAAA,IACJ,GAAGN,CAAoB;AAAA,EAAA,EACzB;AAGF,SAAAkB,EAAU,MAAM;AACZ,QAAI,CAAC7B,KAAS,CAACE,EAAQ,QAAQ;AAC3B,MAAAY,EAAe,CAAA,CAAE,GACjBG,EAAW,EAAK,GAEhBG,EAAS,SAAS,MAAA;AAClB;AAAA,IACJ;AAEA,IAAAH,EAAW,EAAI,GACfK,EAAetB,GAAOE,CAAO;AAAA,EACjC,GAAG,CAACF,GAAOsB,GAAgBpB,EAAQ,QAAQA,EAAQ,QAAQ,CAAC,GAG5D2B,EAAU,MACC,MAAM;AACT,IAAAT,EAAS,SAAS,MAAA;AAAA,EACtB,GACD,CAAA,CAAE,GAEE,EAAE,aAAAP,GAAa,SAAAG,GAAS,OAAAE,EAAA;AACnC;"}
1
+ {"version":3,"file":"useLocationSuggestions.js","sources":["../../src/hooks/useLocationSuggestions.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\nimport { debounce } from 'es-toolkit/function';\n\nexport type LocationSuggestion = {\n id: string;\n label: string;\n};\n\n// See API documentation - https://www.here.com/docs/bundle/geocoding-and-search-api-v7-api-reference/page/index.html#/paths/~1autocomplete/get\nexport type LocationFetchOptions = Record<string, unknown> & {\n apiKey?: string;\n fetchUrl?: string;\n limit?: number; // Default by Here API is set to 5; Maximum is 20\n};\n\nconst DEFAULT_URL = 'https://autocomplete.search.hereapi.com/v1/autocomplete';\n\nconst fetchLocationSuggestions = async (\n query: string,\n signal: AbortSignal,\n options: LocationFetchOptions = {}\n): Promise<LocationSuggestion[]> => {\n const { apiKey, fetchUrl = DEFAULT_URL, limit = 5, ...restOptions } = options;\n\n if (!query || !apiKey) {\n return [];\n }\n\n const params = new URLSearchParams({\n q: query,\n apiKey,\n limit: String(limit),\n\n // Add any additional options dynamically\n ...restOptions,\n });\n\n const response = await fetch(`${fetchUrl}?${params.toString()}`, { signal });\n\n if (!response.ok) {\n // Throw an error for bad responses (4xx, 5xx)\n // This allows the hook's catch block to handle API errors\n throw new Error(`API request failed with status ${response.status}`);\n }\n\n const data = await response.json();\n\n // Ensure data.items exists and is an array before mapping\n return Array.isArray(data?.items)\n ? data.items.map((item: any) => ({\n id: item.id,\n label: item.title,\n }))\n : [];\n};\n\nconst FETCH_DEBOUNCE_IN_MS = 300;\n\n/**\n * Custom React hook for fetching location suggestions using HERE Maps Autocomplete API.\n *\n * @param query - The user input string to search for location suggestions.\n * @param options - Optional configuration:\n * - apiKey: Your HERE Maps API key (default is 'YOUR_API_KEY').\n * - fetchUrl: Optional override for the autocomplete endpoint URL.\n * @returns An object containing:\n * - suggestions: Array of location suggestions with `id` and `label`.\n * - loading: Boolean indicating whether the fetch is in progress.\n * - error: Any error that occurred during fetching.\n */\nconst useLocationSuggestions = (query: string, options: LocationFetchOptions = {}) => {\n const [suggestions, setSuggestions] = useState<LocationSuggestion[]>([]);\n\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const abortRef = useRef<AbortController | null>(null);\n\n // React re-renders the component every time state or props change. If we define the debounce() call\n // directly inside the component without useRef, we'll create a new debounced function on every render,\n // which defeats the purpose of debouncing.\n // By wrapping it in useRef, we ensure the debounced function is created only once and persists between renders\n const debouncedFetch = useRef(\n debounce(async (currentQuery: string, currentOptions: LocationFetchOptions) => {\n // Abort any ongoing request from previous calls\n abortRef.current?.abort();\n\n const controller = new AbortController();\n abortRef.current = controller;\n\n // Reset error before a new fetch attempt\n setError(null);\n\n try {\n const results = await fetchLocationSuggestions(currentQuery, controller.signal, currentOptions);\n setSuggestions(results);\n } catch (fetchError) {\n if ((fetchError as any).name !== 'AbortError') {\n setError(fetchError as Error);\n }\n setSuggestions([]);\n } finally {\n setLoading(false);\n }\n }, FETCH_DEBOUNCE_IN_MS)\n ).current;\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>\n useEffect(() => {\n if (!query || !options.apiKey) {\n setSuggestions([]);\n setLoading(false);\n // Abort if there was an ongoing request\n abortRef.current?.abort();\n return;\n }\n\n setLoading(true);\n debouncedFetch(query, options);\n }, [query, debouncedFetch, options.apiKey, options.fetchUrl]); // `debouncedFetch` is stable due to useRef\n\n // Cleanup on unmount\n useEffect(\n () => () => {\n abortRef.current?.abort();\n },\n []\n );\n\n return { suggestions, loading, error };\n};\n\nexport default useLocationSuggestions;\n"],"names":["DEFAULT_URL","fetchLocationSuggestions","query","signal","options","apiKey","fetchUrl","limit","restOptions","params","response","data","item","FETCH_DEBOUNCE_IN_MS","useLocationSuggestions","suggestions","setSuggestions","useState","loading","setLoading","error","setError","abortRef","useRef","debouncedFetch","debounce","currentQuery","currentOptions","controller","results","fetchError","useEffect"],"mappings":";;AAeA,MAAMA,IAAc,2DAEdC,IAA2B,OAC7BC,GACAC,GACAC,IAAgC,CAAA,MACA;AAChC,QAAM,EAAE,QAAAC,GAAQ,UAAAC,IAAWN,GAAa,OAAAO,IAAQ,GAAG,GAAGC,MAAgBJ;AAEtE,MAAI,CAACF,KAAS,CAACG;AACX,WAAO,CAAA;AAGX,QAAMI,IAAS,IAAI,gBAAgB;AAAA,IAC/B,GAAGP;AAAA,IACH,QAAAG;AAAA,IACA,OAAO,OAAOE,CAAK;AAAA;AAAA,IAGnB,GAAGC;AAAA,EAAA,CACN,GAEKE,IAAW,MAAM,MAAM,GAAGJ,CAAQ,IAAIG,EAAO,SAAA,CAAU,IAAI,EAAE,QAAAN,EAAA,CAAQ;AAE3E,MAAI,CAACO,EAAS;AAGV,UAAM,IAAI,MAAM,kCAAkCA,EAAS,MAAM,EAAE;AAGvE,QAAMC,IAAO,MAAMD,EAAS,KAAA;AAG5B,SAAO,MAAM,QAAQC,GAAM,KAAK,IAC1BA,EAAK,MAAM,IAAI,CAACC,OAAe;AAAA,IAC3B,IAAIA,EAAK;AAAA,IACT,OAAOA,EAAK;AAAA,EAAA,EACd,IACF,CAAA;AACV,GAEMC,IAAuB,KAcvBC,IAAyB,CAACZ,GAAeE,IAAgC,OAAO;AAClF,QAAM,CAACW,GAAaC,CAAc,IAAIC,EAA+B,CAAA,CAAE,GAEjE,CAACC,GAASC,CAAU,IAAIF,EAAS,EAAK,GACtC,CAACG,GAAOC,CAAQ,IAAIJ,EAAuB,IAAI,GAE/CK,IAAWC,EAA+B,IAAI,GAM9CC,IAAiBD;AAAA,IACnBE,EAAS,OAAOC,GAAsBC,MAAyC;AAE3E,MAAAL,EAAS,SAAS,MAAA;AAElB,YAAMM,IAAa,IAAI,gBAAA;AACvB,MAAAN,EAAS,UAAUM,GAGnBP,EAAS,IAAI;AAEb,UAAI;AACA,cAAMQ,IAAU,MAAM5B,EAAyByB,GAAcE,EAAW,QAAQD,CAAc;AAC9F,QAAAX,EAAea,CAAO;AAAA,MAC1B,SAASC,GAAY;AACjB,QAAKA,EAAmB,SAAS,gBAC7BT,EAASS,CAAmB,GAEhCd,EAAe,CAAA,CAAE;AAAA,MACrB,UAAA;AACI,QAAAG,EAAW,EAAK;AAAA,MACpB;AAAA,IACJ,GAAGN,CAAoB;AAAA,EAAA,EACzB;AAGF,SAAAkB,EAAU,MAAM;AACZ,QAAI,CAAC7B,KAAS,CAACE,EAAQ,QAAQ;AAC3B,MAAAY,EAAe,CAAA,CAAE,GACjBG,EAAW,EAAK,GAEhBG,EAAS,SAAS,MAAA;AAClB;AAAA,IACJ;AAEA,IAAAH,EAAW,EAAI,GACfK,EAAetB,GAAOE,CAAO;AAAA,EACjC,GAAG,CAACF,GAAOsB,GAAgBpB,EAAQ,QAAQA,EAAQ,QAAQ,CAAC,GAG5D2B;AAAA,IACI,MAAM,MAAM;AACR,MAAAT,EAAS,SAAS,MAAA;AAAA,IACtB;AAAA,IACA,CAAA;AAAA,EAAC,GAGE,EAAE,aAAAP,GAAa,SAAAG,GAAS,OAAAE,EAAA;AACnC;"}
@@ -1,22 +1,22 @@
1
- import { useMemo as e } from "react";
2
- const o = (r, t) => {
3
- if (r != null) {
4
- if (typeof r == "function") {
5
- r(t);
1
+ import { useMemo as r } from "react";
2
+ const e = (t, n) => {
3
+ if (t != null) {
4
+ if (typeof t == "function") {
5
+ t(n);
6
6
  return;
7
7
  }
8
8
  try {
9
- r.current = t;
9
+ t.current = n;
10
10
  } catch {
11
- throw new Error(`Cannot assign value '${t}' to ref '${r}'`);
11
+ throw new Error(`Cannot assign value '${n}' to ref '${t}'`);
12
12
  }
13
13
  }
14
- }, s = (...r) => (t) => {
15
- r.forEach((n) => {
16
- o(n, t);
14
+ }, s = (...t) => (n) => {
15
+ t.forEach((o) => {
16
+ e(o, n);
17
17
  });
18
- }, c = (...r) => e(() => s(...r), r);
18
+ }, u = (...t) => r(() => s(...t), t);
19
19
  export {
20
- c as default
20
+ u as default
21
21
  };
22
22
  //# sourceMappingURL=useMergeRefs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useMergeRefs.js","sources":["../../src/hooks/useMergeRefs.ts"],"sourcesContent":["// forked from https://github.com/chakra-ui/chakra-ui/blob/main/packages/hooks/use-merge-refs/src/index.ts\n\nimport type React from 'react';\nimport { useMemo } from 'react';\n\nexport type ReactRef<T> = React.RefCallback<T> | React.MutableRefObject<T>;\n\n/**\n * Assigns a value to a React reference.\n *\n * @param ref - The React reference to assign the value to.\n * @param value - The value to assign to the reference.\n */\nconst assignRef = <T = any>(ref: ReactRef<T> | null | undefined, value: T) => {\n if (ref == null) {\n return;\n }\n\n if (typeof ref === 'function') {\n ref(value);\n return;\n }\n\n try {\n ref.current = value;\n } catch (error) {\n throw new Error(`Cannot assign value '${value}' to ref '${ref}'`);\n }\n};\n\n/**\n * Merges multiple React references into a single callback ref.\n *\n * @param refs - The React references to merge.\n * @returns A callback function to assign the merged references to a node.\n */\nconst mergeRefs = <T>(...refs: (ReactRef<T> | null | undefined)[]) => {\n return (node: T | null) => {\n refs.forEach(ref => {\n assignRef(ref, node);\n });\n };\n};\n\n/**\n * Custom hook to merge multiple React references into a single callback ref.\n *\n * @param refs - The React references to merge.\n * @returns A memoized callback function to assign the merged references to a node.\n */\nconst useMergeRefs = <T>(...refs: (ReactRef<T> | null | undefined)[]) => {\n return useMemo(() => mergeRefs(...refs), refs);\n};\n\nexport default useMergeRefs;\n"],"names":["assignRef","ref","value","mergeRefs","refs","node","useMergeRefs","useMemo"],"mappings":";AAaA,MAAMA,IAAY,CAAUC,GAAqCC,MAAa;AAC1E,MAAID,KAAO,MAIX;AAAA,QAAI,OAAOA,KAAQ,YAAY;AAC3B,MAAAA,EAAIC,CAAK;AACT;AAAA,IACJ;AAEA,QAAI;AACA,MAAAD,EAAI,UAAUC;AAAA,IAClB,QAAgB;AACZ,YAAM,IAAI,MAAM,wBAAwBA,CAAK,aAAaD,CAAG,GAAG;AAAA,IACpE;AAAA;AACJ,GAQME,IAAY,IAAOC,MACd,CAACC,MAAmB;AACvB,EAAAD,EAAK,QAAQ,CAAAH,MAAO;AAChB,IAAAD,EAAUC,GAAKI,CAAI;AAAA,EACvB,CAAC;AACL,GASEC,IAAe,IAAOF,MACjBG,EAAQ,MAAMJ,EAAU,GAAGC,CAAI,GAAGA,CAAI;"}
1
+ {"version":3,"file":"useMergeRefs.js","sources":["../../src/hooks/useMergeRefs.ts"],"sourcesContent":["// forked from https://github.com/chakra-ui/chakra-ui/blob/main/packages/hooks/use-merge-refs/src/index.ts\n\nimport type React from 'react';\nimport { useMemo } from 'react';\n\nexport type ReactRef<T> = React.RefCallback<T> | React.MutableRefObject<T>;\n\n/**\n * Assigns a value to a React reference.\n *\n * @param ref - The React reference to assign the value to.\n * @param value - The value to assign to the reference.\n */\nconst assignRef = <T = any>(ref: ReactRef<T> | null | undefined, value: T) => {\n if (ref == null) {\n return;\n }\n\n if (typeof ref === 'function') {\n ref(value);\n return;\n }\n\n try {\n ref.current = value;\n } catch {\n throw new Error(`Cannot assign value '${value}' to ref '${ref}'`);\n }\n};\n\n/**\n * Merges multiple React references into a single callback ref.\n *\n * @param refs - The React references to merge.\n * @returns A callback function to assign the merged references to a node.\n */\nconst mergeRefs =\n <T>(...refs: (ReactRef<T> | null | undefined)[]) =>\n (node: T | null) => {\n refs.forEach(ref => {\n assignRef(ref, node);\n });\n };\n\n/**\n * Custom hook to merge multiple React references into a single callback ref.\n *\n * @param refs - The React references to merge.\n * @returns A memoized callback function to assign the merged references to a node.\n */\nconst useMergeRefs = <T>(...refs: (ReactRef<T> | null | undefined)[]) => useMemo(() => mergeRefs(...refs), refs);\n\nexport default useMergeRefs;\n"],"names":["assignRef","ref","value","mergeRefs","refs","node","useMergeRefs","useMemo"],"mappings":";AAaA,MAAMA,IAAY,CAAUC,GAAqCC,MAAa;AAC1E,MAAID,KAAO,MAIX;AAAA,QAAI,OAAOA,KAAQ,YAAY;AAC3B,MAAAA,EAAIC,CAAK;AACT;AAAA,IACJ;AAEA,QAAI;AACA,MAAAD,EAAI,UAAUC;AAAA,IAClB,QAAQ;AACJ,YAAM,IAAI,MAAM,wBAAwBA,CAAK,aAAaD,CAAG,GAAG;AAAA,IACpE;AAAA;AACJ,GAQME,IACF,IAAOC,MACP,CAACC,MAAmB;AAChB,EAAAD,EAAK,QAAQ,CAAAH,MAAO;AAChB,IAAAD,EAAUC,GAAKI,CAAI;AAAA,EACvB,CAAC;AACL,GAQEC,IAAe,IAAOF,MAA6CG,EAAQ,MAAMJ,EAAU,GAAGC,CAAI,GAAGA,CAAI;"}
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * Quoting from the React documentation:
7
7
  *
8
- * *In most cases, you don’t need this:*
8
+ * **In most cases, you don’t need this:**
9
9
  *
10
10
  * - *If the value you need can be computed entirely from the current props or other state, remove*
11
11
  * *that redundant state altogether. If you’re worried about recomputing too often, the useMemo Hook can help.*
@@ -1 +1 @@
1
- {"version":3,"file":"usePrevious.js","sources":["../../src/hooks/usePrevious.ts"],"sourcesContent":["import { useRef } from 'react';\nimport { isEqual } from 'es-toolkit/compat';\n\n// Based on the react beta docs, we avoid using an effect here but\n// use another state to store the previous value to compare to.\n// See: https://react.dev/reference/react/useState#storing-information-from-previous-renders\n\n/**\n * The usePrevious hook allows to easily access state from previous component render.\n * Instead of using a *React.ref* or a *useEffect*, this hook uses a *useState* internally to keep track of the\n * previous state value.\n *\n * Quoting from the React documentation:\n *\n * *In most cases, you don’t need this:*\n *\n * - *If the value you need can be computed entirely from the current props or other state, remove*\n * *that redundant state altogether. If you’re worried about recomputing too often, the useMemo Hook can help.*\n * - *If you want to reset the entire component tree’s state, pass a different key to your component.*\n * - *If you can, update all the relevant state in the event handlers.*\n *\n * @link https://react.dev/reference/react/useState#storing-information-from-previous-renders\n *\n * @param state The value of the current state to keep track of.\n * @returns\n */\nconst usePrevious = <T>(\n state: T,\n isEqualFunc?: ((value: T | null | undefined, current: T | null | undefined) => any) | undefined\n): T => {\n const ref = useRef<{ target: T; previous: T }>({ target: state, previous: state });\n\n if (isEqualFunc ? !isEqualFunc(state, ref.current.target) : !isEqual(state, ref.current.target)) {\n ref.current.previous = ref.current.target;\n ref.current.target = state;\n }\n\n return ref.current.previous;\n};\n\nexport default usePrevious;\n"],"names":["usePrevious","state","isEqualFunc","ref","useRef","isEqual"],"mappings":";;AA0BA,MAAMA,IAAc,CAChBC,GACAC,MACI;AACJ,QAAMC,IAAMC,EAAmC,EAAE,QAAQH,GAAO,UAAUA,GAAO;AAEjF,UAAIC,IAAc,CAACA,EAAYD,GAAOE,EAAI,QAAQ,MAAM,IAAI,CAACE,EAAQJ,GAAOE,EAAI,QAAQ,MAAM,OAC1FA,EAAI,QAAQ,WAAWA,EAAI,QAAQ,QACnCA,EAAI,QAAQ,SAASF,IAGlBE,EAAI,QAAQ;AACvB;"}
1
+ {"version":3,"file":"usePrevious.js","sources":["../../src/hooks/usePrevious.ts"],"sourcesContent":["import { useRef } from 'react';\nimport { isEqual } from 'es-toolkit/compat';\n\n// Based on the react beta docs, we avoid using an effect here but\n// use another state to store the previous value to compare to.\n// See: https://react.dev/reference/react/useState#storing-information-from-previous-renders\n\n/**\n * The usePrevious hook allows to easily access state from previous component render.\n * Instead of using a *React.ref* or a *useEffect*, this hook uses a *useState* internally to keep track of the\n * previous state value.\n *\n * Quoting from the React documentation:\n *\n * **In most cases, you don’t need this:**\n *\n * - *If the value you need can be computed entirely from the current props or other state, remove*\n * *that redundant state altogether. If you’re worried about recomputing too often, the useMemo Hook can help.*\n * - *If you want to reset the entire component tree’s state, pass a different key to your component.*\n * - *If you can, update all the relevant state in the event handlers.*\n *\n * @link https://react.dev/reference/react/useState#storing-information-from-previous-renders\n *\n * @param state The value of the current state to keep track of.\n * @returns\n */\nconst usePrevious = <T>(\n state: T,\n isEqualFunc?: ((value: T | null | undefined, current: T | null | undefined) => any) | undefined\n): T => {\n const ref = useRef<{ target: T; previous: T }>({ target: state, previous: state });\n\n if (isEqualFunc ? !isEqualFunc(state, ref.current.target) : !isEqual(state, ref.current.target)) {\n ref.current.previous = ref.current.target;\n ref.current.target = state;\n }\n\n return ref.current.previous;\n};\n\nexport default usePrevious;\n"],"names":["usePrevious","state","isEqualFunc","ref","useRef","isEqual"],"mappings":";;AA0BA,MAAMA,IAAc,CAChBC,GACAC,MACI;AACJ,QAAMC,IAAMC,EAAmC,EAAE,QAAQH,GAAO,UAAUA,GAAO;AAEjF,UAAIC,IAAc,CAACA,EAAYD,GAAOE,EAAI,QAAQ,MAAM,IAAI,CAACE,EAAQJ,GAAOE,EAAI,QAAQ,MAAM,OAC1FA,EAAI,QAAQ,WAAWA,EAAI,QAAQ,QACnCA,EAAI,QAAQ,SAASF,IAGlBE,EAAI,QAAQ;AACvB;"}
@@ -1,18 +1,33 @@
1
- import { useState as l, useRef as o, useCallback as c, useLayoutEffect as b } from "react";
2
- const z = () => {
3
- const [r, u] = l(null), e = o(null), n = o(null), t = c(() => n.current?.disconnect(), []), s = c(() => {
4
- n.current = new ResizeObserver(([i]) => u(i)), e.current && n.current.observe(e.current);
5
- }, [e]);
6
- return b(() => (s(), () => t()), [t, s]), [
1
+ import { useState as d, useRef as u, useCallback as a, useLayoutEffect as f } from "react";
2
+ const c = (e) => {
3
+ const n = e?.borderBoxSize?.at(0);
4
+ return {
5
+ blockSize: n?.blockSize ?? e?.contentRect.height,
6
+ inlineSize: n?.inlineSize ?? e?.contentRect.width
7
+ };
8
+ }, v = () => {
9
+ const [e, n] = d(null), t = u(null), o = u(null), s = a(() => o.current?.disconnect(), []), l = a(() => {
10
+ o.current = new ResizeObserver(([i]) => {
11
+ n((r) => {
12
+ if (!r)
13
+ return i;
14
+ const S = c(r), b = c(i);
15
+ return r.target === i.target && S.blockSize === b.blockSize && S.inlineSize === b.inlineSize ? r : i;
16
+ });
17
+ }), t.current && o.current.observe(t.current);
18
+ }, [t]);
19
+ f(() => (l(), () => s()), [s, l]);
20
+ const z = c(e);
21
+ return [
22
+ t,
7
23
  e,
8
- r,
9
24
  {
10
- blockSize: r?.borderBoxSize?.at(0)?.blockSize,
11
- inlineSize: r?.borderBoxSize?.at(0)?.inlineSize
25
+ blockSize: z.blockSize,
26
+ inlineSize: z.inlineSize
12
27
  }
13
28
  ];
14
29
  };
15
30
  export {
16
- z as default
31
+ v as default
17
32
  };
18
33
  //# sourceMappingURL=useResizeObserver.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useResizeObserver.js","sources":["../../src/hooks/useResizeObserver.ts"],"sourcesContent":["// inspired from https://tobbelindstrom.com/blog/resize-observer-hook/\n\nimport { useRef, useLayoutEffect, useState, useCallback, type MutableRefObject } from 'react';\n\n/**\n * Custom hook for observing element resize.\n * @returns\n */\nconst useResizeObserver = <T extends HTMLElement = HTMLDivElement>(): [\n MutableRefObject<T | null>,\n ResizeObserverEntry | null,\n { blockSize: number | undefined; inlineSize: number | undefined },\n] => {\n const [observerEntry, setObserverEntry] = useState<ResizeObserverEntry | null>(null);\n\n const nodeRef = useRef<T | null>(null);\n\n const observer = useRef<ResizeObserver | null>(null);\n\n const disconnect = useCallback(() => observer.current?.disconnect(), []);\n\n const observe = useCallback(() => {\n observer.current = new ResizeObserver(([entry]) => setObserverEntry(entry));\n if (nodeRef.current) {\n observer.current.observe(nodeRef.current);\n }\n }, [nodeRef]);\n\n useLayoutEffect(() => {\n observe();\n return () => disconnect();\n }, [disconnect, observe]);\n\n return [\n nodeRef,\n observerEntry,\n {\n blockSize: observerEntry?.borderBoxSize?.at(0)?.blockSize,\n inlineSize: observerEntry?.borderBoxSize?.at(0)?.inlineSize,\n },\n ];\n};\nexport default useResizeObserver;\n"],"names":["useResizeObserver","observerEntry","setObserverEntry","useState","nodeRef","useRef","observer","disconnect","useCallback","observe","entry","useLayoutEffect"],"mappings":";AAQA,MAAMA,IAAoB,MAIrB;AACD,QAAM,CAACC,GAAeC,CAAgB,IAAIC,EAAqC,IAAI,GAE7EC,IAAUC,EAAiB,IAAI,GAE/BC,IAAWD,EAA8B,IAAI,GAE7CE,IAAaC,EAAY,MAAMF,EAAS,SAAS,WAAA,GAAc,EAAE,GAEjEG,IAAUD,EAAY,MAAM;AAC9B,IAAAF,EAAS,UAAU,IAAI,eAAe,CAAC,CAACI,CAAK,MAAMR,EAAiBQ,CAAK,CAAC,GACtEN,EAAQ,WACRE,EAAS,QAAQ,QAAQF,EAAQ,OAAO;AAAA,EAEhD,GAAG,CAACA,CAAO,CAAC;AAEZ,SAAAO,EAAgB,OACZF,EAAA,GACO,MAAMF,EAAA,IACd,CAACA,GAAYE,CAAO,CAAC,GAEjB;AAAA,IACHL;AAAA,IACAH;AAAA,IACA;AAAA,MACI,WAAWA,GAAe,eAAe,GAAG,CAAC,GAAG;AAAA,MAChD,YAAYA,GAAe,eAAe,GAAG,CAAC,GAAG;AAAA,IAAA;AAAA,EACrD;AAER;"}
1
+ {"version":3,"file":"useResizeObserver.js","sources":["../../src/hooks/useResizeObserver.ts"],"sourcesContent":["// inspired from https://tobbelindstrom.com/blog/resize-observer-hook/\n\nimport { useRef, useLayoutEffect, useState, useCallback, type MutableRefObject } from 'react';\n\nconst getObservedSize = (entry: ResizeObserverEntry | null) => {\n const borderBoxSize = entry?.borderBoxSize?.at(0);\n\n return {\n blockSize: borderBoxSize?.blockSize ?? entry?.contentRect.height,\n inlineSize: borderBoxSize?.inlineSize ?? entry?.contentRect.width,\n };\n};\n\n/**\n * Custom hook for observing element resize.\n * @returns\n */\nconst useResizeObserver = <T extends HTMLElement = HTMLDivElement>(): [\n MutableRefObject<T | null>,\n ResizeObserverEntry | null,\n { blockSize: number | undefined; inlineSize: number | undefined },\n] => {\n const [observerEntry, setObserverEntry] = useState<ResizeObserverEntry | null>(null);\n\n const nodeRef = useRef<T | null>(null);\n\n const observer = useRef<ResizeObserver | null>(null);\n\n const disconnect = useCallback(() => observer.current?.disconnect(), []);\n\n const observe = useCallback(() => {\n observer.current = new ResizeObserver(([entry]) => {\n setObserverEntry(previousEntry => {\n if (!previousEntry) {\n return entry;\n }\n\n const previousSize = getObservedSize(previousEntry);\n const nextSize = getObservedSize(entry);\n\n return previousEntry.target === entry.target &&\n previousSize.blockSize === nextSize.blockSize &&\n previousSize.inlineSize === nextSize.inlineSize\n ? previousEntry\n : entry;\n });\n });\n if (nodeRef.current) {\n observer.current.observe(nodeRef.current);\n }\n }, [nodeRef]);\n\n useLayoutEffect(() => {\n observe();\n return () => disconnect();\n }, [disconnect, observe]);\n\n const observedSize = getObservedSize(observerEntry);\n\n return [\n nodeRef,\n observerEntry,\n {\n blockSize: observedSize.blockSize,\n inlineSize: observedSize.inlineSize,\n },\n ];\n};\nexport default useResizeObserver;\n"],"names":["getObservedSize","entry","borderBoxSize","useResizeObserver","observerEntry","setObserverEntry","useState","nodeRef","useRef","observer","disconnect","useCallback","observe","previousEntry","previousSize","nextSize","useLayoutEffect","observedSize"],"mappings":";AAIA,MAAMA,IAAkB,CAACC,MAAsC;AAC3D,QAAMC,IAAgBD,GAAO,eAAe,GAAG,CAAC;AAEhD,SAAO;AAAA,IACH,WAAWC,GAAe,aAAaD,GAAO,YAAY;AAAA,IAC1D,YAAYC,GAAe,cAAcD,GAAO,YAAY;AAAA,EAAA;AAEpE,GAMME,IAAoB,MAIrB;AACD,QAAM,CAACC,GAAeC,CAAgB,IAAIC,EAAqC,IAAI,GAE7EC,IAAUC,EAAiB,IAAI,GAE/BC,IAAWD,EAA8B,IAAI,GAE7CE,IAAaC,EAAY,MAAMF,EAAS,SAAS,WAAA,GAAc,EAAE,GAEjEG,IAAUD,EAAY,MAAM;AAC9B,IAAAF,EAAS,UAAU,IAAI,eAAe,CAAC,CAACR,CAAK,MAAM;AAC/C,MAAAI,EAAiB,CAAAQ,MAAiB;AAC9B,YAAI,CAACA;AACD,iBAAOZ;AAGX,cAAMa,IAAed,EAAgBa,CAAa,GAC5CE,IAAWf,EAAgBC,CAAK;AAEtC,eAAOY,EAAc,WAAWZ,EAAM,UAClCa,EAAa,cAAcC,EAAS,aACpCD,EAAa,eAAeC,EAAS,aACnCF,IACAZ;AAAA,MACV,CAAC;AAAA,IACL,CAAC,GACGM,EAAQ,WACRE,EAAS,QAAQ,QAAQF,EAAQ,OAAO;AAAA,EAEhD,GAAG,CAACA,CAAO,CAAC;AAEZ,EAAAS,EAAgB,OACZJ,EAAA,GACO,MAAMF,EAAA,IACd,CAACA,GAAYE,CAAO,CAAC;AAExB,QAAMK,IAAejB,EAAgBI,CAAa;AAElD,SAAO;AAAA,IACHG;AAAA,IACAH;AAAA,IACA;AAAA,MACI,WAAWa,EAAa;AAAA,MACxB,YAAYA,EAAa;AAAA,IAAA;AAAA,EAC7B;AAER;"}